diff --git a/.dependency-cruiser.cjs b/.dependency-cruiser.cjs new file mode 100644 index 0000000..383f0ca --- /dev/null +++ b/.dependency-cruiser.cjs @@ -0,0 +1,92 @@ +// @ts-check +// Deep-module enforcement for dependency-cruiser. +// +// Each package under the packages root is a DEEP MODULE: a lot of behaviour +// behind a small interface. A package's PUBLIC SURFACE is its ENTRY POINT: +// src/index.ts, re-exported through the package manifest's "." export. +// Everything else in src/ is private implementation. Apps (in apps/) are not +// packages: they import packages through their entry points and each other +// not at all. +// +// The only thing you should ever need to edit here is PACKAGES_ROOT. + +/** Where packages live. One immediate child dir per package (flat, no nesting). */ +const PACKAGES_ROOT = "packages"; + +// --- derived patterns (no need to edit) ------------------------------------- +const R = PACKAGES_ROOT; +/** + * A package's private internals: anything inside src/ except the entry + * point itself. src/index.ts is NOT matched (it stays importable from + * outside); every other file in src/ IS matched, at root level or nested. + */ +const PACKAGE_INTERNALS = `^${R}/[^/]+/src/(?!index\\.ts$).+`; + +/** Test folders: a package's test/ directory. */ +const PACKAGE_TESTS = `^${R}/([^/]+)/tests?/`; +const PACKAGE_OWN_TESTS = `^${R}/$1/tests?/`; + +/** @type {import('dependency-cruiser').IConfiguration} */ +module.exports = { + forbidden: [ + { + name: "entrypoint-boundary-from-app", + comment: + "App/root code may import a package's entry point (its src/index.ts, re-exported as the package root), but nothing else inside the package.", + severity: "error", + from: { pathNot: `^${R}/` }, // importer is NOT inside any package + to: { path: PACKAGE_INTERNALS }, + }, + { + name: "entrypoint-boundary-across-packages", + comment: + "A package's own files import each other freely, but may reach OTHER packages only through their entry points, never their internals.", + severity: "error", + // importer is inside a package ($1), but is not a test file + from: { path: `^${R}/([^/]+)/`, pathNot: PACKAGE_TESTS }, + to: { + path: PACKAGE_INTERNALS, + pathNot: `^${R}/$1/`, // same package → intra-package freedom + }, + }, + { + name: "tests-through-entrypoints", + comment: + "A package's tests exercise it through its entry points like everyone else: they may import any package's entry points and their own test/ fixtures, but never any package's internals, not even their own.", + severity: "error", + from: { path: `^${R}/([^/]+)/tests?/` }, // a test file, in package $1 + to: { + path: PACKAGE_INTERNALS, + pathNot: PACKAGE_OWN_TESTS, // own tests/ fixtures → allowed + }, + }, + { + name: "tests-folder-is-private", + comment: + "A package's tests/ folder is reachable only from tests: nothing else may import fixtures.", + severity: "error", + from: { pathNot: PACKAGE_TESTS }, // importer is not itself a test + to: { path: `^${R}/[^/]+/tests?/` }, + }, + { + name: "no-circular", + comment: "No dependency cycles.", + severity: "error", + from: {}, + to: { circular: true }, + }, + ], + options: { + // TypeScript 7 has no stable API; parse with SWC so .ts files are actually + // cruised (without this depcruise silently skips them). + parser: "swc", + doNotFollow: { path: "node_modules" }, + exclude: { + path: "(^|/)(node_modules|dist|target|\\.direnv|\\.alchemy)/", + }, + tsConfig: { fileName: "tsconfig.json" }, + enhancedResolveOptions: { + extensions: [".ts", ".tsx", ".js", ".jsx", ".json"], + }, + }, +}; diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 9f418a7..573a0ac 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -13,12 +13,16 @@ jobs: - uses: oven-sh/setup-bun@v2 with: bun-version: "1.3.14" + - uses: dtolnay/rust-toolchain@stable - run: bun install --frozen-lockfile --ignore-scripts - run: bun run prepare - run: bun run check - run: bun run test - run: bun run lint - run: bun run fmt:check + - run: cargo check --workspace + - run: cargo test --workspace + - run: cargo fmt --all -- --check - uses: DeterminateSystems/determinate-nix-action@v3 - run: nix flake check - run: docker compose -f ops/compose/local.yaml config diff --git a/.oxfmtrc.json b/.oxfmtrc.json index 0963496..4cbaf12 100644 --- a/.oxfmtrc.json +++ b/.oxfmtrc.json @@ -1,6 +1,12 @@ { "$schema": "./node_modules/oxfmt/configuration_schema.json", "printWidth": 80, - "ignorePatterns": ["**/*.sops.yaml"], + "ignorePatterns": [ + "**/*.sops.yaml", + "**/routeTree.gen.ts", + ".agents/**", + "packages/tooling/src/secrets.yaml", + "vendor/**" + ], "sortPackageJson": true } diff --git a/AGENTS.md b/AGENTS.md index a5c8cce..e8ac2f9 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,25 +1,34 @@ -# Darkmatter Production-Ready Template +# Darkmatter Effect Agent Harness Template -Bun + Effect web application with a deliberately structured operational -surface. This is the org reference for the preferred TypeScript toolchain -(Bun, tsgo, oxlint/oxfmt) and a Nix flake-parts + Prelude devshell, without -treating `ops/` as a junk drawer. +Bun + Effect agent harness with a Tauri desktop shell, a bounded Rust process +supervisor, and a deliberately structured operational surface. This is the org +reference for clean Effect-native TypeScript and the preferred toolchain (Bun, +tsgo, oxlint/oxfmt, Nix flake-parts + Prelude). ## Repository layout -| Path | Purpose | -| -------------------- | ---------------------------------------------------------------- | -| `apps/web/` | Demo web app (`@ops-demo/web`) — Effect/Bun HTTP server | -| `packages/web-core/` | Framework-independent domain logic (`@repo/web-core`) | -| `packages/tooling/` | Shared TypeScript and Oxc configuration (`@repo/tooling`) | -| `flake.nix` | Root flake — stays at root because Nix discovers flakes there | -| `flake/` | Thin public Nix-output layer (apps, checks, devShells, packages) | -| `nix/demo/` | Nix package and smoke-check implementation | -| `nix/prelude.nix` | Prelude command catalogue (`x` menu, MOTD, docs) | -| `ops/` | Operational surface — see [ops/README.md](ops/README.md) | -| `tests/` | Cross-package smoke tests | -| `docs/` | Architecture and getting-started docs | -| `.github/workflows/` | CI pipeline | +| Path | Purpose | +| -------------------------- | ---------------------------------------------------------------- | +| `apps/cli/` | Effect CLI and terminal rendering boundary | +| `apps/harnessd/` | Typed harness HTTP API and long-lived Bun server | +| `apps/web/` | Status/architecture page (`@agent-demo/web`) — Effect/Bun server | +| `apps/native/` | Tauri shell and managed Effect runtime boundary | +| `packages/agent-core/` | Stable schemas, services, journal, and agent loop | +| `packages/agent-demo/` | Provider-free model/tool layers shared by runnable apps | +| `packages/agent-runtime/` | Effect AI and sandbox adapters | +| `packages/agent-testkit/` | Scripted model and deterministic test layers | +| `packages/sandbox-client/` | Schema contract for the Rust supervisor | +| `packages/web-core/` | Framework-independent status and metrics helpers | +| `packages/tooling/` | Shared TypeScript and Oxc configuration | +| `crates/agent-sandboxd/` | Bounded NDJSON process supervisor | +| `flake.nix` | Root flake — stays at root because Nix discovers flakes there | +| `flake/` | Thin public Nix-output layer (apps, checks, devShells, packages) | +| `nix/demo/` | Nix package and smoke-check implementation | +| `nix/prelude.nix` | Prelude command catalogue (`x` menu, MOTD, docs) | +| `ops/` | Operational surface — see [ops/README.md](ops/README.md) | +| `tests/` | Cross-package smoke tests | +| `docs/` | Architecture and getting-started docs | +| `.github/workflows/` | CI pipeline | ### `ops/` boundary @@ -55,9 +64,10 @@ application schema still belongs beside the application that uses it. Split files that exceed this. - oxfmt is configured at 80 print width and sorts `package.json` keys. Prettier is disabled in Zed — oxfmt is the only formatter. -- The root `bun run check` runs `tsc` then per-package `tsc --noEmit` for - `@ops-demo/web` and `@repo/web-core`. New packages with a `typecheck` - script should be added to this chain. +- The root `bun run check` runs root `tsc` then every workspace package's + `typecheck` script through Bun's workspace filter. +- Rust uses the root Cargo workspace. Run `cargo check --workspace` and + `cargo test --workspace` after changing the supervisor or its protocol. ### Nix devshell @@ -66,6 +76,8 @@ automatic entry). Inside the shell: - `x` — interactive command picker - `x dev` — run the Effect/Bun demo server +- `x cli` — run the deterministic harness CLI +- `x harnessd` — run the typed harness daemon - `x check` — tsgo typecheck - `x test` — Vitest - `x lint` — oxlint @@ -95,12 +107,29 @@ After changing `package.json` dependencies, regenerate the Nix lock: ## Application architecture -The application is intentionally small. `apps/web` serves a static front -page, a `/api/status` endpoint, and Prometheus-compatible `/api/metrics` -through Effect and Bun (`@effect/platform-bun`). +The demo is an Effect-native agent harness. `packages/agent-core` owns branded +IDs, schema-backed requests/decisions/results/events/errors, capability +services, an in-memory event journal, and the bounded sequential agent loop. +`AgentHarness.layerNoDeps` captures its model, tool, journal, and configuration +dependencies so its public operation has no hidden environment requirement. -Domain helpers live in `packages/web-core` so they can be tested without -the HTTP server: +Provider and process details point inward from adapters. Only +`packages/agent-runtime` may import `effect/unstable/ai`. +`packages/sandbox-client` owns the tagged wire protocol implemented by +`crates/agent-sandboxd`. The Rust daemon supervises processes but is not a +security sandbox. + +`packages/agent-demo` supplies one deterministic, schema-validated tool +round-trip without provider credentials. `apps/cli`, `apps/harnessd`, and +`apps/native` consume this same layer; application entrypoints must not copy or +reimplement the harness loop. + +`apps/native` creates one `ManagedRuntime` for UI callback execution and +disposes it with the application lifecycle. `apps/web` remains the operational +shell, serving a static architecture page, `/api/status`, and Prometheus-ready +`/api/metrics` through Effect and Bun. + +Web support helpers live in `packages/web-core`: - `AppConfig` — Effect service reading `HOST`, `PORT`, `APP_ENV`, `APP_RELEASE`, and the optional redacted `DEMO_MESSAGE`; the web adapter can @@ -121,8 +150,10 @@ image reference. Production uses a digest rather than a mutable image tag. ## Testing -- Unit tests live next to the code they test (`packages/web-core/test/`). - They use `@effect/vitest` with `it.effect` and test layers. +- Unit tests live next to the code they test. They use `@effect/vitest` with + `it.effect` and fresh layers; do not wrap `it.effect` in `Effect.scoped`. +- `packages/agent-testkit` replaces model and tool services with deterministic + layers while exercising the real harness and journal. - Smoke tests live in `tests/` and spawn the real server to verify the status API and front page end-to-end. - Test files match `**/*.test.ts`. Vitest excludes `.direnv/**`. @@ -150,8 +181,9 @@ image reference. Production uses a digest rather than a mutable image tag. 4. `bun run test` 5. `bun run lint` 6. `bun run fmt:check` -7. `nix flake check` -8. `docker compose -f ops/compose/local.yaml config` +7. `cargo check --workspace`, `cargo test --workspace`, and Rust formatting +8. `nix flake check` +9. `docker compose -f ops/compose/local.yaml config` All steps must pass. The `--ignore-scripts` install flag means no postinstall scripts run in CI — the `prepare` step handles patching. @@ -165,6 +197,8 @@ bun run check bun run test bun run lint bun run fmt:check +cargo check --workspace +cargo test --workspace nix flake check docker compose -f ops/compose/local.yaml config ``` diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..0070770 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,114 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "agent-sandboxd" +version = "0.1.0" +dependencies = [ + "libc", + "serde", + "serde_json", +] + +[[package]] +name = "itoa" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" + +[[package]] +name = "libc" +version = "0.2.189" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3eaf3ede3fee6db1a4c2ee091bf8a8b4dccdc6d17f656fb07896ee72867612f2" + +[[package]] +name = "memchr" +version = "2.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" + +[[package]] +name = "proc-macro2" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.47" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "serde" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.229" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "syn" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6275cddf4610d1775e6d1fe9469b2e77d0f39fd98fb7450901b821e0c53649f" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "unicode-ident" +version = "1.0.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75" + +[[package]] +name = "zmij" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..c3fde55 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,14 @@ +[workspace] +members = ["crates/agent-sandboxd"] +exclude = ["apps/native/src-tauri"] +resolver = "2" + +[workspace.package] +edition = "2021" +license = "MIT" +rust-version = "1.77.2" + +[workspace.dependencies] +libc = "0.2" +serde = { version = "1.0", features = ["derive"] } +serde_json = "1.0" diff --git a/README.md b/README.md index 9963b2b..d5cbb18 100644 --- a/README.md +++ b/README.md @@ -1,82 +1,103 @@ -# Ops monorepo demo - -A small Bun + Effect web application with a deliberately structured -operational surface. It is the org reference for the preferred TypeScript -toolchain (Bun, tsgo, oxlint/oxfmt) and a Nix flake-parts + Prelude -devshell, without treating `ops/` as a junk drawer. - -## Install - -Enter the Nix development shell (direnv will do this after `direnv allow`): +# Effect agent harness demo + +A production-shaped monorepo whose demo is a deliberately small agent harness. +The interesting part is the code architecture: Effect schemas describe every +boundary, services state capabilities, layers assemble implementations, and +tests swap the model and tools without mocks or global state. + +The repository does not ship a model credential or pretend that arbitrary +process execution is safe. The AI provider is an adapter seam, and the Rust +worker is a bounded process supervisor—not a security sandbox. + +## Tour + +| Path | Purpose | +| -------------------------- | --------------------------------------------------------------- | +| `apps/cli/` | Effect CLI for local and operator-driven harness runs | +| `apps/harnessd/` | Typed HTTP API and long-lived Bun runtime boundary | +| `apps/native/` | Tauri shell with one managed Effect runtime at the UI boundary | +| `apps/web/` | Small Bun status server and architecture landing page | +| `packages/agent-core/` | Stable schemas, errors, services, event journal, and agent loop | +| `packages/agent-demo/` | Shared provider-free model, tool, and runnable demo layer | +| `packages/agent-runtime/` | Isolated `effect/unstable/ai` and supervised-shell adapters | +| `packages/agent-testkit/` | Scripted model and deterministic tool layers | +| `packages/infra/` | Alchemy stack composition for the deployable web surface | +| `packages/sandbox-client/` | Effect Schema contract shared with the Rust worker | +| `crates/agent-sandboxd/` | NDJSON process supervisor with deadlines and output bounds | + +Start with [`packages/agent-core/src/services/agent-harness.ts`](packages/agent-core/src/services/agent-harness.ts), +then read [`packages/agent-testkit/test/agent-harness.test.ts`](packages/agent-testkit/test/agent-harness.test.ts). +The test is the shortest executable explanation of the design. + +## Use it ```sh nix develop bun install +x test +x dev ``` -## Usage +Open . The status API is `/api/status`; metrics are at +`/api/metrics`. -```sh -x # interactive command picker -x dev # Effect/Bun demo server -x check # tsgo typecheck -x test # Vitest -x lint # oxlint -x fmt # treefmt (alejandra + oxfmt) -``` - -Open , or verify the API directly: +Run the deterministic harness from the terminal: ```sh -curl http://localhost:3000/api/status +bun run cli run --events "Explain the harness boundaries" ``` -Run the packaged application without entering a shell: +Or start the daemon and submit the same run over its schema-described API: ```sh -nix run . +bun run harnessd +curl -sS http://127.0.0.1:4319/runs \ + -H 'content-type: application/json' \ + -d '{"goal":"Explain the harness boundaries"}' ``` -Run the equivalent containerized stack: - -```sh -docker compose -f ops/compose/local.yaml up --build -``` +The daemon publishes its OpenAPI document at +. -Set `OPS_DEMO_PORT` if port 3000 is already in use. - -## SOPS config in the web app - -The existing web app can add the checked-in encrypted Kubernetes Secret to its -Effect config provider chain through `alchemy-sops@0.8.1`. Environment values -remain primary, and the status endpoint reports only whether `DEMO_MESSAGE` was -configured; the decrypted value never enters the response. - -Run the identity-free provider integration test: +Validate both language stacks: ```sh -bun run test -- apps/web/test/sops-config.test.ts +bun run check +bun run test +bun run lint +bun run fmt:check +cargo check --workspace +cargo test --workspace ``` -To run the app against the real decrypt path after replacing the demo SOPS -recipient with your team recipient, follow -[ops/secrets/README.md](ops/secrets/README.md). - -## Layout - -- `apps/` and `packages/` are application source and reusable code. -- `flake.nix` and `flake.lock` remain at the root because Nix discovers flakes there. -- `flake/` is the intentionally thin public Nix-output layer. -- `nix/demo/` holds the Nix package implementation. -- `nix/prelude.nix` is the Prelude command catalogue. -- `ops/` contains operational configuration: containers, deployment bases, environment bindings, SOPS material, observability, and policies. - -See [ops/README.md](ops/README.md) for the boundary of each operational directory. - -## Contributing - -See [AGENTS.md](AGENTS.md) for the toolchain contract. Verify with -`bun run check`, `bun run test`, `bun run lint`, and `nix flake check`. +## Design notes + +- `agent-core` imports no provider SDK, desktop framework, or process API. +- CLI, daemon, and desktop consume the same `DemoHarnessLayer`; none owns a + second orchestration loop. +- `AgentHarness.layerNoDeps` captures its dependencies once and exposes an + operation with no hidden environment requirement. +- Domain failures use schema-backed tagged errors and remain recoverable. +- The in-memory journal uses `Ref`, `PubSub`, and `Stream`, bounding retained + histories while returning each terminal snapshot atomically; persistence can + replace its layer without changing the loop. +- The Effect AI beta surface is quarantined in `agent-runtime` so version drift + cannot spread through the domain. +- Tauri owns callback execution through one `ManagedRuntime`; libraries only + describe effects. +- Alchemy owns infrastructure composition, not the application agent runtime. + +See [the architecture guide](docs/architecture.md) for dependency direction and +[the canonical patterns note](docs/10-effect-solutions.md) for the version-pinned +Effect and Alchemy decisions. + +## Operations + +`ops/` remains the repository's operational boundary for containers, +environments, deployment, SOPS material, observability, and policy. See +[`ops/README.md`](ops/README.md). The web config can add an encrypted SOPS +document behind environment config through `alchemy-sops`; decrypted values +never enter the status payload. ## License diff --git a/apps/cli/package.json b/apps/cli/package.json new file mode 100644 index 0000000..465c433 --- /dev/null +++ b/apps/cli/package.json @@ -0,0 +1,31 @@ +{ + "name": "@agent-demo/cli", + "version": "0.1.0", + "private": true, + "bin": { + "harness": "./src/main.ts" + }, + "type": "module", + "imports": { + "#*": "./src/*" + }, + "scripts": { + "dev": "bun src/main.ts", + "test": "vitest run test", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@effect/platform-bun": "catalog:", + "@repo/agent-core": "workspace:*", + "@repo/agent-demo": "workspace:*", + "effect": "catalog:" + }, + "devDependencies": { + "@effect/vitest": "catalog:", + "@repo/tooling": "workspace:*", + "@types/bun": "catalog:", + "@types/node": "catalog:", + "typescript": "catalog:", + "vitest": "catalog:" + } +} diff --git a/apps/cli/src/command.ts b/apps/cli/src/command.ts new file mode 100644 index 0000000..e766107 --- /dev/null +++ b/apps/cli/src/command.ts @@ -0,0 +1,59 @@ +import { Goal, RunId } from "@repo/agent-core"; +import { DemoHarnessLayer } from "@repo/agent-demo"; +import { Console, Effect } from "effect"; +import { Argument, Command, Flag } from "effect/unstable/cli"; + +import { runDemo } from "#demo-run.ts"; +import { renderJson, renderText } from "#render.ts"; + +const goal = Argument.string("goal").pipe( + Argument.withSchema(Goal), + Argument.withDescription("Goal for the deterministic demo agent"), +); + +const runId = Flag.string("run-id").pipe( + Flag.withSchema(RunId), + Flag.withDefault(RunId.make("cli-demo")), + Flag.withDescription("Stable identifier used by the run journal"), +); + +const run = Command.make( + "run", + { + events: Flag.boolean("events").pipe( + Flag.withDescription("Print the journal after the answer"), + ), + goal, + json: Flag.boolean("json").pipe( + Flag.withDescription("Emit the schema-encoded run as JSON"), + ), + runId, + }, + ({ events, goal, json, runId }) => + Effect.gen(function* () { + const result = yield* runDemo(goal, runId); + const lines = json + ? [yield* renderJson(result)] + : renderText(result, events); + yield* Effect.forEach(lines, (line) => Console.log(line), { + discard: true, + }); + }), +).pipe( + Command.withDescription( + "Run the provider-free deterministic harness; no credentials are used", + ), + Command.withExamples([ + { command: 'harness run "Describe this harness"' }, + { command: 'harness run --events "Show the Effect boundaries"' }, + { command: 'harness run --json "Describe this harness"' }, + ]), + Command.provide(DemoHarnessLayer), +); + +export const harnessCommand = Command.make("harness").pipe( + Command.withDescription("Inspect the Effect-native agent harness demo"), + Command.withSubcommands([run]), +); + +export const program = Command.run(harnessCommand, { version: "0.1.0" }); diff --git a/apps/cli/src/demo-run.ts b/apps/cli/src/demo-run.ts new file mode 100644 index 0000000..5565168 --- /dev/null +++ b/apps/cli/src/demo-run.ts @@ -0,0 +1,10 @@ +import { AgentHarness, RunId, RunRequest } from "@repo/agent-core"; +import { Effect } from "effect"; + +export const runDemo = Effect.fn("Cli.runDemo")(function* ( + goal: string, + runId: RunId, +) { + const harness = yield* AgentHarness; + return yield* harness.run(new RunRequest({ goal, id: runId })); +}); diff --git a/apps/cli/src/main.ts b/apps/cli/src/main.ts new file mode 100755 index 0000000..a2e2baa --- /dev/null +++ b/apps/cli/src/main.ts @@ -0,0 +1,8 @@ +#!/usr/bin/env bun + +import { BunRuntime, BunServices } from "@effect/platform-bun"; +import { Effect } from "effect"; + +import { program } from "#command.ts"; + +BunRuntime.runMain(program.pipe(Effect.provide(BunServices.layer))); diff --git a/apps/cli/src/render.ts b/apps/cli/src/render.ts new file mode 100644 index 0000000..d01a923 --- /dev/null +++ b/apps/cli/src/render.ts @@ -0,0 +1,31 @@ +import { type AgentEvent, RunReport } from "@repo/agent-core"; +import { Effect, Schema } from "effect"; + +const encodeRunReport = Schema.encodeEffect(Schema.fromJsonString(RunReport)); + +export const renderEvent = (event: AgentEvent): string => { + switch (event._tag) { + case "RunStarted": + return `started goal=${event.goal}`; + case "ToolRequested": + return `tool.requested step=${event.step} tool=${event.call.name}`; + case "ToolCompleted": + return `tool.completed step=${event.step} call=${event.result.callId}`; + case "RunCompleted": + return `completed steps=${event.steps}`; + case "RunFailed": + return `failed kind=${event.error._tag}`; + } +}; + +export const renderText = (run: RunReport, showEvents: boolean) => { + const unit = run.summary.steps === 1 ? "step" : "steps"; + return [ + `run ${run.summary.id} completed in ${run.summary.steps} ${unit}`, + run.summary.answer, + ...(showEvents ? run.events.map(renderEvent) : []), + ]; +}; + +export const renderJson = (run: RunReport): Effect.Effect => + encodeRunReport(run).pipe(Effect.orDie); diff --git a/apps/cli/test/render.test.ts b/apps/cli/test/render.test.ts new file mode 100644 index 0000000..0c320a6 --- /dev/null +++ b/apps/cli/test/render.test.ts @@ -0,0 +1,43 @@ +import { + RunCompleted, + RunId, + RunReport, + RunStarted, + RunSummary, +} from "@repo/agent-core"; +import { it } from "@effect/vitest"; +import { Effect, Schema } from "effect"; +import { expect } from "vitest"; + +import { renderJson, renderText } from "../src/render.ts"; + +const runId = RunId.make("cli-test"); +const run = new RunReport({ + events: [ + new RunStarted({ at: 1, goal: "Inspect the harness", runId }), + new RunCompleted({ answer: "Done", at: 2, runId, steps: 1 }), + ], + summary: new RunSummary({ answer: "Done", id: runId, steps: 1 }), +}); + +it("renders concise text with optional journal events", () => { + expect(renderText(run, false)).toEqual([ + "run cli-test completed in 1 step", + "Done", + ]); + expect(renderText(run, true)).toContain("started goal=Inspect the harness"); +}); + +it.effect("encodes machine output through the report schema", () => + Effect.gen(function* () { + const json = yield* renderJson(run); + const decoded = yield* Schema.decodeEffect( + Schema.fromJsonString(RunReport), + )(json); + expect(decoded.summary).toMatchObject({ + answer: "Done", + id: "cli-test", + steps: 1, + }); + }), +); diff --git a/apps/cli/tsconfig.json b/apps/cli/tsconfig.json new file mode 100644 index 0000000..4c16b38 --- /dev/null +++ b/apps/cli/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "@repo/tooling/tsconfig", + "compilerOptions": { + "types": ["node", "bun"], + "paths": { + "#*": ["./src/*"] + } + }, + "include": ["src/**/*.ts", "test/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/apps/harnessd/package.json b/apps/harnessd/package.json new file mode 100644 index 0000000..c716e8f --- /dev/null +++ b/apps/harnessd/package.json @@ -0,0 +1,29 @@ +{ + "name": "@agent-demo/harnessd", + "version": "0.1.0", + "private": true, + "type": "module", + "imports": { + "#*": "./src/*" + }, + "scripts": { + "dev": "bun src/server.ts", + "start": "bun src/server.ts", + "test": "vitest run test", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@effect/platform-bun": "catalog:", + "@repo/agent-core": "workspace:*", + "@repo/agent-demo": "workspace:*", + "effect": "catalog:" + }, + "devDependencies": { + "@effect/vitest": "catalog:", + "@repo/tooling": "workspace:*", + "@types/bun": "catalog:", + "@types/node": "catalog:", + "typescript": "catalog:", + "vitest": "catalog:" + } +} diff --git a/apps/harnessd/src/api.ts b/apps/harnessd/src/api.ts new file mode 100644 index 0000000..a5b4ed3 --- /dev/null +++ b/apps/harnessd/src/api.ts @@ -0,0 +1,53 @@ +import { Goal, RunReport } from "@repo/agent-core"; +import { Schema } from "effect"; +import { + HttpApi, + HttpApiEndpoint, + HttpApiGroup, +} from "effect/unstable/httpapi"; + +export class Health extends Schema.Class("harnessd/Health")({ + service: Schema.Literal("harnessd"), + status: Schema.Literal("ok"), +}) {} + +export class DaemonStatus extends Schema.Class( + "harnessd/DaemonStatus", +)({ + concurrency: Schema.Literal(64), + execution: Schema.Literal("synchronous"), + journal: Schema.Literal("memory"), + mode: Schema.Literal("deterministic-demo"), + retention: Schema.Literal("bounded-256-histories"), + service: Schema.Literal("harnessd"), +}) {} + +export class SubmitRun extends Schema.Class("harnessd/SubmitRun")({ + goal: Goal, +}) {} + +export class RunRejected extends Schema.TaggedErrorClass()( + "RunRejected", + { + kind: Schema.Literals([ + "ModelFailure", + "StepLimitExceeded", + "ToolDenied", + "ToolFailure", + ]), + reason: Schema.String, + }, + { httpApiStatus: 422 }, +) {} + +const Operations = HttpApiGroup.make("operations").add( + HttpApiEndpoint.get("health", "/health", { success: Health }), + HttpApiEndpoint.get("status", "/status", { success: DaemonStatus }), + HttpApiEndpoint.post("run", "/runs", { + error: RunRejected, + payload: SubmitRun, + success: RunReport, + }), +); + +export class HarnessdApi extends HttpApi.make("HarnessdApi").add(Operations) {} diff --git a/apps/harnessd/src/config.ts b/apps/harnessd/src/config.ts new file mode 100644 index 0000000..60f7c54 --- /dev/null +++ b/apps/harnessd/src/config.ts @@ -0,0 +1,23 @@ +import { Config, Context, Effect, Layer } from "effect"; + +export class HarnessdConfig extends Context.Service< + HarnessdConfig, + { + readonly host: string; + readonly port: number; + } +>()("@agent-demo/harnessd/HarnessdConfig") { + static readonly layer = Layer.effect( + HarnessdConfig, + Effect.gen(function* () { + const host = yield* Config.string("HARNESSD_HOST").pipe( + Config.withDefault("127.0.0.1"), + ); + const port = yield* Config.port("HARNESSD_PORT").pipe( + Config.withDefault(4319), + ); + + return HarnessdConfig.of({ host, port }); + }), + ); +} diff --git a/apps/harnessd/src/demo-runner.ts b/apps/harnessd/src/demo-runner.ts new file mode 100644 index 0000000..347395d --- /dev/null +++ b/apps/harnessd/src/demo-runner.ts @@ -0,0 +1,55 @@ +import { + AgentHarness, + type AgentError, + RunReport, + RunRequest, +} from "@repo/agent-core"; +import { Context, Effect, Layer, Semaphore } from "effect"; + +import { RunRejected } from "#api.ts"; +import { RunIds } from "#run-ids.ts"; + +const failureReason = (error: AgentError): string => { + switch (error._tag) { + case "StepLimitExceeded": + return `The run exceeded its ${error.limit}-step budget.`; + case "ModelFailure": + case "ToolDenied": + case "ToolFailure": + return error.reason; + } +}; + +export class DemoRunner extends Context.Service< + DemoRunner, + { + readonly run: (goal: string) => Effect.Effect; + } +>()("@agent-demo/harnessd/DemoRunner") { + static readonly layerNoDeps = Layer.effect( + DemoRunner, + Effect.gen(function* () { + const harness = yield* AgentHarness; + const runIds = yield* RunIds; + const gate = yield* Semaphore.make(64); + + const runOne = Effect.fn("DemoRunner.runOne")(function* (goal: string) { + const id = yield* runIds.next; + return yield* harness.run(new RunRequest({ goal, id })).pipe( + Effect.mapError( + (error) => + new RunRejected({ + kind: error._tag, + reason: failureReason(error), + }), + ), + ); + }); + const run = Effect.fn("DemoRunner.run")((goal: string) => + gate.withPermit(runOne(goal)), + ); + + return DemoRunner.of({ run }); + }), + ); +} diff --git a/apps/harnessd/src/handlers.ts b/apps/harnessd/src/handlers.ts new file mode 100644 index 0000000..43810c4 --- /dev/null +++ b/apps/harnessd/src/handlers.ts @@ -0,0 +1,31 @@ +import { Effect } from "effect"; +import { HttpApiBuilder } from "effect/unstable/httpapi"; + +import { DaemonStatus, HarnessdApi, Health } from "#api.ts"; +import { DemoRunner } from "#demo-runner.ts"; + +export const HarnessdHandlers = HttpApiBuilder.group( + HarnessdApi, + "operations", + Effect.fnUntraced(function* (handlers) { + const runner = yield* DemoRunner; + + return handlers + .handle("health", () => + Effect.succeed(new Health({ service: "harnessd", status: "ok" })), + ) + .handle("status", () => + Effect.succeed( + new DaemonStatus({ + concurrency: 64, + execution: "synchronous", + journal: "memory", + mode: "deterministic-demo", + retention: "bounded-256-histories", + service: "harnessd", + }), + ), + ) + .handle("run", ({ payload }) => runner.run(payload.goal)); + }), +); diff --git a/apps/harnessd/src/run-ids.ts b/apps/harnessd/src/run-ids.ts new file mode 100644 index 0000000..5e0afc0 --- /dev/null +++ b/apps/harnessd/src/run-ids.ts @@ -0,0 +1,19 @@ +import { RunId } from "@repo/agent-core"; +import { Context, Effect, Layer, Ref } from "effect"; + +export class RunIds extends Context.Service< + RunIds, + { readonly next: Effect.Effect } +>()("@agent-demo/harnessd/RunIds") { + static readonly layerMemory = Layer.effect( + RunIds, + Effect.gen(function* () { + const sequence = yield* Ref.make(0); + const next = Ref.updateAndGet(sequence, (value) => value + 1).pipe( + Effect.map((value) => RunId.make(`harnessd-${value}`)), + ); + + return RunIds.of({ next }); + }), + ); +} diff --git a/apps/harnessd/src/server.ts b/apps/harnessd/src/server.ts new file mode 100644 index 0000000..b6db0dd --- /dev/null +++ b/apps/harnessd/src/server.ts @@ -0,0 +1,33 @@ +import { BunHttpServer, BunRuntime } from "@effect/platform-bun"; +import { DemoHarnessLayer } from "@repo/agent-demo"; +import { Effect, Layer } from "effect"; +import { HttpRouter } from "effect/unstable/http"; +import { HttpApiBuilder } from "effect/unstable/httpapi"; + +import { HarnessdApi } from "#api.ts"; +import { HarnessdConfig } from "#config.ts"; +import { DemoRunner } from "#demo-runner.ts"; +import { HarnessdHandlers } from "#handlers.ts"; +import { RunIds } from "#run-ids.ts"; + +const DemoRunnerLive = DemoRunner.layerNoDeps.pipe( + Layer.provide(Layer.mergeAll(DemoHarnessLayer, RunIds.layerMemory)), +); + +const ApiLive = HttpApiBuilder.layer(HarnessdApi, { + openapiPath: "/openapi.json", +}).pipe(Layer.provide(HarnessdHandlers), Layer.provide(DemoRunnerLive)); + +const ServerLive = Layer.unwrap( + Effect.gen(function* () { + const config = yield* HarnessdConfig; + return BunHttpServer.layer({ hostname: config.host, port: config.port }); + }), +); + +const MainLive = HttpRouter.serve(ApiLive).pipe( + Layer.provide(ServerLive), + Layer.provide(HarnessdConfig.layer), +); + +BunRuntime.runMain(Layer.launch(MainLive)); diff --git a/apps/harnessd/test/api.test.ts b/apps/harnessd/test/api.test.ts new file mode 100644 index 0000000..2a6d35d --- /dev/null +++ b/apps/harnessd/test/api.test.ts @@ -0,0 +1,84 @@ +import { it } from "@effect/vitest"; +import { AgentHarness, ModelFailure } from "@repo/agent-core"; +import { DemoHarnessLayer } from "@repo/agent-demo"; +import { Effect, FileSystem, Layer, Path } from "effect"; +import { Etag, HttpPlatform } from "effect/unstable/http"; +import { HttpApiTest } from "effect/unstable/httpapi"; +import { expect } from "vitest"; + +import { HarnessdApi, SubmitRun } from "#api.ts"; +import { DemoRunner } from "#demo-runner.ts"; +import { HarnessdHandlers } from "#handlers.ts"; +import { RunIds } from "#run-ids.ts"; + +const DemoRunnerLive = DemoRunner.layerNoDeps.pipe( + Layer.provide(Layer.mergeAll(DemoHarnessLayer, RunIds.layerMemory)), +); + +const HttpTestServices = Layer.mergeAll( + Path.layer, + Etag.layerWeak, + HttpPlatform.layer, +).pipe(Layer.provideMerge(FileSystem.layerNoop({}))); + +const TestLayer = Layer.mergeAll( + HttpTestServices, + HarnessdHandlers.pipe(Layer.provide(DemoRunnerLive)), +); + +const FailingHarnessLayer = Layer.succeed( + AgentHarness, + AgentHarness.of({ + run: Effect.fn("FailingHarness.run")(() => + Effect.fail(new ModelFailure({ reason: "provider unavailable" })), + ), + }), +); + +const FailingRunnerLive = DemoRunner.layerNoDeps.pipe( + Layer.provide(Layer.mergeAll(FailingHarnessLayer, RunIds.layerMemory)), +); + +const FailureTestLayer = Layer.mergeAll( + HttpTestServices, + HarnessdHandlers.pipe(Layer.provide(FailingRunnerLive)), +); + +it.effect("serves health and runs the deterministic harness", () => + Effect.gen(function* () { + const client = yield* HttpApiTest.groups(HarnessdApi, ["operations"]); + const health = yield* client.operations.health(); + const status = yield* client.operations.status(); + const report = yield* client.operations.run({ + payload: new SubmitRun({ goal: "Explain the harness" }), + }); + + expect(health.status).toBe("ok"); + expect(status).toMatchObject({ + concurrency: 64, + retention: "bounded-256-histories", + }); + expect(report.summary.id).toBe("harnessd-1"); + expect(report.events.map((event) => event._tag)).toEqual([ + "RunStarted", + "ToolRequested", + "ToolCompleted", + "RunCompleted", + ]); + }).pipe(Effect.provide(TestLayer)), +); + +it.effect("maps domain failures into the declared API error", () => + Effect.gen(function* () { + const client = yield* HttpApiTest.groups(HarnessdApi, ["operations"]); + const error = yield* client.operations + .run({ payload: new SubmitRun({ goal: "Explain the harness" }) }) + .pipe(Effect.flip); + + expect(error).toMatchObject({ + _tag: "RunRejected", + kind: "ModelFailure", + reason: "provider unavailable", + }); + }).pipe(Effect.provide(FailureTestLayer)), +); diff --git a/apps/harnessd/tsconfig.json b/apps/harnessd/tsconfig.json new file mode 100644 index 0000000..4c16b38 --- /dev/null +++ b/apps/harnessd/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "@repo/tooling/tsconfig", + "compilerOptions": { + "types": ["node", "bun"], + "paths": { + "#*": ["./src/*"] + } + }, + "include": ["src/**/*.ts", "test/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/apps/native/.gitignore b/apps/native/.gitignore index 7d6dabb..75d084f 100644 --- a/apps/native/.gitignore +++ b/apps/native/.gitignore @@ -1,27 +1,8 @@ node_modules/ -.expo/ dist/ -npm-debug.* -*.jks -*.p8 -*.p12 -*.key -*.mobileprovision -*.orig.* -web-build/ +src-tauri/target/ +src-tauri/gen/ +*.log # macOS .DS_Store - -# Temporary files created by Metro to check the health of the file watcher -.metro-health-check* - -# UniWind generated types -uniwind-types.d.ts - - -# @generated expo-cli sync-2b81b286409207a5da26e14c78851eb30d8ccbdb -# The following patterns were generated by expo-cli - -expo-env.d.ts -# @end expo-cli \ No newline at end of file diff --git a/apps/native/index.html b/apps/native/index.html new file mode 100644 index 0000000..3caf761 --- /dev/null +++ b/apps/native/index.html @@ -0,0 +1,41 @@ + + + + + + + Effect Agent Harness + + +
+
+
+

Effect-native desktop boundary

+

A small shell around a managed agent runtime.

+

+ The UI owns one ManagedRuntime. The runtime owns the demo service + layer. Teardown releases both together. +

+
+ +
+ + + +
+ +
+
+ Agent reply + ready +
+

+ Submit the goal to cross from the UI into the Effect runtime. +

+
+
+
+ + + diff --git a/apps/native/package.json b/apps/native/package.json new file mode 100644 index 0000000..386732a --- /dev/null +++ b/apps/native/package.json @@ -0,0 +1,29 @@ +{ + "name": "@agent-demo/native", + "version": "0.1.0", + "private": true, + "type": "module", + "imports": { + "#*": "./src/*" + }, + "scripts": { + "build": "vite build", + "desktop:build": "tauri build", + "desktop:dev": "tauri dev", + "dev": "vite", + "tauri": "tauri", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@repo/agent-core": "workspace:*", + "@repo/agent-demo": "workspace:*", + "effect": "catalog:" + }, + "devDependencies": { + "@repo/tooling": "workspace:*", + "@tauri-apps/cli": "catalog:", + "@types/node": "catalog:", + "typescript": "catalog:", + "vite": "catalog:" + } +} diff --git a/apps/web/src-tauri/Cargo.lock b/apps/native/src-tauri/Cargo.lock similarity index 99% rename from apps/web/src-tauri/Cargo.lock rename to apps/native/src-tauri/Cargo.lock index 2bf727a..ad3dbb4 100644 --- a/apps/web/src-tauri/Cargo.lock +++ b/apps/native/src-tauri/Cargo.lock @@ -76,15 +76,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c" [[package]] -name = "app" +name = "agent-desktop" version = "0.1.0" dependencies = [ - "log", - "serde", - "serde_json", "tauri", "tauri-build", - "tauri-plugin-log", ] [[package]] diff --git a/apps/native/src-tauri/Cargo.toml b/apps/native/src-tauri/Cargo.toml new file mode 100644 index 0000000..b7422c3 --- /dev/null +++ b/apps/native/src-tauri/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "agent-desktop" +version = "0.1.0" +description = "Desktop boundary for the Effect agent harness demo" +authors = ["Darkmatter"] +license = "MIT" +edition = "2021" +rust-version = "1.77.2" + +[lib] +name = "agent_desktop_lib" +crate-type = ["staticlib", "cdylib", "rlib"] + +[build-dependencies] +tauri-build = { version = "2.5.6", features = [] } + +[dependencies] +tauri = { version = "2.10.3", features = [] } diff --git a/apps/native/src-tauri/build.rs b/apps/native/src-tauri/build.rs new file mode 100644 index 0000000..d860e1e --- /dev/null +++ b/apps/native/src-tauri/build.rs @@ -0,0 +1,3 @@ +fn main() { + tauri_build::build() +} diff --git a/apps/native/src-tauri/capabilities/default.json b/apps/native/src-tauri/capabilities/default.json new file mode 100644 index 0000000..9680ad2 --- /dev/null +++ b/apps/native/src-tauri/capabilities/default.json @@ -0,0 +1,7 @@ +{ + "$schema": "../gen/schemas/desktop-schema.json", + "identifier": "default", + "description": "Base permissions for the agent desktop window", + "windows": ["main"], + "permissions": ["core:default"] +} diff --git a/apps/native/src-tauri/src/lib.rs b/apps/native/src-tauri/src/lib.rs new file mode 100644 index 0000000..ac94433 --- /dev/null +++ b/apps/native/src-tauri/src/lib.rs @@ -0,0 +1,6 @@ +#[cfg_attr(mobile, tauri::mobile_entry_point)] +pub fn run() { + tauri::Builder::default() + .run(tauri::generate_context!()) + .expect("failed to run the native agent shell"); +} diff --git a/apps/native/src-tauri/src/main.rs b/apps/native/src-tauri/src/main.rs new file mode 100644 index 0000000..8d121d7 --- /dev/null +++ b/apps/native/src-tauri/src/main.rs @@ -0,0 +1,5 @@ +#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] + +fn main() { + agent_desktop_lib::run(); +} diff --git a/apps/native/src-tauri/tauri.conf.json b/apps/native/src-tauri/tauri.conf.json new file mode 100644 index 0000000..d7b61e9 --- /dev/null +++ b/apps/native/src-tauri/tauri.conf.json @@ -0,0 +1,33 @@ +{ + "$schema": "https://schema.tauri.app/config/2", + "productName": "Effect Agent Harness", + "version": "0.1.0", + "identifier": "dev.darkmatter.agent-harness", + "build": { + "beforeDevCommand": "bun run dev", + "devUrl": "http://127.0.0.1:1420", + "beforeBuildCommand": "bun run build", + "frontendDist": "../dist" + }, + "app": { + "windows": [ + { + "label": "main", + "title": "Effect Agent Harness", + "width": 960, + "height": 720, + "minWidth": 640, + "minHeight": 520 + } + ], + "security": { + "csp": "default-src 'self'; connect-src ipc: http://ipc.localhost", + "devCsp": "default-src 'self'; style-src 'self' 'unsafe-inline'; connect-src ipc: http://ipc.localhost ws://127.0.0.1:1420" + } + }, + "bundle": { + "active": true, + "targets": "all", + "icon": [] + } +} diff --git a/apps/native/src/app.ts b/apps/native/src/app.ts new file mode 100644 index 0000000..3e5df6f --- /dev/null +++ b/apps/native/src/app.ts @@ -0,0 +1,62 @@ +import { ManagedRuntime } from "effect"; + +import { DemoAgent } from "#demo-agent.ts"; + +const select = ( + root: ParentNode, + selector: string, +): ElementType => { + const element = root.querySelector(selector); + if (element === null) { + throw new Error(`Missing native shell element: ${selector}`); + } + return element; +}; + +export const mountApp = (root: HTMLElement): (() => void) => { + const runtime = ManagedRuntime.make(DemoAgent.layerDemo); + const form = select(root, "[data-prompt-form]"); + const goal = select(form, "textarea[name='goal']"); + const button = select(form, "button[type='submit']"); + const reply = select(root, "[data-reply]"); + const status = select(root, "[data-status]"); + const events = new AbortController(); + let disposed = false; + + form.addEventListener( + "submit", + (event) => { + event.preventDefault(); + const prompt = goal.value.trim(); + if (prompt.length === 0) return; + + button.disabled = true; + status.textContent = "running"; + + void runtime + .runPromise(DemoAgent.use((agent) => agent.respond(prompt))) + .then((result) => { + if (!disposed) reply.textContent = result.message; + }) + .catch(() => { + if (!disposed) { + reply.textContent = "The demo runtime stopped unexpectedly."; + } + }) + .finally(() => { + if (!disposed) { + button.disabled = false; + status.textContent = "ready"; + } + }); + }, + { signal: events.signal }, + ); + + return () => { + if (disposed) return; + disposed = true; + events.abort(); + void runtime.dispose(); + }; +}; diff --git a/apps/native/src/demo-agent.ts b/apps/native/src/demo-agent.ts new file mode 100644 index 0000000..4bb10c1 --- /dev/null +++ b/apps/native/src/demo-agent.ts @@ -0,0 +1,39 @@ +import { + AgentHarness, + type AgentError, + RunId, + RunRequest, +} from "@repo/agent-core"; +import { DemoHarnessLayer } from "@repo/agent-demo"; +import { Context, Effect, Layer, Ref, Schema } from "effect"; + +export class DemoReply extends Schema.Class("native/DemoReply")({ + message: Schema.String, + turn: Schema.Natural, +}) {} + +export class DemoAgent extends Context.Service< + DemoAgent, + { + readonly respond: (goal: string) => Effect.Effect; + } +>()("@agent-demo/native/DemoAgent") { + static readonly layerDemo = Layer.effect( + DemoAgent, + Effect.gen(function* () { + const harness = yield* AgentHarness; + const turns = yield* Ref.make(0); + + const respond = Effect.fn("DemoAgent.respond")(function* (goal: string) { + const turn = yield* Ref.updateAndGet(turns, (current) => current + 1); + const report = yield* harness.run( + new RunRequest({ goal, id: RunId.make(`desktop-${turn}`) }), + ); + + return new DemoReply({ message: report.summary.answer, turn }); + }); + + return DemoAgent.of({ respond }); + }), + ).pipe(Layer.provide(DemoHarnessLayer)); +} diff --git a/apps/native/src/main.ts b/apps/native/src/main.ts new file mode 100644 index 0000000..24d5875 --- /dev/null +++ b/apps/native/src/main.ts @@ -0,0 +1,15 @@ +import "./styles.css"; + +import { mountApp } from "#app.ts"; + +const root = document.querySelector("#app"); +if (root === null) throw new Error("Native shell root was not found"); + +const disposeApp = mountApp(root); +const dispose = () => { + window.removeEventListener("pagehide", dispose); + disposeApp(); +}; + +window.addEventListener("pagehide", dispose, { once: true }); +import.meta.hot?.dispose(dispose); diff --git a/apps/native/src/styles.css b/apps/native/src/styles.css new file mode 100644 index 0000000..97a49ae --- /dev/null +++ b/apps/native/src/styles.css @@ -0,0 +1,149 @@ +:root { + color: #e8eee7; + font-family: + Inter, + ui-sans-serif, + system-ui, + -apple-system, + BlinkMacSystemFont, + sans-serif; + text-rendering: optimizeLegibility; +} + +* { + box-sizing: border-box; +} + +body { + min-width: 320px; + min-height: 100vh; + margin: 0; + background: + radial-gradient( + circle at 85% 10%, + rgb(120 203 132 / 12%), + transparent 30rem + ), + #101510; +} + +button, +textarea { + font: inherit; +} + +#app { + display: grid; + min-height: 100vh; + padding: clamp(1.25rem, 5vw, 4rem); + place-items: center; +} + +.shell { + width: min(46rem, 100%); + padding: clamp(1.5rem, 4vw, 3rem); + border: 1px solid #2b382b; + border-radius: 1.5rem; + background: rgb(20 27 20 / 92%); + box-shadow: 0 2rem 6rem rgb(0 0 0 / 35%); +} + +.hero { + margin-bottom: 2rem; +} + +.eyebrow { + margin: 0 0 0.75rem; + color: #8ddd98; + font-family: ui-monospace, SFMono-Regular, Menlo, monospace; + font-size: 0.75rem; + letter-spacing: 0.12em; + text-transform: uppercase; +} + +h1 { + max-width: 15ch; + margin: 0; + font-size: clamp(2rem, 6vw, 3.75rem); + font-weight: 550; + letter-spacing: -0.055em; + line-height: 0.98; +} + +.lede { + max-width: 42rem; + margin: 1.25rem 0 0; + color: #a8b3a7; + line-height: 1.65; +} + +.prompt { + display: grid; + gap: 0.75rem; +} + +label, +.result-heading { + color: #a8b3a7; + font-size: 0.8rem; + font-weight: 650; + letter-spacing: 0.06em; + text-transform: uppercase; +} + +textarea { + width: 100%; + resize: vertical; + padding: 1rem; + border: 1px solid #354535; + border-radius: 0.8rem; + outline: none; + color: inherit; + background: #0c110c; + line-height: 1.5; +} + +textarea:focus { + border-color: #78cb84; + box-shadow: 0 0 0 3px rgb(120 203 132 / 15%); +} + +button { + justify-self: start; + padding: 0.75rem 1rem; + border: 0; + border-radius: 999px; + color: #0a160b; + background: #8ddd98; + cursor: pointer; + font-weight: 700; +} + +button:disabled { + cursor: wait; + opacity: 0.6; +} + +.result { + min-height: 8rem; + margin-top: 2rem; + padding: 1.25rem; + border: 1px solid #2b382b; + border-radius: 0.8rem; + background: #111811; +} + +.result-heading { + display: flex; + justify-content: space-between; +} + +.status { + color: #8ddd98; +} + +.result p { + margin: 1rem 0 0; + color: #d2dbd1; + line-height: 1.65; +} diff --git a/apps/native/tsconfig.json b/apps/native/tsconfig.json index 92dadbd..bcdd0e2 100644 --- a/apps/native/tsconfig.json +++ b/apps/native/tsconfig.json @@ -1,18 +1,9 @@ { - "extends": "expo/tsconfig.base", + "extends": "@repo/tooling/tsconfig", "compilerOptions": { - "strict": true, - "baseUrl": ".", - "paths": { - "@/*": [ - "./*" - ] - } + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "types": ["vite/client"] }, - "include": [ - "**/*.ts", - "**/*.tsx", - ".expo/types/**/*.ts", - "expo-env.d.ts" - ] + "include": ["src/**/*.ts", "vite.config.ts"], + "exclude": ["dist", "node_modules"] } diff --git a/apps/native/vite.config.ts b/apps/native/vite.config.ts new file mode 100644 index 0000000..bcd35b0 --- /dev/null +++ b/apps/native/vite.config.ts @@ -0,0 +1,10 @@ +import { defineConfig } from "vite"; + +export default defineConfig({ + clearScreen: false, + server: { + host: "127.0.0.1", + port: 1420, + strictPort: true, + }, +}); diff --git a/apps/web/index.html b/apps/web/index.html new file mode 100644 index 0000000..6f3cae1 --- /dev/null +++ b/apps/web/index.html @@ -0,0 +1,52 @@ + + + + + + Effect Agent Harness + + + +
+

Runnable architecture reference

+

Effect-native agent harness

+

+ A compact monorepo showing schemas, services, layers, typed errors, + deterministic tests, CLI and HTTP entrypoints, a Tauri boundary, and a + bounded Rust supervisor. +

+ +
    +
  1. + 01Modeltyped decision +
  2. +
  3. + 02HarnessEffect loop +
  4. +
  5. + 03Toolschema boundary +
  6. +
  7. + 04Journalevent stream +
  8. +
+ +
+
+

Effect / Bun shell

+

Live status

+
+
+
+
Loading
+
+
+
+
+

+ The demo favors inspectable composition over a preconfigured model. +

+
+ + + diff --git a/apps/web/package.json b/apps/web/package.json index b4d12b7..2a6d884 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -1,5 +1,5 @@ { - "name": "@ops-demo/web", + "name": "@agent-demo/web", "version": "0.1.0", "private": true, "type": "module", @@ -11,10 +11,7 @@ "typecheck": "tsc --noEmit", "build": "vite build", "serve": "vite preview", - "dev:bare": "vite dev", - "tauri": "tauri", - "desktop:dev": "tauri dev", - "desktop:build": "tauri build" + "dev:bare": "vite dev" }, "dependencies": { "@effect/platform-bun": "catalog:", @@ -26,6 +23,7 @@ "@effect/vitest": "catalog:", "@repo/tooling": "workspace:*", "@types/bun": "catalog:", - "typescript": "catalog:" + "typescript": "catalog:", + "vite": "catalog:" } } diff --git a/apps/web/public/app.js b/apps/web/public/app.js index 6162411..a087088 100644 --- a/apps/web/public/app.js +++ b/apps/web/public/app.js @@ -1,15 +1,19 @@ const status = document.querySelector("#status"); -async function loadStatus() { - try { - const response = await fetch("/api/status"); - const data = await response.json(); - status.innerHTML = Object.entries(data) - .map(([key, value]) => `
${key}
${value}
`) - .join(""); - } catch { - status.innerHTML = "
status
unavailable
"; - } +function renderStatus(entries) { + const rows = entries.map(([key, value]) => { + const row = document.createElement("div"); + const label = document.createElement("dt"); + const content = document.createElement("dd"); + label.textContent = key; + content.textContent = String(value); + row.append(label, content); + return row; + }); + status.replaceChildren(...rows); } -void loadStatus(); +fetch("/api/status") + .then((response) => response.json()) + .then((payload) => renderStatus(Object.entries(payload))) + .catch(() => renderStatus([["status", "unavailable"]])); diff --git a/apps/web/public/index.html b/apps/web/public/index.html index 7eeab39..6f3cae1 100644 --- a/apps/web/public/index.html +++ b/apps/web/public/index.html @@ -3,21 +3,38 @@ - Ops Monorepo Demo + Effect Agent Harness
-

Runnable reference repository

-

Ops monorepo demo

+

Runnable architecture reference

+

Effect-native agent harness

- A tiny app whose surrounding repository shows where containers, - environments, secrets, deployment, and observability belong. + A compact monorepo showing schemas, services, layers, typed errors, + deterministic tests, CLI and HTTP entrypoints, a Tauri boundary, and a + bounded Rust supervisor.

+ +
    +
  1. + 01Modeltyped decision +
  2. +
  3. + 02HarnessEffect loop +
  4. +
  5. + 03Toolschema boundary +
  6. +
  7. + 04Journalevent stream +
  8. +
+
-

Live application state

-

Status

+

Effect / Bun shell

+

Live status

@@ -27,7 +44,7 @@

Status

- Refresh the page to increment the Prometheus-ready request counter. + The demo favors inspectable composition over a preconfigured model.

diff --git a/apps/web/public/styles.css b/apps/web/public/styles.css index 4409619..776b567 100644 --- a/apps/web/public/styles.css +++ b/apps/web/public/styles.css @@ -1,7 +1,7 @@ :root { color-scheme: dark; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; - background: #10131a; + background: #0d1116; color: #eff5ff; } * { @@ -15,7 +15,7 @@ body { padding: 2rem; } main { - width: min(720px, 100%); + width: min(880px, 100%); } h1 { font-size: clamp(2.4rem, 7vw, 5rem); @@ -47,6 +47,31 @@ section { margin-top: 3rem; padding: 1.5rem; } +.flow { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 1px; + list-style: none; + margin: 3rem 0 0; + padding: 0; + overflow: hidden; + border: 1px solid #303c54; + border-radius: 0.75rem; + background: #303c54; +} +.flow li { + display: grid; + gap: 0.45rem; + padding: 1.25rem; + background: #151b25; +} +.flow span, +.flow small { + color: #8ea1bd; +} +.flow strong { + color: #8de1c0; +} dl { display: grid; grid-template-columns: max-content max-content; @@ -69,6 +94,9 @@ dd { margin-top: 1.2rem; } @media (max-width: 560px) { + .flow { + grid-template-columns: repeat(2, 1fr); + } section { flex-direction: column; gap: 1rem; diff --git a/apps/web/src-tauri/Cargo.toml b/apps/web/src-tauri/Cargo.toml deleted file mode 100644 index 074cc3d..0000000 --- a/apps/web/src-tauri/Cargo.toml +++ /dev/null @@ -1,25 +0,0 @@ -[package] -name = "app" -version = "0.1.0" -description = "A Tauri App" -authors = ["you"] -license = "" -repository = "" -edition = "2021" -rust-version = "1.77.2" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[lib] -name = "app_lib" -crate-type = ["staticlib", "cdylib", "rlib"] - -[build-dependencies] -tauri-build = { version = "2.5.6", features = [] } - -[dependencies] -serde_json = "1.0" -serde = { version = "1.0", features = ["derive"] } -log = "0.4" -tauri = { version = "2.10.3", features = [] } -tauri-plugin-log = "2" diff --git a/apps/web/vite.config.ts b/apps/web/vite.config.ts index e9ce43a..7d8ff18 100644 --- a/apps/web/vite.config.ts +++ b/apps/web/vite.config.ts @@ -1,12 +1,6 @@ -import tailwindcss from "@tailwindcss/vite"; -import { tanstackStart } from "@tanstack/react-start/plugin/vite"; -import viteReact from "@vitejs/plugin-react"; import { defineConfig } from "vite"; -import tsconfigPaths from "vite-tsconfig-paths"; -// alchemy 2.x deploys via Cloudflare.Website.Vite — no alchemy() vite plugin. export default defineConfig({ - plugins: [tsconfigPaths(), tailwindcss(), tanstackStart(), viteReact()], server: { port: 3001, }, diff --git a/bun.lock b/bun.lock index bcb21a4..a5ccffc 100644 --- a/bun.lock +++ b/bun.lock @@ -3,28 +3,83 @@ "configVersion": 1, "workspaces": { "": { - "name": "ops-monorepo-demo", + "name": "effect-agent-harness-demo", "devDependencies": { - "@cloudflare/workers-types": "^4.20251213.0", "@effect/platform-bun": "catalog:", "@effect/platform-node": "catalog:", "@effect/tsgo": "0.36.1", "@repo/tooling": "workspace:*", + "@swc/core": "^1.16.2", "@types/bun": "catalog:", "@types/node": "catalog:", "alchemy": "catalog:", "bun2nix": "^2.1.2", + "dependency-cruiser": "18.2.0", "effect": "catalog:", "oxfmt": "^0.62.0", "oxlint": "1.77.0", "oxlint-tsgolint": "^7.0.2001", - "turbo": "^2.8.12", "typescript": "7.0.2", "vitest": "catalog:", }, }, + "apps/cli": { + "name": "@agent-demo/cli", + "version": "0.1.0", + "bin": { + "harness": "./src/main.ts", + }, + "dependencies": { + "@effect/platform-bun": "catalog:", + "@repo/agent-core": "workspace:*", + "@repo/agent-demo": "workspace:*", + "effect": "catalog:", + }, + "devDependencies": { + "@effect/vitest": "catalog:", + "@repo/tooling": "workspace:*", + "@types/bun": "catalog:", + "@types/node": "catalog:", + "typescript": "catalog:", + "vitest": "catalog:", + }, + }, + "apps/harnessd": { + "name": "@agent-demo/harnessd", + "version": "0.1.0", + "dependencies": { + "@effect/platform-bun": "catalog:", + "@repo/agent-core": "workspace:*", + "@repo/agent-demo": "workspace:*", + "effect": "catalog:", + }, + "devDependencies": { + "@effect/vitest": "catalog:", + "@repo/tooling": "workspace:*", + "@types/bun": "catalog:", + "@types/node": "catalog:", + "typescript": "catalog:", + "vitest": "catalog:", + }, + }, + "apps/native": { + "name": "@agent-demo/native", + "version": "0.1.0", + "dependencies": { + "@repo/agent-core": "workspace:*", + "@repo/agent-demo": "workspace:*", + "effect": "catalog:", + }, + "devDependencies": { + "@repo/tooling": "workspace:*", + "@tauri-apps/cli": "catalog:", + "@types/node": "catalog:", + "typescript": "catalog:", + "vite": "catalog:", + }, + }, "apps/web": { - "name": "@ops-demo/web", + "name": "@agent-demo/web", "version": "0.1.0", "dependencies": { "@effect/platform-bun": "catalog:", @@ -37,21 +92,82 @@ "@repo/tooling": "workspace:*", "@types/bun": "catalog:", "typescript": "catalog:", + "vite": "catalog:", + }, + }, + "packages/agent-core": { + "name": "@repo/agent-core", + "version": "0.1.0", + "dependencies": { + "effect": "catalog:", + }, + "devDependencies": { + "@repo/tooling": "workspace:*", + "typescript": "catalog:", + }, + }, + "packages/agent-demo": { + "name": "@repo/agent-demo", + "version": "0.1.0", + "dependencies": { + "@repo/agent-core": "workspace:*", + "effect": "catalog:", + }, + "devDependencies": { + "@repo/tooling": "workspace:*", + "typescript": "catalog:", + }, + }, + "packages/agent-runtime": { + "name": "@repo/agent-runtime", + "version": "0.1.0", + "dependencies": { + "@repo/agent-core": "workspace:*", + "@repo/sandbox-client": "workspace:*", + "effect": "catalog:", + }, + "devDependencies": { + "@repo/tooling": "workspace:*", + "typescript": "catalog:", + }, + }, + "packages/agent-testkit": { + "name": "@repo/agent-testkit", + "version": "0.1.0", + "dependencies": { + "@repo/agent-core": "workspace:*", + "effect": "catalog:", + }, + "devDependencies": { + "@effect/vitest": "catalog:", + "@repo/tooling": "workspace:*", + "typescript": "catalog:", + "vitest": "catalog:", }, }, "packages/infra": { - "name": "@labs/infra", + "name": "@repo/infra", + "version": "0.1.0", "dependencies": { "@effect/platform-bun": "catalog:", "@effect/platform-node": "catalog:", "alchemy": "catalog:", - "dotenv": "catalog:", "effect": "catalog:", - "zod": "catalog:", }, "devDependencies": { - "alchemy": "catalog:", - "typescript": "^5", + "@repo/tooling": "workspace:*", + "typescript": "catalog:", + }, + }, + "packages/sandbox-client": { + "name": "@repo/sandbox-client", + "version": "0.1.0", + "dependencies": { + "effect": "catalog:", + }, + "devDependencies": { + "@repo/tooling": "workspace:*", + "typescript": "catalog:", }, }, "packages/tooling": { @@ -74,42 +190,32 @@ }, "overrides": { "@effect/platform-node-shared": "4.0.0-beta.102", + "@effect/sql-d1": "4.0.0-beta.102", + "@effect/sql-sqlite-do": "4.0.0-beta.102", }, "catalog": { - "@better-auth/expo": "1.5.5", "@effect/platform-bun": "4.0.0-beta.102", "@effect/platform-node": "4.0.0-beta.102", "@effect/vitest": "4.0.0-beta.102", - "@libsql/client": "0.17.2", - "@orpc/client": "^1.12.2", - "@orpc/openapi": "^1.12.2", - "@orpc/server": "^1.12.2", - "@orpc/tanstack-query": "^1.13.6", - "@orpc/zod": "^1.12.2", - "@polar-sh/better-auth": "^1.8.3", - "@tanstack/react-form": "^1.28.0", + "@tauri-apps/cli": "^2.10.0", "@types/bun": "^1.3.10", "@types/node": "^24.0.0", -<<<<<<< HEAD - "@types/react-dom": "^19.2.3", - "alchemy": "2.0.0-beta.66", - "better-auth": "1.5.5", - "dotenv": "^17.2.2", - "drizzle-orm": "^0.45.1", -||||||| 47206cf -======= + "alchemy": "2.0.0-beta.70", "alchemy-sops": "0.8.1", ->>>>>>> @{-1} "effect": "4.0.0-beta.102", - "libsql": "0.5.22", - "lucide-react": "^1.7.0", - "next-themes": "^0.4.6", - "sonner": "^2.0.5", "typescript": "^7.0.2", + "vite": "^8.2.2", "vitest": "^4.1.6", - "zod": "^4.1.13", }, "packages": { + "@agent-demo/cli": ["@agent-demo/cli@workspace:apps/cli"], + + "@agent-demo/harnessd": ["@agent-demo/harnessd@workspace:apps/harnessd"], + + "@agent-demo/native": ["@agent-demo/native@workspace:apps/native"], + + "@agent-demo/web": ["@agent-demo/web@workspace:apps/web"], + "@alcalzone/ansi-tokenize": ["@alcalzone/ansi-tokenize@0.2.5", "", { "dependencies": { "ansi-styles": "^6.2.1", "is-fullwidth-code-point": "^5.0.0" } }, "sha512-3NX/MpTdroi0aKz134A6RC2Gb2iXVECN4QaAXnvCIxxIm3C3AVB1mkUe8NaaiyvOpDfsrqWhYtj+Q6a62RrTsw=="], "@alchemy.run/node-utils": ["@alchemy.run/node-utils@0.0.5", "", {}, "sha512-5agdhQxWBodxa5hDRyjnpx91RTU3g+qd5fxYB7uNDCaOzB0XC47UU/KHR6zf6jhz/NXf61gJS+vhYwn8NHeRoQ=="], @@ -118,7 +224,6 @@ "@aws-crypto/util": ["@aws-crypto/util@5.2.0", "", { "dependencies": { "@aws-sdk/types": "^3.222.0", "@smithy/util-utf8": "^2.0.0", "tslib": "^2.6.2" } }, "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ=="], -<<<<<<< HEAD "@aws-sdk/core": ["@aws-sdk/core@3.977.9", "", { "dependencies": { "@aws-sdk/types": "^3.974.5", "@aws-sdk/xml-builder": "^3.972.40", "@aws/lambda-invoke-store": "^0.3.0", "@smithy/core": "^3.33.3", "@smithy/signature-v4": "^5.6.12", "@smithy/types": "^4.17.2", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-reqPFEQrZxDZpeGj4PFMepBeR5LGYHRqq/L0motTzgFkCRBA4rFdaVXDSLYyGHhxVz7sT2PDnPN9CluGSfgyJA=="], "@aws-sdk/credential-provider-cognito-identity": ["@aws-sdk/credential-provider-cognito-identity@3.972.69", "", { "dependencies": { "@aws-sdk/nested-clients": "^3.997.44", "@aws-sdk/types": "^3.974.5", "@smithy/core": "^3.33.3", "@smithy/types": "^4.17.2", "tslib": "^2.6.2" } }, "sha512-vpsh9VWmQVC/nsdzf72F2yUMBOFT1aq+hoLseYV03zjVXVHkjqSNJskFRKPFxc3MRFrHNbSSmOwsbYE15u9ecw=="], @@ -139,7 +244,7 @@ "@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.972.76", "", { "dependencies": { "@aws-sdk/core": "^3.977.9", "@aws-sdk/nested-clients": "^3.997.44", "@aws-sdk/types": "^3.974.5", "@smithy/core": "^3.33.3", "@smithy/types": "^4.17.2", "tslib": "^2.6.2" } }, "sha512-d3AGyVu759PGr35mEB2s22xxlNEA5rpdxtSPJthfPFJvoQ8dt357iVPECqWfUxXp1toJAvKmbtcIYVGigaGsCA=="], - "@aws-sdk/credential-providers": ["@aws-sdk/credential-providers@3.1116.0", "", { "dependencies": { "@aws-sdk/core": "^3.977.9", "@aws-sdk/credential-provider-cognito-identity": "^3.972.69", "@aws-sdk/credential-provider-env": "^3.972.70", "@aws-sdk/credential-provider-http": "^3.972.72", "@aws-sdk/credential-provider-ini": "^3.973.15", "@aws-sdk/credential-provider-login": "^3.972.77", "@aws-sdk/credential-provider-node": "^3.972.81", "@aws-sdk/credential-provider-process": "^3.972.70", "@aws-sdk/credential-provider-sso": "^3.973.14", "@aws-sdk/credential-provider-web-identity": "^3.972.76", "@aws-sdk/nested-clients": "^3.997.44", "@aws-sdk/types": "^3.974.5", "@smithy/core": "^3.33.3", "@smithy/credential-provider-imds": "^4.4.16", "@smithy/types": "^4.17.2", "tslib": "^2.6.2" } }, "sha512-y41rRJ1AWtcJka2YdFQ1BfTf0CZDXizh0VOZLwfUzxI2xhG7n88XXn0N0yvLwI73/tjtXalVy94/N5QCO1lgbg=="], + "@aws-sdk/credential-providers": ["@aws-sdk/credential-providers@3.1121.0", "", { "dependencies": { "@aws-sdk/core": "^3.977.9", "@aws-sdk/credential-provider-cognito-identity": "^3.972.69", "@aws-sdk/credential-provider-env": "^3.972.70", "@aws-sdk/credential-provider-http": "^3.972.72", "@aws-sdk/credential-provider-ini": "^3.973.15", "@aws-sdk/credential-provider-login": "^3.972.77", "@aws-sdk/credential-provider-node": "^3.972.81", "@aws-sdk/credential-provider-process": "^3.972.70", "@aws-sdk/credential-provider-sso": "^3.973.14", "@aws-sdk/credential-provider-web-identity": "^3.972.76", "@aws-sdk/nested-clients": "^3.997.44", "@aws-sdk/types": "^3.974.5", "@smithy/core": "^3.33.3", "@smithy/credential-provider-imds": "^4.4.16", "@smithy/types": "^4.17.2", "tslib": "^2.6.2" } }, "sha512-lWdkLauoXNDH/lwYWFpYnFhtYqt0lLrQAyuyxak31PiKD5UQ4YT2z3rQckzEfIGyP1VBGvC+n6Ziqm3y3HKmmQ=="], "@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.997.44", "", { "dependencies": { "@aws-sdk/core": "^3.977.9", "@aws-sdk/signature-v4-multi-region": "^3.996.46", "@aws-sdk/types": "^3.974.5", "@smithy/core": "^3.33.3", "@smithy/fetch-http-handler": "^5.7.2", "@smithy/node-http-handler": "^4.11.3", "@smithy/types": "^4.17.2", "tslib": "^2.6.2" } }, "sha512-NhEgryjlBF9w38ZXqGymQV28IhkYa1mKhlbYnqIis57AYwWGVYfUPgg/qC2rLRqOUfblxx++irvju10kVTa8Vw=="], @@ -177,92 +282,13 @@ "@cloudflare/workerd-windows-64": ["@cloudflare/workerd-windows-64@1.20260704.1", "", { "os": "win32", "cpu": "x64" }, "sha512-a97Ecnzhy04x3U052VKPCNp863F7Wf00WY7Ga5P0SbtYvaO1PDzylsHrvFMPKeiDFcOwqiredawmJ+v6bhIgeQ=="], - "@cloudflare/workers-types": ["@cloudflare/workers-types@4.20260702.1", "", {}, "sha512-mOhf5TUEB1m2vPrxtqoIGfz0fUC9xyxRDx5gWHy5s+OCo6dcV+g7wI1R7gYCMFohhqF/2y2xeKVwMwCJjfn/WA=="], - - "@distilled.cloud/aws": ["@distilled.cloud/aws@0.30.3", "", { "dependencies": { "@aws-crypto/crc32": "^5.2.0", "@aws-crypto/util": "^5.2.0", "@aws-sdk/credential-providers": "^3.994.0", "@aws-sdk/types": "^3.973.1", "@distilled.cloud/core": "0.30.3", "@smithy/shared-ini-file-loader": "^4.4.3", "@smithy/types": "^4.12.0", "@smithy/util-base64": "^4.3.0", "aws4fetch": "^1.0.20", "fast-xml-parser": "^5.3.2" }, "peerDependencies": { "effect": ">=4.0.0-beta.100 || >=4.0.0" } }, "sha512-6U/wO+fLNnqBlRnqFpF79edS5t6njDl/6UmnCVUfWpIQ4n23X0VY1ft0lzsaBa506xRtF4vRhMELR9FIp5DKUA=="], - - "@distilled.cloud/axiom": ["@distilled.cloud/axiom@0.30.3", "", { "dependencies": { "@distilled.cloud/core": "0.30.3" }, "peerDependencies": { "effect": ">=4.0.0-beta.100 || >=4.0.0" } }, "sha512-U4YvXsvz/TDYfIbZNRVAv8Yx1mnbms/rBQ/RHnRQWhL0JzxZOZOQvToxkB4kh/oa8KT+QbjTkDxRJP/f6P0M1g=="], - - "@distilled.cloud/cloudflare": ["@distilled.cloud/cloudflare@0.30.3", "", { "dependencies": { "@distilled.cloud/core": "0.30.3" }, "peerDependencies": { "effect": ">=4.0.0-beta.100 || >=4.0.0" } }, "sha512-IwQyIZrfzRJ7Dn9Plsk5pMlr50CT72fMnD5YCFy31MKAthh906ewcO3NuJOKHGA8AF9u6SKTlebsQx4Jnj8uwA=="], - - "@distilled.cloud/cloudflare-rolldown-plugin": ["@distilled.cloud/cloudflare-rolldown-plugin@0.15.0", "", { "dependencies": { "@cloudflare/unenv-preset": "^2.16.0", "magic-string": "^0.30.21", "unenv": "^2.0.0-rc.24" }, "peerDependencies": { "rolldown": "^1.1.5", "vite": "^7.0.0 || ^8.0.0" }, "optionalPeers": ["rolldown", "vite"] }, "sha512-cBVl4Ck4Prf9/dPSvyQeGW+2CDLIKs+xbyUm/MgNOSyYDZYOLbsCnDePO4YwdvaxsT0oOZZIkSDDki2ve9DCHA=="], - - "@distilled.cloud/cloudflare-runtime": ["@distilled.cloud/cloudflare-runtime@0.15.0", "", { "dependencies": { "@alchemy.run/node-utils": "^0.0.5", "workerd": "1.20260704.1" }, "peerDependencies": { "@distilled.cloud/cloudflare": "^0.29.0", "@effect/platform-bun": ">=4.0.0-beta.100 || >=4.0.0", "@effect/platform-node": ">=4.0.0-beta.100 || >=4.0.0", "effect": ">=4.0.0-beta.100 || >=4.0.0" }, "optionalPeers": ["@effect/platform-bun", "@effect/platform-node"] }, "sha512-0xx+LCiBzNwmMPN1SnnD4GixVl8WZET3zaMPU51LYRU+VQQrxtetDjcjnI5q83UComjBmbS0c0Bp4j/7hgobyg=="], - - "@distilled.cloud/cloudflare-vite-plugin": ["@distilled.cloud/cloudflare-vite-plugin@0.15.0", "", { "dependencies": { "@distilled.cloud/cloudflare-rolldown-plugin": "0.15.0" }, "peerDependencies": { "@distilled.cloud/cloudflare": "^0.29.0", "@distilled.cloud/cloudflare-runtime": "0.15.0", "@effect/platform-bun": ">=4.0.0-beta.100 || >=4.0.0", "@effect/platform-node": ">=4.0.0-beta.100 || >=4.0.0", "effect": ">=4.0.0-beta.100 || >=4.0.0", "vite": "^7.0.0 || ^8.0.0" }, "optionalPeers": ["@effect/platform-bun", "@effect/platform-node"] }, "sha512-+JYCTv/1Bqk3GRSb6e+UW61Pn2DFF68EAVvAbTYg5Z6tlztc2E7sd/pC4E2fsnAxtSMjwpFdrzlPqwQUq2HUQA=="], - - "@distilled.cloud/core": ["@distilled.cloud/core@0.30.3", "", { "peerDependencies": { "effect": ">=4.0.0-beta.100 || >=4.0.0" } }, "sha512-RupX597cPmceEiOY6csihFbzH2WhDkfbwGCMk+Izx8+f16u+aLm4mgyrYoxj1/dzIHsyIfw8sFKgNPzAg0Rx2Q=="], - - "@distilled.cloud/neon": ["@distilled.cloud/neon@0.30.3", "", { "dependencies": { "@distilled.cloud/core": "0.30.3" }, "peerDependencies": { "effect": ">=4.0.0-beta.100 || >=4.0.0" } }, "sha512-4iW6lNvrJ/BuraKQ572bTQPNNtK/pFMqALoKjgozXR5jAZXbohRrD8/3QHLZW9cOAPenaHugwk4YIm0/+u4j5Q=="], - - "@distilled.cloud/planetscale": ["@distilled.cloud/planetscale@0.30.3", "", { "dependencies": { "@distilled.cloud/core": "0.30.3" }, "peerDependencies": { "effect": ">=4.0.0-beta.100 || >=4.0.0" } }, "sha512-0ZcPqoXKl5uhJ6Ytw9UpgHa2t2pjwsuQFZn4OlnjZl0F/lToO/8TdXp4iKyw7Wog5tKTkfRYrQXVzRbaPKP3QQ=="], -||||||| 47206cf -======= - "@aws-sdk/core": ["@aws-sdk/core@3.977.8", "", { "dependencies": { "@aws-sdk/types": "^3.974.4", "@aws-sdk/xml-builder": "^3.972.39", "@aws/lambda-invoke-store": "^0.3.0", "@smithy/core": "^3.31.1", "@smithy/signature-v4": "^5.6.12", "@smithy/types": "^4.16.1", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "sha512-7+Kcrkvrk9lM/m7jRhHpT4jCdvzGHsuaSRbF8TdzzkY1mRzp/Ogwf9c7H29k4gGhey0BBWhCWr16+t0J61gwmg=="], - - "@aws-sdk/credential-provider-cognito-identity": ["@aws-sdk/credential-provider-cognito-identity@3.972.68", "", { "dependencies": { "@aws-sdk/nested-clients": "^3.997.43", "@aws-sdk/types": "^3.974.4", "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" } }, "sha512-Fo2RC5hZmEVhnVLMzNjYL6Iu78F4wDuaNtkgzRVU4DlUaFhcXxsnxWBOTH2drxZ59OHSipQ1LndfkCWPxGBJHA=="], - - "@aws-sdk/credential-provider-env": ["@aws-sdk/credential-provider-env@3.972.69", "", { "dependencies": { "@aws-sdk/core": "^3.977.8", "@aws-sdk/types": "^3.974.4", "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" } }, "sha512-AreCFzcB4kH2HF9031Ot0jSJr3KXvRg6e8uDeub20JEVdZU3Bv0sTq1plc7VsT3KiqutlzH7l0j50UcCWHUioA=="], - - "@aws-sdk/credential-provider-http": ["@aws-sdk/credential-provider-http@3.972.71", "", { "dependencies": { "@aws-sdk/core": "^3.977.8", "@aws-sdk/types": "^3.974.4", "@smithy/core": "^3.31.1", "@smithy/fetch-http-handler": "^5.6.13", "@smithy/node-http-handler": "^4.9.13", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" } }, "sha512-A8ObcqVmDMnk4F9NozZ7JwmUu9Q4xyBJkmyq1C5U+wNM9ht9J7+EuuyabsLWXZnOoTqFaJuYBYTKf5CTipkEjA=="], - - "@aws-sdk/credential-provider-ini": ["@aws-sdk/credential-provider-ini@3.973.14", "", { "dependencies": { "@aws-sdk/core": "^3.977.8", "@aws-sdk/credential-provider-env": "^3.972.69", "@aws-sdk/credential-provider-http": "^3.972.71", "@aws-sdk/credential-provider-login": "^3.972.76", "@aws-sdk/credential-provider-process": "^3.972.69", "@aws-sdk/credential-provider-sso": "^3.973.13", "@aws-sdk/credential-provider-web-identity": "^3.972.75", "@aws-sdk/nested-clients": "^3.997.43", "@aws-sdk/types": "^3.974.4", "@smithy/core": "^3.31.1", "@smithy/credential-provider-imds": "^4.4.16", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" } }, "sha512-7c+Wti2LsERNWMfm7ySz3/6RPopFW3Nmn7s63Xpcq6R/tRuY5hpvkHA2xVgi5ukJbvok9l0IDtVEvqTtg+X7dw=="], - - "@aws-sdk/credential-provider-login": ["@aws-sdk/credential-provider-login@3.972.76", "", { "dependencies": { "@aws-sdk/core": "^3.977.8", "@aws-sdk/nested-clients": "^3.997.43", "@aws-sdk/types": "^3.974.4", "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" } }, "sha512-LVixwOnEJfrrfKHeZjBA8pIMTZjNDq8ak8VpcoWUuCJDrSnBNU8POJksULMgvN089P0MXtQYH2Zs627/MK1K0g=="], - - "@aws-sdk/credential-provider-node": ["@aws-sdk/credential-provider-node@3.972.80", "", { "dependencies": { "@aws-sdk/credential-provider-env": "^3.972.69", "@aws-sdk/credential-provider-http": "^3.972.71", "@aws-sdk/credential-provider-ini": "^3.973.14", "@aws-sdk/credential-provider-process": "^3.972.69", "@aws-sdk/credential-provider-sso": "^3.973.13", "@aws-sdk/credential-provider-web-identity": "^3.972.75", "@aws-sdk/types": "^3.974.4", "@smithy/core": "^3.31.1", "@smithy/credential-provider-imds": "^4.4.16", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" } }, "sha512-bE2qh8ww4iClO1jHsBXdOE8FUgzDbdxbyorNjSCoPSkQd51k3jODItuPZfuwcLHZqDXsH+bI4AMHhqtuyR7mSg=="], - - "@aws-sdk/credential-provider-process": ["@aws-sdk/credential-provider-process@3.972.69", "", { "dependencies": { "@aws-sdk/core": "^3.977.8", "@aws-sdk/types": "^3.974.4", "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" } }, "sha512-9kpTNdZTrcqXTfhxM7fgl9Z68ek3Fu5oe3Yf+A/pJGibEqpgZxz2tSY7SinmyCIU2PJ+ygY4FPoBBnLpocMtrQ=="], - - "@aws-sdk/credential-provider-sso": ["@aws-sdk/credential-provider-sso@3.973.13", "", { "dependencies": { "@aws-sdk/core": "^3.977.8", "@aws-sdk/nested-clients": "^3.997.43", "@aws-sdk/token-providers": "3.1111.0", "@aws-sdk/types": "^3.974.4", "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" } }, "sha512-Oc81qauMPzUoTnAS2YKpNwY6sY/LUyQTEeaf6yP197WMxkEBQfcKLR1MFpD7+pNTubXnfkH6gwpji+Gc7iyD2Q=="], - - "@aws-sdk/credential-provider-web-identity": ["@aws-sdk/credential-provider-web-identity@3.972.75", "", { "dependencies": { "@aws-sdk/core": "^3.977.8", "@aws-sdk/nested-clients": "^3.997.43", "@aws-sdk/types": "^3.974.4", "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" } }, "sha512-YPN6uoGDgjjjeVFZrcOeCJqmB6zpXoeeNgIjqe+DexJaWqdjVfCCe+VAZwli9Z2h8KhFW8oxkO39emQ1tyz/Mw=="], - - "@aws-sdk/credential-providers": ["@aws-sdk/credential-providers@3.1115.0", "", { "dependencies": { "@aws-sdk/core": "^3.977.8", "@aws-sdk/credential-provider-cognito-identity": "^3.972.68", "@aws-sdk/credential-provider-env": "^3.972.69", "@aws-sdk/credential-provider-http": "^3.972.71", "@aws-sdk/credential-provider-ini": "^3.973.14", "@aws-sdk/credential-provider-login": "^3.972.76", "@aws-sdk/credential-provider-node": "^3.972.80", "@aws-sdk/credential-provider-process": "^3.972.69", "@aws-sdk/credential-provider-sso": "^3.973.13", "@aws-sdk/credential-provider-web-identity": "^3.972.75", "@aws-sdk/nested-clients": "^3.997.43", "@aws-sdk/types": "^3.974.4", "@smithy/core": "^3.31.1", "@smithy/credential-provider-imds": "^4.4.16", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" } }, "sha512-hIhHMt0lqgOr42FfUPh+sNviapX8AfpNEJRoyBq/iMh4deq3BqE2KMpvhLAsLvTHQb4+5yJ1EalRO6yFl0wwPQ=="], - - "@aws-sdk/nested-clients": ["@aws-sdk/nested-clients@3.997.43", "", { "dependencies": { "@aws-sdk/core": "^3.977.8", "@aws-sdk/signature-v4-multi-region": "^3.996.45", "@aws-sdk/types": "^3.974.4", "@smithy/core": "^3.31.1", "@smithy/fetch-http-handler": "^5.6.13", "@smithy/node-http-handler": "^4.9.13", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" } }, "sha512-bit+VpqWNyi3wHxFoTsTliNXimCSL2r2OeDTm7ZrG+YsTZ2D7ofDJ6r/t9PVBn80i6/v0X2h9Tgw6QP2MAKfPw=="], - - "@aws-sdk/signature-v4-multi-region": ["@aws-sdk/signature-v4-multi-region@3.996.45", "", { "dependencies": { "@aws-sdk/types": "^3.974.4", "@smithy/signature-v4": "^5.6.12", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" } }, "sha512-bBuyztukzXq6plzFGHAWiQt0QXo+HL8b8lX5cFTzkez/74PtS1c0qPFCIVuHkyoT+miH2qOjAcm1/yoro2ESPA=="], - - "@aws-sdk/token-providers": ["@aws-sdk/token-providers@3.1111.0", "", { "dependencies": { "@aws-sdk/core": "^3.977.8", "@aws-sdk/nested-clients": "^3.997.43", "@aws-sdk/types": "^3.974.4", "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" } }, "sha512-JfljgoVtl+s3Qy21n9a7Z48uCQaOXcN74KJ3TEQfPoB293GrXFSt6HSQJF1sTZ8c/5QedEvd3NjJQMO4u9qa5A=="], - - "@aws-sdk/types": ["@aws-sdk/types@3.974.4", "", { "dependencies": { "@smithy/types": "^4.16.1", "tslib": "^2.6.2" } }, "sha512-dSFDNG00MEz0/xl5gxL62giLd1iYyJsTxZ1I1DOj6lC+bbgLB4TRsYClJg3b62dhXT1uATzsTNXPnC+33EJV3A=="], - - "@aws-sdk/xml-builder": ["@aws-sdk/xml-builder@3.972.39", "", { "dependencies": { "@smithy/types": "^4.16.1", "tslib": "^2.6.2" } }, "sha512-FTti8DS5MMWXNUWiRwXAJeYS+0GHHiMy0+7XOhcwk63ILHmfS2UFy2z/HNpZCSOJJ3P3dnWY6hfYNW3DF0nXUA=="], - - "@aws/lambda-invoke-store": ["@aws/lambda-invoke-store@0.3.0", "", {}, "sha512-sl4Bm6yiMNYrZKkqqDFWN0UfnWhlS8ivKxrYl+6t0gCLrqr8y3B2IqZZbFRkfaVVp7C/baApyh71P+LeE1A2sQ=="], - - "@chevrotain/cst-dts-gen": ["@chevrotain/cst-dts-gen@10.5.0", "", { "dependencies": { "@chevrotain/gast": "10.5.0", "@chevrotain/types": "10.5.0", "lodash": "4.17.21" } }, "sha512-lhmC/FyqQ2o7pGK4Om+hzuDrm9rhFYIJ/AXoQBeongmn870Xeb0L6oGEiuR8nohFNL5sMaQEJWCxr1oIVIVXrw=="], - - "@chevrotain/gast": ["@chevrotain/gast@10.5.0", "", { "dependencies": { "@chevrotain/types": "10.5.0", "lodash": "4.17.21" } }, "sha512-pXdMJ9XeDAbgOWKuD1Fldz4ieCs6+nLNmyVhe2gZVqoO7v8HXuHYs5OV2EzUtbuai37TlOAQHrTDvxMnvMJz3A=="], - - "@chevrotain/types": ["@chevrotain/types@10.5.0", "", {}, "sha512-f1MAia0x/pAVPWH/T73BJVyO2XU5tI4/iE7cnxb7tqdNTNhQI3Uq3XkqcoteTmD4t1aM0LbHCJOhgIDn07kl2A=="], - - "@chevrotain/utils": ["@chevrotain/utils@10.5.0", "", {}, "sha512-hBzuU5+JjB2cqNZyszkDHZgOSrUUT8V3dhgRl8Q9Gp6dAj/H5+KILGjbhDpc3Iy9qmqlm/akuOI2ut9VUtzJxQ=="], - - "@clack/core": ["@clack/core@1.4.3", "", { "dependencies": { "fast-wrap-ansi": "^0.2.0", "sisteransi": "^1.0.5" } }, "sha512-/kr3UWNtdJfxZtPgDqUOmG2pvwlmcLGheex5yiZKdwbzZJxhV+HMNR9QNmyY5cGwTNV6LrR7Jtp+KjhUAP1qBQ=="], - - "@clack/prompts": ["@clack/prompts@1.7.0", "", { "dependencies": { "@clack/core": "1.4.3", "fast-string-width": "^3.0.2", "fast-wrap-ansi": "^0.2.0", "sisteransi": "^1.0.5" } }, "sha512-y7/yvZ2TPAnR9+jnc00klvNNLkJiXFFrQA/hlLCcxA9a2A4zQIOimyFQ9XfwYKiGD1fb5GY8vbKIIgO8d5Tb2A=="], - - "@cloudflare/unenv-preset": ["@cloudflare/unenv-preset@2.16.1", "", { "peerDependencies": { "unenv": "2.0.0-rc.24", "workerd": ">1.20260305.0 <2.0.0-0" }, "optionalPeers": ["workerd"] }, "sha512-ECxObrMfyTl5bhQf/lZCXwo5G6xX9IAUo+nDMKK4SZ8m4Jvvxp52vilxyySSWh2YTZz8+HQ07qGH/2rEom1vDw=="], - - "@cloudflare/workerd-darwin-64": ["@cloudflare/workerd-darwin-64@1.20260704.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-XO+vvdhhTNZSsIWCkZ+JaE/JrFUmQAB0H0y/sVkAf32xa2TYBRvFUMwjSqf6WxtlxcKPQvmbLfpO/UQ0l/q4eQ=="], - - "@cloudflare/workerd-darwin-arm64": ["@cloudflare/workerd-darwin-arm64@1.20260704.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-6iI7nbOOO8PzEQ6UZVBZB/hv95m8jl0yvyjMuWrF5cJbiLb5zPw3KnpqvGi+aeOs2ZmUkc81i1FWKfXwLXzPRA=="], - - "@cloudflare/workerd-linux-64": ["@cloudflare/workerd-linux-64@1.20260704.1", "", { "os": "linux", "cpu": "x64" }, "sha512-3mT0YHtxT7eLjghu3hKSJDUQoz+AYv8FM43nLPYhM0YiHOxr8OlmvnCb2Lp7v/U3bwd3Gnx7WEqjSppR583mGg=="], - - "@cloudflare/workerd-linux-arm64": ["@cloudflare/workerd-linux-arm64@1.20260704.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-Opo7cPTPg4x0WwK+eZSDszCyFLKQkOGNCWxF005HRTJ5SJH8h0K9KyrC1k4LBwx3haXSVi+E1eGqo1gZ1Hmhkg=="], - - "@cloudflare/workerd-windows-64": ["@cloudflare/workerd-windows-64@1.20260704.1", "", { "os": "win32", "cpu": "x64" }, "sha512-a97Ecnzhy04x3U052VKPCNp863F7Wf00WY7Ga5P0SbtYvaO1PDzylsHrvFMPKeiDFcOwqiredawmJ+v6bhIgeQ=="], - - "@cloudflare/workers-types": ["@cloudflare/workers-types@5.20260821.1", "", {}, "sha512-jZiTISghTPeytJ7eDt5K1AV7df998xGECMgT8oy838VfFLJLROvdLzDaJb0/Jv4WfxO00keNoWt1d6olL7URRg=="], + "@cloudflare/workers-types": ["@cloudflare/workers-types@5.20260829.1", "", {}, "sha512-SsH4G9+JePvrBmz+b5Dl67LQ9w2/ycoIpAPcAkfg2aEs2SEisQHk7/AY0TymSXEBbDbWgcBqoLe4hNcuY3CxWA=="], "@distilled.cloud/aws": ["@distilled.cloud/aws@1.0.0-rc.2", "", { "dependencies": { "@aws-crypto/crc32": "^5.2.0", "@aws-crypto/util": "^5.2.0", "@aws-sdk/credential-providers": "^3.994.0", "@aws-sdk/types": "^3.973.1", "@distilled.cloud/core": "1.0.0-rc.2", "@smithy/shared-ini-file-loader": "^4.4.3", "@smithy/types": "^4.12.0", "@smithy/util-base64": "^4.3.0", "aws4fetch": "^1.0.20", "fast-xml-parser": "^5.3.2" }, "peerDependencies": { "effect": ">=4.0.0-beta.102 || >=4.0.0" } }, "sha512-hTWmdpfaKt6yLQ1YrJ17tp0DXINH7Wm5WQ05ap1FZW13Kwv+HzejXc4QPOYS6KT00Tlrfm6EEkTd3fDrY8dSGQ=="], "@distilled.cloud/axiom": ["@distilled.cloud/axiom@1.0.0-rc.2", "", { "dependencies": { "@distilled.cloud/core": "1.0.0-rc.2", "@effect/platform-bun": ">=4.0.0-beta.102 || >=4.0.0", "effect": ">=4.0.0-beta.102 || >=4.0.0" } }, "sha512-okRnWBdEQ6vYanYtiKbNzNJCgccEa7ZgeytHaNRTvIpHD4PlwG5WYwBsLkhTYjjudOvD5yjJ4H2N8dQQsJlGrg=="], - "@distilled.cloud/cloudflare": ["@distilled.cloud/cloudflare@0.30.3", "", { "dependencies": { "@distilled.cloud/core": "0.30.3" }, "peerDependencies": { "effect": ">=4.0.0-beta.100 || >=4.0.0" } }, "sha512-IwQyIZrfzRJ7Dn9Plsk5pMlr50CT72fMnD5YCFy31MKAthh906ewcO3NuJOKHGA8AF9u6SKTlebsQx4Jnj8uwA=="], + "@distilled.cloud/cloudflare": ["@distilled.cloud/cloudflare@1.0.0-rc.2", "", { "dependencies": { "@distilled.cloud/core": "1.0.0-rc.2", "@effect/platform-bun": ">=4.0.0-beta.102 || >=4.0.0", "effect": ">=4.0.0-beta.102 || >=4.0.0" } }, "sha512-GGO5I8OxY/0iUT2bj+Ug+ivrjS6V1/nvdMRfL8dLOrpBkIhR8AFkLPgdatBwdIWeJWRE5wdU4wy+aeHJNp3oJA=="], "@distilled.cloud/cloudflare-rolldown-plugin": ["@distilled.cloud/cloudflare-rolldown-plugin@0.16.1", "", { "dependencies": { "@cloudflare/unenv-preset": "^2.16.0", "magic-string": "^0.30.21", "unenv": "^2.0.0-rc.24" }, "peerDependencies": { "rolldown": "~1.1.5", "vite": "^7.0.0 || ^8.0.0" }, "optionalPeers": ["rolldown", "vite"] }, "sha512-yj424SA0LMag1B6Ak/bhxEN3Wwg6j3Erv2xmRbcWgY1HbfZV5J1pUgRZ0RackjlSUAmCTRRxTrmZnQfqo5t2zQ=="], @@ -270,12 +296,11 @@ "@distilled.cloud/cloudflare-vite-plugin": ["@distilled.cloud/cloudflare-vite-plugin@0.16.1", "", { "dependencies": { "@distilled.cloud/cloudflare-rolldown-plugin": "0.16.1" }, "peerDependencies": { "@distilled.cloud/cloudflare": "^0.30.3", "@distilled.cloud/cloudflare-runtime": "0.16.1", "@effect/platform-bun": ">=4.0.0-beta.102 || >=4.0.0", "@effect/platform-node": ">=4.0.0-beta.102 || >=4.0.0", "effect": ">=4.0.0-beta.102 || >=4.0.0", "vite": "^7.0.0 || ^8.0.0" }, "optionalPeers": ["@effect/platform-bun", "@effect/platform-node"] }, "sha512-OzVZlegqYqt/bNdVHOVKp/vBnUU1+Cdfymu2yBJioAOjNIJEW2uKUKm6KwHZf29HlgGDh2jSruqOWui86kM6Gg=="], - "@distilled.cloud/core": ["@distilled.cloud/core@0.30.3", "", { "peerDependencies": { "effect": ">=4.0.0-beta.100 || >=4.0.0" } }, "sha512-RupX597cPmceEiOY6csihFbzH2WhDkfbwGCMk+Izx8+f16u+aLm4mgyrYoxj1/dzIHsyIfw8sFKgNPzAg0Rx2Q=="], + "@distilled.cloud/core": ["@distilled.cloud/core@1.0.0-rc.2", "", { "peerDependencies": { "effect": ">=4.0.0-beta.102 || >=4.0.0" } }, "sha512-cVswTWsqC15Z9EPAOdRpfTG4UU8JPXhQEeH2ThW7Yh2BRl4lhIIOdxbRqUsRXPDMn24Mn08h2C3A6MGKP/KwLA=="], "@distilled.cloud/neon": ["@distilled.cloud/neon@1.0.0-rc.2", "", { "dependencies": { "@distilled.cloud/core": "1.0.0-rc.2", "@effect/platform-bun": ">=4.0.0-beta.102 || >=4.0.0", "effect": ">=4.0.0-beta.102 || >=4.0.0" } }, "sha512-j1SRh/ionzWDeS8nO3+zF8h2zHNOddmTfqeev5LBs1pKeQWBJ3ZVDK3GeBACZzaeW3rCcll8eJEZ6fRnrp3xbw=="], "@distilled.cloud/planetscale": ["@distilled.cloud/planetscale@1.0.0-rc.2", "", { "dependencies": { "@distilled.cloud/core": "1.0.0-rc.2", "@effect/platform-bun": ">=4.0.0-beta.102 || >=4.0.0", "effect": ">=4.0.0-beta.102 || >=4.0.0" } }, "sha512-ucuQ0VM3bmovjzHoC/C7uo9634EQOJcI1gzx0jjdE2QIDsvy56UhjT3alilq9kADGz1V0/LUHOV3Xf1VqJf6Nw=="], ->>>>>>> @{-1} "@effect/platform-bun": ["@effect/platform-bun@4.0.0-beta.102", "", { "dependencies": { "@effect/platform-node-shared": "^4.0.0-beta.102" }, "peerDependencies": { "effect": "^4.0.0-beta.102" } }, "sha512-hTIb0jjTfXhNgnDq2OX5wrigc0OSvTT0VWWb1PLpMM395RJPu8rCIbTlGhy0NS7kZOd8FfgNi9e0sDhgyu+5Ag=="], @@ -283,14 +308,9 @@ "@effect/platform-node-shared": ["@effect/platform-node-shared@4.0.0-beta.102", "", { "dependencies": { "@types/ws": "^8.18.1", "ws": "^8.21.0" }, "peerDependencies": { "effect": "^4.0.0-beta.102" } }, "sha512-gVd793I72MrkX4dXo7eYtRKfNj0RW4eMRfVEKEJI16h2+mBDCzQ+gqMrog2hSTHQnaIbvbYShNQ4TVGuRCYZeQ=="], -<<<<<<< HEAD - "@effect/sql-d1": ["@effect/sql-d1@4.0.0-rc.111", "", { "dependencies": { "@cloudflare/workers-types": "^5.20260816.1" }, "peerDependencies": { "effect": "^4.0.0-rc.111" } }, "sha512-hjIoVS59gAvP1DjB+R5hwL9n/UbS1598/qcT1Hp3Tn3ksuJUOPTXfsCCiAQT3Ueecfkbiy32fxrCbzD0Z1YJLA=="], -||||||| 47206cf -======= "@effect/sql-d1": ["@effect/sql-d1@4.0.0-beta.102", "", { "dependencies": { "@cloudflare/workers-types": "^5.20260708.1" }, "peerDependencies": { "effect": "^4.0.0-beta.102" } }, "sha512-p6V1BqXEKF/EVH1JkWjjslPtg5Knl2TWopMnDdgto2jGfRpCHfhEaI8fA2OmR5J5H/TIH9ihYBiUA6Awru2Kvg=="], "@effect/sql-sqlite-do": ["@effect/sql-sqlite-do@4.0.0-beta.102", "", { "peerDependencies": { "effect": "^4.0.0-beta.102" } }, "sha512-akZzkZjVUwXyMGV/EF7O1N8Lgcl3EW1TQOjA+NDebzmlGQYohlU4959sV2XnMrWXdXF240w3rr4UH43H/lCfJA=="], ->>>>>>> @{-1} "@effect/tsgo": ["@effect/tsgo@0.36.1", "", { "optionalDependencies": { "@effect/tsgo-darwin-arm64": "0.36.1", "@effect/tsgo-darwin-x64": "0.36.1", "@effect/tsgo-linux-arm": "0.36.1", "@effect/tsgo-linux-arm64": "0.36.1", "@effect/tsgo-linux-x64": "0.36.1", "@effect/tsgo-win32-arm64": "0.36.1", "@effect/tsgo-win32-x64": "0.36.1" }, "bin": { "effect-tsgo": "dist/effect-tsgo.cjs" } }, "sha512-w52AXlRYFEJHU39FhL68dcFCGDKW7qTkrCMUWWlCMYkFoOVFvwp+4qVM4OcrqPeNFizmhqEGHGrvUabaNf086g=="], @@ -324,12 +344,6 @@ "@hono/node-server": ["@hono/node-server@1.19.9", "", { "peerDependencies": { "hono": "^4" } }, "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw=="], -<<<<<<< HEAD - "@ioredis/commands": ["@ioredis/commands@1.10.0", "", {}, "sha512-UmeW7z4LfctwoQ5wkhVzgq8tXkreED2xZGpX+Bg+zA+WJFZCT6c062AfCK/Dfk81xZnnwdhJCUMkitihRaoC2Q=="], - - "@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="], -||||||| 47206cf -======= "@img/colour": ["@img/colour@1.1.0", "", {}, "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ=="], "@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.2.4" }, "os": "darwin", "cpu": "arm64" }, "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w=="], @@ -381,44 +395,9 @@ "@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.34.5", "", { "os": "win32", "cpu": "x64" }, "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw=="], "@ioredis/commands": ["@ioredis/commands@1.10.0", "", {}, "sha512-UmeW7z4LfctwoQ5wkhVzgq8tXkreED2xZGpX+Bg+zA+WJFZCT6c062AfCK/Dfk81xZnnwdhJCUMkitihRaoC2Q=="], ->>>>>>> @{-1} - - "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="], - -<<<<<<< HEAD - "@labs/infra": ["@labs/infra@workspace:packages/infra"], - - "@libsql/client": ["@libsql/client@0.17.4", "", { "dependencies": { "@libsql/core": "^0.17.4", "@libsql/hrana-client": "^0.10.0", "js-base64": "^3.7.5", "libsql": "^0.5.28", "promise-limit": "^2.7.0" } }, "sha512-lYayFWasDV78A+TjlEhr6ubb3odBV6OHjb+wdp8VQcyWWAEIjuwbCHaraEUS4m4yWoo0BvZo96It4VdzZRmRWw=="], - - "@libsql/core": ["@libsql/core@0.17.4", "", { "dependencies": { "js-base64": "^3.7.5" } }, "sha512-LqF9gIvnJ38nmAH1y/ChizHqDO/MO1wLgA96XrraulEEbqXxLjleSH92YWTolbuJKgPUmGu4aJk9W3UnAcxLOQ=="], - - "@libsql/darwin-arm64": ["@libsql/darwin-arm64@0.5.29", "", { "os": "darwin", "cpu": "arm64" }, "sha512-K+2RIB1OGFPYQbfay48GakLhqf3ArcbHqPFu7EZiaUcRgFcdw8RoltsMyvbj5ix2fY0HV3Q3Ioa/ByvQdaSM0A=="], - - "@libsql/darwin-x64": ["@libsql/darwin-x64@0.5.29", "", { "os": "darwin", "cpu": "x64" }, "sha512-OtT+KFHsKFy1R5FVadr8FJ2Bb1mghtXTyJkxv0trocq7NuHntSki1eUbxpO5ezJesDvBlqFjnWaYYY516QNLhQ=="], - - "@libsql/hrana-client": ["@libsql/hrana-client@0.10.0", "", { "dependencies": { "@libsql/isomorphic-ws": "^0.1.5", "js-base64": "^3.7.5" } }, "sha512-OoA4EMqRAC7kn7V2P6EQqRcpZf2W+AjsNIyCizBg339Tq/aMC7sRnzs3SklderhmQWAqEzvv8A2vhxVmWpkVvw=="], - - "@libsql/isomorphic-ws": ["@libsql/isomorphic-ws@0.1.5", "", { "dependencies": { "@types/ws": "^8.5.4", "ws": "^8.13.0" } }, "sha512-DtLWIH29onUYR00i0GlQ3UdcTRC6EP4u9w/h9LxpUZJWRMARk6dQwZ6Jkd+QdwVpuAOrdxt18v0K2uIYR3fwFg=="], - - "@libsql/linux-arm-gnueabihf": ["@libsql/linux-arm-gnueabihf@0.5.29", "", { "os": "linux", "cpu": "arm" }, "sha512-CD4n4zj7SJTHso4nf5cuMoWoMSS7asn5hHygsDuhRl8jjjCTT3yE+xdUvI4J7zsyb53VO5ISh4cwwOtf6k2UhQ=="], - - "@libsql/linux-arm-musleabihf": ["@libsql/linux-arm-musleabihf@0.5.29", "", { "os": "linux", "cpu": "arm" }, "sha512-2Z9qBVpEJV7OeflzIR3+l5yAd4uTOLxklScYTwpZnkm2vDSGlC1PRlueLaufc4EFITkLKXK2MWBpexuNJfMVcg=="], - - "@libsql/linux-arm64-gnu": ["@libsql/linux-arm64-gnu@0.5.29", "", { "os": "linux", "cpu": "arm64" }, "sha512-gURBqaiXIGGwFNEaUj8Ldk7Hps4STtG+31aEidCk5evMMdtsdfL3HPCpvys+ZF/tkOs2MWlRWoSq7SOuCE9k3w=="], - - "@libsql/linux-arm64-musl": ["@libsql/linux-arm64-musl@0.5.29", "", { "os": "linux", "cpu": "arm64" }, "sha512-fwgYZ0H8mUkyVqXZHF3mT/92iIh1N94Owi/f66cPVNsk9BdGKq5gVpoKO+7UxaNzuEH1roJp2QEwsCZMvBLpqg=="], - - "@libsql/linux-x64-gnu": ["@libsql/linux-x64-gnu@0.5.29", "", { "os": "linux", "cpu": "x64" }, "sha512-y14V0vY0nmMC6G0pHeJcEarcnGU2H6cm21ZceRkacWHvQAEhAG0latQkCtoS2njFOXiYIg+JYPfAoWKbi82rkg=="], - - "@libsql/linux-x64-musl": ["@libsql/linux-x64-musl@0.5.29", "", { "os": "linux", "cpu": "x64" }, "sha512-gquqwA/39tH4pFl+J9n3SOMSymjX+6kZ3kWgY3b94nXFTwac9bnFNMffIomgvlFaC4ArVqMnOZD3nuJ3H3VO1w=="], - - "@libsql/win32-x64-msvc": ["@libsql/win32-x64-msvc@0.5.29", "", { "os": "win32", "cpu": "x64" }, "sha512-4/0CvEdhi6+KjMxMaVbFM2n2Z44escBRoEYpR+gZg64DdetzGnYm8mcNLcoySaDJZNaBd6wz5DNdgRmcI4hXcg=="], - "@mapbox/node-pre-gyp": ["@mapbox/node-pre-gyp@2.0.3", "", { "dependencies": { "consola": "^3.2.3", "detect-libc": "^2.0.0", "https-proxy-agent": "^7.0.5", "node-fetch": "^2.6.7", "nopt": "^8.0.0", "semver": "^7.5.3", "tar": "^7.4.0" }, "bin": { "node-pre-gyp": "bin/node-pre-gyp" } }, "sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg=="], + "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.6.0", "", {}, "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw=="], - "@mongodb-js/saslprep": ["@mongodb-js/saslprep@1.5.0", "", { "dependencies": { "sparse-bitfield": "^3.0.3" } }, "sha512-Hk1SKJCMcCos38+vqDnZzlIo4XRj9yCGzYkjB4LcqpeXRIYfia1UWTz+VrueLxoU+uSRJzgkufxoRZg8gi52YA=="], -||||||| 47206cf -======= "@libsql/client": ["@libsql/client@0.17.4", "", { "dependencies": { "@libsql/core": "^0.17.4", "@libsql/hrana-client": "^0.10.0", "js-base64": "^3.7.5", "libsql": "^0.5.28", "promise-limit": "^2.7.0" } }, "sha512-lYayFWasDV78A+TjlEhr6ubb3odBV6OHjb+wdp8VQcyWWAEIjuwbCHaraEUS4m4yWoo0BvZo96It4VdzZRmRWw=="], "@libsql/core": ["@libsql/core@0.17.4", "", { "dependencies": { "js-base64": "^3.7.5" } }, "sha512-LqF9gIvnJ38nmAH1y/ChizHqDO/MO1wLgA96XrraulEEbqXxLjleSH92YWTolbuJKgPUmGu4aJk9W3UnAcxLOQ=="], @@ -444,7 +423,6 @@ "@libsql/linux-x64-musl": ["@libsql/linux-x64-musl@0.5.29", "", { "os": "linux", "cpu": "x64" }, "sha512-gquqwA/39tH4pFl+J9n3SOMSymjX+6kZ3kWgY3b94nXFTwac9bnFNMffIomgvlFaC4ArVqMnOZD3nuJ3H3VO1w=="], "@libsql/win32-x64-msvc": ["@libsql/win32-x64-msvc@0.5.29", "", { "os": "win32", "cpu": "x64" }, "sha512-4/0CvEdhi6+KjMxMaVbFM2n2Z44escBRoEYpR+gZg64DdetzGnYm8mcNLcoySaDJZNaBd6wz5DNdgRmcI4hXcg=="], ->>>>>>> @{-1} "@mrleebo/prisma-ast": ["@mrleebo/prisma-ast@0.13.1", "", { "dependencies": { "chevrotain": "^10.5.0", "lilconfig": "^2.1.0" } }, "sha512-XyroGQXcHrZdvmrGJvsA9KNeOOgGMg1Vg9OlheUsBOSKznLMDl+YChxbkboRHvtFYJEMRYmlV3uoo/njCw05iw=="], @@ -464,36 +442,6 @@ "@neon-rs/load": ["@neon-rs/load@0.0.4", "", {}, "sha512-kTPhdZyTQxB+2wpiRcFWrDcejc4JI6tkPuS7UZCG4l6Zvc5kU/gGQ/ozvHTh1XR5tS+UlfAfGuPajjzQjCiHCw=="], -<<<<<<< HEAD - "@nodable/entities": ["@nodable/entities@3.0.0", "", {}, "sha512-8L9xFeTYKhm49xfIypoe2W5wV1m/3Z58kT+7kR9A8OyFxcPduI4VmxaUMQyKYrRjUoLLSXv6EKKID5Tvj9cUVw=="], - - "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], - - "@nodelib/fs.stat": ["@nodelib/fs.stat@2.0.5", "", {}, "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="], - - "@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="], - - "@octokit/auth-token": ["@octokit/auth-token@6.0.0", "", {}, "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w=="], - - "@octokit/core": ["@octokit/core@7.0.7", "", { "dependencies": { "@octokit/auth-token": "^6.0.0", "@octokit/graphql": "^9.0.4", "@octokit/request": "^10.0.13", "@octokit/request-error": "^7.1.1", "@octokit/types": "^17.0.0", "before-after-hook": "^4.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-DcB0M3KFgr9ECI328lhBMVsyFT2DnmNucSBTqEN3exyNKUzkkpUSCHmTRcunF41Eou2TIQKW4seewri8ON9bSA=="], - - "@octokit/endpoint": ["@octokit/endpoint@11.0.4", "", { "dependencies": { "@octokit/types": "^17.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-f1cOWoHPmxryJFknxbtDdjODWfV8A9tc8Aae6ermXPNgHFZ/x91AtHIz4gicEjL8hkJiip+u21QHJORfBv/qiA=="], - - "@octokit/graphql": ["@octokit/graphql@9.0.4", "", { "dependencies": { "@octokit/request": "^10.0.13", "@octokit/types": "^17.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-5s15CCiY8XXQ+FG+b1YQcl6Z2FA++nwAz/tg2VUrTmnMncP+2nnGUEYANImdnxsA2Fnq+Mbl7hDjUTw7cFAwcg=="], - - "@octokit/openapi-types": ["@octokit/openapi-types@28.0.0", "", {}, "sha512-0rFyLuyHvIj6uuZWuDslxkowFYdPXoNIkeAv4b27dzm2Tf4vGWXnPsMcxs7d65kLdMERgP3wc1AEPlqMz8e1cQ=="], - - "@octokit/openapi-webhooks-types": ["@octokit/openapi-webhooks-types@12.1.0", "", {}, "sha512-WiuzhOsiOvb7W3Pvmhf8d2C6qaLHXrWiLBP4nJ/4kydu+wpagV5Fkz9RfQwV2afYzv3PB+3xYgp4mAdNGjDprA=="], - - "@octokit/plugin-paginate-rest": ["@octokit/plugin-paginate-rest@14.0.0", "", { "dependencies": { "@octokit/types": "^16.0.0" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw=="], - - "@octokit/plugin-request-log": ["@octokit/plugin-request-log@6.0.0", "", { "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-UkOzeEN3W91/eBq9sPZNQ7sUBvYCqYbrrD8gTbBuGtHEuycE4/awMXcYvx6sVYo7LypPhmQwwpUe4Yyu4QZN5Q=="], - - "@octokit/plugin-rest-endpoint-methods": ["@octokit/plugin-rest-endpoint-methods@17.0.0", "", { "dependencies": { "@octokit/types": "^16.0.0" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-B5yCyIlOJFPqUUeiD0cnBJwWJO8lkJs5d8+ze9QDP6SvfiXSz1BF+91+0MeI1d2yxgOhU/O+CvtiZ9jSkHhFAw=="], - - "@octokit/request": ["@octokit/request@10.0.15", "", { "dependencies": { "@octokit/endpoint": "^11.0.3", "@octokit/request-error": "^7.1.1", "@octokit/types": "^17.0.0", "content-type": "^3.0.0", "json-with-bigint": "^3.5.12", "universal-user-agent": "^7.0.2" } }, "sha512-3CBg9aJ0hO9Pjyij8LbK/xYtEaPws9SW7xKz67daPNxQB1q5Y9OMA7DDOG0A6Hwf9ygGu3tvzusg0LXQ8/wAjA=="], -||||||| 47206cf -======= "@noble/ciphers": ["@noble/ciphers@1.3.0", "", {}, "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw=="], "@noble/curves": ["@noble/curves@1.9.7", "", { "dependencies": { "@noble/hashes": "1.8.0" } }, "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw=="], @@ -526,8 +474,7 @@ "@octokit/plugin-rest-endpoint-methods": ["@octokit/plugin-rest-endpoint-methods@17.0.0", "", { "dependencies": { "@octokit/types": "^16.0.0" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-B5yCyIlOJFPqUUeiD0cnBJwWJO8lkJs5d8+ze9QDP6SvfiXSz1BF+91+0MeI1d2yxgOhU/O+CvtiZ9jSkHhFAw=="], - "@octokit/request": ["@octokit/request@10.0.14", "", { "dependencies": { "@octokit/endpoint": "^11.0.3", "@octokit/request-error": "^7.1.1", "@octokit/types": "^17.0.0", "content-type": "^2.0.0", "json-with-bigint": "^3.5.12", "universal-user-agent": "^7.0.2" } }, "sha512-bgWgiSfFS689/AxQDarU+b3Qu1FYewfVr5vI/jhV84s7GQ3C2OsdRxukGGYKB37MCgwcS50UrfBLlHzhiG13sw=="], ->>>>>>> @{-1} + "@octokit/request": ["@octokit/request@10.0.15", "", { "dependencies": { "@octokit/endpoint": "^11.0.3", "@octokit/request-error": "^7.1.1", "@octokit/types": "^17.0.0", "content-type": "^3.0.0", "json-with-bigint": "^3.5.12", "universal-user-agent": "^7.0.2" } }, "sha512-3CBg9aJ0hO9Pjyij8LbK/xYtEaPws9SW7xKz67daPNxQB1q5Y9OMA7DDOG0A6Hwf9ygGu3tvzusg0LXQ8/wAjA=="], "@octokit/request-error": ["@octokit/request-error@7.1.1", "", { "dependencies": { "@octokit/types": "^17.0.0" } }, "sha512-+eaY7G2VVpSf2pc5Gn1+mph837V/d/TYTJAgWL9Tb0ogGYcpN3IlAVFgjL+Vv93F/sevrxkvsYCedtpLdcFLzA=="], @@ -539,8 +486,6 @@ "@octokit/webhooks-methods": ["@octokit/webhooks-methods@6.0.0", "", {}, "sha512-MFlzzoDJVw/GcbfzVC1RLR36QqkTLUf79vLVO3D+xn7r0QgxnFoLZgtrzxiQErAjFUOdH6fas2KeQJ1yr/qaXQ=="], - "@ops-demo/web": ["@ops-demo/web@workspace:apps/web"], - "@oxc-project/types": ["@oxc-project/types@0.139.0", "", {}, "sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw=="], "@oxfmt/binding-android-arm-eabi": ["@oxfmt/binding-android-arm-eabi@0.62.0", "", { "os": "android", "cpu": "arm" }, "sha512-pdsv0C4gPjJ8H1+sd8u0BDx+yLACTL+rgeMIOL1ln4ihSnhw8CWXtYWgvcSkyTfgGBIzFKab+d8rx9Xl4en/Kw=="], @@ -639,17 +584,25 @@ "@prisma/query-plan-executor": ["@prisma/query-plan-executor@7.2.0", "", {}, "sha512-EOZmNzcV8uJ0mae3DhTsiHgoNCuu1J9mULQpGCh62zN3PxPTd+qI9tJvk5jOst8WHKQNwJWR3b39t0XvfBB0WQ=="], -<<<<<<< HEAD -||||||| 47206cf -======= "@puppeteer/browsers": ["@puppeteer/browsers@2.13.2", "", { "dependencies": { "debug": "^4.4.3", "extract-zip": "^2.0.1", "progress": "^2.0.3", "proxy-agent": "^6.5.0", "semver": "^7.7.4", "tar-fs": "^3.1.1", "yargs": "^17.7.2" }, "bin": { "browsers": "lib/cjs/main-cli.js" } }, "sha512-5EUZSUIc37H6aIXyWO0Z4y8NlF8NnjgmqeQgOGiswAU7pY0HOo16ho4+alIWmSfdZnjqBRawMsP3I5YqLSn6kw=="], ->>>>>>> @{-1} + "@repo/agent-core": ["@repo/agent-core@workspace:packages/agent-core"], + + "@repo/agent-demo": ["@repo/agent-demo@workspace:packages/agent-demo"], + + "@repo/agent-runtime": ["@repo/agent-runtime@workspace:packages/agent-runtime"], + + "@repo/agent-testkit": ["@repo/agent-testkit@workspace:packages/agent-testkit"], + + "@repo/infra": ["@repo/infra@workspace:packages/infra"], + + "@repo/sandbox-client": ["@repo/sandbox-client@workspace:packages/sandbox-client"], + "@repo/tooling": ["@repo/tooling@workspace:packages/tooling"], "@repo/web-core": ["@repo/web-core@workspace:packages/web-core"], - "@rolldown/binding-android-arm-eabi": ["@rolldown/binding-android-arm-eabi@1.2.5", "", { "os": "android", "cpu": "arm" }, "sha512-DLe/i+l8ynIBY7XEQ191TeZvCoowIGa18R+dIV30GW7DiOtp74i/xX8hs8GUjW5ARV7VZuie3d6AumSmCwbeRA=="], + "@rolldown/binding-android-arm-eabi": ["@rolldown/binding-android-arm-eabi@1.2.6", "", { "os": "android", "cpu": "arm" }, "sha512-b+jTcARdTiFLI6jB4a5XjTm0RWd6KcRfQj/I2356fxUZemiho9zQLxo0RtCuMDAyKcLo6cEltkgbQp6d1+sjjQ=="], "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.1.5", "", { "os": "android", "cpu": "arm64" }, "sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ=="], @@ -673,15 +626,7 @@ "@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.1.5", "", { "os": "linux", "cpu": "x64" }, "sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg=="], -<<<<<<< HEAD "@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.1.5", "", { "os": "none", "cpu": "arm64" }, "sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw=="], -||||||| 47206cf - "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.2.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-AWLi0uBRYh6QlE7OKhiz+phZC0qwtij2QZmhmOdsLdFn64m7oMpooE9ICE3lhm9xMb4SpDo2WbHcxX1iFLFtqw=="], -======= - "@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.1.5", "", { "dependencies": { "@emnapi/core": "1.11.1", "@emnapi/runtime": "1.11.1", "@napi-rs/wasm-runtime": "^1.1.6" }, "cpu": "none" }, "sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA=="], - - "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.2.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-AWLi0uBRYh6QlE7OKhiz+phZC0qwtij2QZmhmOdsLdFn64m7oMpooE9ICE3lhm9xMb4SpDo2WbHcxX1iFLFtqw=="], ->>>>>>> @{-1} "@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.1.5", "", { "dependencies": { "@emnapi/core": "1.11.1", "@emnapi/runtime": "1.11.1", "@napi-rs/wasm-runtime": "^1.1.6" }, "cpu": "none" }, "sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA=="], @@ -691,12 +636,7 @@ "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.1", "", {}, "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw=="], -<<<<<<< HEAD - "@rollup/pluginutils": ["@rollup/pluginutils@5.4.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg=="], -||||||| 47206cf -======= "@scure/base": ["@scure/base@1.2.6", "", {}, "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg=="], ->>>>>>> @{-1} "@smithy/core": ["@smithy/core@3.33.3", "", { "dependencies": { "@smithy/types": "^4.17.2", "tslib": "^2.6.2" } }, "sha512-CsOeKq/9kA3y6VJHt+/+VTCtBaxJ4OTFpgrjIUhPpDIKxBci1k2bJaQASF2h/ELWrulGp+t97DZ0mevfAD8idg=="], @@ -724,35 +664,67 @@ "@standard-schema/spec": ["@standard-schema/spec@1.1.0", "", {}, "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="], -<<<<<<< HEAD - "@turbo/darwin-64": ["@turbo/darwin-64@2.10.11", "", { "os": "darwin", "cpu": "x64" }, "sha512-v3R+1R/Ysozyo+p7Ri8MCIbndOvYt3DgPFrGLhrhQHfvyvbxyH3WyJj+A/2JTNmNleuAlh3JUyCV0iSVHIONTA=="], + "@swc/core": ["@swc/core@1.16.2", "", { "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.28" }, "optionalDependencies": { "@swc/core-darwin-arm64": "1.16.2", "@swc/core-darwin-x64": "1.16.2", "@swc/core-linux-arm-gnueabihf": "1.16.2", "@swc/core-linux-arm64-gnu": "1.16.2", "@swc/core-linux-arm64-musl": "1.16.2", "@swc/core-linux-ppc64-gnu": "1.16.2", "@swc/core-linux-s390x-gnu": "1.16.2", "@swc/core-linux-x64-gnu": "1.16.2", "@swc/core-linux-x64-musl": "1.16.2", "@swc/core-win32-arm64-msvc": "1.16.2", "@swc/core-win32-ia32-msvc": "1.16.2", "@swc/core-win32-x64-msvc": "1.16.2" }, "peerDependencies": { "@swc/helpers": ">=0.5.17" }, "optionalPeers": ["@swc/helpers"] }, "sha512-95I4kiSMeveI/Mhi+tE4fiWcWLUMfzfKrk0jtr8LRMqHgOgq+xHS+zExkDqoO4b5OeeuXHMWVdD5MeP3X6sULw=="], - "@turbo/darwin-arm64": ["@turbo/darwin-arm64@2.10.11", "", { "os": "darwin", "cpu": "arm64" }, "sha512-R0a0CvGAeYYsBgPIgFNB3agGXh6qukjduNhFlwVVX1Ss2IdBJLXmgjytNGmo084bLKS0B6UdLRwKhXMHKKaObQ=="], + "@swc/core-darwin-arm64": ["@swc/core-darwin-arm64@1.16.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-i/j0HNbnn79qnTVPicvay92Nark8fW8NQqn1e2mGERjUXNpBV0+SwQxlRpk2zBhn6laJ8PDI6Kn1nHZhnz3LCA=="], - "@turbo/linux-64": ["@turbo/linux-64@2.10.11", "", { "os": [ "linux", "android", ], "cpu": "x64" }, "sha512-dGlY2vg7jpsLjGS1bf9sD/cw1sGMAYbeHGQKGRFxd5Zaj+Ufbj8cNXl/vIit8ueCU97zhL/znn60ZV5iSfZAxw=="], + "@swc/core-darwin-x64": ["@swc/core-darwin-x64@1.16.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-HrwqHyEyHVXO3qTk8EkNK7/b6sOZSEoNh+pot6RdE5x0LbNqfo8LtJUvi3UTXr+5ja/o5HbJdW80eCXo+NjbiA=="], - "@turbo/linux-arm64": ["@turbo/linux-arm64@2.10.11", "", { "os": [ "linux", "android", ], "cpu": "arm64" }, "sha512-eSP9+jjsSCBs2x0QpJZlp49dSD1EIMwXH7PsMIhdWk7w6IThhuKJ+jL95JQ2IW7tRjRmdh8gKcKQtrHLD5R5lA=="], + "@swc/core-linux-arm-gnueabihf": ["@swc/core-linux-arm-gnueabihf@1.16.2", "", { "os": "linux", "cpu": "arm" }, "sha512-MdXi83Z/gGp1LIrg+h7HKxiul/z/Bty/ZJSvYAFqDl9zteC1XLSAZdScquKtXPp50rdyXqritTDCqQBhwVfZKA=="], - "@turbo/windows-64": ["@turbo/windows-64@2.10.11", "", { "os": "win32", "cpu": "x64" }, "sha512-4aD7edogJ8arK8DOyvjTI2KKwmchD5M/WM4BZgidrtFf7aSgn8Ce2rJnDwmriw980c2cKlHnhXtlGy38VtKB8g=="], + "@swc/core-linux-arm64-gnu": ["@swc/core-linux-arm64-gnu@1.16.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-/jcTmK6Ktz3owM3YtiKvjofV6p3VpHnYzTIrOGwDIOsDigRAAVuZ8east33wYO/7UTdKYFlyHNnJNT0WJqOA3Q=="], - "@turbo/windows-arm64": ["@turbo/windows-arm64@2.10.11", "", { "os": "win32", "cpu": "arm64" }, "sha512-m8tJkIrTrbQ9O1uHxV0GUq623Zg1678xGna8eMsy4KbygUX/wVFgdZDYV/AxyoyaW/U7nyKoBvaDVwm22p9xqA=="], + "@swc/core-linux-arm64-musl": ["@swc/core-linux-arm64-musl@1.16.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-4gFarKaFnlJTSlJYKmMhV4u+3YE4uYfiydpBoYjmgQhCf9lAieOq+WilZaK9vVSHeqLuQpTEiGULZqAdsRX5Dw=="], - "@tybys/wasm-util": ["@tybys/wasm-util@0.10.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg=="], + "@swc/core-linux-ppc64-gnu": ["@swc/core-linux-ppc64-gnu@1.16.2", "", { "os": "linux", "cpu": "ppc64" }, "sha512-syqSLGd6KlZ1PciNzs6bIUlhOuFztZufebOHaERjc4N4SqNZxyqYd4I+jj/EfOYnpe0kNjccn9HJLN1p5dz3+w=="], - "@types/aws-lambda": ["@types/aws-lambda@8.10.162", "", {}, "sha512-Fn658grtLOci1oxi1391vvDWJRKNGWRSqfxRkmN/Iy3c0tQH1USMKEXcPYHLvope+ZgTFocx9FRQJx1muBL6qw=="], + "@swc/core-linux-s390x-gnu": ["@swc/core-linux-s390x-gnu@1.16.2", "", { "os": "linux", "cpu": "s390x" }, "sha512-ZBBLK+ewGyXLzWeMS7wbKtWBdnif6etn7xvPY/iOfbdsjX/+bgkp1pQt2lWF2wlu2hXYZuhJ/tHZE/QR8/apzg=="], + + "@swc/core-linux-x64-gnu": ["@swc/core-linux-x64-gnu@1.16.2", "", { "os": "linux", "cpu": "x64" }, "sha512-LyHJgxCA4Tje0ysBMbEb0tt/ie8kgUKoFE3JAKFhpevmTmhYEoC0H9s47WuDsqiFckF1ITUguZIXJG6K5e0dvg=="], + + "@swc/core-linux-x64-musl": ["@swc/core-linux-x64-musl@1.16.2", "", { "os": "linux", "cpu": "x64" }, "sha512-PghXJlVM1cgtLfNUR1vxFo1z+PDRAe8cWAJlZZ7spmeiN7BospGXg/MHUg7oNSgwSX7Zo//YKv9P5yD9apsFJQ=="], + + "@swc/core-win32-arm64-msvc": ["@swc/core-win32-arm64-msvc@1.16.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-StTOSefYBxemvNYYUI3UmO1a8y+hSPjjfHogC2TEHL+Z1PlEBim/XtLas5rS04jAzT9RrNmbtX911SZ42H9jSQ=="], + + "@swc/core-win32-ia32-msvc": ["@swc/core-win32-ia32-msvc@1.16.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-fycER209DYIzsibpTMC+chND05OfOjgztWL9U8OE6/uUlsOUZH3eh98isBLEnOymYUhlJLEt5++W1+KL/FOh5Q=="], + + "@swc/core-win32-x64-msvc": ["@swc/core-win32-x64-msvc@1.16.2", "", { "os": "win32", "cpu": "x64" }, "sha512-cSd1z6ivSrJPVr+moVwOHWjeKy6TpO4/Shwcv5KCrKYXCccxwh4pRy1C3fDioNx2PF1jPZWHKZjtXt+Be9VbaQ=="], + + "@swc/counter": ["@swc/counter@0.1.3", "", {}, "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="], + + "@swc/types": ["@swc/types@0.1.28", "", { "dependencies": { "@swc/counter": "^0.1.3" } }, "sha512-V6Mnml8v09QALx6K0elJ7o9K/MkVDtW3t6L+7Ou/JcWtb3xwId2AH4FeOceySd2JaO87IMw4+6vSZxLm34LPbw=="], + + "@tauri-apps/cli": ["@tauri-apps/cli@2.11.4", "", { "optionalDependencies": { "@tauri-apps/cli-darwin-arm64": "2.11.4", "@tauri-apps/cli-darwin-x64": "2.11.4", "@tauri-apps/cli-linux-arm-gnueabihf": "2.11.4", "@tauri-apps/cli-linux-arm64-gnu": "2.11.4", "@tauri-apps/cli-linux-arm64-musl": "2.11.4", "@tauri-apps/cli-linux-riscv64-gnu": "2.11.4", "@tauri-apps/cli-linux-x64-gnu": "2.11.4", "@tauri-apps/cli-linux-x64-musl": "2.11.4", "@tauri-apps/cli-win32-arm64-msvc": "2.11.4", "@tauri-apps/cli-win32-ia32-msvc": "2.11.4", "@tauri-apps/cli-win32-x64-msvc": "2.11.4" }, "bin": { "tauri": "tauri.js" } }, "sha512-R8xGtMpwyetawSqm9kYOuMmEqkhUbvcUy8n0aNXIxollKBLESUu5f4Fx+64hgASYm1H+jSWq6jCW6zqTnH6hqQ=="], + + "@tauri-apps/cli-darwin-arm64": ["@tauri-apps/cli-darwin-arm64@2.11.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-1ryOF3ZhpZ/nemHV5zVwBQBz9jDGKmKPvWPADOhc83ig0P4bMc2iER4NbC6r9sjeIZ6RVQ4g3RZIYvezhcl4TQ=="], + + "@tauri-apps/cli-darwin-x64": ["@tauri-apps/cli-darwin-x64@2.11.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-uFsGQAAfuyz1k/yGLmkWfkBlgKAqZfxqlHmLWx81QU27RJWfmbNHCIq8T8w1e+VClleIuZUjpHWfoE4E3DLo3A=="], + + "@tauri-apps/cli-linux-arm-gnueabihf": ["@tauri-apps/cli-linux-arm-gnueabihf@2.11.4", "", { "os": "linux", "cpu": "arm" }, "sha512-IaHZn5CdBL21oUmjiVOS1ctw6Ip1O0pjp70FwOWmYz1myWe0SY96ZIj2FYf7pT0m8bI2h/hrs5ZbEXXh44/MkQ=="], + + "@tauri-apps/cli-linux-arm64-gnu": ["@tauri-apps/cli-linux-arm64-gnu@2.11.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-N41/ukTRVe6XSuUTESuFdGeOW2i7k62tK+6gHK5Kd5/q5RPvvi19GaWAVPPb9u95HSGmTChSolBfzynUsssFaA=="], + + "@tauri-apps/cli-linux-arm64-musl": ["@tauri-apps/cli-linux-arm64-musl@2.11.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-v277UnT/fB64xAfSroL5N3Km3tLmvATWqJJw/wRI+g6o+HkeD0slyE7gOhNs1MbjE41R7bQOTxMVoL3aomUJmw=="], + + "@tauri-apps/cli-linux-riscv64-gnu": ["@tauri-apps/cli-linux-riscv64-gnu@2.11.4", "", { "os": "linux", "cpu": "none" }, "sha512-qqgNkQ2u1yZHxjhxsZaxUtRDW8dIqIYm33rx/mzwQv0SfY9x1B+iraj8vWeFiXjjSVVhEMepXSOts1TqPzvXNQ=="], + + "@tauri-apps/cli-linux-x64-gnu": ["@tauri-apps/cli-linux-x64-gnu@2.11.4", "", { "os": "linux", "cpu": "x64" }, "sha512-2VRNWl84FOH0m2giiDkO2h0QXlcMJeX+zJDpI5kDIQAx6s+geF3v48F4DXfJez4GS/FdoDGnPnw1C2iYGbQ7bQ=="], + + "@tauri-apps/cli-linux-x64-musl": ["@tauri-apps/cli-linux-x64-musl@2.11.4", "", { "os": "linux", "cpu": "x64" }, "sha512-o9GyhYor/nc7xarmwDE3ka2szuW3uuZzXjHWh64Q8YX5AtSgxdQkFWzrY4O8KiGtVNvFBI14H3Q49Qj5TOIP/A=="], + + "@tauri-apps/cli-win32-arm64-msvc": ["@tauri-apps/cli-win32-arm64-msvc@2.11.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-ld5Ehb598m0VkYyylRPNeCFsBe/km0jxis6KgMpl3IGY6I/i1RwQXO05I1AsXUXO2WC6AvB/Lw4qTf/asiuEiQ=="], + + "@tauri-apps/cli-win32-ia32-msvc": ["@tauri-apps/cli-win32-ia32-msvc@2.11.4", "", { "os": "win32", "cpu": "ia32" }, "sha512-12Hxi0XX/H5VFxO/bGgHkFWhml9VMgEOu9CidjeCeTNQ1l6fpUlbiGgSP7CLI3PFtW9/FfbeHieZ+kyWK5H7CA=="], + + "@tauri-apps/cli-win32-x64-msvc": ["@tauri-apps/cli-win32-x64-msvc@2.11.4", "", { "os": "win32", "cpu": "x64" }, "sha512-+vDiqBIU5dMISg/wNvX3sF+ZHfgJGJ5T0AcO+EHNXV9GGAG+P5fzodlDXD3QdKCRgZxMoCm5PPvj3BqLNjBthw=="], - "@types/bun": ["@types/bun@1.4.0", "", { "dependencies": { "bun-types": "1.4.0" } }, "sha512-K+lZULY23vRgK/CfTjFIV+tyifaNdSMlPh9j+6mQ/cLfpOznLyAuzgV/JQysyECpkBQLVMSyvjlr2fBUSA9wFQ=="], -||||||| 47206cf - "@types/bun": ["@types/bun@1.3.14", "", { "dependencies": { "bun-types": "1.3.14" } }, "sha512-h1hFqFVcvAvD9j9K7ZW7vd82aSA+rTdznZa+5bwvCwqSB1jmmfLcbIWhOLx1/+boy/xmjgCs/OMUL8hRJSmnPw=="], -======= "@tootallnate/quickjs-emscripten": ["@tootallnate/quickjs-emscripten@0.23.0", "", {}, "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA=="], "@tybys/wasm-util": ["@tybys/wasm-util@0.10.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg=="], "@types/aws-lambda": ["@types/aws-lambda@8.10.162", "", {}, "sha512-Fn658grtLOci1oxi1391vvDWJRKNGWRSqfxRkmN/Iy3c0tQH1USMKEXcPYHLvope+ZgTFocx9FRQJx1muBL6qw=="], - "@types/bun": ["@types/bun@1.3.14", "", { "dependencies": { "bun-types": "1.3.14" } }, "sha512-h1hFqFVcvAvD9j9K7ZW7vd82aSA+rTdznZa+5bwvCwqSB1jmmfLcbIWhOLx1/+boy/xmjgCs/OMUL8hRJSmnPw=="], ->>>>>>> @{-1} + "@types/bun": ["@types/bun@1.4.0", "", { "dependencies": { "bun-types": "1.4.0" } }, "sha512-K+lZULY23vRgK/CfTjFIV+tyifaNdSMlPh9j+6mQ/cLfpOznLyAuzgV/JQysyECpkBQLVMSyvjlr2fBUSA9wFQ=="], "@types/chai": ["@types/chai@5.2.3", "", { "dependencies": { "@types/deep-eql": "*", "assertion-error": "^2.0.1" } }, "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA=="], @@ -762,10 +734,6 @@ "@types/node": ["@types/node@24.13.3", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q=="], - "@types/webidl-conversions": ["@types/webidl-conversions@7.0.3", "", {}, "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA=="], - - "@types/whatwg-url": ["@types/whatwg-url@11.0.5", "", { "dependencies": { "@types/webidl-conversions": "*" } }, "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ=="], - "@types/ws": ["@types/ws@8.18.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg=="], "@types/yauzl": ["@types/yauzl@2.10.3", "", { "dependencies": { "@types/node": "*" } }, "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q=="], @@ -810,8 +778,6 @@ "@typescript/typescript-win32-x64": ["@typescript/typescript-win32-x64@7.0.2", "", { "os": "win32", "cpu": "x64" }, "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g=="], - "@vercel/nft": ["@vercel/nft@1.11.0", "", { "dependencies": { "@mapbox/node-pre-gyp": "^2.0.0", "@rollup/pluginutils": "^5.1.3", "acorn": "^8.6.0", "acorn-import-attributes": "^1.9.5", "async-sema": "^3.1.1", "bindings": "^1.4.0", "estree-walker": "2.0.2", "glob": "^13.0.0", "graceful-fs": "^4.2.9", "node-gyp-build": "^4.2.2", "picomatch": "^4.0.4", "resolve-from": "^5.0.0" }, "bin": { "nft": "out/cli.js" } }, "sha512-m1QFg+U+3yPOnP1xSYJ73UIRxLOXdts1JOhiOiyPYqEsALgrXFFINvgUaD6R6iNvaBFAjHllBCbkfx4FuOdpaA=="], - "@vitest/expect": ["@vitest/expect@4.1.11", "", { "dependencies": { "@standard-schema/spec": "^1.1.0", "@types/chai": "^5.2.2", "@vitest/spy": "4.1.11", "@vitest/utils": "4.1.11", "chai": "^6.2.2", "tinyrainbow": "^3.1.0" } }, "sha512-VX2x5vNJXET47KAFzwERI+KRMtTTCSWTfSMKsW7JsUsXV4psq++e3DvZpuTDOpHcxytiDs6p2nhVb2tVDiiUYw=="], "@vitest/mocker": ["@vitest/mocker@4.1.11", "", { "dependencies": { "@vitest/spy": "4.1.11", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, "peerDependencies": { "msw": "^2.4.9", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "optionalPeers": ["msw", "vite"] }, "sha512-2XJVD55d1o5AZous5CCGKS74g/riOj9odEt2bQpCVZeblHyHdnMeFl4jl0XjU21stf4mbjUkew2eXQZt65g5CQ=="], @@ -826,23 +792,15 @@ "@vitest/utils": ["@vitest/utils@4.1.11", "", { "dependencies": { "@vitest/pretty-format": "4.1.11", "convert-source-map": "^2.0.0", "tinyrainbow": "^3.1.0" } }, "sha512-zTCVGpyFsGWBhllOyKlTw/vnr6D9qxsfSDyfbyZmTyjHw5N/VuvzHpHoQjm2ZJzn4RJgx5w4r7V0er69CmLgPQ=="], - "abbrev": ["abbrev@3.0.1", "", {}, "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg=="], - "acorn": ["acorn@8.18.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ=="], - "acorn-import-attributes": ["acorn-import-attributes@1.9.5", "", { "peerDependencies": { "acorn": "^8" } }, "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ=="], - - "agent-base": ["agent-base@7.1.4", "", {}, "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ=="], - - "alchemy": ["alchemy@2.0.0-beta.66", "", { "dependencies": { "@alchemy.run/node-utils": "0.0.5", "@aws-sdk/credential-providers": "^3.0.0", "@clack/prompts": "^1.7.0", "@distilled.cloud/aws": "0.30.3", "@distilled.cloud/axiom": "0.30.3", "@distilled.cloud/cloudflare": "0.30.3", "@distilled.cloud/cloudflare-rolldown-plugin": "0.15.0", "@distilled.cloud/cloudflare-runtime": "0.15.0", "@distilled.cloud/cloudflare-vite-plugin": "0.15.0", "@distilled.cloud/core": "0.30.3", "@distilled.cloud/neon": "0.30.3", "@distilled.cloud/planetscale": "0.30.3", "@effect/sql-d1": ">=4.0.0-beta.100 || >=4.0.0", "@effect/vitest": ">=4.0.0-beta.100 || >=4.0.0", "@libsql/client": "^0.17.0", "@octokit/rest": "^22.0.1", "@octokit/webhooks": "^14.2.0", "@prisma/dev": "^0.20.0", "@smithy/node-config-provider": "^4.0.0", "@smithy/shared-ini-file-loader": "^4.3.4", "@smithy/types": "^4.8.1", "@types/aws-lambda": "^8.10.152", "@vercel/nft": "^1.10.2", "aws4fetch": "^1.0.20", "capnweb": "^0.6.1", "fast-glob": "^3.3.2", "fast-xml-parser": "^5.3.4", "ink": "^6.3.1", "jszip": "^3.10.1", "libsodium-wrappers": "^0.8.3", "mongodb": "^6.10.0", "mysql2": "^3.15.3", "pathe": "^2.0.3", "pg": "^8.13.0", "picomatch": "^4.0.4", "react": "^19.2.0", "rolldown": "1.1.5", "undici": "^7.16.0", "yaml": "^2.0.0" }, "peerDependencies": { "@aws/durable-execution-sdk-js": "^2.1.0", "@effect/platform-bun": ">=4.0.0-beta.100 || >=4.0.0", "@effect/platform-node": ">=4.0.0-beta.100 || >=4.0.0", "@effect/sql-pg": ">=4.0.0-beta.100 || >=4.0.0", "drizzle-kit": "1.0.0-rc.4", "drizzle-orm": "1.0.0-rc.4", "effect": ">=4.0.0-beta.100 || >=4.0.0", "vite": "^8.0.7", "ws": "^8.20.0" }, "optionalPeers": ["@aws/durable-execution-sdk-js", "@effect/platform-bun", "@effect/platform-node", "@effect/sql-pg", "drizzle-kit", "drizzle-orm", "vite", "ws"], "bin": { "alchemy": "bin/cli.js" } }, "sha512-53RXPuV6iUJ9SRP8oV4jYm2aHWvbQEPR3iYfD3UbY3H24ySPSJkKFsuvPwN6BWlCrxyZnxpD6PTUrGU91wFxEg=="], - - "ansi-escapes": ["ansi-escapes@7.3.0", "", { "dependencies": { "environment": "^1.0.0" } }, "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg=="], + "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], - "ansi-regex": ["ansi-regex@6.3.0", "", {}, "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ=="], + "acorn-jsx-walk": ["acorn-jsx-walk@2.0.0", "", {}, "sha512-uuo6iJj4D4ygkdzd6jPtcxs8vZgDX9YFIkqczGImoypX2fQ4dVImmu3UzA4ynixCIMTrEOWW+95M2HuBaCEOVA=="], - "ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], + "acorn-loose": ["acorn-loose@8.5.2", "", { "dependencies": { "acorn": "^8.15.0" } }, "sha512-PPvV6g8UGMGgjrMu+n/f9E/tCSkNQ2Y97eFvuVdJfG11+xdIeDcLyNdC8SHcrHbRqkfwLASdplyR6B6sKM1U4A=="], - "anynum": ["anynum@1.0.1", "", {}, "sha512-N6//FLET/tXYNM/F6ABca1oH6fWB+KlTt909Le28WMDBk8oaT4vY17DCrwg2MvmuqUKt3Ni4N5dGJ/EoBgcO6A=="], + "acorn-walk": ["acorn-walk@8.3.5", "", { "dependencies": { "acorn": "^8.11.0" } }, "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw=="], "age-encryption": ["age-encryption@0.2.4", "", { "dependencies": { "@noble/ciphers": "^1.2.0", "@noble/curves": "^1.3.0", "@noble/hashes": "^1.3.3", "@scure/base": "^1.1.5" } }, "sha512-9STi5PzVCn3YZurHLMI2njLwCT4ACkHFoktp1JNyFF0m4qHSn9JZQB8nnnJnpEGEJZduVBL1oxZzr4lteqRbzw=="], @@ -866,52 +824,25 @@ "assertion-error": ["assertion-error@2.0.1", "", {}, "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA=="], -<<<<<<< HEAD - "async-sema": ["async-sema@3.1.1", "", {}, "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg=="], + "ast-types": ["ast-types@0.13.4", "", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w=="], "auto-bind": ["auto-bind@5.0.1", "", {}, "sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg=="], - "aws-ssl-profiles": ["aws-ssl-profiles@1.1.2", "", {}, "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g=="], - "aws4fetch": ["aws4fetch@1.0.20", "", {}, "sha512-/djoAN709iY65ETD6LKCtyyEI04XIBP5xVvfmNxsEP0uJB5tyaGBztSryRr4HqMStr9R06PisQE7m9zDTXKu6g=="], - "balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], + "b4a": ["b4a@1.8.1", "", { "peerDependencies": { "react-native-b4a": "*" }, "optionalPeers": ["react-native-b4a"] }, "sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw=="], - "before-after-hook": ["before-after-hook@4.0.0", "", {}, "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ=="], + "bare-events": ["bare-events@2.9.2", "", { "peerDependencies": { "bare-abort-controller": "*" }, "optionalPeers": ["bare-abort-controller"] }, "sha512-AIPKioV7/Y/8KfZ3AAhjPJxLLbY49S64Ym5DakZlUg75qQiTgUq9hEJoEwa4eUezPUlXRy/i5NpsKvo9jgKmoA=="], - "bindings": ["bindings@1.5.0", "", { "dependencies": { "file-uri-to-path": "1.0.0" } }, "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ=="], + "bare-fs": ["bare-fs@4.8.1", "", { "dependencies": { "bare-events": "^2.5.4", "bare-path": "^3.0.0", "bare-stream": "^2.6.4", "bare-url": "^2.2.2", "fast-fifo": "^1.3.2" }, "peerDependencies": { "bare-buffer": "*" }, "optionalPeers": ["bare-buffer"] }, "sha512-N1nnXdHZAOSstz0XiHikGS4HGMH4CnSwhqWdGQQMqqdvp4Jybm9sE3R1WVnpWVd4SFkc8ryPDBLViNLwiEqECg=="], - "bowser": ["bowser@2.14.1", "", {}, "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg=="], + "bare-path": ["bare-path@3.1.1", "", {}, "sha512-JprUlveX3QjApC1cTpsUOiscADftCGVWkzitbHsRqv84hzYwYHw2mbluddsq5TvI8mH/8Ov1f4BiMAdcB0oYnQ=="], - "brace-expansion": ["brace-expansion@5.0.9", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg=="], + "bare-stream": ["bare-stream@2.13.4", "", { "dependencies": { "b4a": "^1.8.1", "streamx": "^2.25.0", "teex": "^1.0.1" }, "peerDependencies": { "bare-abort-controller": "*", "bare-buffer": "*", "bare-events": "*" }, "optionalPeers": ["bare-abort-controller", "bare-buffer", "bare-events"] }, "sha512-PcrQ8lVLbiJscNm1Kez+Yp4Gy4AHGcN1lzwjvf5NybWen7VvEgUfyfnXYJ2zNqWnzOfCb1Abq6lH8ti0syQszA=="], - "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], + "bare-url": ["bare-url@2.5.2", "", { "dependencies": { "bare-path": "^3.0.0" } }, "sha512-L13PCJzKG8RGvx8V1/DdMi12ERhC3tprr7/8a94BxpmnRsFqxh5XZNdhtMxu5HPkRshYOOWRGY8lDP7ZhpG9Cg=="], - "bson": ["bson@6.10.4", "", {}, "sha512-WIsKqkSC0ABoBJuT1LEX+2HEvNmNKKgnTAyd0fL8qzK4SH2i9NXg+t08YtdZp/V9IZ33cxe3iV4yM0qg8lMQng=="], - - "bun-types": ["bun-types@1.4.0", "", { "dependencies": { "@types/node": "*" } }, "sha512-iIKw23BspnQQYd3prITOBxeUsxBHnwzX6YJfGMuNOZzeNcMmVqzIIVGRm1l69ogaPQmb4wB6BN8mA5bE9YuC5Q=="], -||||||| 47206cf - "bun-types": ["bun-types@1.3.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ=="], -======= - "ast-types": ["ast-types@0.13.4", "", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w=="], - - "auto-bind": ["auto-bind@5.0.1", "", {}, "sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg=="], - - "aws4fetch": ["aws4fetch@1.0.20", "", {}, "sha512-/djoAN709iY65ETD6LKCtyyEI04XIBP5xVvfmNxsEP0uJB5tyaGBztSryRr4HqMStr9R06PisQE7m9zDTXKu6g=="], - - "b4a": ["b4a@1.8.1", "", { "peerDependencies": { "react-native-b4a": "*" }, "optionalPeers": ["react-native-b4a"] }, "sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw=="], - - "bare-events": ["bare-events@2.9.1", "", { "peerDependencies": { "bare-abort-controller": "*" }, "optionalPeers": ["bare-abort-controller"] }, "sha512-Z0oHEHAFDZkffN8Qc39zNZjQlMDkPJRyyyZieU1VH7u8c5S+qHZ2S8ixdKIAxEjfHO7FJxXmJWgteOghVanIsg=="], - - "bare-fs": ["bare-fs@4.8.0", "", { "dependencies": { "bare-events": "^2.5.4", "bare-path": "^3.0.0", "bare-stream": "^2.6.4", "bare-url": "^2.2.2", "fast-fifo": "^1.3.2" }, "peerDependencies": { "bare-buffer": "*" }, "optionalPeers": ["bare-buffer"] }, "sha512-fM+MhCvdQhZ7NV6S95a07gPSqjIYKn6mFaXfx266wN3ajZGl/+1AzH+ubkXQ0fFZvOe2nk9VHkzdYkQE5zMV3Q=="], - - "bare-path": ["bare-path@3.1.1", "", {}, "sha512-JprUlveX3QjApC1cTpsUOiscADftCGVWkzitbHsRqv84hzYwYHw2mbluddsq5TvI8mH/8Ov1f4BiMAdcB0oYnQ=="], - - "bare-stream": ["bare-stream@2.13.3", "", { "dependencies": { "b4a": "^1.8.1", "streamx": "^2.25.0", "teex": "^1.0.1" }, "peerDependencies": { "bare-abort-controller": "*", "bare-buffer": "*", "bare-events": "*" }, "optionalPeers": ["bare-abort-controller", "bare-buffer", "bare-events"] }, "sha512-Kc+brLqvEqGkjyfiwJmImAOqLZL7OsoLKuavx+hJjgVV3nLTOjloJyPMFxjUPerGGHrNH0fLU06jjykMLWrERQ=="], - - "bare-url": ["bare-url@2.5.2", "", { "dependencies": { "bare-path": "^3.0.0" } }, "sha512-L13PCJzKG8RGvx8V1/DdMi12ERhC3tprr7/8a94BxpmnRsFqxh5XZNdhtMxu5HPkRshYOOWRGY8lDP7ZhpG9Cg=="], - - "basic-ftp": ["basic-ftp@5.3.1", "", {}, "sha512-bopVNp6ugyA150DDuZfPFdt1KZ5a94ZDiwX4hMgZDzF+GttD80lEy8kj98kbyhLXnPvhtIo93mdnLIjpCAeeOw=="], + "basic-ftp": ["basic-ftp@5.3.1", "", {}, "sha512-bopVNp6ugyA150DDuZfPFdt1KZ5a94ZDiwX4hMgZDzF+GttD80lEy8kj98kbyhLXnPvhtIo93mdnLIjpCAeeOw=="], "bcrypt-pbkdf": ["bcrypt-pbkdf@1.0.2", "", { "dependencies": { "tweetnacl": "^0.14.3" } }, "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w=="], @@ -923,8 +854,7 @@ "buffer-crc32": ["buffer-crc32@0.2.13", "", {}, "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="], - "bun-types": ["bun-types@1.3.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ=="], ->>>>>>> @{-1} + "bun-types": ["bun-types@1.4.0", "", { "dependencies": { "@types/node": "*" } }, "sha512-iIKw23BspnQQYd3prITOBxeUsxBHnwzX6YJfGMuNOZzeNcMmVqzIIVGRm1l69ogaPQmb4wB6BN8mA5bE9YuC5Q=="], "bun2nix": ["bun2nix@2.1.2", "", { "dependencies": { "sade": "^1.8.1" }, "bin": { "bun2nix": "index.ts" } }, "sha512-0wx6Ar5ccrz4aSD5prbShwymjDEXFh7Bucxs+YrpAMa67TnVB95Hv8FV3oaQEbtOx6QGgIAyOmap6Y3WCRqetg=="], @@ -936,24 +866,6 @@ "chevrotain": ["chevrotain@10.5.0", "", { "dependencies": { "@chevrotain/cst-dts-gen": "10.5.0", "@chevrotain/gast": "10.5.0", "@chevrotain/types": "10.5.0", "@chevrotain/utils": "10.5.0", "lodash": "4.17.21", "regexp-to-ast": "0.5.0" } }, "sha512-Pkv5rBY3+CsHOYfV5g/Vs5JY9WTHHDEKOlohI2XeygaZhUeqhAlldZ8Hz9cRmxu709bvS08YzxHdTPHhffc13A=="], -<<<<<<< HEAD - "chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], - - "cli-boxes": ["cli-boxes@3.0.0", "", {}, "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g=="], - - "cli-cursor": ["cli-cursor@4.0.0", "", { "dependencies": { "restore-cursor": "^4.0.0" } }, "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg=="], - - "cli-truncate": ["cli-truncate@5.2.0", "", { "dependencies": { "slice-ansi": "^8.0.0", "string-width": "^8.2.0" } }, "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw=="], - - "cluster-key-slot": ["cluster-key-slot@1.1.1", "", {}, "sha512-rwHwUfXL40Chm1r08yrhU3qpUvdVlgkKNeyeGPOxnW8/SyVDvgRaed/Uz54AqWNaTCAThlj6QAs3TZcKI0xDEw=="], - - "code-excerpt": ["code-excerpt@4.0.0", "", { "dependencies": { "convert-to-spaces": "^2.0.1" } }, "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA=="], - - "consola": ["consola@3.4.2", "", {}, "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA=="], - - "content-type": ["content-type@3.0.0", "", {}, "sha512-AIi5H6p0xk5uknXcN3/rmhP8jgp69OfSe/JuKiQAFprJ7UGw7mwj7m4XcmDzlrnJDG+cGpphAINGdU3g3g7kDw=="], -||||||| 47206cf -======= "cli-boxes": ["cli-boxes@3.0.0", "", {}, "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g=="], "cli-cursor": ["cli-cursor@4.0.0", "", { "dependencies": { "restore-cursor": "^4.0.0" } }, "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg=="], @@ -970,8 +882,9 @@ "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], - "content-type": ["content-type@2.1.0", "", {}, "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag=="], ->>>>>>> @{-1} + "commander": ["commander@15.0.0", "", {}, "sha512-z67u4ZhzCL/Tydu1lJARtEZYWbWaN7oYLHbsuzocr6y4N6WZAagG3RQ4FW61V1/0+jImpj293XfrcYnd1qxtPg=="], + + "content-type": ["content-type@3.0.0", "", {}, "sha512-AIi5H6p0xk5uknXcN3/rmhP8jgp69OfSe/JuKiQAFprJ7UGw7mwj7m4XcmDzlrnJDG+cGpphAINGdU3g3g7kDw=="], "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], @@ -981,29 +894,19 @@ "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], -<<<<<<< HEAD - "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], - - "denque": ["denque@2.1.0", "", {}, "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw=="], - - "detect-libc": ["detect-libc@2.0.2", "", {}, "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw=="], - - "dotenv": ["dotenv@17.4.2", "", {}, "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw=="], -||||||| 47206cf - "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], -======= "dashdash": ["dashdash@1.14.1", "", { "dependencies": { "assert-plus": "^1.0.0" } }, "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g=="], "data-uri-to-buffer": ["data-uri-to-buffer@6.0.2", "", {}, "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw=="], - "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" }, "peerDependencies": { "supports-color": "*" }, "optionalPeers": ["supports-color"] }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], "degenerator": ["degenerator@5.0.1", "", { "dependencies": { "ast-types": "^0.13.4", "escodegen": "^2.1.0", "esprima": "^4.0.1" } }, "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ=="], "denque": ["denque@2.1.0", "", {}, "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw=="], + "dependency-cruiser": ["dependency-cruiser@18.2.0", "", { "dependencies": { "acorn": "8.18.0", "acorn-jsx": "5.3.2", "acorn-jsx-walk": "2.0.0", "acorn-loose": "8.5.2", "acorn-walk": "8.3.5", "commander": "15.0.0", "enhanced-resolve": "5.24.5", "ignore": "7.0.6", "interpret": "3.1.1", "is-installed-globally": "1.0.0", "json5": "2.2.3", "picomatch": "4.0.5", "prompts": "2.4.2", "rechoir": "0.8.0", "safe-regex": "2.1.1", "semver": "7.8.5", "tsconfig-paths-webpack-plugin": "4.2.0", "watskeburt": "6.0.0" }, "bin": { "depcruise": "bin/dependency-cruise.mjs", "depcruise-fmt": "bin/depcruise-fmt.mjs", "dependency-cruise": "bin/dependency-cruise.mjs", "depcruise-baseline": "bin/depcruise-baseline.mjs", "dependency-cruiser": "bin/dependency-cruise.mjs", "depcruise-wrap-stream-in-html": "bin/wrap-stream-in-html.mjs" } }, "sha512-xMDoLD0no6pDInR8/4rIIqZ4mERDnsjezk8PkNORYSfBLvjCOogUxaruepmi1uQtZQlYUgdT2u7G3jTlgKqNjw=="], + "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], ->>>>>>> @{-1} "dotenv": ["dotenv@16.6.1", "", {}, "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow=="], @@ -1012,32 +915,18 @@ "effect": ["effect@4.0.0-beta.102", "", { "dependencies": { "@standard-schema/spec": "^1.1.0", "fast-check": "^4.9.0", "find-my-way-ts": "^0.1.6", "ini": "^7.0.0", "kubernetes-types": "^1.30.0", "msgpackr": "^2.0.4", "multipasta": "^0.2.8", "toml": "^4.1.2", "uuid": "^14.0.1", "yaml": "^2.9.0" } }, "sha512-z8Y+Q76Hh/kjLFZrXu8tGn6e+tDsg45R+UHhxd190pXxD53OGwf/G/zDxXTkse4HJ5mobNZfitLfUCp4fMvu6w=="], "emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], -<<<<<<< HEAD -||||||| 47206cf - "es-module-lexer": ["es-module-lexer@2.3.1", "", {}, "sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA=="], -======= "end-of-stream": ["end-of-stream@1.4.5", "", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="], - "environment": ["environment@1.1.0", "", {}, "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q=="], + "enhanced-resolve": ["enhanced-resolve@5.24.5", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.3" } }, "sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A=="], - "es-module-lexer": ["es-module-lexer@2.3.1", "", {}, "sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA=="], ->>>>>>> @{-1} - -<<<<<<< HEAD "environment": ["environment@1.1.0", "", {}, "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q=="], - "es-module-lexer": ["es-module-lexer@2.3.2", "", {}, "sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw=="], - - "es-toolkit": ["es-toolkit@1.51.0", "", {}, "sha512-zC2lQGkM7QX+Gm6iM3+WIdZJzthsEd14LvRNJneSO2hzyz/zNBENR8+YXWo1cKxgPBtV6ksPYHELbcwBRzmdCw=="], + "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], - "escape-string-regexp": ["escape-string-regexp@2.0.0", "", {}, "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w=="], + "es-module-lexer": ["es-module-lexer@2.3.2", "", {}, "sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw=="], - "estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], -||||||| 47206cf - "estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], -======= - "es-toolkit": ["es-toolkit@1.51.0", "", {}, "sha512-zC2lQGkM7QX+Gm6iM3+WIdZJzthsEd14LvRNJneSO2hzyz/zNBENR8+YXWo1cKxgPBtV6ksPYHELbcwBRzmdCw=="], + "es-toolkit": ["es-toolkit@1.52.0", "", {}, "sha512-XTNEJQh1tY1ZJVcf6ayP/2n4ZPyaHlW2FWs7xvw5ddPuhUVjLD3olQVQS7kf58JbAB48iL0uL/jerTrjtV3lDA=="], "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], @@ -1050,7 +939,6 @@ "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="], "estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], ->>>>>>> @{-1} "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="], @@ -1062,22 +950,6 @@ "fast-check": ["fast-check@4.9.0", "", { "dependencies": { "pure-rand": "^8.0.0" } }, "sha512-7ms6T7SybUev/PQITciI0yLM2pOSFy5zpG8Ty7tQofcVaQUvrMXp6CBwqF6fThLCLOrfBtuHAtwq6Yu4XPCllg=="], -<<<<<<< HEAD - "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], - - "fast-string-truncated-width": ["fast-string-truncated-width@3.0.3", "", {}, "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g=="], - - "fast-string-width": ["fast-string-width@3.0.2", "", { "dependencies": { "fast-string-truncated-width": "^3.0.2" } }, "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg=="], - - "fast-wrap-ansi": ["fast-wrap-ansi@0.2.2", "", { "dependencies": { "fast-string-width": "^3.0.2" } }, "sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q=="], - - "fast-xml-builder": ["fast-xml-builder@1.3.1", "", { "dependencies": { "path-expression-matcher": "^1.6.2", "xml-naming": "^0.3.0" } }, "sha512-pIM/1n3ntFXKYrUZwW7QCK0gAW7XY+wzj1YMIV3tLDvPj/V+zTGJK5e3/4WJfwj0qWw2ElNXiTixda/R+3YSug=="], - - "fast-xml-parser": ["fast-xml-parser@5.11.0", "", { "dependencies": { "@nodable/entities": "^3.0.0", "fast-xml-builder": "^1.2.0", "is-unsafe": "^2.0.0", "path-expression-matcher": "^1.6.2", "strnum": "^2.4.2", "xml-naming": "^0.3.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-9IGxMqvqLOnqP+Egi1nqDHKv5k8aZ7r9n558enxcucmyVGEBNPAU+MOg/8jPIS7rO7sSq4gFm1/nHtiaubMruw=="], - - "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], -||||||| 47206cf -======= "fast-fifo": ["fast-fifo@1.3.2", "", {}, "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="], "fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], @@ -1090,21 +962,14 @@ "fast-xml-builder": ["fast-xml-builder@1.3.1", "", { "dependencies": { "path-expression-matcher": "^1.6.2", "xml-naming": "^0.3.0" } }, "sha512-pIM/1n3ntFXKYrUZwW7QCK0gAW7XY+wzj1YMIV3tLDvPj/V+zTGJK5e3/4WJfwj0qWw2ElNXiTixda/R+3YSug=="], - "fast-xml-parser": ["fast-xml-parser@5.11.0", "", { "dependencies": { "@nodable/entities": "^3.0.0", "fast-xml-builder": "^1.2.0", "is-unsafe": "^2.0.0", "path-expression-matcher": "^1.6.2", "strnum": "^2.4.2", "xml-naming": "^0.3.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-9IGxMqvqLOnqP+Egi1nqDHKv5k8aZ7r9n558enxcucmyVGEBNPAU+MOg/8jPIS7rO7sSq4gFm1/nHtiaubMruw=="], + "fast-xml-parser": ["fast-xml-parser@5.11.1", "", { "dependencies": { "@nodable/entities": "^3.0.0", "fast-xml-builder": "^1.2.0", "is-unsafe": "^2.0.0", "path-expression-matcher": "^1.6.2", "strnum": "^2.4.2", "xml-naming": "^0.3.0" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-TBw6K/fxoQGGjCmZDw9w/ZwP3uDcnTM4YH/g+PFRWr8sbe5idXtxNN6vITh4+1ruCZaho6uBFurElsA7F0zzgw=="], - "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], + "fastq": ["fastq@1.20.3", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw=="], "fd-slicer": ["fd-slicer@1.1.0", "", { "dependencies": { "pend": "~1.2.0" } }, "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g=="], ->>>>>>> @{-1} "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], -<<<<<<< HEAD - "file-uri-to-path": ["file-uri-to-path@1.0.0", "", {}, "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="], - -||||||| 47206cf -======= ->>>>>>> @{-1} "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], "find-my-way-ts": ["find-my-way-ts@0.1.6", "", {}, "sha512-a85L9ZoXtNAey3Y6Z+eBWW658kO/MwR7zIafkIUPUMf3isZG0NCs2pjW2wtjxAKuJPxMAsHUIP4ZPGv0o5gyTA=="], @@ -1113,32 +978,8 @@ "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], -<<<<<<< HEAD - "generate-function": ["generate-function@2.3.1", "", { "dependencies": { "is-property": "^1.0.2" } }, "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ=="], - - "get-east-asian-width": ["get-east-asian-width@1.6.0", "", {}, "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA=="], - - "get-port-please": ["get-port-please@3.2.0", "", {}, "sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A=="], - - "glob": ["glob@13.0.6", "", { "dependencies": { "minimatch": "^10.2.2", "minipass": "^7.1.3", "path-scurry": "^2.0.2" } }, "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw=="], - - "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], - - "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], - "grammex": ["grammex@3.1.13", "", {}, "sha512-LnPnhOBLEJEVKS8WFDVaA397L9Kq55Q9oSITJiVLHVdhAclfUkWzQv74KhvZHKL2Q09Pb1XdsrOsZ4LfTFFTEg=="], - - "graphmatch": ["graphmatch@1.1.1", "", {}, "sha512-5ykVn/EXM1hF0XCaWh05VbYvEiOL2lY1kBxZtaYsyvjp7cmWOU1XsAdfQBwClraEofXDT197lFbXOEVMHpvQOg=="], - - "hono": ["hono@4.11.4", "", {}, "sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA=="], - - "http-status-codes": ["http-status-codes@2.3.0", "", {}, "sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA=="], - - "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], - - "iconv-lite": ["iconv-lite@0.7.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ=="], -||||||| 47206cf -======= "get-caller-file": ["get-caller-file@2.0.5", "", {}, "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="], "get-east-asian-width": ["get-east-asian-width@1.6.0", "", {}, "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA=="], @@ -1153,12 +994,18 @@ "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], + "global-directory": ["global-directory@4.0.1", "", { "dependencies": { "ini": "4.1.1" } }, "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q=="], + "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], "grammex": ["grammex@3.1.13", "", {}, "sha512-LnPnhOBLEJEVKS8WFDVaA397L9Kq55Q9oSITJiVLHVdhAclfUkWzQv74KhvZHKL2Q09Pb1XdsrOsZ4LfTFFTEg=="], "graphmatch": ["graphmatch@1.1.1", "", {}, "sha512-5ykVn/EXM1hF0XCaWh05VbYvEiOL2lY1kBxZtaYsyvjp7cmWOU1XsAdfQBwClraEofXDT197lFbXOEVMHpvQOg=="], + "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], + + "hasown": ["hasown@2.0.4", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="], + "hono": ["hono@4.11.4", "", {}, "sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA=="], "http-proxy-agent": ["http-proxy-agent@7.0.2", "", { "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" } }, "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig=="], @@ -1166,7 +1013,8 @@ "http-status-codes": ["http-status-codes@2.3.0", "", {}, "sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA=="], "https-proxy-agent": ["https-proxy-agent@7.0.6", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "4" } }, "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="], ->>>>>>> @{-1} + + "ignore": ["ignore@7.0.6", "", {}, "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw=="], "immediate": ["immediate@3.0.6", "", {}, "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="], @@ -1178,31 +1026,13 @@ "ink": ["ink@6.8.0", "", { "dependencies": { "@alcalzone/ansi-tokenize": "^0.2.4", "ansi-escapes": "^7.3.0", "ansi-styles": "^6.2.1", "auto-bind": "^5.0.1", "chalk": "^5.6.0", "cli-boxes": "^3.0.0", "cli-cursor": "^4.0.0", "cli-truncate": "^5.1.1", "code-excerpt": "^4.0.0", "es-toolkit": "^1.39.10", "indent-string": "^5.0.0", "is-in-ci": "^2.0.0", "patch-console": "^2.0.0", "react-reconciler": "^0.33.0", "scheduler": "^0.27.0", "signal-exit": "^3.0.7", "slice-ansi": "^8.0.0", "stack-utils": "^2.0.6", "string-width": "^8.1.1", "terminal-size": "^4.0.1", "type-fest": "^5.4.1", "widest-line": "^6.0.0", "wrap-ansi": "^9.0.0", "ws": "^8.18.0", "yoga-layout": "~3.2.1" }, "peerDependencies": { "@types/react": ">=19.0.0", "react": ">=19.0.0", "react-devtools-core": ">=6.1.2" }, "optionalPeers": ["@types/react", "react-devtools-core"] }, "sha512-sbl1RdLOgkO9isK42WCZlJCFN9hb++sX9dsklOvfd1YQ3bQ2AiFu12Q6tFlr0HvEUvzraJntQCCpfEoUe9DSzA=="], - "ioredis": ["ioredis@5.11.1", "", { "dependencies": { "@ioredis/commands": "1.10.0", "cluster-key-slot": "1.1.1", "debug": "4.4.3", "denque": "2.1.0", "redis-errors": "1.2.0", "redis-parser": "3.0.0", "standard-as-callback": "2.1.0" } }, "sha512-ehuGcf94bQXhfagULNXrJdfnWO38v070jxSx/qE87Kjzmu2fU7ro5EFAb+OPituLqgfyuQaym5DlrNydW2sJ9A=="], - -<<<<<<< HEAD - "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], + "interpret": ["interpret@3.1.1", "", {}, "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ=="], - "is-fullwidth-code-point": ["is-fullwidth-code-point@5.1.0", "", { "dependencies": { "get-east-asian-width": "^1.3.1" } }, "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ=="], - - "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], - - "is-in-ci": ["is-in-ci@2.0.0", "", { "bin": { "is-in-ci": "cli.js" } }, "sha512-cFeerHriAnhrQSbpAxL37W1wcJKUUX07HyLWZCW1URJT/ra3GyUTzBgUnh24TMVfNTV2Hij2HLxkPHFZfOZy5w=="], - - "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], - - "is-property": ["is-property@1.0.2", "", {}, "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g=="], - - "is-unsafe": ["is-unsafe@2.0.2", "", {}, "sha512-HgbIHPBH0KHHCcjLfGsCvhtPTVxjaAZlXjwdz7/GQC40SjSe4sfQsar8J5VFo8JOSbarkpV0OLG95bbaNd9aAQ=="], - - "isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], + "ioredis": ["ioredis@5.11.1", "", { "dependencies": { "@ioredis/commands": "1.10.0", "cluster-key-slot": "1.1.1", "debug": "4.4.3", "denque": "2.1.0", "redis-errors": "1.2.0", "redis-parser": "3.0.0", "standard-as-callback": "2.1.0" } }, "sha512-ehuGcf94bQXhfagULNXrJdfnWO38v070jxSx/qE87Kjzmu2fU7ro5EFAb+OPituLqgfyuQaym5DlrNydW2sJ9A=="], - "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], + "ip-address": ["ip-address@10.7.0", "", {}, "sha512-BGFsyJd5mpXp3rK6jIdADLNgpJUK1jnjzvYF8lK+VyDab9JAmqN0YOKDdP17HlgKb2+ehPgDc8EtnRLbGCAMhA=="], - "js-base64": ["js-base64@3.9.3", "", {}, "sha512-uwYQp+VJ38FVvtim6qNbit6e9uT6dwWQ4Y1+H9TxhW5hcHjpHwoxlR0nMpqUmIFOmu4VqMxwdJA88gIVuZJQ/g=="], -||||||| 47206cf -======= - "ip-address": ["ip-address@10.5.0", "", {}, "sha512-R5SnVLJmgYYvf2F2ZgwSBnelz5G4q5AxIC277GDfUaNbrZKNANcBC7RHqYYePlszf4kBolVkJauG0ZjHHFh55g=="], + "is-core-module": ["is-core-module@2.16.2", "", { "dependencies": { "hasown": "^2.0.3" } }, "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA=="], "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], @@ -1212,8 +1042,12 @@ "is-in-ci": ["is-in-ci@2.0.0", "", { "bin": { "is-in-ci": "cli.js" } }, "sha512-cFeerHriAnhrQSbpAxL37W1wcJKUUX07HyLWZCW1URJT/ra3GyUTzBgUnh24TMVfNTV2Hij2HLxkPHFZfOZy5w=="], + "is-installed-globally": ["is-installed-globally@1.0.0", "", { "dependencies": { "global-directory": "^4.0.1", "is-path-inside": "^4.0.0" } }, "sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ=="], + "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], + "is-path-inside": ["is-path-inside@4.0.0", "", {}, "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA=="], + "is-unsafe": ["is-unsafe@2.0.2", "", {}, "sha512-HgbIHPBH0KHHCcjLfGsCvhtPTVxjaAZlXjwdz7/GQC40SjSe4sfQsar8J5VFo8JOSbarkpV0OLG95bbaNd9aAQ=="], "isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], @@ -1223,12 +1057,15 @@ "js-base64": ["js-base64@3.9.3", "", {}, "sha512-uwYQp+VJ38FVvtim6qNbit6e9uT6dwWQ4Y1+H9TxhW5hcHjpHwoxlR0nMpqUmIFOmu4VqMxwdJA88gIVuZJQ/g=="], "jsbn": ["jsbn@0.1.1", "", {}, "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="], ->>>>>>> @{-1} "json-with-bigint": ["json-with-bigint@3.5.12", "", {}, "sha512-uwbF/wSSuOgC7qqlq27Xp5B6a2MHVug3t0idZdTqu0JnlFvgJuH7ju+KAk/J06C7GfhoYy2gnb9wz2INqcne7w=="], + "json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], + "jszip": ["jszip@3.10.1", "", { "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", "readable-stream": "~2.3.6", "setimmediate": "^1.0.5" } }, "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g=="], + "kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="], + "kubernetes-types": ["kubernetes-types@1.30.0", "", {}, "sha512-Dew1okvhM/SQcIa2rcgujNndZwU8VnSapDgdxlYoB84ZlpAD43U6KLAFqYo17ykSFGHNPrg0qry0bP+GJd9v7Q=="], "libsodium": ["libsodium@0.8.4", "", {}, "sha512-lMcYaRi0zcs7tarATsQUYC7rstliIXZuoq0c6zXSgNtSNtdvBgkSegjWhpMJAXzKX3SUSwIp7+zEsob+j3LuRw=="], @@ -1265,24 +1102,12 @@ "lilconfig": ["lilconfig@2.1.0", "", {}, "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ=="], - "lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], - -<<<<<<< HEAD - "long": ["long@5.3.2", "", {}, "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA=="], + "lodash": ["lodash@4.18.1", "", {}, "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q=="], - "lru-cache": ["lru-cache@11.5.2", "", {}, "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g=="], - - "lru.min": ["lru.min@1.1.4", "", {}, "sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA=="], -||||||| 47206cf -======= "lru-cache": ["lru-cache@7.18.3", "", {}, "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="], ->>>>>>> @{-1} "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], -<<<<<<< HEAD - "memory-pager": ["memory-pager@1.5.0", "", {}, "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg=="], - "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], @@ -1291,63 +1116,28 @@ "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], - "minimatch": ["minimatch@10.2.6", "", { "dependencies": { "brace-expansion": "^5.0.8" } }, "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A=="], - - "minipass": ["minipass@7.1.3", "", {}, "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A=="], - - "minizlib": ["minizlib@3.1.0", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw=="], - - "mongodb": ["mongodb@6.21.0", "", { "dependencies": { "@mongodb-js/saslprep": "^1.3.0", "bson": "^6.10.4", "mongodb-connection-string-url": "^3.0.2" }, "peerDependencies": { "@aws-sdk/credential-providers": "^3.188.0", "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", "gcp-metadata": "^5.2.0", "kerberos": "^2.0.1", "mongodb-client-encryption": ">=6.0.0 <7", "snappy": "^7.3.2", "socks": "^2.7.1" }, "optionalPeers": ["@aws-sdk/credential-providers", "@mongodb-js/zstd", "gcp-metadata", "kerberos", "mongodb-client-encryption", "snappy", "socks"] }, "sha512-URyb/VXMjJ4da46OeSXg+puO39XH9DeQpWCslifrRn9JWugy0D+DvvBvkm2WxmHe61O/H19JM66p1z7RHVkZ6A=="], - - "mongodb-connection-string-url": ["mongodb-connection-string-url@3.0.2", "", { "dependencies": { "@types/whatwg-url": "^11.0.2", "whatwg-url": "^14.1.0 || ^13.0.0" } }, "sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA=="], -||||||| 47206cf -======= - "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], - - "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], - - "mime": ["mime@4.1.0", "", { "bin": { "mime": "bin/cli.js" } }, "sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw=="], - - "mimic-fn": ["mimic-fn@2.1.0", "", {}, "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="], ->>>>>>> @{-1} + "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], "mri": ["mri@1.2.0", "", {}, "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="], "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - "msgpackr": ["msgpackr@2.0.5", "", { "optionalDependencies": { "msgpackr-extract": "^3.0.4" } }, "sha512-cef05H/dSYpLpqp3sj/qyZh5vhUYCalnaLO7j1yOmpsR0y/XwLVtK7r5gn+U/F7CTEfMowcGhlUQJDLcLf7jcA=="], + "msgpackr": ["msgpackr@2.1.0", "", { "optionalDependencies": { "msgpackr-extract": "^3.0.4" } }, "sha512-p/pBCVO63CsvvpkomUnNNag6+n38rULuDA6HHe70o2gtC8ODI52foF/4ko2qQcp6OiErJXTmrZeXmsGGHsIQNQ=="], "msgpackr-extract": ["msgpackr-extract@3.0.4", "", { "dependencies": { "node-gyp-build-optional-packages": "5.2.2" }, "optionalDependencies": { "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.4", "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.4", "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.4", "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.4", "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.4", "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.4" }, "bin": { "download-msgpackr-prebuilds": "bin/download-prebuilds.js" } }, "sha512-4kmO/MdyUIkLIvTPr8VHLil4AtoKIoniWPIEk5+CDy0xnWC84azhSFmuJ7PxZdsYtiP5kEeQsORAVIeMgxT+Hw=="], "multipasta": ["multipasta@0.2.8", "", {}, "sha512-ZPWuMKyv0cSO29f7hozp+k6+crZbQijV8ipMvxNxRf2SwtYGTX1ZX89Kd20VV4H9Znonx+EQn+iy1wGQsJ+b+Q=="], - "mysql2": ["mysql2@3.23.4", "", { "dependencies": { "aws-ssl-profiles": "^1.1.2", "generate-function": "^2.3.1", "iconv-lite": "^0.7.3", "long": "^5.3.2", "lru.min": "^1.1.4", "named-placeholders": "^1.1.6", "sql-escaper": "^1.5.1" }, "peerDependencies": { "@types/node": ">= 8" } }, "sha512-J1Rgl8Oy5iw3mOBjKeTMQ3cJNjMYtJYavQVXShsMtSj9rKV8Q1+QaGKNJqDVQFcNINqYYp6Vxd90r69cCoBxBA=="], - - "named-placeholders": ["named-placeholders@1.1.6", "", { "dependencies": { "lru.min": "^1.1.0" } }, "sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w=="], - "nanoid": ["nanoid@3.3.18", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w=="], -<<<<<<< HEAD - "node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="], - - "node-gyp-build": ["node-gyp-build@4.8.4", "", { "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", "node-gyp-build-test": "build-test.js" } }, "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ=="], -||||||| 47206cf -======= "netmask": ["netmask@2.1.1", "", {}, "sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA=="], ->>>>>>> @{-1} "node-gyp-build-optional-packages": ["node-gyp-build-optional-packages@5.2.2", "", { "dependencies": { "detect-libc": "^2.0.1" }, "bin": { "node-gyp-build-optional-packages": "bin.js", "node-gyp-build-optional-packages-optional": "optional.js", "node-gyp-build-optional-packages-test": "build-test.js" } }, "sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw=="], - "nopt": ["nopt@8.1.0", "", { "dependencies": { "abbrev": "^3.0.0" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A=="], - "obug": ["obug@2.1.4", "", {}, "sha512-4a+OsYv9UktOJKE+l1A4OufDgdRF9PifWj+tJnHURo/P+WOxpG4GzUFL9qCalmWauao6ogiG+QvnCovwPoyAWA=="], -<<<<<<< HEAD -||||||| 47206cf -======= "once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="], ->>>>>>> @{-1} "onetime": ["onetime@5.1.2", "", { "dependencies": { "mimic-fn": "^2.1.0" } }, "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg=="], "oxfmt": ["oxfmt@0.62.0", "", { "dependencies": { "tinypool": "2.1.0" }, "optionalDependencies": { "@oxfmt/binding-android-arm-eabi": "0.62.0", "@oxfmt/binding-android-arm64": "0.62.0", "@oxfmt/binding-darwin-arm64": "0.62.0", "@oxfmt/binding-darwin-x64": "0.62.0", "@oxfmt/binding-freebsd-x64": "0.62.0", "@oxfmt/binding-linux-arm-gnueabihf": "0.62.0", "@oxfmt/binding-linux-arm-musleabihf": "0.62.0", "@oxfmt/binding-linux-arm64-gnu": "0.62.0", "@oxfmt/binding-linux-arm64-musl": "0.62.0", "@oxfmt/binding-linux-ppc64-gnu": "0.62.0", "@oxfmt/binding-linux-riscv64-gnu": "0.62.0", "@oxfmt/binding-linux-riscv64-musl": "0.62.0", "@oxfmt/binding-linux-s390x-gnu": "0.62.0", "@oxfmt/binding-linux-x64-gnu": "0.62.0", "@oxfmt/binding-linux-x64-musl": "0.62.0", "@oxfmt/binding-openharmony-arm64": "0.62.0", "@oxfmt/binding-win32-arm64-msvc": "0.62.0", "@oxfmt/binding-win32-ia32-msvc": "0.62.0", "@oxfmt/binding-win32-x64-msvc": "0.62.0" }, "peerDependencies": { "svelte": "^5.0.0", "vite-plus": "*" }, "optionalPeers": ["svelte", "vite-plus"], "bin": { "oxfmt": "bin/oxfmt" } }, "sha512-vxgGHTmnDU9j4CX7dDBLzxgmHxfda/yPcgJkGCMUSCwRmz+euo/V08xXLNgXTeqAB9Fhf3Pe2nO1RNKLCVgphQ=="], @@ -1356,18 +1146,6 @@ "oxlint-tsgolint": ["oxlint-tsgolint@7.0.2001", "", { "optionalDependencies": { "@oxlint-tsgolint/darwin-arm64": "7.0.2001", "@oxlint-tsgolint/darwin-x64": "7.0.2001", "@oxlint-tsgolint/linux-arm64": "7.0.2001", "@oxlint-tsgolint/linux-x64": "7.0.2001", "@oxlint-tsgolint/win32-arm64": "7.0.2001", "@oxlint-tsgolint/win32-x64": "7.0.2001" }, "bin": { "tsgolint": "./bin/tsgolint.js" } }, "sha512-KjK/XLcXr1DSyonKhsuFqJRiuKqcyG9j3LJ8nkOsrLzGvodBPqzHOKauy10asLMDI0sUpvb+1sxlzff3udZvfg=="], -<<<<<<< HEAD - "pako": ["pako@1.0.11", "", {}, "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="], - - "patch-console": ["patch-console@2.0.0", "", {}, "sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA=="], - - "path-expression-matcher": ["path-expression-matcher@1.6.2", "", {}, "sha512-enSlaiat05iasnzmgNxRj8reFdj3puY2QpNgP1aPIaVfT6nn9ICuPoFlKHk8EN22HcwewshO+mN2DGbkCEOtqQ=="], - - "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], - - "path-scurry": ["path-scurry@2.0.2", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg=="], -||||||| 47206cf -======= "pac-proxy-agent": ["pac-proxy-agent@7.2.0", "", { "dependencies": { "@tootallnate/quickjs-emscripten": "^0.23.0", "agent-base": "^7.1.2", "debug": "^4.3.4", "get-uri": "^6.0.1", "http-proxy-agent": "^7.0.0", "https-proxy-agent": "^7.0.6", "pac-resolver": "^7.0.1", "socks-proxy-agent": "^8.0.5" } }, "sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA=="], "pac-resolver": ["pac-resolver@7.0.1", "", { "dependencies": { "degenerator": "^5.0.0", "netmask": "^2.0.2" } }, "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg=="], @@ -1379,61 +1157,27 @@ "path-expression-matcher": ["path-expression-matcher@1.6.2", "", {}, "sha512-enSlaiat05iasnzmgNxRj8reFdj3puY2QpNgP1aPIaVfT6nn9ICuPoFlKHk8EN22HcwewshO+mN2DGbkCEOtqQ=="], "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], ->>>>>>> @{-1} - - "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], - -<<<<<<< HEAD - "pg": ["pg@8.23.0", "", { "dependencies": { "pg-connection-string": "^2.14.0", "pg-pool": "^3.14.0", "pg-protocol": "^1.16.0", "pg-types": "2.2.0", "pgpass": "1.0.5" }, "optionalDependencies": { "pg-cloudflare": "^1.4.0" }, "peerDependencies": { "pg-native": ">=3.0.1" }, "optionalPeers": ["pg-native"] }, "sha512-Ip2EQCngowJLGOfCwkFhPXU7/ljlhn6Rxlmy4XYfL2Y+vyRM59+8uR2xqRWKdYmbXmxCFOAmKxBuSUCdF34qLg=="], - - "pg-cloudflare": ["pg-cloudflare@1.4.0", "", {}, "sha512-Vo7z/6rrQYxpNRylp4Tlob2elzbh+N/MOQbxFVWCxS7oEx6jF53GTJFxK2WWpKuBRkmiin4Mt+xofFDjx09R0A=="], - "pg-connection-string": ["pg-connection-string@2.14.0", "", {}, "sha512-XwWDGcLRGCXAR8F/AM5bG7Q+A3Wm2s6QeEjlOKZLlH3UYcguiqCWKyWXVag5TLTIjR7oOJUY8kcADaZgWPyLeg=="], + "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="], - "pg-int8": ["pg-int8@1.0.1", "", {}, "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="], - - "pg-pool": ["pg-pool@3.14.0", "", { "peerDependencies": { "pg": ">=8.0" } }, "sha512-gKtPkFdQPU3DksooVLi9LsjZxrsBUZIpa+7aVx+LV5pNh0KzP4Zleud2po+ConrxbuXGBJ6Hfer6hdgpIBpBaw=="], - - "pg-protocol": ["pg-protocol@1.16.0", "", {}, "sha512-sILXutLVjCLjcDuOmvhX5e2Z4cS5qG/6Bu3VkpFwdf/633ElGLpEh9bgmuI5I4sqKqkifQiGyiCcx1HdtrK7tg=="], - - "pg-types": ["pg-types@2.2.0", "", { "dependencies": { "pg-int8": "1.0.1", "postgres-array": "~2.0.0", "postgres-bytea": "~1.0.0", "postgres-date": "~1.0.4", "postgres-interval": "^1.1.0" } }, "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA=="], + "pathe": ["pathe@2.0.3", "", {}, "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="], - "pgpass": ["pgpass@1.0.5", "", { "dependencies": { "split2": "^4.1.0" } }, "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug=="], -||||||| 47206cf -======= "pend": ["pend@1.2.0", "", {}, "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="], ->>>>>>> @{-1} "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], - "picomatch": ["picomatch@4.0.5", "", {}, "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A=="], + "picomatch": ["picomatch@4.0.7", "", {}, "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA=="], "postcss": ["postcss@8.5.26", "", { "dependencies": { "nanoid": "^3.3.17", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ=="], -<<<<<<< HEAD - "postgres-array": ["postgres-array@2.0.0", "", {}, "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="], - - "postgres-bytea": ["postgres-bytea@1.0.1", "", {}, "sha512-5+5HqXnsZPE65IJZSMkZtURARZelel2oXUEO8rH83VS/hxH5vv1uHquPg5wZs8yMAfdv971IU+kcPUczi7NVBQ=="], - - "postgres-date": ["postgres-date@1.0.7", "", {}, "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q=="], - - "postgres-interval": ["postgres-interval@1.2.0", "", { "dependencies": { "xtend": "^4.0.0" } }, "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ=="], - - "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], - - "promise-limit": ["promise-limit@2.7.0", "", {}, "sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw=="], - - "proper-lockfile": ["proper-lockfile@4.1.2", "", { "dependencies": { "graceful-fs": "^4.2.4", "retry": "^0.12.0", "signal-exit": "^3.0.2" } }, "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA=="], - - "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], -||||||| 47206cf -======= "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], "progress": ["progress@2.0.3", "", {}, "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="], "promise-limit": ["promise-limit@2.7.0", "", {}, "sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw=="], + "prompts": ["prompts@2.4.2", "", { "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" } }, "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="], + "proper-lockfile": ["proper-lockfile@4.1.2", "", { "dependencies": { "graceful-fs": "^4.2.4", "retry": "^0.12.0", "signal-exit": "^3.0.2" } }, "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA=="], "proxy-agent": ["proxy-agent@6.5.0", "", { "dependencies": { "agent-base": "^7.1.2", "debug": "^4.3.4", "http-proxy-agent": "^7.0.1", "https-proxy-agent": "^7.0.6", "lru-cache": "^7.14.1", "pac-proxy-agent": "^7.1.0", "proxy-from-env": "^1.1.0", "socks-proxy-agent": "^8.0.5" } }, "sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A=="], @@ -1441,7 +1185,6 @@ "proxy-from-env": ["proxy-from-env@1.1.0", "", {}, "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="], "pump": ["pump@3.0.4", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA=="], ->>>>>>> @{-1} "pure-rand": ["pure-rand@8.4.2", "", {}, "sha512-vvuOGgcuPJAirlHvuQw1TrOiw7ptaIXXmIbNuiNOY6lNGJJH49PQ1Kj4nd783nPdQhQdicgOjVI2yI/9BD6/Ng=="], @@ -1453,39 +1196,29 @@ "readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + "rechoir": ["rechoir@0.8.0", "", { "dependencies": { "resolve": "^1.20.0" } }, "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ=="], + "redis-errors": ["redis-errors@1.2.0", "", {}, "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w=="], "redis-parser": ["redis-parser@3.0.0", "", { "dependencies": { "redis-errors": "^1.0.0" } }, "sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A=="], "regexp-to-ast": ["regexp-to-ast@0.5.0", "", {}, "sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw=="], - "remeda": ["remeda@2.33.4", "", {}, "sha512-ygHswjlc/opg2VrtiYvUOPLjxjtdKvjGz1/plDhkG66hjNjFr1xmfrs2ClNFo/E6TyUFiwYNh53bKV26oBoMGQ=="], - -<<<<<<< HEAD - "resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], - - "restore-cursor": ["restore-cursor@4.0.0", "", { "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg=="], - - "retry": ["retry@0.12.0", "", {}, "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow=="], + "regexp-tree": ["regexp-tree@0.1.27", "", { "bin": { "regexp-tree": "bin/regexp-tree" } }, "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA=="], - "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], - - "rolldown": ["rolldown@1.1.5", "", { "dependencies": { "@oxc-project/types": "=0.139.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.1.5", "@rolldown/binding-darwin-arm64": "1.1.5", "@rolldown/binding-darwin-x64": "1.1.5", "@rolldown/binding-freebsd-x64": "1.1.5", "@rolldown/binding-linux-arm-gnueabihf": "1.1.5", "@rolldown/binding-linux-arm64-gnu": "1.1.5", "@rolldown/binding-linux-arm64-musl": "1.1.5", "@rolldown/binding-linux-ppc64-gnu": "1.1.5", "@rolldown/binding-linux-s390x-gnu": "1.1.5", "@rolldown/binding-linux-x64-gnu": "1.1.5", "@rolldown/binding-linux-x64-musl": "1.1.5", "@rolldown/binding-openharmony-arm64": "1.1.5", "@rolldown/binding-wasm32-wasi": "1.1.5", "@rolldown/binding-win32-arm64-msvc": "1.1.5", "@rolldown/binding-win32-x64-msvc": "1.1.5" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA=="], + "remeda": ["remeda@2.33.4", "", {}, "sha512-ygHswjlc/opg2VrtiYvUOPLjxjtdKvjGz1/plDhkG66hjNjFr1xmfrs2ClNFo/E6TyUFiwYNh53bKV26oBoMGQ=="], - "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], -||||||| 47206cf - "rolldown": ["rolldown@1.2.4", "", { "dependencies": { "@oxc-project/types": "=0.144.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.2.4", "@rolldown/binding-darwin-arm64": "1.2.4", "@rolldown/binding-darwin-x64": "1.2.4", "@rolldown/binding-freebsd-x64": "1.2.4", "@rolldown/binding-linux-arm-gnueabihf": "1.2.4", "@rolldown/binding-linux-arm64-gnu": "1.2.4", "@rolldown/binding-linux-arm64-musl": "1.2.4", "@rolldown/binding-linux-ppc64-gnu": "1.2.4", "@rolldown/binding-linux-s390x-gnu": "1.2.4", "@rolldown/binding-linux-x64-gnu": "1.2.4", "@rolldown/binding-linux-x64-musl": "1.2.4", "@rolldown/binding-openharmony-arm64": "1.2.4", "@rolldown/binding-win32-arm64-msvc": "1.2.4", "@rolldown/binding-win32-x64-msvc": "1.2.4" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-rSr7irW0K7QRWzjdJXqZowkcRdDtjRduh43rBltnVKd0VFq839l1lJoDvGJb6gl7+4rTTCrPWu+YfujUL8Ug7w=="], -======= "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], + "resolve": ["resolve@1.22.12", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA=="], + "restore-cursor": ["restore-cursor@4.0.0", "", { "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg=="], "retry": ["retry@0.12.0", "", {}, "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow=="], "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], - "rolldown": ["rolldown@1.2.4", "", { "dependencies": { "@oxc-project/types": "=0.144.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.2.4", "@rolldown/binding-darwin-arm64": "1.2.4", "@rolldown/binding-darwin-x64": "1.2.4", "@rolldown/binding-freebsd-x64": "1.2.4", "@rolldown/binding-linux-arm-gnueabihf": "1.2.4", "@rolldown/binding-linux-arm64-gnu": "1.2.4", "@rolldown/binding-linux-arm64-musl": "1.2.4", "@rolldown/binding-linux-ppc64-gnu": "1.2.4", "@rolldown/binding-linux-s390x-gnu": "1.2.4", "@rolldown/binding-linux-x64-gnu": "1.2.4", "@rolldown/binding-linux-x64-musl": "1.2.4", "@rolldown/binding-openharmony-arm64": "1.2.4", "@rolldown/binding-win32-arm64-msvc": "1.2.4", "@rolldown/binding-win32-x64-msvc": "1.2.4" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-rSr7irW0K7QRWzjdJXqZowkcRdDtjRduh43rBltnVKd0VFq839l1lJoDvGJb6gl7+4rTTCrPWu+YfujUL8Ug7w=="], ->>>>>>> @{-1} + "rolldown": ["rolldown@1.1.5", "", { "dependencies": { "@oxc-project/types": "=0.139.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.1.5", "@rolldown/binding-darwin-arm64": "1.1.5", "@rolldown/binding-darwin-x64": "1.1.5", "@rolldown/binding-freebsd-x64": "1.1.5", "@rolldown/binding-linux-arm-gnueabihf": "1.1.5", "@rolldown/binding-linux-arm64-gnu": "1.1.5", "@rolldown/binding-linux-arm64-musl": "1.1.5", "@rolldown/binding-linux-ppc64-gnu": "1.1.5", "@rolldown/binding-linux-s390x-gnu": "1.1.5", "@rolldown/binding-linux-x64-gnu": "1.1.5", "@rolldown/binding-linux-x64-musl": "1.1.5", "@rolldown/binding-openharmony-arm64": "1.1.5", "@rolldown/binding-wasm32-wasi": "1.1.5", "@rolldown/binding-win32-arm64-msvc": "1.1.5", "@rolldown/binding-win32-x64-msvc": "1.1.5" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA=="], "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], @@ -1493,6 +1226,8 @@ "safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="], + "safe-regex": ["safe-regex@2.1.1", "", { "dependencies": { "regexp-tree": "~0.1.1" } }, "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A=="], + "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], @@ -1501,12 +1236,8 @@ "setimmediate": ["setimmediate@1.0.5", "", {}, "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="], -<<<<<<< HEAD -||||||| 47206cf -======= "sharp": ["sharp@0.34.5", "", { "dependencies": { "@img/colour": "^1.0.0", "detect-libc": "^2.1.2", "semver": "^7.7.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.34.5", "@img/sharp-darwin-x64": "0.34.5", "@img/sharp-libvips-darwin-arm64": "1.2.4", "@img/sharp-libvips-darwin-x64": "1.2.4", "@img/sharp-libvips-linux-arm": "1.2.4", "@img/sharp-libvips-linux-arm64": "1.2.4", "@img/sharp-libvips-linux-ppc64": "1.2.4", "@img/sharp-libvips-linux-riscv64": "1.2.4", "@img/sharp-libvips-linux-s390x": "1.2.4", "@img/sharp-libvips-linux-x64": "1.2.4", "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", "@img/sharp-libvips-linuxmusl-x64": "1.2.4", "@img/sharp-linux-arm": "0.34.5", "@img/sharp-linux-arm64": "0.34.5", "@img/sharp-linux-ppc64": "0.34.5", "@img/sharp-linux-riscv64": "0.34.5", "@img/sharp-linux-s390x": "0.34.5", "@img/sharp-linux-x64": "0.34.5", "@img/sharp-linuxmusl-arm64": "0.34.5", "@img/sharp-linuxmusl-x64": "0.34.5", "@img/sharp-wasm32": "0.34.5", "@img/sharp-win32-arm64": "0.34.5", "@img/sharp-win32-ia32": "0.34.5", "@img/sharp-win32-x64": "0.34.5" } }, "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg=="], ->>>>>>> @{-1} "shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="], "shebang-regex": ["shebang-regex@3.0.0", "", {}, "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="], @@ -1519,9 +1250,6 @@ "slice-ansi": ["slice-ansi@8.0.0", "", { "dependencies": { "ansi-styles": "^6.2.3", "is-fullwidth-code-point": "^5.1.0" } }, "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg=="], -<<<<<<< HEAD -||||||| 47206cf -======= "smart-buffer": ["smart-buffer@4.2.0", "", {}, "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="], "socks": ["socks@2.8.9", "", { "dependencies": { "ip-address": "^10.1.1", "smart-buffer": "^4.2.0" } }, "sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw=="], @@ -1532,19 +1260,9 @@ "source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], ->>>>>>> @{-1} "source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="], -<<<<<<< HEAD - "sparse-bitfield": ["sparse-bitfield@3.0.3", "", { "dependencies": { "memory-pager": "^1.0.2" } }, "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ=="], - - "split2": ["split2@4.2.0", "", {}, "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg=="], - - "sql-escaper": ["sql-escaper@1.5.1", "", {}, "sha512-4toX5E1fQbBrpfXidaHnF0669nkAdETeIPTs2SUjxxD7RRIs9ICG4gtpmfc68JCEKehsdwLFqBu9VlQqZ1P1gg=="], -||||||| 47206cf -======= "sshpk": ["sshpk@1.18.0", "", { "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", "bcrypt-pbkdf": "^1.0.0", "dashdash": "^1.12.0", "ecc-jsbn": "~0.1.1", "getpass": "^0.1.1", "jsbn": "~0.1.0", "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" }, "bin": { "sshpk-conv": "bin/sshpk-conv", "sshpk-sign": "bin/sshpk-sign", "sshpk-verify": "bin/sshpk-verify" } }, "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ=="], ->>>>>>> @{-1} "stack-utils": ["stack-utils@2.0.6", "", { "dependencies": { "escape-string-regexp": "^2.0.0" } }, "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ=="], @@ -1554,44 +1272,35 @@ "std-env": ["std-env@4.2.0", "", {}, "sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw=="], -<<<<<<< HEAD + "streamx": ["streamx@2.28.1", "", { "dependencies": { "events-universal": "^1.0.0", "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" } }, "sha512-zEzXb0s5Cds7tqMH6rhZ05lcJydCWiQPEwiNngVqzsxCc962vLY4Uw+mW7od8kDH258k2Uz/JrOkdIAAhSh9VA=="], + "string-width": ["string-width@8.2.2", "", { "dependencies": { "get-east-asian-width": "^1.5.0", "strip-ansi": "^7.1.2" } }, "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg=="], "string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], "strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], - "strnum": ["strnum@2.4.2", "", { "dependencies": { "anynum": "^1.0.1" } }, "sha512-rDG3Ah4TV0k1hWvLSzkZtMmLN9+eS+h3knq4MP6A42Y3Yh5qGNnOUs1jJkoSr8FG5dsL28c7KgkIBzSEykqtuw=="], - - "tagged-tag": ["tagged-tag@1.0.0", "", {}, "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng=="], - - "tar": ["tar@7.5.22", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.2", "minizlib": "^3.1.0", "yallist": "^5.0.0" } }, "sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA=="], - - "terminal-size": ["terminal-size@4.0.1", "", {}, "sha512-avMLDQpUI9I5XFrklECw1ZEUPJhqzcwSWsyyI8blhRLT+8N1jLJWLWWYQpB2q2xthq8xDvjZPISVh53T/+CLYQ=="], -||||||| 47206cf -======= - "streamx": ["streamx@2.28.0", "", { "dependencies": { "events-universal": "^1.0.0", "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" } }, "sha512-1Yowhzjf0ivGMrTIkY9hav5TxobO9qIVqUE41fiCGMGgc3CLlf4MY+9AHmZqBWgDTue0fY9zWjYFVyf6Diuobw=="], + "strip-bom": ["strip-bom@3.0.0", "", {}, "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="], - "string-width": ["string-width@8.2.2", "", { "dependencies": { "get-east-asian-width": "^1.5.0", "strip-ansi": "^7.1.2" } }, "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg=="], + "strnum": ["strnum@2.4.2", "", { "dependencies": { "anynum": "^1.0.1" } }, "sha512-rDG3Ah4TV0k1hWvLSzkZtMmLN9+eS+h3knq4MP6A42Y3Yh5qGNnOUs1jJkoSr8FG5dsL28c7KgkIBzSEykqtuw=="], - "string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="], + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - "strip-ansi": ["strip-ansi@7.2.0", "", { "dependencies": { "ansi-regex": "^6.2.2" } }, "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="], - - "strnum": ["strnum@2.4.2", "", { "dependencies": { "anynum": "^1.0.1" } }, "sha512-rDG3Ah4TV0k1hWvLSzkZtMmLN9+eS+h3knq4MP6A42Y3Yh5qGNnOUs1jJkoSr8FG5dsL28c7KgkIBzSEykqtuw=="], + "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], "tagged-tag": ["tagged-tag@1.0.0", "", {}, "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng=="], + "tapable": ["tapable@2.3.3", "", {}, "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A=="], + "tar-fs": ["tar-fs@3.1.3", "", { "dependencies": { "pump": "^3.0.0", "tar-stream": "^3.1.5" }, "optionalDependencies": { "bare-fs": "^4.0.1", "bare-path": "^3.0.0" } }, "sha512-/hU4AXnIdZu+Gvl1pk0oI5f5HxWsCJRtY2aFaJdk9VvyL48DWU6iU5WAIPG+wIi1YvWA6eTJvIviP/tMAZZNwQ=="], - "tar-stream": ["tar-stream@3.2.0", "", { "dependencies": { "b4a": "^1.6.4", "bare-fs": "^4.5.5", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" } }, "sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg=="], + "tar-stream": ["tar-stream@3.2.1", "", { "dependencies": { "b4a": "^1.6.4", "bare-fs": "^4.5.5", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" } }, "sha512-nqsEO8zLZJvrOMdEwkA0QdCLFbetHMn95Zqu4fKwX+hkaTWJPZZOrxx/PwtxoK0MMGQmBQNRW3CPs8IFYQz4cQ=="], "teex": ["teex@1.0.1", "", { "dependencies": { "streamx": "^2.12.5" } }, "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg=="], "terminal-size": ["terminal-size@4.0.1", "", {}, "sha512-avMLDQpUI9I5XFrklECw1ZEUPJhqzcwSWsyyI8blhRLT+8N1jLJWLWWYQpB2q2xthq8xDvjZPISVh53T/+CLYQ=="], "text-decoder": ["text-decoder@1.2.7", "", { "dependencies": { "b4a": "^1.6.4" } }, "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ=="], ->>>>>>> @{-1} "tinybench": ["tinybench@2.9.0", "", {}, "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg=="], @@ -1607,54 +1316,25 @@ "toml": ["toml@4.3.0", "", {}, "sha512-lVb8X9BsPVuH0M4BKeS91tXAmJvCjQ5UIyAbQFaxkKGyUFK2RPkhwaFSQH8vbpl1d23eu/IBH+dwVMHWaq9A5A=="], -<<<<<<< HEAD - "tr46": ["tr46@5.1.1", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw=="], + "tsconfig-paths": ["tsconfig-paths@4.2.0", "", { "dependencies": { "json5": "^2.2.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg=="], - "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + "tsconfig-paths-webpack-plugin": ["tsconfig-paths-webpack-plugin@4.2.0", "", { "dependencies": { "chalk": "^4.1.0", "enhanced-resolve": "^5.7.0", "tapable": "^2.2.1", "tsconfig-paths": "^4.1.2" } }, "sha512-zbem3rfRS8BgeNK50Zz5SIQgXzLafiHjOwUAvk/38/o1jHn/V5QAgVUcz884or7WYcPaH3N2CIfUc2u0ul7UcA=="], - "turbo": ["turbo@2.10.11", "", { "optionalDependencies": { "@turbo/darwin-64": "2.10.11", "@turbo/darwin-arm64": "2.10.11", "@turbo/linux-64": "2.10.11", "@turbo/linux-arm64": "2.10.11", "@turbo/windows-64": "2.10.11", "@turbo/windows-arm64": "2.10.11" }, "bin": { "turbo": "bin/turbo" } }, "sha512-yQfwQVoRXwOuyX1LxiJFBFNg6VfuYh+/RyZLd82+isgyLkBXw3S5XRRzvcck1FAjSCG5sVyLd+O1eDMvYa3J7g=="], -||||||| 47206cf -======= "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], "tweetnacl": ["tweetnacl@0.14.5", "", {}, "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="], ->>>>>>> @{-1} "type-fest": ["type-fest@5.8.0", "", { "dependencies": { "tagged-tag": "^1.0.0" } }, "sha512-YGYEVz3Fm5iy/AybuA0oyNFq7H4CgQNfRp/qfe8nurE1kuCeNm3/vfm9X4Mtl+qLyaKJUh5xrFZwogr41SMjYA=="], "typescript": ["typescript@7.0.2", "", { "optionalDependencies": { "@typescript/typescript-aix-ppc64": "7.0.2", "@typescript/typescript-darwin-arm64": "7.0.2", "@typescript/typescript-darwin-x64": "7.0.2", "@typescript/typescript-freebsd-arm64": "7.0.2", "@typescript/typescript-freebsd-x64": "7.0.2", "@typescript/typescript-linux-arm": "7.0.2", "@typescript/typescript-linux-arm64": "7.0.2", "@typescript/typescript-linux-loong64": "7.0.2", "@typescript/typescript-linux-mips64el": "7.0.2", "@typescript/typescript-linux-ppc64": "7.0.2", "@typescript/typescript-linux-riscv64": "7.0.2", "@typescript/typescript-linux-s390x": "7.0.2", "@typescript/typescript-linux-x64": "7.0.2", "@typescript/typescript-netbsd-arm64": "7.0.2", "@typescript/typescript-netbsd-x64": "7.0.2", "@typescript/typescript-openbsd-arm64": "7.0.2", "@typescript/typescript-openbsd-x64": "7.0.2", "@typescript/typescript-sunos-x64": "7.0.2", "@typescript/typescript-win32-arm64": "7.0.2", "@typescript/typescript-win32-x64": "7.0.2" }, "bin": { "tsc": "bin/tsc" } }, "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA=="], -<<<<<<< HEAD "undici": ["undici@8.10.0", "", {}, "sha512-HvltHd7avK13QIw/oLe4qoOLyoVSoafqJ2jYOrtMRBkbYT31eiBQ8O0ehRKZiEZCMEyLFQNIADpgCWC5fALvYQ=="], -||||||| 47206cf -======= - "undici": ["undici@7.29.0", "", {}, "sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw=="], ->>>>>>> @{-1} "undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], "unenv": ["unenv@2.0.0-rc.24", "", { "dependencies": { "pathe": "^2.0.3" } }, "sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw=="], -<<<<<<< HEAD -||||||| 47206cf - "uuid": ["uuid@14.0.1", "", { "bin": { "uuid": "dist-node/bin/uuid" } }, "sha512-6ZxzVpzDXDa3bJWaHilVayA+BH/1zmxCJoVgvmqJnid/gPoKHxUrS/aC/T6LGQtNHT+XHG9fXPJB4d+IrU30Ew=="], -======= - - "universal-user-agent": ["universal-user-agent@7.0.3", "", {}, "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A=="], - - "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], - "uuid": ["uuid@14.0.1", "", { "bin": { "uuid": "dist-node/bin/uuid" } }, "sha512-6ZxzVpzDXDa3bJWaHilVayA+BH/1zmxCJoVgvmqJnid/gPoKHxUrS/aC/T6LGQtNHT+XHG9fXPJB4d+IrU30Ew=="], ->>>>>>> @{-1} - -<<<<<<< HEAD "universal-user-agent": ["universal-user-agent@7.0.3", "", {}, "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A=="], -||||||| 47206cf - "vite": ["vite@8.2.1", "", { "dependencies": { "lightningcss": "^1.33.0", "picomatch": "^4.0.5", "postcss": "^8.5.25", "rolldown": "~1.2.1", "tinyglobby": "^0.2.17" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.4.0", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-EU/eS7BH3XROHh2YnBefjM6DBKA6ZeMZEYQbj7NLWg5wHYlhB8B/Mayd5XsgWq+NFYccDOTemRpdETWR6Ka/lw=="], -======= - "valibot": ["valibot@1.2.0", "", { "peerDependencies": { "typescript": ">=5" }, "optionalPeers": ["typescript"] }, "sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg=="], - - "vite": ["vite@8.2.1", "", { "dependencies": { "lightningcss": "^1.33.0", "picomatch": "^4.0.5", "postcss": "^8.5.25", "rolldown": "~1.2.1", "tinyglobby": "^0.2.17" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.4.0", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-EU/eS7BH3XROHh2YnBefjM6DBKA6ZeMZEYQbj7NLWg5wHYlhB8B/Mayd5XsgWq+NFYccDOTemRpdETWR6Ka/lw=="], ->>>>>>> @{-1} "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], @@ -1666,11 +1346,7 @@ "vitest": ["vitest@4.1.11", "", { "dependencies": { "@vitest/expect": "4.1.11", "@vitest/mocker": "4.1.11", "@vitest/pretty-format": "4.1.11", "@vitest/runner": "4.1.11", "@vitest/snapshot": "4.1.11", "@vitest/spy": "4.1.11", "@vitest/utils": "4.1.11", "es-module-lexer": "^2.0.0", "expect-type": "^1.3.0", "magic-string": "^0.30.21", "obug": "^2.1.1", "pathe": "^2.0.3", "picomatch": "^4.0.3", "std-env": "^4.0.0-rc.1", "tinybench": "^2.9.0", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tinyrainbow": "^3.1.0", "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", "@vitest/browser-playwright": "4.1.11", "@vitest/browser-preview": "4.1.11", "@vitest/browser-webdriverio": "4.1.11", "@vitest/coverage-istanbul": "4.1.11", "@vitest/coverage-v8": "4.1.11", "@vitest/ui": "4.1.11", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@opentelemetry/api", "@types/node", "@vitest/browser-playwright", "@vitest/browser-preview", "@vitest/browser-webdriverio", "@vitest/coverage-istanbul", "@vitest/coverage-v8", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "./vitest.mjs" } }, "sha512-fhACrNXUidIbGSBr5FlbuBkO7VWC1ZyLl0DO4CU2DrQoAPxX84Ysxs+HeGQpii5lZWV1Q4gBZTTu49mF+A6Edw=="], - "webidl-conversions": ["webidl-conversions@7.0.0", "", {}, "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g=="], - - "whatwg-url": ["whatwg-url@14.2.0", "", { "dependencies": { "tr46": "^5.1.0", "webidl-conversions": "^7.0.0" } }, "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw=="], - - "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + "watskeburt": ["watskeburt@6.0.0", "", { "bin": { "watskeburt": "dist/run-cli.js" } }, "sha512-jfiuDABaxSkC71T6oZ3vCS99roYkSHm/+As+G0Dz8taAHQb+SJBvLEm5RlsgG71XdfAj3rv7eudUBTgwcQUPlQ=="], "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], @@ -1682,103 +1358,16 @@ "wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="], -<<<<<<< HEAD -||||||| 47206cf -======= "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], ->>>>>>> @{-1} "ws": ["ws@8.21.3", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw=="], "xml-naming": ["xml-naming@0.3.0", "", {}, "sha512-ghig2TBE/H11aOVgmahA3MhimvkBr6JIYknH/Dhdk10nXwdbIqBJsbfMxpvFPG8bAw77gN29aQWvKpmVoPlvPQ=="], -<<<<<<< HEAD - "xtend": ["xtend@4.0.2", "", {}, "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="], - - "yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="], -||||||| 47206cf -======= "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], ->>>>>>> @{-1} "yaml": ["yaml@2.9.0", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA=="], -<<<<<<< HEAD - "yoga-layout": ["yoga-layout@3.2.1", "", {}, "sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ=="], - - "zeptomatch": ["zeptomatch@2.1.0", "", { "dependencies": { "grammex": "^3.1.11", "graphmatch": "^1.1.0" } }, "sha512-KiGErG2J0G82LSpniV0CtIzjlJ10E04j02VOudJsPyPwNZgGnRKQy7I1R7GMyg/QswnE4l7ohSGrQbQbjXPPDA=="], - - "zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="], - - "@effect/sql-d1/@cloudflare/workers-types": ["@cloudflare/workers-types@5.20260823.1", "", {}, "sha512-HdBVDR/gecQ5QwB+DZ9kB5yjNZLS85fe8bMB2K/k0xmCvaoMlAFrQQGLaCBYR00j+i9aTkQzwfrPInVZwlMPwQ=="], - - "@labs/infra/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - - "@mapbox/node-pre-gyp/detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], - - "@octokit/plugin-paginate-rest/@octokit/types": ["@octokit/types@16.0.0", "", { "dependencies": { "@octokit/openapi-types": "^27.0.0" } }, "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg=="], - - "@octokit/plugin-rest-endpoint-methods/@octokit/types": ["@octokit/types@16.0.0", "", { "dependencies": { "@octokit/openapi-types": "^27.0.0" } }, "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg=="], - - "@prisma/dev/std-env": ["std-env@3.10.0", "", {}, "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg=="], - - "@vitest/mocker/estree-walker": ["estree-walker@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.0" } }, "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g=="], - - "alchemy/undici": ["undici@7.29.0", "", {}, "sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw=="], - - "foreground-child/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], - - "lightningcss/detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], - - "micromatch/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], - - "node-fetch/whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="], - - "node-gyp-build-optional-packages/detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], - - "vite/rolldown": ["rolldown@1.2.5", "", { "dependencies": { "@oxc-project/types": "=0.146.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm-eabi": "1.2.5", "@rolldown/binding-android-arm64": "1.2.5", "@rolldown/binding-darwin-arm64": "1.2.5", "@rolldown/binding-darwin-x64": "1.2.5", "@rolldown/binding-freebsd-x64": "1.2.5", "@rolldown/binding-linux-arm-gnueabihf": "1.2.5", "@rolldown/binding-linux-arm64-gnu": "1.2.5", "@rolldown/binding-linux-arm64-musl": "1.2.5", "@rolldown/binding-linux-ppc64-gnu": "1.2.5", "@rolldown/binding-linux-s390x-gnu": "1.2.5", "@rolldown/binding-linux-x64-gnu": "1.2.5", "@rolldown/binding-linux-x64-musl": "1.2.5", "@rolldown/binding-openharmony-arm64": "1.2.5", "@rolldown/binding-win32-arm64-msvc": "1.2.5", "@rolldown/binding-win32-x64-msvc": "1.2.5" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-VD2IE5PUG4Oj8zz2VGykiYd5wbnjdIiSsNQb8Qu5B+noEp+A78mu2iVvpp27g8es14Tk9rofNs5Tku9iQCS4fA=="], - - "wrap-ansi/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], - - "@octokit/plugin-paginate-rest/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@27.0.0", "", {}, "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA=="], - - "@octokit/plugin-rest-endpoint-methods/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@27.0.0", "", {}, "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA=="], - - "node-fetch/whatwg-url/tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="], - - "node-fetch/whatwg-url/webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="], - - "vite/rolldown/@oxc-project/types": ["@oxc-project/types@0.146.0", "", {}, "sha512-XC0QsnnhVe7sLIWmYmdPw7x5P0h4W8vUU3Nv1ySgWXtvCz8NizoAEpGXA0sOYoJQV2Rl13LgURAHQ5cI5ILCSA=="], - - "vite/rolldown/@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.2.5", "", { "os": "android", "cpu": "arm64" }, "sha512-zXcwKlQApYAOELHd8PwKDFkagYF9Wy4e0RJ+0qnzl9Pjnpj75TEG8ufv40p2J7kCEfwZAsNiuzRIyNNMWT38ig=="], - - "vite/rolldown/@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.2.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-dK4QakI42nzWgJT5sm4y4y/O//D4OxM75/cH28RLV+nzIN9AY+YsbuUVrUTjlLjXR6vpyxFbSsbmNuJ6BP9sww=="], - - "vite/rolldown/@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.2.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-fqSALaUu1Wjd1nK2uW2kJDWdLCc8lx1IcY+MTY26Aurfdx19anlzhqXOgCFbBFQnlFDTn4TC1/7Nz4Bl2mLP3A=="], - - "vite/rolldown/@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.2.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-/vCnNxlkxs9tKxNDcyWUePpJ/PgTzxIaVhoM5SmG8UV+GR/IcPam4VYxi7GIMo7PSDuNqlJqvprqii9NqqVCMw=="], - - "vite/rolldown/@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.2.5", "", { "os": "linux", "cpu": "arm" }, "sha512-abk0NLA519LxRCszmbE0jYKuQ9YPocOXTiOXOo6Yr+YAT95VH+PtqYAjOJvGKt3viEd/x4qzabAlwd5bHOOARg=="], - - "vite/rolldown/@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.2.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-Y7eALiJ8lr0M2HH103Js+g7V34wf6snlpZLAsHI90uLhr3PVlNsbFVAXJC9d/V6BnPyKtpSwI+NcB/RLxsQxuA=="], - - "vite/rolldown/@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.2.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-xMvZgnbZg4YVnR/AX2b3oOPDTFYJvUVaJg5FedA/LuvexAtXibZQej4cnTkw3rjsJ/ggUROB64TdtETiim+FYA=="], - - "vite/rolldown/@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.2.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-GRjeqTUDHTo5GwntsLaAMcBahG3nlpjftXWZLN73HiYQlhwEowvarFgQnRnQZtIp4keXX7quXFbG38uPZBa2EA=="], - - "vite/rolldown/@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.2.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-vLNTR45F2Uwc8AufkNXPmB4VliaXs+FvcheEogIzOXzO4l+LzieXF5A/TWxLy5HtqpsRCHUfd0lPVrrdgXdLHQ=="], - - "vite/rolldown/@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.2.5", "", { "os": "linux", "cpu": "x64" }, "sha512-Mgj59/HTuYeK9Gz2MA+mBWKnHsAgkBSec15ZMb1st3oIfFbX7gCjOae7GydHhzcyQi9Z/7M1QuN9bR3oFqF0jQ=="], - - "vite/rolldown/@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.2.5", "", { "os": "linux", "cpu": "x64" }, "sha512-mY8AP0/ichsbhAxGnLa3d3+MwV0EfgrPND2bplI3Ym8T6R2pJ0N87bvrKVwNXmdy3jnr6eQBecdqx/HMknBmpA=="], - - "vite/rolldown/@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.2.5", "", { "os": "none", "cpu": "arm64" }, "sha512-8SLssA2oweAxyRgDp789ACfRb/3P+zNRJpzZxSizxF9m8NUDQ4+3xjo8ttjhVGGw6Qxb70oZiEtIjaKikCO7Yw=="], - - "vite/rolldown/@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.2.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-vGbruD5zquhoc8D9SViXgN2FBJtNdTyQ4DtG+SWiEGlJiAzoKcZ2xp+xuXCffhubVdt0NJlTZqkeRuERy7g8Cw=="], - - "vite/rolldown/@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.2.5", "", { "os": "win32", "cpu": "x64" }, "sha512-e/SXpgISz+IoqVcSSI0rx/d/he8zqLex+/rCWpnHpmVfmPIUjag9H6P7zotf0gJHwPUhQxZ/mF8tr6acebT9yw=="], -||||||| 47206cf -======= "yargs": ["yargs@17.7.3", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g=="], "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], @@ -1791,17 +1380,13 @@ "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="], - "@distilled.cloud/aws/@distilled.cloud/core": ["@distilled.cloud/core@1.0.0-rc.2", "", { "peerDependencies": { "effect": ">=4.0.0-beta.102 || >=4.0.0" } }, "sha512-cVswTWsqC15Z9EPAOdRpfTG4UU8JPXhQEeH2ThW7Yh2BRl4lhIIOdxbRqUsRXPDMn24Mn08h2C3A6MGKP/KwLA=="], - - "@distilled.cloud/axiom/@distilled.cloud/core": ["@distilled.cloud/core@1.0.0-rc.2", "", { "peerDependencies": { "effect": ">=4.0.0-beta.102 || >=4.0.0" } }, "sha512-cVswTWsqC15Z9EPAOdRpfTG4UU8JPXhQEeH2ThW7Yh2BRl4lhIIOdxbRqUsRXPDMn24Mn08h2C3A6MGKP/KwLA=="], - - "@distilled.cloud/cloudflare-rolldown-plugin/rolldown": ["rolldown@1.1.5", "", { "dependencies": { "@oxc-project/types": "=0.139.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.1.5", "@rolldown/binding-darwin-arm64": "1.1.5", "@rolldown/binding-darwin-x64": "1.1.5", "@rolldown/binding-freebsd-x64": "1.1.5", "@rolldown/binding-linux-arm-gnueabihf": "1.1.5", "@rolldown/binding-linux-arm64-gnu": "1.1.5", "@rolldown/binding-linux-arm64-musl": "1.1.5", "@rolldown/binding-linux-ppc64-gnu": "1.1.5", "@rolldown/binding-linux-s390x-gnu": "1.1.5", "@rolldown/binding-linux-x64-gnu": "1.1.5", "@rolldown/binding-linux-x64-musl": "1.1.5", "@rolldown/binding-openharmony-arm64": "1.1.5", "@rolldown/binding-wasm32-wasi": "1.1.5", "@rolldown/binding-win32-arm64-msvc": "1.1.5", "@rolldown/binding-win32-x64-msvc": "1.1.5" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA=="], + "@chevrotain/cst-dts-gen/lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], - "@distilled.cloud/neon/@distilled.cloud/core": ["@distilled.cloud/core@1.0.0-rc.2", "", { "peerDependencies": { "effect": ">=4.0.0-beta.102 || >=4.0.0" } }, "sha512-cVswTWsqC15Z9EPAOdRpfTG4UU8JPXhQEeH2ThW7Yh2BRl4lhIIOdxbRqUsRXPDMn24Mn08h2C3A6MGKP/KwLA=="], + "@chevrotain/gast/lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], - "@distilled.cloud/planetscale/@distilled.cloud/core": ["@distilled.cloud/core@1.0.0-rc.2", "", { "peerDependencies": { "effect": ">=4.0.0-beta.102 || >=4.0.0" } }, "sha512-cVswTWsqC15Z9EPAOdRpfTG4UU8JPXhQEeH2ThW7Yh2BRl4lhIIOdxbRqUsRXPDMn24Mn08h2C3A6MGKP/KwLA=="], + "@distilled.cloud/cloudflare-runtime/@distilled.cloud/cloudflare": ["@distilled.cloud/cloudflare@0.30.3", "", { "dependencies": { "@distilled.cloud/core": "0.30.3" }, "peerDependencies": { "effect": ">=4.0.0-beta.100 || >=4.0.0" } }, "sha512-IwQyIZrfzRJ7Dn9Plsk5pMlr50CT72fMnD5YCFy31MKAthh906ewcO3NuJOKHGA8AF9u6SKTlebsQx4Jnj8uwA=="], - "@effect/platform-node/undici": ["undici@8.10.0", "", {}, "sha512-HvltHd7avK13QIw/oLe4qoOLyoVSoafqJ2jYOrtMRBkbYT31eiBQ8O0ehRKZiEZCMEyLFQNIADpgCWC5fALvYQ=="], + "@distilled.cloud/cloudflare-vite-plugin/@distilled.cloud/cloudflare": ["@distilled.cloud/cloudflare@0.30.3", "", { "dependencies": { "@distilled.cloud/core": "0.30.3" }, "peerDependencies": { "effect": ">=4.0.0-beta.100 || >=4.0.0" } }, "sha512-IwQyIZrfzRJ7Dn9Plsk5pMlr50CT72fMnD5YCFy31MKAthh906ewcO3NuJOKHGA8AF9u6SKTlebsQx4Jnj8uwA=="], "@octokit/plugin-paginate-rest/@octokit/types": ["@octokit/types@16.0.0", "", { "dependencies": { "@octokit/openapi-types": "^27.0.0" } }, "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg=="], @@ -1809,11 +1394,11 @@ "@prisma/dev/std-env": ["std-env@3.10.0", "", {}, "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg=="], - "alchemy/@distilled.cloud/cloudflare": ["@distilled.cloud/cloudflare@1.0.0-rc.2", "", { "dependencies": { "@distilled.cloud/core": "1.0.0-rc.2", "@effect/platform-bun": ">=4.0.0-beta.102 || >=4.0.0", "effect": ">=4.0.0-beta.102 || >=4.0.0" } }, "sha512-GGO5I8OxY/0iUT2bj+Ug+ivrjS6V1/nvdMRfL8dLOrpBkIhR8AFkLPgdatBwdIWeJWRE5wdU4wy+aeHJNp3oJA=="], + "alchemy/undici": ["undici@7.29.0", "", {}, "sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw=="], - "alchemy/@distilled.cloud/core": ["@distilled.cloud/core@1.0.0-rc.2", "", { "peerDependencies": { "effect": ">=4.0.0-beta.102 || >=4.0.0" } }, "sha512-cVswTWsqC15Z9EPAOdRpfTG4UU8JPXhQEeH2ThW7Yh2BRl4lhIIOdxbRqUsRXPDMn24Mn08h2C3A6MGKP/KwLA=="], + "alchemy-sops/@distilled.cloud/cloudflare": ["@distilled.cloud/cloudflare@0.30.3", "", { "dependencies": { "@distilled.cloud/core": "0.30.3" }, "peerDependencies": { "effect": ">=4.0.0-beta.100 || >=4.0.0" } }, "sha512-IwQyIZrfzRJ7Dn9Plsk5pMlr50CT72fMnD5YCFy31MKAthh906ewcO3NuJOKHGA8AF9u6SKTlebsQx4Jnj8uwA=="], - "alchemy/rolldown": ["rolldown@1.1.5", "", { "dependencies": { "@oxc-project/types": "=0.139.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.1.5", "@rolldown/binding-darwin-arm64": "1.1.5", "@rolldown/binding-darwin-x64": "1.1.5", "@rolldown/binding-freebsd-x64": "1.1.5", "@rolldown/binding-linux-arm-gnueabihf": "1.1.5", "@rolldown/binding-linux-arm64-gnu": "1.1.5", "@rolldown/binding-linux-arm64-musl": "1.1.5", "@rolldown/binding-linux-ppc64-gnu": "1.1.5", "@rolldown/binding-linux-s390x-gnu": "1.1.5", "@rolldown/binding-linux-x64-gnu": "1.1.5", "@rolldown/binding-linux-x64-musl": "1.1.5", "@rolldown/binding-openharmony-arm64": "1.1.5", "@rolldown/binding-wasm32-wasi": "1.1.5", "@rolldown/binding-win32-arm64-msvc": "1.1.5", "@rolldown/binding-win32-x64-msvc": "1.1.5" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA=="], + "chevrotain/lodash": ["lodash@4.17.21", "", {}, "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="], "cliui/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], @@ -1821,87 +1406,73 @@ "cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + "dependency-cruiser/picomatch": ["picomatch@4.0.5", "", {}, "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A=="], + "foreground-child/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + "global-directory/ini": ["ini@4.1.1", "", {}, "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g=="], + "libsql/detect-libc": ["detect-libc@2.0.2", "", {}, "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw=="], "micromatch/picomatch": ["picomatch@2.3.2", "", {}, "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA=="], - "wrap-ansi/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], - - "yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - - "@distilled.cloud/cloudflare-rolldown-plugin/rolldown/@oxc-project/types": ["@oxc-project/types@0.139.0", "", {}, "sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw=="], - - "@distilled.cloud/cloudflare-rolldown-plugin/rolldown/@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.1.5", "", { "os": "android", "cpu": "arm64" }, "sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ=="], - - "@distilled.cloud/cloudflare-rolldown-plugin/rolldown/@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.1.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw=="], - - "@distilled.cloud/cloudflare-rolldown-plugin/rolldown/@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.1.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g=="], - - "@distilled.cloud/cloudflare-rolldown-plugin/rolldown/@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.1.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA=="], - - "@distilled.cloud/cloudflare-rolldown-plugin/rolldown/@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.1.5", "", { "os": "linux", "cpu": "arm" }, "sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw=="], + "tsconfig-paths-webpack-plugin/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - "@distilled.cloud/cloudflare-rolldown-plugin/rolldown/@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.1.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q=="], + "vite/rolldown": ["rolldown@1.2.6", "", { "dependencies": { "@oxc-project/types": "=0.147.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm-eabi": "1.2.6", "@rolldown/binding-android-arm64": "1.2.6", "@rolldown/binding-darwin-arm64": "1.2.6", "@rolldown/binding-darwin-x64": "1.2.6", "@rolldown/binding-freebsd-x64": "1.2.6", "@rolldown/binding-linux-arm-gnueabihf": "1.2.6", "@rolldown/binding-linux-arm64-gnu": "1.2.6", "@rolldown/binding-linux-arm64-musl": "1.2.6", "@rolldown/binding-linux-ppc64-gnu": "1.2.6", "@rolldown/binding-linux-s390x-gnu": "1.2.6", "@rolldown/binding-linux-x64-gnu": "1.2.6", "@rolldown/binding-linux-x64-musl": "1.2.6", "@rolldown/binding-openharmony-arm64": "1.2.6", "@rolldown/binding-win32-arm64-msvc": "1.2.6", "@rolldown/binding-win32-x64-msvc": "1.2.6" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-vMM4q3aixf46GiF1Kok8jDPFsEpXgFWGjUHXNkNHNm+Y2adXAG2dbX91jkti3i0ZRsOlcmbuzAz1poObSHCmUA=="], - "@distilled.cloud/cloudflare-rolldown-plugin/rolldown/@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.1.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA=="], - - "@distilled.cloud/cloudflare-rolldown-plugin/rolldown/@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.1.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg=="], - - "@distilled.cloud/cloudflare-rolldown-plugin/rolldown/@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.1.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA=="], - - "@distilled.cloud/cloudflare-rolldown-plugin/rolldown/@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.1.5", "", { "os": "linux", "cpu": "x64" }, "sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ=="], - - "@distilled.cloud/cloudflare-rolldown-plugin/rolldown/@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.1.5", "", { "os": "linux", "cpu": "x64" }, "sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg=="], + "wrap-ansi/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], - "@distilled.cloud/cloudflare-rolldown-plugin/rolldown/@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.1.5", "", { "os": "none", "cpu": "arm64" }, "sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw=="], + "yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - "@distilled.cloud/cloudflare-rolldown-plugin/rolldown/@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.1.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw=="], + "@distilled.cloud/cloudflare-runtime/@distilled.cloud/cloudflare/@distilled.cloud/core": ["@distilled.cloud/core@0.30.3", "", { "peerDependencies": { "effect": ">=4.0.0-beta.100 || >=4.0.0" } }, "sha512-RupX597cPmceEiOY6csihFbzH2WhDkfbwGCMk+Izx8+f16u+aLm4mgyrYoxj1/dzIHsyIfw8sFKgNPzAg0Rx2Q=="], - "@distilled.cloud/cloudflare-rolldown-plugin/rolldown/@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.1.5", "", { "os": "win32", "cpu": "x64" }, "sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA=="], + "@distilled.cloud/cloudflare-vite-plugin/@distilled.cloud/cloudflare/@distilled.cloud/core": ["@distilled.cloud/core@0.30.3", "", { "peerDependencies": { "effect": ">=4.0.0-beta.100 || >=4.0.0" } }, "sha512-RupX597cPmceEiOY6csihFbzH2WhDkfbwGCMk+Izx8+f16u+aLm4mgyrYoxj1/dzIHsyIfw8sFKgNPzAg0Rx2Q=="], "@octokit/plugin-paginate-rest/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@27.0.0", "", {}, "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA=="], "@octokit/plugin-rest-endpoint-methods/@octokit/types/@octokit/openapi-types": ["@octokit/openapi-types@27.0.0", "", {}, "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA=="], - "alchemy/rolldown/@oxc-project/types": ["@oxc-project/types@0.139.0", "", {}, "sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw=="], + "alchemy-sops/@distilled.cloud/cloudflare/@distilled.cloud/core": ["@distilled.cloud/core@0.30.3", "", { "peerDependencies": { "effect": ">=4.0.0-beta.100 || >=4.0.0" } }, "sha512-RupX597cPmceEiOY6csihFbzH2WhDkfbwGCMk+Izx8+f16u+aLm4mgyrYoxj1/dzIHsyIfw8sFKgNPzAg0Rx2Q=="], + + "cliui/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "cliui/string-width/is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], - "alchemy/rolldown/@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.1.5", "", { "os": "android", "cpu": "arm64" }, "sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ=="], + "cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - "alchemy/rolldown/@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.1.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw=="], + "cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - "alchemy/rolldown/@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.1.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g=="], + "tsconfig-paths-webpack-plugin/chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - "alchemy/rolldown/@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.1.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA=="], + "vite/rolldown/@oxc-project/types": ["@oxc-project/types@0.147.0", "", {}, "sha512-IJ3s6ltHLp45S0bh7phkX+gJO7A1Wuz2EaqpAhb8WjqDwbzMiWKHhyyT42tskaWjEYXtHtVCPpnBJVT9+dcRLg=="], - "alchemy/rolldown/@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.1.5", "", { "os": "linux", "cpu": "arm" }, "sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw=="], + "vite/rolldown/@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.2.6", "", { "os": "android", "cpu": "arm64" }, "sha512-lkWU8ZJaRk9q3CIEY1Tc7vIFALp3Xw5NfGJo2hQg5oIqNgxWi1zI+IiDEK3r70BF5Dzol1tcXsnzsRc8NLhG+Q=="], - "alchemy/rolldown/@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.1.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q=="], + "vite/rolldown/@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.2.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-dgR56NYnvAszm7Ob1B2/Vn0e8bUQYZH2UjVaMMtMVOCKFSfjhfLmuA/9+O+F+ajUdG6B/bSssrKW6JJYASa8jA=="], - "alchemy/rolldown/@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.1.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA=="], + "vite/rolldown/@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.2.6", "", { "os": "darwin", "cpu": "x64" }, "sha512-vpVxFvUCFioJqug7OTvqptkc4yb8UX0AwfDmJpaR/0sWz+BUmqSVAf7c8JkUgnN8YLspb4a/N6NhTyMAmdyQ7Q=="], - "alchemy/rolldown/@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.1.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg=="], + "vite/rolldown/@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.2.6", "", { "os": "freebsd", "cpu": "x64" }, "sha512-h1wG6Y6K3JlRswxsI64qQJqBAy4vrLuHgRbc8CZMGSWTOFRY6ghMApM1NKzB2I0n5xV1fjkE18SuVl2QpLeNpA=="], - "alchemy/rolldown/@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.1.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA=="], + "vite/rolldown/@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.2.6", "", { "os": "linux", "cpu": "arm" }, "sha512-tbCiqub0q2MVWJKgF5PoAlNWCtQydiOYSLIkd8sByqK/6MMYLJRcSXSYodqYtd0O+Fw7QaVmKKlS4oL94YRZ0w=="], - "alchemy/rolldown/@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.1.5", "", { "os": "linux", "cpu": "x64" }, "sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ=="], + "vite/rolldown/@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.2.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-oxK9+baEBPhZG5HB4URY+uU04zJWeZlH6Tb9rB5DK4DF9XR1uXNLXt5Q5ZsugTKayNCNLhkcwz/ye74hRI98dg=="], - "alchemy/rolldown/@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.1.5", "", { "os": "linux", "cpu": "x64" }, "sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg=="], + "vite/rolldown/@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.2.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-muWCk27FVBEZtv0MsK8gnfSmgczA8KQ0uRVJbTABKhkRfQc38aUrcb7fhi3BNiyseFmgcRsoMfQsSNJ+DbZdSw=="], - "alchemy/rolldown/@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.1.5", "", { "os": "none", "cpu": "arm64" }, "sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw=="], + "vite/rolldown/@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.2.6", "", { "os": "linux", "cpu": "ppc64" }, "sha512-eWDoSfU7Co2qj3vgB3Dt4lj1mG6CoWbcJQkRMP3XJplyCMtuaq3LHvPFjS9QIPvMGWVadJC04Xiy0IdcVPtnwQ=="], - "alchemy/rolldown/@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.1.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw=="], + "vite/rolldown/@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.2.6", "", { "os": "linux", "cpu": "s390x" }, "sha512-2bWNjRSIayvupRKxXUY2tWG9fYdoUlTqWywHRvE8Eq3GvuQ+f2HeIkve697fIt+IQs/PV8yFsdWuhp1aJ1PdnA=="], - "alchemy/rolldown/@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.1.5", "", { "os": "win32", "cpu": "x64" }, "sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA=="], + "vite/rolldown/@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.2.6", "", { "os": "linux", "cpu": "x64" }, "sha512-KekI0gS0wLxe1UBSQSjenBVwou/JkcQPDzBPICGZjxUv9k3RteHDPBQaiOicZUFKRIH2wKEimGwVpnJsbPzu7w=="], - "cliui/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "vite/rolldown/@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.2.6", "", { "os": "linux", "cpu": "x64" }, "sha512-TvtPnfVr+HtyGiDmPK4VWmlNm7QhNNAcK5Q9A7aOXsI8545yCyaoMaicXrFZ72JzeYjaUVk7yT243zT0jzjFKQ=="], - "cliui/string-width/is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="], + "vite/rolldown/@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.2.6", "", { "os": "none", "cpu": "arm64" }, "sha512-iOo0VEay2XFhaCcH0sps5XIimkSuOnNaZrf6+ZkoSOQBJPKNU48RkmJv0/lSpipexu5P+ouFgafe5IGr/DiQfg=="], - "cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + "vite/rolldown/@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.2.6", "", { "os": "win32", "cpu": "arm64" }, "sha512-y5NTmmasMS455JlOCO4ZM9krIchv3Mvm1crL1iUPGOPgEzSkves9n0SdC5Sjz6+qWDFhd8/JpfWMH8NSWNHe+A=="], - "cliui/wrap-ansi/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + "vite/rolldown/@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.2.6", "", { "os": "win32", "cpu": "x64" }, "sha512-np8iZSLfXlAD4kWhiyq/u0Yt8oZDtRQ8lGhQaCXo2rl37KNjeU0GjJuwr4P3oeZ++ROfofsKNBqR5LTO8aXyWQ=="], "yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], @@ -1910,6 +1481,5 @@ "yargs/string-width/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="], "yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], ->>>>>>> @{-1} } } diff --git a/bun.nix b/bun.nix index e99ad3e..06c0036 100644 --- a/bun.nix +++ b/bun.nix @@ -12,6 +12,10 @@ fetchurl, ... }: { + "@agent-demo/cli" = copyPathToStore ./apps/cli; + "@agent-demo/harnessd" = copyPathToStore ./apps/harnessd; + "@agent-demo/native" = copyPathToStore ./apps/native; + "@agent-demo/web" = copyPathToStore ./apps/web; "@alcalzone/ansi-tokenize@0.2.5" = fetchurl { url = "https://registry.npmjs.org/@alcalzone/ansi-tokenize/-/ansi-tokenize-0.2.5.tgz"; hash = "sha512-3NX/MpTdroi0aKz134A6RC2Gb2iXVECN4QaAXnvCIxxIm3C3AVB1mkUe8NaaiyvOpDfsrqWhYtj+Q6a62RrTsw=="; @@ -28,69 +32,69 @@ url = "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz"; hash = "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ=="; }; - "@aws-sdk/core@3.977.8" = fetchurl { - url = "https://registry.npmjs.org/@aws-sdk/core/-/core-3.977.8.tgz"; - hash = "sha512-7+Kcrkvrk9lM/m7jRhHpT4jCdvzGHsuaSRbF8TdzzkY1mRzp/Ogwf9c7H29k4gGhey0BBWhCWr16+t0J61gwmg=="; + "@aws-sdk/core@3.977.9" = fetchurl { + url = "https://registry.npmjs.org/@aws-sdk/core/-/core-3.977.9.tgz"; + hash = "sha512-reqPFEQrZxDZpeGj4PFMepBeR5LGYHRqq/L0motTzgFkCRBA4rFdaVXDSLYyGHhxVz7sT2PDnPN9CluGSfgyJA=="; }; - "@aws-sdk/credential-provider-cognito-identity@3.972.68" = fetchurl { - url = "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.972.68.tgz"; - hash = "sha512-Fo2RC5hZmEVhnVLMzNjYL6Iu78F4wDuaNtkgzRVU4DlUaFhcXxsnxWBOTH2drxZ59OHSipQ1LndfkCWPxGBJHA=="; + "@aws-sdk/credential-provider-cognito-identity@3.972.69" = fetchurl { + url = "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.972.69.tgz"; + hash = "sha512-vpsh9VWmQVC/nsdzf72F2yUMBOFT1aq+hoLseYV03zjVXVHkjqSNJskFRKPFxc3MRFrHNbSSmOwsbYE15u9ecw=="; }; - "@aws-sdk/credential-provider-env@3.972.69" = fetchurl { - url = "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.69.tgz"; - hash = "sha512-AreCFzcB4kH2HF9031Ot0jSJr3KXvRg6e8uDeub20JEVdZU3Bv0sTq1plc7VsT3KiqutlzH7l0j50UcCWHUioA=="; + "@aws-sdk/credential-provider-env@3.972.70" = fetchurl { + url = "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.70.tgz"; + hash = "sha512-H404B7dJl2mCrBqahDEYsanB0xhdDp6tXnXcTUnXmmpy2Q3J0Ho0bUajZ2jr/RdwzCyS59Gi8xXIFwPLGBl6Uw=="; }; - "@aws-sdk/credential-provider-http@3.972.71" = fetchurl { - url = "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.71.tgz"; - hash = "sha512-A8ObcqVmDMnk4F9NozZ7JwmUu9Q4xyBJkmyq1C5U+wNM9ht9J7+EuuyabsLWXZnOoTqFaJuYBYTKf5CTipkEjA=="; + "@aws-sdk/credential-provider-http@3.972.72" = fetchurl { + url = "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.72.tgz"; + hash = "sha512-X98zYOrVOeuosCX+6ktf29FC2N2GHPLia7qv6mzPzTc+RPAuHWCDS++Z6JK7eGYqb/v6uaW7bAXaOvDBfol+0w=="; }; - "@aws-sdk/credential-provider-ini@3.973.14" = fetchurl { - url = "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.973.14.tgz"; - hash = "sha512-7c+Wti2LsERNWMfm7ySz3/6RPopFW3Nmn7s63Xpcq6R/tRuY5hpvkHA2xVgi5ukJbvok9l0IDtVEvqTtg+X7dw=="; + "@aws-sdk/credential-provider-ini@3.973.15" = fetchurl { + url = "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.973.15.tgz"; + hash = "sha512-Rykg6s5ceBuynMOGWgoowO4N+27JfnqXAnVaSunZl0hOO1XodSrxGNz6sCEbnmS0lAfQZDKyb3fbr46gSuv6Sg=="; }; - "@aws-sdk/credential-provider-login@3.972.76" = fetchurl { - url = "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.76.tgz"; - hash = "sha512-LVixwOnEJfrrfKHeZjBA8pIMTZjNDq8ak8VpcoWUuCJDrSnBNU8POJksULMgvN089P0MXtQYH2Zs627/MK1K0g=="; + "@aws-sdk/credential-provider-login@3.972.77" = fetchurl { + url = "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.77.tgz"; + hash = "sha512-Jb59xfEISoN5mmbnA+HYqdtrSX3CgCtJoof+V5D8/TgUI56W63GEEd5Y58WijU3Ou6+WEgaLD1feVzaRXV5IDQ=="; }; - "@aws-sdk/credential-provider-node@3.972.80" = fetchurl { - url = "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.80.tgz"; - hash = "sha512-bE2qh8ww4iClO1jHsBXdOE8FUgzDbdxbyorNjSCoPSkQd51k3jODItuPZfuwcLHZqDXsH+bI4AMHhqtuyR7mSg=="; + "@aws-sdk/credential-provider-node@3.972.81" = fetchurl { + url = "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.81.tgz"; + hash = "sha512-Rml+WitoFvXmv6JZ18U/xGdGDGGvB/mOin0ya0lTnTrdC0Z1lrVxTYh7iNklZBcvcRMrs4DoEf6xy1KWyrLQQw=="; }; - "@aws-sdk/credential-provider-process@3.972.69" = fetchurl { - url = "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.69.tgz"; - hash = "sha512-9kpTNdZTrcqXTfhxM7fgl9Z68ek3Fu5oe3Yf+A/pJGibEqpgZxz2tSY7SinmyCIU2PJ+ygY4FPoBBnLpocMtrQ=="; + "@aws-sdk/credential-provider-process@3.972.70" = fetchurl { + url = "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.70.tgz"; + hash = "sha512-2ry03fGRJr4sV3jI+ocjj5JqALnFD6ymM5KiNCDZMvq8bX2GSbE0vji4aM43TVCl2nXqqLRZaUxdq/KeWRAY4Q=="; }; - "@aws-sdk/credential-provider-sso@3.973.13" = fetchurl { - url = "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.973.13.tgz"; - hash = "sha512-Oc81qauMPzUoTnAS2YKpNwY6sY/LUyQTEeaf6yP197WMxkEBQfcKLR1MFpD7+pNTubXnfkH6gwpji+Gc7iyD2Q=="; + "@aws-sdk/credential-provider-sso@3.973.14" = fetchurl { + url = "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.973.14.tgz"; + hash = "sha512-jkhg/8ocAAoc0RFyLMhCw+/zZh7gystQgd4F4hznNa8P4Cc501PQmxd+jGLiMHodPJ+7Zv/3znM62gZojyasmA=="; }; - "@aws-sdk/credential-provider-web-identity@3.972.75" = fetchurl { - url = "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.75.tgz"; - hash = "sha512-YPN6uoGDgjjjeVFZrcOeCJqmB6zpXoeeNgIjqe+DexJaWqdjVfCCe+VAZwli9Z2h8KhFW8oxkO39emQ1tyz/Mw=="; + "@aws-sdk/credential-provider-web-identity@3.972.76" = fetchurl { + url = "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.76.tgz"; + hash = "sha512-d3AGyVu759PGr35mEB2s22xxlNEA5rpdxtSPJthfPFJvoQ8dt357iVPECqWfUxXp1toJAvKmbtcIYVGigaGsCA=="; }; - "@aws-sdk/credential-providers@3.1115.0" = fetchurl { - url = "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.1115.0.tgz"; - hash = "sha512-hIhHMt0lqgOr42FfUPh+sNviapX8AfpNEJRoyBq/iMh4deq3BqE2KMpvhLAsLvTHQb4+5yJ1EalRO6yFl0wwPQ=="; + "@aws-sdk/credential-providers@3.1121.0" = fetchurl { + url = "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.1121.0.tgz"; + hash = "sha512-lWdkLauoXNDH/lwYWFpYnFhtYqt0lLrQAyuyxak31PiKD5UQ4YT2z3rQckzEfIGyP1VBGvC+n6Ziqm3y3HKmmQ=="; }; - "@aws-sdk/nested-clients@3.997.43" = fetchurl { - url = "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.43.tgz"; - hash = "sha512-bit+VpqWNyi3wHxFoTsTliNXimCSL2r2OeDTm7ZrG+YsTZ2D7ofDJ6r/t9PVBn80i6/v0X2h9Tgw6QP2MAKfPw=="; + "@aws-sdk/nested-clients@3.997.44" = fetchurl { + url = "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.44.tgz"; + hash = "sha512-NhEgryjlBF9w38ZXqGymQV28IhkYa1mKhlbYnqIis57AYwWGVYfUPgg/qC2rLRqOUfblxx++irvju10kVTa8Vw=="; }; - "@aws-sdk/signature-v4-multi-region@3.996.45" = fetchurl { - url = "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.45.tgz"; - hash = "sha512-bBuyztukzXq6plzFGHAWiQt0QXo+HL8b8lX5cFTzkez/74PtS1c0qPFCIVuHkyoT+miH2qOjAcm1/yoro2ESPA=="; + "@aws-sdk/signature-v4-multi-region@3.996.46" = fetchurl { + url = "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.46.tgz"; + hash = "sha512-L+2xZTye/2T96f3lwCws0Zw6GG2JHZW9e8FpVgGBeeExSKyeoZ6CWRpBml/7DNiK/O26jrgPM9F+Ay8VkgzUWQ=="; }; - "@aws-sdk/token-providers@3.1111.0" = fetchurl { - url = "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1111.0.tgz"; - hash = "sha512-JfljgoVtl+s3Qy21n9a7Z48uCQaOXcN74KJ3TEQfPoB293GrXFSt6HSQJF1sTZ8c/5QedEvd3NjJQMO4u9qa5A=="; + "@aws-sdk/token-providers@3.1116.0" = fetchurl { + url = "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1116.0.tgz"; + hash = "sha512-ygIivKqh8aHzNkucOCXHyIBgBpLPfrSI0mCqXF+vLBsPTUKqj0VSqAY0GFPe7lQl4HntjOcQ+KSyS7oUV2C54Q=="; }; - "@aws-sdk/types@3.974.4" = fetchurl { - url = "https://registry.npmjs.org/@aws-sdk/types/-/types-3.974.4.tgz"; - hash = "sha512-dSFDNG00MEz0/xl5gxL62giLd1iYyJsTxZ1I1DOj6lC+bbgLB4TRsYClJg3b62dhXT1uATzsTNXPnC+33EJV3A=="; + "@aws-sdk/types@3.974.5" = fetchurl { + url = "https://registry.npmjs.org/@aws-sdk/types/-/types-3.974.5.tgz"; + hash = "sha512-LkwLL2BLbC6wNNm4JaH9mbEqBMdOZCct6VAYqhdN4U1xrWM+fUJQEfbHwQgDypapOWTRtlk25akb5afM0P8CIQ=="; }; - "@aws-sdk/xml-builder@3.972.39" = fetchurl { - url = "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.39.tgz"; - hash = "sha512-FTti8DS5MMWXNUWiRwXAJeYS+0GHHiMy0+7XOhcwk63ILHmfS2UFy2z/HNpZCSOJJ3P3dnWY6hfYNW3DF0nXUA=="; + "@aws-sdk/xml-builder@3.972.40" = fetchurl { + url = "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.40.tgz"; + hash = "sha512-wlFmCIGUlwF4zx/kncw+bmxTQh1HeSJq4mYV/V5cZUSJadDP3kXvGW8Rn21cimj/7y9ju+47oYWXi97vF7czaA=="; }; "@aws/lambda-invoke-store@0.3.0" = fetchurl { url = "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.3.0.tgz"; @@ -144,9 +148,9 @@ url = "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20260704.1.tgz"; hash = "sha512-a97Ecnzhy04x3U052VKPCNp863F7Wf00WY7Ga5P0SbtYvaO1PDzylsHrvFMPKeiDFcOwqiredawmJ+v6bhIgeQ=="; }; - "@cloudflare/workers-types@5.20260821.1" = fetchurl { - url = "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-5.20260821.1.tgz"; - hash = "sha512-jZiTISghTPeytJ7eDt5K1AV7df998xGECMgT8oy838VfFLJLROvdLzDaJb0/Jv4WfxO00keNoWt1d6olL7URRg=="; + "@cloudflare/workers-types@5.20260829.1" = fetchurl { + url = "https://registry.npmjs.org/@cloudflare/workers-types/-/workers-types-5.20260829.1.tgz"; + hash = "sha512-SsH4G9+JePvrBmz+b5Dl67LQ9w2/ycoIpAPcAkfg2aEs2SEisQHk7/AY0TymSXEBbDbWgcBqoLe4hNcuY3CxWA=="; }; "@distilled.cloud/aws@1.0.0-rc.2" = fetchurl { url = "https://registry.npmjs.org/@distilled.cloud/aws/-/aws-1.0.0-rc.2.tgz"; @@ -380,9 +384,9 @@ url = "https://registry.npmjs.org/@ioredis/commands/-/commands-1.10.0.tgz"; hash = "sha512-UmeW7z4LfctwoQ5wkhVzgq8tXkreED2xZGpX+Bg+zA+WJFZCT6c062AfCK/Dfk81xZnnwdhJCUMkitihRaoC2Q=="; }; - "@jridgewell/sourcemap-codec@1.5.5" = fetchurl { - url = "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz"; - hash = "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="; + "@jridgewell/sourcemap-codec@1.6.0" = fetchurl { + url = "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz"; + hash = "sha512-T7jf+5zgsZHwNJ4lvQ7/aezbyk0nNX+zJVWpmHA7VYsEx7a7qr5Rg5IbtJFqkgze5Y2sruq1RUY8Q837Od7iFw=="; }; "@libsql/client@0.17.4" = fetchurl { url = "https://registry.npmjs.org/@libsql/client/-/client-0.17.4.tgz"; @@ -544,9 +548,9 @@ url = "https://registry.npmjs.org/@octokit/request-error/-/request-error-7.1.1.tgz"; hash = "sha512-+eaY7G2VVpSf2pc5Gn1+mph837V/d/TYTJAgWL9Tb0ogGYcpN3IlAVFgjL+Vv93F/sevrxkvsYCedtpLdcFLzA=="; }; - "@octokit/request@10.0.14" = fetchurl { - url = "https://registry.npmjs.org/@octokit/request/-/request-10.0.14.tgz"; - hash = "sha512-bgWgiSfFS689/AxQDarU+b3Qu1FYewfVr5vI/jhV84s7GQ3C2OsdRxukGGYKB37MCgwcS50UrfBLlHzhiG13sw=="; + "@octokit/request@10.0.15" = fetchurl { + url = "https://registry.npmjs.org/@octokit/request/-/request-10.0.15.tgz"; + hash = "sha512-3CBg9aJ0hO9Pjyij8LbK/xYtEaPws9SW7xKz67daPNxQB1q5Y9OMA7DDOG0A6Hwf9ygGu3tvzusg0LXQ8/wAjA=="; }; "@octokit/rest@22.0.1" = fetchurl { url = "https://registry.npmjs.org/@octokit/rest/-/rest-22.0.1.tgz"; @@ -568,14 +572,13 @@ url = "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-14.2.0.tgz"; hash = "sha512-da6KbdNCV5sr1/txD896V+6W0iamFWrvVl8cHkBSPT+YlvmT3DwXa4jxZnQc+gnuTEqSWbBeoSZYTayXH9wXcw=="; }; - "@ops-demo/web" = copyPathToStore ./apps/web; "@oxc-project/types@0.139.0" = fetchurl { url = "https://registry.npmjs.org/@oxc-project/types/-/types-0.139.0.tgz"; hash = "sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw=="; }; - "@oxc-project/types@0.144.0" = fetchurl { - url = "https://registry.npmjs.org/@oxc-project/types/-/types-0.144.0.tgz"; - hash = "sha512-nuhZIOLuI6TFQ32I/WnUx+SCPY7SdSKwgnFHydAuoS1+Z4BRcaP+RRJmGzl9lw+0OFF7UmaESf7KQRXaNLHypg=="; + "@oxc-project/types@0.147.0" = fetchurl { + url = "https://registry.npmjs.org/@oxc-project/types/-/types-0.147.0.tgz"; + hash = "sha512-IJ3s6ltHLp45S0bh7phkX+gJO7A1Wuz2EaqpAhb8WjqDwbzMiWKHhyyT42tskaWjEYXtHtVCPpnBJVT9+dcRLg=="; }; "@oxfmt/binding-android-arm-eabi@0.62.0" = fetchurl { url = "https://registry.npmjs.org/@oxfmt/binding-android-arm-eabi/-/binding-android-arm-eabi-0.62.0.tgz"; @@ -773,103 +776,113 @@ url = "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.13.2.tgz"; hash = "sha512-5EUZSUIc37H6aIXyWO0Z4y8NlF8NnjgmqeQgOGiswAU7pY0HOo16ho4+alIWmSfdZnjqBRawMsP3I5YqLSn6kw=="; }; + "@repo/agent-core" = copyPathToStore ./packages/agent-core; + "@repo/agent-demo" = copyPathToStore ./packages/agent-demo; + "@repo/agent-runtime" = copyPathToStore ./packages/agent-runtime; + "@repo/agent-testkit" = copyPathToStore ./packages/agent-testkit; + "@repo/infra" = copyPathToStore ./packages/infra; + "@repo/sandbox-client" = copyPathToStore ./packages/sandbox-client; "@repo/tooling" = copyPathToStore ./packages/tooling; "@repo/web-core" = copyPathToStore ./packages/web-core; + "@rolldown/binding-android-arm-eabi@1.2.6" = fetchurl { + url = "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.6.tgz"; + hash = "sha512-b+jTcARdTiFLI6jB4a5XjTm0RWd6KcRfQj/I2356fxUZemiho9zQLxo0RtCuMDAyKcLo6cEltkgbQp6d1+sjjQ=="; + }; "@rolldown/binding-android-arm64@1.1.5" = fetchurl { url = "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.5.tgz"; hash = "sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ=="; }; - "@rolldown/binding-android-arm64@1.2.4" = fetchurl { - url = "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.4.tgz"; - hash = "sha512-jHC2cnyKz5xU2fhECtFl8OZ83cYNt13GZQD+0uMJ/X3o+ijmd56okHhTUwxVSHPx1IRVIJEZ1/1pPzeLCU6XKA=="; + "@rolldown/binding-android-arm64@1.2.6" = fetchurl { + url = "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.6.tgz"; + hash = "sha512-lkWU8ZJaRk9q3CIEY1Tc7vIFALp3Xw5NfGJo2hQg5oIqNgxWi1zI+IiDEK3r70BF5Dzol1tcXsnzsRc8NLhG+Q=="; }; "@rolldown/binding-darwin-arm64@1.1.5" = fetchurl { url = "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.5.tgz"; hash = "sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw=="; }; - "@rolldown/binding-darwin-arm64@1.2.4" = fetchurl { - url = "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.4.tgz"; - hash = "sha512-Dc5mPD8F5F/FS8i01syd7FTF6yB2fVthH/TRkjwJkzUK6EpoxHtqvZQP5Zwq80/5z19TWYHIg1KOHboCgVx/aQ=="; + "@rolldown/binding-darwin-arm64@1.2.6" = fetchurl { + url = "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.6.tgz"; + hash = "sha512-dgR56NYnvAszm7Ob1B2/Vn0e8bUQYZH2UjVaMMtMVOCKFSfjhfLmuA/9+O+F+ajUdG6B/bSssrKW6JJYASa8jA=="; }; "@rolldown/binding-darwin-x64@1.1.5" = fetchurl { url = "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.5.tgz"; hash = "sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g=="; }; - "@rolldown/binding-darwin-x64@1.2.4" = fetchurl { - url = "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.4.tgz"; - hash = "sha512-fpDm4oBo6SqLvWUYCmFhdde3U9KH2fRNNMeAnAPAIwxRL345xutL0EtEUcuoxsoazdJGv/MuDBQHlCDrtbvqOg=="; + "@rolldown/binding-darwin-x64@1.2.6" = fetchurl { + url = "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.6.tgz"; + hash = "sha512-vpVxFvUCFioJqug7OTvqptkc4yb8UX0AwfDmJpaR/0sWz+BUmqSVAf7c8JkUgnN8YLspb4a/N6NhTyMAmdyQ7Q=="; }; "@rolldown/binding-freebsd-x64@1.1.5" = fetchurl { url = "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.5.tgz"; hash = "sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA=="; }; - "@rolldown/binding-freebsd-x64@1.2.4" = fetchurl { - url = "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.4.tgz"; - hash = "sha512-rSJoreDE/HoIzoaib6MTp5jQtCTdMHKIvItAKT/ImS6Y6Ww76oUaeMyp4Vc/fAgd/ehji068IxetHXAnqUwN9A=="; + "@rolldown/binding-freebsd-x64@1.2.6" = fetchurl { + url = "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.6.tgz"; + hash = "sha512-h1wG6Y6K3JlRswxsI64qQJqBAy4vrLuHgRbc8CZMGSWTOFRY6ghMApM1NKzB2I0n5xV1fjkE18SuVl2QpLeNpA=="; }; "@rolldown/binding-linux-arm-gnueabihf@1.1.5" = fetchurl { url = "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.5.tgz"; hash = "sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw=="; }; - "@rolldown/binding-linux-arm-gnueabihf@1.2.4" = fetchurl { - url = "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.4.tgz"; - hash = "sha512-/jm8OGHgn7oGaJu3i/qZI9spUGcJ+y/lk43ttQ/iO1tOd9NissG6o97bighBCiL+BKRngmcDuR6ikfwYdJmVuQ=="; + "@rolldown/binding-linux-arm-gnueabihf@1.2.6" = fetchurl { + url = "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.6.tgz"; + hash = "sha512-tbCiqub0q2MVWJKgF5PoAlNWCtQydiOYSLIkd8sByqK/6MMYLJRcSXSYodqYtd0O+Fw7QaVmKKlS4oL94YRZ0w=="; }; "@rolldown/binding-linux-arm64-gnu@1.1.5" = fetchurl { url = "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.5.tgz"; hash = "sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q=="; }; - "@rolldown/binding-linux-arm64-gnu@1.2.4" = fetchurl { - url = "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.4.tgz"; - hash = "sha512-tIP06BeD9EqvECBrPZ+sqdPlYrT+aYaAiu1wYziVx5elRK/ftm33JxVDy2bXGbr6J0CrtirCkR87/X5a2euEng=="; + "@rolldown/binding-linux-arm64-gnu@1.2.6" = fetchurl { + url = "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.6.tgz"; + hash = "sha512-oxK9+baEBPhZG5HB4URY+uU04zJWeZlH6Tb9rB5DK4DF9XR1uXNLXt5Q5ZsugTKayNCNLhkcwz/ye74hRI98dg=="; }; "@rolldown/binding-linux-arm64-musl@1.1.5" = fetchurl { url = "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.5.tgz"; hash = "sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA=="; }; - "@rolldown/binding-linux-arm64-musl@1.2.4" = fetchurl { - url = "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.4.tgz"; - hash = "sha512-Ql1Q0EQqVThvn9VAVlwNzsUvbSFtCMGjLpRRi4pk5i7NZZ4n5ISiLMjHYtus4VQ2PvkSw24zyaCVsiS+sXPj1w=="; + "@rolldown/binding-linux-arm64-musl@1.2.6" = fetchurl { + url = "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.6.tgz"; + hash = "sha512-muWCk27FVBEZtv0MsK8gnfSmgczA8KQ0uRVJbTABKhkRfQc38aUrcb7fhi3BNiyseFmgcRsoMfQsSNJ+DbZdSw=="; }; "@rolldown/binding-linux-ppc64-gnu@1.1.5" = fetchurl { url = "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.5.tgz"; hash = "sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg=="; }; - "@rolldown/binding-linux-ppc64-gnu@1.2.4" = fetchurl { - url = "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.4.tgz"; - hash = "sha512-GjbjXD4XXfN19D0LZNbmiCBUoDiRACsYHr0yaIbbn8aFsXjHZifcYqu/W5Er5X2X990WjHXFrxarn5chzItorQ=="; + "@rolldown/binding-linux-ppc64-gnu@1.2.6" = fetchurl { + url = "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.6.tgz"; + hash = "sha512-eWDoSfU7Co2qj3vgB3Dt4lj1mG6CoWbcJQkRMP3XJplyCMtuaq3LHvPFjS9QIPvMGWVadJC04Xiy0IdcVPtnwQ=="; }; "@rolldown/binding-linux-s390x-gnu@1.1.5" = fetchurl { url = "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.5.tgz"; hash = "sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA=="; }; - "@rolldown/binding-linux-s390x-gnu@1.2.4" = fetchurl { - url = "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.4.tgz"; - hash = "sha512-p5WR0NOwaRmJ/B1b6IjEFLLivwEsf3PrdBIhRbhTCQisbo2SvHHpG4ELB/+FgQNnB88LTOF86upmJmbvZdQ2lw=="; + "@rolldown/binding-linux-s390x-gnu@1.2.6" = fetchurl { + url = "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.6.tgz"; + hash = "sha512-2bWNjRSIayvupRKxXUY2tWG9fYdoUlTqWywHRvE8Eq3GvuQ+f2HeIkve697fIt+IQs/PV8yFsdWuhp1aJ1PdnA=="; }; "@rolldown/binding-linux-x64-gnu@1.1.5" = fetchurl { url = "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.5.tgz"; hash = "sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ=="; }; - "@rolldown/binding-linux-x64-gnu@1.2.4" = fetchurl { - url = "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.4.tgz"; - hash = "sha512-4/GyVjmhR+Tc6HLJvwc1sOhPqAZtySiSMesOZyX6JQ5XBxoTDEMKQzvo07NIK6nTon/SivlZqvhzvuVBNQhObQ=="; + "@rolldown/binding-linux-x64-gnu@1.2.6" = fetchurl { + url = "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.6.tgz"; + hash = "sha512-KekI0gS0wLxe1UBSQSjenBVwou/JkcQPDzBPICGZjxUv9k3RteHDPBQaiOicZUFKRIH2wKEimGwVpnJsbPzu7w=="; }; "@rolldown/binding-linux-x64-musl@1.1.5" = fetchurl { url = "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.5.tgz"; hash = "sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg=="; }; - "@rolldown/binding-linux-x64-musl@1.2.4" = fetchurl { - url = "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.4.tgz"; - hash = "sha512-l9eeLsCNvPpmSXUej0etw/J1eqV0Jj1D5G/xG6YTijmE6dkv6E2QezgWbTfQk63v952DPqrjOCoiqxq7Bw0YUQ=="; + "@rolldown/binding-linux-x64-musl@1.2.6" = fetchurl { + url = "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.6.tgz"; + hash = "sha512-TvtPnfVr+HtyGiDmPK4VWmlNm7QhNNAcK5Q9A7aOXsI8545yCyaoMaicXrFZ72JzeYjaUVk7yT243zT0jzjFKQ=="; }; "@rolldown/binding-openharmony-arm64@1.1.5" = fetchurl { url = "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.5.tgz"; hash = "sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw=="; }; - "@rolldown/binding-openharmony-arm64@1.2.4" = fetchurl { - url = "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.4.tgz"; - hash = "sha512-e0F355MSTMm3+UOqtV3L24gFUp2N5m1f8L/7d56deik6va+AXdrt9F8LbzGpeWGWRbZEDq4m8NVnJDeBtf9DZg=="; + "@rolldown/binding-openharmony-arm64@1.2.6" = fetchurl { + url = "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.6.tgz"; + hash = "sha512-iOo0VEay2XFhaCcH0sps5XIimkSuOnNaZrf6+ZkoSOQBJPKNU48RkmJv0/lSpipexu5P+ouFgafe5IGr/DiQfg=="; }; "@rolldown/binding-wasm32-wasi@1.1.5" = fetchurl { url = "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.5.tgz"; @@ -879,17 +892,17 @@ url = "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.5.tgz"; hash = "sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw=="; }; - "@rolldown/binding-win32-arm64-msvc@1.2.4" = fetchurl { - url = "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.4.tgz"; - hash = "sha512-AWLi0uBRYh6QlE7OKhiz+phZC0qwtij2QZmhmOdsLdFn64m7oMpooE9ICE3lhm9xMb4SpDo2WbHcxX1iFLFtqw=="; + "@rolldown/binding-win32-arm64-msvc@1.2.6" = fetchurl { + url = "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.6.tgz"; + hash = "sha512-y5NTmmasMS455JlOCO4ZM9krIchv3Mvm1crL1iUPGOPgEzSkves9n0SdC5Sjz6+qWDFhd8/JpfWMH8NSWNHe+A=="; }; "@rolldown/binding-win32-x64-msvc@1.1.5" = fetchurl { url = "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.5.tgz"; hash = "sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA=="; }; - "@rolldown/binding-win32-x64-msvc@1.2.4" = fetchurl { - url = "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.4.tgz"; - hash = "sha512-UwSDJOg3dqCAejWdxclJjCsh3Qq4vLYMDxmyHqo1btz3stK2VqgwNd3mm5tuIwzSlGIQ/1H9Hr+Zn09mrezNqQ=="; + "@rolldown/binding-win32-x64-msvc@1.2.6" = fetchurl { + url = "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.6.tgz"; + hash = "sha512-np8iZSLfXlAD4kWhiyq/u0Yt8oZDtRQ8lGhQaCXo2rl37KNjeU0GjJuwr4P3oeZ++ROfofsKNBqR5LTO8aXyWQ=="; }; "@rolldown/pluginutils@1.0.1" = fetchurl { url = "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz"; @@ -951,6 +964,114 @@ url = "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz"; hash = "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w=="; }; + "@swc/core-darwin-arm64@1.16.2" = fetchurl { + url = "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.16.2.tgz"; + hash = "sha512-i/j0HNbnn79qnTVPicvay92Nark8fW8NQqn1e2mGERjUXNpBV0+SwQxlRpk2zBhn6laJ8PDI6Kn1nHZhnz3LCA=="; + }; + "@swc/core-darwin-x64@1.16.2" = fetchurl { + url = "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.16.2.tgz"; + hash = "sha512-HrwqHyEyHVXO3qTk8EkNK7/b6sOZSEoNh+pot6RdE5x0LbNqfo8LtJUvi3UTXr+5ja/o5HbJdW80eCXo+NjbiA=="; + }; + "@swc/core-linux-arm-gnueabihf@1.16.2" = fetchurl { + url = "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.16.2.tgz"; + hash = "sha512-MdXi83Z/gGp1LIrg+h7HKxiul/z/Bty/ZJSvYAFqDl9zteC1XLSAZdScquKtXPp50rdyXqritTDCqQBhwVfZKA=="; + }; + "@swc/core-linux-arm64-gnu@1.16.2" = fetchurl { + url = "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.16.2.tgz"; + hash = "sha512-/jcTmK6Ktz3owM3YtiKvjofV6p3VpHnYzTIrOGwDIOsDigRAAVuZ8east33wYO/7UTdKYFlyHNnJNT0WJqOA3Q=="; + }; + "@swc/core-linux-arm64-musl@1.16.2" = fetchurl { + url = "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.16.2.tgz"; + hash = "sha512-4gFarKaFnlJTSlJYKmMhV4u+3YE4uYfiydpBoYjmgQhCf9lAieOq+WilZaK9vVSHeqLuQpTEiGULZqAdsRX5Dw=="; + }; + "@swc/core-linux-ppc64-gnu@1.16.2" = fetchurl { + url = "https://registry.npmjs.org/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.16.2.tgz"; + hash = "sha512-syqSLGd6KlZ1PciNzs6bIUlhOuFztZufebOHaERjc4N4SqNZxyqYd4I+jj/EfOYnpe0kNjccn9HJLN1p5dz3+w=="; + }; + "@swc/core-linux-s390x-gnu@1.16.2" = fetchurl { + url = "https://registry.npmjs.org/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.16.2.tgz"; + hash = "sha512-ZBBLK+ewGyXLzWeMS7wbKtWBdnif6etn7xvPY/iOfbdsjX/+bgkp1pQt2lWF2wlu2hXYZuhJ/tHZE/QR8/apzg=="; + }; + "@swc/core-linux-x64-gnu@1.16.2" = fetchurl { + url = "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.16.2.tgz"; + hash = "sha512-LyHJgxCA4Tje0ysBMbEb0tt/ie8kgUKoFE3JAKFhpevmTmhYEoC0H9s47WuDsqiFckF1ITUguZIXJG6K5e0dvg=="; + }; + "@swc/core-linux-x64-musl@1.16.2" = fetchurl { + url = "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.16.2.tgz"; + hash = "sha512-PghXJlVM1cgtLfNUR1vxFo1z+PDRAe8cWAJlZZ7spmeiN7BospGXg/MHUg7oNSgwSX7Zo//YKv9P5yD9apsFJQ=="; + }; + "@swc/core-win32-arm64-msvc@1.16.2" = fetchurl { + url = "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.16.2.tgz"; + hash = "sha512-StTOSefYBxemvNYYUI3UmO1a8y+hSPjjfHogC2TEHL+Z1PlEBim/XtLas5rS04jAzT9RrNmbtX911SZ42H9jSQ=="; + }; + "@swc/core-win32-ia32-msvc@1.16.2" = fetchurl { + url = "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.16.2.tgz"; + hash = "sha512-fycER209DYIzsibpTMC+chND05OfOjgztWL9U8OE6/uUlsOUZH3eh98isBLEnOymYUhlJLEt5++W1+KL/FOh5Q=="; + }; + "@swc/core-win32-x64-msvc@1.16.2" = fetchurl { + url = "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.16.2.tgz"; + hash = "sha512-cSd1z6ivSrJPVr+moVwOHWjeKy6TpO4/Shwcv5KCrKYXCccxwh4pRy1C3fDioNx2PF1jPZWHKZjtXt+Be9VbaQ=="; + }; + "@swc/core@1.16.2" = fetchurl { + url = "https://registry.npmjs.org/@swc/core/-/core-1.16.2.tgz"; + hash = "sha512-95I4kiSMeveI/Mhi+tE4fiWcWLUMfzfKrk0jtr8LRMqHgOgq+xHS+zExkDqoO4b5OeeuXHMWVdD5MeP3X6sULw=="; + }; + "@swc/counter@0.1.3" = fetchurl { + url = "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz"; + hash = "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="; + }; + "@swc/types@0.1.28" = fetchurl { + url = "https://registry.npmjs.org/@swc/types/-/types-0.1.28.tgz"; + hash = "sha512-V6Mnml8v09QALx6K0elJ7o9K/MkVDtW3t6L+7Ou/JcWtb3xwId2AH4FeOceySd2JaO87IMw4+6vSZxLm34LPbw=="; + }; + "@tauri-apps/cli-darwin-arm64@2.11.4" = fetchurl { + url = "https://registry.npmjs.org/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-2.11.4.tgz"; + hash = "sha512-1ryOF3ZhpZ/nemHV5zVwBQBz9jDGKmKPvWPADOhc83ig0P4bMc2iER4NbC6r9sjeIZ6RVQ4g3RZIYvezhcl4TQ=="; + }; + "@tauri-apps/cli-darwin-x64@2.11.4" = fetchurl { + url = "https://registry.npmjs.org/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-2.11.4.tgz"; + hash = "sha512-uFsGQAAfuyz1k/yGLmkWfkBlgKAqZfxqlHmLWx81QU27RJWfmbNHCIq8T8w1e+VClleIuZUjpHWfoE4E3DLo3A=="; + }; + "@tauri-apps/cli-linux-arm-gnueabihf@2.11.4" = fetchurl { + url = "https://registry.npmjs.org/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-2.11.4.tgz"; + hash = "sha512-IaHZn5CdBL21oUmjiVOS1ctw6Ip1O0pjp70FwOWmYz1myWe0SY96ZIj2FYf7pT0m8bI2h/hrs5ZbEXXh44/MkQ=="; + }; + "@tauri-apps/cli-linux-arm64-gnu@2.11.4" = fetchurl { + url = "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-2.11.4.tgz"; + hash = "sha512-N41/ukTRVe6XSuUTESuFdGeOW2i7k62tK+6gHK5Kd5/q5RPvvi19GaWAVPPb9u95HSGmTChSolBfzynUsssFaA=="; + }; + "@tauri-apps/cli-linux-arm64-musl@2.11.4" = fetchurl { + url = "https://registry.npmjs.org/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.11.4.tgz"; + hash = "sha512-v277UnT/fB64xAfSroL5N3Km3tLmvATWqJJw/wRI+g6o+HkeD0slyE7gOhNs1MbjE41R7bQOTxMVoL3aomUJmw=="; + }; + "@tauri-apps/cli-linux-riscv64-gnu@2.11.4" = fetchurl { + url = "https://registry.npmjs.org/@tauri-apps/cli-linux-riscv64-gnu/-/cli-linux-riscv64-gnu-2.11.4.tgz"; + hash = "sha512-qqgNkQ2u1yZHxjhxsZaxUtRDW8dIqIYm33rx/mzwQv0SfY9x1B+iraj8vWeFiXjjSVVhEMepXSOts1TqPzvXNQ=="; + }; + "@tauri-apps/cli-linux-x64-gnu@2.11.4" = fetchurl { + url = "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-2.11.4.tgz"; + hash = "sha512-2VRNWl84FOH0m2giiDkO2h0QXlcMJeX+zJDpI5kDIQAx6s+geF3v48F4DXfJez4GS/FdoDGnPnw1C2iYGbQ7bQ=="; + }; + "@tauri-apps/cli-linux-x64-musl@2.11.4" = fetchurl { + url = "https://registry.npmjs.org/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-2.11.4.tgz"; + hash = "sha512-o9GyhYor/nc7xarmwDE3ka2szuW3uuZzXjHWh64Q8YX5AtSgxdQkFWzrY4O8KiGtVNvFBI14H3Q49Qj5TOIP/A=="; + }; + "@tauri-apps/cli-win32-arm64-msvc@2.11.4" = fetchurl { + url = "https://registry.npmjs.org/@tauri-apps/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-2.11.4.tgz"; + hash = "sha512-ld5Ehb598m0VkYyylRPNeCFsBe/km0jxis6KgMpl3IGY6I/i1RwQXO05I1AsXUXO2WC6AvB/Lw4qTf/asiuEiQ=="; + }; + "@tauri-apps/cli-win32-ia32-msvc@2.11.4" = fetchurl { + url = "https://registry.npmjs.org/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-2.11.4.tgz"; + hash = "sha512-12Hxi0XX/H5VFxO/bGgHkFWhml9VMgEOu9CidjeCeTNQ1l6fpUlbiGgSP7CLI3PFtW9/FfbeHieZ+kyWK5H7CA=="; + }; + "@tauri-apps/cli-win32-x64-msvc@2.11.4" = fetchurl { + url = "https://registry.npmjs.org/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-2.11.4.tgz"; + hash = "sha512-+vDiqBIU5dMISg/wNvX3sF+ZHfgJGJ5T0AcO+EHNXV9GGAG+P5fzodlDXD3QdKCRgZxMoCm5PPvj3BqLNjBthw=="; + }; + "@tauri-apps/cli@2.11.4" = fetchurl { + url = "https://registry.npmjs.org/@tauri-apps/cli/-/cli-2.11.4.tgz"; + hash = "sha512-R8xGtMpwyetawSqm9kYOuMmEqkhUbvcUy8n0aNXIxollKBLESUu5f4Fx+64hgASYm1H+jSWq6jCW6zqTnH6hqQ=="; + }; "@tootallnate/quickjs-emscripten@0.23.0" = fetchurl { url = "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz"; hash = "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA=="; @@ -963,9 +1084,9 @@ url = "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.162.tgz"; hash = "sha512-Fn658grtLOci1oxi1391vvDWJRKNGWRSqfxRkmN/Iy3c0tQH1USMKEXcPYHLvope+ZgTFocx9FRQJx1muBL6qw=="; }; - "@types/bun@1.3.14" = fetchurl { - url = "https://registry.npmjs.org/@types/bun/-/bun-1.3.14.tgz"; - hash = "sha512-h1hFqFVcvAvD9j9K7ZW7vd82aSA+rTdznZa+5bwvCwqSB1jmmfLcbIWhOLx1/+boy/xmjgCs/OMUL8hRJSmnPw=="; + "@types/bun@1.4.0" = fetchurl { + url = "https://registry.npmjs.org/@types/bun/-/bun-1.4.0.tgz"; + hash = "sha512-K+lZULY23vRgK/CfTjFIV+tyifaNdSMlPh9j+6mQ/cLfpOznLyAuzgV/JQysyECpkBQLVMSyvjlr2fBUSA9wFQ=="; }; "@types/chai@5.2.3" = fetchurl { url = "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz"; @@ -1071,33 +1192,53 @@ url = "https://registry.npmjs.org/@typescript/typescript-win32-x64/-/typescript-win32-x64-7.0.2.tgz"; hash = "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g=="; }; - "@vitest/expect@4.1.10" = fetchurl { - url = "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.10.tgz"; - hash = "sha512-YsCn+qAk1GWjQOWFEsEcL2gNQ0zmVmQu3T03qP6UyjhtmdtwtbuI+DASn/7iQB3HGTXkdBwGddzxPlmiql5vlA=="; + "@vitest/expect@4.1.11" = fetchurl { + url = "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.11.tgz"; + hash = "sha512-VX2x5vNJXET47KAFzwERI+KRMtTTCSWTfSMKsW7JsUsXV4psq++e3DvZpuTDOpHcxytiDs6p2nhVb2tVDiiUYw=="; + }; + "@vitest/mocker@4.1.11" = fetchurl { + url = "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.11.tgz"; + hash = "sha512-2XJVD55d1o5AZous5CCGKS74g/riOj9odEt2bQpCVZeblHyHdnMeFl4jl0XjU21stf4mbjUkew2eXQZt65g5CQ=="; + }; + "@vitest/pretty-format@4.1.11" = fetchurl { + url = "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.11.tgz"; + hash = "sha512-yiZzPbGTS9Sr/JpFl8zHrcIkAofNbFV6k21vIgQN/cY/oxZeXhJv5sc/MBJ5jFKWmWs+oJHw0UXLZjmf931+Vw=="; + }; + "@vitest/runner@4.1.11" = fetchurl { + url = "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.11.tgz"; + hash = "sha512-LztvUgdwMNJMIkj3hQnnxiC2Xy1zNxq928W/xhjCLaNCzqTZOudjwbQf6v9IntZGPw132i2Lq2rgTRZHD3JHNw=="; + }; + "@vitest/snapshot@4.1.11" = fetchurl { + url = "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.11.tgz"; + hash = "sha512-pN7ikn1ON7h8ee4gIAp4AzyK+zBtJPzVbqOgu5LCEh4VaJVbPQcgYQYJIMGQPXVeJJq1fnfazis7a5pFNPahog=="; + }; + "@vitest/spy@4.1.11" = fetchurl { + url = "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.11.tgz"; + hash = "sha512-apNa/prQy2qCeywhnixOHPRCgGNhvg7T4Dapfl1GahLp/R+uhBm5cPyFoNVyqsNd2h1nJxL6BqqdIjiABL60YA=="; }; - "@vitest/mocker@4.1.10" = fetchurl { - url = "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.10.tgz"; - hash = "sha512-v0xaezt+DKEmKfaxg133ldzADrwLGd7Ze1MfQQTYfvs8OqZIwbxyxaYURivwV7sWy5fqn3rH5uOrSp07bp44Ow=="; + "@vitest/utils@4.1.11" = fetchurl { + url = "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.11.tgz"; + hash = "sha512-zTCVGpyFsGWBhllOyKlTw/vnr6D9qxsfSDyfbyZmTyjHw5N/VuvzHpHoQjm2ZJzn4RJgx5w4r7V0er69CmLgPQ=="; }; - "@vitest/pretty-format@4.1.10" = fetchurl { - url = "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.10.tgz"; - hash = "sha512-W1HsjSH4MXQ9YfmmhLAoIYf1HRfekQCGngeIgcei6MP5QQGWUe0gkopdZQaVCFO+JDJMrAJGwa5pRpNpvy4P8Q=="; + "acorn-jsx-walk@2.0.0" = fetchurl { + url = "https://registry.npmjs.org/acorn-jsx-walk/-/acorn-jsx-walk-2.0.0.tgz"; + hash = "sha512-uuo6iJj4D4ygkdzd6jPtcxs8vZgDX9YFIkqczGImoypX2fQ4dVImmu3UzA4ynixCIMTrEOWW+95M2HuBaCEOVA=="; }; - "@vitest/runner@4.1.10" = fetchurl { - url = "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.10.tgz"; - hash = "sha512-IKI6kpIH+LmpROplyLwBBaCfMgOZOMsygVa6BARD6ahA04VRuJSa6OaVG7kRvSEMD870Vd91rSSw0eegtWyLGg=="; + "acorn-jsx@5.3.2" = fetchurl { + url = "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz"; + hash = "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="; }; - "@vitest/snapshot@4.1.10" = fetchurl { - url = "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.10.tgz"; - hash = "sha512-xRkfOT1qpTAi/Ti4Y1LtfRc3kEuqxGw59eN2jN9pRWMtS/XDevekhcFSqvQqjUNGksfjMJu3Y+oJ+4Ypn2OaJw=="; + "acorn-loose@8.5.2" = fetchurl { + url = "https://registry.npmjs.org/acorn-loose/-/acorn-loose-8.5.2.tgz"; + hash = "sha512-PPvV6g8UGMGgjrMu+n/f9E/tCSkNQ2Y97eFvuVdJfG11+xdIeDcLyNdC8SHcrHbRqkfwLASdplyR6B6sKM1U4A=="; }; - "@vitest/spy@4.1.10" = fetchurl { - url = "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.10.tgz"; - hash = "sha512-PLf/Ugvoq5wO/b4rwYCR1h2PSIdXz7wnkQFMiUpLdtM7l6pqVFcQIBEHyT1+l+cj7mNwAfZHzqXqDyjvOuwbDw=="; + "acorn-walk@8.3.5" = fetchurl { + url = "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz"; + hash = "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw=="; }; - "@vitest/utils@4.1.10" = fetchurl { - url = "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.10.tgz"; - hash = "sha512-fy9am/HWxbaGt/Sawrp90vt6Y6jQwf1RX77cz3uwoJwJVMli/e1IEwRPnMNJ7vKfPTwo0diXifkpPvwH9v7nGA=="; + "acorn@8.18.0" = fetchurl { + url = "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz"; + hash = "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ=="; }; "age-encryption@0.2.4" = fetchurl { url = "https://registry.npmjs.org/age-encryption/-/age-encryption-0.2.4.tgz"; @@ -1167,21 +1308,21 @@ url = "https://registry.npmjs.org/b4a/-/b4a-1.8.1.tgz"; hash = "sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw=="; }; - "bare-events@2.9.1" = fetchurl { - url = "https://registry.npmjs.org/bare-events/-/bare-events-2.9.1.tgz"; - hash = "sha512-Z0oHEHAFDZkffN8Qc39zNZjQlMDkPJRyyyZieU1VH7u8c5S+qHZ2S8ixdKIAxEjfHO7FJxXmJWgteOghVanIsg=="; + "bare-events@2.9.2" = fetchurl { + url = "https://registry.npmjs.org/bare-events/-/bare-events-2.9.2.tgz"; + hash = "sha512-AIPKioV7/Y/8KfZ3AAhjPJxLLbY49S64Ym5DakZlUg75qQiTgUq9hEJoEwa4eUezPUlXRy/i5NpsKvo9jgKmoA=="; }; - "bare-fs@4.8.0" = fetchurl { - url = "https://registry.npmjs.org/bare-fs/-/bare-fs-4.8.0.tgz"; - hash = "sha512-fM+MhCvdQhZ7NV6S95a07gPSqjIYKn6mFaXfx266wN3ajZGl/+1AzH+ubkXQ0fFZvOe2nk9VHkzdYkQE5zMV3Q=="; + "bare-fs@4.8.1" = fetchurl { + url = "https://registry.npmjs.org/bare-fs/-/bare-fs-4.8.1.tgz"; + hash = "sha512-N1nnXdHZAOSstz0XiHikGS4HGMH4CnSwhqWdGQQMqqdvp4Jybm9sE3R1WVnpWVd4SFkc8ryPDBLViNLwiEqECg=="; }; "bare-path@3.1.1" = fetchurl { url = "https://registry.npmjs.org/bare-path/-/bare-path-3.1.1.tgz"; hash = "sha512-JprUlveX3QjApC1cTpsUOiscADftCGVWkzitbHsRqv84hzYwYHw2mbluddsq5TvI8mH/8Ov1f4BiMAdcB0oYnQ=="; }; - "bare-stream@2.13.3" = fetchurl { - url = "https://registry.npmjs.org/bare-stream/-/bare-stream-2.13.3.tgz"; - hash = "sha512-Kc+brLqvEqGkjyfiwJmImAOqLZL7OsoLKuavx+hJjgVV3nLTOjloJyPMFxjUPerGGHrNH0fLU06jjykMLWrERQ=="; + "bare-stream@2.13.4" = fetchurl { + url = "https://registry.npmjs.org/bare-stream/-/bare-stream-2.13.4.tgz"; + hash = "sha512-PcrQ8lVLbiJscNm1Kez+Yp4Gy4AHGcN1lzwjvf5NybWen7VvEgUfyfnXYJ2zNqWnzOfCb1Abq6lH8ti0syQszA=="; }; "bare-url@2.5.2" = fetchurl { url = "https://registry.npmjs.org/bare-url/-/bare-url-2.5.2.tgz"; @@ -1211,9 +1352,9 @@ url = "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz"; hash = "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ=="; }; - "bun-types@1.3.14" = fetchurl { - url = "https://registry.npmjs.org/bun-types/-/bun-types-1.3.14.tgz"; - hash = "sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ=="; + "bun-types@1.4.0" = fetchurl { + url = "https://registry.npmjs.org/bun-types/-/bun-types-1.4.0.tgz"; + hash = "sha512-iIKw23BspnQQYd3prITOBxeUsxBHnwzX6YJfGMuNOZzeNcMmVqzIIVGRm1l69ogaPQmb4wB6BN8mA5bE9YuC5Q=="; }; "bun2nix@2.1.2" = fetchurl { url = "https://registry.npmjs.org/bun2nix/-/bun2nix-2.1.2.tgz"; @@ -1227,6 +1368,10 @@ url = "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz"; hash = "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg=="; }; + "chalk@4.1.2" = fetchurl { + url = "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz"; + hash = "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="; + }; "chalk@5.6.2" = fetchurl { url = "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz"; hash = "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="; @@ -1267,9 +1412,13 @@ url = "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"; hash = "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="; }; - "content-type@2.1.0" = fetchurl { - url = "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz"; - hash = "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag=="; + "commander@15.0.0" = fetchurl { + url = "https://registry.npmjs.org/commander/-/commander-15.0.0.tgz"; + hash = "sha512-z67u4ZhzCL/Tydu1lJARtEZYWbWaN7oYLHbsuzocr6y4N6WZAagG3RQ4FW61V1/0+jImpj293XfrcYnd1qxtPg=="; + }; + "content-type@3.0.0" = fetchurl { + url = "https://registry.npmjs.org/content-type/-/content-type-3.0.0.tgz"; + hash = "sha512-AIi5H6p0xk5uknXcN3/rmhP8jgp69OfSe/JuKiQAFprJ7UGw7mwj7m4XcmDzlrnJDG+cGpphAINGdU3g3g7kDw=="; }; "convert-source-map@2.0.0" = fetchurl { url = "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz"; @@ -1307,6 +1456,10 @@ url = "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz"; hash = "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw=="; }; + "dependency-cruiser@18.2.0" = fetchurl { + url = "https://registry.npmjs.org/dependency-cruiser/-/dependency-cruiser-18.2.0.tgz"; + hash = "sha512-xMDoLD0no6pDInR8/4rIIqZ4mERDnsjezk8PkNORYSfBLvjCOogUxaruepmi1uQtZQlYUgdT2u7G3jTlgKqNjw=="; + }; "detect-libc@2.0.2" = fetchurl { url = "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz"; hash = "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw=="; @@ -1339,17 +1492,25 @@ url = "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz"; hash = "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="; }; + "enhanced-resolve@5.24.5" = fetchurl { + url = "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.5.tgz"; + hash = "sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A=="; + }; "environment@1.1.0" = fetchurl { url = "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz"; hash = "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q=="; }; - "es-module-lexer@2.3.1" = fetchurl { - url = "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.1.tgz"; - hash = "sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA=="; + "es-errors@1.3.0" = fetchurl { + url = "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz"; + hash = "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="; + }; + "es-module-lexer@2.3.2" = fetchurl { + url = "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.2.tgz"; + hash = "sha512-poHGpORABojJJucnV9KbOavETW8lBVnphkW77ER5/BQ5Fz7oXSoCNek7IH3vR5nRjdsEz926ibFYX8KtLQmdyw=="; }; - "es-toolkit@1.51.0" = fetchurl { - url = "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.51.0.tgz"; - hash = "sha512-zC2lQGkM7QX+Gm6iM3+WIdZJzthsEd14LvRNJneSO2hzyz/zNBENR8+YXWo1cKxgPBtV6ksPYHELbcwBRzmdCw=="; + "es-toolkit@1.52.0" = fetchurl { + url = "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.52.0.tgz"; + hash = "sha512-XTNEJQh1tY1ZJVcf6ayP/2n4ZPyaHlW2FWs7xvw5ddPuhUVjLD3olQVQS7kf58JbAB48iL0uL/jerTrjtV3lDA=="; }; "escalade@3.2.0" = fetchurl { url = "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz"; @@ -1419,13 +1580,13 @@ url = "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.3.1.tgz"; hash = "sha512-pIM/1n3ntFXKYrUZwW7QCK0gAW7XY+wzj1YMIV3tLDvPj/V+zTGJK5e3/4WJfwj0qWw2ElNXiTixda/R+3YSug=="; }; - "fast-xml-parser@5.11.0" = fetchurl { - url = "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.11.0.tgz"; - hash = "sha512-9IGxMqvqLOnqP+Egi1nqDHKv5k8aZ7r9n558enxcucmyVGEBNPAU+MOg/8jPIS7rO7sSq4gFm1/nHtiaubMruw=="; + "fast-xml-parser@5.11.1" = fetchurl { + url = "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.11.1.tgz"; + hash = "sha512-TBw6K/fxoQGGjCmZDw9w/ZwP3uDcnTM4YH/g+PFRWr8sbe5idXtxNN6vITh4+1ruCZaho6uBFurElsA7F0zzgw=="; }; - "fastq@1.20.1" = fetchurl { - url = "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz"; - hash = "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="; + "fastq@1.20.3" = fetchurl { + url = "https://registry.npmjs.org/fastq/-/fastq-1.20.3.tgz"; + hash = "sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw=="; }; "fd-slicer@1.1.0" = fetchurl { url = "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz"; @@ -1451,6 +1612,10 @@ url = "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz"; hash = "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="; }; + "function-bind@1.1.2" = fetchurl { + url = "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz"; + hash = "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="; + }; "get-caller-file@2.0.5" = fetchurl { url = "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz"; hash = "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="; @@ -1479,6 +1644,10 @@ url = "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"; hash = "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="; }; + "global-directory@4.0.1" = fetchurl { + url = "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz"; + hash = "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q=="; + }; "graceful-fs@4.2.11" = fetchurl { url = "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz"; hash = "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="; @@ -1491,6 +1660,14 @@ url = "https://registry.npmjs.org/graphmatch/-/graphmatch-1.1.1.tgz"; hash = "sha512-5ykVn/EXM1hF0XCaWh05VbYvEiOL2lY1kBxZtaYsyvjp7cmWOU1XsAdfQBwClraEofXDT197lFbXOEVMHpvQOg=="; }; + "has-flag@4.0.0" = fetchurl { + url = "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"; + hash = "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="; + }; + "hasown@2.0.4" = fetchurl { + url = "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz"; + hash = "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="; + }; "hono@4.11.4" = fetchurl { url = "https://registry.npmjs.org/hono/-/hono-4.11.4.tgz"; hash = "sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA=="; @@ -1507,6 +1684,10 @@ url = "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz"; hash = "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw=="; }; + "ignore@7.0.6" = fetchurl { + url = "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz"; + hash = "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw=="; + }; "immediate@3.0.6" = fetchurl { url = "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz"; hash = "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ=="; @@ -1519,6 +1700,10 @@ url = "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"; hash = "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="; }; + "ini@4.1.1" = fetchurl { + url = "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz"; + hash = "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g=="; + }; "ini@7.0.0" = fetchurl { url = "https://registry.npmjs.org/ini/-/ini-7.0.0.tgz"; hash = "sha512-ifK0CgjALofS5bkrcTy4RaQ9Vx2Knf/eLeIO+NaswQEpH1UblrtTSCIvN71qQDMq0PeQ/SSPojvEJp9vvvfr+w=="; @@ -1527,13 +1712,21 @@ url = "https://registry.npmjs.org/ink/-/ink-6.8.0.tgz"; hash = "sha512-sbl1RdLOgkO9isK42WCZlJCFN9hb++sX9dsklOvfd1YQ3bQ2AiFu12Q6tFlr0HvEUvzraJntQCCpfEoUe9DSzA=="; }; + "interpret@3.1.1" = fetchurl { + url = "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz"; + hash = "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ=="; + }; "ioredis@5.11.1" = fetchurl { url = "https://registry.npmjs.org/ioredis/-/ioredis-5.11.1.tgz"; hash = "sha512-ehuGcf94bQXhfagULNXrJdfnWO38v070jxSx/qE87Kjzmu2fU7ro5EFAb+OPituLqgfyuQaym5DlrNydW2sJ9A=="; }; - "ip-address@10.5.0" = fetchurl { - url = "https://registry.npmjs.org/ip-address/-/ip-address-10.5.0.tgz"; - hash = "sha512-R5SnVLJmgYYvf2F2ZgwSBnelz5G4q5AxIC277GDfUaNbrZKNANcBC7RHqYYePlszf4kBolVkJauG0ZjHHFh55g=="; + "ip-address@10.7.0" = fetchurl { + url = "https://registry.npmjs.org/ip-address/-/ip-address-10.7.0.tgz"; + hash = "sha512-BGFsyJd5mpXp3rK6jIdADLNgpJUK1jnjzvYF8lK+VyDab9JAmqN0YOKDdP17HlgKb2+ehPgDc8EtnRLbGCAMhA=="; + }; + "is-core-module@2.16.2" = fetchurl { + url = "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz"; + hash = "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA=="; }; "is-extglob@2.1.1" = fetchurl { url = "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz"; @@ -1555,10 +1748,18 @@ url = "https://registry.npmjs.org/is-in-ci/-/is-in-ci-2.0.0.tgz"; hash = "sha512-cFeerHriAnhrQSbpAxL37W1wcJKUUX07HyLWZCW1URJT/ra3GyUTzBgUnh24TMVfNTV2Hij2HLxkPHFZfOZy5w=="; }; + "is-installed-globally@1.0.0" = fetchurl { + url = "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-1.0.0.tgz"; + hash = "sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ=="; + }; "is-number@7.0.0" = fetchurl { url = "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz"; hash = "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="; }; + "is-path-inside@4.0.0" = fetchurl { + url = "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz"; + hash = "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA=="; + }; "is-unsafe@2.0.2" = fetchurl { url = "https://registry.npmjs.org/is-unsafe/-/is-unsafe-2.0.2.tgz"; hash = "sha512-HgbIHPBH0KHHCcjLfGsCvhtPTVxjaAZlXjwdz7/GQC40SjSe4sfQsar8J5VFo8JOSbarkpV0OLG95bbaNd9aAQ=="; @@ -1583,10 +1784,18 @@ url = "https://registry.npmjs.org/json-with-bigint/-/json-with-bigint-3.5.12.tgz"; hash = "sha512-uwbF/wSSuOgC7qqlq27Xp5B6a2MHVug3t0idZdTqu0JnlFvgJuH7ju+KAk/J06C7GfhoYy2gnb9wz2INqcne7w=="; }; + "json5@2.2.3" = fetchurl { + url = "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz"; + hash = "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="; + }; "jszip@3.10.1" = fetchurl { url = "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz"; hash = "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g=="; }; + "kleur@3.0.3" = fetchurl { + url = "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz"; + hash = "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="; + }; "kubernetes-types@1.30.0" = fetchurl { url = "https://registry.npmjs.org/kubernetes-types/-/kubernetes-types-1.30.0.tgz"; hash = "sha512-Dew1okvhM/SQcIa2rcgujNndZwU8VnSapDgdxlYoB84ZlpAD43U6KLAFqYo17ykSFGHNPrg0qry0bP+GJd9v7Q=="; @@ -1663,6 +1872,10 @@ url = "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"; hash = "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="; }; + "lodash@4.18.1" = fetchurl { + url = "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz"; + hash = "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q=="; + }; "lru-cache@7.18.3" = fetchurl { url = "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz"; hash = "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="; @@ -1687,6 +1900,10 @@ url = "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz"; hash = "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="; }; + "minimist@1.2.8" = fetchurl { + url = "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz"; + hash = "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="; + }; "mri@1.2.0" = fetchurl { url = "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz"; hash = "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="; @@ -1699,9 +1916,9 @@ url = "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.4.tgz"; hash = "sha512-4kmO/MdyUIkLIvTPr8VHLil4AtoKIoniWPIEk5+CDy0xnWC84azhSFmuJ7PxZdsYtiP5kEeQsORAVIeMgxT+Hw=="; }; - "msgpackr@2.0.5" = fetchurl { - url = "https://registry.npmjs.org/msgpackr/-/msgpackr-2.0.5.tgz"; - hash = "sha512-cef05H/dSYpLpqp3sj/qyZh5vhUYCalnaLO7j1yOmpsR0y/XwLVtK7r5gn+U/F7CTEfMowcGhlUQJDLcLf7jcA=="; + "msgpackr@2.1.0" = fetchurl { + url = "https://registry.npmjs.org/msgpackr/-/msgpackr-2.1.0.tgz"; + hash = "sha512-p/pBCVO63CsvvpkomUnNNag6+n38rULuDA6HHe70o2gtC8ODI52foF/4ko2qQcp6OiErJXTmrZeXmsGGHsIQNQ=="; }; "multipasta@0.2.8" = fetchurl { url = "https://registry.npmjs.org/multipasta/-/multipasta-0.2.8.tgz"; @@ -1767,6 +1984,10 @@ url = "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz"; hash = "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="; }; + "path-parse@1.0.7" = fetchurl { + url = "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz"; + hash = "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="; + }; "pathe@2.0.3" = fetchurl { url = "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz"; hash = "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="; @@ -1787,6 +2008,10 @@ url = "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz"; hash = "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A=="; }; + "picomatch@4.0.7" = fetchurl { + url = "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz"; + hash = "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA=="; + }; "postcss@8.5.26" = fetchurl { url = "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz"; hash = "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ=="; @@ -1803,6 +2028,10 @@ url = "https://registry.npmjs.org/promise-limit/-/promise-limit-2.7.0.tgz"; hash = "sha512-7nJ6v5lnJsXwGprnGXga4wx6d1POjvi5Qmf1ivTRxTjH4Z/9Czja/UCMLVmB9N93GeWOU93XaFaEt6jbuoagNw=="; }; + "prompts@2.4.2" = fetchurl { + url = "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz"; + hash = "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q=="; + }; "proper-lockfile@4.1.2" = fetchurl { url = "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz"; hash = "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA=="; @@ -1839,6 +2068,10 @@ url = "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz"; hash = "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="; }; + "rechoir@0.8.0" = fetchurl { + url = "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz"; + hash = "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ=="; + }; "redis-errors@1.2.0" = fetchurl { url = "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz"; hash = "sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w=="; @@ -1851,6 +2084,10 @@ url = "https://registry.npmjs.org/regexp-to-ast/-/regexp-to-ast-0.5.0.tgz"; hash = "sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw=="; }; + "regexp-tree@0.1.27" = fetchurl { + url = "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz"; + hash = "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA=="; + }; "remeda@2.33.4" = fetchurl { url = "https://registry.npmjs.org/remeda/-/remeda-2.33.4.tgz"; hash = "sha512-ygHswjlc/opg2VrtiYvUOPLjxjtdKvjGz1/plDhkG66hjNjFr1xmfrs2ClNFo/E6TyUFiwYNh53bKV26oBoMGQ=="; @@ -1859,6 +2096,10 @@ url = "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz"; hash = "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="; }; + "resolve@1.22.12" = fetchurl { + url = "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz"; + hash = "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA=="; + }; "restore-cursor@4.0.0" = fetchurl { url = "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz"; hash = "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg=="; @@ -1875,9 +2116,9 @@ url = "https://registry.npmjs.org/rolldown/-/rolldown-1.1.5.tgz"; hash = "sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA=="; }; - "rolldown@1.2.4" = fetchurl { - url = "https://registry.npmjs.org/rolldown/-/rolldown-1.2.4.tgz"; - hash = "sha512-rSr7irW0K7QRWzjdJXqZowkcRdDtjRduh43rBltnVKd0VFq839l1lJoDvGJb6gl7+4rTTCrPWu+YfujUL8Ug7w=="; + "rolldown@1.2.6" = fetchurl { + url = "https://registry.npmjs.org/rolldown/-/rolldown-1.2.6.tgz"; + hash = "sha512-vMM4q3aixf46GiF1Kok8jDPFsEpXgFWGjUHXNkNHNm+Y2adXAG2dbX91jkti3i0ZRsOlcmbuzAz1poObSHCmUA=="; }; "run-parallel@1.2.0" = fetchurl { url = "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz"; @@ -1891,6 +2132,10 @@ url = "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"; hash = "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="; }; + "safe-regex@2.1.1" = fetchurl { + url = "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz"; + hash = "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A=="; + }; "safer-buffer@2.1.2" = fetchurl { url = "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"; hash = "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="; @@ -1987,9 +2232,9 @@ url = "https://registry.npmjs.org/std-env/-/std-env-4.2.0.tgz"; hash = "sha512-oCUKSupKTHX53EyjDtuZQ64pjLJ6yYCtpmEw0goYxtjG9KpbRe8KAsl2tBUGU9DyMcJ0RwJ8GqJAFzMXcXW1Rw=="; }; - "streamx@2.28.0" = fetchurl { - url = "https://registry.npmjs.org/streamx/-/streamx-2.28.0.tgz"; - hash = "sha512-1Yowhzjf0ivGMrTIkY9hav5TxobO9qIVqUE41fiCGMGgc3CLlf4MY+9AHmZqBWgDTue0fY9zWjYFVyf6Diuobw=="; + "streamx@2.28.1" = fetchurl { + url = "https://registry.npmjs.org/streamx/-/streamx-2.28.1.tgz"; + hash = "sha512-zEzXb0s5Cds7tqMH6rhZ05lcJydCWiQPEwiNngVqzsxCc962vLY4Uw+mW7od8kDH258k2Uz/JrOkdIAAhSh9VA=="; }; "string-width@4.2.3" = fetchurl { url = "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"; @@ -2015,21 +2260,37 @@ url = "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz"; hash = "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w=="; }; + "strip-bom@3.0.0" = fetchurl { + url = "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz"; + hash = "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA=="; + }; "strnum@2.4.2" = fetchurl { url = "https://registry.npmjs.org/strnum/-/strnum-2.4.2.tgz"; hash = "sha512-rDG3Ah4TV0k1hWvLSzkZtMmLN9+eS+h3knq4MP6A42Y3Yh5qGNnOUs1jJkoSr8FG5dsL28c7KgkIBzSEykqtuw=="; }; + "supports-color@7.2.0" = fetchurl { + url = "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"; + hash = "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="; + }; + "supports-preserve-symlinks-flag@1.0.0" = fetchurl { + url = "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz"; + hash = "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="; + }; "tagged-tag@1.0.0" = fetchurl { url = "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz"; hash = "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng=="; }; + "tapable@2.3.3" = fetchurl { + url = "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz"; + hash = "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A=="; + }; "tar-fs@3.1.3" = fetchurl { url = "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.3.tgz"; hash = "sha512-/hU4AXnIdZu+Gvl1pk0oI5f5HxWsCJRtY2aFaJdk9VvyL48DWU6iU5WAIPG+wIi1YvWA6eTJvIviP/tMAZZNwQ=="; }; - "tar-stream@3.2.0" = fetchurl { - url = "https://registry.npmjs.org/tar-stream/-/tar-stream-3.2.0.tgz"; - hash = "sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg=="; + "tar-stream@3.2.1" = fetchurl { + url = "https://registry.npmjs.org/tar-stream/-/tar-stream-3.2.1.tgz"; + hash = "sha512-nqsEO8zLZJvrOMdEwkA0QdCLFbetHMn95Zqu4fKwX+hkaTWJPZZOrxx/PwtxoK0MMGQmBQNRW3CPs8IFYQz4cQ=="; }; "teex@1.0.1" = fetchurl { url = "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz"; @@ -2071,6 +2332,14 @@ url = "https://registry.npmjs.org/toml/-/toml-4.3.0.tgz"; hash = "sha512-lVb8X9BsPVuH0M4BKeS91tXAmJvCjQ5UIyAbQFaxkKGyUFK2RPkhwaFSQH8vbpl1d23eu/IBH+dwVMHWaq9A5A=="; }; + "tsconfig-paths-webpack-plugin@4.2.0" = fetchurl { + url = "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-4.2.0.tgz"; + hash = "sha512-zbem3rfRS8BgeNK50Zz5SIQgXzLafiHjOwUAvk/38/o1jHn/V5QAgVUcz884or7WYcPaH3N2CIfUc2u0ul7UcA=="; + }; + "tsconfig-paths@4.2.0" = fetchurl { + url = "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz"; + hash = "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg=="; + }; "tslib@2.8.1" = fetchurl { url = "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz"; hash = "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="; @@ -2111,21 +2380,25 @@ url = "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"; hash = "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="; }; - "uuid@14.0.1" = fetchurl { - url = "https://registry.npmjs.org/uuid/-/uuid-14.0.1.tgz"; - hash = "sha512-6ZxzVpzDXDa3bJWaHilVayA+BH/1zmxCJoVgvmqJnid/gPoKHxUrS/aC/T6LGQtNHT+XHG9fXPJB4d+IrU30Ew=="; + "uuid@14.0.2" = fetchurl { + url = "https://registry.npmjs.org/uuid/-/uuid-14.0.2.tgz"; + hash = "sha512-xZe/16rV4aa+HGSOCiY2YeLT1OybRLrrkL/Rqaq7p7GMVXjFh+6wN4oMYgjFmnSnhY8t6Xpdl2l9qmnHYuMHwQ=="; }; "valibot@1.2.0" = fetchurl { url = "https://registry.npmjs.org/valibot/-/valibot-1.2.0.tgz"; hash = "sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg=="; }; - "vite@8.2.1" = fetchurl { - url = "https://registry.npmjs.org/vite/-/vite-8.2.1.tgz"; - hash = "sha512-EU/eS7BH3XROHh2YnBefjM6DBKA6ZeMZEYQbj7NLWg5wHYlhB8B/Mayd5XsgWq+NFYccDOTemRpdETWR6Ka/lw=="; + "vite@8.2.2" = fetchurl { + url = "https://registry.npmjs.org/vite/-/vite-8.2.2.tgz"; + hash = "sha512-cFKLV/PRgAUlIRm5WjMjJ86jrftzpqcgH+Us+DS8mI3CDNiH30Whrz8uHL3+MOLPAgqbMBAqWdAHAphOAM+z/Q=="; + }; + "vitest@4.1.11" = fetchurl { + url = "https://registry.npmjs.org/vitest/-/vitest-4.1.11.tgz"; + hash = "sha512-fhACrNXUidIbGSBr5FlbuBkO7VWC1ZyLl0DO4CU2DrQoAPxX84Ysxs+HeGQpii5lZWV1Q4gBZTTu49mF+A6Edw=="; }; - "vitest@4.1.10" = fetchurl { - url = "https://registry.npmjs.org/vitest/-/vitest-4.1.10.tgz"; - hash = "sha512-R9jUTe5S4Qb0HCd4TNqpC7oGcrMssMRGXLW80ubjWsW9VH5GF8y1Y0SFLY9AbqSk6nt0PnOx4H4WNJYZ13GUPw=="; + "watskeburt@6.0.0" = fetchurl { + url = "https://registry.npmjs.org/watskeburt/-/watskeburt-6.0.0.tgz"; + hash = "sha512-jfiuDABaxSkC71T6oZ3vCS99roYkSHm/+As+G0Dz8taAHQb+SJBvLEm5RlsgG71XdfAj3rv7eudUBTgwcQUPlQ=="; }; "which@2.0.2" = fetchurl { url = "https://registry.npmjs.org/which/-/which-2.0.2.tgz"; diff --git a/crates/agent-sandboxd/Cargo.toml b/crates/agent-sandboxd/Cargo.toml new file mode 100644 index 0000000..eecde56 --- /dev/null +++ b/crates/agent-sandboxd/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "agent-sandboxd" +version = "0.1.0" +edition.workspace = true +license.workspace = true +publish = false +rust-version.workspace = true + +[dependencies] +serde.workspace = true +serde_json.workspace = true + +[target.'cfg(unix)'.dependencies] +libc.workspace = true diff --git a/crates/agent-sandboxd/src/capture.rs b/crates/agent-sandboxd/src/capture.rs new file mode 100644 index 0000000..21929fc --- /dev/null +++ b/crates/agent-sandboxd/src/capture.rs @@ -0,0 +1,46 @@ +use std::io::{self, Read}; + +pub(crate) struct Capture { + pub(crate) bytes: Vec, + pub(crate) truncated: bool, +} + +pub(crate) fn read_bounded(mut reader: impl Read, limit: usize) -> io::Result { + let mut bytes = Vec::with_capacity(limit.min(8 * 1024)); + let mut buffer = [0_u8; 8 * 1024]; + let mut truncated = false; + + loop { + let read = reader.read(&mut buffer)?; + if read == 0 { + break; + } + + let retained = read.min(limit.saturating_sub(bytes.len())); + bytes.extend_from_slice(&buffer[..retained]); + truncated |= retained < read; + } + + Ok(Capture { bytes, truncated }) +} + +#[cfg(test)] +mod tests { + use super::read_bounded; + + #[test] + fn drains_input_but_retains_only_the_limit() { + let capture = read_bounded(&b"abcdefgh"[..], 3).expect("capture succeeds"); + + assert_eq!(capture.bytes, b"abc"); + assert!(capture.truncated); + } + + #[test] + fn zero_is_a_valid_capture_limit() { + let capture = read_bounded(&b"x"[..], 0).expect("capture succeeds"); + + assert!(capture.bytes.is_empty()); + assert!(capture.truncated); + } +} diff --git a/crates/agent-sandboxd/src/lib.rs b/crates/agent-sandboxd/src/lib.rs new file mode 100644 index 0000000..16da6a0 --- /dev/null +++ b/crates/agent-sandboxd/src/lib.rs @@ -0,0 +1,5 @@ +mod capture; +pub mod protocol; +pub mod supervisor; + +pub use supervisor::supervise; diff --git a/crates/agent-sandboxd/src/main.rs b/crates/agent-sandboxd/src/main.rs new file mode 100644 index 0000000..092c003 --- /dev/null +++ b/crates/agent-sandboxd/src/main.rs @@ -0,0 +1,61 @@ +use agent_sandboxd::protocol::{ClientMessage, SupervisorResponse}; +use agent_sandboxd::supervise; +use serde_json::Value; +use std::io::{self, BufRead, BufWriter, Write}; + +const INVALID_REQUEST_ID: &str = "invalid-request"; + +fn main() { + if let Err(error) = run() { + eprintln!("agent-sandboxd: {error}"); + std::process::exit(1); + } +} + +fn run() -> io::Result<()> { + let stdin = io::stdin(); + let mut stdout = BufWriter::new(io::stdout().lock()); + + for line in stdin.lock().lines() { + let line = line?; + if line.trim().is_empty() { + continue; + } + let response = handle_line(&line); + serde_json::to_writer(&mut stdout, &response)?; + stdout.write_all(b"\n")?; + stdout.flush()?; + } + + Ok(()) +} + +fn handle_line(line: &str) -> SupervisorResponse { + match serde_json::from_str::(line) { + Ok(ClientMessage::ExecuteCommand { id, request: _ }) if id.is_empty() => { + SupervisorResponse::CommandRejected { + id: INVALID_REQUEST_ID.into(), + reason: "id must not be empty".into(), + } + } + Ok(ClientMessage::ExecuteCommand { id, request }) => match supervise(&request) { + Ok(output) => SupervisorResponse::CommandSucceeded { id, output }, + Err(error) => SupervisorResponse::CommandRejected { + id, + reason: error.to_string(), + }, + }, + Err(error) => SupervisorResponse::CommandRejected { + id: recover_id(line), + reason: format!("invalid request: {error}"), + }, + } +} + +fn recover_id(line: &str) -> String { + serde_json::from_str::(line) + .ok() + .and_then(|value| value.get("id")?.as_str().map(str::to_owned)) + .filter(|id| !id.is_empty()) + .unwrap_or_else(|| INVALID_REQUEST_ID.into()) +} diff --git a/crates/agent-sandboxd/src/protocol.rs b/crates/agent-sandboxd/src/protocol.rs new file mode 100644 index 0000000..8251a83 --- /dev/null +++ b/crates/agent-sandboxd/src/protocol.rs @@ -0,0 +1,75 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Deserialize)] +#[serde(tag = "_tag")] +pub enum ClientMessage { + ExecuteCommand { id: String, request: CommandRequest }, +} + +#[derive(Debug, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct CommandRequest { + pub args: Vec, + pub command: String, + pub cwd: String, + pub max_output_bytes: u64, + pub timeout_ms: u64, +} + +#[derive(Debug, PartialEq, Eq, Serialize)] +#[serde(rename_all = "camelCase")] +pub struct CommandOutput { + pub exit_code: Option, + pub stderr: String, + pub stderr_truncated: bool, + pub stdout: String, + pub stdout_truncated: bool, + pub timed_out: bool, +} + +#[derive(Debug, Serialize)] +#[serde(tag = "_tag")] +pub enum SupervisorResponse { + CommandSucceeded { id: String, output: CommandOutput }, + CommandRejected { id: String, reason: String }, +} + +#[cfg(test)] +mod tests { + use super::{ClientMessage, SupervisorResponse}; + + #[test] + fn decodes_effect_tagged_request() { + let json = r#"{ + "_tag":"ExecuteCommand", + "id":"run-1", + "request":{ + "args":["hello"], + "command":"printf", + "cwd":"/tmp", + "maxOutputBytes":32, + "timeoutMs":1000 + } + }"#; + + let ClientMessage::ExecuteCommand { id, request } = + serde_json::from_str(json).expect("valid request"); + + assert_eq!(id, "run-1"); + assert_eq!(request.command, "printf"); + assert_eq!(request.max_output_bytes, 32); + } + + #[test] + fn encodes_effect_tagged_rejection() { + let response = SupervisorResponse::CommandRejected { + id: "run-2".into(), + reason: "nope".into(), + }; + + let json = serde_json::to_value(response).expect("serializable response"); + + assert_eq!(json["_tag"], "CommandRejected"); + assert_eq!(json["id"], "run-2"); + } +} diff --git a/crates/agent-sandboxd/src/supervisor.rs b/crates/agent-sandboxd/src/supervisor.rs new file mode 100644 index 0000000..465e568 --- /dev/null +++ b/crates/agent-sandboxd/src/supervisor.rs @@ -0,0 +1,155 @@ +use crate::capture::{read_bounded, Capture}; +use crate::protocol::{CommandOutput, CommandRequest}; +use std::fmt; +use std::io; +use std::process::{Child, Command, ExitStatus, Stdio}; +use std::thread::{self, JoinHandle}; +use std::time::{Duration, Instant}; + +const MAX_CAPTURE_BYTES: u64 = 8 * 1024 * 1024; +const POLL_INTERVAL: Duration = Duration::from_millis(5); + +#[derive(Debug)] +pub enum SupervisorError { + InvalidRequest(&'static str), + Io(io::Error), + CapturePanicked, +} + +impl fmt::Display for SupervisorError { + fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result { + match self { + Self::InvalidRequest(message) => formatter.write_str(message), + Self::Io(error) => write!(formatter, "process I/O failed: {error}"), + Self::CapturePanicked => formatter.write_str("output capture thread panicked"), + } + } +} + +impl std::error::Error for SupervisorError {} + +impl From for SupervisorError { + fn from(error: io::Error) -> Self { + Self::Io(error) + } +} + +pub fn supervise(request: &CommandRequest) -> Result { + validate(request)?; + let limit = request.max_output_bytes as usize; + let mut command = Command::new(&request.command); + command + .args(&request.args) + .stdin(Stdio::null()) + .stdout(Stdio::piped()) + .stderr(Stdio::piped()); + if !request.cwd.is_empty() { + command.current_dir(&request.cwd); + } + configure_process(&mut command); + + let started = Instant::now(); + let mut child = command.spawn()?; + let process_group = child.id(); + let stdout = child.stdout.take().expect("piped stdout"); + let stderr = child.stderr.take().expect("piped stderr"); + let stdout_reader = thread::spawn(move || read_bounded(stdout, limit)); + let stderr_reader = thread::spawn(move || read_bounded(stderr, limit)); + let (status, timed_out) = wait_for_exit( + &mut child, + process_group, + started, + Duration::from_millis(request.timeout_ms), + )?; + terminate_descendants(process_group)?; + + let stdout = join_capture(stdout_reader)?; + let stderr = join_capture(stderr_reader)?; + Ok(CommandOutput { + exit_code: (!timed_out).then(|| status.code()).flatten(), + stderr: String::from_utf8_lossy(&stderr.bytes).into_owned(), + stderr_truncated: stderr.truncated, + stdout: String::from_utf8_lossy(&stdout.bytes).into_owned(), + stdout_truncated: stdout.truncated, + timed_out, + }) +} + +fn validate(request: &CommandRequest) -> Result<(), SupervisorError> { + if request.command.is_empty() { + return Err(SupervisorError::InvalidRequest("command must not be empty")); + } + if request.max_output_bytes > MAX_CAPTURE_BYTES { + return Err(SupervisorError::InvalidRequest( + "maxOutputBytes exceeds the 8 MiB daemon limit", + )); + } + Ok(()) +} + +fn wait_for_exit( + child: &mut Child, + process_group: u32, + started: Instant, + timeout: Duration, +) -> Result<(ExitStatus, bool), SupervisorError> { + loop { + if let Some(status) = child.try_wait()? { + return Ok((status, false)); + } + if started.elapsed() >= timeout { + terminate_process(child, process_group)?; + return Ok((child.wait()?, true)); + } + thread::sleep(POLL_INTERVAL.min(timeout.saturating_sub(started.elapsed()))); + } +} + +fn join_capture(reader: JoinHandle>) -> Result { + reader + .join() + .map_err(|_| SupervisorError::CapturePanicked)? + .map_err(SupervisorError::Io) +} + +#[cfg(unix)] +fn configure_process(command: &mut Command) { + use std::os::unix::process::CommandExt; + command.process_group(0); +} + +#[cfg(not(unix))] +fn configure_process(_: &mut Command) {} + +#[cfg(unix)] +fn terminate_process(_: &mut Child, process_group: u32) -> io::Result<()> { + kill_process_group(process_group) +} + +#[cfg(not(unix))] +fn terminate_process(child: &mut Child, _: u32) -> io::Result<()> { + child.kill() +} + +#[cfg(unix)] +fn terminate_descendants(process_group: u32) -> io::Result<()> { + kill_process_group(process_group) +} + +#[cfg(not(unix))] +fn terminate_descendants(_: u32) -> io::Result<()> { + Ok(()) +} + +#[cfg(unix)] +fn kill_process_group(process_group: u32) -> io::Result<()> { + let result = unsafe { libc::killpg(process_group as libc::pid_t, libc::SIGKILL) }; + if result == 0 { + return Ok(()); + } + let error = io::Error::last_os_error(); + match error.raw_os_error() { + Some(libc::ESRCH) => Ok(()), + _ => Err(error), + } +} diff --git a/crates/agent-sandboxd/tests/ndjson.rs b/crates/agent-sandboxd/tests/ndjson.rs new file mode 100644 index 0000000..c345477 --- /dev/null +++ b/crates/agent-sandboxd/tests/ndjson.rs @@ -0,0 +1,37 @@ +#![cfg(unix)] + +use serde_json::{json, Value}; +use std::io::Write; +use std::process::{Command, Stdio}; + +#[test] +fn serves_one_ndjson_response_per_request() { + let mut daemon = Command::new(env!("CARGO_BIN_EXE_agent-sandboxd")) + .stdin(Stdio::piped()) + .stdout(Stdio::piped()) + .spawn() + .expect("daemon starts"); + let request = json!({ + "_tag": "ExecuteCommand", + "id": "integration-1", + "request": { + "args": ["-c", "printf hello"], + "command": "/bin/sh", + "cwd": "", + "maxOutputBytes": 1024, + "timeoutMs": 1000 + } + }); + let mut stdin = daemon.stdin.take().expect("piped stdin"); + writeln!(stdin, "{request}").expect("request is written"); + drop(stdin); + + let output = daemon.wait_with_output().expect("daemon exits"); + let response: Value = serde_json::from_slice(&output.stdout).expect("NDJSON response"); + + assert!(output.status.success()); + assert_eq!(response["_tag"], "CommandSucceeded"); + assert_eq!(response["id"], "integration-1"); + assert_eq!(response["output"]["stdout"], "hello"); + assert_eq!(response["output"]["timedOut"], false); +} diff --git a/crates/agent-sandboxd/tests/supervisor.rs b/crates/agent-sandboxd/tests/supervisor.rs new file mode 100644 index 0000000..7728e0c --- /dev/null +++ b/crates/agent-sandboxd/tests/supervisor.rs @@ -0,0 +1,46 @@ +#![cfg(unix)] + +use agent_sandboxd::protocol::CommandRequest; +use agent_sandboxd::supervise; +use std::time::{Duration, Instant}; + +fn shell(script: &str, max_output_bytes: u64, timeout_ms: u64) -> CommandRequest { + CommandRequest { + args: vec!["-c".into(), script.into()], + command: "/bin/sh".into(), + cwd: String::new(), + max_output_bytes, + timeout_ms, + } +} + +#[test] +fn captures_both_streams_with_independent_bounds() { + let output = + supervise(&shell("printf abcdef; printf 123456 >&2", 4, 1_000)).expect("command succeeds"); + + assert_eq!(output.exit_code, Some(0)); + assert_eq!(output.stdout, "abcd"); + assert_eq!(output.stderr, "1234"); + assert!(output.stdout_truncated); + assert!(output.stderr_truncated); + assert!(!output.timed_out); +} + +#[test] +fn reports_nonzero_exit_codes() { + let output = supervise(&shell("exit 7", 64, 1_000)).expect("command completes"); + + assert_eq!(output.exit_code, Some(7)); + assert!(!output.timed_out); +} + +#[test] +fn deadline_kills_the_process_group_and_closes_its_pipes() { + let started = Instant::now(); + let output = supervise(&shell("sleep 5", 64, 25)).expect("timeout is handled"); + + assert!(output.timed_out); + assert_eq!(output.exit_code, None); + assert!(started.elapsed() < Duration::from_secs(1)); +} diff --git a/docs/10-effect-solutions.md b/docs/10-effect-solutions.md index e69de29..27697e8 100644 --- a/docs/10-effect-solutions.md +++ b/docs/10-effect-solutions.md @@ -0,0 +1,53 @@ +# Canonical Effect and Alchemy choices + +This repository pins `effect@4.0.0-beta.102`. Current Effect v4 documentation +has moved into release-candidate builds, so the exact beta source and its guide +are the compile-time authority. In particular, this version spells schema +errors `Schema.TaggedErrorClass`; newer examples use `Schema.TaggedError`. + +## Effect conventions used here + +- Services extend `Context.Service` and use package-qualified identifiers. +- Primary layers are lowercase (`layer`, `layerMemory`, `layerDemo`, + `layerNoDeps`), not legacy `Live` or `Default` classes. +- A layer acquires dependencies once and captures them in named `Effect.fn` + operations. Public operations normally have `R = never`. +- Domain data uses `Schema.Class`; protocol variants use `Schema.TaggedClass` + and `Schema.Union`; recoverable boundary failures use tagged schema errors. +- Configuration stays in `Config` and provider layers. Domain code never reads + `process.env`. +- Execution happens at application edges: `BunRuntime.runMain` for the server + and one lifecycle-managed `ManagedRuntime` for desktop callbacks. +- `@effect/vitest` runs Effects directly with a fresh test scope. Test layers + replace capabilities without mocking modules. +- Generator control flow is preferred when it makes the state machine clearer. + +The patterns were cross-checked against the exact beta guide and examples in +the official Effect repository, plus the Effect Solutions example catalogue. +The unstable AI import is isolated because its versioning promise is different +from the stable core. + +## Alchemy conventions used here + +Alchemy is a resource graph and deployment composition root in this demo. The +stack is intentionally small: construct `Scope`, call `Stack`, declare named +resources, and return their outputs. Resource Effects receive provider and state +through layers assembled by Alchemy; application code does not invoke the +Alchemy runtime. + +The repository uses `alchemy@2.0.0-beta.70` because it is the version matched by +the installed `alchemy-sops` peer range and because the checked examples for +that tag use the same D1 migration option as this stack. + +Alchemy's experimental agent resource is not used: the agent lives in Effect, +while Alchemy declares only deployable infrastructure. + +## Primary references + +- +- +- +- +- +- +- diff --git a/docs/architecture.md b/docs/architecture.md index 7f5fbf6..3b8b693 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -1,19 +1,78 @@ -# Architecture boundary +# Agent harness architecture -The application is intentionally small: `apps/web` serves a page, a status -endpoint, and a Prometheus-compatible request counter through Effect and Bun. -Domain helpers live in `packages/web-core` so they can be tested without the -HTTP server. +The dependency rule is simple: stable policy points inward; integrations point +in from the edges. -`flake.nix` stays at the root because Nix discovers flakes there. `flake/` is -the thin public output layer. `nix/demo/` holds the package and smoke-check -implementation. `nix/prelude.nix` is the Prelude catalogue. +```text +apps/cli ─────┐ +apps/harnessd ├──> agent-demo ──> agent-core <── agent-testkit +apps/native ──┘ ^ + │ +agent-runtime ────────────────────────┘ + │ +sandbox-client + │ +agent-sandboxd (Rust process boundary) -`ops/deploy/kubernetes/base` defines the portable workload. Each directory -under `ops/environments` composes that base with its own namespace, hostname, -replicas, runtime config, and image reference. Production uses a digest rather -than a mutable image tag. +apps/web ──> web-core (operational landing page) +``` -`ops/observability` is versioned next to the service it observes. Its Prometheus -configuration can scrape the local Compose service, and Grafana provisions the -included dashboard automatically. +## One run + +1. `AgentHarness.run` records `RunStarted`. +2. `AgentModel.decide` returns the `UseTool | Finish` schema union. +3. A tool request is journaled before `ToolRunner.execute` crosses an adapter. +4. The result is journaled and becomes the next model context. +5. A final answer records `RunCompleted`; exceeding the configured bound fails + with `StepLimitExceeded`. + +The loop uses ordinary `if` and `for` control flow inside `Effect.gen`. The +types carry the semantics; extra combinators would make this particular state +machine harder to read. + +## Boundaries + +`packages/agent-core` owns serializable domain concepts and capability +interfaces. Its service implementations acquire dependencies while building +their layers, so `run`, `append`, and `execute` do not leak implementation +requirements to callers. + +`packages/agent-runtime` is intentionally less stable. It translates an Effect +AI tool call to the core `ModelDecision`, validates unknown tool input once, +and maps provider or transport failures into domain errors. No other package +imports `effect/unstable/ai`. + +`packages/agent-testkit` proves that layers are the substitution mechanism. A +scripted model and fake tool runner exercise the real harness and journal under +`@effect/vitest` without network access. + +`packages/agent-demo` is distinct from the testkit: it is a provider-free, +runtime-safe composition shared by the three user-facing harness entrypoints. +Its model requests one schema-validated `DescribeHarness` tool, consumes the +typed result, and finishes. This makes the complete loop inspectable without a +credential or network call. + +The demo journal is process-memory and bounds retained histories to 256 while +pinning active runs. A terminal append returns its immutable history atomically, +so a response cannot race cache eviction. `harnessd` caps concurrent runs at 64 +and reports these limitations from `/status`; durable storage would replace the +journal layer rather than change the HTTP handlers or loop. + +`crates/agent-sandboxd` accepts one tagged NDJSON command per line. It drains +stdout and stderr while retaining bounded prefixes, enforces a deadline, and +kills the process group on Unix. It does not provide filesystem, network, +syscall, or tenant isolation; a production system would run it inside a real +sandbox and add an allowlist above `ToolRunner`. + +## Composition roots + +- Bun provides HTTP and config services at `apps/web/src/server.ts`. +- `apps/cli` owns argument parsing, terminal rendering, and Bun process exit. +- `apps/harnessd` owns the typed HTTP API, OpenAPI document, daemon config, and + long-lived Bun server layer. +- The native app creates one `ManagedRuntime` and disposes it with the window. +- `packages/infra/alchemy.run.ts` declares cloud resources inside an Alchemy + stack. Infrastructure does not reach into the harness domain. + +The existing `ops/`, Nix, container, and environment layout continues to own +the operational life of the demo rather than becoming source-adjacent config. diff --git a/docs/getting-started.md b/docs/getting-started.md index 4091c55..06405e1 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -1,42 +1,56 @@ # Getting started -Bun + Effect reference monorepo. The demo app lives in `apps/web`. Shared -domain logic lives in `packages/web-core`. Operational configuration lives -in `ops/`. - -## Enter the shell +Enter the pinned development environment and install the Bun workspace: ```sh nix develop +bun install ``` -Inside the shell, `x` lists every project command, `docs` opens this viewer, -and `x ` runs a command by key. +Inside the shell, `x` lists the project commands and `docs` opens these notes. + +## Read the demo + +The useful reading order is: -## Install and validate +1. `packages/agent-core/src/domain/model.ts` — schema-backed decisions. +2. `packages/agent-core/src/services/agent-harness.ts` — the orchestration loop. +3. `packages/agent-testkit/test/agent-harness.test.ts` — layer substitution. +4. `packages/agent-demo/src/layer.ts` — provider-free app composition. +5. `apps/cli/src/command.ts` — the terminal process boundary. +6. `apps/harnessd/src/api.ts` — the typed HTTP boundary. +7. `packages/agent-runtime/src/effect-ai-model.ts` — unstable API isolation. +8. `apps/native/src/app.ts` — the callback/runtime boundary. +9. `crates/agent-sandboxd/src/supervisor.rs` — the process boundary. + +## Run and validate ```sh -bun install -x check +x dev x test +x check x lint +cargo test --workspace ``` -Use Vitest via `bun run test` (never `bun test`). - -## Run the app +Exercise the shared demo layer through the terminal or daemon edge: ```sh -x dev +bun run cli run --events "Explain the harness" +bun run harnessd ``` -Open . The status API is `/api/status`; Prometheus -metrics are `/api/metrics`. - -## Format +In another terminal, submit an HTTP run: ```sh -x fmt +curl -sS http://127.0.0.1:4319/runs \ + -H 'content-type: application/json' \ + -d '{"goal":"Explain the harness"}' ``` -That runs `nix fmt` (alejandra + oxfmt via treefmt). +Open for the architecture page. The web app is an +operational shell around the demo; a provider-backed agent is intentionally not +preconfigured. + +Always run Vitest through `bun run test`, never `bun test`. Format TypeScript, +JSON, and Nix with `x fmt`; format Rust with `cargo fmt --all`. diff --git a/flake.nix b/flake.nix index 3bb091e..7513944 100644 --- a/flake.nix +++ b/flake.nix @@ -1,5 +1,5 @@ { - description = "Runnable example of a monorepo with a tidy operational surface"; + description = "Effect-native agent harness with CLI, daemon, desktop, and Rust edges"; inputs = { flake-parts.url = "github:hercules-ci/flake-parts"; diff --git a/flake/apps/default.nix b/flake/apps/default.nix index 05b8d4d..4fc67e1 100644 --- a/flake/apps/default.nix +++ b/flake/apps/default.nix @@ -2,7 +2,19 @@ perSystem = {config, ...}: { apps.default = { type = "app"; - program = "${config.packages.ops-demo}/bin/ops-demo"; + program = "${config.packages.agent-harness}/bin/agent-harness"; + }; + apps.cli = { + type = "app"; + program = "${config.packages.agent-harness}/bin/agent-harness"; + }; + apps.harnessd = { + type = "app"; + program = "${config.packages.agent-harness}/bin/agent-harnessd"; + }; + apps.web = { + type = "app"; + program = "${config.packages.agent-harness}/bin/agent-harness-web"; }; }; } diff --git a/flake/devShells/default.nix b/flake/devShells/default.nix index 7c36df6..6515c29 100644 --- a/flake/devShells/default.nix +++ b/flake/devShells/default.nix @@ -15,10 +15,13 @@ config.packages.prelude pkgs.age pkgs.bun + pkgs.cargo pkgs.git pkgs.jq pkgs.kubectl pkgs.kustomize + pkgs.rustc + pkgs.rustfmt pkgs.sops pkgs.yq-go ]; diff --git a/flake/packages/default.nix b/flake/packages/default.nix index f91d14a..173888c 100644 --- a/flake/packages/default.nix +++ b/flake/packages/default.nix @@ -8,9 +8,9 @@ inherit system; overlays = [inputs.bun2nix.overlays.default]; }; - opsDemo = import ../../nix/demo/package.nix {inherit pkgs;}; + agentHarness = import ../../nix/demo/package.nix {inherit pkgs;}; in { - packages.ops-demo = opsDemo; - packages.default = config.packages.ops-demo; + packages.agent-harness = agentHarness; + packages.default = config.packages.agent-harness; }; } diff --git a/justfile b/justfile index a8c04de..51febeb 100644 --- a/justfile +++ b/justfile @@ -22,6 +22,12 @@ test: nixsh dev: nixsh bun run dev +cli *args: nixsh + bun run cli {{args}} + +harnessd: nixsh + bun run harnessd + fmt: nixsh nix fmt diff --git a/nix/demo/check.nix b/nix/demo/check.nix index 330f21b..fd6ca84 100644 --- a/nix/demo/check.nix +++ b/nix/demo/check.nix @@ -1,15 +1,22 @@ {pkgs}: let - opsDemo = import ./package.nix {inherit pkgs;}; + agentHarness = import ./package.nix {inherit pkgs;}; in - pkgs.runCommand "ops-demo-smoke" { + pkgs.runCommand "agent-harness-smoke" { nativeBuildInputs = [pkgs.curl]; } '' + ${agentHarness}/bin/agent-harness run --json "Nix CLI smoke" >cli.json + grep '"summary"' cli.json + export HOST=127.0.0.1 export PORT=43001 export APP_ENV=test - ${opsDemo}/bin/ops-demo >log 2>&1 & - pid=$! - trap 'kill $pid 2>/dev/null || true; cat log >&2 || true' EXIT + ${agentHarness}/bin/agent-harness-web >web.log 2>&1 & + web_pid=$! + export HARNESSD_HOST=127.0.0.1 + export HARNESSD_PORT=43002 + ${agentHarness}/bin/agent-harnessd >harnessd.log 2>&1 & + harnessd_pid=$! + trap 'kill $web_pid $harnessd_pid 2>/dev/null || true; cat web.log harnessd.log >&2 || true' EXIT for _ in $(seq 1 50); do if curl -sf "http://127.0.0.1:43001/api/status" >/dev/null; then break @@ -17,6 +24,16 @@ in sleep 0.1 done curl -sf "http://127.0.0.1:43001/api/status" | grep test - curl -sf "http://127.0.0.1:43001/" | grep "Ops monorepo demo" + curl -sf "http://127.0.0.1:43001/" | grep "Effect-native agent harness" + for _ in $(seq 1 50); do + if curl -sf "http://127.0.0.1:43002/health" >/dev/null; then + break + fi + sleep 0.1 + done + curl -sf "http://127.0.0.1:43002/health" | grep harnessd + curl -sf "http://127.0.0.1:43002/runs" \ + -H 'content-type: application/json' \ + -d '{"goal":"Nix daemon smoke"}' | grep RunCompleted touch $out '' diff --git a/nix/demo/package.nix b/nix/demo/package.nix index ff4564d..413c126 100644 --- a/nix/demo/package.nix +++ b/nix/demo/package.nix @@ -4,7 +4,7 @@ }; in pkgs.stdenv.mkDerivation { - pname = "ops-demo"; + pname = "effect-agent-harness-demo"; version = "0.1.0"; src = ../..; nativeBuildInputs = [ @@ -33,11 +33,18 @@ in installPhase = '' runHook preInstall - mkdir -p $out/lib/ops-demo $out/bin - cp -R . $out/lib/ops-demo - makeWrapper ${pkgs.bun}/bin/bun $out/bin/ops-demo \ - --chdir $out/lib/ops-demo \ + mkdir -p $out/lib/agent-harness-demo $out/bin + cp -R . $out/lib/agent-harness-demo + makeWrapper ${pkgs.bun}/bin/bun $out/bin/agent-harness \ + --chdir $out/lib/agent-harness-demo \ + --add-flags "run --no-install apps/cli/src/main.ts" + makeWrapper ${pkgs.bun}/bin/bun $out/bin/agent-harnessd \ + --chdir $out/lib/agent-harness-demo \ + --add-flags "run --no-install apps/harnessd/src/server.ts" + makeWrapper ${pkgs.bun}/bin/bun $out/bin/agent-harness-web \ + --chdir $out/lib/agent-harness-demo \ --add-flags "run --no-install apps/web/src/server.ts" + ln -s agent-harness-web $out/bin/agent-harness-demo runHook postInstall ''; } diff --git a/nix/prelude.nix b/nix/prelude.nix index eaee2bb..8a73bd3 100644 --- a/nix/prelude.nix +++ b/nix/prelude.nix @@ -2,7 +2,7 @@ prelude = { theme = "minted"; colorProfile = "auto"; - project = "ops-monorepo-demo"; + project = "effect-agent-harness"; commands = { install = { @@ -19,6 +19,18 @@ motd = 2; }; + cli = { + exec = "bun run cli"; + description = "Run the deterministic agent harness CLI"; + details = "Try: x cli run --events 'Explain the harness'"; + }; + + harnessd = { + exec = "bun run harnessd"; + description = "Run the typed Effect/Bun harness daemon"; + details = "Serves /health, /status, /runs, and /openapi.json on :4319."; + }; + check = { exec = "bun run check"; description = "Typecheck with tsgo"; @@ -27,12 +39,17 @@ test = { exec = "bun run test"; - description = "Run Vitest"; + description = "Run deterministic Effect/Vitest tests"; details = "Always `bun run test` — never `bun test`."; key = "t"; motd = 3; }; + "test:rust" = { + exec = "cargo test --workspace"; + description = "Test the Rust process supervisor"; + }; + lint = { exec = "bun run lint"; description = "Lint with oxlint + tsgolint"; @@ -55,7 +72,7 @@ maxWidth = 90; header = { tagline = { - text = "preferred toolchain + a tidy ops surface"; + text = "clean Effect architecture + a supervised Rust edge"; }; status = { ready = { @@ -75,7 +92,7 @@ }; description = { text = '' - You are inside the nix devshell — Bun, oxc, tsgo, and project + You are inside the nix devshell — Bun, Rust, oxc, tsgo, and project commands are on PATH. Run `x` to browse commands, `docs` for notes. ''; }; diff --git a/ops/compose/local.yaml b/ops/compose/local.yaml index 95b0f1e..2f5ed2e 100644 --- a/ops/compose/local.yaml +++ b/ops/compose/local.yaml @@ -7,7 +7,7 @@ services: APP_ENV: development APP_RELEASE: compose-local ports: - - "${OPS_DEMO_PORT:-3000}:3000" + - "${AGENT_DEMO_PORT:-3000}:3000" healthcheck: test: [ diff --git a/ops/compose/test.yaml b/ops/compose/test.yaml index d4ad7c0..9eb718f 100644 --- a/ops/compose/test.yaml +++ b/ops/compose/test.yaml @@ -10,5 +10,5 @@ services: "--no-install", "--target=bun", "apps/web/src/server.ts", - "--outfile=/tmp/ops-demo-check.js", + "--outfile=/tmp/agent-demo-check.js", ] diff --git a/ops/deploy/kubernetes/base/configmap.yaml b/ops/deploy/kubernetes/base/configmap.yaml index 38283e2..baf3930 100644 --- a/ops/deploy/kubernetes/base/configmap.yaml +++ b/ops/deploy/kubernetes/base/configmap.yaml @@ -1,7 +1,7 @@ apiVersion: v1 kind: ConfigMap metadata: - name: ops-demo-runtime + name: agent-demo-runtime data: APP_ENV: replace-me APP_RELEASE: replace-me diff --git a/ops/deploy/kubernetes/base/web-deployment.yaml b/ops/deploy/kubernetes/base/web-deployment.yaml index 203c41f..3fb445a 100644 --- a/ops/deploy/kubernetes/base/web-deployment.yaml +++ b/ops/deploy/kubernetes/base/web-deployment.yaml @@ -1,31 +1,31 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: ops-demo-web + name: agent-demo-web labels: - app.kubernetes.io/name: ops-demo + app.kubernetes.io/name: agent-demo app.kubernetes.io/component: web spec: replicas: 1 selector: matchLabels: - app.kubernetes.io/name: ops-demo + app.kubernetes.io/name: agent-demo app.kubernetes.io/component: web template: metadata: labels: - app.kubernetes.io/name: ops-demo + app.kubernetes.io/name: agent-demo app.kubernetes.io/component: web spec: containers: - name: web - image: ghcr.io/example/ops-demo:replace-me + image: ghcr.io/example/agent-demo:replace-me ports: - containerPort: 3000 name: http envFrom: - configMapRef: - name: ops-demo-runtime + name: agent-demo-runtime readinessProbe: httpGet: path: /api/status diff --git a/ops/deploy/kubernetes/base/web-service.yaml b/ops/deploy/kubernetes/base/web-service.yaml index fff70f8..eefc8e5 100644 --- a/ops/deploy/kubernetes/base/web-service.yaml +++ b/ops/deploy/kubernetes/base/web-service.yaml @@ -1,12 +1,12 @@ apiVersion: v1 kind: Service metadata: - name: ops-demo-web + name: agent-demo-web labels: - app.kubernetes.io/name: ops-demo + app.kubernetes.io/name: agent-demo spec: selector: - app.kubernetes.io/name: ops-demo + app.kubernetes.io/name: agent-demo app.kubernetes.io/component: web ports: - name: http diff --git a/ops/environments/development/ingress.yaml b/ops/environments/development/ingress.yaml index c39ef13..fee8e5b 100644 --- a/ops/environments/development/ingress.yaml +++ b/ops/environments/development/ingress.yaml @@ -1,16 +1,16 @@ apiVersion: networking.k8s.io/v1 kind: Ingress metadata: - name: ops-demo-web + name: agent-demo-web spec: rules: - - host: ops-demo.dev.example.test + - host: agent-demo.dev.example.test http: paths: - path: / pathType: Prefix backend: service: - name: ops-demo-web + name: agent-demo-web port: name: http diff --git a/ops/environments/development/kustomization.yaml b/ops/environments/development/kustomization.yaml index d4947c6..ee89404 100644 --- a/ops/environments/development/kustomization.yaml +++ b/ops/environments/development/kustomization.yaml @@ -1,6 +1,6 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization -namespace: ops-demo-development +namespace: agent-demo-development resources: - ../../deploy/kubernetes/base - namespace.yaml @@ -9,5 +9,5 @@ patches: - path: replicas.patch.yaml - path: runtime-config.patch.yaml images: - - name: ghcr.io/example/ops-demo + - name: ghcr.io/example/agent-demo newTag: development diff --git a/ops/environments/development/namespace.yaml b/ops/environments/development/namespace.yaml index 0cbaf51..afe2307 100644 --- a/ops/environments/development/namespace.yaml +++ b/ops/environments/development/namespace.yaml @@ -1,4 +1,4 @@ apiVersion: v1 kind: Namespace metadata: - name: ops-demo-development + name: agent-demo-development diff --git a/ops/environments/development/replicas.patch.yaml b/ops/environments/development/replicas.patch.yaml index 11959fd..a4e7d18 100644 --- a/ops/environments/development/replicas.patch.yaml +++ b/ops/environments/development/replicas.patch.yaml @@ -1,6 +1,6 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: ops-demo-web + name: agent-demo-web spec: replicas: 1 diff --git a/ops/environments/development/runtime-config.patch.yaml b/ops/environments/development/runtime-config.patch.yaml index 3297a80..c2e8b14 100644 --- a/ops/environments/development/runtime-config.patch.yaml +++ b/ops/environments/development/runtime-config.patch.yaml @@ -1,7 +1,7 @@ apiVersion: v1 kind: ConfigMap metadata: - name: ops-demo-runtime + name: agent-demo-runtime data: APP_ENV: development APP_RELEASE: development diff --git a/ops/environments/production/ingress.yaml b/ops/environments/production/ingress.yaml index d0e979a..2e5078c 100644 --- a/ops/environments/production/ingress.yaml +++ b/ops/environments/production/ingress.yaml @@ -1,16 +1,16 @@ apiVersion: networking.k8s.io/v1 kind: Ingress metadata: - name: ops-demo-web + name: agent-demo-web spec: rules: - - host: ops-demo.example.test + - host: agent-demo.example.test http: paths: - path: / pathType: Prefix backend: service: - name: ops-demo-web + name: agent-demo-web port: name: http diff --git a/ops/environments/production/kustomization.yaml b/ops/environments/production/kustomization.yaml index feed698..cc43785 100644 --- a/ops/environments/production/kustomization.yaml +++ b/ops/environments/production/kustomization.yaml @@ -1,6 +1,6 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization -namespace: ops-demo-production +namespace: agent-demo-production resources: - ../../deploy/kubernetes/base - namespace.yaml @@ -10,5 +10,5 @@ patches: - path: runtime-config.patch.yaml - path: resources.patch.yaml images: - - name: ghcr.io/example/ops-demo + - name: ghcr.io/example/agent-demo digest: sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff diff --git a/ops/environments/production/namespace.yaml b/ops/environments/production/namespace.yaml index 650778c..7e5d7d5 100644 --- a/ops/environments/production/namespace.yaml +++ b/ops/environments/production/namespace.yaml @@ -1,4 +1,4 @@ apiVersion: v1 kind: Namespace metadata: - name: ops-demo-production + name: agent-demo-production diff --git a/ops/environments/production/replicas.patch.yaml b/ops/environments/production/replicas.patch.yaml index 173217b..7c7ba2e 100644 --- a/ops/environments/production/replicas.patch.yaml +++ b/ops/environments/production/replicas.patch.yaml @@ -1,6 +1,6 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: ops-demo-web + name: agent-demo-web spec: replicas: 3 diff --git a/ops/environments/production/resources.patch.yaml b/ops/environments/production/resources.patch.yaml index 735608a..43cb3db 100644 --- a/ops/environments/production/resources.patch.yaml +++ b/ops/environments/production/resources.patch.yaml @@ -1,7 +1,7 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: ops-demo-web + name: agent-demo-web spec: template: spec: diff --git a/ops/environments/production/runtime-config.patch.yaml b/ops/environments/production/runtime-config.patch.yaml index 6513e37..a9968ce 100644 --- a/ops/environments/production/runtime-config.patch.yaml +++ b/ops/environments/production/runtime-config.patch.yaml @@ -1,7 +1,7 @@ apiVersion: v1 kind: ConfigMap metadata: - name: ops-demo-runtime + name: agent-demo-runtime data: APP_ENV: production APP_RELEASE: replace-with-image-digest diff --git a/ops/environments/staging/ingress.yaml b/ops/environments/staging/ingress.yaml index 6452701..668b556 100644 --- a/ops/environments/staging/ingress.yaml +++ b/ops/environments/staging/ingress.yaml @@ -1,16 +1,16 @@ apiVersion: networking.k8s.io/v1 kind: Ingress metadata: - name: ops-demo-web + name: agent-demo-web spec: rules: - - host: ops-demo.staging.example.test + - host: agent-demo.staging.example.test http: paths: - path: / pathType: Prefix backend: service: - name: ops-demo-web + name: agent-demo-web port: name: http diff --git a/ops/environments/staging/kustomization.yaml b/ops/environments/staging/kustomization.yaml index 455e2bd..c70def3 100644 --- a/ops/environments/staging/kustomization.yaml +++ b/ops/environments/staging/kustomization.yaml @@ -1,6 +1,6 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization -namespace: ops-demo-staging +namespace: agent-demo-staging resources: - ../../deploy/kubernetes/base - namespace.yaml @@ -9,5 +9,5 @@ patches: - path: replicas.patch.yaml - path: runtime-config.patch.yaml images: - - name: ghcr.io/example/ops-demo + - name: ghcr.io/example/agent-demo newTag: staging diff --git a/ops/environments/staging/namespace.yaml b/ops/environments/staging/namespace.yaml index a49232a..604f3e4 100644 --- a/ops/environments/staging/namespace.yaml +++ b/ops/environments/staging/namespace.yaml @@ -1,4 +1,4 @@ apiVersion: v1 kind: Namespace metadata: - name: ops-demo-staging + name: agent-demo-staging diff --git a/ops/environments/staging/replicas.patch.yaml b/ops/environments/staging/replicas.patch.yaml index 9ca23e5..08102a4 100644 --- a/ops/environments/staging/replicas.patch.yaml +++ b/ops/environments/staging/replicas.patch.yaml @@ -1,6 +1,6 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: ops-demo-web + name: agent-demo-web spec: replicas: 2 diff --git a/ops/environments/staging/runtime-config.patch.yaml b/ops/environments/staging/runtime-config.patch.yaml index d60b34a..8293a54 100644 --- a/ops/environments/staging/runtime-config.patch.yaml +++ b/ops/environments/staging/runtime-config.patch.yaml @@ -1,7 +1,7 @@ apiVersion: v1 kind: ConfigMap metadata: - name: ops-demo-runtime + name: agent-demo-runtime data: APP_ENV: staging APP_RELEASE: staging diff --git a/ops/nix/hosts/builder.nix b/ops/nix/hosts/builder.nix index 32c1bc8..19ceac2 100644 --- a/ops/nix/hosts/builder.nix +++ b/ops/nix/hosts/builder.nix @@ -5,5 +5,5 @@ ../profiles/deployer.nix ]; - networking.hostName = "ops-demo-builder"; + networking.hostName = "agent-demo-builder"; } diff --git a/ops/observability/alerts/api-availability.yaml b/ops/observability/alerts/api-availability.yaml index a74a385..77f7894 100644 --- a/ops/observability/alerts/api-availability.yaml +++ b/ops/observability/alerts/api-availability.yaml @@ -1,10 +1,10 @@ groups: - - name: ops-demo + - name: agent-demo rules: - alert: OpsDemoUnavailable - expr: up{job="ops-demo"} == 0 + expr: up{job="agent-demo"} == 0 for: 2m labels: severity: page annotations: - summary: The ops-demo web service cannot be scraped. + summary: The agent-demo web service cannot be scraped. diff --git a/ops/observability/dashboards/agent-demo-overview.json b/ops/observability/dashboards/agent-demo-overview.json new file mode 100644 index 0000000..0351ea6 --- /dev/null +++ b/ops/observability/dashboards/agent-demo-overview.json @@ -0,0 +1,20 @@ +{ + "annotations": { "list": [] }, + "editable": true, + "panels": [ + { + "datasource": { "type": "prometheus", "uid": "prometheus" }, + "fieldConfig": { "defaults": {}, "overrides": [] }, + "gridPos": { "h": 8, "w": 12, "x": 0, "y": 0 }, + "id": 1, + "targets": [{ "expr": "agent_demo_requests_total", "refId": "A" }], + "title": "Harness requests handled", + "type": "stat" + } + ], + "schemaVersion": 39, + "tags": ["agent-demo"], + "title": "Agent harness overview", + "uid": "agent-demo-overview", + "version": 1 +} diff --git a/ops/observability/grafana/provisioning/dashboards.yaml b/ops/observability/grafana/provisioning/dashboards.yaml index ae1137b..bc01b1c 100644 --- a/ops/observability/grafana/provisioning/dashboards.yaml +++ b/ops/observability/grafana/provisioning/dashboards.yaml @@ -1,7 +1,7 @@ apiVersion: 1 providers: - - name: ops-demo - folder: Ops demo + - name: agent-demo + folder: Agent demo type: file options: path: /var/lib/grafana/dashboards diff --git a/ops/observability/metrics/prometheus.yaml b/ops/observability/metrics/prometheus.yaml index 1fdd61a..0255405 100644 --- a/ops/observability/metrics/prometheus.yaml +++ b/ops/observability/metrics/prometheus.yaml @@ -5,7 +5,7 @@ rule_files: - /etc/prometheus/rules/*.yaml scrape_configs: - - job_name: ops-demo + - job_name: agent-demo metrics_path: /api/metrics static_configs: - targets: ["web:3000"] diff --git a/oxlint.config.ts b/oxlint.config.ts index d1b914d..f7485aa 100644 --- a/oxlint.config.ts +++ b/oxlint.config.ts @@ -3,7 +3,26 @@ import { defineConfig } from "oxlint"; export default defineConfig({ extends: [recommended], - ignorePatterns: ["**/*.sops.yaml"], + ignorePatterns: ["**/*.sops.yaml", "**/routeTree.gen.ts", "vendor/**"], + overrides: [ + { + files: ["apps/web/**/*.ts"], + rules: { "effecttsgo/duplicate-package": "off" }, + }, + { + files: ["apps/web/public/**/*.js", "tests/smoke.test.ts"], + rules: { + "effecttsgo/async-function": "off", + "effecttsgo/global-date": "off", + "effecttsgo/global-fetch": "off", + "effecttsgo/global-random": "off", + "effecttsgo/global-timers": "off", + "effecttsgo/new-promise": "off", + "effecttsgo/node-builtin-import": "off", + "effecttsgo/process-env": "off", + }, + }, + ], rules: { "max-lines": [ "error", diff --git a/package.json b/package.json index 4ec4503..43d9efc 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "ops-monorepo-demo", + "name": "effect-agent-harness-demo", "private": true, "workspaces": { "packages": [ @@ -8,67 +8,59 @@ ], "catalog": { "@effect/platform-bun": "4.0.0-beta.102", + "@effect/platform-node": "4.0.0-beta.102", "@effect/vitest": "4.0.0-beta.102", + "@tauri-apps/cli": "^2.10.0", "@types/bun": "^1.3.10", "@types/node": "^24.0.0", + "alchemy": "2.0.0-beta.70", "alchemy-sops": "0.8.1", "effect": "4.0.0-beta.102", "typescript": "^7.0.2", - "vitest": "^4.1.6", - "dotenv": "^17.2.2", - "zod": "^4.1.13", - "lucide-react": "^1.7.0", - "next-themes": "^0.4.6", - "sonner": "^2.0.5", - "@libsql/client": "0.17.2", - "libsql": "0.5.22", - "@orpc/server": "^1.12.2", - "@orpc/client": "^1.12.2", - "@orpc/openapi": "^1.12.2", - "@orpc/zod": "^1.12.2", - "@orpc/tanstack-query": "^1.13.6", - "better-auth": "1.5.5", - "@tanstack/react-form": "^1.28.0", - "@polar-sh/better-auth": "^1.8.3", - "@types/react-dom": "^19.2.3", - "alchemy": "2.0.0-beta.66", - "@better-auth/expo": "1.5.5", - "drizzle-orm": "^0.45.1", - "@effect/platform-node": "4.0.0-beta.102" + "vite": "^8.2.2", + "vitest": "^4.1.6" } }, "type": "module", "scripts": { + "cli": "bun apps/cli/src/main.ts", "dev": "bun run --cwd apps/web dev", - "check": "tsc && bun run --filter '@ops-demo/web' typecheck && bun run --filter '@repo/web-core' typecheck", + "harnessd": "bun apps/harnessd/src/server.ts", + "check": "bun run lint:boundaries && tsc && bun run --filter '*' typecheck", + "lint:boundaries": "depcruise apps packages tests", + "check:rust": "cargo check --workspace", "generate:bun-nix": "bun2nix -o bun.nix", "test": "vitest run", + "test:rust": "cargo test --workspace", "test:watch": "vitest", - "lint": "oxlint", + "web": "bun apps/web/src/server.ts", + "lint": "oxlint apps packages tests oxlint.config.ts vitest.config.ts", "fmt": "oxfmt", "fmt:check": "oxfmt --check", "prepare": "effect-tsgo patch --no-typescript --oxlint" }, "devDependencies": { + "@effect/platform-bun": "catalog:", + "@effect/platform-node": "catalog:", "@effect/tsgo": "0.36.1", "@repo/tooling": "workspace:*", + "@swc/core": "^1.16.2", "@types/bun": "catalog:", "@types/node": "catalog:", + "alchemy": "catalog:", "bun2nix": "^2.1.2", + "dependency-cruiser": "18.2.0", + "effect": "catalog:", "oxfmt": "^0.62.0", "oxlint": "1.77.0", "oxlint-tsgolint": "^7.0.2001", "typescript": "7.0.2", - "vitest": "catalog:", - "@cloudflare/workers-types": "^4.20251213.0", - "turbo": "^2.8.12", - "alchemy": "catalog:", - "effect": "catalog:", - "@effect/platform-bun": "catalog:", - "@effect/platform-node": "catalog:" + "vitest": "catalog:" }, "overrides": { - "@effect/platform-node-shared": "4.0.0-beta.102" + "@effect/platform-node-shared": "4.0.0-beta.102", + "@effect/sql-d1": "4.0.0-beta.102", + "@effect/sql-sqlite-do": "4.0.0-beta.102" }, "engines": { "node": ">=24" diff --git a/packages/agent-core/package.json b/packages/agent-core/package.json new file mode 100644 index 0000000..5788d43 --- /dev/null +++ b/packages/agent-core/package.json @@ -0,0 +1,23 @@ +{ + "name": "@repo/agent-core", + "version": "0.1.0", + "private": true, + "description": "Effect-native domain and orchestration for the agent harness demo", + "type": "module", + "imports": { + "#*": "./src/*" + }, + "exports": { + ".": "./src/index.ts" + }, + "scripts": { + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "effect": "catalog:" + }, + "devDependencies": { + "@repo/tooling": "workspace:*", + "typescript": "catalog:" + } +} diff --git a/packages/agent-core/src/domain/events.ts b/packages/agent-core/src/domain/events.ts new file mode 100644 index 0000000..c2018cb --- /dev/null +++ b/packages/agent-core/src/domain/events.ts @@ -0,0 +1,57 @@ +import { Schema } from "effect"; + +import { RunId } from "./ids.ts"; +import { ToolCall, ToolResult } from "./model.ts"; +import { Goal } from "./text.ts"; +import { AgentFailure } from "../errors.ts"; + +const EventFields = { + at: Schema.Finite, + runId: RunId, +}; + +export class RunStarted extends Schema.TaggedClass()("RunStarted", { + ...EventFields, + goal: Goal, +}) {} + +export class ToolRequested extends Schema.TaggedClass()( + "ToolRequested", + { + ...EventFields, + call: ToolCall, + step: Schema.Natural, + }, +) {} + +export class ToolCompleted extends Schema.TaggedClass()( + "ToolCompleted", + { + ...EventFields, + result: ToolResult, + step: Schema.Natural, + }, +) {} + +export class RunCompleted extends Schema.TaggedClass()( + "RunCompleted", + { + ...EventFields, + answer: Schema.String, + steps: Schema.Natural, + }, +) {} + +export class RunFailed extends Schema.TaggedClass()("RunFailed", { + ...EventFields, + error: AgentFailure, +}) {} + +export const AgentEvent = Schema.Union([ + RunStarted, + ToolRequested, + ToolCompleted, + RunCompleted, + RunFailed, +]); +export type AgentEvent = typeof AgentEvent.Type; diff --git a/packages/agent-core/src/domain/ids.ts b/packages/agent-core/src/domain/ids.ts new file mode 100644 index 0000000..a2c0c5b --- /dev/null +++ b/packages/agent-core/src/domain/ids.ts @@ -0,0 +1,13 @@ +import { Schema } from "effect"; + +import { normalizedBoundedString } from "./strings.ts"; + +export const RunId = normalizedBoundedString(1, 128).pipe( + Schema.brand("RunId"), +); +export type RunId = typeof RunId.Type; + +export const ToolCallId = normalizedBoundedString(1, 256).pipe( + Schema.brand("ToolCallId"), +); +export type ToolCallId = typeof ToolCallId.Type; diff --git a/packages/agent-core/src/domain/model.ts b/packages/agent-core/src/domain/model.ts new file mode 100644 index 0000000..3308697 --- /dev/null +++ b/packages/agent-core/src/domain/model.ts @@ -0,0 +1,35 @@ +import { Schema } from "effect"; + +import { ToolCallId } from "./ids.ts"; +import { Goal } from "./text.ts"; + +export class ToolCall extends Schema.Class("agent/ToolCall")({ + id: ToolCallId, + input: Schema.Json, + name: Schema.NonEmptyString, +}) {} + +export class ToolResult extends Schema.Class("agent/ToolResult")({ + callId: ToolCallId, + output: Schema.Json, +}) {} + +export class ModelContext extends Schema.Class( + "agent/ModelContext", +)({ + goal: Goal, + instructions: Schema.NonEmptyString, + step: Schema.Natural, + toolResults: Schema.Array(ToolResult), +}) {} + +export class UseTool extends Schema.TaggedClass()("UseTool", { + call: ToolCall, +}) {} + +export class Finish extends Schema.TaggedClass()("Finish", { + answer: Schema.String, +}) {} + +export const ModelDecision = Schema.Union([UseTool, Finish]); +export type ModelDecision = typeof ModelDecision.Type; diff --git a/packages/agent-core/src/domain/run.ts b/packages/agent-core/src/domain/run.ts new file mode 100644 index 0000000..feb5a38 --- /dev/null +++ b/packages/agent-core/src/domain/run.ts @@ -0,0 +1,21 @@ +import { Schema } from "effect"; + +import { AgentEvent } from "./events.ts"; +import { RunId } from "./ids.ts"; +import { Goal } from "./text.ts"; + +export class RunRequest extends Schema.Class("agent/RunRequest")({ + goal: Goal, + id: RunId, +}) {} + +export class RunSummary extends Schema.Class("agent/RunSummary")({ + answer: Schema.String, + id: RunId, + steps: Schema.Natural, +}) {} + +export class RunReport extends Schema.Class("agent/RunReport")({ + events: Schema.Array(AgentEvent), + summary: RunSummary, +}) {} diff --git a/packages/agent-core/src/domain/strings.ts b/packages/agent-core/src/domain/strings.ts new file mode 100644 index 0000000..fb5ac15 --- /dev/null +++ b/packages/agent-core/src/domain/strings.ts @@ -0,0 +1,9 @@ +import { Schema, SchemaGetter } from "effect"; + +export const normalizedBoundedString = (minimum: number, maximum: number) => + Schema.String.check(Schema.isLengthBetween(minimum, maximum)).pipe( + Schema.decode({ + decode: SchemaGetter.transform((value) => value.trim()), + encode: SchemaGetter.transform((value) => value.trim()), + }), + ); diff --git a/packages/agent-core/src/domain/text.ts b/packages/agent-core/src/domain/text.ts new file mode 100644 index 0000000..7c3bd8e --- /dev/null +++ b/packages/agent-core/src/domain/text.ts @@ -0,0 +1,4 @@ +import { normalizedBoundedString } from "./strings.ts"; + +export const Goal = normalizedBoundedString(1, 4_096); +export type Goal = typeof Goal.Type; diff --git a/packages/agent-core/src/errors.ts b/packages/agent-core/src/errors.ts new file mode 100644 index 0000000..e2ba5c2 --- /dev/null +++ b/packages/agent-core/src/errors.ts @@ -0,0 +1,40 @@ +import { Schema } from "effect"; + +import { RunId } from "./domain/ids.ts"; + +export class ModelFailure extends Schema.TaggedErrorClass()( + "ModelFailure", + { reason: Schema.String }, +) {} + +export class ToolFailure extends Schema.TaggedErrorClass()( + "ToolFailure", + { + reason: Schema.String, + tool: Schema.String, + }, +) {} + +export class ToolDenied extends Schema.TaggedErrorClass()( + "ToolDenied", + { + reason: Schema.String, + tool: Schema.String, + }, +) {} + +export class StepLimitExceeded extends Schema.TaggedErrorClass()( + "StepLimitExceeded", + { + limit: Schema.Natural, + runId: RunId, + }, +) {} + +export const AgentFailure = Schema.Union([ + ModelFailure, + ToolFailure, + ToolDenied, + StepLimitExceeded, +]); +export type AgentError = typeof AgentFailure.Type; diff --git a/packages/agent-core/src/index.ts b/packages/agent-core/src/index.ts new file mode 100644 index 0000000..47b4a35 --- /dev/null +++ b/packages/agent-core/src/index.ts @@ -0,0 +1,32 @@ +export { + RunCompleted, + RunFailed, + RunStarted, + ToolCompleted, + ToolRequested, + AgentEvent, +} from "./domain/events.ts"; +export { RunId, ToolCallId } from "./domain/ids.ts"; +export { + Finish, + ModelContext, + ModelDecision, + ToolCall, + ToolResult, + UseTool, +} from "./domain/model.ts"; +export { RunReport, RunRequest, RunSummary } from "./domain/run.ts"; +export { Goal } from "./domain/text.ts"; +export { + AgentFailure, + ModelFailure, + StepLimitExceeded, + ToolDenied, + ToolFailure, + type AgentError, +} from "./errors.ts"; +export { AgentHarness } from "./services/agent-harness.ts"; +export { AgentModel } from "./services/agent-model.ts"; +export { HarnessConfig } from "./services/harness-config.ts"; +export { RunJournal } from "./services/run-journal.ts"; +export { ToolRunner } from "./services/tool-runner.ts"; diff --git a/packages/agent-core/src/services/agent-harness.ts b/packages/agent-core/src/services/agent-harness.ts new file mode 100644 index 0000000..c67fc5d --- /dev/null +++ b/packages/agent-core/src/services/agent-harness.ts @@ -0,0 +1,120 @@ +import { Clock, Context, Effect, Layer } from "effect"; + +import { + RunCompleted, + RunFailed, + RunStarted, + ToolCompleted, + ToolRequested, +} from "#domain/events.ts"; +import { ModelContext } from "#domain/model.ts"; +import { RunReport, RunSummary, type RunRequest } from "#domain/run.ts"; +import { StepLimitExceeded, type AgentError } from "#errors.ts"; + +import { AgentModel } from "./agent-model.ts"; +import { HarnessConfig } from "./harness-config.ts"; +import { RunJournal } from "./run-journal.ts"; +import { ToolRunner } from "./tool-runner.ts"; + +export class AgentHarness extends Context.Service< + AgentHarness, + { + readonly run: (request: RunRequest) => Effect.Effect; + } +>()("@repo/agent-core/services/AgentHarness") { + static readonly layerNoDeps = Layer.effect( + AgentHarness, + Effect.gen(function* () { + const config = yield* HarnessConfig; + const journal = yield* RunJournal; + const model = yield* AgentModel; + const tools = yield* ToolRunner; + + const execute = Effect.fn("AgentHarness.execute")(function* ( + request: RunRequest, + ) { + let context = new ModelContext({ + goal: request.goal, + instructions: config.systemPrompt, + step: 0, + toolResults: [], + }); + + for (let step = 1; step <= config.maxSteps; step += 1) { + const decision = yield* model.decide(context); + const at = yield* Clock.currentTimeMillis; + + if (decision._tag === "Finish") { + const summary = new RunSummary({ + answer: decision.answer, + id: request.id, + steps: step, + }); + const events = yield* journal.append( + new RunCompleted({ + answer: summary.answer, + at, + runId: request.id, + steps: summary.steps, + }), + ); + return new RunReport({ events, summary }); + } + + yield* journal.append( + new ToolRequested({ + at, + call: decision.call, + runId: request.id, + step, + }), + ); + const result = yield* tools.execute(decision.call); + yield* journal.append( + new ToolCompleted({ + at: yield* Clock.currentTimeMillis, + result, + runId: request.id, + step, + }), + ); + context = new ModelContext({ + goal: context.goal, + instructions: context.instructions, + step, + toolResults: [...context.toolResults, result], + }); + } + + return yield* new StepLimitExceeded({ + limit: config.maxSteps, + runId: request.id, + }); + }); + + const run = Effect.fn("AgentHarness.run")(function* ( + request: RunRequest, + ) { + yield* journal.append( + new RunStarted({ + at: yield* Clock.currentTimeMillis, + goal: request.goal, + runId: request.id, + }), + ); + + return yield* execute(request).pipe( + Effect.tapError((error) => + Clock.currentTimeMillis.pipe( + Effect.flatMap((at) => + journal.append(new RunFailed({ at, error, runId: request.id })), + ), + ), + ), + ); + }); + + return AgentHarness.of({ run }); + }), + ); +} diff --git a/packages/agent-core/src/services/agent-model.ts b/packages/agent-core/src/services/agent-model.ts new file mode 100644 index 0000000..178b595 --- /dev/null +++ b/packages/agent-core/src/services/agent-model.ts @@ -0,0 +1,13 @@ +import { Context, Effect } from "effect"; + +import type { ModelContext, ModelDecision } from "#domain/model.ts"; +import type { ModelFailure } from "#errors.ts"; + +export class AgentModel extends Context.Service< + AgentModel, + { + readonly decide: ( + context: ModelContext, + ) => Effect.Effect; + } +>()("@repo/agent-core/services/AgentModel") {} diff --git a/packages/agent-core/src/services/harness-config.ts b/packages/agent-core/src/services/harness-config.ts new file mode 100644 index 0000000..75bb204 --- /dev/null +++ b/packages/agent-core/src/services/harness-config.ts @@ -0,0 +1,36 @@ +import { Config, Context, Effect, Layer, Schema } from "effect"; + +const MaxSteps = Schema.Int.check( + Schema.isGreaterThan(0), + Schema.isLessThanOrEqualTo(64), +); + +export class HarnessConfig extends Context.Service< + HarnessConfig, + { + readonly maxSteps: number; + readonly systemPrompt: string; + } +>()("@repo/agent-core/services/HarnessConfig") { + static readonly layer = Layer.effect( + HarnessConfig, + Effect.gen(function* () { + const maxSteps = yield* Config.schema(MaxSteps, "AGENT_MAX_STEPS").pipe( + Config.withDefault(8), + ); + const systemPrompt = yield* Config.string("AGENT_SYSTEM_PROMPT").pipe( + Config.withDefault("Solve the goal with the smallest useful toolset."), + ); + + return HarnessConfig.of({ maxSteps, systemPrompt }); + }), + ); + + static readonly layerDemo = Layer.succeed( + HarnessConfig, + HarnessConfig.of({ + maxSteps: 4, + systemPrompt: "You are the deterministic demo agent.", + }), + ); +} diff --git a/packages/agent-core/src/services/run-journal.ts b/packages/agent-core/src/services/run-journal.ts new file mode 100644 index 0000000..c0436e2 --- /dev/null +++ b/packages/agent-core/src/services/run-journal.ts @@ -0,0 +1,86 @@ +import { Context, Effect, Layer, PubSub, Ref, Stream } from "effect"; + +import type { AgentEvent } from "#domain/events.ts"; +import type { RunId } from "#domain/ids.ts"; + +interface JournalEntry { + readonly active: boolean; + readonly events: ReadonlyArray; +} +type JournalState = ReadonlyMap; +interface MemoryOptions { + readonly maxRuns: number; +} + +export class RunJournal extends Context.Service< + RunJournal, + { + readonly append: ( + event: AgentEvent, + ) => Effect.Effect>; + readonly changes: (runId: RunId) => Stream.Stream; + readonly read: (runId: RunId) => Effect.Effect>; + } +>()("@repo/agent-core/services/RunJournal") { + static readonly layerMemoryWith = (options: MemoryOptions) => { + const maxRuns = Math.max(1, Math.floor(options.maxRuns)); + + return Layer.effect( + RunJournal, + Effect.gen(function* () { + const state = yield* Ref.make(new Map()); + const events = yield* Effect.acquireRelease( + PubSub.bounded(256), + PubSub.shutdown, + ); + + const append = Effect.fn("RunJournal.append")(function* ( + event: AgentEvent, + ) { + const history = yield* Ref.modify(state, (current) => { + const next = new Map(current); + const previous = current.get(event.runId); + const history = [...(previous?.events ?? []), event]; + const active = + event._tag !== "RunCompleted" && event._tag !== "RunFailed"; + next.set(event.runId, { + active, + events: history, + }); + + while (next.size > maxRuns) { + let evicted: RunId | undefined; + for (const [runId, entry] of next) { + if (runId !== event.runId && !entry.active) { + evicted = runId; + break; + } + } + if (evicted === undefined && !active) evicted = event.runId; + if (evicted === undefined) break; + next.delete(evicted); + } + return [history, next]; + }); + yield* PubSub.publish(events, event); + return history; + }); + + const read = Effect.fn("RunJournal.read")((runId: RunId) => + Ref.get(state).pipe( + Effect.map((current) => current.get(runId)?.events ?? []), + ), + ); + + const changes = (runId: RunId) => + Stream.fromPubSub(events).pipe( + Stream.filter((event) => event.runId === runId), + ); + + return RunJournal.of({ append, changes, read }); + }), + ); + }; + + static readonly layerMemory = RunJournal.layerMemoryWith({ maxRuns: 256 }); +} diff --git a/packages/agent-core/src/services/tool-runner.ts b/packages/agent-core/src/services/tool-runner.ts new file mode 100644 index 0000000..b80711b --- /dev/null +++ b/packages/agent-core/src/services/tool-runner.ts @@ -0,0 +1,13 @@ +import { Context, Effect } from "effect"; + +import type { ToolCall, ToolResult } from "#domain/model.ts"; +import type { ToolDenied, ToolFailure } from "#errors.ts"; + +export class ToolRunner extends Context.Service< + ToolRunner, + { + readonly execute: ( + call: ToolCall, + ) => Effect.Effect; + } +>()("@repo/agent-core/services/ToolRunner") {} diff --git a/packages/agent-core/tsconfig.json b/packages/agent-core/tsconfig.json new file mode 100644 index 0000000..3e88b75 --- /dev/null +++ b/packages/agent-core/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "@repo/tooling/tsconfig", + "compilerOptions": { + "paths": { + "#*": ["./src/*"] + } + }, + "include": ["src/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/packages/agent-demo/package.json b/packages/agent-demo/package.json new file mode 100644 index 0000000..1609ea4 --- /dev/null +++ b/packages/agent-demo/package.json @@ -0,0 +1,24 @@ +{ + "name": "@repo/agent-demo", + "version": "0.1.0", + "private": true, + "description": "Provider-free Effect layers for the agent harness demo", + "type": "module", + "imports": { + "#*": "./src/*" + }, + "exports": { + ".": "./src/index.ts" + }, + "scripts": { + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@repo/agent-core": "workspace:*", + "effect": "catalog:" + }, + "devDependencies": { + "@repo/tooling": "workspace:*", + "typescript": "catalog:" + } +} diff --git a/packages/agent-demo/src/index.ts b/packages/agent-demo/src/index.ts new file mode 100644 index 0000000..511c0ab --- /dev/null +++ b/packages/agent-demo/src/index.ts @@ -0,0 +1,8 @@ +export { DemoHarnessLayer } from "./layer.ts"; +export { DemoAgentModelLayer } from "./model.ts"; +export { + DescribeHarnessInput, + DescribeHarnessOutput, + DescribeHarnessToolName, +} from "./protocol.ts"; +export { DemoToolRunnerLayer } from "./tool-runner.ts"; diff --git a/packages/agent-demo/src/layer.ts b/packages/agent-demo/src/layer.ts new file mode 100644 index 0000000..58aaf89 --- /dev/null +++ b/packages/agent-demo/src/layer.ts @@ -0,0 +1,16 @@ +import { AgentHarness, HarnessConfig, RunJournal } from "@repo/agent-core"; +import { Layer } from "effect"; + +import { DemoAgentModelLayer } from "#model.ts"; +import { DemoToolRunnerLayer } from "#tool-runner.ts"; + +const dependencies = Layer.mergeAll( + HarnessConfig.layerDemo, + RunJournal.layerMemory, + DemoAgentModelLayer, + DemoToolRunnerLayer, +); + +export const DemoHarnessLayer = AgentHarness.layerNoDeps.pipe( + Layer.provide(dependencies), +); diff --git a/packages/agent-demo/src/model.ts b/packages/agent-demo/src/model.ts new file mode 100644 index 0000000..1d680c5 --- /dev/null +++ b/packages/agent-demo/src/model.ts @@ -0,0 +1,59 @@ +import { + AgentModel, + Finish, + ModelFailure, + ToolCall, + ToolCallId, + UseTool, +} from "@repo/agent-core"; +import { Effect, Layer, Schema } from "effect"; + +import { + DescribeHarnessInput, + DescribeHarnessOutput, + DescribeHarnessToolName, +} from "#protocol.ts"; + +const encodeInput = Schema.encodeEffect(DescribeHarnessInput); +const decodeOutput = Schema.decodeUnknownEffect(DescribeHarnessOutput); + +const modelFailure = (reason: unknown) => + new ModelFailure({ reason: String(reason) }); + +export const DemoAgentModelLayer = Layer.succeed( + AgentModel, + AgentModel.of({ + decide: Effect.fn("DemoAgentModel.decide")(function* (context) { + if (context.toolResults.length === 0) { + const input = yield* encodeInput( + new DescribeHarnessInput({ goal: context.goal }), + ).pipe(Effect.mapError(modelFailure)); + + return new UseTool({ + call: new ToolCall({ + id: ToolCallId.make("demo-describe-harness"), + input, + name: DescribeHarnessToolName, + }), + }); + } + + const latest = context.toolResults[context.toolResults.length - 1]; + if (latest === undefined) { + return yield* modelFailure("The demo tool result is missing"); + } + + const report = yield* decodeOutput(latest.output).pipe( + Effect.mapError(modelFailure), + ); + + return new Finish({ + answer: [ + report.summary, + `Capabilities: ${report.capabilities.join(", ")}.`, + `Requested focus: ${report.focus}`, + ].join("\n\n"), + }); + }), + }), +); diff --git a/packages/agent-demo/src/protocol.ts b/packages/agent-demo/src/protocol.ts new file mode 100644 index 0000000..98cc72e --- /dev/null +++ b/packages/agent-demo/src/protocol.ts @@ -0,0 +1,17 @@ +import { Schema } from "effect"; + +export const DescribeHarnessToolName = "DescribeHarness" as const; + +export class DescribeHarnessInput extends Schema.Class( + "demo/DescribeHarnessInput", +)({ + goal: Schema.NonEmptyString, +}) {} + +export class DescribeHarnessOutput extends Schema.Class( + "demo/DescribeHarnessOutput", +)({ + capabilities: Schema.Array(Schema.NonEmptyString), + focus: Schema.NonEmptyString, + summary: Schema.NonEmptyString, +}) {} diff --git a/packages/agent-demo/src/tool-runner.ts b/packages/agent-demo/src/tool-runner.ts new file mode 100644 index 0000000..3d34de5 --- /dev/null +++ b/packages/agent-demo/src/tool-runner.ts @@ -0,0 +1,57 @@ +import { + type ToolCall, + ToolDenied, + ToolFailure, + ToolResult, + ToolRunner, +} from "@repo/agent-core"; +import { Effect, Layer, Schema } from "effect"; + +import { + DescribeHarnessInput, + DescribeHarnessOutput, + DescribeHarnessToolName, +} from "#protocol.ts"; + +const decodeInput = Schema.decodeUnknownEffect(DescribeHarnessInput); +const encodeOutput = Schema.encodeEffect(DescribeHarnessOutput); + +export const DemoToolRunnerLayer = Layer.succeed( + ToolRunner, + ToolRunner.of({ + execute: Effect.fn("DemoToolRunner.execute")(function* (call: ToolCall) { + if (call.name !== DescribeHarnessToolName) { + return yield* new ToolDenied({ + reason: "The provider-free demo exposes one read-only tool", + tool: call.name, + }); + } + + const input = yield* decodeInput(call.input).pipe( + Effect.mapError( + (error) => + new ToolFailure({ reason: String(error), tool: call.name }), + ), + ); + const output = yield* encodeOutput( + new DescribeHarnessOutput({ + capabilities: [ + "schema-backed decisions", + "capability services", + "composable layers", + "journaled tool execution", + ], + focus: input.goal, + summary: "The harness completed one typed tool round-trip.", + }), + ).pipe( + Effect.mapError( + (error) => + new ToolFailure({ reason: String(error), tool: call.name }), + ), + ); + + return new ToolResult({ callId: call.id, output }); + }), + }), +); diff --git a/packages/agent-demo/tsconfig.json b/packages/agent-demo/tsconfig.json new file mode 100644 index 0000000..3e88b75 --- /dev/null +++ b/packages/agent-demo/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "@repo/tooling/tsconfig", + "compilerOptions": { + "paths": { + "#*": ["./src/*"] + } + }, + "include": ["src/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/packages/agent-runtime/package.json b/packages/agent-runtime/package.json new file mode 100644 index 0000000..1be3b17 --- /dev/null +++ b/packages/agent-runtime/package.json @@ -0,0 +1,25 @@ +{ + "name": "@repo/agent-runtime", + "version": "0.1.0", + "private": true, + "description": "Effect AI and sandbox adapters for the agent harness", + "type": "module", + "imports": { + "#*": "./src/*" + }, + "exports": { + ".": "./src/index.ts" + }, + "scripts": { + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@repo/agent-core": "workspace:*", + "@repo/sandbox-client": "workspace:*", + "effect": "catalog:" + }, + "devDependencies": { + "@repo/tooling": "workspace:*", + "typescript": "catalog:" + } +} diff --git a/packages/agent-runtime/src/effect-ai-model.ts b/packages/agent-runtime/src/effect-ai-model.ts new file mode 100644 index 0000000..561e3af --- /dev/null +++ b/packages/agent-runtime/src/effect-ai-model.ts @@ -0,0 +1,52 @@ +import { + AgentModel, + Finish, + ModelContext, + ModelFailure, + ToolCall, + ToolCallId, + UseTool, +} from "@repo/agent-core"; +import { Effect, Layer, Schema } from "effect"; +import { LanguageModel } from "effect/unstable/ai"; + +import { ShellToolkit } from "./shell-tool.ts"; + +const encodeModelContext = Schema.encodeEffect( + Schema.fromJsonString(ModelContext), +); + +export const EffectAiModelLayer = Layer.effect( + AgentModel, + Effect.gen(function* () { + const model = yield* LanguageModel.LanguageModel; + const toolkit = yield* ShellToolkit; + + const decide = Effect.fn("EffectAiModel.decide")( + function* (context: ModelContext) { + const prompt = yield* encodeModelContext(context); + const response = yield* model.generateText({ + disableToolCallResolution: true, + prompt, + toolkit, + }); + const call = response.toolCalls[0]; + + if (call !== undefined) { + return new UseTool({ + call: new ToolCall({ + id: ToolCallId.make(call.id), + input: call.params, + name: call.name, + }), + }); + } + + return new Finish({ answer: response.text }); + }, + Effect.mapError((error) => new ModelFailure({ reason: String(error) })), + ); + + return AgentModel.of({ decide }); + }), +); diff --git a/packages/agent-runtime/src/index.ts b/packages/agent-runtime/src/index.ts new file mode 100644 index 0000000..b287316 --- /dev/null +++ b/packages/agent-runtime/src/index.ts @@ -0,0 +1,8 @@ +export { EffectAiModelLayer } from "./effect-ai-model.ts"; +export { SandboxToolRunnerLayer } from "./sandbox-tool-runner.ts"; +export { + ShellParameters, + ShellTool, + ShellToolkit, + ShellToolkitLayer, +} from "./shell-tool.ts"; diff --git a/packages/agent-runtime/src/sandbox-tool-runner.ts b/packages/agent-runtime/src/sandbox-tool-runner.ts new file mode 100644 index 0000000..cb42eb7 --- /dev/null +++ b/packages/agent-runtime/src/sandbox-tool-runner.ts @@ -0,0 +1,60 @@ +import { + type ToolCall, + ToolCallId, + ToolFailure, + ToolResult, + ToolRunner, +} from "@repo/agent-core"; +import { CommandRequest, Sandbox } from "@repo/sandbox-client"; +import { Effect, Layer, Schema } from "effect"; + +import { ShellParameters } from "./shell-tool.ts"; + +const decodeShellParameters = Schema.decodeUnknownEffect(ShellParameters); + +export const SandboxToolRunnerLayer = Layer.effect( + ToolRunner, + Effect.gen(function* () { + const sandbox = yield* Sandbox; + + const execute = Effect.fn("SandboxToolRunner.execute")(function* ( + call: ToolCall, + ) { + if (call.name !== "Shell") { + return yield* new ToolFailure({ + reason: "No adapter is registered for this tool", + tool: call.name, + }); + } + + const request = yield* decodeShellParameters(call.input).pipe( + Effect.mapError( + (error) => + new ToolFailure({ reason: String(error), tool: call.name }), + ), + ); + const output = yield* sandbox + .execute(new CommandRequest(request)) + .pipe( + Effect.mapError( + (error) => + new ToolFailure({ reason: error.reason, tool: call.name }), + ), + ); + + return new ToolResult({ + callId: ToolCallId.make(call.id), + output: { + exitCode: output.exitCode, + stderr: output.stderr, + stderrTruncated: output.stderrTruncated, + stdout: output.stdout, + stdoutTruncated: output.stdoutTruncated, + timedOut: output.timedOut, + }, + }); + }); + + return ToolRunner.of({ execute }); + }), +); diff --git a/packages/agent-runtime/src/shell-tool.ts b/packages/agent-runtime/src/shell-tool.ts new file mode 100644 index 0000000..4c9f792 --- /dev/null +++ b/packages/agent-runtime/src/shell-tool.ts @@ -0,0 +1,40 @@ +import { Sandbox, SandboxError, CommandRequest } from "@repo/sandbox-client"; +import { Effect, Schema } from "effect"; +import { Tool, Toolkit } from "effect/unstable/ai"; + +export const ShellParameters = Schema.Struct({ + args: Schema.Array(Schema.String), + command: Schema.NonEmptyString, + cwd: Schema.String, + maxOutputBytes: Schema.Natural, + timeoutMs: Schema.Natural, +}); + +export const ShellTool = Tool.make("Shell", { + description: "Run one bounded command in the supervised Rust worker", + failure: SandboxError, + failureMode: "return", + parameters: ShellParameters, + success: Schema.Struct({ + exitCode: Schema.NullOr(Schema.Int), + stderr: Schema.String, + stderrTruncated: Schema.Boolean, + stdout: Schema.String, + stdoutTruncated: Schema.Boolean, + timedOut: Schema.Boolean, + }), +}); + +export const ShellToolkit = Toolkit.make(ShellTool); + +export const ShellToolkitLayer = ShellToolkit.toLayer( + Effect.gen(function* () { + const sandbox = yield* Sandbox; + + return ShellToolkit.of({ + Shell: Effect.fn("ShellToolkit.Shell")((parameters) => + sandbox.execute(new CommandRequest(parameters)), + ), + }); + }), +); diff --git a/packages/agent-runtime/tsconfig.json b/packages/agent-runtime/tsconfig.json new file mode 100644 index 0000000..3e88b75 --- /dev/null +++ b/packages/agent-runtime/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "@repo/tooling/tsconfig", + "compilerOptions": { + "paths": { + "#*": ["./src/*"] + } + }, + "include": ["src/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/packages/agent-testkit/package.json b/packages/agent-testkit/package.json new file mode 100644 index 0000000..1ce4ca7 --- /dev/null +++ b/packages/agent-testkit/package.json @@ -0,0 +1,26 @@ +{ + "name": "@repo/agent-testkit", + "version": "0.1.0", + "private": true, + "description": "Deterministic layers for exercising the agent harness", + "type": "module", + "imports": { + "#*": "./src/*" + }, + "exports": { + ".": "./src/index.ts" + }, + "scripts": { + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@repo/agent-core": "workspace:*", + "effect": "catalog:" + }, + "devDependencies": { + "@effect/vitest": "catalog:", + "@repo/tooling": "workspace:*", + "typescript": "catalog:", + "vitest": "catalog:" + } +} diff --git a/packages/agent-testkit/src/fake-tool-runner.ts b/packages/agent-testkit/src/fake-tool-runner.ts new file mode 100644 index 0000000..6868e69 --- /dev/null +++ b/packages/agent-testkit/src/fake-tool-runner.ts @@ -0,0 +1,16 @@ +import { ToolResult, ToolRunner } from "@repo/agent-core"; +import { Effect, Layer } from "effect"; + +export const FakeToolRunnerLayer = Layer.succeed( + ToolRunner, + ToolRunner.of({ + execute: Effect.fn("FakeToolRunner.execute")((call) => + Effect.succeed( + new ToolResult({ + callId: call.id, + output: { echoed: call.input }, + }), + ), + ), + }), +); diff --git a/packages/agent-testkit/src/index.ts b/packages/agent-testkit/src/index.ts new file mode 100644 index 0000000..91333ea --- /dev/null +++ b/packages/agent-testkit/src/index.ts @@ -0,0 +1,3 @@ +export { FakeToolRunnerLayer } from "./fake-tool-runner.ts"; +export { agentTestLayer } from "./layer.ts"; +export { scriptedModelLayer } from "./scripted-model.ts"; diff --git a/packages/agent-testkit/src/layer.ts b/packages/agent-testkit/src/layer.ts new file mode 100644 index 0000000..223f415 --- /dev/null +++ b/packages/agent-testkit/src/layer.ts @@ -0,0 +1,21 @@ +import { + AgentHarness, + HarnessConfig, + RunJournal, + type ModelDecision, +} from "@repo/agent-core"; +import { Layer } from "effect"; + +import { FakeToolRunnerLayer } from "./fake-tool-runner.ts"; +import { scriptedModelLayer } from "./scripted-model.ts"; + +export const agentTestLayer = (decisions: ReadonlyArray) => { + const dependencies = Layer.mergeAll( + HarnessConfig.layerDemo, + RunJournal.layerMemory, + scriptedModelLayer(decisions), + FakeToolRunnerLayer, + ); + + return AgentHarness.layerNoDeps.pipe(Layer.provideMerge(dependencies)); +}; diff --git a/packages/agent-testkit/src/scripted-model.ts b/packages/agent-testkit/src/scripted-model.ts new file mode 100644 index 0000000..93fb9d8 --- /dev/null +++ b/packages/agent-testkit/src/scripted-model.ts @@ -0,0 +1,25 @@ +import { AgentModel, ModelFailure, type ModelDecision } from "@repo/agent-core"; +import { Effect, Layer, Ref } from "effect"; + +export const scriptedModelLayer = (decisions: ReadonlyArray) => + Layer.effect( + AgentModel, + Effect.gen(function* () { + const cursor = yield* Ref.make(0); + + const decide = Effect.fn("ScriptedModel.decide")(function* () { + const index = yield* Ref.getAndUpdate(cursor, (value) => value + 1); + const decision = decisions[index]; + + if (decision === undefined) { + return yield* new ModelFailure({ + reason: `Scripted model exhausted at decision ${index}`, + }); + } + + return decision; + }); + + return AgentModel.of({ decide }); + }), + ); diff --git a/packages/agent-testkit/test/agent-harness.test.ts b/packages/agent-testkit/test/agent-harness.test.ts new file mode 100644 index 0000000..c9e6a45 --- /dev/null +++ b/packages/agent-testkit/test/agent-harness.test.ts @@ -0,0 +1,145 @@ +import { + AgentHarness, + Finish, + Goal, + RunCompleted, + RunId, + RunJournal, + RunRequest, + RunStarted, + ToolCall, + ToolCallId, + UseTool, +} from "@repo/agent-core"; +import { it } from "@effect/vitest"; +import { Effect, Schema } from "effect"; +import { expect } from "vitest"; + +import { agentTestLayer } from "../src/index.ts"; + +const runId = RunId.make("run-demo"); +const toolCallId = ToolCallId.make("call-demo"); + +const TestLayer = agentTestLayer([ + new UseTool({ + call: new ToolCall({ + id: toolCallId, + input: { args: ["hello"], command: "echo" }, + name: "Shell", + }), + }), + new Finish({ answer: "The supervised command completed." }), +]); + +const repeatedToolCall = new UseTool({ + call: new ToolCall({ + id: toolCallId, + input: { args: [], command: "true" }, + name: "Shell", + }), +}); + +it.effect("runs a deterministic tool loop and records its history", () => + Effect.gen(function* () { + const harness = yield* AgentHarness; + const journal = yield* RunJournal; + + const report = yield* harness.run( + new RunRequest({ goal: "Say hello", id: runId }), + ); + const events = yield* journal.read(runId); + + expect(report.summary.answer).toBe("The supervised command completed."); + expect(report.summary.steps).toBe(2); + expect(report.events).toEqual(events); + expect(events.map((event) => event._tag)).toEqual([ + "RunStarted", + "ToolRequested", + "ToolCompleted", + "RunCompleted", + ]); + }).pipe(Effect.provide(TestLayer)), +); + +it.effect("returns a typed error when the step budget is exhausted", () => + Effect.gen(function* () { + const harness = yield* AgentHarness; + const journal = yield* RunJournal; + const error = yield* harness + .run(new RunRequest({ goal: "Never finish", id: runId })) + .pipe(Effect.flip); + const events = yield* journal.read(runId); + + expect(error._tag).toBe("StepLimitExceeded"); + if (error._tag === "StepLimitExceeded") { + expect(error.limit).toBe(4); + } + expect(events.at(-1)?._tag).toBe("RunFailed"); + }).pipe( + Effect.provide( + agentTestLayer([ + repeatedToolCall, + repeatedToolCall, + repeatedToolCall, + repeatedToolCall, + ]), + ), + ), +); + +it.effect("bounds completed histories without evicting an active run", () => + Effect.gen(function* () { + const journal = yield* RunJournal; + const active = RunId.make("run-active"); + const second = RunId.make("run-2"); + const third = RunId.make("run-3"); + + yield* journal.append( + new RunStarted({ at: 0, goal: "Still running", runId: active }), + ); + for (const [index, id] of [second, third].entries()) { + yield* journal.append( + new RunStarted({ at: index, goal: `Goal ${index}`, runId: id }), + ); + yield* journal.append( + new RunCompleted({ answer: "Done", at: index, runId: id, steps: 1 }), + ); + } + + expect(yield* journal.read(active)).toHaveLength(1); + expect(yield* journal.read(second)).toEqual([]); + expect(yield* journal.read(third)).toHaveLength(2); + }).pipe(Effect.provide(RunJournal.layerMemoryWith({ maxRuns: 2 }))), +); + +it.effect("returns a terminal snapshot atomically across eviction", () => + Effect.gen(function* () { + const journal = yield* RunJournal; + const first = RunId.make("run-1"); + + for (const id of [first, RunId.make("run-2"), RunId.make("run-3")]) { + yield* journal.append( + new RunStarted({ at: 0, goal: "Concurrent run", runId: id }), + ); + } + const snapshot = yield* journal.append( + new RunCompleted({ answer: "Done", at: 1, runId: first, steps: 1 }), + ); + + expect(snapshot.map((event) => event._tag)).toEqual([ + "RunStarted", + "RunCompleted", + ]); + expect(yield* journal.read(first)).toEqual([]); + }).pipe(Effect.provide(RunJournal.layerMemoryWith({ maxRuns: 2 }))), +); + +it.effect("trims goals and rejects blank run identifiers", () => + Effect.gen(function* () { + expect(yield* Schema.decodeEffect(Goal)(" inspect layers ")).toBe( + "inspect layers", + ); + const error = yield* Schema.decodeEffect(RunId)(" ").pipe(Effect.flip); + expect(String(error)).toContain("length between 1 and 128"); + }), +); diff --git a/packages/agent-testkit/tsconfig.json b/packages/agent-testkit/tsconfig.json new file mode 100644 index 0000000..b3a00fe --- /dev/null +++ b/packages/agent-testkit/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "@repo/tooling/tsconfig", + "compilerOptions": { + "paths": { + "#*": ["./src/*"] + } + }, + "include": ["src/**/*.ts", "test/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/packages/db/src/migrations/0000_long_wolfpack.sql b/packages/db/src/migrations/0000_long_wolfpack.sql deleted file mode 100644 index ccdf5b3..0000000 --- a/packages/db/src/migrations/0000_long_wolfpack.sql +++ /dev/null @@ -1,58 +0,0 @@ -CREATE TABLE `account` ( - `id` text PRIMARY KEY NOT NULL, - `account_id` text NOT NULL, - `provider_id` text NOT NULL, - `user_id` text NOT NULL, - `access_token` text, - `refresh_token` text, - `id_token` text, - `access_token_expires_at` integer, - `refresh_token_expires_at` integer, - `scope` text, - `password` text, - `created_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL, - `updated_at` integer NOT NULL, - FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade -); ---> statement-breakpoint -CREATE INDEX `account_userId_idx` ON `account` (`user_id`);--> statement-breakpoint -CREATE TABLE `session` ( - `id` text PRIMARY KEY NOT NULL, - `expires_at` integer NOT NULL, - `token` text NOT NULL, - `created_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL, - `updated_at` integer NOT NULL, - `ip_address` text, - `user_agent` text, - `user_id` text NOT NULL, - FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade -); ---> statement-breakpoint -CREATE UNIQUE INDEX `session_token_unique` ON `session` (`token`);--> statement-breakpoint -CREATE INDEX `session_userId_idx` ON `session` (`user_id`);--> statement-breakpoint -CREATE TABLE `user` ( - `id` text PRIMARY KEY NOT NULL, - `name` text NOT NULL, - `email` text NOT NULL, - `email_verified` integer DEFAULT false NOT NULL, - `image` text, - `created_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL, - `updated_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL -); ---> statement-breakpoint -CREATE UNIQUE INDEX `user_email_unique` ON `user` (`email`);--> statement-breakpoint -CREATE TABLE `verification` ( - `id` text PRIMARY KEY NOT NULL, - `identifier` text NOT NULL, - `value` text NOT NULL, - `expires_at` integer NOT NULL, - `created_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL, - `updated_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL -); ---> statement-breakpoint -CREATE INDEX `verification_identifier_idx` ON `verification` (`identifier`);--> statement-breakpoint -CREATE TABLE `todo` ( - `id` integer PRIMARY KEY AUTOINCREMENT NOT NULL, - `text` text NOT NULL, - `completed` integer DEFAULT false NOT NULL -); diff --git a/packages/db/src/migrations/meta/0000_snapshot.json b/packages/db/src/migrations/meta/0000_snapshot.json deleted file mode 100644 index 39d2f9a..0000000 --- a/packages/db/src/migrations/meta/0000_snapshot.json +++ /dev/null @@ -1,402 +0,0 @@ -{ - "version": "6", - "dialect": "sqlite", - "id": "cce619a4-a73e-4f16-b9e5-e7886cd13cb6", - "prevId": "00000000-0000-0000-0000-000000000000", - "tables": { - "account": { - "name": "account", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "account_id": { - "name": "account_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "provider_id": { - "name": "provider_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "access_token": { - "name": "access_token", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "refresh_token": { - "name": "refresh_token", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "id_token": { - "name": "id_token", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "access_token_expires_at": { - "name": "access_token_expires_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "refresh_token_expires_at": { - "name": "refresh_token_expires_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "scope": { - "name": "scope", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "password": { - "name": "password", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(cast(unixepoch('subsecond') * 1000 as integer))" - }, - "updated_at": { - "name": "updated_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "account_userId_idx": { - "name": "account_userId_idx", - "columns": [ - "user_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "account_user_id_user_id_fk": { - "name": "account_user_id_user_id_fk", - "tableFrom": "account", - "tableTo": "user", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "session": { - "name": "session", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "token": { - "name": "token", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(cast(unixepoch('subsecond') * 1000 as integer))" - }, - "updated_at": { - "name": "updated_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "ip_address": { - "name": "ip_address", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "user_agent": { - "name": "user_agent", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "session_token_unique": { - "name": "session_token_unique", - "columns": [ - "token" - ], - "isUnique": true - }, - "session_userId_idx": { - "name": "session_userId_idx", - "columns": [ - "user_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "session_user_id_user_id_fk": { - "name": "session_user_id_user_id_fk", - "tableFrom": "session", - "tableTo": "user", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "user": { - "name": "user", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "email": { - "name": "email", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "email_verified": { - "name": "email_verified", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(cast(unixepoch('subsecond') * 1000 as integer))" - }, - "updated_at": { - "name": "updated_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(cast(unixepoch('subsecond') * 1000 as integer))" - } - }, - "indexes": { - "user_email_unique": { - "name": "user_email_unique", - "columns": [ - "email" - ], - "isUnique": true - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "verification": { - "name": "verification", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "identifier": { - "name": "identifier", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "value": { - "name": "value", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(cast(unixepoch('subsecond') * 1000 as integer))" - }, - "updated_at": { - "name": "updated_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "(cast(unixepoch('subsecond') * 1000 as integer))" - } - }, - "indexes": { - "verification_identifier_idx": { - "name": "verification_identifier_idx", - "columns": [ - "identifier" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - }, - "todo": { - "name": "todo", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": true - }, - "text": { - "name": "text", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "completed": { - "name": "completed", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {}, - "checkConstraints": {} - } - }, - "views": {}, - "enums": {}, - "_meta": { - "schemas": {}, - "tables": {}, - "columns": {} - }, - "internal": { - "indexes": {} - } -} \ No newline at end of file diff --git a/packages/db/src/migrations/meta/_journal.json b/packages/db/src/migrations/meta/_journal.json deleted file mode 100644 index 0bf02f2..0000000 --- a/packages/db/src/migrations/meta/_journal.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "version": "7", - "dialect": "sqlite", - "entries": [ - { - "idx": 0, - "version": "6", - "when": 1775405133326, - "tag": "0000_long_wolfpack", - "breakpoints": true - } - ] -} \ No newline at end of file diff --git a/packages/env/env.d.ts b/packages/env/env.d.ts deleted file mode 100644 index 35793de..0000000 --- a/packages/env/env.d.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { WebEnv } from "@labs/infra/alchemy.run"; - -// Infer Cloudflare Worker env from the alchemy 2.x Website resource. -// @see https://alchemy.run/concepts/bindings/#type-safe-bindings - -export type CloudflareEnv = WebEnv; - -declare global { - type Env = CloudflareEnv; -} - -declare module "cloudflare:workers" { - namespace Cloudflare { - export interface Env extends CloudflareEnv {} - } -} diff --git a/packages/infra/alchemy.run.ts b/packages/infra/alchemy.run.ts index 5ddf217..5775ea6 100644 --- a/packages/infra/alchemy.run.ts +++ b/packages/infra/alchemy.run.ts @@ -1,58 +1,28 @@ import * as Alchemy from "alchemy"; import * as Cloudflare from "alchemy/Cloudflare"; -import * as Config from "effect/Config"; import * as Effect from "effect/Effect"; -import path from "node:path"; -import { config as loadEnv } from "dotenv"; -const ROOT = import.meta.dirname; - -loadEnv({ path: path.join(ROOT, ".env") }); -loadEnv({ path: path.join(ROOT, "../../apps/web/.env") }); - -/** - * Labs web stack on alchemy 2.x (Effect/Stack). - * Replaces the v1 `await alchemy()` + TanStackStart helper. - */ -export const Database = Cloudflare.D1.Database("database", { - migrationsDir: path.join(ROOT, "../../packages/db/src/migrations"), -}); - -export class Web extends Cloudflare.Website.Vite()("web", { - rootDir: path.join(ROOT, "../../apps/web"), - compatibility: { - flags: ["nodejs_compat"], - }, - env: { - DB: Database, - CORS_ORIGIN: Config.string("CORS_ORIGIN").pipe(Config.withDefault("")), - BETTER_AUTH_SECRET: Config.redacted("BETTER_AUTH_SECRET"), - BETTER_AUTH_URL: Config.string("BETTER_AUTH_URL").pipe(Config.withDefault("")), - POLAR_ACCESS_TOKEN: Config.redacted("POLAR_ACCESS_TOKEN"), - POLAR_SUCCESS_URL: Config.string("POLAR_SUCCESS_URL").pipe( - Config.withDefault(""), - ), - }, - assets: { - runWorkerFirst: true, - }, -}) {} - -export type WebEnv = Cloudflare.InferEnv; +import { Dashboard } from "#dashboard.ts"; +import { RunQueue } from "#dispatch.ts"; +import { ArtifactStore, RunJournal } from "#storage.ts"; export default Alchemy.Stack( - "labs", + "AgentHarness", { providers: Cloudflare.providers(), state: Cloudflare.state(), }, Effect.gen(function* () { - const database = yield* Database; - const website = yield* Web; + const runJournal = yield* RunJournal; + const artifactStore = yield* ArtifactStore; + const runQueue = yield* RunQueue; + const dashboard = yield* Dashboard; return { - url: website.url, - databaseId: database.databaseId, + artifactStoreName: artifactStore.bucketName, + dashboardUrl: dashboard.url.as(), + runJournalName: runJournal.databaseName, + runQueueName: runQueue.queueName, }; }), ); diff --git a/packages/infra/migrations/0000_agent_harness.sql b/packages/infra/migrations/0000_agent_harness.sql new file mode 100644 index 0000000..c3b7f0e --- /dev/null +++ b/packages/infra/migrations/0000_agent_harness.sql @@ -0,0 +1,22 @@ +CREATE TABLE agent_runs ( + id TEXT PRIMARY KEY NOT NULL, + goal TEXT NOT NULL, + status TEXT NOT NULL DEFAULT 'running', + answer TEXT, + steps INTEGER NOT NULL DEFAULT 0, + started_at INTEGER NOT NULL, + finished_at INTEGER +); + +CREATE TABLE agent_events ( + run_id TEXT NOT NULL, + sequence INTEGER NOT NULL, + tag TEXT NOT NULL, + payload_json TEXT NOT NULL, + observed_at INTEGER NOT NULL, + PRIMARY KEY (run_id, sequence), + FOREIGN KEY (run_id) REFERENCES agent_runs(id) ON DELETE CASCADE +); + +CREATE INDEX agent_events_observed_at_idx + ON agent_events (observed_at); diff --git a/packages/infra/package.json b/packages/infra/package.json index 8df1d69..48bceb8 100644 --- a/packages/infra/package.json +++ b/packages/infra/package.json @@ -1,22 +1,27 @@ { - "name": "@labs/infra", + "name": "@repo/infra", + "version": "0.1.0", "private": true, + "description": "Alchemy infrastructure for the Effect agent harness demo", "type": "module", + "imports": { + "#*": "./src/*" + }, "scripts": { - "dev": "alchemy dev", "deploy": "alchemy deploy", - "destroy": "alchemy destroy" + "destroy": "alchemy destroy", + "dev": "alchemy dev", + "plan": "alchemy plan", + "typecheck": "tsc --noEmit" }, "dependencies": { - "dotenv": "catalog:", - "zod": "catalog:", - "alchemy": "catalog:", - "effect": "catalog:", + "@effect/platform-bun": "catalog:", "@effect/platform-node": "catalog:", - "@effect/platform-bun": "catalog:" + "alchemy": "catalog:", + "effect": "catalog:" }, "devDependencies": { - "alchemy": "catalog:", - "typescript": "^5" + "@repo/tooling": "workspace:*", + "typescript": "catalog:" } } diff --git a/packages/infra/src/dashboard.ts b/packages/infra/src/dashboard.ts new file mode 100644 index 0000000..4caaf18 --- /dev/null +++ b/packages/infra/src/dashboard.ts @@ -0,0 +1,21 @@ +import * as Cloudflare from "alchemy/Cloudflare"; +import * as Effect from "effect/Effect"; +import { Path } from "effect/Path"; + +export const Dashboard = Effect.gen(function* () { + const path = yield* Path; + + return yield* Cloudflare.Website.Vite("Dashboard", { + rootDir: path.resolve(import.meta.dirname, "../../../apps/web"), + assets: { + notFoundHandling: "single-page-application", + }, + dev: { + port: 3000, + }, + memo: { + include: ["**/*", "../../packages/*/src/**"], + lockfile: true, + }, + }); +}); diff --git a/packages/infra/src/dispatch.ts b/packages/infra/src/dispatch.ts new file mode 100644 index 0000000..fd91653 --- /dev/null +++ b/packages/infra/src/dispatch.ts @@ -0,0 +1,3 @@ +import * as Cloudflare from "alchemy/Cloudflare"; + +export const RunQueue = Cloudflare.Queues.Queue("RunQueue"); diff --git a/packages/infra/src/storage.ts b/packages/infra/src/storage.ts new file mode 100644 index 0000000..0229ea3 --- /dev/null +++ b/packages/infra/src/storage.ts @@ -0,0 +1,13 @@ +import * as Cloudflare from "alchemy/Cloudflare"; +import * as Effect from "effect/Effect"; +import { Path } from "effect/Path"; + +export const ArtifactStore = Cloudflare.R2.Bucket("ArtifactStore"); + +export const RunJournal = Effect.gen(function* () { + const path = yield* Path; + + return yield* Cloudflare.D1.Database("RunJournal", { + migrationsDir: path.resolve(import.meta.dirname, "../migrations"), + }); +}); diff --git a/packages/infra/tsconfig.json b/packages/infra/tsconfig.json new file mode 100644 index 0000000..3cec4a0 --- /dev/null +++ b/packages/infra/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "@repo/tooling/tsconfig", + "compilerOptions": { + "paths": { + "#*": ["./src/*"] + } + }, + "include": ["alchemy.run.ts", "src/**/*.ts"], + "exclude": [".alchemy", "node_modules"] +} diff --git a/packages/sandbox-client/package.json b/packages/sandbox-client/package.json new file mode 100644 index 0000000..7141834 --- /dev/null +++ b/packages/sandbox-client/package.json @@ -0,0 +1,23 @@ +{ + "name": "@repo/sandbox-client", + "version": "0.1.0", + "private": true, + "description": "Typed boundary for the Rust command supervisor", + "type": "module", + "imports": { + "#*": "./src/*" + }, + "exports": { + ".": "./src/index.ts" + }, + "scripts": { + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "effect": "catalog:" + }, + "devDependencies": { + "@repo/tooling": "workspace:*", + "typescript": "catalog:" + } +} diff --git a/packages/sandbox-client/src/index.ts b/packages/sandbox-client/src/index.ts new file mode 100644 index 0000000..b66f38c --- /dev/null +++ b/packages/sandbox-client/src/index.ts @@ -0,0 +1,2 @@ +export * from "./protocol.ts"; +export * from "./sandbox.ts"; diff --git a/packages/sandbox-client/src/protocol.ts b/packages/sandbox-client/src/protocol.ts new file mode 100644 index 0000000..7f0e504 --- /dev/null +++ b/packages/sandbox-client/src/protocol.ts @@ -0,0 +1,52 @@ +import { Schema } from "effect"; + +export class CommandRequest extends Schema.Class( + "sandbox/CommandRequest", +)({ + args: Schema.Array(Schema.String), + command: Schema.NonEmptyString, + cwd: Schema.String, + maxOutputBytes: Schema.Natural, + timeoutMs: Schema.Natural, +}) {} + +export class CommandOutput extends Schema.Class( + "sandbox/CommandOutput", +)({ + exitCode: Schema.NullOr(Schema.Int), + stderr: Schema.String, + stderrTruncated: Schema.Boolean, + stdout: Schema.String, + stdoutTruncated: Schema.Boolean, + timedOut: Schema.Boolean, +}) {} + +export class ExecuteCommand extends Schema.TaggedClass()( + "ExecuteCommand", + { + id: Schema.NonEmptyString, + request: CommandRequest, + }, +) {} + +export class CommandSucceeded extends Schema.TaggedClass()( + "CommandSucceeded", + { + id: Schema.NonEmptyString, + output: CommandOutput, + }, +) {} + +export class CommandRejected extends Schema.TaggedClass()( + "CommandRejected", + { + id: Schema.NonEmptyString, + reason: Schema.String, + }, +) {} + +export const SupervisorResponse = Schema.Union([ + CommandSucceeded, + CommandRejected, +]); +export type SupervisorResponse = typeof SupervisorResponse.Type; diff --git a/packages/sandbox-client/src/sandbox.ts b/packages/sandbox-client/src/sandbox.ts new file mode 100644 index 0000000..70455fe --- /dev/null +++ b/packages/sandbox-client/src/sandbox.ts @@ -0,0 +1,30 @@ +import { Context, Effect, Layer, Schema } from "effect"; + +import type { CommandOutput, CommandRequest } from "./protocol.ts"; + +export class SandboxError extends Schema.TaggedErrorClass()( + "SandboxError", + { reason: Schema.String }, +) {} + +export class Sandbox extends Context.Service< + Sandbox, + { + readonly execute: ( + request: CommandRequest, + ) => Effect.Effect; + } +>()("@repo/sandbox-client/Sandbox") { + static readonly layerUnavailable = Layer.succeed( + Sandbox, + Sandbox.of({ + execute: Effect.fn("Sandbox.execute")(() => + Effect.fail( + new SandboxError({ + reason: "The desktop transport has not connected to agent-sandboxd", + }), + ), + ), + }), + ); +} diff --git a/packages/sandbox-client/tsconfig.json b/packages/sandbox-client/tsconfig.json new file mode 100644 index 0000000..3e88b75 --- /dev/null +++ b/packages/sandbox-client/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "@repo/tooling/tsconfig", + "compilerOptions": { + "paths": { + "#*": ["./src/*"] + } + }, + "include": ["src/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/packages/web-core/package.json b/packages/web-core/package.json index 26cbc5c..fb42657 100644 --- a/packages/web-core/package.json +++ b/packages/web-core/package.json @@ -2,7 +2,7 @@ "name": "@repo/web-core", "version": "0.1.0", "private": true, - "description": "Framework-independent status and metrics helpers for the demo app", + "description": "Framework-independent status and metrics for the demo shell", "type": "module", "imports": { "#*": "./src/*" diff --git a/packages/web-core/src/config.ts b/packages/web-core/src/config.ts index 13f6c3f..a761023 100644 --- a/packages/web-core/src/config.ts +++ b/packages/web-core/src/config.ts @@ -17,7 +17,7 @@ export class AppConfig extends Context.Service< readonly release: string; readonly demoMessageConfigured: boolean; } ->()("ops-demo/AppConfig") { +>()("agent-demo/AppConfig") { static readonly layer = Layer.effect( AppConfig, Effect.gen(function* () { @@ -45,6 +45,7 @@ export class AppConfig extends Context.Service< } export const StatusSchema = Schema.Struct({ + demo: Schema.Literal("effect-agent-harness"), environment: Schema.Literals(environments), release: Schema.String, demoMessageConfigured: Schema.Boolean, diff --git a/packages/web-core/src/metrics.ts b/packages/web-core/src/metrics.ts index f2b096b..5b15dce 100644 --- a/packages/web-core/src/metrics.ts +++ b/packages/web-core/src/metrics.ts @@ -11,7 +11,7 @@ export class Metrics extends Context.Service< readonly snapshot: Effect.Effect; readonly prometheus: Effect.Effect; } ->()("ops-demo/Metrics") { +>()("agent-demo/Metrics") { static readonly layer = Layer.effect( Metrics, Effect.gen(function* () { @@ -24,9 +24,9 @@ export class Metrics extends Context.Service< })), prometheus: Effect.map(Ref.get(count), (requestCount) => [ - "# HELP ops_demo_requests_total Requests handled by the demo application.", - "# TYPE ops_demo_requests_total counter", - `ops_demo_requests_total ${requestCount}`, + "# HELP agent_demo_requests_total Requests handled by the demo application.", + "# TYPE agent_demo_requests_total counter", + `agent_demo_requests_total ${requestCount}`, "", ].join("\n"), ), diff --git a/packages/web-core/src/status.ts b/packages/web-core/src/status.ts index 43d7889..9357aaf 100644 --- a/packages/web-core/src/status.ts +++ b/packages/web-core/src/status.ts @@ -10,7 +10,7 @@ export class Status extends Context.Service< { readonly current: Effect.Effect; } ->()("ops-demo/Status") { +>()("agent-demo/Status") { static readonly layer = Layer.effect( Status, Effect.gen(function* () { @@ -22,6 +22,7 @@ export class Status extends Context.Service< current: Effect.gen(function* () { const { requestCount } = yield* metrics.snapshot; return yield* encode({ + demo: "effect-agent-harness", environment: config.environment, release: config.release, demoMessageConfigured: config.demoMessageConfigured, diff --git a/packages/web-core/test/status.test.ts b/packages/web-core/test/status.test.ts index 77d00c3..bce67ff 100644 --- a/packages/web-core/test/status.test.ts +++ b/packages/web-core/test/status.test.ts @@ -1,9 +1,9 @@ import { assert, it } from "@effect/vitest"; import { Effect, Layer } from "effect"; -import { AppConfig } from "../src/config.ts"; -import { Metrics } from "../src/metrics.ts"; -import { Status } from "../src/status.ts"; +import { AppConfig } from "../src/index.ts"; +import { Metrics } from "../src/index.ts"; +import { Status } from "../src/index.ts"; const TestLayer = Status.layer.pipe( Layer.provideMerge(Metrics.layer), @@ -25,6 +25,7 @@ it.effect("encodes a typed status payload", () => yield* metrics.record; yield* metrics.record; const payload = yield* status.current; + assert.strictEqual(payload.demo, "effect-agent-harness"); assert.strictEqual(payload.environment, "test"); assert.strictEqual(payload.release, "unit"); assert.strictEqual(payload.demoMessageConfigured, true); diff --git a/tests/smoke.test.ts b/tests/smoke.test.ts index 911e7cc..74ae371 100644 --- a/tests/smoke.test.ts +++ b/tests/smoke.test.ts @@ -55,9 +55,10 @@ test("the demo app serves its status API and front page", async () => { const status = await waitForStatus(); assert.equal(status.status, 200); const payload = await status.json(); + assert.equal(payload.demo, "effect-agent-harness"); assert.equal(payload.environment, "test"); assert.equal(payload.demoMessageConfigured, true); const frontPage = await fetch(`http://127.0.0.1:${port}/`); - assert.match(await frontPage.text(), /Ops monorepo demo/); + assert.match(await frontPage.text(), /Effect-native agent harness/); }); diff --git a/tsconfig.json b/tsconfig.json index 6b903f8..03e57de 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -6,6 +6,7 @@ "plugins": [ { "name": "@effect/language-service", + "allowedDuplicatedPackages": ["@distilled.cloud/core"], "diagnostics": false, "ignoreEffectWarningsInTscExitCode": true, "diagnosticSeverity": { diff --git a/vitest.config.ts b/vitest.config.ts index 89c6741..984dcdd 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -3,7 +3,7 @@ import { configDefaults, defineConfig } from "vitest/config"; export default defineConfig({ test: { environment: "node", - exclude: [...configDefaults.exclude, ".direnv/**"], + exclude: [...configDefaults.exclude, ".direnv/**", "vendor/**"], include: ["**/*.test.ts"], }, });