From 3ced005622fd2be370ac488c77ce422e61354dc1 Mon Sep 17 00:00:00 2001 From: Ben Date: Wed, 24 Jun 2026 14:45:54 -0400 Subject: [PATCH] feat(eliza): add Hindsight long-term memory integration for elizaOS Adds @vectorize-io/hindsight-eliza, an elizaOS plugin that gives agents long-term memory backed by Hindsight: - HINDSIGHT_MEMORY provider recalls relevant memories into the prompt before each model call. - HINDSIGHT_RETAIN evaluator retains conversation messages after each turn (fire-and-forget; agent replies optional). - Bank defaults to the message entityId for per-user isolation; both sides fail safe so a Hindsight outage never blocks the agent. Targets @elizaos/core ^1.7.2 (current npm latest, not the 2.x beta on main). Includes tests, CI job, release-script + changelog-generator entries, and docs gallery entry + page. --- .github/workflows/test.yml | 34 + .../hindsight_dev/generate_changelog.py | 1 + hindsight-docs/docs-integrations/eliza.md | 94 + hindsight-docs/src/data/integrations.json | 10 + hindsight-docs/static/img/icons/eliza.png | Bin 0 -> 95022 bytes hindsight-integrations/eliza/.gitignore | 4 + hindsight-integrations/eliza/README.md | 72 + .../eliza/package-lock.json | 4319 +++++++++++++++++ hindsight-integrations/eliza/package.json | 56 + hindsight-integrations/eliza/src/client.ts | 72 + hindsight-integrations/eliza/src/evaluator.ts | 65 + hindsight-integrations/eliza/src/index.ts | 18 + hindsight-integrations/eliza/src/options.ts | 59 + hindsight-integrations/eliza/src/plugin.ts | 42 + hindsight-integrations/eliza/src/provider.ts | 64 + .../eliza/tests/plugin.test.ts | 179 + hindsight-integrations/eliza/tsconfig.json | 18 + hindsight-integrations/eliza/tsup.config.ts | 12 + hindsight-integrations/eliza/vitest.config.ts | 9 + scripts/release-integration.sh | 2 +- 20 files changed, 5129 insertions(+), 1 deletion(-) create mode 100644 hindsight-docs/docs-integrations/eliza.md create mode 100644 hindsight-docs/static/img/icons/eliza.png create mode 100644 hindsight-integrations/eliza/.gitignore create mode 100644 hindsight-integrations/eliza/README.md create mode 100644 hindsight-integrations/eliza/package-lock.json create mode 100644 hindsight-integrations/eliza/package.json create mode 100644 hindsight-integrations/eliza/src/client.ts create mode 100644 hindsight-integrations/eliza/src/evaluator.ts create mode 100644 hindsight-integrations/eliza/src/index.ts create mode 100644 hindsight-integrations/eliza/src/options.ts create mode 100644 hindsight-integrations/eliza/src/plugin.ts create mode 100644 hindsight-integrations/eliza/src/provider.ts create mode 100644 hindsight-integrations/eliza/tests/plugin.test.ts create mode 100644 hindsight-integrations/eliza/tsconfig.json create mode 100644 hindsight-integrations/eliza/tsup.config.ts create mode 100644 hindsight-integrations/eliza/vitest.config.ts diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 02c046656..a7473bf28 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -32,6 +32,7 @@ jobs: integration-tests: ${{ steps.filter.outputs.integration-tests }} integrations-openclaw: ${{ steps.filter.outputs.integrations-openclaw }} integrations-ai-sdk: ${{ steps.filter.outputs.integrations-ai-sdk }} + integrations-eliza: ${{ steps.filter.outputs.integrations-eliza }} integrations-agent-framework: ${{ steps.filter.outputs.integrations-agent-framework }} integrations-composio: ${{ steps.filter.outputs.integrations-composio }} integrations-chat: ${{ steps.filter.outputs.integrations-chat }} @@ -133,6 +134,8 @@ jobs: - 'hindsight-integrations/openclaw/**' integrations-ai-sdk: - 'hindsight-integrations/ai-sdk/**' + integrations-eliza: + - 'hindsight-integrations/eliza/**' integrations-agent-framework: - 'hindsight-integrations/agent-framework/**' integrations-composio: @@ -762,6 +765,37 @@ jobs: working-directory: ./hindsight-integrations/ai-sdk run: npm run test:deno + build-eliza-integration: + needs: [detect-changes] + if: >- + (github.event_name == 'workflow_dispatch' || + needs.detect-changes.outputs.integrations-eliza == 'true' || + needs.detect-changes.outputs.ci == 'true') + runs-on: ubuntu-latest + timeout-minutes: 30 + + steps: + - uses: actions/checkout@v6 + with: + ref: ${{ github.event.pull_request.head.sha || '' }} + + - name: Set up Node.js + uses: actions/setup-node@v6 + with: + node-version: '22' + + - name: Install dependencies + working-directory: ./hindsight-integrations/eliza + run: npm ci + + - name: Run tests + working-directory: ./hindsight-integrations/eliza + run: npm test + + - name: Build + working-directory: ./hindsight-integrations/eliza + run: npm run build + test-opencode-integration: needs: [detect-changes] if: >- diff --git a/hindsight-dev/hindsight_dev/generate_changelog.py b/hindsight-dev/hindsight_dev/generate_changelog.py index f0d5b25fa..8ecd3473a 100644 --- a/hindsight-dev/hindsight_dev/generate_changelog.py +++ b/hindsight-dev/hindsight_dev/generate_changelog.py @@ -44,6 +44,7 @@ class IntegrationMeta: "agent-framework": IntegrationMeta("hindsight-agent-framework", "Microsoft Agent Framework"), "ag2": IntegrationMeta("hindsight-ag2"), "ai-sdk": IntegrationMeta("@vectorize-io/hindsight-ai-sdk", "AI SDK"), + "eliza": IntegrationMeta("@vectorize-io/hindsight-eliza", "elizaOS"), "chat": IntegrationMeta("@vectorize-io/hindsight-chat", "Chat SDK"), "openclaw": IntegrationMeta("@vectorize-io/hindsight-openclaw", "OpenClaw"), "langgraph": IntegrationMeta("hindsight-langgraph", "LangGraph"), diff --git a/hindsight-docs/docs-integrations/eliza.md b/hindsight-docs/docs-integrations/eliza.md new file mode 100644 index 000000000..8b8ee4a79 --- /dev/null +++ b/hindsight-docs/docs-integrations/eliza.md @@ -0,0 +1,94 @@ +--- +title: "elizaOS Long-Term Memory with Hindsight | Integration" +description: "Give elizaOS agents persistent long-term memory. The Hindsight plugin recalls relevant memories into the prompt before each model call and retains conversations after each turn." +--- + +# elizaOS + +The `@vectorize-io/hindsight-eliza` package gives [elizaOS](https://github.com/elizaOS/eliza) agents long-term memory backed by [Hindsight](https://hindsight.vectorize.io). + +It registers two components on your agent: + +- A **provider** (`HINDSIGHT_MEMORY`) that recalls relevant memories and injects them into the prompt before each model call. +- An **evaluator** (`HINDSIGHT_RETAIN`) that retains conversation messages to Hindsight after each turn. + +Both are enabled by default, layer on top of elizaOS's existing memory, and fail safe — a memory-service hiccup never blocks your agent from responding. + +[View Changelog →](/changelog/integrations/eliza) + +## Installation + +```bash +npm install @vectorize-io/hindsight-eliza @vectorize-io/hindsight-client +``` + +This package targets `@elizaos/core` `^1.7.2` (declared as a peer dependency). + +## Usage + +Create the plugin and add it to your character's plugin list: + +```ts +import { createHindsightPlugin } from "@vectorize-io/hindsight-eliza"; +import { Hindsight } from "@vectorize-io/hindsight-client"; + +const hindsightPlugin = createHindsightPlugin({ + client: new Hindsight({ apiKey: process.env.HINDSIGHT_API_KEY }), + recall: { budget: "high", includeEntities: true }, + retain: { tags: ["source:eliza"] }, +}); + +export const character = { + name: "Ada", + plugins: [ + // ...your other plugins + hindsightPlugin, + ], +}; +``` + +By default each agent message is stored under a memory **bank** keyed by the +message's `entityId`, giving every user an isolated memory store. + +## Configuration + +```ts +createHindsightPlugin({ + client, + + // Which memory bank to read/write. A string uses one fixed bank for all + // messages; a function derives the bank per message. Defaults to + // `message.entityId` (one bank per user). + bank: (message) => message.entityId, + + recall: { + enabled: true, // set false to disable recall + budget: "mid", // "low" | "mid" | "high" — latency vs. depth + types: ["world", "experience"], // restrict to fact types + maxTokens: 1000, // cap recalled tokens + includeEntities: false, // include entity observations + heading: "# Relevant long-term memories", // prompt heading + }, + + retain: { + enabled: true, // set false to disable retain + async: true, // fire-and-forget; never adds turn latency + tags: ["source:eliza"], // tags on every retained memory + metadata: { env: "prod" }, + includeAgentMessages: false, // also store the agent's own replies + }, +}); +``` + +### Using only recall or only retain + +Disable either side with `recall.enabled: false` or `retain.enabled: false`. You +can also build the components directly with `createHindsightProvider` and +`createHindsightEvaluator` if you want to wire them into a plugin yourself. + +## How it works + +| Component | elizaOS seam | When it runs | What it does | +| --- | --- | --- | --- | +| `HINDSIGHT_MEMORY` | Provider | During prompt composition, before the model call | Calls Hindsight `recall` with the incoming message and injects the results into context | +| `HINDSIGHT_RETAIN` | Evaluator | After the agent processes the turn | Calls Hindsight `retain` to persist the message (and optionally the agent's replies) | diff --git a/hindsight-docs/src/data/integrations.json b/hindsight-docs/src/data/integrations.json index c30c3f747..1dbf064b2 100644 --- a/hindsight-docs/src/data/integrations.json +++ b/hindsight-docs/src/data/integrations.json @@ -1,5 +1,15 @@ { "integrations": [ + { + "id": "eliza", + "name": "elizaOS", + "description": "Give elizaOS agents long-term memory. A plugin that recalls relevant memories into the prompt and retains conversations to Hindsight.", + "type": "official", + "by": "hindsight", + "category": "framework", + "link": "/sdks/integrations/eliza", + "icon": "/img/icons/eliza.png" + }, { "id": "litellm", "name": "LiteLLM", diff --git a/hindsight-docs/static/img/icons/eliza.png b/hindsight-docs/static/img/icons/eliza.png new file mode 100644 index 0000000000000000000000000000000000000000..f72638b1177bdf3047acb27c55c98c181eab9c2e GIT binary patch literal 95022 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

e0QK6X_S6E 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%0DH)e8P@9r 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 string` function to control this. + +## Options + +| Option | Description | Default | +| ----------------------------- | ------------------------------------------- | ------------------------------- | +| `client` | A Hindsight client instance | required | +| `bank` | Fixed bank string, or `(message) => string` | `message.entityId` | +| `recall.enabled` | Enable the recall provider | `true` | +| `recall.budget` | `"low" \| "mid" \| "high"` | `"mid"` | +| `recall.types` | Restrict to fact types | all | +| `recall.maxTokens` | Cap recalled tokens | API default | +| `recall.includeEntities` | Include entity observations | `false` | +| `recall.heading` | Heading above recalled memories | `# Relevant long-term memories` | +| `retain.enabled` | Enable the retain evaluator | `true` | +| `retain.async` | Fire-and-forget (no turn latency) | `true` | +| `retain.tags` | Tags on every retained memory | — | +| `retain.metadata` | Metadata on every retained memory | — | +| `retain.includeAgentMessages` | Also store the agent's replies | `false` | + +You can also use `createHindsightProvider` and `createHindsightEvaluator` +directly if you want to assemble your own plugin. + +## Development + +```bash +npm install +npm test +npm run build +``` + +## License + +MIT diff --git a/hindsight-integrations/eliza/package-lock.json b/hindsight-integrations/eliza/package-lock.json new file mode 100644 index 000000000..61c04c6a9 --- /dev/null +++ b/hindsight-integrations/eliza/package-lock.json @@ -0,0 +1,4319 @@ +{ + "name": "@vectorize-io/hindsight-eliza", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@vectorize-io/hindsight-eliza", + "version": "0.1.0", + "license": "MIT", + "devDependencies": { + "@elizaos/core": "1.7.2", + "@types/node": "^22.0.0", + "tsup": "^8.5.1", + "typescript": "^5.7.0", + "vitest": "^4.1.2" + }, + "engines": { + "node": ">=22" + }, + "peerDependencies": { + "@elizaos/core": "^1.7.2" + } + }, + "node_modules/@cfworker/json-schema": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@cfworker/json-schema/-/json-schema-4.1.1.tgz", + "integrity": "sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@elizaos/core": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/@elizaos/core/-/core-1.7.2.tgz", + "integrity": "sha512-NUw+YIXTejCCB07jevJ6cTbd/FKTqVoPwDrMMuBcjHeM+9UlQKFadDJooWEUREf37WS4KBegwLUOnr9H9CXpcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@langchain/core": "^1.0.0", + "@langchain/textsplitters": "^1.0.0", + "adze": "^2.2.5", + "crypto-browserify": "^3.12.0", + "dotenv": "^17.2.3", + "fast-redact": "^3.5.0", + "glob": "^13.0.0", + "handlebars": "^4.7.8", + "pdfjs-dist": "^5.2.133", + "unique-names-generator": "^4.7.1", + "uuid": "^13.0.0", + "zod": "^4.3.5" + } + }, + "node_modules/@emnapi/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", + "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", + "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", + "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", + "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", + "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", + "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", + "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", + "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", + "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", + "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", + "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", + "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", + "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", + "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", + "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", + "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", + "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", + "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", + "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", + "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", + "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", + "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", + "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", + "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", + "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", + "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@langchain/core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@langchain/core/-/core-1.2.1.tgz", + "integrity": "sha512-NNG/cC5FGuHDOAP56h0ddp8Rfk8p+othWzEK5RV9JIG6RvnF5vGa5r0AEGtKfQieed7s1kC42GuIzVOBvMBL/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cfworker/json-schema": "^4.0.2", + "@standard-schema/spec": "^1.1.0", + "js-tiktoken": "^1.0.12", + "langsmith": ">=0.5.0 <1.0.0", + "mustache": "^4.2.0", + "p-queue": "^6.6.2", + "zod": "^3.25.76 || ^4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@langchain/textsplitters": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@langchain/textsplitters/-/textsplitters-1.0.1.tgz", + "integrity": "sha512-rheJlB01iVtrOUzttscutRgLybPH9qR79EyzBEbf1u97ljWyuxQfCwIWK+SjoQTM9O8M7GGLLRBSYE26Jmcoww==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tiktoken": "^1.0.12" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "@langchain/core": "^1.0.0" + } + }, + "node_modules/@napi-rs/canvas": { + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-0.1.100.tgz", + "integrity": "sha512-xglYA6q3XO5P3BNJYxVZ1IV7DLVjp1Py6nwag88YntrS+3vKHyYcMqXVS4ZztJmwz2uGvz1FWhI/4LgbR5uQDA==", + "dev": true, + "license": "MIT", + "optional": true, + "workspaces": [ + "e2e/*" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/canvas-android-arm64": "0.1.100", + "@napi-rs/canvas-darwin-arm64": "0.1.100", + "@napi-rs/canvas-darwin-x64": "0.1.100", + "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.100", + "@napi-rs/canvas-linux-arm64-gnu": "0.1.100", + "@napi-rs/canvas-linux-arm64-musl": "0.1.100", + "@napi-rs/canvas-linux-riscv64-gnu": "0.1.100", + "@napi-rs/canvas-linux-x64-gnu": "0.1.100", + "@napi-rs/canvas-linux-x64-musl": "0.1.100", + "@napi-rs/canvas-win32-arm64-msvc": "0.1.100", + "@napi-rs/canvas-win32-x64-msvc": "0.1.100" + } + }, + "node_modules/@napi-rs/canvas-android-arm64": { + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.100.tgz", + "integrity": "sha512-hjhCKhntPv9+t4ckHymdx0phYNcVW+GKQR6Lzw2zE+pOVjOplSmtx9nNNknTjbEDLcuLZqA1y8ufKg1XfgftzQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-darwin-arm64": { + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-arm64/-/canvas-darwin-arm64-0.1.100.tgz", + "integrity": "sha512-2PcswRaC7Ly645DGt88///zuFDhJxJYdKAs1uU3mfk1atYkXufgcgLfBpk6Tm12nCQBaNt1wpybuPZ4qOhTo8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-darwin-x64": { + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.100.tgz", + "integrity": "sha512-ePNZtj7pNIva/siZMg+HmbeozkIjqUIYdoymH8HaA3qK7LfzFN4WMBM8G6HQ9ZC+H3+Dnn5pqtiXpgLykaPOhw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-arm-gnueabihf": { + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.100.tgz", + "integrity": "sha512-d5cDB48oWFGU8/XPhUOFAlySgb/VAu7D+s8fi55K1Pcfg8aPplHWqMgibhVLU8ky7Pyg/fuiVLz4Nf3JrSTuUA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-arm64-gnu": { + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.100.tgz", + "integrity": "sha512-rDxgxRu69RvDlX/bh9o22DxLsGr8EqsNgotL9+RwQE1S0b0cqeatqsw6aW45mukm0B42DIAaAacKaYQ8cqS1nw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-arm64-musl": { + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.100.tgz", + "integrity": "sha512-K3mDW66N+xT2/V439u1alFANiBUjdEx2gLiNYnCmUsva5jZMxWTjafBYwTzYK+EMFMHrUoabuU+T1BIP5CgbYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-riscv64-gnu": { + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.100.tgz", + "integrity": "sha512-mooqUBTIsccZpnoQC4NgrC1v6C1vof39etLNMnBwCY+p0gajWJvAHLGQ6g/gGyS5YrpDW+GefSN4+Cvcr08UWw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-x64-gnu": { + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.100.tgz", + "integrity": "sha512-1eCvkDCazm7FFhsT7DfGOdSaHgZVK3bt/dSBl5EWHOWmnz+I7j8tPseJqqD81NF+MH21jKUK4wQSDjN0mdhnTg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-linux-x64-musl": { + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.100.tgz", + "integrity": "sha512-20arT6lnI19S68qNlii73TSEDbECNgzMz2EpldC1V3mZFuRkeujXkcebRk0LRJe9SEUAooYiLokfMViY8IX7yA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-win32-arm64-msvc": { + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-arm64-msvc/-/canvas-win32-arm64-msvc-0.1.100.tgz", + "integrity": "sha512-DZFFT1wIAg37LJw37yhMRFfjATd3vTQzjZ1Yki8u2vhO6Hi5VE6BVaGQ1aaDu7xb4iMErz+9EOwjpS7xcxFeBw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/canvas-win32-x64-msvc": { + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.100.tgz", + "integrity": "sha512-MyT1j3mHC2+Lu4pBi9mKyMJhtP6U7k7EldY7sj/uS5gJA65gTXt8MefJQXLJo5d/vZbuWmfxzkEUNc/urV3pHA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz", + "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.3" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.137.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.137.0.tgz", + "integrity": "sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.3.tgz", + "integrity": "sha512-DT6Z3PhvioeHMvxo+xHc3KtqggrI7CCTXCmC2h/5zUlp5jVitv7XEy+9q5/7v8IolhlioawpMo8Kg0EEBy7J0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.3.tgz", + "integrity": "sha512-0NwgwsjM7LrsuVnXMK3koTpagBNOhloc/BNjKqZjv4V5zI5r13qx69uVhRx+o5Z0yy4Hzq+lpy7TAgUG/ocvrw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.3.tgz", + "integrity": "sha512-YtiBp4disu6V560loT6PjMdiRaWmVvDNrUunAalbiFx2ggeJwxdAsgZMcoGP17uyAsTwAj5V1niksxlHnVQ1Sw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.3.tgz", + "integrity": "sha512-yD3EkEdXk2LypPxnf/kSZHirarsI8gcPzc62SukhR9VJTyvV+F9Q/GxWNuCojc7sXyuVC4DxRGhdDK4X8VSsbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.3.tgz", + "integrity": "sha512-c+8vieQbsD7HNAHKIA34w0GJ9FedFFuJGD+7E6vz7Q3uqAIugL5p45fhlsj4UaAsHpcmlqugBWMhA0/j7o0sIg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.3.tgz", + "integrity": "sha512-50jD0uUwLvur7Zz9LHz17kaAdTPjn5wN93hEgjvmYFRZwiR7ZJYovTd5ipyWJDAnXKvZ+wgc+/Ika6dwSF5OcA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.3.tgz", + "integrity": "sha512-BO9+oPL8K9poZJBfYPsXNtYjPE5uM3qeehT3aFcW4LITOl+iSqhp0abzjR2nWBUNjIZeKXjAEWBZ64WjNoHd6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.3.tgz", + "integrity": "sha512-f3VpLB1vQ0Eo6ecr/6cekLnvYMFF4YBFoVGkfkvPLq1bAkbAwHYQPZKoAmG6OJyTcxxoC+AvezGx/S1obNC0Mw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.3.tgz", + "integrity": "sha512-AmurZ26Pqx/RI9N1gzEOCklkKXl927yjfXWUUS0O7Puh8ARM/Ob8qfrD3qnWksScdw6cSrW5PSHE9DyLu7+PtA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.3.tgz", + "integrity": "sha512-JJpqs8bRGITDOdbkNKnlojzBabbOHrqjSvDr0IVsZObE1lBcPjxItUEY9eWIDbxaJ3cGrXPWGfGkIxFijg/URg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.3.tgz", + "integrity": "sha512-rSJcdjPxzA/by/6/rYs+v+bXU7UjvnbUWz8MJb6kh6+knqB1dCrtHg0uu7C/4haqJvqdkYHQ5IGn+tCH9GLW/g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.3.tgz", + "integrity": "sha512-hQ3/PYkDJICgevvyNcVrihVeqq7k1Pp3VZ9lY+dauAYUJKO+auqApvANhvR1An9BhmqYKvW2Mu1F9u4DXSMLxQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.3.tgz", + "integrity": "sha512-Elcv/BtML9lXrV6JuKITc/grN2kYV9gjsQpW8Jfw4ioK0TOkjBjye0nnyqQNy9STNaI20lXNaQBRrD5gSgR0Yg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.11.1", + "@emnapi/runtime": "1.11.1", + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.3.tgz", + "integrity": "sha512-2DrEfhluH9yhiaFApmsjsjwrSYbNcY1oFTzYSP1a535jDbV98zCFanA/96TBUd0iDFcxGmw9QRExwGCXz3U+/g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.3.tgz", + "integrity": "sha512-OL4OMk7UPXOeVGGd3qo5zJyPIljf4AFgk5QAkPPS+OoLuOOozhuaQGC18MxVTnw/06q93gShAJzlwnSCY9YtqA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.2.tgz", + "integrity": "sha512-6o7ZLZK+BeenkZCFNDXqpbjw9bD6nuWonvS/lwQJp7NoVVxm6p3qE7qQ5jGuBjiFsgvqjD8mZAU5oWxTmbOeOg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.2.tgz", + "integrity": "sha512-BaH7BllCACHoH1LguOU56UItGfUWjujlO65kS9LAodViaN4bwIKd7oeW/ZHJ/4ljr/7MIiENnNy3HJ0zXv8Zkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.2.tgz", + "integrity": "sha512-v39RCCvj4He82I9sFmk+M1VZ0PLM9sfsLVikjfx2hYBNALhrrOR2D3JjQA6AhlaSOgcR+RzrKY7e1+bT6SUO/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.2.tgz", + "integrity": "sha512-yl0y2vq3S3lHeuXhEdss6TWfKW8vkujImO12tn4ZkG/4oghr09LvdYm2RElVjokTQiUvDUGXLGsYeLqUMCKpGA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.2.tgz", + "integrity": "sha512-tT4pvt4qXD+vEoezupCWi+a1F0vvDiksiHc+PxRlYTOH1I6/X4id9jPxTP+Fg+545euaFT1jJVs4CEdHZAU1vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.2.tgz", + "integrity": "sha512-6nU5F2wCW+qvCBhTn1pdIU3bzsIoF7EUwsCDRxilWGprQR6yd508YnH9+OKFCwpfS8pjZqDUmnCAr7exax0XCg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.2.tgz", + "integrity": "sha512-n1GJHPOvpIfhi3TmrCeh6S6URt9BFCt0KQE3qvexyGCTAKpR4Lg+eWvNZEqu7epxwus/8ElT3hacYEucm49SZg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.2.tgz", + "integrity": "sha512-JqgflS8wEB+UXV/vS1RpRbifGBeN4D5lz8D8oOFbFZw4vedvdOgCFAjfBmIMdW3yL10XpQQ0Ambepw6MXrhOnA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.2.tgz", + "integrity": "sha512-wnFJkogWvN4jm/hQRF2UBaeUmk20j5+DmHvoyWii2b8HJDyvz1MF2OU/6ynXt2KR63rbZLWkFpoytpdc/yBuSA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.2.tgz", + "integrity": "sha512-HVu2bp0zhvJ8xHEV9+UUs7S90VadmBSY3LcIMvozbPo4AuMGDWlz3ymHLHZPX4hR67TKTt8Qp5PJ5RBg/i+RMQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.2.tgz", + "integrity": "sha512-mQqqAV8QaoSgr9I2fKDLY2BAVvmKjWoGiu/cSYQonsLvtqwEn1E4QYfnCOcp5zoEqNhsDYin1s6jx/VJmrxlZg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.2.tgz", + "integrity": "sha512-IxKLoxCQ2IWi6bT2akyDUBGsOImDKB+sPp4EsTmwFQ/fMwpCKm8uLSSgP/Kx/QYUgKis6SEZ5/Nlhup0DIA0PQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.2.tgz", + "integrity": "sha512-Mk5ha2RQSgyFfmYYLkBpPnUk8D8FriBxesO1u9O75X0mHgXL1UQcH5Itl2lurWL2tj0RxV9b9tJgipac0hRY9A==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.2.tgz", + "integrity": "sha512-CjvEnqJL/0/TQ3TXX3OPIJ/kmBellrWd4heXUmHeJlTnmwjKpSJzoehLaL6Xk0ZnMHBu9dZuFADNOrtjF4v+2w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.2.tgz", + "integrity": "sha512-1SiZbzwdkaDURsew/tSOrooKiYy7EQGT6m8ufavAi9NEyQb/6VuIxFXAL1fqa4iZe3g4NbNk4P7J32z2tw5Mgg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.2.tgz", + "integrity": "sha512-nQts12zJ3NQRoE6uYljOH89v7szzLDvG2JD/vsX+vGXU8w/At1GowTZ5/7qeFQ8m7L55rpR8Okugnuo5bgjy2Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.2.tgz", + "integrity": "sha512-E9/ll019jhPIJgpzfZoIkBGhcz+kKNgVWYRY0zr9srBdPPFVpvOKW8VaJKUbeK+eZXyQF9ltME+Kk6affeaPgg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.2.tgz", + "integrity": "sha512-5BqxR/pshjey51iliyzTD5Xi3EN0aLmQ2lZ3lvefVV9c82BvrLo2/6OT55iifpWBufs6kdwWbuOKS841DrmK9A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.2.tgz", + "integrity": "sha512-uNN83XxQrRAh/w0/pmAfibcwyb6YWt4gP+dpnQKPVJshAloQ785ii8CT8ZCIxkGg9opVsvAlGhFitSm6D1Jjpg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.2.tgz", + "integrity": "sha512-srjEIxSH3LRnJN6THczDHWQplqEMFiAJrTab0msUryh9kwNpkICf3Ea6q6MN/2cZwRFUNx5w+h6Hpi4QuHS6Zg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.2.tgz", + "integrity": "sha512-8hOJnxgbyObnCm5AlRA3A931xX19xq80RjVTKgJOvEKWqJruP/Uf12IbAOaDjjEXYRewwHLfmF0YRIdK3OwKWA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.2.tgz", + "integrity": "sha512-mmF4AY1i0hG/bLWUctUq59gtmgaSIRa3cu/A3JFRp/sCNEme2bgDEiDS22P9FbnJB8NJNF4jPJiSP5RHQpUTDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.2.tgz", + "integrity": "sha512-DZgkknc6jhHrk46V25vbAM0zZkyP0nSDkJB8/dRkLTxv470dOmWDqGoEJl/9A0dFfS7yE3REOwNDxpHwSLSt0Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.2.tgz", + "integrity": "sha512-T6xr6ucWSFto+VGajA8YH26LdpHRuP4YLHEKAtCWvJDOlnmWcDZVCI2Jmjr+IFHDlt2zRaTAKE4tfjTaWLgJBg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.2.tgz", + "integrity": "sha512-BfzEnDJOt9T8M989/lA37EcJgat01wLRnoi5dQf3QzOH7jzpqTAzdDbVfRljVr5r+jzKqpbHeyOfAaXxAd0PAA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", + "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.20.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.20.0.tgz", + "integrity": "sha512-QWlFW2wf3nTjC13/DqRnBpR4ZO36VJH/JVBkA/vcnmbTBNQIlnObqyqZE1tUR7+Ni23Lda8R1BxMfbXRpCUx5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "deprecated": "Potential CWE-502 - Update to 1.3.1 or higher", + "dev": true, + "license": "ISC" + }, + "node_modules/@vitest/expect": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.9.tgz", + "integrity": "sha512-vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.1.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.1.9", + "@vitest/utils": "4.1.9", + "chai": "^6.2.2", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.9.tgz", + "integrity": "sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.1.9", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.9.tgz", + "integrity": "sha512-s0iufns3iIFitdgm+YR7g1whCAaGtXz459VS9/PqyKDEEFgYIhsHOQmXgIgDuYCt7DeQmiZT0Qe2OA2p4ZPu5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.9.tgz", + "integrity": "sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.1.9", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.9.tgz", + "integrity": "sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.9", + "@vitest/utils": "4.1.9", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.9.tgz", + "integrity": "sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.9.tgz", + "integrity": "sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.9", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/acorn": { + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/adze": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/adze/-/adze-2.3.0.tgz", + "integrity": "sha512-c5I7uXn5jZ075LbW0lhkmllq4OLQsLHbEV63MbykOQr/VPIOdTgbxGH4QoXHqakAUO3rUSEmURd5eM9GgpJB6g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@ungap/structured-clone": "1.2.0", + "picocolors": "1.1.1" + }, + "engines": { + "node": ">=18.19.0" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", + "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bn.js": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz", + "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true, + "license": "MIT" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", + "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^5.2.1", + "randombytes": "^2.1.0", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.6.tgz", + "integrity": "sha512-sd+Q65fjlWCYWtZKXiKfrUc8d+4jtp/8f0W2NkwzLtoW4bI6UDnWusLWIurHnmurW0XShIRxpwiOX4EoPtXUAg==", + "dev": true, + "license": "ISC", + "dependencies": { + "bn.js": "^5.2.3", + "browserify-rsa": "^4.1.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.6.1", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.9", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/bundle-require": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-5.1.0.tgz", + "integrity": "sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "load-tsconfig": "^0.2.3" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "esbuild": ">=0.18" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/cipher-base": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz", + "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", + "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz", + "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserify-cipher": "^1.0.1", + "browserify-sign": "^4.2.3", + "create-ecdh": "^4.0.4", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "diffie-hellman": "^5.0.3", + "hash-base": "~3.0.4", + "inherits": "^2.0.4", + "pbkdf2": "^3.1.2", + "public-encrypt": "^4.0.3", + "randombytes": "^2.1.0", + "randomfill": "^1.0.4" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/des.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", + "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/dotenv": { + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.2.tgz", + "integrity": "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", + "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", + "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.27.7", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", + "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.27.7", + "@esbuild/android-arm": "0.27.7", + "@esbuild/android-arm64": "0.27.7", + "@esbuild/android-x64": "0.27.7", + "@esbuild/darwin-arm64": "0.27.7", + "@esbuild/darwin-x64": "0.27.7", + "@esbuild/freebsd-arm64": "0.27.7", + "@esbuild/freebsd-x64": "0.27.7", + "@esbuild/linux-arm": "0.27.7", + "@esbuild/linux-arm64": "0.27.7", + "@esbuild/linux-ia32": "0.27.7", + "@esbuild/linux-loong64": "0.27.7", + "@esbuild/linux-mips64el": "0.27.7", + "@esbuild/linux-ppc64": "0.27.7", + "@esbuild/linux-riscv64": "0.27.7", + "@esbuild/linux-s390x": "0.27.7", + "@esbuild/linux-x64": "0.27.7", + "@esbuild/netbsd-arm64": "0.27.7", + "@esbuild/netbsd-x64": "0.27.7", + "@esbuild/openbsd-arm64": "0.27.7", + "@esbuild/openbsd-x64": "0.27.7", + "@esbuild/openharmony-arm64": "0.27.7", + "@esbuild/sunos-x64": "0.27.7", + "@esbuild/win32-arm64": "0.27.7", + "@esbuild/win32-ia32": "0.27.7", + "@esbuild/win32-x64": "0.27.7" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true, + "license": "MIT" + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/expect-type": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/fast-redact": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", + "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fix-dts-default-cjs-exports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fix-dts-default-cjs-exports/-/fix-dts-default-cjs-exports-1.0.1.tgz", + "integrity": "sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "rollup": "^4.34.8" + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/handlebars": { + "version": "4.7.9", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", + "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-base": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", + "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/js-tiktoken": { + "version": "1.0.21", + "resolved": "https://registry.npmjs.org/js-tiktoken/-/js-tiktoken-1.0.21.tgz", + "integrity": "sha512-biOj/6M5qdgx5TKjDnFT1ymSpM5tbd3ylwDtrQvFQSu0Z7bBYko2dF+W/aUkXUPuk6IVpRxk/3Q2sHOzGlS36g==", + "dev": true, + "license": "MIT", + "dependencies": { + "base64-js": "^1.5.1" + } + }, + "node_modules/langsmith": { + "version": "0.7.11", + "resolved": "https://registry.npmjs.org/langsmith/-/langsmith-0.7.11.tgz", + "integrity": "sha512-kK7tjvLo3KbyrXonZDJJMvX6jE5Ek9uwqtS2WX8AEGc5IwLoMrJlGR8wWk1UD8H/x0goiJDMsRht4qZd7Ijvcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-queue": "6.6.2" + }, + "peerDependencies": { + "@opentelemetry/api": "*", + "@opentelemetry/exporter-trace-otlp-proto": "*", + "@opentelemetry/sdk-trace-base": "*", + "openai": "*", + "ws": ">=7" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@opentelemetry/exporter-trace-otlp-proto": { + "optional": true + }, + "@opentelemetry/sdk-trace-base": { + "optional": true + }, + "openai": { + "optional": true + }, + "ws": { + "optional": true + } + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/load-tsconfig": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", + "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/lru-cache": { + "version": "11.5.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.1.tgz", + "integrity": "sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", + "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true, + "license": "MIT" + }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mlly": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.2.tgz", + "integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.16.0", + "pathe": "^2.0.3", + "pkg-types": "^1.3.1", + "ufo": "^1.6.3" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/mustache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "dev": true, + "license": "MIT", + "bin": { + "mustache": "bin/mustache" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.15", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz", + "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/obug": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.3.tgz", + "integrity": "sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.9.tgz", + "integrity": "sha512-fIYNuZ/HastSb80baGOuPRo1O9cf4baWw5WsAp7dBuUzeTD/BoaG8sVTdlPFksBE2lF21dN+A1AnrpIjSWqHHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "pbkdf2": "^3.1.5", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/pbkdf2": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.6.tgz", + "integrity": "sha512-BT6eelPB1EyGHo8pC0o9Bl6k6SYVhKO1jEbd3lcTrtr7XHdjP8BW1YpfCV3G9Kwkxgattk+S5q2/RvuttCsS1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "ripemd160": "^2.0.3", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.12", + "to-buffer": "^1.2.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pdfjs-dist": { + "version": "5.7.284", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-5.7.284.tgz", + "integrity": "sha512-h4EdYQczmGhbOlqc3PPZwxevn7ApdWPbovAuWXOB/DjIyigSnwfy2oze7c6mRcSr9XgLp3eN3EeL4DyySTPMFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=22.13.0 || >=24" + }, + "optionalDependencies": { + "@napi-rs/canvas": "^0.1.100" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", + "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "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" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ripemd160": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.3.tgz", + "integrity": "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hash-base": "^3.1.2", + "inherits": "^2.0.4" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ripemd160/node_modules/hash-base": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.2.tgz", + "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rolldown": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.3.tgz", + "integrity": "sha512-1F1eEtUBtFvcGm1HQ9TiUIUHPQG7mSAODrhIzjxoUEFuo8OcbrGLiVLkevNgj84TE4lnHvnumwFjhJO5Eu135g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.137.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.1.3", + "@rolldown/binding-darwin-arm64": "1.1.3", + "@rolldown/binding-darwin-x64": "1.1.3", + "@rolldown/binding-freebsd-x64": "1.1.3", + "@rolldown/binding-linux-arm-gnueabihf": "1.1.3", + "@rolldown/binding-linux-arm64-gnu": "1.1.3", + "@rolldown/binding-linux-arm64-musl": "1.1.3", + "@rolldown/binding-linux-ppc64-gnu": "1.1.3", + "@rolldown/binding-linux-s390x-gnu": "1.1.3", + "@rolldown/binding-linux-x64-gnu": "1.1.3", + "@rolldown/binding-linux-x64-musl": "1.1.3", + "@rolldown/binding-openharmony-arm64": "1.1.3", + "@rolldown/binding-wasm32-wasi": "1.1.3", + "@rolldown/binding-win32-arm64-msvc": "1.1.3", + "@rolldown/binding-win32-x64-msvc": "1.1.3" + } + }, + "node_modules/rollup": { + "version": "4.62.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.2.tgz", + "integrity": "sha512-RFnrW4lhXA3s3eqHDZvN654g8OTjzRfqpIRJYczCGB6HzphckVAi/Qh4tbPUbRuDi7s1Llv8g/NspLkttY3gTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.9" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.62.2", + "@rollup/rollup-android-arm64": "4.62.2", + "@rollup/rollup-darwin-arm64": "4.62.2", + "@rollup/rollup-darwin-x64": "4.62.2", + "@rollup/rollup-freebsd-arm64": "4.62.2", + "@rollup/rollup-freebsd-x64": "4.62.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.62.2", + "@rollup/rollup-linux-arm-musleabihf": "4.62.2", + "@rollup/rollup-linux-arm64-gnu": "4.62.2", + "@rollup/rollup-linux-arm64-musl": "4.62.2", + "@rollup/rollup-linux-loong64-gnu": "4.62.2", + "@rollup/rollup-linux-loong64-musl": "4.62.2", + "@rollup/rollup-linux-ppc64-gnu": "4.62.2", + "@rollup/rollup-linux-ppc64-musl": "4.62.2", + "@rollup/rollup-linux-riscv64-gnu": "4.62.2", + "@rollup/rollup-linux-riscv64-musl": "4.62.2", + "@rollup/rollup-linux-s390x-gnu": "4.62.2", + "@rollup/rollup-linux-x64-gnu": "4.62.2", + "@rollup/rollup-linux-x64-musl": "4.62.2", + "@rollup/rollup-openbsd-x64": "4.62.2", + "@rollup/rollup-openharmony-arm64": "4.62.2", + "@rollup/rollup-win32-arm64-msvc": "4.62.2", + "@rollup/rollup-win32-ia32-msvc": "4.62.2", + "@rollup/rollup-win32-x64-gnu": "4.62.2", + "@rollup/rollup-win32-x64-msvc": "4.62.2", + "fsevents": "~2.3.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/sha.js": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", + "dev": true, + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" + }, + "bin": { + "sha.js": "bin.js" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.1.0.tgz", + "integrity": "sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/sucrase": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyrainbow": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/to-buffer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", + "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/to-buffer/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "optional": true + }, + "node_modules/tsup": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.5.1.tgz", + "integrity": "sha512-xtgkqwdhpKWr3tKPmCkvYmS9xnQK3m3XgxZHwSUjvfTjp7YfXe5tT3GgWi0F2N+ZSMsOeWeZFh7ZZFg5iPhing==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-require": "^5.1.0", + "cac": "^6.7.14", + "chokidar": "^4.0.3", + "consola": "^3.4.0", + "debug": "^4.4.0", + "esbuild": "^0.27.0", + "fix-dts-default-cjs-exports": "^1.0.0", + "joycon": "^3.1.1", + "picocolors": "^1.1.1", + "postcss-load-config": "^6.0.1", + "resolve-from": "^5.0.0", + "rollup": "^4.34.8", + "source-map": "^0.7.6", + "sucrase": "^3.35.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.11", + "tree-kill": "^1.2.2" + }, + "bin": { + "tsup": "dist/cli-default.js", + "tsup-node": "dist/cli-node.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@microsoft/api-extractor": "^7.36.0", + "@swc/core": "^1", + "postcss": "^8.4.12", + "typescript": ">=4.5.0" + }, + "peerDependenciesMeta": { + "@microsoft/api-extractor": { + "optional": true + }, + "@swc/core": { + "optional": true + }, + "postcss": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/tsup/node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.4.tgz", + "integrity": "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/unique-names-generator": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/unique-names-generator/-/unique-names-generator-4.7.1.tgz", + "integrity": "sha512-lMx9dX+KRmG8sq6gulYYpKWZc9RlGsgBR6aoO8Qsm3qvkSJ+3rAymr+TnV8EDMrIrwuFJ4kruzMWM/OpYzPoow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/uuid": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.2.tgz", + "integrity": "sha512-vzi9uRZ926x4XV73S/4qQaTwPXM2JBj6/6lI/byHH1jOpCzb0zDbfytgA9LcN/hzb2l7WQSQnxITOVx5un/wGw==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist-node/bin/uuid" + } + }, + "node_modules/vite": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.1.0.tgz", + "integrity": "sha512-BuJcQK/56NQTWDGn4ABea3q4SSBdNPWwNZKTkkUpcMPnLoquSYH8llRtSUIgoL1KSCpHt5eghLShn50mH36y7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.15", + "rolldown": "~1.1.2", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.3.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" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vitest": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.9.tgz", + "integrity": "sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "4.1.9", + "@vitest/mocker": "4.1.9", + "@vitest/pretty-format": "4.1.9", + "@vitest/runner": "4.1.9", + "@vitest/snapshot": "4.1.9", + "@vitest/spy": "4.1.9", + "@vitest/utils": "4.1.9", + "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" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "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.9", + "@vitest/browser-preview": "4.1.9", + "@vitest/browser-webdriverio": "4.1.9", + "@vitest/coverage-istanbul": "4.1.9", + "@vitest/coverage-v8": "4.1.9", + "@vitest/ui": "4.1.9", + "happy-dom": "*", + "jsdom": "*", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/coverage-istanbul": { + "optional": true + }, + "@vitest/coverage-v8": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "vite": { + "optional": false + } + } + }, + "node_modules/vitest/node_modules/tinyexec": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz", + "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.22", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.22.tgz", + "integrity": "sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/hindsight-integrations/eliza/package.json b/hindsight-integrations/eliza/package.json new file mode 100644 index 000000000..c6e957b2a --- /dev/null +++ b/hindsight-integrations/eliza/package.json @@ -0,0 +1,56 @@ +{ + "name": "@vectorize-io/hindsight-eliza", + "version": "0.1.0", + "description": "Hindsight long-term memory for elizaOS agents - recall and retain via a plugin provider and evaluator", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "type": "module", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "keywords": [ + "eliza", + "elizaos", + "memory", + "hindsight", + "agents", + "llm", + "long-term-memory", + "plugin" + ], + "author": "Vectorize ", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/vectorize-io/hindsight.git", + "directory": "hindsight-integrations/eliza" + }, + "files": [ + "dist", + "README.md" + ], + "scripts": { + "build": "tsup", + "dev": "tsc --watch", + "clean": "rm -rf dist", + "test": "vitest run", + "test:watch": "vitest", + "prepublishOnly": "npm run clean && npm run build" + }, + "peerDependencies": { + "@elizaos/core": "^1.7.2" + }, + "devDependencies": { + "@elizaos/core": "1.7.2", + "@types/node": "^22.0.0", + "tsup": "^8.5.1", + "typescript": "^5.7.0", + "vitest": "^4.1.2" + }, + "engines": { + "node": ">=22" + } +} diff --git a/hindsight-integrations/eliza/src/client.ts b/hindsight-integrations/eliza/src/client.ts new file mode 100644 index 000000000..1e038613f --- /dev/null +++ b/hindsight-integrations/eliza/src/client.ts @@ -0,0 +1,72 @@ +/** + * Minimal Hindsight client surface used by this integration. + * + * It is a structural subset of `@vectorize-io/hindsight-client` so that + * consumers can pass a real client instance without this package taking a hard + * dependency on it. Only `recall` and `retain` are required. + */ + +/** Processing budget controlling latency vs. depth. */ +export type Budget = "low" | "mid" | "high"; + +/** Fact types for filtering recall results. */ +export type FactType = "world" | "experience" | "observation"; + +/** A single recalled memory. */ +export interface RecallResult { + id: string; + text: string; + type?: string | null; + entities?: string[] | null; + context?: string | null; + occurred_start?: string | null; + occurred_end?: string | null; + mentioned_at?: string | null; + document_id?: string | null; + metadata?: Record | null; + chunk_id?: string | null; +} + +export interface RecallResponse { + results: RecallResult[]; + trace?: Record | null; + entities?: Record | null; + chunks?: Record | null; +} + +export interface RetainResponse { + success: boolean; + bank_id: string; + items_count: number; + async: boolean; +} + +/** + * Hindsight client interface - matches `@vectorize-io/hindsight-client`. + */ +export interface HindsightClient { + retain( + bankId: string, + content: string, + options?: { + timestamp?: Date | string; + context?: string; + metadata?: Record; + documentId?: string; + tags?: string[]; + async?: boolean; + } + ): Promise; + + recall( + bankId: string, + query: string, + options?: { + types?: FactType[]; + maxTokens?: number; + budget?: Budget; + includeEntities?: boolean; + includeChunks?: boolean; + } + ): Promise; +} diff --git a/hindsight-integrations/eliza/src/evaluator.ts b/hindsight-integrations/eliza/src/evaluator.ts new file mode 100644 index 000000000..b49e8802d --- /dev/null +++ b/hindsight-integrations/eliza/src/evaluator.ts @@ -0,0 +1,65 @@ +import type { Evaluator, IAgentRuntime, Memory } from "@elizaos/core"; +import type { HindsightClient } from "./client.js"; +import { type BankResolver, type RetainOptions, resolveBank } from "./options.js"; + +/** + * Builds the retain evaluator. Evaluators run after the agent has processed a + * turn, which is the natural moment to persist new memories. By default it + * stores the incoming message; set `includeAgentMessages` to also store the + * agent's replies. Retain is fire-and-forget by default so it never adds + * latency to the conversation. + */ +export function createHindsightEvaluator( + client: HindsightClient, + bank: BankResolver | undefined, + options: RetainOptions = {} +): Evaluator { + const isAsync = options.async ?? true; + + const retain = (bankId: string, text: string): Promise => { + const promise = client + .retain(bankId, text, { + async: isAsync, + tags: options.tags, + metadata: options.metadata, + }) + .catch(() => undefined); + return isAsync ? Promise.resolve() : promise; + }; + + return { + name: "HINDSIGHT_RETAIN", + description: "Persists conversation messages to Hindsight long-term memory.", + alwaysRun: true, + examples: [], + validate: async (_runtime: IAgentRuntime, message: Memory) => { + return Boolean(message.content?.text?.trim()); + }, + handler: async ( + runtime: IAgentRuntime, + message: Memory, + _state, + _options, + _callback, + responses?: Memory[] + ) => { + const bankId = resolveBank(bank, message); + const fromAgent = message.entityId === runtime.agentId; + + // Store the triggering message unless it is the agent's own and the + // caller opted out of retaining agent messages. + const text = message.content?.text?.trim(); + if (text && (!fromAgent || options.includeAgentMessages)) { + await retain(bankId, text); + } + + // Optionally store the agent's replies for this turn. + if (options.includeAgentMessages && responses?.length) { + for (const response of responses) { + const responseText = response.content?.text?.trim(); + if (responseText) await retain(bankId, responseText); + } + } + }, + }; +} diff --git a/hindsight-integrations/eliza/src/index.ts b/hindsight-integrations/eliza/src/index.ts new file mode 100644 index 000000000..5532d6cd6 --- /dev/null +++ b/hindsight-integrations/eliza/src/index.ts @@ -0,0 +1,18 @@ +export { createHindsightPlugin } from "./plugin.js"; +export { createHindsightProvider } from "./provider.js"; +export { createHindsightEvaluator } from "./evaluator.js"; +export { resolveBank } from "./options.js"; +export type { + HindsightPluginOptions, + RecallOptions, + RetainOptions, + BankResolver, +} from "./options.js"; +export type { + HindsightClient, + RecallResult, + RecallResponse, + RetainResponse, + Budget, + FactType, +} from "./client.js"; diff --git a/hindsight-integrations/eliza/src/options.ts b/hindsight-integrations/eliza/src/options.ts new file mode 100644 index 000000000..2f3fa6e72 --- /dev/null +++ b/hindsight-integrations/eliza/src/options.ts @@ -0,0 +1,59 @@ +import type { Memory } from "@elizaos/core"; +import type { Budget, FactType, HindsightClient } from "./client.js"; + +/** + * Resolves which Hindsight memory bank a message belongs to. + * + * A string is used as a fixed bank for every message; a function lets callers + * derive the bank per message (e.g. one bank per user or per room). + */ +export type BankResolver = string | ((message: Memory) => string); + +export interface RecallOptions { + /** Disable memory recall (default: enabled). */ + enabled?: boolean; + /** Restrict recall to these fact types (default: all). */ + types?: FactType[]; + /** Maximum tokens to return (default: API default). */ + maxTokens?: number; + /** Processing budget controlling latency vs. depth (default: 'mid'). */ + budget?: Budget; + /** Include entity observations in recall (default: false). */ + includeEntities?: boolean; + /** Heading rendered above the recalled memories in the prompt. */ + heading?: string; +} + +export interface RetainOptions { + /** Disable retaining messages (default: enabled). */ + enabled?: boolean; + /** Fire-and-forget retain without awaiting completion (default: true). */ + async?: boolean; + /** Tags attached to every retained memory. */ + tags?: string[]; + /** Metadata attached to every retained memory. */ + metadata?: Record; + /** Also retain the agent's own replies, not just incoming messages (default: false). */ + includeAgentMessages?: boolean; +} + +export interface HindsightPluginOptions { + /** A Hindsight client instance (e.g. from `@vectorize-io/hindsight-client`). */ + client: HindsightClient; + /** + * The memory bank to read and write. Defaults to the message's `entityId`, + * giving each user/agent an isolated memory store. + */ + bank?: BankResolver; + /** Recall (read) behaviour. */ + recall?: RecallOptions; + /** Retain (write) behaviour. */ + retain?: RetainOptions; +} + +/** Resolve the bank id for a message, defaulting to its `entityId`. */ +export function resolveBank(bank: BankResolver | undefined, message: Memory): string { + if (typeof bank === "function") return bank(message); + if (typeof bank === "string" && bank.length > 0) return bank; + return message.entityId; +} diff --git a/hindsight-integrations/eliza/src/plugin.ts b/hindsight-integrations/eliza/src/plugin.ts new file mode 100644 index 000000000..c6d4a96f1 --- /dev/null +++ b/hindsight-integrations/eliza/src/plugin.ts @@ -0,0 +1,42 @@ +import type { Plugin } from "@elizaos/core"; +import { createHindsightEvaluator } from "./evaluator.js"; +import type { HindsightPluginOptions } from "./options.js"; +import { createHindsightProvider } from "./provider.js"; + +/** + * Creates an elizaOS plugin that gives an agent long-term memory backed by + * Hindsight. + * + * - A **provider** recalls relevant memories and injects them into the prompt + * before each model call. + * - An **evaluator** retains conversation messages after each turn. + * + * Both sides default to enabled. Disable either via `recall.enabled` / + * `retain.enabled`. + * + * @example + * ```ts + * import { createHindsightPlugin } from "@vectorize-io/hindsight-eliza"; + * import { Hindsight } from "@vectorize-io/hindsight-client"; + * + * const plugin = createHindsightPlugin({ + * client: new Hindsight({ apiKey: process.env.HINDSIGHT_API_KEY }), + * recall: { budget: "high", includeEntities: true }, + * retain: { tags: ["source:eliza"] }, + * }); + * ``` + */ +export function createHindsightPlugin(options: HindsightPluginOptions): Plugin { + const { client, bank, recall = {}, retain = {} } = options; + + const providers = recall.enabled === false ? [] : [createHindsightProvider(client, bank, recall)]; + const evaluators = + retain.enabled === false ? [] : [createHindsightEvaluator(client, bank, retain)]; + + return { + name: "@vectorize-io/hindsight-eliza", + description: "Hindsight long-term memory: recall relevant memories and retain conversations.", + providers, + evaluators, + }; +} diff --git a/hindsight-integrations/eliza/src/provider.ts b/hindsight-integrations/eliza/src/provider.ts new file mode 100644 index 000000000..581e4d1b9 --- /dev/null +++ b/hindsight-integrations/eliza/src/provider.ts @@ -0,0 +1,64 @@ +import type { Provider } from "@elizaos/core"; +import type { HindsightClient, RecallResult } from "./client.js"; +import { type BankResolver, type RecallOptions, resolveBank } from "./options.js"; + +const DEFAULT_HEADING = "# Relevant long-term memories"; + +/** Render recalled memories as a markdown bullet list for prompt inclusion. */ +function formatMemories(results: RecallResult[], heading: string): string { + const lines = results + .map((r) => r.text?.trim()) + .filter((text): text is string => Boolean(text)) + .map((text) => `- ${text}`); + if (lines.length === 0) return ""; + return `${heading}\n${lines.join("\n")}`; +} + +/** + * Builds the recall provider. On every turn it queries Hindsight with the + * incoming message text and injects the relevant memories into the agent's + * prompt context. Recall failures are swallowed so a memory-service outage + * never blocks the agent from responding. + */ +export function createHindsightProvider( + client: HindsightClient, + bank: BankResolver | undefined, + options: RecallOptions = {} +): Provider { + const heading = options.heading ?? DEFAULT_HEADING; + + return { + name: "HINDSIGHT_MEMORY", + description: + "Long-term memories recalled from Hindsight that are relevant to the current message.", + dynamic: false, + get: async (_runtime, message) => { + const query = message.content?.text?.trim(); + if (!query) { + return { text: "", values: {}, data: {} }; + } + + try { + const response = await client.recall(resolveBank(bank, message), query, { + types: options.types, + maxTokens: options.maxTokens, + budget: options.budget, + includeEntities: options.includeEntities, + }); + const results = response.results ?? []; + const text = formatMemories(results, heading); + return { + text, + values: { hindsightMemoryCount: results.length }, + data: { hindsight: response }, + }; + } catch (error) { + return { + text: "", + values: { hindsightMemoryCount: 0 }, + data: { hindsightError: error instanceof Error ? error.message : String(error) }, + }; + } + }, + }; +} diff --git a/hindsight-integrations/eliza/tests/plugin.test.ts b/hindsight-integrations/eliza/tests/plugin.test.ts new file mode 100644 index 000000000..8f6537d95 --- /dev/null +++ b/hindsight-integrations/eliza/tests/plugin.test.ts @@ -0,0 +1,179 @@ +import type { IAgentRuntime, Memory, Provider, Evaluator } from "@elizaos/core"; +import { beforeEach, describe, expect, it, vi } from "vitest"; +import { + createHindsightPlugin, + type HindsightClient, + type RecallResponse, + type RetainResponse, +} from "../src/index.js"; + +const AGENT_ID = "00000000-0000-0000-0000-0000000000a9" as const; +const USER_ID = "00000000-0000-0000-0000-0000000000u5" as const; + +function mockClient(): HindsightClient { + return { + recall: vi.fn( + async (): Promise => ({ + results: [ + { id: "1", text: "User prefers dark mode" }, + { id: "2", text: "User lives in Berlin" }, + ], + }) + ), + retain: vi.fn( + async (bankId: string): Promise => ({ + success: true, + bank_id: bankId, + items_count: 1, + async: true, + }) + ), + }; +} + +function userMessage(text: string): Memory { + return { + entityId: USER_ID, + agentId: AGENT_ID, + roomId: "00000000-0000-0000-0000-0000000000r1", + content: { text }, + } as Memory; +} + +const runtime = { agentId: AGENT_ID } as IAgentRuntime; + +function getProvider(plugin: ReturnType): Provider { + const provider = plugin.providers?.[0]; + if (!provider) throw new Error("provider missing"); + return provider; +} + +function getEvaluator(plugin: ReturnType): Evaluator { + const evaluator = plugin.evaluators?.[0]; + if (!evaluator) throw new Error("evaluator missing"); + return evaluator; +} + +describe("createHindsightPlugin", () => { + let client: HindsightClient; + + beforeEach(() => { + client = mockClient(); + }); + + it("registers a recall provider and a retain evaluator by default", () => { + const plugin = createHindsightPlugin({ client }); + expect(plugin.providers).toHaveLength(1); + expect(plugin.evaluators).toHaveLength(1); + expect(getProvider(plugin).name).toBe("HINDSIGHT_MEMORY"); + expect(getEvaluator(plugin).name).toBe("HINDSIGHT_RETAIN"); + }); + + it("can disable recall or retain", () => { + const plugin = createHindsightPlugin({ + client, + recall: { enabled: false }, + retain: { enabled: false }, + }); + expect(plugin.providers).toHaveLength(0); + expect(plugin.evaluators).toHaveLength(0); + }); + + describe("recall provider", () => { + it("recalls memories and formats them for the prompt", async () => { + const provider = getProvider(createHindsightPlugin({ client })); + const result = await provider.get(runtime, userMessage("What theme do I like?"), {} as never); + + expect(client.recall).toHaveBeenCalledWith( + USER_ID, + "What theme do I like?", + expect.any(Object) + ); + expect(result.text).toContain("User prefers dark mode"); + expect(result.text).toContain("User lives in Berlin"); + expect(result.values?.hindsightMemoryCount).toBe(2); + }); + + it("defaults the bank to the message entityId but honours an override", async () => { + const provider = getProvider(createHindsightPlugin({ client, bank: "team-bank" })); + await provider.get(runtime, userMessage("hi"), {} as never); + expect(client.recall).toHaveBeenCalledWith("team-bank", "hi", expect.any(Object)); + }); + + it("returns empty text for an empty message without calling recall", async () => { + const provider = getProvider(createHindsightPlugin({ client })); + const result = await provider.get(runtime, userMessage(" "), {} as never); + expect(client.recall).not.toHaveBeenCalled(); + expect(result.text).toBe(""); + }); + + it("never throws when recall fails", async () => { + (client.recall as ReturnType).mockRejectedValueOnce(new Error("down")); + const provider = getProvider(createHindsightPlugin({ client })); + const result = await provider.get(runtime, userMessage("hello"), {} as never); + expect(result.text).toBe(""); + expect(result.data?.hindsightError).toBe("down"); + }); + + it("passes recall options through to the client", async () => { + const provider = getProvider( + createHindsightPlugin({ + client, + recall: { budget: "high", types: ["world"], includeEntities: true, maxTokens: 500 }, + }) + ); + await provider.get(runtime, userMessage("q"), {} as never); + expect(client.recall).toHaveBeenCalledWith(USER_ID, "q", { + budget: "high", + types: ["world"], + includeEntities: true, + maxTokens: 500, + }); + }); + }); + + describe("retain evaluator", () => { + it("retains the incoming user message", async () => { + const evaluator = getEvaluator(createHindsightPlugin({ client, retain: { async: false } })); + const message = userMessage("Remember I like dark mode"); + await evaluator.handler(runtime, message, undefined, undefined, undefined, undefined); + expect(client.retain).toHaveBeenCalledWith(USER_ID, "Remember I like dark mode", { + async: false, + tags: undefined, + metadata: undefined, + }); + }); + + it("validates only messages that have text", async () => { + const evaluator = getEvaluator(createHindsightPlugin({ client })); + expect(await evaluator.validate(runtime, userMessage("hi"))).toBe(true); + expect(await evaluator.validate(runtime, userMessage(" "))).toBe(false); + }); + + it("skips the agent's own message by default", async () => { + const evaluator = getEvaluator(createHindsightPlugin({ client, retain: { async: false } })); + const agentMsg = { ...userMessage("my reply"), entityId: AGENT_ID } as Memory; + await evaluator.handler(runtime, agentMsg, undefined, undefined, undefined, undefined); + expect(client.retain).not.toHaveBeenCalled(); + }); + + it("retains agent replies when includeAgentMessages is set", async () => { + const evaluator = getEvaluator( + createHindsightPlugin({ client, retain: { async: false, includeAgentMessages: true } }) + ); + const message = userMessage("hello"); + const responses = [{ ...userMessage("agent answer"), entityId: AGENT_ID } as Memory]; + await evaluator.handler(runtime, message, undefined, undefined, undefined, responses); + expect(client.retain).toHaveBeenCalledWith(USER_ID, "hello", expect.any(Object)); + expect(client.retain).toHaveBeenCalledWith(USER_ID, "agent answer", expect.any(Object)); + }); + + it("does not reject the turn when retain fails (async mode)", async () => { + (client.retain as ReturnType).mockRejectedValue(new Error("boom")); + const evaluator = getEvaluator(createHindsightPlugin({ client })); + await expect( + evaluator.handler(runtime, userMessage("hi"), undefined, undefined, undefined, undefined) + ).resolves.toBeUndefined(); + }); + }); +}); diff --git a/hindsight-integrations/eliza/tsconfig.json b/hindsight-integrations/eliza/tsconfig.json new file mode 100644 index 000000000..7b94e1e79 --- /dev/null +++ b/hindsight-integrations/eliza/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "target": "ES2022", + "module": "ES2022", + "lib": ["ES2022"], + "moduleResolution": "node", + "declaration": true, + "outDir": "./dist", + "rootDir": "./src", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist", "src/**/*.test.ts", "tests"] +} diff --git a/hindsight-integrations/eliza/tsup.config.ts b/hindsight-integrations/eliza/tsup.config.ts new file mode 100644 index 000000000..dbf8d946b --- /dev/null +++ b/hindsight-integrations/eliza/tsup.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from "tsup"; + +export default defineConfig({ + entry: ["src/index.ts"], + format: ["esm"], + dts: true, + outDir: "dist", + clean: true, + sourcemap: true, + bundle: true, + external: ["@elizaos/core"], +}); diff --git a/hindsight-integrations/eliza/vitest.config.ts b/hindsight-integrations/eliza/vitest.config.ts new file mode 100644 index 000000000..49cf00a4e --- /dev/null +++ b/hindsight-integrations/eliza/vitest.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + globals: true, + environment: "node", + include: ["tests/**/*.test.ts", "src/**/*.test.ts"], + }, +}); diff --git a/scripts/release-integration.sh b/scripts/release-integration.sh index cae8c4bff..521cef383 100755 --- a/scripts/release-integration.sh +++ b/scripts/release-integration.sh @@ -13,7 +13,7 @@ print_info() { echo -e "${GREEN}[INFO]${NC} $1"; } print_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } print_error() { echo -e "${RED}[ERROR]${NC} $1"; } -VALID_INTEGRATIONS=("ag2" "agent-framework" "agentcore" "agno" "aider" "ai-sdk" "autogen" "chat" "claude-agent-sdk" "claude-code" "cline" "cloudflare-oauth-proxy" "codex" "composio" "continue" "crewai" "cursor" "cursor-cli" "dify" "flowise" "gemini-spark" "github-copilot" "google-adk" "haystack" "langgraph" "litellm" "llamaindex" "n8n" "nemoclaw" "obsidian" "omo" "openai-agents" "openclaw" "opencode" "openhands" "paperclip" "pipecat" "pydantic-ai" "roo-code" "smolagents" "strands" "superagent" "vapi" "windsurf" "zed") +VALID_INTEGRATIONS=("ag2" "agent-framework" "agentcore" "agno" "aider" "ai-sdk" "autogen" "chat" "claude-agent-sdk" "claude-code" "cline" "cloudflare-oauth-proxy" "codex" "composio" "continue" "crewai" "cursor" "cursor-cli" "dify" "eliza" "flowise" "gemini-spark" "github-copilot" "google-adk" "haystack" "langgraph" "litellm" "llamaindex" "n8n" "nemoclaw" "obsidian" "omo" "openai-agents" "openclaw" "opencode" "openhands" "paperclip" "pipecat" "pydantic-ai" "roo-code" "smolagents" "strands" "superagent" "vapi" "windsurf" "zed") usage() { print_error "Usage: $0 "