From 70f06d3c68b0c74b809df5a396691b94150627f1 Mon Sep 17 00:00:00 2001 From: Dev Agrawal Date: Mon, 29 Sep 2025 16:45:13 -0500 Subject: [PATCH 1/8] chore: update .gitignore to include .env.local --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index f5a678a5..73e349bf 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,5 @@ report-app/.vscode report-app/.reports .web-codegen-scorer + +.env.local \ No newline at end of file From 798cd17f52d334712d38ff02ef44a643795fc9b5 Mon Sep 17 00:00:00 2001 From: Dev Agrawal Date: Mon, 29 Sep 2025 16:56:06 -0500 Subject: [PATCH 2/8] feat: add support for Codex and Claude Code CLI runners This update introduces two new runners, Codex CLI and Claude Code CLI, enhancing the evaluation harness capabilities. The README and relevant files have been updated to reflect these additions, including new options for specifying the runner. Additionally, dependencies have been updated to their latest versions, and the package version has been bumped to 0.0.8. --- README.md | 2 +- package-lock.json | 9141 +++++++++++++---- package.json | 2 + pnpm-lock.yaml | 137 + report-app/src/app/shared/provider-label.ts | 2 + .../claude-code-cli/claude-code-cli-runner.ts | 277 + .../claude-code-cli/claude-code-files.ts | 21 + runner/codegen/codex-cli/codex-cli-runner.ts | 310 + runner/codegen/codex-cli/codex-files.ts | 26 + runner/codegen/llm-runner.ts | 4 + runner/codegen/runner-creation.ts | 12 + runner/eval-cli.ts | 2 +- runner/index.ts | 2 + 13 files changed, 7800 insertions(+), 2138 deletions(-) create mode 100644 runner/codegen/claude-code-cli/claude-code-cli-runner.ts create mode 100644 runner/codegen/claude-code-cli/claude-code-files.ts create mode 100644 runner/codegen/codex-cli/codex-cli-runner.ts create mode 100644 runner/codegen/codex-cli/codex-files.ts diff --git a/README.md b/README.md index 1d9f41cd..cb68f8e5 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,7 @@ You can customize the `web-codegen-scorer eval` script with the following flags: - Example: `web-codegen-scorer eval --model=gemini-2.5-flash --autorater-model=gemini-2.5-flash --env=` - `--runner=`: Specifies the runner to use to execute the eval. Supported runners are - `genkit` (default) or `gemini-cli`. + `genkit` (default), `gemini-cli`, `codex-cli`, or `claude-code-cli`. - `--local`: Runs the script in local mode for the initial code generation request. Instead of calling the LLM, it will attempt to read the initial code from a corresponding file in the diff --git a/package-lock.json b/package-lock.json index 0c54db9d..50f56107 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,24 +1,26 @@ { "name": "web-codegen-scorer", - "version": "0.0.3", + "version": "0.0.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "web-codegen-scorer", - "version": "0.0.3", + "version": "0.0.8", "license": "MIT", "dependencies": { - "@anthropic-ai/sdk": "^0.56.0", + "@anthropic-ai/claude-code": "^1.0.128", + "@anthropic-ai/sdk": "^0.63.0", "@axe-core/puppeteer": "^4.10.2", "@genkit-ai/compat-oai": "^1.19.1", - "@genkit-ai/googleai": "1.19.1", - "@genkit-ai/mcp": "1.19.1", - "@google/gemini-cli": "^0.1.21", - "@google/genai": "1.16.0", + "@genkit-ai/googleai": "1.19.3", + "@genkit-ai/mcp": "1.19.3", + "@google/gemini-cli": "^0.5.0", + "@google/genai": "1.20.0", "@inquirer/prompts": "^7.8.4", - "@safety-web/runner": "0.4.0-alpha.12", - "@safety-web/types": "0.4.0-alpha.7", + "@openai/codex": "^0.42.0", + "@safety-web/runner": "0.4.0-alpha.14", + "@safety-web/types": "0.4.0-alpha.14", "@types/cli-progress": "^3.11.6", "@types/node": "^24.2.0", "@types/yargs": "^17.0.33", @@ -28,8 +30,7 @@ "cli-progress": "^3.12.0", "file-type": "^21.0.0", "genkit": "^1.19.1", - "genkitx-anthropic": "0.23.1", - "gpt-tokenizer": "^3.0.1", + "genkitx-anthropic": "0.25.0", "handlebars": "^4.7.8", "limiter": "^3.0.0", "marked": "^16.1.1", @@ -39,7 +40,8 @@ "sass": "^1.89.2", "strict-csp": "^1.1.1", "stylelint": "^16.21.1", - "stylelint-config-recommended-scss": "^15.0.1", + "stylelint-config-recommended-scss": "^16.0.0", + "tiktoken": "^1.0.22", "tinyglobby": "^0.2.14", "tsx": "^4.20.3", "typescript": "^5.8.3", @@ -54,6 +56,11 @@ "devDependencies": { "prettier": "^3.5.3", "tsx": "^4.20.3" + }, + "engines": { + "npm": "Please use pnpm instead of NPM to install dependencies", + "pnpm": "10.17.1", + "yarn": "Please use pnpm instead of Yarn to install dependencies" } }, "node_modules/@alcalzone/ansi-tokenize": { @@ -69,13 +76,44 @@ "node": ">=18" } }, + "node_modules/@anthropic-ai/claude-code": { + "version": "1.0.128", + "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-code/-/claude-code-1.0.128.tgz", + "integrity": "sha512-uUg5cFMJfeQetQzFw76Vpbro6DAXst2Lpu8aoZWRFSoQVYu5ZSAnbBoxaWmW/IgnHSqIIvtMwzCoqmcA9j9rNQ==", + "license": "SEE LICENSE IN README.md", + "bin": { + "claude": "cli.js" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "^0.33.5", + "@img/sharp-darwin-x64": "^0.33.5", + "@img/sharp-linux-arm": "^0.33.5", + "@img/sharp-linux-arm64": "^0.33.5", + "@img/sharp-linux-x64": "^0.33.5", + "@img/sharp-win32-x64": "^0.33.5" + } + }, "node_modules/@anthropic-ai/sdk": { - "version": "0.56.0", - "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.56.0.tgz", - "integrity": "sha512-SLCB8M8+VMg1cpCucnA1XWHGWqVSZtIWzmOdDOEu3eTFZMB+A0sGZ1ESO5MHDnqrNTXz3safMrWx9x4rMZSOqA==", + "version": "0.63.1", + "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.63.1.tgz", + "integrity": "sha512-wMA/Xx5GLO+npV992YKUfsmlI6699XG/jFjCPTf/nsMBfUh3e3KmNiOKuhqSMZibOjoLOlhYc7L4pfLPI8A+RA==", "license": "MIT", + "dependencies": { + "json-schema-to-ts": "^3.1.1" + }, "bin": { "anthropic-ai-sdk": "bin/cli" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } } }, "node_modules/@axe-core/puppeteer": { @@ -116,6 +154,15 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@borewit/text-codec": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.1.1.tgz", @@ -908,13 +955,140 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, + "node_modules/@fastify/busboy": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-3.2.0.tgz", + "integrity": "sha512-m9FVDXU3GT2ITSe0UaMA5rU3QkfC/UXtCU8y0gSN/GugTqtVldOBWIB5V6V3sbmenVZUIpU6f+mPEO2+m5iTaA==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/@firebase/app-check-interop-types": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@firebase/app-check-interop-types/-/app-check-interop-types-0.3.3.tgz", + "integrity": "sha512-gAlxfPLT2j8bTI/qfe3ahl2I2YcBQ8cFIBdhAQA4I2f3TndcO+22YizyGYuttLHPQEpWkhmpFW60VCFEPg4g5A==", + "license": "Apache-2.0", + "optional": true, + "peer": true + }, + "node_modules/@firebase/app-types": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.3.tgz", + "integrity": "sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw==", + "license": "Apache-2.0", + "optional": true, + "peer": true + }, + "node_modules/@firebase/auth-interop-types": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.4.tgz", + "integrity": "sha512-JPgcXKCuO+CWqGDnigBtvo09HeBs5u/Ktc2GaFj2m01hLarbxthLNm7Fk8iOP1aqAtXV+fnnGj7U28xmk7IwVA==", + "license": "Apache-2.0", + "optional": true, + "peer": true + }, + "node_modules/@firebase/component": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.7.0.tgz", + "integrity": "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/database": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-1.1.0.tgz", + "integrity": "sha512-gM6MJFae3pTyNLoc9VcJNuaUDej0ctdjn3cVtILo3D5lpp0dmUHHLFN/pUKe7ImyeB1KAvRlEYxvIHNF04Filg==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@firebase/app-check-interop-types": "0.3.3", + "@firebase/auth-interop-types": "0.2.4", + "@firebase/component": "0.7.0", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "faye-websocket": "0.11.4", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/database-compat": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-2.1.0.tgz", + "integrity": "sha512-8nYc43RqxScsePVd1qe1xxvWNf0OBnbwHxmXJ7MHSuuTVYFO3eLyLW3PiCKJ9fHnmIz4p4LbieXwz+qtr9PZDg==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@firebase/component": "0.7.0", + "@firebase/database": "1.1.0", + "@firebase/database-types": "1.0.16", + "@firebase/logger": "0.5.0", + "@firebase/util": "1.13.0", + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/database-types": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.16.tgz", + "integrity": "sha512-xkQLQfU5De7+SPhEGAXFBnDryUWhhlFXelEg2YeZOQMCdoe7dL64DDAd77SQsR+6uoXIZY5MB4y/inCs4GTfcw==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@firebase/app-types": "0.9.3", + "@firebase/util": "1.13.0" + } + }, + "node_modules/@firebase/logger": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.5.0.tgz", + "integrity": "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@firebase/util": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.13.0.tgz", + "integrity": "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "tslib": "^2.1.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@genkit-ai/ai": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@genkit-ai/ai/-/ai-1.19.2.tgz", - "integrity": "sha512-43H0XH0TQtXYuCgzbPp0Ao/gXE4VqAzRGF3nYqfH5xMCeHxdeGQthpMY90ng5JYxB618G1cPYVdjfwqYhs/Bqg==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/ai/-/ai-1.20.0.tgz", + "integrity": "sha512-mT8rS5Qc3pLKM4nLIRo2PWP7PgNln/4/z3hC96DxIXJ6MGE33nbEqU2X4bHvB33bKxiDgMOahTbOu0APNj8BtA==", "license": "Apache-2.0", "dependencies": { - "@genkit-ai/core": "1.19.2", + "@genkit-ai/core": "1.20.0", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.11.19", "colorette": "^2.0.20", @@ -927,9 +1101,9 @@ } }, "node_modules/@genkit-ai/ai/node_modules/@types/node": { - "version": "20.19.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.15.tgz", - "integrity": "sha512-W3bqcbLsRdFDVcmAM5l6oLlcl67vjevn8j1FPZ4nx+K5jNoWCh+FC/btxFoBPnvQlrHHDwfjp1kjIEDfwJ0Mog==", + "version": "20.19.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.17.tgz", + "integrity": "sha512-gfehUI8N1z92kygssiuWvLiwcbOB3IRktR6hTDgJlXMYh5OvkPSRmgfoBUmfZt+vhwJtX7v1Yw4KvvAf7c5QKQ==", "license": "MIT", "dependencies": { "undici-types": "~6.21.0" @@ -954,9 +1128,9 @@ } }, "node_modules/@genkit-ai/core": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@genkit-ai/core/-/core-1.19.2.tgz", - "integrity": "sha512-QkZRwCQSTQ+0M1ORj9DC/8GLIr7uWYPcubViGX3gtjRJ1QAI6PR4RHgkGipLI8jTQMYFLfJ9XoLPsTNUVz2+vw==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/core/-/core-1.20.0.tgz", + "integrity": "sha512-E0ZL8p3ZXt7pBKj4GzCkLA5dBoUMULLAeFNYzoBFfjndmZhflmo3JgjkefoaCHJi8fl+1pAeF2a+1iqMY/KktQ==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/api": "^1.9.0", @@ -983,1729 +1157,5374 @@ "@genkit-ai/firebase": "^1.16.1" } }, - "node_modules/@genkit-ai/core/node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "license": "Apache-2.0", "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" + "@opentelemetry/api": "^1.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">=14" } }, - "node_modules/@genkit-ai/core/node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/context-async-hooks": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.25.1.tgz", + "integrity": "sha512-UW/ge9zjvAEmRWVapOP0qyCvPulWU6cQxGxDbWEFfGOj1VBBZAuOqTo3X6yWmDTD3Xe15ysCZChHncr2xFMIfQ==", + "license": "Apache-2.0", "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@genkit-ai/core/node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "license": "MIT", + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "license": "Apache-2.0", "dependencies": { - "safe-buffer": "5.2.1" + "@opentelemetry/semantic-conventions": "1.25.1" }, "engines": { - "node": ">= 0.6" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@genkit-ai/core/node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", - "license": "MIT", + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/exporter-trace-otlp-grpc": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.52.1.tgz", + "integrity": "sha512-pVkSH20crBwMTqB3nIN4jpQKUEoB0Z94drIHpYyEqs7UBr+I0cpYyOR3bqjA/UasQUMROb3GX8ZX4/9cVRqGBQ==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-grpc-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1" + }, "engines": { - "node": ">= 0.6" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@genkit-ai/core/node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "license": "MIT" - }, - "node_modules/@genkit-ai/core/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/exporter-trace-otlp-http": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.52.1.tgz", + "integrity": "sha512-05HcNizx0BxcFKKnS5rwOV+2GevLTVIRA0tRgWYyw4yCgR53Ic/xk83toYKts7kbzcI+dswInUg/4s8oyA+tqg==", + "license": "Apache-2.0", "dependencies": { - "ms": "2.0.0" + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@genkit-ai/core/node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", - "license": "MIT", + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/exporter-trace-otlp-proto": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.52.1.tgz", + "integrity": "sha512-pt6uX0noTQReHXNeEslQv7x311/F1gJzMnp1HD2qgypLRPbXDeMzzeTngRTUaUbP6hqWNtPxuLr4DEoZG+TcEQ==", + "license": "Apache-2.0", "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1" }, "engines": { - "node": ">= 0.10.0" + "node": ">=14" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@genkit-ai/core/node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/exporter-zipkin": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.25.1.tgz", + "integrity": "sha512-RmOwSvkimg7ETwJbUOPTMhJm9A9bG1U8s7Zo3ajDh4zM7eYcycQ0dM7FbLD6NXWbI2yj7UY4q8BKinKYBQksyw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/otlp-exporter-base": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.52.1.tgz", + "integrity": "sha512-z175NXOtX5ihdlshtYBe5RpGeBoTXVCKPPLiQlD6FHvpM4Ch+p2B0yWKYSrBfLH24H9zjJiBdTrtD+hLlfnXEQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-transformer": "0.52.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/otlp-grpc-exporter-base": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.52.1.tgz", + "integrity": "sha512-zo/YrSDmKMjG+vPeA9aBBrsQM9Q/f2zo6N04WMB3yNldJRsgpRBeLLwvAt/Ba7dpehDLOEFBd1i2JCoaFtpCoQ==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/otlp-transformer": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.52.1.tgz", + "integrity": "sha512-I88uCZSZZtVa0XniRqQWKbjAUm73I8tpEy/uJYPPYw5d7BRdVk0RfTBQw8kSUl01oVWEuqxLDa802222MYyWHg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-logs": "0.52.1", + "@opentelemetry/sdk-metrics": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "protobufjs": "^7.3.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/propagator-b3": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.25.1.tgz", + "integrity": "sha512-p6HFscpjrv7//kE+7L+3Vn00VEDUJB0n6ZrjkTYHrJ58QZ8B3ajSJhRbCcY6guQ3PDjTbxWklyvIN2ojVbIb1A==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/propagator-jaeger": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.25.1.tgz", + "integrity": "sha512-nBprRf0+jlgxks78G/xq72PipVK+4or9Ypntw0gVZYNTCSK8rg5SeaGV19tV920CMqBD/9UIOiFr23Li/Q8tiA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/sdk-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.52.1.tgz", + "integrity": "sha512-MBYh+WcPPsN8YpRHRmK1Hsca9pVlyyKd4BxOC4SsgHACnl/bPp4Cri9hWhVm5+2tiQ9Zf4qSc1Jshw9tOLGWQA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.4.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/sdk-metrics": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.25.1.tgz", + "integrity": "sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "lodash.merge": "^4.6.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/sdk-node": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-node/-/sdk-node-0.52.1.tgz", + "integrity": "sha512-uEG+gtEr6eKd8CVWeKMhH2olcCHM9dEK68pe0qE0be32BcCRsvYURhHaD1Srngh1SQcnQzZ4TP324euxqtBOJA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/exporter-trace-otlp-grpc": "0.52.1", + "@opentelemetry/exporter-trace-otlp-http": "0.52.1", + "@opentelemetry/exporter-trace-otlp-proto": "0.52.1", + "@opentelemetry/exporter-zipkin": "1.25.1", + "@opentelemetry/instrumentation": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-logs": "0.52.1", + "@opentelemetry/sdk-metrics": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "@opentelemetry/sdk-trace-node": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", + "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/sdk-trace-node": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.25.1.tgz", + "integrity": "sha512-nMcjFIKxnFqoez4gUmihdBrbpsEnAX/Xj16sGvZm+guceYE0NE00vLhpDVK6f3q8Q4VFI5xG8JjlXKMB/SkTTQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/context-async-hooks": "1.25.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/propagator-b3": "1.25.1", + "@opentelemetry/propagator-jaeger": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/core/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=14" + } + }, + "node_modules/@genkit-ai/core/node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@genkit-ai/core/node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "license": "MIT", "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/@genkit-ai/core/node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@genkit-ai/core/node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@genkit-ai/core/node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/@genkit-ai/core/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@genkit-ai/core/node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@genkit-ai/core/node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@genkit-ai/core/node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@genkit-ai/core/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@genkit-ai/core/node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@genkit-ai/core/node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@genkit-ai/core/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@genkit-ai/core/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@genkit-ai/core/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@genkit-ai/core/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/@genkit-ai/core/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@genkit-ai/core/node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "node_modules/@genkit-ai/core/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@genkit-ai/core/node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@genkit-ai/core/node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@genkit-ai/core/node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@genkit-ai/core/node_modules/send/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==", + "license": "MIT" + }, + "node_modules/@genkit-ai/core/node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@genkit-ai/core/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@genkit-ai/core/node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@genkit-ai/firebase": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/firebase/-/firebase-1.20.0.tgz", + "integrity": "sha512-ggkgNSQr8WDjBLlDC8Xt4vALefLtBryxld7E9hEKK1aCpDh2T6tPvY7pOX7rTeB5Ob0ybsNKq7cZyxbJfDhdTA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@genkit-ai/google-cloud": "^1.20.0" + }, + "peerDependencies": { + "@google-cloud/firestore": "^7.11.0", + "firebase": ">=11.5.0", + "firebase-admin": ">=12.2", + "genkit": "^1.20.0" + }, + "peerDependenciesMeta": { + "firebase": { + "optional": true + } + } + }, + "node_modules/@genkit-ai/google-cloud": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/@genkit-ai/google-cloud/-/google-cloud-1.20.0.tgz", + "integrity": "sha512-1SvjrcH89W7DfL/57OFS7hUhOrziAhYs6H3cKKinrvczkIniJqGDV3lT/ddEV6q5tnTnvaDedD1PUug5gQht8w==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@google-cloud/logging-winston": "^6.0.0", + "@google-cloud/opentelemetry-cloud-monitoring-exporter": "^0.19.0", + "@google-cloud/opentelemetry-cloud-trace-exporter": "^2.4.1", + "@google-cloud/opentelemetry-resource-util": "^2.4.0", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/auto-instrumentations-node": "^0.49.1", + "@opentelemetry/core": "~1.25.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/instrumentation-pino": "^0.41.0", + "@opentelemetry/instrumentation-winston": "^0.39.0", + "@opentelemetry/resources": "~1.25.0", + "@opentelemetry/sdk-metrics": "~1.25.0", + "@opentelemetry/sdk-node": "^0.52.0", + "@opentelemetry/sdk-trace-base": "~1.25.0", + "google-auth-library": "^9.6.3", + "node-fetch": "^3.3.2", + "winston": "^3.12.0" + }, + "peerDependencies": { + "genkit": "^1.20.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@google-cloud/opentelemetry-cloud-monitoring-exporter": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@google-cloud/opentelemetry-cloud-monitoring-exporter/-/opentelemetry-cloud-monitoring-exporter-0.19.0.tgz", + "integrity": "sha512-5SOPXwC6RET4ZvXxw5D97dp8fWpqWEunHrzrUUGXhG4UAeedQe1KvYV8CK+fnaAbN2l2ha6QDYspT6z40TVY0g==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@google-cloud/opentelemetry-resource-util": "^2.3.0", + "@google-cloud/precise-date": "^4.0.0", + "google-auth-library": "^9.0.0", + "googleapis": "^137.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0", + "@opentelemetry/core": "^1.0.0", + "@opentelemetry/resources": "^1.0.0", + "@opentelemetry/sdk-metrics": "^1.0.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@google-cloud/opentelemetry-cloud-trace-exporter": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@google-cloud/opentelemetry-cloud-trace-exporter/-/opentelemetry-cloud-trace-exporter-2.4.1.tgz", + "integrity": "sha512-Dq2IyAyA9PCjbjLOn86i2byjkYPC59b5ic8k/L4q5bBWH0Jro8lzMs8C0G5pJfqh2druj8HF+oAIAlSdWQ+Z9Q==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@google-cloud/opentelemetry-resource-util": "^2.4.0", + "@grpc/grpc-js": "^1.1.8", + "@grpc/proto-loader": "^0.7.0", + "google-auth-library": "^9.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0", + "@opentelemetry/core": "^1.0.0", + "@opentelemetry/resources": "^1.0.0", + "@opentelemetry/sdk-trace-base": "^1.0.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@google-cloud/opentelemetry-resource-util": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@google-cloud/opentelemetry-resource-util/-/opentelemetry-resource-util-2.4.0.tgz", + "integrity": "sha512-/7ujlMoKtDtrbQlJihCjQnm31n2s2RTlvJqcSbt2jV3OkCzPAdo3u31Q13HNugqtIRUSk7bUoLx6AzhURkhW4w==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.22.0", + "gcp-metadata": "^6.0.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/resources": "^1.0.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@grpc/proto-loader": { + "version": "0.7.15", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz", + "integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/context-async-hooks": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.25.1.tgz", + "integrity": "sha512-UW/ge9zjvAEmRWVapOP0qyCvPulWU6cQxGxDbWEFfGOj1VBBZAuOqTo3X6yWmDTD3Xe15ysCZChHncr2xFMIfQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/exporter-trace-otlp-grpc": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.52.1.tgz", + "integrity": "sha512-pVkSH20crBwMTqB3nIN4jpQKUEoB0Z94drIHpYyEqs7UBr+I0cpYyOR3bqjA/UasQUMROb3GX8ZX4/9cVRqGBQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-grpc-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/exporter-trace-otlp-http": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.52.1.tgz", + "integrity": "sha512-05HcNizx0BxcFKKnS5rwOV+2GevLTVIRA0tRgWYyw4yCgR53Ic/xk83toYKts7kbzcI+dswInUg/4s8oyA+tqg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/exporter-trace-otlp-proto": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.52.1.tgz", + "integrity": "sha512-pt6uX0noTQReHXNeEslQv7x311/F1gJzMnp1HD2qgypLRPbXDeMzzeTngRTUaUbP6hqWNtPxuLr4DEoZG+TcEQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/exporter-zipkin": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.25.1.tgz", + "integrity": "sha512-RmOwSvkimg7ETwJbUOPTMhJm9A9bG1U8s7Zo3ajDh4zM7eYcycQ0dM7FbLD6NXWbI2yj7UY4q8BKinKYBQksyw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/otlp-exporter-base": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.52.1.tgz", + "integrity": "sha512-z175NXOtX5ihdlshtYBe5RpGeBoTXVCKPPLiQlD6FHvpM4Ch+p2B0yWKYSrBfLH24H9zjJiBdTrtD+hLlfnXEQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-transformer": "0.52.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/otlp-grpc-exporter-base": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.52.1.tgz", + "integrity": "sha512-zo/YrSDmKMjG+vPeA9aBBrsQM9Q/f2zo6N04WMB3yNldJRsgpRBeLLwvAt/Ba7dpehDLOEFBd1i2JCoaFtpCoQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/otlp-transformer": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.52.1.tgz", + "integrity": "sha512-I88uCZSZZtVa0XniRqQWKbjAUm73I8tpEy/uJYPPYw5d7BRdVk0RfTBQw8kSUl01oVWEuqxLDa802222MYyWHg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-logs": "0.52.1", + "@opentelemetry/sdk-metrics": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "protobufjs": "^7.3.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/propagator-b3": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.25.1.tgz", + "integrity": "sha512-p6HFscpjrv7//kE+7L+3Vn00VEDUJB0n6ZrjkTYHrJ58QZ8B3ajSJhRbCcY6guQ3PDjTbxWklyvIN2ojVbIb1A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/propagator-jaeger": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.25.1.tgz", + "integrity": "sha512-nBprRf0+jlgxks78G/xq72PipVK+4or9Ypntw0gVZYNTCSK8rg5SeaGV19tV920CMqBD/9UIOiFr23Li/Q8tiA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/sdk-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.52.1.tgz", + "integrity": "sha512-MBYh+WcPPsN8YpRHRmK1Hsca9pVlyyKd4BxOC4SsgHACnl/bPp4Cri9hWhVm5+2tiQ9Zf4qSc1Jshw9tOLGWQA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.4.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/sdk-metrics": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.25.1.tgz", + "integrity": "sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "lodash.merge": "^4.6.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/sdk-node": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-node/-/sdk-node-0.52.1.tgz", + "integrity": "sha512-uEG+gtEr6eKd8CVWeKMhH2olcCHM9dEK68pe0qE0be32BcCRsvYURhHaD1Srngh1SQcnQzZ4TP324euxqtBOJA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/exporter-trace-otlp-grpc": "0.52.1", + "@opentelemetry/exporter-trace-otlp-http": "0.52.1", + "@opentelemetry/exporter-trace-otlp-proto": "0.52.1", + "@opentelemetry/exporter-zipkin": "1.25.1", + "@opentelemetry/instrumentation": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-logs": "0.52.1", + "@opentelemetry/sdk-metrics": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "@opentelemetry/sdk-trace-node": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", + "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/sdk-trace-node": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.25.1.tgz", + "integrity": "sha512-nMcjFIKxnFqoez4gUmihdBrbpsEnAX/Xj16sGvZm+guceYE0NE00vLhpDVK6f3q8Q4VFI5xG8JjlXKMB/SkTTQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/context-async-hooks": "1.25.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/propagator-b3": "1.25.1", + "@opentelemetry/propagator-jaeger": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT", + "optional": true + }, + "node_modules/@genkit-ai/google-cloud/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT", + "optional": true + }, + "node_modules/@genkit-ai/google-cloud/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "optional": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "optional": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@genkit-ai/google-cloud/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@genkit-ai/googleai": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/@genkit-ai/googleai/-/googleai-1.19.3.tgz", + "integrity": "sha512-o9laBU4L2/LeqK+KP9xXPu2wwGwRYQ1Z0oxLWwSJgk1u9JBAZ3/3LMRZTkgfXDPiDynwyHmxoEIPbsuEqu/bGw==", + "license": "Apache-2.0", + "dependencies": { + "@google/generative-ai": "^0.24.0", + "google-auth-library": "^9.6.3", + "node-fetch": "^3.3.2" + }, + "peerDependencies": { + "genkit": "^1.19.3" + } + }, + "node_modules/@genkit-ai/mcp": { + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/@genkit-ai/mcp/-/mcp-1.19.3.tgz", + "integrity": "sha512-OgAA/h7x0GB9bvHGURHBxLBNKEQiAokmIjPoouP0t6AZzMnl15Q8iosQzQz1ZBMA8wdYKGatdfvSt3sh2DPuOg==", + "license": "Apache-2.0", + "peerDependencies": { + "@modelcontextprotocol/sdk": "^1.13.0", + "genkit": "^1.19.3" + } + }, + "node_modules/@google-cloud/common": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-5.0.2.tgz", + "integrity": "sha512-V7bmBKYQyu0eVG2BFejuUjlBt+zrya6vtsKdY+JxMM/dNntPF41vZ9+LhOshEUH01zOHEqBSvI7Dad7ZS6aUeA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@google-cloud/projectify": "^4.0.0", + "@google-cloud/promisify": "^4.0.0", + "arrify": "^2.0.1", + "duplexify": "^4.1.1", + "extend": "^3.0.2", + "google-auth-library": "^9.0.0", + "html-entities": "^2.5.2", + "retry-request": "^7.0.0", + "teeny-request": "^9.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/firestore": { + "version": "7.11.6", + "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-7.11.6.tgz", + "integrity": "sha512-EW/O8ktzwLfyWBOsNuhRoMi8lrC3clHM5LVFhGvO1HCsLozCOOXRAlHrYBoE6HL42Sc8yYMuCb2XqcnJ4OOEpw==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@opentelemetry/api": "^1.3.0", + "fast-deep-equal": "^3.1.1", + "functional-red-black-tree": "^1.0.1", + "google-gax": "^4.3.3", + "protobufjs": "^7.2.6" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/logging": { + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@google-cloud/logging/-/logging-11.2.1.tgz", + "integrity": "sha512-2h9HBJG3OAsvzXmb81qXmaTPfXYU7KJTQUxunoOKFGnY293YQ/eCkW1Y5mHLocwpEqeqQYT/Qvl6Tk+Q7PfStw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@google-cloud/common": "^5.0.0", + "@google-cloud/paginator": "^5.0.0", + "@google-cloud/projectify": "^4.0.0", + "@google-cloud/promisify": "4.0.0", + "@opentelemetry/api": "^1.7.0", + "arrify": "^2.0.1", + "dot-prop": "^6.0.0", + "eventid": "^2.0.0", + "extend": "^3.0.2", + "gcp-metadata": "^6.0.0", + "google-auth-library": "^9.0.0", + "google-gax": "^4.0.3", + "on-finished": "^2.3.0", + "pumpify": "^2.0.1", + "stream-events": "^1.0.5", + "uuid": "^9.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/logging-winston": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@google-cloud/logging-winston/-/logging-winston-6.0.1.tgz", + "integrity": "sha512-tgA/qe/aGZITMrJ/5Tuykv234pLb/Qo6iDZ8SDkjbsiIy69mLQmbphrUd/IqnE17BSDfrwDUckvWdghiy8b+Qg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@google-cloud/logging": "^11.0.0", + "google-auth-library": "^9.0.0", + "lodash.mapvalues": "^4.6.0", + "winston-transport": "^4.3.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "winston": ">=3.2.1" + } + }, + "node_modules/@google-cloud/logging/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@google-cloud/paginator": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-5.0.2.tgz", + "integrity": "sha512-DJS3s0OVH4zFDB1PzjxAsHqJT6sKVbRwwML0ZBP9PbU7Yebtu/7SWMRzvO2J3nUi9pRNITCfu4LJeooM2w4pjg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "arrify": "^2.0.0", + "extend": "^3.0.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/precise-date": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/precise-date/-/precise-date-4.0.0.tgz", + "integrity": "sha512-1TUx3KdaU3cN7nfCdNf+UVqA/PSX29Cjcox3fZZBtINlRrXVTmUkQnCKv2MbBUbCopbK4olAT1IHl76uZyCiVA==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/projectify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-4.0.0.tgz", + "integrity": "sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/promisify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-4.0.0.tgz", + "integrity": "sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@google-cloud/storage": { + "version": "7.17.1", + "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-7.17.1.tgz", + "integrity": "sha512-2FMQbpU7qK+OtBPaegC6n+XevgZksobUGo6mGKnXNmeZpvLiAo1gTAE3oTKsrMGDV4VtL8Zzpono0YsK/Q7Iqg==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@google-cloud/paginator": "^5.0.0", + "@google-cloud/projectify": "^4.0.0", + "@google-cloud/promisify": "<4.1.0", + "abort-controller": "^3.0.0", + "async-retry": "^1.3.3", + "duplexify": "^4.1.3", + "fast-xml-parser": "^4.4.1", + "gaxios": "^6.0.2", + "google-auth-library": "^9.6.3", + "html-entities": "^2.5.2", + "mime": "^3.0.0", + "p-limit": "^3.0.1", + "retry-request": "^7.0.0", + "teeny-request": "^9.0.0", + "uuid": "^8.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@google-cloud/storage/node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "license": "MIT", + "optional": true, + "peer": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@google-cloud/storage/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "optional": true, + "peer": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@google/gemini-cli": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@google/gemini-cli/-/gemini-cli-0.5.5.tgz", + "integrity": "sha512-/pvbOtIUraqXOSs+FcyOgmU4keuDdZyWb4jn5NOVQfWWidsnGlypXysYkOuI59AaEAlxmYc+gFy8fjED7SEqNQ==", + "dependencies": { + "@google/gemini-cli-core": "0.5.5", + "@google/genai": "1.16.0", + "@iarna/toml": "^2.2.5", + "@modelcontextprotocol/sdk": "^1.15.1", + "@types/update-notifier": "^6.0.8", + "command-exists": "^1.2.9", + "diff": "^7.0.0", + "dotenv": "^17.1.0", + "fzf": "^0.5.2", + "glob": "^10.4.1", + "highlight.js": "^11.11.1", + "ink": "^6.2.3", + "ink-gradient": "^3.0.0", + "ink-spinner": "^5.0.0", + "lowlight": "^3.3.0", + "open": "^10.1.2", + "react": "^19.1.0", + "read-package-up": "^11.0.0", + "shell-quote": "^1.8.3", + "simple-git": "^3.28.0", + "string-width": "^7.1.0", + "strip-ansi": "^7.1.0", + "strip-json-comments": "^3.1.1", + "undici": "^7.10.0", + "update-notifier": "^7.3.1", + "wrap-ansi": "9.0.2", + "yargs": "^17.7.2", + "zod": "^3.23.8" + }, + "bin": { + "gemini": "dist/index.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@google/gemini-cli-core": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@google/gemini-cli-core/-/gemini-cli-core-0.5.5.tgz", + "integrity": "sha512-Q7XaQFez1aZlj51jEjdCjRxQL38LD7Rnve8xqt3k3SPdA934GMfs6B2a1rMlWuI8Aum0Jxq+u1Z2Hrea/FzzTg==", + "dependencies": { + "@google/genai": "1.16.0", + "@joshua.litt/get-ripgrep": "^0.0.2", + "@modelcontextprotocol/sdk": "^1.11.0", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/exporter-logs-otlp-grpc": "^0.203.0", + "@opentelemetry/exporter-logs-otlp-http": "^0.203.0", + "@opentelemetry/exporter-metrics-otlp-grpc": "^0.203.0", + "@opentelemetry/exporter-metrics-otlp-http": "^0.203.0", + "@opentelemetry/exporter-trace-otlp-grpc": "^0.203.0", + "@opentelemetry/exporter-trace-otlp-http": "^0.203.0", + "@opentelemetry/instrumentation-http": "^0.203.0", + "@opentelemetry/sdk-node": "^0.203.0", + "@types/glob": "^8.1.0", + "@types/html-to-text": "^9.0.4", + "@xterm/headless": "5.5.0", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.0", + "chardet": "^2.1.0", + "diff": "^7.0.0", + "dotenv": "^17.1.0", + "fast-levenshtein": "^2.0.6", + "fast-uri": "^3.0.6", + "fdir": "^6.4.6", + "fzf": "^0.5.2", + "glob": "^10.4.5", + "google-auth-library": "^9.11.0", + "html-to-text": "^9.0.5", + "https-proxy-agent": "^7.0.6", + "ignore": "^7.0.0", + "marked": "^15.0.12", + "mime": "4.0.7", + "mnemonist": "^0.40.3", + "open": "^10.1.2", + "picomatch": "^4.0.1", + "shell-quote": "^1.8.3", + "simple-git": "^3.28.0", + "strip-ansi": "^7.1.0", + "undici": "^7.10.0", + "ws": "^8.18.0" + }, + "engines": { + "node": ">=20" + }, + "optionalDependencies": { + "@lydell/node-pty": "1.1.0", + "@lydell/node-pty-darwin-arm64": "1.1.0", + "@lydell/node-pty-darwin-x64": "1.1.0", + "@lydell/node-pty-linux-x64": "1.1.0", + "@lydell/node-pty-win32-arm64": "1.1.0", + "@lydell/node-pty-win32-x64": "1.1.0", + "node-pty": "^1.0.0" + } + }, + "node_modules/@google/gemini-cli-core/node_modules/@google/genai": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/@google/genai/-/genai-1.16.0.tgz", + "integrity": "sha512-hdTYu39QgDFxv+FB6BK2zi4UIJGWhx2iPc0pHQ0C5Q/RCi+m+4gsryIzTGO+riqWcUA8/WGYp6hpqckdOBNysw==", + "license": "Apache-2.0", + "dependencies": { + "google-auth-library": "^9.14.2", + "ws": "^8.18.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@modelcontextprotocol/sdk": "^1.11.4" + }, + "peerDependenciesMeta": { + "@modelcontextprotocol/sdk": { + "optional": true + } + } + }, + "node_modules/@google/gemini-cli-core/node_modules/marked": { + "version": "15.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", + "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@google/gemini-cli/node_modules/@google/genai": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/@google/genai/-/genai-1.16.0.tgz", + "integrity": "sha512-hdTYu39QgDFxv+FB6BK2zi4UIJGWhx2iPc0pHQ0C5Q/RCi+m+4gsryIzTGO+riqWcUA8/WGYp6hpqckdOBNysw==", + "license": "Apache-2.0", + "dependencies": { + "google-auth-library": "^9.14.2", + "ws": "^8.18.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@modelcontextprotocol/sdk": "^1.11.4" + }, + "peerDependenciesMeta": { + "@modelcontextprotocol/sdk": { + "optional": true + } + } + }, + "node_modules/@google/gemini-cli/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@google/gemini-cli/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@google/gemini-cli/node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@google/gemini-cli/node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@google/gemini-cli/node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@google/gemini-cli/node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@google/gemini-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@google/gemini-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/@google/gemini-cli/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/@google/gemini-cli/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@google/gemini-cli/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@google/gemini-cli/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@google/gemini-cli/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/@google/gemini-cli/node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@google/gemini-cli/node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@google/genai": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/@google/genai/-/genai-1.20.0.tgz", + "integrity": "sha512-QdShxO9LX35jFogy3iKprQNqgKKveux4H2QjOnyIvyHRuGi6PHiz3fjNf8Y0VPY8o5V2fHqR2XqiSVoz7yZs0w==", + "license": "Apache-2.0", + "dependencies": { + "google-auth-library": "^9.14.2", + "ws": "^8.18.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@modelcontextprotocol/sdk": "^1.11.4" + }, + "peerDependenciesMeta": { + "@modelcontextprotocol/sdk": { + "optional": true + } + } + }, + "node_modules/@google/generative-ai": { + "version": "0.24.1", + "resolved": "https://registry.npmjs.org/@google/generative-ai/-/generative-ai-0.24.1.tgz", + "integrity": "sha512-MqO+MLfM6kjxcKoy0p1wRzG3b4ZZXtPI+z2IE26UogS2Cm/XHO+7gGRBh6gcJsOiIVoH93UwKvW4HdgiOZCy9Q==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@grpc/grpc-js": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.0.tgz", + "integrity": "sha512-N8Jx6PaYzcTRNzirReJCtADVoq4z7+1KQ4E70jTg/koQiMoUSN1kbNjPOqpPbhMFhfU1/l7ixspPl8dNY+FoUg==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/proto-loader": "^0.8.0", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.8.0.tgz", + "integrity": "sha512-rc1hOQtjIWGxcxpb9aHAfLpIctjEnsDehj0DAiVfBlmT84uvR0uUtN2hEi/ecvWVjXUGf5qPF4qEgiLOx1YIMQ==", + "license": "Apache-2.0", + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.5.3", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@grpc/proto-loader/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@grpc/proto-loader/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@grpc/proto-loader/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@grpc/proto-loader/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@grpc/proto-loader/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/@grpc/proto-loader/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/@grpc/proto-loader/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@grpc/proto-loader/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@grpc/proto-loader/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@grpc/proto-loader/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@grpc/proto-loader/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@grpc/proto-loader/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@iarna/toml": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", + "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", + "license": "ISC" + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@inquirer/ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.0.tgz", + "integrity": "sha512-JWaTfCxI1eTmJ1BIv86vUfjVatOdxwD0DAVKYevY8SazeUUZtW+tNbsdejVO1GYE0GXJW1N1ahmiC3TFd+7wZA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.2.4.tgz", + "integrity": "sha512-2n9Vgf4HSciFq8ttKXk+qy+GsyTXPV1An6QAwe/8bkbbqvG4VW1I/ZY1pNu2rf+h9bdzMLPbRSfcNxkHBy/Ydw==", + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.0", + "@inquirer/core": "^10.2.2", + "@inquirer/figures": "^1.0.13", + "@inquirer/type": "^3.0.8", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/confirm": { + "version": "5.1.18", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.18.tgz", + "integrity": "sha512-MilmWOzHa3Ks11tzvuAmFoAd/wRuaP3SwlT1IZhyMke31FKLxPiuDWcGXhU+PKveNOpAc4axzAgrgxuIJJRmLw==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.2.2", + "@inquirer/type": "^3.0.8" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.2.2.tgz", + "integrity": "sha512-yXq/4QUnk4sHMtmbd7irwiepjB8jXU0kkFRL4nr/aDBA2mDz13cMakEWdDwX3eSCTkk03kwcndD1zfRAIlELxA==", + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.0", + "@inquirer/figures": "^1.0.13", + "@inquirer/type": "^3.0.8", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/editor": { + "version": "4.2.20", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.20.tgz", + "integrity": "sha512-7omh5y5bK672Q+Brk4HBbnHNowOZwrb/78IFXdrEB9PfdxL3GudQyDk8O9vQ188wj3xrEebS2M9n18BjJoI83g==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.2.2", + "@inquirer/external-editor": "^1.0.2", + "@inquirer/type": "^3.0.8" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand": { + "version": "4.0.20", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.20.tgz", + "integrity": "sha512-Dt9S+6qUg94fEvgn54F2Syf0Z3U8xmnBI9ATq2f5h9xt09fs2IJXSCIXyyVHwvggKWFXEY/7jATRo2K6Dkn6Ow==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.2.2", + "@inquirer/type": "^3.0.8", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.2.tgz", + "integrity": "sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==", + "license": "MIT", + "dependencies": { + "chardet": "^2.1.0", + "iconv-lite": "^0.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.13.tgz", + "integrity": "sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.2.4.tgz", + "integrity": "sha512-cwSGpLBMwpwcZZsc6s1gThm0J+it/KIJ+1qFL2euLmSKUMGumJ5TcbMgxEjMjNHRGadouIYbiIgruKoDZk7klw==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.2.2", + "@inquirer/type": "^3.0.8" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number": { + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.20.tgz", + "integrity": "sha512-bbooay64VD1Z6uMfNehED2A2YOPHSJnQLs9/4WNiV/EK+vXczf/R988itL2XLDGTgmhMF2KkiWZo+iEZmc4jqg==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.2.2", + "@inquirer/type": "^3.0.8" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password": { + "version": "4.0.20", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.20.tgz", + "integrity": "sha512-nxSaPV2cPvvoOmRygQR+h0B+Av73B01cqYLcr7NXcGXhbmsYfUb8fDdw2Us1bI2YsX+VvY7I7upgFYsyf8+Nug==", + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.0", + "@inquirer/core": "^10.2.2", + "@inquirer/type": "^3.0.8" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.8.6.tgz", + "integrity": "sha512-68JhkiojicX9SBUD8FE/pSKbOKtwoyaVj1kwqLfvjlVXZvOy3iaSWX4dCLsZyYx/5Ur07Fq+yuDNOen+5ce6ig==", + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^4.2.4", + "@inquirer/confirm": "^5.1.18", + "@inquirer/editor": "^4.2.20", + "@inquirer/expand": "^4.0.20", + "@inquirer/input": "^4.2.4", + "@inquirer/number": "^3.0.20", + "@inquirer/password": "^4.0.20", + "@inquirer/rawlist": "^4.1.8", + "@inquirer/search": "^3.1.3", + "@inquirer/select": "^4.3.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist": { + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.8.tgz", + "integrity": "sha512-CQ2VkIASbgI2PxdzlkeeieLRmniaUU1Aoi5ggEdm6BIyqopE9GuDXdDOj9XiwOqK5qm72oI2i6J+Gnjaa26ejg==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.2.2", + "@inquirer/type": "^3.0.8", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.1.3.tgz", + "integrity": "sha512-D5T6ioybJJH0IiSUK/JXcoRrrm8sXwzrVMjibuPs+AgxmogKslaafy1oxFiorNI4s3ElSkeQZbhYQgLqiL8h6Q==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.2.2", + "@inquirer/figures": "^1.0.13", + "@inquirer/type": "^3.0.8", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.3.4.tgz", + "integrity": "sha512-Qp20nySRmfbuJBBsgPU7E/cL62Hf250vMZRzYDcBHty2zdD1kKCnoDFWRr0WO2ZzaXp3R7a4esaVGJUx0E6zvA==", + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.0", + "@inquirer/core": "^10.2.2", + "@inquirer/figures": "^1.0.13", + "@inquirer/type": "^3.0.8", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.8.tgz", + "integrity": "sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@joshua.litt/get-ripgrep": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@joshua.litt/get-ripgrep/-/get-ripgrep-0.0.2.tgz", + "integrity": "sha512-cSHA+H+HEkOXeiCxrNvGj/pgv2Y0bfp4GbH3R87zr7Vob2pDUZV3BkUL9ucHMoDFID4GteSy5z5niN/lF9QeuQ==", + "license": "MIT", + "dependencies": { + "@lvce-editor/verror": "^1.6.0", + "execa": "^9.5.2", + "extract-zip": "^2.0.1", + "fs-extra": "^11.3.0", + "got": "^14.4.5", + "path-exists": "^5.0.0", + "xdg-basedir": "^5.1.0" + } + }, + "node_modules/@joshua.litt/get-ripgrep/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/@keyv/serialize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", + "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", + "license": "MIT" + }, + "node_modules/@kwsites/file-exists": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", + "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.1" + } + }, + "node_modules/@kwsites/promise-deferred": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", + "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", + "license": "MIT" + }, + "node_modules/@lvce-editor/verror": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@lvce-editor/verror/-/verror-1.7.0.tgz", + "integrity": "sha512-+LGuAEIC2L7pbvkyAQVWM2Go0dAy+UWEui28g07zNtZsCBhm+gusBK8PNwLJLV5Jay+TyUYuwLIbJdjLLzqEBg==", + "license": "MIT" + }, + "node_modules/@lydell/node-pty": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lydell/node-pty/-/node-pty-1.1.0.tgz", + "integrity": "sha512-VDD8LtlMTOrPKWMXUAcB9+LTktzuunqrMwkYR1DMRBkS6LQrCt+0/Ws1o2rMml/n3guePpS7cxhHF7Nm5K4iMw==", + "license": "MIT", + "optional": true, + "optionalDependencies": { + "@lydell/node-pty-darwin-arm64": "1.1.0", + "@lydell/node-pty-darwin-x64": "1.1.0", + "@lydell/node-pty-linux-arm64": "1.1.0", + "@lydell/node-pty-linux-x64": "1.1.0", + "@lydell/node-pty-win32-arm64": "1.1.0", + "@lydell/node-pty-win32-x64": "1.1.0" + } + }, + "node_modules/@lydell/node-pty-darwin-arm64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lydell/node-pty-darwin-arm64/-/node-pty-darwin-arm64-1.1.0.tgz", + "integrity": "sha512-7kFD+owAA61qmhJCtoMbqj3Uvff3YHDiU+4on5F2vQdcMI3MuwGi7dM6MkFG/yuzpw8LF2xULpL71tOPUfxs0w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lydell/node-pty-darwin-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lydell/node-pty-darwin-x64/-/node-pty-darwin-x64-1.1.0.tgz", + "integrity": "sha512-XZdvqj5FjAMjH8bdp0YfaZjur5DrCIDD1VYiE9EkkYVMDQqRUPHYV3U8BVEQVT9hYfjmpr7dNaELF2KyISWSNA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lydell/node-pty-linux-arm64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lydell/node-pty-linux-arm64/-/node-pty-linux-arm64-1.1.0.tgz", + "integrity": "sha512-yyDBmalCfHpLiQMT2zyLcqL2Fay4Xy7rIs8GH4dqKLnEviMvPGOK7LADVkKAsbsyXBSISL3Lt1m1MtxhPH6ckg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lydell/node-pty-linux-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lydell/node-pty-linux-x64/-/node-pty-linux-x64-1.1.0.tgz", + "integrity": "sha512-NcNqRTD14QT+vXcEuqSSvmWY+0+WUBn2uRE8EN0zKtDpIEr9d+YiFj16Uqds6QfcLCHfZmC+Ls7YzwTaqDnanA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lydell/node-pty-win32-arm64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lydell/node-pty-win32-arm64/-/node-pty-win32-arm64-1.1.0.tgz", + "integrity": "sha512-JOMbCou+0fA7d/m97faIIfIU0jOv8sn2OR7tI45u3AmldKoKoLP8zHY6SAvDDnI3fccO1R2HeR1doVjpS7HM0w==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@lydell/node-pty-win32-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lydell/node-pty-win32-x64/-/node-pty-win32-x64-1.1.0.tgz", + "integrity": "sha512-3N56BZ+WDFnUMYRtsrr7Ky2mhWGl9xXcyqR6cexfuCqcz9RNWL+KoXRv/nZylY5dYaXkft4JaR1uVu+roiZDAw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.18.0.tgz", + "integrity": "sha512-JvKyB6YwS3quM+88JPR0axeRgvdDu3Pv6mdZUy+w4qVkCzGgumb9bXG/TmtDRQv+671yaofVfXSQmFLlWU5qPQ==", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.6", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.0.1", + "express-rate-limit": "^7.5.0", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.23.8", + "zod-to-json-schema": "^3.24.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@openai/codex": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.42.0.tgz", + "integrity": "sha512-jLpMrQuq1gIBzBKbKMwAzXOh+5uwE+ht3RHUb2Ov7P50fjAxPKDZa0+zpqkhHTspm8Rw6Vdrm4I4L+Z03usCkg==", + "license": "Apache-2.0", + "bin": { + "codex": "bin/codex.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/api-logs": { + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.203.0.tgz", + "integrity": "sha512-9B9RU0H7Ya1Dx/Rkyc4stuBZSGVQF27WigitInx2QQoj6KUpEFYPKoWjdFTunJYxmXmh17HeBvbMa1EhGyPmqQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api": "^1.3.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node": { + "version": "0.49.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/auto-instrumentations-node/-/auto-instrumentations-node-0.49.2.tgz", + "integrity": "sha512-xtETEPmAby/3MMmedv8Z/873sdLTWg+Vq98rtm4wbwvAiXBB/ao8qRyzRlvR2MR6puEr+vIB/CXeyJnzNA3cyw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/instrumentation-amqplib": "^0.41.0", + "@opentelemetry/instrumentation-aws-lambda": "^0.43.0", + "@opentelemetry/instrumentation-aws-sdk": "^0.43.1", + "@opentelemetry/instrumentation-bunyan": "^0.40.0", + "@opentelemetry/instrumentation-cassandra-driver": "^0.40.0", + "@opentelemetry/instrumentation-connect": "^0.38.0", + "@opentelemetry/instrumentation-cucumber": "^0.8.0", + "@opentelemetry/instrumentation-dataloader": "^0.11.0", + "@opentelemetry/instrumentation-dns": "^0.38.0", + "@opentelemetry/instrumentation-express": "^0.41.1", + "@opentelemetry/instrumentation-fastify": "^0.38.0", + "@opentelemetry/instrumentation-fs": "^0.14.0", + "@opentelemetry/instrumentation-generic-pool": "^0.38.1", + "@opentelemetry/instrumentation-graphql": "^0.42.0", + "@opentelemetry/instrumentation-grpc": "^0.52.0", + "@opentelemetry/instrumentation-hapi": "^0.40.0", + "@opentelemetry/instrumentation-http": "^0.52.0", + "@opentelemetry/instrumentation-ioredis": "^0.42.0", + "@opentelemetry/instrumentation-kafkajs": "^0.2.0", + "@opentelemetry/instrumentation-knex": "^0.39.0", + "@opentelemetry/instrumentation-koa": "^0.42.0", + "@opentelemetry/instrumentation-lru-memoizer": "^0.39.0", + "@opentelemetry/instrumentation-memcached": "^0.38.0", + "@opentelemetry/instrumentation-mongodb": "^0.46.0", + "@opentelemetry/instrumentation-mongoose": "^0.41.0", + "@opentelemetry/instrumentation-mysql": "^0.40.0", + "@opentelemetry/instrumentation-mysql2": "^0.40.0", + "@opentelemetry/instrumentation-nestjs-core": "^0.39.0", + "@opentelemetry/instrumentation-net": "^0.38.0", + "@opentelemetry/instrumentation-pg": "^0.43.0", + "@opentelemetry/instrumentation-pino": "^0.41.0", + "@opentelemetry/instrumentation-redis": "^0.41.0", + "@opentelemetry/instrumentation-redis-4": "^0.41.1", + "@opentelemetry/instrumentation-restify": "^0.40.0", + "@opentelemetry/instrumentation-router": "^0.39.0", + "@opentelemetry/instrumentation-socket.io": "^0.41.0", + "@opentelemetry/instrumentation-tedious": "^0.13.0", + "@opentelemetry/instrumentation-undici": "^0.5.0", + "@opentelemetry/instrumentation-winston": "^0.39.0", + "@opentelemetry/resource-detector-alibaba-cloud": "^0.29.0", + "@opentelemetry/resource-detector-aws": "^1.6.0", + "@opentelemetry/resource-detector-azure": "^0.2.10", + "@opentelemetry/resource-detector-container": "^0.4.0", + "@opentelemetry/resource-detector-gcp": "^0.29.10", + "@opentelemetry/resources": "^1.24.0", + "@opentelemetry/sdk-node": "^0.52.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.4.1" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/context-async-hooks": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.25.1.tgz", + "integrity": "sha512-UW/ge9zjvAEmRWVapOP0qyCvPulWU6cQxGxDbWEFfGOj1VBBZAuOqTo3X6yWmDTD3Xe15ysCZChHncr2xFMIfQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/exporter-trace-otlp-grpc": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.52.1.tgz", + "integrity": "sha512-pVkSH20crBwMTqB3nIN4jpQKUEoB0Z94drIHpYyEqs7UBr+I0cpYyOR3bqjA/UasQUMROb3GX8ZX4/9cVRqGBQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-grpc-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/exporter-trace-otlp-grpc/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/exporter-trace-otlp-http": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.52.1.tgz", + "integrity": "sha512-05HcNizx0BxcFKKnS5rwOV+2GevLTVIRA0tRgWYyw4yCgR53Ic/xk83toYKts7kbzcI+dswInUg/4s8oyA+tqg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/exporter-trace-otlp-proto": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.52.1.tgz", + "integrity": "sha512-pt6uX0noTQReHXNeEslQv7x311/F1gJzMnp1HD2qgypLRPbXDeMzzeTngRTUaUbP6hqWNtPxuLr4DEoZG+TcEQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/exporter-trace-otlp-proto/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/exporter-zipkin": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.25.1.tgz", + "integrity": "sha512-RmOwSvkimg7ETwJbUOPTMhJm9A9bG1U8s7Zo3ajDh4zM7eYcycQ0dM7FbLD6NXWbI2yj7UY4q8BKinKYBQksyw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/exporter-zipkin/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/instrumentation-http": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.52.1.tgz", + "integrity": "sha512-dG/aevWhaP+7OLv4BQQSEKMJv8GyeOp3Wxl31NHqE8xo9/fYMfEljiZphUHIfyg4gnZ9swMyWjfOQs5GUQe54Q==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/instrumentation": "0.52.1", + "@opentelemetry/semantic-conventions": "1.25.1", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/otlp-exporter-base": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.52.1.tgz", + "integrity": "sha512-z175NXOtX5ihdlshtYBe5RpGeBoTXVCKPPLiQlD6FHvpM4Ch+p2B0yWKYSrBfLH24H9zjJiBdTrtD+hLlfnXEQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-transformer": "0.52.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/otlp-grpc-exporter-base": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.52.1.tgz", + "integrity": "sha512-zo/YrSDmKMjG+vPeA9aBBrsQM9Q/f2zo6N04WMB3yNldJRsgpRBeLLwvAt/Ba7dpehDLOEFBd1i2JCoaFtpCoQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/otlp-transformer": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.52.1.tgz", + "integrity": "sha512-I88uCZSZZtVa0XniRqQWKbjAUm73I8tpEy/uJYPPYw5d7BRdVk0RfTBQw8kSUl01oVWEuqxLDa802222MYyWHg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-logs": "0.52.1", + "@opentelemetry/sdk-metrics": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "protobufjs": "^7.3.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/propagator-b3": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.25.1.tgz", + "integrity": "sha512-p6HFscpjrv7//kE+7L+3Vn00VEDUJB0n6ZrjkTYHrJ58QZ8B3ajSJhRbCcY6guQ3PDjTbxWklyvIN2ojVbIb1A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/propagator-jaeger": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.25.1.tgz", + "integrity": "sha512-nBprRf0+jlgxks78G/xq72PipVK+4or9Ypntw0gVZYNTCSK8rg5SeaGV19tV920CMqBD/9UIOiFr23Li/Q8tiA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/resources": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.30.1.tgz", + "integrity": "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/resources/node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/resources/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/sdk-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.52.1.tgz", + "integrity": "sha512-MBYh+WcPPsN8YpRHRmK1Hsca9pVlyyKd4BxOC4SsgHACnl/bPp4Cri9hWhVm5+2tiQ9Zf4qSc1Jshw9tOLGWQA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.4.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" }, "engines": { - "node": ">= 0.8" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@genkit-ai/core/node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/sdk-metrics": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.25.1.tgz", + "integrity": "sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "lodash.merge": "^4.6.2" + }, "engines": { - "node": ">= 0.6" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, - "node_modules/@genkit-ai/core/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@genkit-ai/core/node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/sdk-node": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-node/-/sdk-node-0.52.1.tgz", + "integrity": "sha512-uEG+gtEr6eKd8CVWeKMhH2olcCHM9dEK68pe0qE0be32BcCRsvYURhHaD1Srngh1SQcnQzZ4TP324euxqtBOJA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/exporter-trace-otlp-grpc": "0.52.1", + "@opentelemetry/exporter-trace-otlp-http": "0.52.1", + "@opentelemetry/exporter-trace-otlp-proto": "0.52.1", + "@opentelemetry/exporter-zipkin": "1.25.1", + "@opentelemetry/instrumentation": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-logs": "0.52.1", + "@opentelemetry/sdk-metrics": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "@opentelemetry/sdk-trace-node": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, "engines": { - "node": ">= 0.6" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, - "node_modules/@genkit-ai/core/node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/sdk-node/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@genkit-ai/core/node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", + "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" }, "engines": { - "node": ">=4" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/sdk-trace-base/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/sdk-trace-node": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.25.1.tgz", + "integrity": "sha512-nMcjFIKxnFqoez4gUmihdBrbpsEnAX/Xj16sGvZm+guceYE0NE00vLhpDVK6f3q8Q4VFI5xG8JjlXKMB/SkTTQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/context-async-hooks": "1.25.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/propagator-b3": "1.25.1", + "@opentelemetry/propagator-jaeger": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/auto-instrumentations-node/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/context-async-hooks": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-2.0.1.tgz", + "integrity": "sha512-XuY23lSI3d4PEqKA+7SLtAgwqIfc6E/E9eAQWLN1vlpC53ybO3o6jW4BsXo1xvz9lYyyWItfQDDLzezER01mCw==", + "license": "Apache-2.0", + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/core": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.0.1.tgz", + "integrity": "sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-jaeger": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-jaeger/-/exporter-jaeger-1.30.1.tgz", + "integrity": "sha512-7Ki+x7cZ/PEQxp3UyB+CWkWBqLk22yRGQ4AWIGwZlEs6rpCOdWwIFOyQDO9DdeyWtTPTvO3An/7chPZcRHOgzQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/sdk-trace-base": "1.30.1", + "@opentelemetry/semantic-conventions": "1.28.0", + "jaeger-client": "^3.15.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-jaeger/node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-jaeger/node_modules/@opentelemetry/resources": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.30.1.tgz", + "integrity": "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-jaeger/node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.30.1.tgz", + "integrity": "sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/resources": "1.30.1", + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@genkit-ai/core/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", + "node_modules/@opentelemetry/exporter-jaeger/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "license": "Apache-2.0", "engines": { - "node": ">= 0.6" + "node": ">=14" } }, - "node_modules/@genkit-ai/core/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", + "node_modules/@opentelemetry/exporter-logs-otlp-grpc": { + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-grpc/-/exporter-logs-otlp-grpc-0.203.0.tgz", + "integrity": "sha512-g/2Y2noc/l96zmM+g0LdeuyYKINyBwN6FJySoU15LHPLcMN/1a0wNk2SegwKcxrRdE7Xsm7fkIR5n6XFe3QpPw==", + "license": "Apache-2.0", "dependencies": { - "mime-db": "1.52.0" + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "2.0.1", + "@opentelemetry/otlp-exporter-base": "0.203.0", + "@opentelemetry/otlp-grpc-exporter-base": "0.203.0", + "@opentelemetry/otlp-transformer": "0.203.0", + "@opentelemetry/sdk-logs": "0.203.0" }, "engines": { - "node": ">= 0.6" + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@genkit-ai/core/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/@genkit-ai/core/node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", + "node_modules/@opentelemetry/exporter-logs-otlp-http": { + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.203.0.tgz", + "integrity": "sha512-s0hys1ljqlMTbXx2XiplmMJg9wG570Z5lH7wMvrZX6lcODI56sG4HL03jklF63tBeyNwK2RV1/ntXGo3HgG4Qw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.203.0", + "@opentelemetry/core": "2.0.1", + "@opentelemetry/otlp-exporter-base": "0.203.0", + "@opentelemetry/otlp-transformer": "0.203.0", + "@opentelemetry/sdk-logs": "0.203.0" + }, "engines": { - "node": ">= 0.6" + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@genkit-ai/core/node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "license": "MIT" - }, - "node_modules/@genkit-ai/core/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", + "node_modules/@opentelemetry/exporter-logs-otlp-proto": { + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-proto/-/exporter-logs-otlp-proto-0.203.0.tgz", + "integrity": "sha512-nl/7S91MXn5R1aIzoWtMKGvqxgJgepB/sH9qW0rZvZtabnsjbf8OQ1uSx3yogtvLr0GzwD596nQKz2fV7q2RBw==", + "license": "Apache-2.0", "dependencies": { - "side-channel": "^1.0.6" + "@opentelemetry/api-logs": "0.203.0", + "@opentelemetry/core": "2.0.1", + "@opentelemetry/otlp-exporter-base": "0.203.0", + "@opentelemetry/otlp-transformer": "0.203.0", + "@opentelemetry/resources": "2.0.1", + "@opentelemetry/sdk-logs": "0.203.0", + "@opentelemetry/sdk-trace-base": "2.0.1" }, "engines": { - "node": ">=0.6" + "node": "^18.19.0 || >=20.6.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@genkit-ai/core/node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "license": "MIT", + "node_modules/@opentelemetry/exporter-metrics-otlp-grpc": { + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-grpc/-/exporter-metrics-otlp-grpc-0.203.0.tgz", + "integrity": "sha512-FCCj9nVZpumPQSEI57jRAA89hQQgONuoC35Lt+rayWY/mzCAc6BQT7RFyFaZKJ2B7IQ8kYjOCPsF/HGFWjdQkQ==", + "license": "Apache-2.0", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "2.0.1", + "@opentelemetry/exporter-metrics-otlp-http": "0.203.0", + "@opentelemetry/otlp-exporter-base": "0.203.0", + "@opentelemetry/otlp-grpc-exporter-base": "0.203.0", + "@opentelemetry/otlp-transformer": "0.203.0", + "@opentelemetry/resources": "2.0.1", + "@opentelemetry/sdk-metrics": "2.0.1" }, "engines": { - "node": ">= 0.8" + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@genkit-ai/core/node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", - "license": "MIT", + "node_modules/@opentelemetry/exporter-metrics-otlp-http": { + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.203.0.tgz", + "integrity": "sha512-HFSW10y8lY6BTZecGNpV3GpoSy7eaO0Z6GATwZasnT4bEsILp8UJXNG5OmEsz4SdwCSYvyCbTJdNbZP3/8LGCQ==", + "license": "Apache-2.0", "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "@opentelemetry/core": "2.0.1", + "@opentelemetry/otlp-exporter-base": "0.203.0", + "@opentelemetry/otlp-transformer": "0.203.0", + "@opentelemetry/resources": "2.0.1", + "@opentelemetry/sdk-metrics": "2.0.1" }, "engines": { - "node": ">= 0.8.0" + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@genkit-ai/core/node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", + "node_modules/@opentelemetry/exporter-metrics-otlp-proto": { + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-proto/-/exporter-metrics-otlp-proto-0.203.0.tgz", + "integrity": "sha512-OZnhyd9npU7QbyuHXFEPVm3LnjZYifuKpT3kTnF84mXeEQ84pJJZgyLBpU4FSkSwUkt/zbMyNAI7y5+jYTWGIg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.0.1", + "@opentelemetry/exporter-metrics-otlp-http": "0.203.0", + "@opentelemetry/otlp-exporter-base": "0.203.0", + "@opentelemetry/otlp-transformer": "0.203.0", + "@opentelemetry/resources": "2.0.1", + "@opentelemetry/sdk-metrics": "2.0.1" + }, "engines": { - "node": ">= 0.8" + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@genkit-ai/core/node_modules/send/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==", - "license": "MIT" - }, - "node_modules/@genkit-ai/core/node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", - "license": "MIT", + "node_modules/@opentelemetry/exporter-prometheus": { + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-prometheus/-/exporter-prometheus-0.203.0.tgz", + "integrity": "sha512-2jLuNuw5m4sUj/SncDf/mFPabUxMZmmYetx5RKIMIQyPnl6G6ooFzfeE8aXNRf8YD1ZXNlCnRPcISxjveGJHNg==", + "license": "Apache-2.0", "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" + "@opentelemetry/core": "2.0.1", + "@opentelemetry/resources": "2.0.1", + "@opentelemetry/sdk-metrics": "2.0.1" }, "engines": { - "node": ">= 0.8.0" + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@genkit-ai/core/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", + "node_modules/@opentelemetry/exporter-trace-otlp-grpc": { + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.203.0.tgz", + "integrity": "sha512-322coOTf81bm6cAA8+ML6A+m4r2xTCdmAZzGNTboPXRzhwPt4JEmovsFAs+grpdarObd68msOJ9FfH3jxM6wqA==", + "license": "Apache-2.0", + "dependencies": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "2.0.1", + "@opentelemetry/otlp-exporter-base": "0.203.0", + "@opentelemetry/otlp-grpc-exporter-base": "0.203.0", + "@opentelemetry/otlp-transformer": "0.203.0", + "@opentelemetry/resources": "2.0.1", + "@opentelemetry/sdk-trace-base": "2.0.1" + }, "engines": { - "node": ">= 0.8" + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@genkit-ai/core/node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "license": "MIT", + "node_modules/@opentelemetry/exporter-trace-otlp-http": { + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.203.0.tgz", + "integrity": "sha512-ZDiaswNYo0yq/cy1bBLJFe691izEJ6IgNmkjm4C6kE9ub/OMQqDXORx2D2j8fzTBTxONyzusbaZlqtfmyqURPw==", + "license": "Apache-2.0", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "@opentelemetry/core": "2.0.1", + "@opentelemetry/otlp-exporter-base": "0.203.0", + "@opentelemetry/otlp-transformer": "0.203.0", + "@opentelemetry/resources": "2.0.1", + "@opentelemetry/sdk-trace-base": "2.0.1" }, "engines": { - "node": ">= 0.6" + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@genkit-ai/firebase": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@genkit-ai/firebase/-/firebase-1.19.2.tgz", - "integrity": "sha512-HGHP3nGWqpfGxmbrYj2yyYz9z4de7KGWRNZ6AX4q95dtZyR778W+Nk7cOsRZT1v+BQQ9eugIyBVDnt72BIT9cA==", + "node_modules/@opentelemetry/exporter-trace-otlp-proto": { + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.203.0.tgz", + "integrity": "sha512-1xwNTJ86L0aJmWRwENCJlH4LULMG2sOXWIVw+Szta4fkqKVY50Eo4HoVKKq6U9QEytrWCr8+zjw0q/ZOeXpcAQ==", "license": "Apache-2.0", - "optional": true, "dependencies": { - "@genkit-ai/google-cloud": "^1.19.2" + "@opentelemetry/core": "2.0.1", + "@opentelemetry/otlp-exporter-base": "0.203.0", + "@opentelemetry/otlp-transformer": "0.203.0", + "@opentelemetry/resources": "2.0.1", + "@opentelemetry/sdk-trace-base": "2.0.1" }, - "peerDependencies": { - "@google-cloud/firestore": "^7.11.0", - "firebase": ">=11.5.0", - "firebase-admin": ">=12.2", - "genkit": "^1.19.2" + "engines": { + "node": "^18.19.0 || >=20.6.0" }, - "peerDependenciesMeta": { - "firebase": { - "optional": true - } + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@genkit-ai/google-cloud": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@genkit-ai/google-cloud/-/google-cloud-1.19.2.tgz", - "integrity": "sha512-nvU/6xViFSkrDJ4HFmv+/S9zXat/YEnovWDBs2CNoIo66MYiK8tgZ7z8poLOif+9PaesvBqdcJQxzvQD/uftZg==", + "node_modules/@opentelemetry/exporter-zipkin": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-2.0.1.tgz", + "integrity": "sha512-a9eeyHIipfdxzCfc2XPrE+/TI3wmrZUDFtG2RRXHSbZZULAny7SyybSvaDvS77a7iib5MPiAvluwVvbGTsHxsw==", "license": "Apache-2.0", - "optional": true, "dependencies": { - "@google-cloud/logging-winston": "^6.0.0", - "@google-cloud/opentelemetry-cloud-monitoring-exporter": "^0.19.0", - "@google-cloud/opentelemetry-cloud-trace-exporter": "^2.4.1", - "@google-cloud/opentelemetry-resource-util": "^2.4.0", - "@opentelemetry/api": "^1.9.0", - "@opentelemetry/auto-instrumentations-node": "^0.49.1", - "@opentelemetry/core": "~1.25.0", - "@opentelemetry/instrumentation": "^0.52.0", - "@opentelemetry/instrumentation-pino": "^0.41.0", - "@opentelemetry/instrumentation-winston": "^0.39.0", - "@opentelemetry/resources": "~1.25.0", - "@opentelemetry/sdk-metrics": "~1.25.0", - "@opentelemetry/sdk-node": "^0.52.0", - "@opentelemetry/sdk-trace-base": "~1.25.0", - "google-auth-library": "^9.6.3", - "node-fetch": "^3.3.2", - "winston": "^3.12.0" + "@opentelemetry/core": "2.0.1", + "@opentelemetry/resources": "2.0.1", + "@opentelemetry/sdk-trace-base": "2.0.1", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { - "genkit": "^1.19.2" + "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@genkit-ai/googleai": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@genkit-ai/googleai/-/googleai-1.19.1.tgz", - "integrity": "sha512-nTFYz6krFKI294PZeNJXtGEkReL8xTcAoq1Bz7o05WZ3NqSg/8YmtLGclcHl61S4Mbqxpuq6hztxy80ptf2AeQ==", + "node_modules/@opentelemetry/instrumentation": { + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.203.0.tgz", + "integrity": "sha512-ke1qyM+3AK2zPuBPb6Hk/GCsc5ewbLvPNkEuELx/JmANeEp6ZjnZ+wypPAJSucTw0wvCGrUaibDSdcrGFoWxKQ==", "license": "Apache-2.0", "dependencies": { - "@google/generative-ai": "^0.24.0", - "google-auth-library": "^9.6.3", - "node-fetch": "^3.3.2" + "@opentelemetry/api-logs": "0.203.0", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { - "genkit": "^1.19.1" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@genkit-ai/mcp": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/@genkit-ai/mcp/-/mcp-1.19.1.tgz", - "integrity": "sha512-j+W+jDOTorBkirBEoCM8QTvydjgpRXOWK2pM9kTi4Fsbx1Qdve2X40qicLj4ZB/492uSQWudVijRRet5VSatrg==", + "node_modules/@opentelemetry/instrumentation-amqplib": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.41.0.tgz", + "integrity": "sha512-00Oi6N20BxJVcqETjgNzCmVKN+I5bJH/61IlHiIWd00snj1FdgiIKlpE4hYVacTB2sjIBB3nTbHskttdZEE2eg==", "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, "peerDependencies": { - "@modelcontextprotocol/sdk": "^1.13.0", - "genkit": "^1.19.1" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@google-cloud/common": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-5.0.2.tgz", - "integrity": "sha512-V7bmBKYQyu0eVG2BFejuUjlBt+zrya6vtsKdY+JxMM/dNntPF41vZ9+LhOshEUH01zOHEqBSvI7Dad7ZS6aUeA==", + "node_modules/@opentelemetry/instrumentation-amqplib/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@google-cloud/projectify": "^4.0.0", - "@google-cloud/promisify": "^4.0.0", - "arrify": "^2.0.1", - "duplexify": "^4.1.1", - "extend": "^3.0.2", - "google-auth-library": "^9.0.0", - "html-entities": "^2.5.2", - "retry-request": "^7.0.0", - "teeny-request": "^9.0.0" + "@opentelemetry/api": "^1.0.0" }, "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@google-cloud/logging": { - "version": "11.2.1", - "resolved": "https://registry.npmjs.org/@google-cloud/logging/-/logging-11.2.1.tgz", - "integrity": "sha512-2h9HBJG3OAsvzXmb81qXmaTPfXYU7KJTQUxunoOKFGnY293YQ/eCkW1Y5mHLocwpEqeqQYT/Qvl6Tk+Q7PfStw==", + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-amqplib/node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@google-cloud/common": "^5.0.0", - "@google-cloud/paginator": "^5.0.0", - "@google-cloud/projectify": "^4.0.0", - "@google-cloud/promisify": "4.0.0", - "@opentelemetry/api": "^1.7.0", - "arrify": "^2.0.1", - "dot-prop": "^6.0.0", - "eventid": "^2.0.0", - "extend": "^3.0.2", - "gcp-metadata": "^6.0.0", - "google-auth-library": "^9.0.0", - "google-gax": "^4.0.3", - "on-finished": "^2.3.0", - "pumpify": "^2.0.1", - "stream-events": "^1.0.5", - "uuid": "^9.0.0" + "@opentelemetry/semantic-conventions": "1.28.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@google-cloud/logging-winston": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@google-cloud/logging-winston/-/logging-winston-6.0.1.tgz", - "integrity": "sha512-tgA/qe/aGZITMrJ/5Tuykv234pLb/Qo6iDZ8SDkjbsiIy69mLQmbphrUd/IqnE17BSDfrwDUckvWdghiy8b+Qg==", + "node_modules/@opentelemetry/instrumentation-amqplib/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@google-cloud/logging": "^11.0.0", - "google-auth-library": "^9.0.0", - "lodash.mapvalues": "^4.6.0", - "winston-transport": "^4.3.0" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { - "node": ">=14.0.0" + "node": ">=14" }, "peerDependencies": { - "winston": ">=3.2.1" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@google-cloud/logging/node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-amqplib/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "license": "Apache-2.0", "optional": true, - "bin": { - "uuid": "dist/bin/uuid" + "engines": { + "node": ">=14" } }, - "node_modules/@google-cloud/opentelemetry-cloud-monitoring-exporter": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/@google-cloud/opentelemetry-cloud-monitoring-exporter/-/opentelemetry-cloud-monitoring-exporter-0.19.0.tgz", - "integrity": "sha512-5SOPXwC6RET4ZvXxw5D97dp8fWpqWEunHrzrUUGXhG4UAeedQe1KvYV8CK+fnaAbN2l2ha6QDYspT6z40TVY0g==", + "node_modules/@opentelemetry/instrumentation-aws-lambda": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-lambda/-/instrumentation-aws-lambda-0.43.0.tgz", + "integrity": "sha512-pSxcWlsE/pCWQRIw92sV2C+LmKXelYkjkA7C5s39iPUi4pZ2lA1nIiw+1R/y2pDEhUHcaKkNyljQr3cx9ZpVlQ==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@google-cloud/opentelemetry-resource-util": "^2.3.0", - "@google-cloud/precise-date": "^4.0.0", - "google-auth-library": "^9.0.0", - "googleapis": "^137.0.0" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/propagator-aws-xray": "^1.3.1", + "@opentelemetry/resources": "^1.8.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@types/aws-lambda": "8.10.122" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0", - "@opentelemetry/core": "^1.0.0", - "@opentelemetry/resources": "^1.0.0", - "@opentelemetry/sdk-metrics": "^1.0.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@google-cloud/opentelemetry-cloud-trace-exporter": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@google-cloud/opentelemetry-cloud-trace-exporter/-/opentelemetry-cloud-trace-exporter-2.4.1.tgz", - "integrity": "sha512-Dq2IyAyA9PCjbjLOn86i2byjkYPC59b5ic8k/L4q5bBWH0Jro8lzMs8C0G5pJfqh2druj8HF+oAIAlSdWQ+Z9Q==", + "node_modules/@opentelemetry/instrumentation-aws-lambda/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@google-cloud/opentelemetry-resource-util": "^2.4.0", - "@grpc/grpc-js": "^1.1.8", - "@grpc/proto-loader": "^0.7.0", - "google-auth-library": "^9.0.0" + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-aws-lambda/node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "1.28.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0", - "@opentelemetry/core": "^1.0.0", - "@opentelemetry/resources": "^1.0.0", - "@opentelemetry/sdk-trace-base": "^1.0.0" + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@google-cloud/opentelemetry-resource-util": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@google-cloud/opentelemetry-resource-util/-/opentelemetry-resource-util-2.4.0.tgz", - "integrity": "sha512-/7ujlMoKtDtrbQlJihCjQnm31n2s2RTlvJqcSbt2jV3OkCzPAdo3u31Q13HNugqtIRUSk7bUoLx6AzhURkhW4w==", + "node_modules/@opentelemetry/instrumentation-aws-lambda/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/semantic-conventions": "^1.22.0", - "gcp-metadata": "^6.0.0" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/resources": "^1.0.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@google-cloud/paginator": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-5.0.2.tgz", - "integrity": "sha512-DJS3s0OVH4zFDB1PzjxAsHqJT6sKVbRwwML0ZBP9PbU7Yebtu/7SWMRzvO2J3nUi9pRNITCfu4LJeooM2w4pjg==", + "node_modules/@opentelemetry/instrumentation-aws-lambda/node_modules/@opentelemetry/resources": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.30.1.tgz", + "integrity": "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==", "license": "Apache-2.0", "optional": true, "dependencies": { - "arrify": "^2.0.0", - "extend": "^3.0.2" + "@opentelemetry/core": "1.30.1", + "@opentelemetry/semantic-conventions": "1.28.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@google-cloud/precise-date": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@google-cloud/precise-date/-/precise-date-4.0.0.tgz", - "integrity": "sha512-1TUx3KdaU3cN7nfCdNf+UVqA/PSX29Cjcox3fZZBtINlRrXVTmUkQnCKv2MbBUbCopbK4olAT1IHl76uZyCiVA==", + "node_modules/@opentelemetry/instrumentation-aws-lambda/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", "license": "Apache-2.0", "optional": true, "engines": { - "node": ">=14.0.0" + "node": ">=14" } }, - "node_modules/@google-cloud/projectify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-4.0.0.tgz", - "integrity": "sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==", + "node_modules/@opentelemetry/instrumentation-aws-sdk": { + "version": "0.43.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-sdk/-/instrumentation-aws-sdk-0.43.1.tgz", + "integrity": "sha512-qLT2cCniJ5W+6PFzKbksnoIQuq9pS83nmgaExfUwXVvlwi0ILc50dea0tWBHZMkdIDa/zZdcuFrJ7+fUcSnRow==", "license": "Apache-2.0", "optional": true, + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/propagation-utils": "^0.30.10", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, "engines": { - "node": ">=14.0.0" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@google-cloud/promisify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-4.0.0.tgz", - "integrity": "sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g==", + "node_modules/@opentelemetry/instrumentation-aws-sdk/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", "license": "Apache-2.0", "optional": true, + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, "engines": { "node": ">=14" } }, - "node_modules/@google/gemini-cli": { - "version": "0.1.22", - "resolved": "https://registry.npmjs.org/@google/gemini-cli/-/gemini-cli-0.1.22.tgz", - "integrity": "sha512-gjwpvKykDxD9iXMUsoZM7jY3LfCo6f846gB9T77VhDabc2dpFSPiUN1o/gF4e66+/LAycK66v+DEr35qS4DHuw==", + "node_modules/@opentelemetry/instrumentation-aws-sdk/node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@google/gemini-cli-core": "0.1.22", - "@google/genai": "1.13.0", - "@iarna/toml": "^2.2.5", - "@modelcontextprotocol/sdk": "^1.15.1", - "@types/update-notifier": "^6.0.8", - "command-exists": "^1.2.9", - "diff": "^7.0.0", - "dotenv": "^17.1.0", - "glob": "^10.4.1", - "highlight.js": "^11.11.1", - "ink": "^6.1.1", - "ink-big-text": "^2.0.0", - "ink-gradient": "^3.0.0", - "ink-link": "^4.1.0", - "ink-select-input": "^6.2.0", - "ink-spinner": "^5.0.0", - "lowlight": "^3.3.0", - "mime-types": "^3.0.1", - "open": "^10.1.2", - "react": "^19.1.0", - "read-package-up": "^11.0.0", - "shell-quote": "^1.8.3", - "string-width": "^7.1.0", - "strip-ansi": "^7.1.0", - "strip-json-comments": "^3.1.1", - "undici": "^7.10.0", - "update-notifier": "^7.3.1", - "yargs": "^17.7.2", - "zod": "^3.23.8" - }, - "bin": { - "gemini": "dist/index.js" + "@opentelemetry/semantic-conventions": "1.28.0" }, "engines": { - "node": ">=20" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@google/gemini-cli-core": { - "version": "0.1.22", - "resolved": "https://registry.npmjs.org/@google/gemini-cli-core/-/gemini-cli-core-0.1.22.tgz", - "integrity": "sha512-PvIod0b8+vB8Wfdpr4axiDopL6sxeQ/4qF4Q1zdXOD3ANUYSLuhq3Af8OrugA0so6vCjDMllyKcnOmGT6s6+ag==", + "node_modules/@opentelemetry/instrumentation-aws-sdk/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@google/genai": "1.13.0", - "@modelcontextprotocol/sdk": "^1.11.0", - "@opentelemetry/api": "^1.9.0", - "@opentelemetry/exporter-logs-otlp-grpc": "^0.52.0", - "@opentelemetry/exporter-logs-otlp-http": "^0.52.0", - "@opentelemetry/exporter-metrics-otlp-grpc": "^0.52.0", - "@opentelemetry/exporter-metrics-otlp-http": "^0.52.0", - "@opentelemetry/exporter-trace-otlp-grpc": "^0.52.0", - "@opentelemetry/exporter-trace-otlp-http": "^0.52.0", - "@opentelemetry/instrumentation-http": "^0.52.0", - "@opentelemetry/sdk-node": "^0.52.0", - "@types/glob": "^8.1.0", - "@types/html-to-text": "^9.0.4", - "ajv": "^8.17.1", - "chardet": "^2.1.0", - "diff": "^7.0.0", - "dotenv": "^17.1.0", - "fdir": "^6.4.6", - "fzf": "^0.5.2", - "glob": "^10.4.5", - "google-auth-library": "^9.11.0", - "html-to-text": "^9.0.5", - "https-proxy-agent": "^7.0.6", - "ignore": "^7.0.0", - "marked": "^15.0.12", - "micromatch": "^4.0.8", - "mnemonist": "^0.40.3", - "open": "^10.1.2", - "picomatch": "^4.0.1", - "shell-quote": "^1.8.3", - "simple-git": "^3.28.0", - "strip-ansi": "^7.1.0", - "undici": "^7.10.0", - "ws": "^8.18.0" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { - "node": ">=20" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@google/gemini-cli-core/node_modules/@google/genai": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@google/genai/-/genai-1.13.0.tgz", - "integrity": "sha512-BxilXzE8cJ0zt5/lXk6KwuBcIT9P2Lbi2WXhwWMbxf1RNeC68/8DmYQqMrzQP333CieRMdbDXs0eNCphLoScWg==", + "node_modules/@opentelemetry/instrumentation-aws-sdk/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-bunyan": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-bunyan/-/instrumentation-bunyan-0.40.0.tgz", + "integrity": "sha512-aZ4cXaGWwj79ZXSYrgFVsrDlE4mmf2wfvP9bViwRc0j75A6eN6GaHYHqufFGMTCqASQn5pIjjP+Bx+PWTGiofw==", "license": "Apache-2.0", + "optional": true, "dependencies": { - "google-auth-library": "^9.14.2", - "ws": "^8.18.0" + "@opentelemetry/api-logs": "^0.52.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@types/bunyan": "1.8.9" }, "engines": { - "node": ">=20.0.0" + "node": ">=14" }, "peerDependencies": { - "@modelcontextprotocol/sdk": "^1.11.0" - }, - "peerDependenciesMeta": { - "@modelcontextprotocol/sdk": { - "optional": true - } + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@google/gemini-cli-core/node_modules/marked": { - "version": "15.0.12", - "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", - "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", - "license": "MIT", - "bin": { - "marked": "bin/marked.js" + "node_modules/@opentelemetry/instrumentation-bunyan/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/api": "^1.0.0" }, "engines": { - "node": ">= 18" + "node": ">=14" } }, - "node_modules/@google/gemini-cli/node_modules/@google/genai": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@google/genai/-/genai-1.13.0.tgz", - "integrity": "sha512-BxilXzE8cJ0zt5/lXk6KwuBcIT9P2Lbi2WXhwWMbxf1RNeC68/8DmYQqMrzQP333CieRMdbDXs0eNCphLoScWg==", + "node_modules/@opentelemetry/instrumentation-bunyan/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", "license": "Apache-2.0", + "optional": true, "dependencies": { - "google-auth-library": "^9.14.2", - "ws": "^8.18.0" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { - "node": ">=20.0.0" + "node": ">=14" }, "peerDependencies": { - "@modelcontextprotocol/sdk": "^1.11.0" + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-cassandra-driver": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cassandra-driver/-/instrumentation-cassandra-driver-0.40.0.tgz", + "integrity": "sha512-JxbM39JU7HxE9MTKKwi6y5Z3mokjZB2BjwfqYi4B3Y29YO3I42Z7eopG6qq06yWZc+nQli386UDQe0d9xKmw0A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" }, - "peerDependenciesMeta": { - "@modelcontextprotocol/sdk": { - "optional": true - } + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@google/gemini-cli/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-cassandra-driver/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": ">=14" } }, - "node_modules/@google/gemini-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-cassandra-driver/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "color-convert": "^2.0.1" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { - "node": ">=8" + "node": ">=14" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@google/gemini-cli/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "license": "ISC", + "node_modules/@opentelemetry/instrumentation-connect": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.38.0.tgz", + "integrity": "sha512-2/nRnx3pjYEmdPIaBwtgtSviTKHWnDZN3R+TkRUnhIVrvBKVcq+I5B2rtd6mr6Fe9cHlZ9Ojcuh7pkNh/xdWWg==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@types/connect": "3.4.36" }, "engines": { - "node": ">=12" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@google/gemini-cli/node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-connect/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "@opentelemetry/api": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=14" } }, - "node_modules/@google/gemini-cli/node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-connect/node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "ansi-regex": "^5.0.1" + "@opentelemetry/semantic-conventions": "1.28.0" }, "engines": { - "node": ">=8" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@google/gemini-cli/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-connect/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "color-name": "~1.1.4" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@google/gemini-cli/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" + "node_modules/@opentelemetry/instrumentation-connect/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } }, - "node_modules/@google/gemini-cli/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" + "node_modules/@opentelemetry/instrumentation-cucumber": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cucumber/-/instrumentation-cucumber-0.8.0.tgz", + "integrity": "sha512-ieTm4RBIlZt2brPwtX5aEZYtYnkyqhAVXJI9RIohiBVMe5DxiwCwt+2Exep/nDVqGPX8zRBZUl4AEw423OxJig==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } }, - "node_modules/@google/gemini-cli/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-cucumber/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": ">=14" } }, - "node_modules/@google/gemini-cli/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-cucumber/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { - "node": ">=10" + "node": ">=14" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@google/gemini-cli/node_modules/wrap-ansi/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-dataloader": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.11.0.tgz", + "integrity": "sha512-27urJmwkH4KDaMJtEv1uy2S7Apk4XbN4AgWMdfMJbi7DnOduJmeuA+DpJCwXB72tEWXo89z5T3hUVJIDiSNmNw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "@opentelemetry/instrumentation": "^0.52.0" }, "engines": { - "node": ">=8" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@google/gemini-cli/node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-dataloader/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "ansi-regex": "^5.0.1" + "@opentelemetry/api": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=14" } }, - "node_modules/@google/gemini-cli/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-dataloader/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { - "node": ">=12" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@google/gemini-cli/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "license": "ISC", + "node_modules/@opentelemetry/instrumentation-dns": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dns/-/instrumentation-dns-0.38.0.tgz", + "integrity": "sha512-Um07I0TQXDWa+ZbEAKDFUxFH40dLtejtExDOMLNJ1CL8VmOmA71qx93Qi/QG4tGkiI1XWqr7gF/oiMCJ4m8buQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "semver": "^7.5.4" + }, "engines": { - "node": ">=12" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@google/gemini-cli/node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-dns/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "@opentelemetry/api": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=14" } }, - "node_modules/@google/gemini-cli/node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-dns/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "ansi-regex": "^5.0.1" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { - "node": ">=8" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@google/genai": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/@google/genai/-/genai-1.16.0.tgz", - "integrity": "sha512-hdTYu39QgDFxv+FB6BK2zi4UIJGWhx2iPc0pHQ0C5Q/RCi+m+4gsryIzTGO+riqWcUA8/WGYp6hpqckdOBNysw==", + "node_modules/@opentelemetry/instrumentation-express": { + "version": "0.41.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.41.1.tgz", + "integrity": "sha512-uRx0V3LPGzjn2bxAnV8eUsDT82vT7NTwI0ezEuPMBOTOsnPpGhWdhcdNdhH80sM4TrWrOfXm9HGEdfWE3TRIww==", "license": "Apache-2.0", + "optional": true, "dependencies": { - "google-auth-library": "^9.14.2", - "ws": "^8.18.0" + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { - "node": ">=20.0.0" + "node": ">=14" }, "peerDependencies": { - "@modelcontextprotocol/sdk": "^1.11.4" - }, - "peerDependenciesMeta": { - "@modelcontextprotocol/sdk": { - "optional": true - } + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@google/generative-ai": { - "version": "0.24.1", - "resolved": "https://registry.npmjs.org/@google/generative-ai/-/generative-ai-0.24.1.tgz", - "integrity": "sha512-MqO+MLfM6kjxcKoy0p1wRzG3b4ZZXtPI+z2IE26UogS2Cm/XHO+7gGRBh6gcJsOiIVoH93UwKvW4HdgiOZCy9Q==", + "node_modules/@opentelemetry/instrumentation-express/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, "engines": { - "node": ">=18.0.0" + "node": ">=14" } }, - "node_modules/@grpc/grpc-js": { - "version": "1.13.4", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.4.tgz", - "integrity": "sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==", + "node_modules/@opentelemetry/instrumentation-express/node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", "license": "Apache-2.0", + "optional": true, "dependencies": { - "@grpc/proto-loader": "^0.7.13", - "@js-sdsl/ordered-map": "^4.4.2" + "@opentelemetry/semantic-conventions": "1.28.0" }, "engines": { - "node": ">=12.10.0" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@grpc/proto-loader": { - "version": "0.7.15", - "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz", - "integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==", + "node_modules/@opentelemetry/instrumentation-express/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", "license": "Apache-2.0", + "optional": true, "dependencies": { - "lodash.camelcase": "^4.3.0", - "long": "^5.0.0", - "protobufjs": "^7.2.5", - "yargs": "^17.7.2" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, - "bin": { - "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + "engines": { + "node": ">=14" }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-express/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "license": "Apache-2.0", + "optional": true, "engines": { - "node": ">=6" + "node": ">=14" } }, - "node_modules/@grpc/proto-loader/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-fastify": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.38.0.tgz", + "integrity": "sha512-HBVLpTSYpkQZ87/Df3N0gAw7VzYZV3n28THIBrJWfuqw3Or7UqdhnjeuMIPQ04BKk3aZc0cWn2naSQObbh5vXw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, "engines": { - "node": ">=8" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@grpc/proto-loader/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-fastify/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "color-convert": "^2.0.1" + "@opentelemetry/api": "^1.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=14" } }, - "node_modules/@grpc/proto-loader/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "license": "ISC", + "node_modules/@opentelemetry/instrumentation-fastify/node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "@opentelemetry/semantic-conventions": "1.28.0" }, "engines": { - "node": ">=12" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@grpc/proto-loader/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-fastify/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "color-name": "~1.1.4" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@grpc/proto-loader/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/@grpc/proto-loader/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/@grpc/proto-loader/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-fastify/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "license": "Apache-2.0", + "optional": true, "engines": { - "node": ">=8" + "node": ">=14" } }, - "node_modules/@grpc/proto-loader/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-fs": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.14.0.tgz", + "integrity": "sha512-pVc8P5AgliC1DphyyBUgsxXlm2XaPH4BpYvt7rAZDMIqUpRk8gs19SioABtKqqxvFzg5jPtgJfJsdxq0Y+maLw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0" }, "engines": { - "node": ">=8" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@grpc/proto-loader/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-fs/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "ansi-regex": "^5.0.1" + "@opentelemetry/api": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=14" } }, - "node_modules/@grpc/proto-loader/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-fs/node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "@opentelemetry/semantic-conventions": "1.28.0" }, "engines": { - "node": ">=10" + "node": ">=14" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@grpc/proto-loader/node_modules/yargs": { - "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-fs/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { - "node": ">=12" - } - }, - "node_modules/@grpc/proto-loader/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "license": "ISC", - "engines": { - "node": ">=12" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@humanfs/core": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", - "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "node_modules/@opentelemetry/instrumentation-fs/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", "license": "Apache-2.0", + "optional": true, "engines": { - "node": ">=18.18.0" + "node": ">=14" } }, - "node_modules/@humanfs/node": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", - "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "node_modules/@opentelemetry/instrumentation-generic-pool": { + "version": "0.38.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.38.1.tgz", + "integrity": "sha512-WvssuKCuavu/hlq661u82UWkc248cyI/sT+c2dEIj6yCk0BUkErY1D+9XOO+PmHdJNE+76i2NdcvQX5rJrOe/w==", "license": "Apache-2.0", + "optional": true, "dependencies": { - "@humanfs/core": "^0.19.1", - "@humanwhocodes/retry": "^0.4.0" + "@opentelemetry/instrumentation": "^0.52.0" }, "engines": { - "node": ">=18.18.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" + "node": ">=14" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "node_modules/@opentelemetry/instrumentation-generic-pool/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", "license": "Apache-2.0", - "engines": { - "node": ">=18.18" + "optional": true, + "dependencies": { + "@opentelemetry/api": "^1.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@iarna/toml": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", - "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", - "license": "ISC" - }, - "node_modules/@inquirer/ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.0.tgz", - "integrity": "sha512-JWaTfCxI1eTmJ1BIv86vUfjVatOdxwD0DAVKYevY8SazeUUZtW+tNbsdejVO1GYE0GXJW1N1ahmiC3TFd+7wZA==", - "license": "MIT", "engines": { - "node": ">=18" + "node": ">=14" } }, - "node_modules/@inquirer/checkbox": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.2.4.tgz", - "integrity": "sha512-2n9Vgf4HSciFq8ttKXk+qy+GsyTXPV1An6QAwe/8bkbbqvG4VW1I/ZY1pNu2rf+h9bdzMLPbRSfcNxkHBy/Ydw==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-generic-pool/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@inquirer/ansi": "^1.0.0", - "@inquirer/core": "^10.2.2", - "@inquirer/figures": "^1.0.13", - "@inquirer/type": "^3.0.8", - "yoctocolors-cjs": "^2.1.2" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { - "node": ">=18" + "node": ">=14" }, "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@inquirer/confirm": { - "version": "5.1.18", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.18.tgz", - "integrity": "sha512-MilmWOzHa3Ks11tzvuAmFoAd/wRuaP3SwlT1IZhyMke31FKLxPiuDWcGXhU+PKveNOpAc4axzAgrgxuIJJRmLw==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-graphql": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.42.0.tgz", + "integrity": "sha512-N8SOwoKL9KQSX7z3gOaw5UaTeVQcfDO1c21csVHnmnmGUoqsXbArK2B8VuwPWcv6/BC/i3io+xTo7QGRZ/z28Q==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@inquirer/core": "^10.2.2", - "@inquirer/type": "^3.0.8" + "@opentelemetry/instrumentation": "^0.52.0" }, "engines": { - "node": ">=18" + "node": ">=14" }, "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@inquirer/core": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.2.2.tgz", - "integrity": "sha512-yXq/4QUnk4sHMtmbd7irwiepjB8jXU0kkFRL4nr/aDBA2mDz13cMakEWdDwX3eSCTkk03kwcndD1zfRAIlELxA==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-graphql/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@inquirer/ansi": "^1.0.0", - "@inquirer/figures": "^1.0.13", - "@inquirer/type": "^3.0.8", - "cli-width": "^4.1.0", - "mute-stream": "^2.0.0", - "signal-exit": "^4.1.0", - "wrap-ansi": "^6.2.0", - "yoctocolors-cjs": "^2.1.2" + "@opentelemetry/api": "^1.0.0" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "node": ">=14" } }, - "node_modules/@inquirer/editor": { - "version": "4.2.20", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.20.tgz", - "integrity": "sha512-7omh5y5bK672Q+Brk4HBbnHNowOZwrb/78IFXdrEB9PfdxL3GudQyDk8O9vQ188wj3xrEebS2M9n18BjJoI83g==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-graphql/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@inquirer/core": "^10.2.2", - "@inquirer/external-editor": "^1.0.2", - "@inquirer/type": "^3.0.8" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { - "node": ">=18" + "node": ">=14" }, "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@inquirer/expand": { - "version": "4.0.20", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.20.tgz", - "integrity": "sha512-Dt9S+6qUg94fEvgn54F2Syf0Z3U8xmnBI9ATq2f5h9xt09fs2IJXSCIXyyVHwvggKWFXEY/7jATRo2K6Dkn6Ow==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-grpc": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-grpc/-/instrumentation-grpc-0.52.1.tgz", + "integrity": "sha512-EdSDiDSAO+XRXk/ZN128qQpBo1I51+Uay/LUPcPQhSRGf7fBPIEUBeOLQiItguGsug5MGOYjql2w/1wCQF3fdQ==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@inquirer/core": "^10.2.2", - "@inquirer/type": "^3.0.8", - "yoctocolors-cjs": "^2.1.2" + "@opentelemetry/instrumentation": "0.52.1", + "@opentelemetry/semantic-conventions": "1.25.1" }, "engines": { - "node": ">=18" + "node": ">=14" }, "peerDependencies": { - "@types/node": ">=18" + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-grpc/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/api": "^1.0.0" }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "engines": { + "node": ">=14" } }, - "node_modules/@inquirer/external-editor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.2.tgz", - "integrity": "sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-grpc/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "chardet": "^2.1.0", - "iconv-lite": "^0.7.0" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { - "node": ">=18" + "node": ">=14" }, "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@inquirer/figures": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.13.tgz", - "integrity": "sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-grpc/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "optional": true, "engines": { - "node": ">=18" + "node": ">=14" } }, - "node_modules/@inquirer/input": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.2.4.tgz", - "integrity": "sha512-cwSGpLBMwpwcZZsc6s1gThm0J+it/KIJ+1qFL2euLmSKUMGumJ5TcbMgxEjMjNHRGadouIYbiIgruKoDZk7klw==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-hapi": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.40.0.tgz", + "integrity": "sha512-8U/w7Ifumtd2bSN1OLaSwAAFhb9FyqWUki3lMMB0ds+1+HdSxYBe9aspEJEgvxAqOkrQnVniAPTEGf1pGM7SOw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@inquirer/core": "^10.2.2", - "@inquirer/type": "^3.0.8" + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { - "node": ">=18" + "node": ">=14" }, "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@inquirer/number": { - "version": "3.0.20", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.20.tgz", - "integrity": "sha512-bbooay64VD1Z6uMfNehED2A2YOPHSJnQLs9/4WNiV/EK+vXczf/R988itL2XLDGTgmhMF2KkiWZo+iEZmc4jqg==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-hapi/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@inquirer/core": "^10.2.2", - "@inquirer/type": "^3.0.8" + "@opentelemetry/api": "^1.0.0" }, "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "node": ">=14" } }, - "node_modules/@inquirer/password": { - "version": "4.0.20", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.20.tgz", - "integrity": "sha512-nxSaPV2cPvvoOmRygQR+h0B+Av73B01cqYLcr7NXcGXhbmsYfUb8fDdw2Us1bI2YsX+VvY7I7upgFYsyf8+Nug==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-hapi/node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@inquirer/ansi": "^1.0.0", - "@inquirer/core": "^10.2.2", - "@inquirer/type": "^3.0.8" + "@opentelemetry/semantic-conventions": "1.28.0" }, "engines": { - "node": ">=18" + "node": ">=14" }, "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@inquirer/prompts": { - "version": "7.8.6", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.8.6.tgz", - "integrity": "sha512-68JhkiojicX9SBUD8FE/pSKbOKtwoyaVj1kwqLfvjlVXZvOy3iaSWX4dCLsZyYx/5Ur07Fq+yuDNOen+5ce6ig==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-hapi/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@inquirer/checkbox": "^4.2.4", - "@inquirer/confirm": "^5.1.18", - "@inquirer/editor": "^4.2.20", - "@inquirer/expand": "^4.0.20", - "@inquirer/input": "^4.2.4", - "@inquirer/number": "^3.0.20", - "@inquirer/password": "^4.0.20", - "@inquirer/rawlist": "^4.1.8", - "@inquirer/search": "^3.1.3", - "@inquirer/select": "^4.3.4" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { - "node": ">=18" + "node": ">=14" }, "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@inquirer/rawlist": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.8.tgz", - "integrity": "sha512-CQ2VkIASbgI2PxdzlkeeieLRmniaUU1Aoi5ggEdm6BIyqopE9GuDXdDOj9XiwOqK5qm72oI2i6J+Gnjaa26ejg==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-hapi/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-http": { + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.203.0.tgz", + "integrity": "sha512-y3uQAcCOAwnO6vEuNVocmpVzG3PER6/YZqbPbbffDdJ9te5NkHEkfSMNzlC3+v7KlE+WinPGc3N7MR30G1HY2g==", + "license": "Apache-2.0", "dependencies": { - "@inquirer/core": "^10.2.2", - "@inquirer/type": "^3.0.8", - "yoctocolors-cjs": "^2.1.2" + "@opentelemetry/core": "2.0.1", + "@opentelemetry/instrumentation": "0.203.0", + "@opentelemetry/semantic-conventions": "^1.29.0", + "forwarded-parse": "2.1.2" }, "engines": { - "node": ">=18" + "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@inquirer/search": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.1.3.tgz", - "integrity": "sha512-D5T6ioybJJH0IiSUK/JXcoRrrm8sXwzrVMjibuPs+AgxmogKslaafy1oxFiorNI4s3ElSkeQZbhYQgLqiL8h6Q==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-ioredis": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.42.0.tgz", + "integrity": "sha512-P11H168EKvBB9TUSasNDOGJCSkpT44XgoM6d3gRIWAa9ghLpYhl0uRkS8//MqPzcJVHr3h3RmfXIpiYLjyIZTw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@inquirer/core": "^10.2.2", - "@inquirer/figures": "^1.0.13", - "@inquirer/type": "^3.0.8", - "yoctocolors-cjs": "^2.1.2" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.23.0" }, "engines": { - "node": ">=18" + "node": ">=14" }, "peerDependencies": { - "@types/node": ">=18" + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-ioredis/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/api": "^1.0.0" }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "engines": { + "node": ">=14" } }, - "node_modules/@inquirer/select": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.3.4.tgz", - "integrity": "sha512-Qp20nySRmfbuJBBsgPU7E/cL62Hf250vMZRzYDcBHty2zdD1kKCnoDFWRr0WO2ZzaXp3R7a4esaVGJUx0E6zvA==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-ioredis/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@inquirer/ansi": "^1.0.0", - "@inquirer/core": "^10.2.2", - "@inquirer/figures": "^1.0.13", - "@inquirer/type": "^3.0.8", - "yoctocolors-cjs": "^2.1.2" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { - "node": ">=18" + "node": ">=14" }, "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@inquirer/type": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.8.tgz", - "integrity": "sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-kafkajs": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.2.0.tgz", + "integrity": "sha512-uKKmhEFd0zR280tJovuiBG7cfnNZT4kvVTvqtHPxQP7nOmRbJstCYHFH13YzjVcKjkmoArmxiSulmZmF7SLIlg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.24.0" + }, "engines": { - "node": ">=18" + "node": ">=14" }, "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-kafkajs/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, "engines": { - "node": "20 || >=22" + "node": ">=14" } }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-kafkajs/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@isaacs/balanced-match": "^4.0.1" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { - "node": "20 || >=22" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", + "node_modules/@opentelemetry/instrumentation-knex": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.39.0.tgz", + "integrity": "sha512-lRwTqIKQecPWDkH1KEcAUcFhCaNssbKSpxf4sxRTAROCwrCEnYkjOuqJHV+q1/CApjMTaKu0Er4LBv/6bDpoxA==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { - "node": ">=12" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-knex/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "@opentelemetry/api": "^1.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=14" } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-knex/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { - "node": ">=12" + "node": ">=14" }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@js-sdsl/ordered-map": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", - "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/js-sdsl" + "node_modules/@opentelemetry/instrumentation-koa": { + "version": "0.42.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.42.0.tgz", + "integrity": "sha512-H1BEmnMhho8o8HuNRq5zEI4+SIHDIglNB7BPKohZyWG4fWNuR7yM4GTlR01Syq21vODAS7z5omblScJD/eZdKw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@keyv/serialize": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", - "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", - "license": "MIT" - }, - "node_modules/@kwsites/file-exists": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", - "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-koa/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "debug": "^4.1.1" + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" } }, - "node_modules/@kwsites/promise-deferred": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", - "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", - "license": "MIT" - }, - "node_modules/@modelcontextprotocol/sdk": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.18.0.tgz", - "integrity": "sha512-JvKyB6YwS3quM+88JPR0axeRgvdDu3Pv6mdZUy+w4qVkCzGgumb9bXG/TmtDRQv+671yaofVfXSQmFLlWU5qPQ==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-koa/node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "ajv": "^6.12.6", - "content-type": "^1.0.5", - "cors": "^2.8.5", - "cross-spawn": "^7.0.5", - "eventsource": "^3.0.2", - "eventsource-parser": "^3.0.0", - "express": "^5.0.1", - "express-rate-limit": "^7.5.0", - "pkce-challenge": "^5.0.0", - "raw-body": "^3.0.0", - "zod": "^3.23.8", - "zod-to-json-schema": "^3.24.1" + "@opentelemetry/semantic-conventions": "1.28.0" }, "engines": { - "node": ">=18" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@modelcontextprotocol/sdk/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-koa/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@modelcontextprotocol/sdk/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" + "node_modules/@opentelemetry/instrumentation-koa/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-lru-memoizer": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.39.0.tgz", + "integrity": "sha512-eU1Wx1RRTR/2wYXFzH9gcpB8EPmhYlNDIUHzUXjyUE0CAXEJhBLkYNlzdaVCoQDw2neDqS+Woshiia6+emWK9A==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@opentelemetry/instrumentation": "^0.52.0" }, "engines": { - "node": ">= 8" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-lru-memoizer/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, "engines": { - "node": ">= 8" + "node": ">=14" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "license": "MIT", + "node_modules/@opentelemetry/instrumentation-lru-memoizer/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "license": "Apache-2.0", + "optional": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { - "node": ">= 8" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/api": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", - "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "node_modules/@opentelemetry/instrumentation-memcached": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-memcached/-/instrumentation-memcached-0.38.0.tgz", + "integrity": "sha512-tPmyqQEZNyrvg6G+iItdlguQEcGzfE+bJkpQifmBXmWBnoS5oU3UxqtyYuXGL2zI9qQM5yMBHH4nRXWALzy7WA==", "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.23.0", + "@types/memcached": "^2.2.6" + }, "engines": { - "node": ">=8.0.0" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/api-logs": { + "node_modules/@opentelemetry/instrumentation-memcached/node_modules/@opentelemetry/api-logs": { "version": "0.52.1", "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", "license": "Apache-2.0", + "optional": true, "dependencies": { "@opentelemetry/api": "^1.0.0" }, @@ -2713,133 +6532,101 @@ "node": ">=14" } }, - "node_modules/@opentelemetry/auto-instrumentations-node": { - "version": "0.49.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/auto-instrumentations-node/-/auto-instrumentations-node-0.49.2.tgz", - "integrity": "sha512-xtETEPmAby/3MMmedv8Z/873sdLTWg+Vq98rtm4wbwvAiXBB/ao8qRyzRlvR2MR6puEr+vIB/CXeyJnzNA3cyw==", + "node_modules/@opentelemetry/instrumentation-memcached/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/instrumentation": "^0.52.0", - "@opentelemetry/instrumentation-amqplib": "^0.41.0", - "@opentelemetry/instrumentation-aws-lambda": "^0.43.0", - "@opentelemetry/instrumentation-aws-sdk": "^0.43.1", - "@opentelemetry/instrumentation-bunyan": "^0.40.0", - "@opentelemetry/instrumentation-cassandra-driver": "^0.40.0", - "@opentelemetry/instrumentation-connect": "^0.38.0", - "@opentelemetry/instrumentation-cucumber": "^0.8.0", - "@opentelemetry/instrumentation-dataloader": "^0.11.0", - "@opentelemetry/instrumentation-dns": "^0.38.0", - "@opentelemetry/instrumentation-express": "^0.41.1", - "@opentelemetry/instrumentation-fastify": "^0.38.0", - "@opentelemetry/instrumentation-fs": "^0.14.0", - "@opentelemetry/instrumentation-generic-pool": "^0.38.1", - "@opentelemetry/instrumentation-graphql": "^0.42.0", - "@opentelemetry/instrumentation-grpc": "^0.52.0", - "@opentelemetry/instrumentation-hapi": "^0.40.0", - "@opentelemetry/instrumentation-http": "^0.52.0", - "@opentelemetry/instrumentation-ioredis": "^0.42.0", - "@opentelemetry/instrumentation-kafkajs": "^0.2.0", - "@opentelemetry/instrumentation-knex": "^0.39.0", - "@opentelemetry/instrumentation-koa": "^0.42.0", - "@opentelemetry/instrumentation-lru-memoizer": "^0.39.0", - "@opentelemetry/instrumentation-memcached": "^0.38.0", - "@opentelemetry/instrumentation-mongodb": "^0.46.0", - "@opentelemetry/instrumentation-mongoose": "^0.41.0", - "@opentelemetry/instrumentation-mysql": "^0.40.0", - "@opentelemetry/instrumentation-mysql2": "^0.40.0", - "@opentelemetry/instrumentation-nestjs-core": "^0.39.0", - "@opentelemetry/instrumentation-net": "^0.38.0", - "@opentelemetry/instrumentation-pg": "^0.43.0", - "@opentelemetry/instrumentation-pino": "^0.41.0", - "@opentelemetry/instrumentation-redis": "^0.41.0", - "@opentelemetry/instrumentation-redis-4": "^0.41.1", - "@opentelemetry/instrumentation-restify": "^0.40.0", - "@opentelemetry/instrumentation-router": "^0.39.0", - "@opentelemetry/instrumentation-socket.io": "^0.41.0", - "@opentelemetry/instrumentation-tedious": "^0.13.0", - "@opentelemetry/instrumentation-undici": "^0.5.0", - "@opentelemetry/instrumentation-winston": "^0.39.0", - "@opentelemetry/resource-detector-alibaba-cloud": "^0.29.0", - "@opentelemetry/resource-detector-aws": "^1.6.0", - "@opentelemetry/resource-detector-azure": "^0.2.10", - "@opentelemetry/resource-detector-container": "^0.4.0", - "@opentelemetry/resource-detector-gcp": "^0.29.10", - "@opentelemetry/resources": "^1.24.0", - "@opentelemetry/sdk-node": "^0.52.0" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": "^1.4.1" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/context-async-hooks": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.25.1.tgz", - "integrity": "sha512-UW/ge9zjvAEmRWVapOP0qyCvPulWU6cQxGxDbWEFfGOj1VBBZAuOqTo3X6yWmDTD3Xe15ysCZChHncr2xFMIfQ==", + "node_modules/@opentelemetry/instrumentation-mongodb": { + "version": "0.46.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.46.0.tgz", + "integrity": "sha512-VF/MicZ5UOBiXrqBslzwxhN7TVqzu1/LN/QDpkskqM0Zm0aZ4CVRbUygL8d7lrjLn15x5kGIe8VsSphMfPJzlA==", "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/sdk-metrics": "^1.9.1", + "@opentelemetry/semantic-conventions": "^1.22.0" + }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/core": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", - "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "node_modules/@opentelemetry/instrumentation-mongodb/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/api": "^1.0.0" }, "engines": { "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-jaeger": { + "node_modules/@opentelemetry/instrumentation-mongodb/node_modules/@opentelemetry/core": { "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-jaeger/-/exporter-jaeger-1.30.1.tgz", - "integrity": "sha512-7Ki+x7cZ/PEQxp3UyB+CWkWBqLk22yRGQ4AWIGwZlEs6rpCOdWwIFOyQDO9DdeyWtTPTvO3An/7chPZcRHOgzQ==", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/core": "1.30.1", - "@opentelemetry/sdk-trace-base": "1.30.1", - "@opentelemetry/semantic-conventions": "1.28.0", - "jaeger-client": "^3.15.0" + "@opentelemetry/semantic-conventions": "1.28.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-jaeger/node_modules/@opentelemetry/core": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", - "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", + "node_modules/@opentelemetry/instrumentation-mongodb/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/semantic-conventions": "1.28.0" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-jaeger/node_modules/@opentelemetry/resources": { + "node_modules/@opentelemetry/instrumentation-mongodb/node_modules/@opentelemetry/resources": { "version": "1.30.1", "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.30.1.tgz", "integrity": "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==", "license": "Apache-2.0", + "optional": true, "dependencies": { "@opentelemetry/core": "1.30.1", "@opentelemetry/semantic-conventions": "1.28.0" @@ -2851,103 +6638,93 @@ "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-jaeger/node_modules/@opentelemetry/sdk-trace-base": { + "node_modules/@opentelemetry/instrumentation-mongodb/node_modules/@opentelemetry/sdk-metrics": { "version": "1.30.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.30.1.tgz", - "integrity": "sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.30.1.tgz", + "integrity": "sha512-q9zcZ0Okl8jRgmy7eNW3Ku1XSgg3sDLa5evHZpCwjspw7E8Is4K/haRPDJrBcX3YSn/Y7gUvFnByNYEKQNbNog==", "license": "Apache-2.0", + "optional": true, "dependencies": { "@opentelemetry/core": "1.30.1", - "@opentelemetry/resources": "1.30.1", - "@opentelemetry/semantic-conventions": "1.28.0" + "@opentelemetry/resources": "1.30.1" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-jaeger/node_modules/@opentelemetry/semantic-conventions": { + "node_modules/@opentelemetry/instrumentation-mongodb/node_modules/@opentelemetry/semantic-conventions": { "version": "1.28.0", "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", "license": "Apache-2.0", + "optional": true, "engines": { "node": ">=14" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-grpc": { - "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-grpc/-/exporter-logs-otlp-grpc-0.52.1.tgz", - "integrity": "sha512-sXgcp4fsL3zCo96A0LmFIGYOj2LSEDI6wD7nBYRhuDDxeRsk18NQgqRVlCf4VIyTBZzGu1M7yOtdFukQPgII1A==", + "node_modules/@opentelemetry/instrumentation-mongoose": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.41.0.tgz", + "integrity": "sha512-ivJg4QnnabFxxoI7K8D+in7hfikjte38sYzJB9v1641xJk9Esa7jM3hmbPB7lxwcgWJLVEDvfPwobt1if0tXxA==", "license": "Apache-2.0", + "optional": true, "dependencies": { - "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.25.1", - "@opentelemetry/otlp-grpc-exporter-base": "0.52.1", - "@opentelemetry/otlp-transformer": "0.52.1", - "@opentelemetry/sdk-logs": "0.52.1" + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-logs-otlp-http": { + "node_modules/@opentelemetry/instrumentation-mongoose/node_modules/@opentelemetry/api-logs": { "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.52.1.tgz", - "integrity": "sha512-qKgywId2DbdowPZpOBXQKp0B8DfhfIArmSic15z13Nk/JAOccBUQdPwDjDnjsM5f0ckZFMVR2t/tijTUAqDZoA==", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/api-logs": "0.52.1", - "@opentelemetry/core": "1.25.1", - "@opentelemetry/otlp-exporter-base": "0.52.1", - "@opentelemetry/otlp-transformer": "0.52.1", - "@opentelemetry/sdk-logs": "0.52.1" + "@opentelemetry/api": "^1.0.0" }, "engines": { "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-grpc": { - "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-grpc/-/exporter-metrics-otlp-grpc-0.52.1.tgz", - "integrity": "sha512-CE0f1IEE1GQj8JWl/BxKvKwx9wBTLR09OpPQHaIs5LGBw3ODu8ek5kcbrHPNsFYh/pWh+pcjbZQoxq3CqvQVnA==", + "node_modules/@opentelemetry/instrumentation-mongoose/node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", "license": "Apache-2.0", + "optional": true, "dependencies": { - "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.25.1", - "@opentelemetry/exporter-metrics-otlp-http": "0.52.1", - "@opentelemetry/otlp-exporter-base": "0.52.1", - "@opentelemetry/otlp-grpc-exporter-base": "0.52.1", - "@opentelemetry/otlp-transformer": "0.52.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/sdk-metrics": "1.25.1" + "@opentelemetry/semantic-conventions": "1.28.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": "^1.3.0" + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-http": { + "node_modules/@opentelemetry/instrumentation-mongoose/node_modules/@opentelemetry/instrumentation": { "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.52.1.tgz", - "integrity": "sha512-oAHPOy1sZi58bwqXaucd19F/v7+qE2EuVslQOEeLQT94CDuZJJ4tbWzx8DpYBTrOSzKqqrMtx9+PMxkrcbxOyQ==", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/otlp-exporter-base": "0.52.1", - "@opentelemetry/otlp-transformer": "0.52.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/sdk-metrics": "1.25.1" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { "node": ">=14" @@ -2956,87 +6733,105 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-grpc": { - "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.52.1.tgz", - "integrity": "sha512-pVkSH20crBwMTqB3nIN4jpQKUEoB0Z94drIHpYyEqs7UBr+I0cpYyOR3bqjA/UasQUMROb3GX8ZX4/9cVRqGBQ==", + "node_modules/@opentelemetry/instrumentation-mongoose/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-mysql": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.40.0.tgz", + "integrity": "sha512-d7ja8yizsOCNMYIJt5PH/fKZXjb/mS48zLROO4BzZTtDfhNCl2UM/9VIomP2qkGIFVouSJrGr/T00EzY7bPtKA==", "license": "Apache-2.0", + "optional": true, "dependencies": { - "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.25.1", - "@opentelemetry/otlp-grpc-exporter-base": "0.52.1", - "@opentelemetry/otlp-transformer": "0.52.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/sdk-trace-base": "1.25.1" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@types/mysql": "2.15.22" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-http": { + "node_modules/@opentelemetry/instrumentation-mysql/node_modules/@opentelemetry/api-logs": { "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.52.1.tgz", - "integrity": "sha512-05HcNizx0BxcFKKnS5rwOV+2GevLTVIRA0tRgWYyw4yCgR53Ic/xk83toYKts7kbzcI+dswInUg/4s8oyA+tqg==", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/otlp-exporter-base": "0.52.1", - "@opentelemetry/otlp-transformer": "0.52.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/sdk-trace-base": "1.25.1" + "@opentelemetry/api": "^1.0.0" }, "engines": { "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-proto": { + "node_modules/@opentelemetry/instrumentation-mysql/node_modules/@opentelemetry/instrumentation": { "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.52.1.tgz", - "integrity": "sha512-pt6uX0noTQReHXNeEslQv7x311/F1gJzMnp1HD2qgypLRPbXDeMzzeTngRTUaUbP6hqWNtPxuLr4DEoZG+TcEQ==", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/otlp-exporter-base": "0.52.1", - "@opentelemetry/otlp-transformer": "0.52.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/sdk-trace-base": "1.25.1" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/exporter-zipkin": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.25.1.tgz", - "integrity": "sha512-RmOwSvkimg7ETwJbUOPTMhJm9A9bG1U8s7Zo3ajDh4zM7eYcycQ0dM7FbLD6NXWbI2yj7UY4q8BKinKYBQksyw==", + "node_modules/@opentelemetry/instrumentation-mysql2": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.40.0.tgz", + "integrity": "sha512-0xfS1xcqUmY7WE1uWjlmI67Xg3QsSUlNT+AcXHeA4BDUPwZtWqF4ezIwLgpVZfHOnkAEheqGfNSWd1PIu3Wnfg==", "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/sdk-trace-base": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.22.0", + "@opentelemetry/sql-common": "^0.40.1" }, "engines": { "node": ">=14" }, "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/instrumentation-mysql2/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" } }, - "node_modules/@opentelemetry/instrumentation": { + "node_modules/@opentelemetry/instrumentation-mysql2/node_modules/@opentelemetry/instrumentation": { "version": "0.52.1", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", "license": "Apache-2.0", + "optional": true, "dependencies": { "@opentelemetry/api-logs": "0.52.1", "@types/shimmer": "^1.0.2", @@ -3052,16 +6847,15 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-amqplib": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.41.0.tgz", - "integrity": "sha512-00Oi6N20BxJVcqETjgNzCmVKN+I5bJH/61IlHiIWd00snj1FdgiIKlpE4hYVacTB2sjIBB3nTbHskttdZEE2eg==", + "node_modules/@opentelemetry/instrumentation-nestjs-core": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.39.0.tgz", + "integrity": "sha512-mewVhEXdikyvIZoMIUry8eb8l3HUjuQjSjVbmLVTt4NQi35tkpnHQrG9bTRBrl3403LoWZ2njMPJyg4l6HfKvA==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.52.0", - "@opentelemetry/semantic-conventions": "^1.22.0" + "@opentelemetry/semantic-conventions": "^1.23.0" }, "engines": { "node": ">=14" @@ -3070,18 +6864,32 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-aws-lambda": { - "version": "0.43.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-lambda/-/instrumentation-aws-lambda-0.43.0.tgz", - "integrity": "sha512-pSxcWlsE/pCWQRIw92sV2C+LmKXelYkjkA7C5s39iPUi4pZ2lA1nIiw+1R/y2pDEhUHcaKkNyljQr3cx9ZpVlQ==", + "node_modules/@opentelemetry/instrumentation-nestjs-core/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/instrumentation": "^0.52.0", - "@opentelemetry/propagator-aws-xray": "^1.3.1", - "@opentelemetry/resources": "^1.8.0", - "@opentelemetry/semantic-conventions": "^1.22.0", - "@types/aws-lambda": "8.10.122" + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-nestjs-core/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { "node": ">=14" @@ -3090,17 +6898,15 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-aws-sdk": { - "version": "0.43.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-aws-sdk/-/instrumentation-aws-sdk-0.43.1.tgz", - "integrity": "sha512-qLT2cCniJ5W+6PFzKbksnoIQuq9pS83nmgaExfUwXVvlwi0ILc50dea0tWBHZMkdIDa/zZdcuFrJ7+fUcSnRow==", + "node_modules/@opentelemetry/instrumentation-net": { + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-net/-/instrumentation-net-0.38.0.tgz", + "integrity": "sha512-stjow1PijcmUquSmRD/fSihm/H61DbjPlJuJhWUe7P22LFPjFhsrSeiB5vGj3vn+QGceNAs+kioUTzMGPbNxtg==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.52.0", - "@opentelemetry/propagation-utils": "^0.30.10", - "@opentelemetry/semantic-conventions": "^1.22.0" + "@opentelemetry/semantic-conventions": "^1.23.0" }, "engines": { "node": ">=14" @@ -3109,33 +6915,32 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-bunyan": { - "version": "0.40.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-bunyan/-/instrumentation-bunyan-0.40.0.tgz", - "integrity": "sha512-aZ4cXaGWwj79ZXSYrgFVsrDlE4mmf2wfvP9bViwRc0j75A6eN6GaHYHqufFGMTCqASQn5pIjjP+Bx+PWTGiofw==", + "node_modules/@opentelemetry/instrumentation-net/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/api-logs": "^0.52.0", - "@opentelemetry/instrumentation": "^0.52.0", - "@types/bunyan": "1.8.9" + "@opentelemetry/api": "^1.0.0" }, "engines": { "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-cassandra-driver": { - "version": "0.40.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cassandra-driver/-/instrumentation-cassandra-driver-0.40.0.tgz", - "integrity": "sha512-JxbM39JU7HxE9MTKKwi6y5Z3mokjZB2BjwfqYi4B3Y29YO3I42Z7eopG6qq06yWZc+nQli386UDQe0d9xKmw0A==", + "node_modules/@opentelemetry/instrumentation-net/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/instrumentation": "^0.52.0", - "@opentelemetry/semantic-conventions": "^1.22.0" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { "node": ">=14" @@ -3144,17 +6949,18 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-connect": { - "version": "0.38.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.38.0.tgz", - "integrity": "sha512-2/nRnx3pjYEmdPIaBwtgtSviTKHWnDZN3R+TkRUnhIVrvBKVcq+I5B2rtd6mr6Fe9cHlZ9Ojcuh7pkNh/xdWWg==", + "node_modules/@opentelemetry/instrumentation-pg": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.43.0.tgz", + "integrity": "sha512-og23KLyoxdnAeFs1UWqzSonuCkePUzCX30keSYigIzJe/6WSYA8rnEI5lobcxPEzg+GcU06J7jzokuEHbjVJNw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.52.0", "@opentelemetry/semantic-conventions": "^1.22.0", - "@types/connect": "3.4.36" + "@opentelemetry/sql-common": "^0.40.1", + "@types/pg": "8.6.1", + "@types/pg-pool": "2.0.4" }, "engines": { "node": ">=14" @@ -3163,31 +6969,32 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-cucumber": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-cucumber/-/instrumentation-cucumber-0.8.0.tgz", - "integrity": "sha512-ieTm4RBIlZt2brPwtX5aEZYtYnkyqhAVXJI9RIohiBVMe5DxiwCwt+2Exep/nDVqGPX8zRBZUl4AEw423OxJig==", + "node_modules/@opentelemetry/instrumentation-pg/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/instrumentation": "^0.52.0", - "@opentelemetry/semantic-conventions": "^1.22.0" + "@opentelemetry/api": "^1.0.0" }, "engines": { "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@opentelemetry/instrumentation-dataloader": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.11.0.tgz", - "integrity": "sha512-27urJmwkH4KDaMJtEv1uy2S7Apk4XbN4AgWMdfMJbi7DnOduJmeuA+DpJCwXB72tEWXo89z5T3hUVJIDiSNmNw==", + "node_modules/@opentelemetry/instrumentation-pg/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/instrumentation": "^0.52.0" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { "node": ">=14" @@ -3196,15 +7003,16 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-dns": { - "version": "0.38.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dns/-/instrumentation-dns-0.38.0.tgz", - "integrity": "sha512-Um07I0TQXDWa+ZbEAKDFUxFH40dLtejtExDOMLNJ1CL8VmOmA71qx93Qi/QG4tGkiI1XWqr7gF/oiMCJ4m8buQ==", + "node_modules/@opentelemetry/instrumentation-pino": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pino/-/instrumentation-pino-0.41.0.tgz", + "integrity": "sha512-Kpv0fJRk/8iMzMk5Ue5BsUJfHkBJ2wQoIi/qduU1a1Wjx9GLj6J2G17PHjPK5mnZjPNzkFOXFADZMfgDioliQw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/instrumentation": "^0.52.0", - "semver": "^7.5.4" + "@opentelemetry/api-logs": "^0.52.0", + "@opentelemetry/core": "^1.25.0", + "@opentelemetry/instrumentation": "^0.52.0" }, "engines": { "node": ">=14" @@ -3213,51 +7021,48 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-express": { - "version": "0.41.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.41.1.tgz", - "integrity": "sha512-uRx0V3LPGzjn2bxAnV8eUsDT82vT7NTwI0ezEuPMBOTOsnPpGhWdhcdNdhH80sM4TrWrOfXm9HGEdfWE3TRIww==", + "node_modules/@opentelemetry/instrumentation-pino/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.52.0", - "@opentelemetry/semantic-conventions": "^1.22.0" + "@opentelemetry/api": "^1.0.0" }, "engines": { "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-fastify": { - "version": "0.38.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fastify/-/instrumentation-fastify-0.38.0.tgz", - "integrity": "sha512-HBVLpTSYpkQZ87/Df3N0gAw7VzYZV3n28THIBrJWfuqw3Or7UqdhnjeuMIPQ04BKk3aZc0cWn2naSQObbh5vXw==", + "node_modules/@opentelemetry/instrumentation-pino/node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.52.0", - "@opentelemetry/semantic-conventions": "^1.22.0" + "@opentelemetry/semantic-conventions": "1.28.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": "^1.3.0" + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/instrumentation-fs": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.14.0.tgz", - "integrity": "sha512-pVc8P5AgliC1DphyyBUgsxXlm2XaPH4BpYvt7rAZDMIqUpRk8gs19SioABtKqqxvFzg5jPtgJfJsdxq0Y+maLw==", + "node_modules/@opentelemetry/instrumentation-pino/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.52.0" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { "node": ">=14" @@ -3266,30 +7071,26 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-generic-pool": { - "version": "0.38.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.38.1.tgz", - "integrity": "sha512-WvssuKCuavu/hlq661u82UWkc248cyI/sT+c2dEIj6yCk0BUkErY1D+9XOO+PmHdJNE+76i2NdcvQX5rJrOe/w==", + "node_modules/@opentelemetry/instrumentation-pino/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", "license": "Apache-2.0", "optional": true, - "dependencies": { - "@opentelemetry/instrumentation": "^0.52.0" - }, "engines": { "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-graphql": { - "version": "0.42.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.42.0.tgz", - "integrity": "sha512-N8SOwoKL9KQSX7z3gOaw5UaTeVQcfDO1c21csVHnmnmGUoqsXbArK2B8VuwPWcv6/BC/i3io+xTo7QGRZ/z28Q==", + "node_modules/@opentelemetry/instrumentation-redis": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis/-/instrumentation-redis-0.41.0.tgz", + "integrity": "sha512-RJ1pwI3btykp67ts+5qZbaFSAAzacucwBet5/5EsKYtWBpHbWwV/qbGN/kIBzXg5WEZBhXLrR/RUq0EpEUpL3A==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/instrumentation": "^0.52.0" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { "node": ">=14" @@ -3298,15 +7099,16 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-grpc": { - "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-grpc/-/instrumentation-grpc-0.52.1.tgz", - "integrity": "sha512-EdSDiDSAO+XRXk/ZN128qQpBo1I51+Uay/LUPcPQhSRGf7fBPIEUBeOLQiItguGsug5MGOYjql2w/1wCQF3fdQ==", + "node_modules/@opentelemetry/instrumentation-redis-4": { + "version": "0.41.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.41.1.tgz", + "integrity": "sha512-UqJAbxraBk7s7pQTlFi5ND4sAUs4r/Ai7gsAVZTQDbHl2kSsOp7gpHcpIuN5dpcI2xnuhM2tkH4SmEhbrv2S6Q==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/instrumentation": "0.52.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/instrumentation": "^0.52.0", + "@opentelemetry/redis-common": "^0.36.2", + "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { "node": ">=14" @@ -3315,34 +7117,32 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-hapi": { - "version": "0.40.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.40.0.tgz", - "integrity": "sha512-8U/w7Ifumtd2bSN1OLaSwAAFhb9FyqWUki3lMMB0ds+1+HdSxYBe9aspEJEgvxAqOkrQnVniAPTEGf1pGM7SOw==", + "node_modules/@opentelemetry/instrumentation-redis-4/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.52.0", - "@opentelemetry/semantic-conventions": "^1.22.0" + "@opentelemetry/api": "^1.0.0" }, "engines": { "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-http": { + "node_modules/@opentelemetry/instrumentation-redis-4/node_modules/@opentelemetry/instrumentation": { "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.52.1.tgz", - "integrity": "sha512-dG/aevWhaP+7OLv4BQQSEKMJv8GyeOp3Wxl31NHqE8xo9/fYMfEljiZphUHIfyg4gnZ9swMyWjfOQs5GUQe54Q==", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/instrumentation": "0.52.1", - "@opentelemetry/semantic-conventions": "1.25.1", - "semver": "^7.5.2" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { "node": ">=14" @@ -3351,33 +7151,32 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-ioredis": { - "version": "0.42.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.42.0.tgz", - "integrity": "sha512-P11H168EKvBB9TUSasNDOGJCSkpT44XgoM6d3gRIWAa9ghLpYhl0uRkS8//MqPzcJVHr3h3RmfXIpiYLjyIZTw==", + "node_modules/@opentelemetry/instrumentation-redis/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/instrumentation": "^0.52.0", - "@opentelemetry/redis-common": "^0.36.2", - "@opentelemetry/semantic-conventions": "^1.23.0" + "@opentelemetry/api": "^1.0.0" }, "engines": { "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-kafkajs": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.2.0.tgz", - "integrity": "sha512-uKKmhEFd0zR280tJovuiBG7cfnNZT4kvVTvqtHPxQP7nOmRbJstCYHFH13YzjVcKjkmoArmxiSulmZmF7SLIlg==", + "node_modules/@opentelemetry/instrumentation-redis/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/instrumentation": "^0.52.0", - "@opentelemetry/semantic-conventions": "^1.24.0" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { "node": ">=14" @@ -3386,13 +7185,14 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-knex": { - "version": "0.39.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.39.0.tgz", - "integrity": "sha512-lRwTqIKQecPWDkH1KEcAUcFhCaNssbKSpxf4sxRTAROCwrCEnYkjOuqJHV+q1/CApjMTaKu0Er4LBv/6bDpoxA==", + "node_modules/@opentelemetry/instrumentation-restify": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-restify/-/instrumentation-restify-0.40.0.tgz", + "integrity": "sha512-sm/rH/GysY/KOEvZqYBZSLYFeXlBkHCgqPDgWc07tz+bHCN6mPs9P3otGOSTe7o3KAIM8Nc6ncCO59vL+jb2cA==", "license": "Apache-2.0", "optional": true, "dependencies": { + "@opentelemetry/core": "^1.8.0", "@opentelemetry/instrumentation": "^0.52.0", "@opentelemetry/semantic-conventions": "^1.22.0" }, @@ -3403,50 +7203,48 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-koa": { - "version": "0.42.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.42.0.tgz", - "integrity": "sha512-H1BEmnMhho8o8HuNRq5zEI4+SIHDIglNB7BPKohZyWG4fWNuR7yM4GTlR01Syq21vODAS7z5omblScJD/eZdKw==", + "node_modules/@opentelemetry/instrumentation-restify/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.52.0", - "@opentelemetry/semantic-conventions": "^1.22.0" + "@opentelemetry/api": "^1.0.0" }, "engines": { "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-lru-memoizer": { - "version": "0.39.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.39.0.tgz", - "integrity": "sha512-eU1Wx1RRTR/2wYXFzH9gcpB8EPmhYlNDIUHzUXjyUE0CAXEJhBLkYNlzdaVCoQDw2neDqS+Woshiia6+emWK9A==", + "node_modules/@opentelemetry/instrumentation-restify/node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/instrumentation": "^0.52.0" + "@opentelemetry/semantic-conventions": "1.28.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": "^1.3.0" + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/instrumentation-memcached": { - "version": "0.38.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-memcached/-/instrumentation-memcached-0.38.0.tgz", - "integrity": "sha512-tPmyqQEZNyrvg6G+iItdlguQEcGzfE+bJkpQifmBXmWBnoS5oU3UxqtyYuXGL2zI9qQM5yMBHH4nRXWALzy7WA==", + "node_modules/@opentelemetry/instrumentation-restify/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/instrumentation": "^0.52.0", - "@opentelemetry/semantic-conventions": "^1.23.0", - "@types/memcached": "^2.2.6" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { "node": ">=14" @@ -3455,15 +7253,24 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-mongodb": { - "version": "0.46.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.46.0.tgz", - "integrity": "sha512-VF/MicZ5UOBiXrqBslzwxhN7TVqzu1/LN/QDpkskqM0Zm0aZ4CVRbUygL8d7lrjLn15x5kGIe8VsSphMfPJzlA==", + "node_modules/@opentelemetry/instrumentation-restify/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-router": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-router/-/instrumentation-router-0.39.0.tgz", + "integrity": "sha512-LaXnVmD69WPC4hNeLzKexCCS19hRLrUw3xicneAMkzJSzNJvPyk7G6I7lz7VjQh1cooObPBt9gNyd3hhTCUrag==", "license": "Apache-2.0", "optional": true, "dependencies": { "@opentelemetry/instrumentation": "^0.52.0", - "@opentelemetry/sdk-metrics": "^1.9.1", "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { @@ -3473,34 +7280,32 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-mongoose": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.41.0.tgz", - "integrity": "sha512-ivJg4QnnabFxxoI7K8D+in7hfikjte38sYzJB9v1641xJk9Esa7jM3hmbPB7lxwcgWJLVEDvfPwobt1if0tXxA==", + "node_modules/@opentelemetry/instrumentation-router/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.52.0", - "@opentelemetry/semantic-conventions": "^1.22.0" + "@opentelemetry/api": "^1.0.0" }, "engines": { "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-mysql": { - "version": "0.40.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.40.0.tgz", - "integrity": "sha512-d7ja8yizsOCNMYIJt5PH/fKZXjb/mS48zLROO4BzZTtDfhNCl2UM/9VIomP2qkGIFVouSJrGr/T00EzY7bPtKA==", + "node_modules/@opentelemetry/instrumentation-router/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/instrumentation": "^0.52.0", - "@opentelemetry/semantic-conventions": "^1.22.0", - "@types/mysql": "2.15.22" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { "node": ">=14" @@ -3509,16 +7314,15 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-mysql2": { - "version": "0.40.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.40.0.tgz", - "integrity": "sha512-0xfS1xcqUmY7WE1uWjlmI67Xg3QsSUlNT+AcXHeA4BDUPwZtWqF4ezIwLgpVZfHOnkAEheqGfNSWd1PIu3Wnfg==", + "node_modules/@opentelemetry/instrumentation-socket.io": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-socket.io/-/instrumentation-socket.io-0.41.0.tgz", + "integrity": "sha512-7fzDe9/FpO6NFizC/wnzXXX7bF9oRchsD//wFqy5g5hVEgXZCQ70IhxjrKdBvgjyIejR9T9zTvfQ6PfVKfkCAw==", "license": "Apache-2.0", "optional": true, "dependencies": { "@opentelemetry/instrumentation": "^0.52.0", - "@opentelemetry/semantic-conventions": "^1.22.0", - "@opentelemetry/sql-common": "^0.40.1" + "@opentelemetry/semantic-conventions": "^1.22.0" }, "engines": { "node": ">=14" @@ -3527,32 +7331,32 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-nestjs-core": { - "version": "0.39.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.39.0.tgz", - "integrity": "sha512-mewVhEXdikyvIZoMIUry8eb8l3HUjuQjSjVbmLVTt4NQi35tkpnHQrG9bTRBrl3403LoWZ2njMPJyg4l6HfKvA==", + "node_modules/@opentelemetry/instrumentation-socket.io/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/instrumentation": "^0.52.0", - "@opentelemetry/semantic-conventions": "^1.23.0" + "@opentelemetry/api": "^1.0.0" }, "engines": { "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-net": { - "version": "0.38.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-net/-/instrumentation-net-0.38.0.tgz", - "integrity": "sha512-stjow1PijcmUquSmRD/fSihm/H61DbjPlJuJhWUe7P22LFPjFhsrSeiB5vGj3vn+QGceNAs+kioUTzMGPbNxtg==", + "node_modules/@opentelemetry/instrumentation-socket.io/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/instrumentation": "^0.52.0", - "@opentelemetry/semantic-conventions": "^1.23.0" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { "node": ">=14" @@ -3561,18 +7365,16 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-pg": { - "version": "0.43.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.43.0.tgz", - "integrity": "sha512-og23KLyoxdnAeFs1UWqzSonuCkePUzCX30keSYigIzJe/6WSYA8rnEI5lobcxPEzg+GcU06J7jzokuEHbjVJNw==", + "node_modules/@opentelemetry/instrumentation-tedious": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.13.0.tgz", + "integrity": "sha512-Pob0+0R62AqXH50pjazTeGBy/1+SK4CYpFUBV5t7xpbpeuQezkkgVGvLca84QqjBqQizcXedjpUJLgHQDixPQg==", "license": "Apache-2.0", "optional": true, "dependencies": { "@opentelemetry/instrumentation": "^0.52.0", "@opentelemetry/semantic-conventions": "^1.22.0", - "@opentelemetry/sql-common": "^0.40.1", - "@types/pg": "8.6.1", - "@types/pg-pool": "2.0.4" + "@types/tedious": "^4.0.14" }, "engines": { "node": ">=14" @@ -3581,34 +7383,32 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-pino": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pino/-/instrumentation-pino-0.41.0.tgz", - "integrity": "sha512-Kpv0fJRk/8iMzMk5Ue5BsUJfHkBJ2wQoIi/qduU1a1Wjx9GLj6J2G17PHjPK5mnZjPNzkFOXFADZMfgDioliQw==", + "node_modules/@opentelemetry/instrumentation-tedious/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/api-logs": "^0.52.0", - "@opentelemetry/core": "^1.25.0", - "@opentelemetry/instrumentation": "^0.52.0" + "@opentelemetry/api": "^1.0.0" }, "engines": { "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-redis": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis/-/instrumentation-redis-0.41.0.tgz", - "integrity": "sha512-RJ1pwI3btykp67ts+5qZbaFSAAzacucwBet5/5EsKYtWBpHbWwV/qbGN/kIBzXg5WEZBhXLrR/RUq0EpEUpL3A==", + "node_modules/@opentelemetry/instrumentation-tedious/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/instrumentation": "^0.52.0", - "@opentelemetry/redis-common": "^0.36.2", - "@opentelemetry/semantic-conventions": "^1.22.0" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { "node": ">=14" @@ -3617,68 +7417,65 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-redis-4": { - "version": "0.41.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis-4/-/instrumentation-redis-4-0.41.1.tgz", - "integrity": "sha512-UqJAbxraBk7s7pQTlFi5ND4sAUs4r/Ai7gsAVZTQDbHl2kSsOp7gpHcpIuN5dpcI2xnuhM2tkH4SmEhbrv2S6Q==", + "node_modules/@opentelemetry/instrumentation-undici": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.5.0.tgz", + "integrity": "sha512-aNTeSrFAVcM9qco5DfZ9DNXu6hpMRe8Kt8nCDHfMWDB3pwgGVUE76jTdohc+H/7eLRqh4L7jqs5NSQoHw7S6ww==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/instrumentation": "^0.52.0", - "@opentelemetry/redis-common": "^0.36.2", - "@opentelemetry/semantic-conventions": "^1.22.0" + "@opentelemetry/core": "^1.8.0", + "@opentelemetry/instrumentation": "^0.52.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": "^1.3.0" + "@opentelemetry/api": "^1.7.0" } }, - "node_modules/@opentelemetry/instrumentation-restify": { - "version": "0.40.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-restify/-/instrumentation-restify-0.40.0.tgz", - "integrity": "sha512-sm/rH/GysY/KOEvZqYBZSLYFeXlBkHCgqPDgWc07tz+bHCN6mPs9P3otGOSTe7o3KAIM8Nc6ncCO59vL+jb2cA==", + "node_modules/@opentelemetry/instrumentation-undici/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.52.0", - "@opentelemetry/semantic-conventions": "^1.22.0" + "@opentelemetry/api": "^1.0.0" }, "engines": { "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-router": { - "version": "0.39.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-router/-/instrumentation-router-0.39.0.tgz", - "integrity": "sha512-LaXnVmD69WPC4hNeLzKexCCS19hRLrUw3xicneAMkzJSzNJvPyk7G6I7lz7VjQh1cooObPBt9gNyd3hhTCUrag==", + "node_modules/@opentelemetry/instrumentation-undici/node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/instrumentation": "^0.52.0", - "@opentelemetry/semantic-conventions": "^1.22.0" + "@opentelemetry/semantic-conventions": "1.28.0" }, "engines": { "node": ">=14" }, "peerDependencies": { - "@opentelemetry/api": "^1.3.0" + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/instrumentation-socket.io": { - "version": "0.41.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-socket.io/-/instrumentation-socket.io-0.41.0.tgz", - "integrity": "sha512-7fzDe9/FpO6NFizC/wnzXXX7bF9oRchsD//wFqy5g5hVEgXZCQ70IhxjrKdBvgjyIejR9T9zTvfQ6PfVKfkCAw==", + "node_modules/@opentelemetry/instrumentation-undici/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/instrumentation": "^0.52.0", - "@opentelemetry/semantic-conventions": "^1.22.0" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { "node": ">=14" @@ -3687,16 +7484,25 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-tedious": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.13.0.tgz", - "integrity": "sha512-Pob0+0R62AqXH50pjazTeGBy/1+SK4CYpFUBV5t7xpbpeuQezkkgVGvLca84QqjBqQizcXedjpUJLgHQDixPQg==", + "node_modules/@opentelemetry/instrumentation-undici/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation-winston": { + "version": "0.39.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-winston/-/instrumentation-winston-0.39.0.tgz", + "integrity": "sha512-v/1xziLJ9CyB3YDjBSBzbB70Qd0JwWTo36EqWK5m3AR0CzsyMQQmf3ZIZM6sgx7hXMcRQ0pnEYhg6nhrUQPm9A==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/instrumentation": "^0.52.0", - "@opentelemetry/semantic-conventions": "^1.22.0", - "@types/tedious": "^4.0.14" + "@opentelemetry/api-logs": "^0.52.0", + "@opentelemetry/instrumentation": "^0.52.0" }, "engines": { "node": ">=14" @@ -3705,32 +7511,32 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-undici": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.5.0.tgz", - "integrity": "sha512-aNTeSrFAVcM9qco5DfZ9DNXu6hpMRe8Kt8nCDHfMWDB3pwgGVUE76jTdohc+H/7eLRqh4L7jqs5NSQoHw7S6ww==", + "node_modules/@opentelemetry/instrumentation-winston/node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/core": "^1.8.0", - "@opentelemetry/instrumentation": "^0.52.0" + "@opentelemetry/api": "^1.0.0" }, "engines": { "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.7.0" } }, - "node_modules/@opentelemetry/instrumentation-winston": { - "version": "0.39.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-winston/-/instrumentation-winston-0.39.0.tgz", - "integrity": "sha512-v/1xziLJ9CyB3YDjBSBzbB70Qd0JwWTo36EqWK5m3AR0CzsyMQQmf3ZIZM6sgx7hXMcRQ0pnEYhg6nhrUQPm9A==", + "node_modules/@opentelemetry/instrumentation-winston/node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", "license": "Apache-2.0", "optional": true, "dependencies": { - "@opentelemetry/api-logs": "^0.52.0", - "@opentelemetry/instrumentation": "^0.52.0" + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { "node": ">=14" @@ -3740,58 +7546,58 @@ } }, "node_modules/@opentelemetry/otlp-exporter-base": { - "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.52.1.tgz", - "integrity": "sha512-z175NXOtX5ihdlshtYBe5RpGeBoTXVCKPPLiQlD6FHvpM4Ch+p2B0yWKYSrBfLH24H9zjJiBdTrtD+hLlfnXEQ==", + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.203.0.tgz", + "integrity": "sha512-Wbxf7k+87KyvxFr5D7uOiSq/vHXWommvdnNE7vECO3tAhsA2GfOlpWINCMWUEPdHZ7tCXxw6Epp3vgx3jU7llQ==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/otlp-transformer": "0.52.1" + "@opentelemetry/core": "2.0.1", + "@opentelemetry/otlp-transformer": "0.203.0" }, "engines": { - "node": ">=14" + "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "@opentelemetry/api": "^1.3.0" } }, "node_modules/@opentelemetry/otlp-grpc-exporter-base": { - "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.52.1.tgz", - "integrity": "sha512-zo/YrSDmKMjG+vPeA9aBBrsQM9Q/f2zo6N04WMB3yNldJRsgpRBeLLwvAt/Ba7dpehDLOEFBd1i2JCoaFtpCoQ==", + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.203.0.tgz", + "integrity": "sha512-te0Ze1ueJF+N/UOFl5jElJW4U0pZXQ8QklgSfJ2linHN0JJsuaHG8IabEUi2iqxY8ZBDlSiz1Trfv5JcjWWWwQ==", "license": "Apache-2.0", "dependencies": { "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.25.1", - "@opentelemetry/otlp-exporter-base": "0.52.1", - "@opentelemetry/otlp-transformer": "0.52.1" + "@opentelemetry/core": "2.0.1", + "@opentelemetry/otlp-exporter-base": "0.203.0", + "@opentelemetry/otlp-transformer": "0.203.0" }, "engines": { - "node": ">=14" + "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "@opentelemetry/api": "^1.3.0" } }, "node_modules/@opentelemetry/otlp-transformer": { - "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.52.1.tgz", - "integrity": "sha512-I88uCZSZZtVa0XniRqQWKbjAUm73I8tpEy/uJYPPYw5d7BRdVk0RfTBQw8kSUl01oVWEuqxLDa802222MYyWHg==", + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.203.0.tgz", + "integrity": "sha512-Y8I6GgoCna0qDQ2W6GCRtaF24SnvqvA8OfeTi7fqigD23u8Jpb4R5KFv/pRvrlGagcCLICMIyh9wiejp4TXu/A==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "0.52.1", - "@opentelemetry/core": "1.25.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/sdk-logs": "0.52.1", - "@opentelemetry/sdk-metrics": "1.25.1", - "@opentelemetry/sdk-trace-base": "1.25.1", + "@opentelemetry/api-logs": "0.203.0", + "@opentelemetry/core": "2.0.1", + "@opentelemetry/resources": "2.0.1", + "@opentelemetry/sdk-logs": "0.203.0", + "@opentelemetry/sdk-metrics": "2.0.1", + "@opentelemetry/sdk-trace-base": "2.0.1", "protobufjs": "^7.3.0" }, "engines": { - "node": ">=14" + "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" + "@opentelemetry/api": "^1.3.0" } }, "node_modules/@opentelemetry/propagation-utils": { @@ -3821,30 +7627,30 @@ } }, "node_modules/@opentelemetry/propagator-b3": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.25.1.tgz", - "integrity": "sha512-p6HFscpjrv7//kE+7L+3Vn00VEDUJB0n6ZrjkTYHrJ58QZ8B3ajSJhRbCcY6guQ3PDjTbxWklyvIN2ojVbIb1A==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-2.0.1.tgz", + "integrity": "sha512-Hc09CaQ8Tf5AGLmf449H726uRoBNGPBL4bjr7AnnUpzWMvhdn61F78z9qb6IqB737TffBsokGAK1XykFEZ1igw==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.25.1" + "@opentelemetry/core": "2.0.1" }, "engines": { - "node": ">=14" + "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "node_modules/@opentelemetry/propagator-jaeger": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.25.1.tgz", - "integrity": "sha512-nBprRf0+jlgxks78G/xq72PipVK+4or9Ypntw0gVZYNTCSK8rg5SeaGV19tV920CMqBD/9UIOiFr23Li/Q8tiA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-2.0.1.tgz", + "integrity": "sha512-7PMdPBmGVH2eQNb/AtSJizQNgeNTfh6jQFqys6lfhd6P4r+m/nTh3gKPPpaCXVdRQ+z93vfKk+4UGty390283w==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.25.1" + "@opentelemetry/core": "2.0.1" }, "engines": { - "node": ">=14" + "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" @@ -3894,20 +7700,27 @@ "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/resource-detector-alibaba-cloud/node_modules/@opentelemetry/core/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", - "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "node_modules/@opentelemetry/resource-detector-alibaba-cloud/node_modules/@opentelemetry/resources": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.30.1.tgz", + "integrity": "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==", "license": "Apache-2.0", "optional": true, + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/semantic-conventions": "1.28.0" + }, "engines": { "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "node_modules/@opentelemetry/resource-detector-alibaba-cloud/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.37.0.tgz", - "integrity": "sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA==", + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", "license": "Apache-2.0", "optional": true, "engines": { @@ -3932,10 +7745,43 @@ "@opentelemetry/api": "^1.0.0" } }, + "node_modules/@opentelemetry/resource-detector-aws/node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/resource-detector-aws/node_modules/@opentelemetry/resources": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.30.1.tgz", + "integrity": "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, "node_modules/@opentelemetry/resource-detector-aws/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.37.0.tgz", - "integrity": "sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA==", + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", "license": "Apache-2.0", "optional": true, "engines": { @@ -3960,10 +7806,43 @@ "@opentelemetry/api": "^1.0.0" } }, + "node_modules/@opentelemetry/resource-detector-azure/node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/resource-detector-azure/node_modules/@opentelemetry/resources": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.30.1.tgz", + "integrity": "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, "node_modules/@opentelemetry/resource-detector-azure/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.37.0.tgz", - "integrity": "sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA==", + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", "license": "Apache-2.0", "optional": true, "engines": { @@ -4004,20 +7883,27 @@ "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/resource-detector-container/node_modules/@opentelemetry/core/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.28.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", - "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "node_modules/@opentelemetry/resource-detector-container/node_modules/@opentelemetry/resources": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.30.1.tgz", + "integrity": "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==", "license": "Apache-2.0", "optional": true, + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/semantic-conventions": "1.28.0" + }, "engines": { "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "node_modules/@opentelemetry/resource-detector-container/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.37.0.tgz", - "integrity": "sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA==", + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", "license": "Apache-2.0", "optional": true, "engines": { @@ -4043,24 +7929,31 @@ "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@opentelemetry/resource-detector-gcp/node_modules/@opentelemetry/semantic-conventions": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.37.0.tgz", - "integrity": "sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA==", + "node_modules/@opentelemetry/resource-detector-gcp/node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", "license": "Apache-2.0", "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "1.28.0" + }, "engines": { "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, - "node_modules/@opentelemetry/resources": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", - "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "node_modules/@opentelemetry/resource-detector-gcp/node_modules/@opentelemetry/resources": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.30.1.tgz", + "integrity": "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==", "license": "Apache-2.0", + "optional": true, "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/core": "1.30.1", + "@opentelemetry/semantic-conventions": "1.28.0" }, "engines": { "node": ">=14" @@ -4069,108 +7962,139 @@ "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, + "node_modules/@opentelemetry/resource-detector-gcp/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/resources": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.0.1.tgz", + "integrity": "sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/core": "2.0.1", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, "node_modules/@opentelemetry/sdk-logs": { - "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.52.1.tgz", - "integrity": "sha512-MBYh+WcPPsN8YpRHRmK1Hsca9pVlyyKd4BxOC4SsgHACnl/bPp4Cri9hWhVm5+2tiQ9Zf4qSc1Jshw9tOLGWQA==", + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.203.0.tgz", + "integrity": "sha512-vM2+rPq0Vi3nYA5akQD2f3QwossDnTDLvKbea6u/A2NZ3XDkPxMfo/PNrDoXhDUD/0pPo2CdH5ce/thn9K0kLw==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "0.52.1", - "@opentelemetry/core": "1.25.1", - "@opentelemetry/resources": "1.25.1" + "@opentelemetry/api-logs": "0.203.0", + "@opentelemetry/core": "2.0.1", + "@opentelemetry/resources": "2.0.1" }, "engines": { - "node": ">=14" + "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.4.0 <1.10.0" } }, "node_modules/@opentelemetry/sdk-metrics": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.25.1.tgz", - "integrity": "sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.0.1.tgz", + "integrity": "sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/resources": "1.25.1", - "lodash.merge": "^4.6.2" + "@opentelemetry/core": "2.0.1", + "@opentelemetry/resources": "2.0.1" }, "engines": { - "node": ">=14" + "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.10.0" + "@opentelemetry/api": ">=1.9.0 <1.10.0" } }, "node_modules/@opentelemetry/sdk-node": { - "version": "0.52.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-node/-/sdk-node-0.52.1.tgz", - "integrity": "sha512-uEG+gtEr6eKd8CVWeKMhH2olcCHM9dEK68pe0qE0be32BcCRsvYURhHaD1Srngh1SQcnQzZ4TP324euxqtBOJA==", + "version": "0.203.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-node/-/sdk-node-0.203.0.tgz", + "integrity": "sha512-zRMvrZGhGVMvAbbjiNQW3eKzW/073dlrSiAKPVWmkoQzah9wfynpVPeL55f9fVIm0GaBxTLcPeukWGy0/Wj7KQ==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "0.52.1", - "@opentelemetry/core": "1.25.1", - "@opentelemetry/exporter-trace-otlp-grpc": "0.52.1", - "@opentelemetry/exporter-trace-otlp-http": "0.52.1", - "@opentelemetry/exporter-trace-otlp-proto": "0.52.1", - "@opentelemetry/exporter-zipkin": "1.25.1", - "@opentelemetry/instrumentation": "0.52.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/sdk-logs": "0.52.1", - "@opentelemetry/sdk-metrics": "1.25.1", - "@opentelemetry/sdk-trace-base": "1.25.1", - "@opentelemetry/sdk-trace-node": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" - }, - "engines": { - "node": ">=14" + "@opentelemetry/api-logs": "0.203.0", + "@opentelemetry/core": "2.0.1", + "@opentelemetry/exporter-logs-otlp-grpc": "0.203.0", + "@opentelemetry/exporter-logs-otlp-http": "0.203.0", + "@opentelemetry/exporter-logs-otlp-proto": "0.203.0", + "@opentelemetry/exporter-metrics-otlp-grpc": "0.203.0", + "@opentelemetry/exporter-metrics-otlp-http": "0.203.0", + "@opentelemetry/exporter-metrics-otlp-proto": "0.203.0", + "@opentelemetry/exporter-prometheus": "0.203.0", + "@opentelemetry/exporter-trace-otlp-grpc": "0.203.0", + "@opentelemetry/exporter-trace-otlp-http": "0.203.0", + "@opentelemetry/exporter-trace-otlp-proto": "0.203.0", + "@opentelemetry/exporter-zipkin": "2.0.1", + "@opentelemetry/instrumentation": "0.203.0", + "@opentelemetry/propagator-b3": "2.0.1", + "@opentelemetry/propagator-jaeger": "2.0.1", + "@opentelemetry/resources": "2.0.1", + "@opentelemetry/sdk-logs": "0.203.0", + "@opentelemetry/sdk-metrics": "2.0.1", + "@opentelemetry/sdk-trace-base": "2.0.1", + "@opentelemetry/sdk-trace-node": "2.0.1", + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "node_modules/@opentelemetry/sdk-trace-base": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", - "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.0.1.tgz", + "integrity": "sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "1.25.1", - "@opentelemetry/resources": "1.25.1", - "@opentelemetry/semantic-conventions": "1.25.1" + "@opentelemetry/core": "2.0.1", + "@opentelemetry/resources": "2.0.1", + "@opentelemetry/semantic-conventions": "^1.29.0" }, "engines": { - "node": ">=14" + "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" + "@opentelemetry/api": ">=1.3.0 <1.10.0" } }, "node_modules/@opentelemetry/sdk-trace-node": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.25.1.tgz", - "integrity": "sha512-nMcjFIKxnFqoez4gUmihdBrbpsEnAX/Xj16sGvZm+guceYE0NE00vLhpDVK6f3q8Q4VFI5xG8JjlXKMB/SkTTQ==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/context-async-hooks": "1.25.1", - "@opentelemetry/core": "1.25.1", - "@opentelemetry/propagator-b3": "1.25.1", - "@opentelemetry/propagator-jaeger": "1.25.1", - "@opentelemetry/sdk-trace-base": "1.25.1", - "semver": "^7.5.2" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-2.0.1.tgz", + "integrity": "sha512-UhdbPF19pMpBtCWYP5lHbTogLWx9N0EBxtdagvkn5YtsAnCBZzL7SjktG+ZmupRgifsHMjwUaCCaVmqGfSADmA==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/context-async-hooks": "2.0.1", + "@opentelemetry/core": "2.0.1", + "@opentelemetry/sdk-trace-base": "2.0.1" }, "engines": { - "node": ">=14" + "node": "^18.19.0 || >=20.6.0" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "node_modules/@opentelemetry/semantic-conventions": { - "version": "1.25.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", - "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.37.0.tgz", + "integrity": "sha512-JD6DerIKdJGmRp4jQyX5FlrQjA4tjOw1cvfsPAZXfOOEErMUHjPcPSICS+6WnM0nB0efSFARh0KAZss+bvExOA==", "license": "Apache-2.0", "engines": { "node": ">=14" @@ -4192,6 +8116,32 @@ "@opentelemetry/api": "^1.1.0" } }, + "node_modules/@opentelemetry/sql-common/node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sql-common/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@parcel/watcher": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", @@ -4838,18 +8788,6 @@ "@safety-web/eslint-plugin": "*" } }, - "node_modules/@safety-web/eslint-formatter/node_modules/@safety-web/types": { - "version": "0.4.0-alpha.14", - "resolved": "https://registry.npmjs.org/@safety-web/types/-/types-0.4.0-alpha.14.tgz", - "integrity": "sha512-2XCyekLZwS6wfc/Tb3rFqq7X1Uodl45UW/l8fvNtGON5/c27fPWfP40Lc8Ghd31oFZBKBXSURNdN63wMLyzw8w==", - "license": "Apache-2.0", - "dependencies": { - "@protobuf-ts/plugin": "^2.9.4" - }, - "engines": { - "node": "^20.11.0 || >21.2.0" - } - }, "node_modules/@safety-web/eslint-plugin": { "version": "0.4.0-alpha.14", "resolved": "https://registry.npmjs.org/@safety-web/eslint-plugin/-/eslint-plugin-0.4.0-alpha.14.tgz", @@ -4952,14 +8890,14 @@ } }, "node_modules/@safety-web/runner": { - "version": "0.4.0-alpha.12", - "resolved": "https://registry.npmjs.org/@safety-web/runner/-/runner-0.4.0-alpha.12.tgz", - "integrity": "sha512-8Ro1yUQhlSzPtAqajN7JHJJas17G4rKelsY1BNVqhRrFUEoqqKrXHISlcsrIZY7cjSWHIbPBMJF2Tec6rg2V+A==", + "version": "0.4.0-alpha.14", + "resolved": "https://registry.npmjs.org/@safety-web/runner/-/runner-0.4.0-alpha.14.tgz", + "integrity": "sha512-I6LKd1Ly6uZGnTXd1V8BNSf4z6XEh4LnURuE9ZZbLDT017JFqOyRKWTY4weUqZSYMScLAUe8PEa9nysvkZqX2g==", "license": "Apache-2.0", "dependencies": { - "@safety-web/eslint-formatter": "^0.4.0-alpha.12", - "@safety-web/eslint-plugin": "^0.4.0-alpha.12", - "@safety-web/types": "^0.4.0-alpha.12", + "@safety-web/eslint-formatter": "^0.4.0-alpha.14", + "@safety-web/eslint-plugin": "^0.4.0-alpha.14", + "@safety-web/types": "^0.4.0-alpha.14", "@typescript-eslint/parser": "^8.41.0", "debug": "^4.3.6", "eslint": "^9.6.0", @@ -4971,19 +8909,7 @@ }, "bin": { "pipeline": "bin/src/pipeline/pipeline.js", - "runner": "bin/src/index.js" - }, - "engines": { - "node": "^20.11.0 || >21.2.0" - } - }, - "node_modules/@safety-web/runner/node_modules/@safety-web/types": { - "version": "0.4.0-alpha.14", - "resolved": "https://registry.npmjs.org/@safety-web/types/-/types-0.4.0-alpha.14.tgz", - "integrity": "sha512-2XCyekLZwS6wfc/Tb3rFqq7X1Uodl45UW/l8fvNtGON5/c27fPWfP40Lc8Ghd31oFZBKBXSURNdN63wMLyzw8w==", - "license": "Apache-2.0", - "dependencies": { - "@protobuf-ts/plugin": "^2.9.4" + "runner": "bin/src/runner_bin.js" }, "engines": { "node": "^20.11.0 || >21.2.0" @@ -5131,9 +9057,9 @@ } }, "node_modules/@safety-web/types": { - "version": "0.4.0-alpha.7", - "resolved": "https://registry.npmjs.org/@safety-web/types/-/types-0.4.0-alpha.7.tgz", - "integrity": "sha512-khiXaD9vy+SJEJlz5SGuPp4U1ZNpOezO9uRrWSFc1+y7StqTz0rT2Rq2/j/H+uGqw7VkOQ7pkz5AHn3VznBCLw==", + "version": "0.4.0-alpha.14", + "resolved": "https://registry.npmjs.org/@safety-web/types/-/types-0.4.0-alpha.14.tgz", + "integrity": "sha512-2XCyekLZwS6wfc/Tb3rFqq7X1Uodl45UW/l8fvNtGON5/c27fPWfP40Lc8Ghd31oFZBKBXSURNdN63wMLyzw8w==", "license": "Apache-2.0", "dependencies": { "@protobuf-ts/plugin": "^2.9.4" @@ -5142,6 +9068,12 @@ "node": "^20.11.0 || >21.2.0" } }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "license": "MIT" + }, "node_modules/@selderee/plugin-htmlparser2": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz", @@ -5155,6 +9087,42 @@ "url": "https://ko-fi.com/killymxi" } }, + "node_modules/@sindresorhus/is": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.1.0.tgz", + "integrity": "sha512-7F/yz2IphV39hiS2zB4QYVkivrptHHh0K8qJJd9HhuWSdvf8AN7NpebW3CcDZDBQsUPMoDKWsY2WWgW7bqOcfA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", + "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.1" + }, + "engines": { + "node": ">=14.16" + } + }, "node_modules/@tokenizer/inflate": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.2.7.tgz", @@ -5202,6 +9170,18 @@ "license": "MIT", "optional": true }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, "node_modules/@types/bunyan": { "version": "1.8.9", "resolved": "https://registry.npmjs.org/@types/bunyan/-/bunyan-1.8.9.tgz", @@ -5259,6 +9239,34 @@ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "license": "MIT" }, + "node_modules/@types/express": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", + "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, "node_modules/@types/glob": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.1.0.tgz", @@ -5293,12 +9301,38 @@ "integrity": "sha512-pUY3cKH/Nm2yYrEmDlPR1mR7yszjGx4DrwPjQ702C4/D5CwHuZTgZdIdwPkRbcuhs7BAh2L5rg3CL5cbRiGTCQ==", "license": "MIT" }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "license": "MIT" + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "license": "MIT" }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.10", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz", + "integrity": "sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/ms": "*", + "@types/node": "*" + } + }, "node_modules/@types/long": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", @@ -5316,12 +9350,28 @@ "@types/node": "*" } }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/@types/minimatch": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", "license": "MIT" }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/@types/mysql": { "version": "2.15.22", "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.22.tgz", @@ -5379,6 +9429,22 @@ "@types/pg": "*" } }, + "node_modules/@types/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/@types/request": { "version": "2.48.13", "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.13.tgz", @@ -5433,6 +9499,31 @@ "node": ">= 0.6" } }, + "node_modules/@types/send": { + "version": "0.17.5", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", + "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.8", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", + "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, "node_modules/@types/shimmer": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.2.0.tgz", @@ -5846,6 +9937,12 @@ "typescript": "*" } }, + "node_modules/@xterm/headless": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@xterm/headless/-/headless-5.5.0.tgz", + "integrity": "sha512-5xXB7kdQlFBP82ViMJTwwEc3gKCLGKR/eoxQm4zge7GPBl86tCdI0IdPJjoKd8mUSFXz5V7i/25sfsEkP4j46g==", + "license": "MIT" + }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -6128,6 +10225,17 @@ "tslib": "^2.4.0" } }, + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "retry": "0.13.1" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -6467,6 +10575,61 @@ "keyv": "^5.5.0" } }, + "node_modules/cacheable-lookup": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", + "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "license": "MIT", + "engines": { + "node": ">=14.16" + } + }, + "node_modules/cacheable-request": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-12.0.1.tgz", + "integrity": "sha512-Yo9wGIQUaAfIbk+qY0X4cDQgCosecfBe3V9NSyeY4qPC2SAkbCS4Xj79VP8WOzitpJUZKc/wsRCYF5ariDIwkg==", + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "^4.0.4", + "get-stream": "^9.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.4", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.1", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cacheable/node_modules/keyv": { "version": "5.5.1", "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.1.tgz", @@ -6526,22 +10689,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cfonts": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/cfonts/-/cfonts-3.3.1.tgz", - "integrity": "sha512-ZGEmN3W9mViWEDjsuPo4nK4h39sfh6YtoneFYp9WLPI/rw8BaSSrfQC6jkrGW3JMvV3ZnExJB/AEqXc/nHYxkw==", - "license": "GPL-3.0-or-later", - "dependencies": { - "supports-color": "^8", - "window-size": "^1" - }, - "bin": { - "cfonts": "bin/index.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/chalk": { "version": "5.6.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", @@ -7177,6 +11324,33 @@ } } }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -7229,6 +11403,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/define-lazy-prop": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", @@ -7241,18 +11424,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "license": "MIT", - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/degenerator": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", @@ -8106,25 +12277,79 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/eventsource": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", - "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", + "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/execa": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.0.tgz", + "integrity": "sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==", + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.6", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.1", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.2.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": "^18.19.0 || >=20.5.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", "license": "MIT", "dependencies": { - "eventsource-parser": "^3.0.1" + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" }, "engines": { - "node": ">=18.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eventsource-parser": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz", - "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", + "node_modules/execa/node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", "license": "MIT", "engines": { - "node": ">=18.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/express": { @@ -8210,6 +12435,17 @@ "@types/yauzl": "^2.9.1" } }, + "node_modules/farmhash-modern": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/farmhash-modern/-/farmhash-modern-1.1.0.tgz", + "integrity": "sha512-6ypT4XfgqJk/F3Yuv4SX26I3doUjt0GTG4a+JgWxXQpxXzTBq8fPUeGHfcYMMDPHJHm3yPOSjaeBwBGAHWXCdA==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -8278,6 +12514,26 @@ ], "license": "BSD-3-Clause" }, + "node_modules/fast-xml-parser": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.3.tgz", + "integrity": "sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "strnum": "^1.1.1" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", @@ -8296,6 +12552,20 @@ "reusify": "^1.0.4" } }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -8459,6 +12729,68 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/firebase-admin": { + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-13.5.0.tgz", + "integrity": "sha512-QZOpv1DJRJpH8NcWiL1xXE10tw3L/bdPFlgjcWrqU3ufyOJDYfxB1MMtxiVTwxK16NlybQbEM6ciSich2uWEIQ==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "@fastify/busboy": "^3.0.0", + "@firebase/database-compat": "^2.0.0", + "@firebase/database-types": "^1.0.6", + "@types/node": "^22.8.7", + "farmhash-modern": "^1.1.0", + "fast-deep-equal": "^3.1.1", + "google-auth-library": "^9.14.2", + "jsonwebtoken": "^9.0.0", + "jwks-rsa": "^3.1.0", + "node-forge": "^1.3.1", + "uuid": "^11.0.2" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@google-cloud/firestore": "^7.11.0", + "@google-cloud/storage": "^7.14.0" + } + }, + "node_modules/firebase-admin/node_modules/@types/node": { + "version": "22.18.6", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.18.6.tgz", + "integrity": "sha512-r8uszLPpeIWbNKtvWRt/DbVi5zbqZyj1PTmhRMqBMvDnaz1QpmSKujUtJLrqGZeoM8v72MfYggDceY4K1itzWQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/firebase-admin/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==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/firebase-admin/node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "optional": true, + "peer": true, + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, "node_modules/flat-cache": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", @@ -8586,6 +12918,12 @@ "node": ">= 0.6" } }, + "node_modules/forwarded-parse": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/forwarded-parse/-/forwarded-parse-2.1.2.tgz", + "integrity": "sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==", + "license": "MIT" + }, "node_modules/fresh": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", @@ -8595,6 +12933,20 @@ "node": ">= 0.8" } }, + "node_modules/fs-extra": { + "version": "11.3.2", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", + "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -8619,6 +12971,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/fzf": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fzf/-/fzf-0.5.2.tgz", @@ -8689,26 +13049,26 @@ } }, "node_modules/genkit": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/genkit/-/genkit-1.19.2.tgz", - "integrity": "sha512-GLTMqAzq8Dw7ECW9m1sqtcM4Y6lVLLQmu5UnZ7wkIR9Sj6iRmmjOV/IJcVluMDqnJ1BdiCTB7DmMxTxmO7ndrw==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/genkit/-/genkit-1.20.0.tgz", + "integrity": "sha512-PqsvZVrwHBsFaJTVtXtblSqJqj/cZYlk09ar7u7whrO2mzn+giFR+tdnnXIGJQZZnfzy7GbyvhFU1h18TLlUYQ==", "license": "Apache-2.0", "dependencies": { - "@genkit-ai/ai": "1.19.2", - "@genkit-ai/core": "1.19.2", + "@genkit-ai/ai": "1.20.0", + "@genkit-ai/core": "1.20.0", "uuid": "^10.0.0" } }, "node_modules/genkitx-anthropic": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/genkitx-anthropic/-/genkitx-anthropic-0.23.1.tgz", - "integrity": "sha512-Fof8RaeGMtdts7+4ij5uF8qxNgQBQwB3TmiYIgW78PvYNlRy2S6xV70f84WSqLR41NCowgQZYfvCRmDo0GNosg==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/genkitx-anthropic/-/genkitx-anthropic-0.25.0.tgz", + "integrity": "sha512-TiI5fA5iXpD2RYqV0+RsS3Y927niL7gSjcNVflNScK74i0mTDMhaHUXaPGEnLTGK5OtS5lWfXnj/Mkqo6n6J3g==", "license": "Apache-2.0", "dependencies": { "@anthropic-ai/sdk": "^0.39.0" }, "peerDependencies": { - "genkit": "^0.9.0 || ^1.0.0" + "genkit": "^1.15.0" } }, "node_modules/genkitx-anthropic/node_modules/@anthropic-ai/sdk": { @@ -9064,6 +13424,103 @@ "node": ">=14" } }, + "node_modules/google-gax/node_modules/@grpc/proto-loader": { + "version": "0.7.15", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz", + "integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.2.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/google-gax/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/google-gax/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/google-gax/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/google-gax/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/google-gax/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT", + "optional": true + }, + "node_modules/google-gax/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT", + "optional": true + }, + "node_modules/google-gax/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, "node_modules/google-gax/node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", @@ -9085,6 +13542,34 @@ } } }, + "node_modules/google-gax/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "optional": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/google-gax/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/google-gax/node_modules/uuid": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", @@ -9095,8 +13580,55 @@ ], "license": "MIT", "optional": true, - "bin": { - "uuid": "dist/bin/uuid" + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/google-gax/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/google-gax/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "optional": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/google-gax/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "optional": true, + "engines": { + "node": ">=12" } }, "node_modules/google-logging-utils": { @@ -9166,11 +13698,39 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gpt-tokenizer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/gpt-tokenizer/-/gpt-tokenizer-3.0.1.tgz", - "integrity": "sha512-5jdaspBq/w4sWw322SvQj1Fku+CN4OAfYZeeEg8U7CWtxBz+zkxZ3h0YOHD43ee+nZYZ5Ud70HRN0ANcdIj4qg==", - "license": "MIT" + "node_modules/got": { + "version": "14.4.9", + "resolved": "https://registry.npmjs.org/got/-/got-14.4.9.tgz", + "integrity": "sha512-Dbu075Jwm3QwNCIoCenqkqY8l2gd7e/TanuhMbzZIEsb1mpAneImSusKhZ+XdqqC3S91SDV/1SdWpGXKAlm8tA==", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^7.0.1", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^12.0.1", + "decompress-response": "^6.0.0", + "form-data-encoder": "^4.0.2", + "http2-wrapper": "^2.2.1", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^4.0.1", + "responselike": "^3.0.0", + "type-fest": "^4.26.1" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/got/node_modules/form-data-encoder": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-4.1.0.tgz", + "integrity": "sha512-G6NsmEW15s0Uw9XnCg+33H3ViYRyiM0hMrMhhqQOR8NFc5GhYrI+6I3u7OTw7b91J2g8rtvMBZJDbcGb2YUniw==", + "license": "MIT", + "engines": { + "node": ">= 18" + } }, "node_modules/graceful-fs": { "version": "4.2.11", @@ -9454,6 +14014,12 @@ "entities": "^4.4.0" } }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", @@ -9479,6 +14045,14 @@ "node": ">= 0.8" } }, + "node_modules/http-parser-js": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/http-proxy-agent": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", @@ -9492,6 +14066,19 @@ "node": ">= 14" } }, + "node_modules/http2-wrapper": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, "node_modules/https-proxy-agent": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", @@ -9505,6 +14092,15 @@ "node": ">= 14" } }, + "node_modules/human-signals": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, "node_modules/humanize-ms": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", @@ -9582,9 +14178,9 @@ } }, "node_modules/import-in-the-middle": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.14.2.tgz", - "integrity": "sha512-5tCuY9BV8ujfOpwtAGgsTx9CGUapcFMEEyByLv1B+v2+6DhAcw+Zr0nhQT7uwaZ7DiourxFEscghOR8e1aPLQw==", + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.14.4.tgz", + "integrity": "sha512-eWjxh735SJLFJJDs5X82JQ2405OdJeAHDBnaoFCfdr5GVc7AWc9xU7KbrF+3Xd5F2ccP1aQFKtY+65X6EfKZ7A==", "license": "Apache-2.0", "dependencies": { "acorn": "^8.14.0", @@ -9685,26 +14281,6 @@ } } }, - "node_modules/ink-big-text": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ink-big-text/-/ink-big-text-2.0.0.tgz", - "integrity": "sha512-Juzqv+rIOLGuhMJiE50VtS6dg6olWfzFdL7wsU/EARSL5Eaa5JNXMogMBm9AkjgzO2Y3UwWCOh87jbhSn8aNdw==", - "license": "MIT", - "dependencies": { - "cfonts": "^3.1.1", - "prop-types": "^15.8.1" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - }, - "peerDependencies": { - "ink": ">=4", - "react": ">=18" - } - }, "node_modules/ink-gradient": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ink-gradient/-/ink-gradient-3.0.0.tgz", @@ -9726,42 +14302,6 @@ "ink": ">=4" } }, - "node_modules/ink-link": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ink-link/-/ink-link-4.1.0.tgz", - "integrity": "sha512-3nNyJXum0FJIKAXBK8qat2jEOM41nJ1J60NRivwgK9Xh92R5UMN/k4vbz0A9xFzhJVrlf4BQEmmxMgXkCE1Jeg==", - "license": "MIT", - "dependencies": { - "prop-types": "^15.8.1", - "terminal-link": "^3.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - }, - "peerDependencies": { - "ink": ">=4" - } - }, - "node_modules/ink-select-input": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ink-select-input/-/ink-select-input-6.2.0.tgz", - "integrity": "sha512-304fZXxkpYxJ9si5lxRCaX01GNlmPBgOZumXXRnPYbHW/iI31cgQynqk2tRypGLOF1cMIwPUzL2LSm6q4I5rQQ==", - "license": "MIT", - "dependencies": { - "figures": "^6.1.0", - "to-rotated": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "ink": ">=5.0.0", - "react": ">=18.0.0" - } - }, "node_modules/ink-spinner": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ink-spinner/-/ink-spinner-5.0.0.tgz", @@ -9819,30 +14359,12 @@ "node": ">= 0.10" } }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", - "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", - "license": "MIT", - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "license": "MIT" }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "license": "MIT" - }, "node_modules/is-core-module": { "version": "2.16.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", @@ -9858,31 +14380,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-data-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", - "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", - "license": "MIT", - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-descriptor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", - "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", - "license": "MIT", - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/is-docker": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", @@ -10026,6 +14523,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", @@ -10126,6 +14635,17 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/jose": { + "version": "4.15.9", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", + "integrity": "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==", + "license": "MIT", + "optional": true, + "peer": true, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -10171,6 +14691,19 @@ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "license": "(AFL-2.1 OR BSD-3-Clause)" }, + "node_modules/json-schema-to-ts": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/json-schema-to-ts/-/json-schema-to-ts-3.1.1.tgz", + "integrity": "sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "ts-algebra": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -10195,6 +14728,67 @@ "node": ">=6" } }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/jwa": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", + "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jsonwebtoken/node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/jwa": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", @@ -10206,6 +14800,32 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/jwks-rsa": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-3.2.0.tgz", + "integrity": "sha512-PwchfHcQK/5PSydeKCs1ylNym0w/SSv8a62DgHJ//7x2ZclCoinlsjAfDxAAbpoTPybOum/Jgy+vkvMmKz89Ww==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@types/express": "^4.17.20", + "@types/jsonwebtoken": "^9.0.4", + "debug": "^4.3.4", + "jose": "^4.15.4", + "limiter": "^1.1.5", + "lru-memoizer": "^2.2.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/jwks-rsa/node_modules/limiter": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", + "optional": true, + "peer": true + }, "node_modules/jws": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", @@ -10328,6 +14948,62 @@ "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", "license": "MIT" }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/lodash.mapvalues": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", @@ -10341,6 +15017,14 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "license": "MIT" }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", @@ -10382,6 +15066,18 @@ "loose-envify": "cli.js" } }, + "node_modules/lowercase-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", + "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/lowlight": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-3.3.0.tgz", @@ -10397,6 +15093,32 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", + "optional": true, + "peer": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/lru-memoizer": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.3.0.tgz", + "integrity": "sha512-GXn7gyHAMhO13WSKrIiNfztwxodVsP8IoZ3XfrJV4yH2x0/OeTO/FIaAHTY5YekdGgW94njfuKmyyt1E0mR6Ug==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "lodash.clonedeep": "^4.5.0", + "lru-cache": "6.0.0" + } + }, "node_modules/marked": { "version": "16.3.0", "resolved": "https://registry.npmjs.org/marked/-/marked-16.3.0.tgz", @@ -10510,6 +15232,21 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/mime": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.7.tgz", + "integrity": "sha512-2OfDPL+e03E0LrXaGYOtTFIYhiuzep94NSsuhrNULq+stylcJedcHdzHtz0atMUuGwJfFYs0YL5xeC/Ca2x0eQ==", + "funding": [ + "https://github.com/sponsors/broofa" + ], + "license": "MIT", + "bin": { + "mime": "bin/cli.js" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/mime-db": { "version": "1.54.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", @@ -10540,6 +15277,18 @@ "node": ">=6" } }, + "node_modules/mimic-response": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", + "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -10609,6 +15358,13 @@ "node": "^18.17.0 || >=20.5.0" } }, + "node_modules/nan": { + "version": "2.23.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.23.0.tgz", + "integrity": "sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==", + "license": "MIT", + "optional": true + }, "node_modules/nanoid": { "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", @@ -10702,12 +15458,34 @@ "url": "https://opencollective.com/node-fetch" } }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "optional": true, + "peer": true, + "engines": { + "node": ">= 6.13.0" + } + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", "license": "MIT" }, + "node_modules/node-pty": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-pty/-/node-pty-1.0.0.tgz", + "integrity": "sha512-wtBMWWS7dFZm/VgqElrTvtfMq4GzJ6+edFI0Y0zyzygUSZMgZdraDUMUhCIvkjhJjme15qWmbyJbtAx4ot4uZA==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "nan": "^2.17.0" + } + }, "node_modules/normalize-package-data": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", @@ -10731,6 +15509,58 @@ "node": ">=0.10.0" } }, + "node_modules/normalize-url": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.0.tgz", + "integrity": "sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -10934,6 +15764,15 @@ "node": ">= 0.8.0" } }, + "node_modules/p-cancelable": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-4.0.1.tgz", + "integrity": "sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -11078,6 +15917,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/parse5": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", @@ -11484,6 +16335,21 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, + "node_modules/pretty-ms": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz", + "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==", + "license": "MIT", + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/process": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/process/-/process-0.10.1.tgz", @@ -11722,6 +16588,18 @@ ], "license": "MIT" }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -11959,6 +16837,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "license": "MIT" + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -11978,6 +16862,21 @@ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, + "node_modules/responselike": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", + "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "license": "MIT", + "dependencies": { + "lowercase-keys": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/restore-cursor": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", @@ -12000,6 +16899,17 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "license": "ISC" }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">= 4" + } + }, "node_modules/retry-request": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-7.0.2.tgz", @@ -12668,6 +17578,18 @@ "node": ">=8" } }, + "node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -12680,6 +17602,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strnum": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", + "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "optional": true, + "peer": true + }, "node_modules/strtok3": { "version": "10.3.4", "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.4.tgz", @@ -12771,9 +17707,9 @@ } }, "node_modules/stylelint-config-recommended": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-16.0.0.tgz", - "integrity": "sha512-4RSmPjQegF34wNcK1e1O3Uz91HN8P1aFdFzio90wNK9mjgAI19u5vsU868cVZboKzCaa5XbpvtTzAAGQAxpcXA==", + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-17.0.0.tgz", + "integrity": "sha512-WaMSdEiPfZTSFVoYmJbxorJfA610O0tlYuU2aEwY33UQhSPgFbClrVJYWvy3jGJx+XW37O+LyNLiZOEXhKhJmA==", "funding": [ { "type": "opencollective", @@ -12789,25 +17725,25 @@ "node": ">=18.12.0" }, "peerDependencies": { - "stylelint": "^16.16.0" + "stylelint": "^16.23.0" } }, "node_modules/stylelint-config-recommended-scss": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-15.0.1.tgz", - "integrity": "sha512-V24bxkNkFGggqPVJlP9iXaBabwSGEG7QTz+PyxrRtjPkcF+/NsWtB3tKYvFYEmczRkWiIEfuFMhGpJFj9Fxe6Q==", + "version": "16.0.2", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-16.0.2.tgz", + "integrity": "sha512-aUTHhPPWCvFyWaxtckJlCPaXTDFsp4pKO8evXNCsW9OwsaUWyMd6jvcUhSmfGWPrTddvzNqK4rS/UuSLcbVGdQ==", "license": "MIT", "dependencies": { "postcss-scss": "^4.0.9", - "stylelint-config-recommended": "^16.0.0", - "stylelint-scss": "^6.12.0" + "stylelint-config-recommended": "^17.0.0", + "stylelint-scss": "^6.12.1" }, "engines": { "node": ">=20" }, "peerDependencies": { "postcss": "^8.3.3", - "stylelint": "^16.16.0" + "stylelint": "^16.24.0" }, "peerDependenciesMeta": { "postcss": { @@ -12934,21 +17870,6 @@ "node": ">=8" } }, - "node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "node_modules/supports-hyperlinks": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", @@ -13229,74 +18150,6 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/terminal-link": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-3.0.0.tgz", - "integrity": "sha512-flFL3m4wuixmf6IfhFJd1YPiLiMuxEc8uHRM1buzIeZPm22Au2pDqBJQgdo7n1WfPU1ONFGv7YDwpFBmHGF6lg==", - "license": "MIT", - "dependencies": { - "ansi-escapes": "^5.0.0", - "supports-hyperlinks": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link/node_modules/ansi-escapes": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", - "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", - "license": "MIT", - "dependencies": { - "type-fest": "^1.0.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terminal-link/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/terminal-link/node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/terminal-link/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/text-decoder": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", @@ -13337,6 +18190,12 @@ "node": ">=0.6" } }, + "node_modules/tiktoken": { + "version": "1.0.22", + "resolved": "https://registry.npmjs.org/tiktoken/-/tiktoken-1.0.22.tgz", + "integrity": "sha512-PKvy1rVF1RibfF3JlXBSP0Jrcw2uq3yXdgcEXtKTYn3QJ/cBRBHDnrJ5jHky+MENZ6DIPwNUGWpkVx+7joCpNA==", + "license": "MIT" + }, "node_modules/tinycolor2": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", @@ -13381,18 +18240,6 @@ "node": ">=8.0" } }, - "node_modules/to-rotated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-rotated/-/to-rotated-1.0.0.tgz", - "integrity": "sha512-KsEID8AfgUy+pxVRLsWp0VzCa69wxzUDZnzGbyIST/bcgcrMvTYoFBX/QORH4YApoD89EDuUovx4BTdpOn319Q==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -13435,6 +18282,12 @@ "node": ">= 14.0.0" } }, + "node_modules/ts-algebra": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ts-algebra/-/ts-algebra-2.0.0.tgz", + "integrity": "sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==", + "license": "MIT" + }, "node_modules/ts-api-utils": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", @@ -13626,6 +18479,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", @@ -13764,6 +18626,33 @@ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "license": "BSD-2-Clause" }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/whatwg-encoding": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", @@ -13843,46 +18732,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/window-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-1.1.1.tgz", - "integrity": "sha512-5D/9vujkmVQ7pSmc0SCBmHXbkv6eaHwXEx65MywhmUMsI8sGqJ972APq1lotfcwMKPFLuCFfL8xGHLIp7jaBmA==", - "license": "MIT", - "dependencies": { - "define-property": "^1.0.0", - "is-number": "^3.0.0" - }, - "bin": { - "window-size": "cli.js" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/window-size/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "license": "MIT", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/window-size/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "license": "MIT", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/winston": { "version": "3.17.0", "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", @@ -14223,6 +19072,14 @@ "node": ">=10" } }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC", + "optional": true, + "peer": true + }, "node_modules/yaml": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", @@ -14283,6 +19140,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/yoctocolors-cjs": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", diff --git a/package.json b/package.json index 12a0c2d7..af858a3d 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ "wcs": "./runner/bin/cli.js" }, "dependencies": { + "@anthropic-ai/claude-code": "^1.0.128", "@anthropic-ai/sdk": "^0.63.0", "@axe-core/puppeteer": "^4.10.2", "@genkit-ai/compat-oai": "^1.19.1", @@ -58,6 +59,7 @@ "@genkit-ai/mcp": "1.19.3", "@google/gemini-cli": "^0.5.0", "@google/genai": "1.20.0", + "@openai/codex": "^0.42.0", "@inquirer/prompts": "^7.8.4", "@safety-web/runner": "0.4.0-alpha.14", "@safety-web/types": "0.4.0-alpha.14", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ab2e5b73..dccd3ffb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: dependencies: + '@anthropic-ai/claude-code': + specifier: ^1.0.128 + version: 1.0.128 '@anthropic-ai/sdk': specifier: ^0.63.0 version: 0.63.0(zod@3.25.76) @@ -32,6 +35,9 @@ importers: '@inquirer/prompts': specifier: ^7.8.4 version: 7.8.4(@types/node@24.3.1) + '@openai/codex': + specifier: ^0.42.0 + version: 0.42.0 '@safety-web/runner': specifier: 0.4.0-alpha.14 version: 0.4.0-alpha.14(typescript@5.9.2) @@ -456,6 +462,11 @@ packages: '@angular/platform-server': optional: true + '@anthropic-ai/claude-code@1.0.128': + resolution: {integrity: sha512-uUg5cFMJfeQetQzFw76Vpbro6DAXst2Lpu8aoZWRFSoQVYu5ZSAnbBoxaWmW/IgnHSqIIvtMwzCoqmcA9j9rNQ==} + engines: {node: '>=18.0.0'} + hasBin: true + '@anthropic-ai/sdk@0.39.0': resolution: {integrity: sha512-eMyDIPRZbt1CCLErRCi3exlAvNkBtRe+kW5vvJyef93PmNr/clstYgHhtvmkxN82nlKgzyGPCyGxrm0JQ1ZIdg==} @@ -1000,6 +1011,73 @@ packages: '@iarna/toml@2.2.5': resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} + '@img/sharp-darwin-arm64@0.33.5': + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.33.5': + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.0.4': + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.0.4': + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.0.4': + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-arm@1.0.5': + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-libvips-linux-x64@1.0.4': + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-arm64@0.33.5': + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-arm@0.33.5': + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + libc: [glibc] + + '@img/sharp-linux-x64@0.33.5': + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@img/sharp-win32-x64@0.33.5': + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + '@inquirer/checkbox@4.2.2': resolution: {integrity: sha512-E+KExNurKcUJJdxmjglTl141EwxWyAHplvsYJQgSwXf8qiNWkTxTuCCqmhFEmbIXd4zLaGMfQFJ6WrZ7fSeV3g==} engines: {node: '>=18'} @@ -1480,6 +1558,11 @@ packages: resolution: {integrity: sha512-aoNSbxtkePXUlbZB+anS1LqsJdctG5n3UVhfU47+CDdwMi6uNTBMF9gPcQRnqghQd2FGzcwwIFBruFMxjhBewg==} engines: {node: ^18.17.0 || >=20.5.0} + '@openai/codex@0.42.0': + resolution: {integrity: sha512-jLpMrQuq1gIBzBKbKMwAzXOh+5uwE+ht3RHUb2Ov7P50fjAxPKDZa0+zpqkhHTspm8Rw6Vdrm4I4L+Z03usCkg==} + engines: {node: '>=20'} + hasBin: true + '@opentelemetry/api-logs@0.203.0': resolution: {integrity: sha512-9B9RU0H7Ya1Dx/Rkyc4stuBZSGVQF27WigitInx2QQoj6KUpEFYPKoWjdFTunJYxmXmh17HeBvbMa1EhGyPmqQ==} engines: {node: '>=8.0.0'} @@ -6817,6 +6900,15 @@ snapshots: optionalDependencies: '@angular/platform-server': 20.2.4(@angular/common@20.2.4(@angular/core@20.2.4(@angular/compiler@20.2.4)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/compiler@20.2.4)(@angular/core@20.2.4(@angular/compiler@20.2.4)(rxjs@7.8.2)(zone.js@0.15.1))(@angular/platform-browser@20.2.4(@angular/common@20.2.4(@angular/core@20.2.4(@angular/compiler@20.2.4)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@20.2.4(@angular/compiler@20.2.4)(rxjs@7.8.2)(zone.js@0.15.1)))(rxjs@7.8.2) + '@anthropic-ai/claude-code@1.0.128': + optionalDependencies: + '@img/sharp-darwin-arm64': 0.33.5 + '@img/sharp-darwin-x64': 0.33.5 + '@img/sharp-linux-arm': 0.33.5 + '@img/sharp-linux-arm64': 0.33.5 + '@img/sharp-linux-x64': 0.33.5 + '@img/sharp-win32-x64': 0.33.5 + '@anthropic-ai/sdk@0.39.0(encoding@0.1.13)': dependencies: '@types/node': 18.19.124 @@ -7606,6 +7698,49 @@ snapshots: '@iarna/toml@2.2.5': {} + '@img/sharp-darwin-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.0.4 + optional: true + + '@img/sharp-darwin-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.0.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.0.5': + optional: true + + '@img/sharp-libvips-linux-x64@1.0.4': + optional: true + + '@img/sharp-linux-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.0.4 + optional: true + + '@img/sharp-linux-arm@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.0.5 + optional: true + + '@img/sharp-linux-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.0.4 + optional: true + + '@img/sharp-win32-x64@0.33.5': + optional: true + '@inquirer/checkbox@4.2.2(@types/node@24.3.1)': dependencies: '@inquirer/core': 10.2.0(@types/node@24.3.1) @@ -8076,6 +8211,8 @@ snapshots: transitivePeerDependencies: - supports-color + '@openai/codex@0.42.0': {} + '@opentelemetry/api-logs@0.203.0': dependencies: '@opentelemetry/api': 1.9.0 diff --git a/report-app/src/app/shared/provider-label.ts b/report-app/src/app/shared/provider-label.ts index 62b84c65..c5d4dae4 100644 --- a/report-app/src/app/shared/provider-label.ts +++ b/report-app/src/app/shared/provider-label.ts @@ -7,6 +7,8 @@ const exactMatches: Record = { vue: 'frameworks/vue.svg', solid: 'frameworks/solid.svg', 'gemini-cli': 'gemini.webp', + 'codex-cli': 'open-ai.png', + 'claude-code-cli': 'claude.png', genkit: 'genkit.png', }; diff --git a/runner/codegen/claude-code-cli/claude-code-cli-runner.ts b/runner/codegen/claude-code-cli/claude-code-cli-runner.ts new file mode 100644 index 00000000..48cfd17f --- /dev/null +++ b/runner/codegen/claude-code-cli/claude-code-cli-runner.ts @@ -0,0 +1,277 @@ +import { ChildProcess, spawn } from 'child_process'; +import assert from 'assert'; +import { existsSync } from 'fs'; +import { mkdtemp, rm } from 'fs/promises'; +import { join, relative } from 'path'; +import { tmpdir } from 'os'; +import { + LlmConstrainedOutputGenerateResponse, + LlmGenerateFilesRequestOptions, + LlmGenerateFilesResponse, + LlmGenerateTextResponse, + LlmRunner, +} from '../llm-runner.js'; +import { UserFacingError } from '../../utils/errors.js'; +import { DirectorySnapshot } from '../gemini-cli/directory-snapshot.js'; +import { getClaudeAutomationPrompt } from './claude-code-files.js'; +import { LlmResponseFile } from '../../shared-interfaces.js'; + +const DEFAULT_INACTIVITY_TIMEOUT_MINS = 2; +const DEFAULT_TOTAL_TIMEOUT_MINS = 15; + +/** Runner that generates code using the Claude Code CLI. */ +export class ClaudeCodeCliRunner implements LlmRunner { + readonly id = 'claude-code-cli'; + readonly displayName = 'Claude Code CLI'; + readonly hasBuiltInRepairLoop = true; + + private readonly pendingTimeouts = new Set>(); + private readonly pendingProcesses = new Set(); + private readonly binaryPath = this.resolveBinaryPath(); + private readonly evalIgnoredPatterns = [ + '**/node_modules/**', + '**/.claude/**', + '**/.anthropic/**', + '**/.cache/**', + '**/.claude-code/**', + ]; + + async generateFiles( + options: LlmGenerateFilesRequestOptions + ): Promise { + const { context, model } = options; + + assert( + context.buildCommand, + 'Expected a `buildCommand` to be set when using the Claude Code CLI runner' + ); + assert( + context.packageManager, + 'Expected a `packageManager` to be set when using the Claude Code CLI runner' + ); + + const automationPrompt = getClaudeAutomationPrompt( + context.systemInstructions, + context.buildCommand, + context.packageManager + ); + + const initialSnapshot = await DirectorySnapshot.forDirectory( + context.directory, + this.evalIgnoredPatterns + ); + + const claudeHome = await mkdtemp(join(tmpdir(), 'claude-code-runner-')); + let runOutput: { stdout: string } | null = null; + + try { + runOutput = await this.runClaudeProcess( + model, + context, + automationPrompt, + claudeHome + ); + } finally { + await rm(claudeHome, { recursive: true, force: true }); + } + + const finalSnapshot = await DirectorySnapshot.forDirectory( + context.directory, + this.evalIgnoredPatterns + ); + const diff = finalSnapshot.getChangedOrAddedFiles(initialSnapshot); + const files: LlmResponseFile[] = []; + + for (const [absolutePath, code] of diff) { + files.push({ + filePath: relative(context.directory, absolutePath), + code, + }); + } + + const reasoning = runOutput?.stdout.trim() ?? ''; + + return { files, reasoning, toolLogs: [] }; + } + + generateText(): Promise { + throw new UserFacingError( + 'Generating text with Claude Code CLI is not supported.' + ); + } + + generateConstrained(): Promise< + LlmConstrainedOutputGenerateResponse + > { + throw new UserFacingError( + 'Constrained output with Claude Code CLI is not supported.' + ); + } + + getSupportedModels(): string[] { + return []; + } + + async dispose(): Promise { + for (const timeout of this.pendingTimeouts) { + clearTimeout(timeout); + } + + for (const childProcess of this.pendingProcesses) { + childProcess.kill('SIGKILL'); + } + + this.pendingTimeouts.clear(); + this.pendingProcesses.clear(); + } + + private resolveBinaryPath(): string { + let dir = import.meta.dirname; + let closestRoot: string | null = null; + + while (dir.length > 1) { + if (existsSync(join(dir, 'node_modules'))) { + closestRoot = dir; + break; + } + + const parent = join(dir, '..'); + + if (parent === dir) { + break; + } + + dir = parent; + } + + const binaryPath = closestRoot + ? join(closestRoot, 'node_modules/.bin/claude') + : null; + + if (!binaryPath || !existsSync(binaryPath)) { + throw new UserFacingError('Claude Code CLI is not installed in this project'); + } + + return binaryPath; + } + + private runClaudeProcess( + model: string, + context: LlmGenerateFilesRequestOptions['context'], + automationPrompt: string, + claudeHome: string + ): Promise<{ stdout: string }> { + return new Promise((resolve) => { + let stdoutBuffer = ''; + let stderrBuffer = ''; + let isDone = false; + const msPerMin = 60_000; + let inactivityTimeout: ReturnType | null = null; + let globalTimeout: ReturnType | null = null; + let childProcess: ChildProcess | null = null; + + const finalize = (finalMessage: string) => { + if (isDone) { + return; + } + + isDone = true; + + if (inactivityTimeout) { + clearTimeout(inactivityTimeout); + this.pendingTimeouts.delete(inactivityTimeout); + } + + if (globalTimeout) { + clearTimeout(globalTimeout); + this.pendingTimeouts.delete(globalTimeout); + } + + if (childProcess) { + childProcess.kill('SIGKILL'); + this.pendingProcesses.delete(childProcess); + } + + if (stderrBuffer.length > 0) { + stdoutBuffer += `\n----- stderr -----\n${stderrBuffer}`; + } + + stdoutBuffer += `\n${finalMessage}`; + + resolve({ stdout: stdoutBuffer }); + }; + + const refreshInactivityTimer = () => { + if (inactivityTimeout) { + clearTimeout(inactivityTimeout); + this.pendingTimeouts.delete(inactivityTimeout); + } + + inactivityTimeout = setTimeout(() => { + finalize( + `Claude Code CLI produced no output for ${DEFAULT_INACTIVITY_TIMEOUT_MINS} minute(s). Stopping the process...` + ); + }, DEFAULT_INACTIVITY_TIMEOUT_MINS * msPerMin); + this.pendingTimeouts.add(inactivityTimeout); + }; + + refreshInactivityTimer(); + + globalTimeout = setTimeout(() => { + finalize( + `Claude Code CLI did not finish within ${DEFAULT_TOTAL_TIMEOUT_MINS} minute(s). Stopping the process...` + ); + }, DEFAULT_TOTAL_TIMEOUT_MINS * msPerMin); + this.pendingTimeouts.add(globalTimeout); + + const args = [ + '--print', + '--output-format', + 'text', + '--permission-mode', + 'bypassPermissions', + '--dangerously-skip-permissions', + '--model', + model, + '--append-system-prompt', + automationPrompt, + context.executablePrompt, + ]; + + const spawnedProcess = spawn(this.binaryPath, args, { + cwd: context.directory, + env: { + ...process.env, + FORCE_COLOR: '0', + NO_COLOR: '1', + CLAUDE_CODE_DISABLE_AUTOUPDATE: '1', + CLAUDE_CODE_DATA_DIR: claudeHome, + }, + }); + + childProcess = spawnedProcess; + this.pendingProcesses.add(spawnedProcess); + + spawnedProcess.stdout.on('data', (data) => { + stdoutBuffer += data.toString(); + refreshInactivityTimer(); + }); + + spawnedProcess.stderr.on('data', (data) => { + stderrBuffer += data.toString(); + }); + + spawnedProcess.on('close', (code) => { + finalize( + code == null + ? 'Claude Code CLI process has exited.' + : `Claude Code CLI process exited with code ${code}.` + ); + }); + + spawnedProcess.on('error', (err) => { + finalize(`Failed to run Claude Code CLI: ${err.message}`); + }); + }); + } +} diff --git a/runner/codegen/claude-code-cli/claude-code-files.ts b/runner/codegen/claude-code-cli/claude-code-files.ts new file mode 100644 index 00000000..c8dbeabd --- /dev/null +++ b/runner/codegen/claude-code-cli/claude-code-files.ts @@ -0,0 +1,21 @@ +export function getClaudeAutomationPrompt( + systemInstructions: string, + buildCommand: string, + packageManager: string +): string { + const trimmedInstructions = systemInstructions.trim(); + return [ + 'You are operating inside a fully automated evaluation harness. Follow these rules carefully:', + '- Do NOT install new dependencies. Assume everything you need is already present.', + '- Do NOT run git or interact with version control.', + '- Avoid refactoring or reorganizing files unless explicitly requested.', + '- Do NOT delete existing files unless the task explicitly asks for it.', + `- Use the provided build verification command (\`${buildCommand}\`) to validate your work. Do not start long-running dev servers.`, + `- When running scripts, always use the \`${packageManager}\` package manager. Do not run install, add, update, or remove commands.`, + '- Stop once the requested changes are complete and validated.', + '', + trimmedInstructions.length ? trimmedInstructions : undefined, + ] + .filter((line): line is string => !!line && line.length > 0) + .join('\n'); +} diff --git a/runner/codegen/codex-cli/codex-cli-runner.ts b/runner/codegen/codex-cli/codex-cli-runner.ts new file mode 100644 index 00000000..0dfe9464 --- /dev/null +++ b/runner/codegen/codex-cli/codex-cli-runner.ts @@ -0,0 +1,310 @@ +import { ChildProcess, spawn } from 'child_process'; +import assert from 'assert'; +import { existsSync } from 'fs'; +import { mkdtemp, readFile, rm, writeFile } from 'fs/promises'; +import { join, relative } from 'path'; +import { tmpdir } from 'os'; +import { + LlmConstrainedOutputGenerateResponse, + LlmGenerateFilesRequestOptions, + LlmGenerateFilesResponse, + LlmGenerateTextResponse, + LlmRunner, +} from '../llm-runner.js'; +import { UserFacingError } from '../../utils/errors.js'; +import { DirectorySnapshot } from '../gemini-cli/directory-snapshot.js'; +import { getCodexAgentsFile } from './codex-files.js'; +import { LlmResponseFile } from '../../shared-interfaces.js'; + +const DEFAULT_INACTIVITY_TIMEOUT_MINS = 2; +const DEFAULT_TOTAL_TIMEOUT_MINS = 15; + +/** Runner that generates code using the Codex CLI. */ +export class CodexCliRunner implements LlmRunner { + readonly id = 'codex-cli'; + readonly displayName = 'Codex CLI'; + readonly hasBuiltInRepairLoop = true; + + private readonly pendingTimeouts = new Set>(); + private readonly pendingProcesses = new Set(); + private readonly binaryPath = this.resolveBinaryPath(); + private readonly evalIgnoredPatterns = [ + '**/node_modules/**', + '**/.codex/**', + '**/.codex-cache/**', + '**/AGENTS.md', + '**/.codex-last-message.txt', + ]; + + async generateFiles( + options: LlmGenerateFilesRequestOptions + ): Promise { + const { context, model } = options; + + assert( + context.buildCommand, + 'Expected a `buildCommand` to be set when using the Codex CLI runner' + ); + assert( + context.packageManager, + 'Expected a `packageManager` to be set when using the Codex CLI runner' + ); + + const instructionsPath = join(context.directory, 'AGENTS.md'); + const lastMessagePath = join(context.directory, '.codex-last-message.txt'); + const codexHome = await mkdtemp(join(tmpdir(), 'codex-runner-')); + const initialAgentsContent = existsSync(instructionsPath) + ? await readFile(instructionsPath, 'utf8') + : null; + const instructionsContent = initialAgentsContent + ? `${initialAgentsContent.trimEnd()}\n\n${getCodexAgentsFile( + context.systemInstructions, + context.buildCommand, + context.packageManager + )}\n` + : getCodexAgentsFile( + context.systemInstructions, + context.buildCommand, + context.packageManager + ); + + await writeFile(instructionsPath, instructionsContent, 'utf8'); + + const initialSnapshot = await DirectorySnapshot.forDirectory( + context.directory, + this.evalIgnoredPatterns + ); + + let runOutput: { reasoning: string | null; stdout: string } | null = null; + + try { + runOutput = await this.runCodexProcess( + model, + context, + lastMessagePath, + codexHome + ); + } finally { + if (initialAgentsContent === null) { + await rm(instructionsPath, { force: true }); + } else { + await writeFile(instructionsPath, initialAgentsContent, 'utf8'); + } + + await rm(lastMessagePath, { force: true }); + await rm(codexHome, { recursive: true, force: true }); + } + + const finalSnapshot = await DirectorySnapshot.forDirectory( + context.directory, + this.evalIgnoredPatterns + ); + const diff = finalSnapshot.getChangedOrAddedFiles(initialSnapshot); + const files: LlmResponseFile[] = []; + + for (const [absolutePath, code] of diff) { + const relativePath = relative(context.directory, absolutePath); + + if (relativePath === 'AGENTS.md' || relativePath === '.codex-last-message.txt') { + continue; + } + + files.push({ filePath: relativePath, code }); + } + + const reasoning = + runOutput?.reasoning && runOutput.reasoning.trim().length + ? runOutput.reasoning.trim() + : runOutput?.stdout ?? ''; + + return { files, reasoning, toolLogs: [] }; + } + + generateText(): Promise { + throw new UserFacingError( + 'Generating text with Codex CLI is not supported.' + ); + } + + generateConstrained(): Promise< + LlmConstrainedOutputGenerateResponse + > { + throw new UserFacingError( + 'Constrained output with Codex CLI is not supported.' + ); + } + + getSupportedModels(): string[] { + return []; + } + + async dispose(): Promise { + for (const timeout of this.pendingTimeouts) { + clearTimeout(timeout); + } + + for (const childProcess of this.pendingProcesses) { + childProcess.kill('SIGKILL'); + } + + this.pendingTimeouts.clear(); + this.pendingProcesses.clear(); + } + + private resolveBinaryPath(): string { + let dir = import.meta.dirname; + let closestRoot: string | null = null; + + while (dir.length > 1) { + if (existsSync(join(dir, 'node_modules'))) { + closestRoot = dir; + break; + } + + const parent = join(dir, '..'); + + if (parent === dir) { + break; + } + + dir = parent; + } + + const binaryPath = closestRoot + ? join(closestRoot, 'node_modules/.bin/codex') + : null; + + if (!binaryPath || !existsSync(binaryPath)) { + throw new UserFacingError('Codex CLI is not installed in this project'); + } + + return binaryPath; + } + + private runCodexProcess( + model: string, + context: LlmGenerateFilesRequestOptions['context'], + lastMessagePath: string, + codexHome: string + ): Promise<{ stdout: string; reasoning: string | null }> { + return new Promise((resolve) => { + let stdoutBuffer = ''; + let stderrBuffer = ''; + let isDone = false; + const msPerMin = 60_000; + let inactivityTimeout: ReturnType | null = null; + let globalTimeout: ReturnType | null = null; + let childProcess: ChildProcess | null = null; + + const finalize = async (finalMessage: string) => { + if (isDone) { + return; + } + + isDone = true; + + if (inactivityTimeout) { + clearTimeout(inactivityTimeout); + this.pendingTimeouts.delete(inactivityTimeout); + } + + if (globalTimeout) { + clearTimeout(globalTimeout); + this.pendingTimeouts.delete(globalTimeout); + } + + if (childProcess) { + childProcess.kill('SIGKILL'); + this.pendingProcesses.delete(childProcess); + } + + if (stderrBuffer.length > 0) { + stdoutBuffer += `\n----- stderr -----\n${stderrBuffer}`; + } + + stdoutBuffer += `\n${finalMessage}`; + + let reasoning: string | null = null; + + try { + const lastMessage = await readFile(lastMessagePath, 'utf8'); + reasoning = lastMessage.trim() || null; + } catch { + reasoning = null; + } + + resolve({ stdout: stdoutBuffer, reasoning }); + }; + + const refreshInactivityTimer = () => { + if (inactivityTimeout) { + clearTimeout(inactivityTimeout); + this.pendingTimeouts.delete(inactivityTimeout); + } + + inactivityTimeout = setTimeout(() => { + finalize( + `Codex CLI produced no output for ${DEFAULT_INACTIVITY_TIMEOUT_MINS} minute(s). Stopping the process...` + ); + }, DEFAULT_INACTIVITY_TIMEOUT_MINS * msPerMin); + this.pendingTimeouts.add(inactivityTimeout); + }; + + refreshInactivityTimer(); + + globalTimeout = setTimeout(() => { + finalize( + `Codex CLI did not finish within ${DEFAULT_TOTAL_TIMEOUT_MINS} minute(s). Stopping the process...` + ); + }, DEFAULT_TOTAL_TIMEOUT_MINS * msPerMin); + this.pendingTimeouts.add(globalTimeout); + + const args = [ + 'exec', + context.executablePrompt, + '--model', + model, + '--sandbox', + 'workspace-write', + '--full-auto', + '--skip-git-repo-check', + '--output-last-message', + lastMessagePath, + ]; + + const spawnedProcess = spawn(this.binaryPath, args, { + cwd: context.directory, + env: { + ...process.env, + CODEX_HOME: codexHome, + FORCE_COLOR: '0', + NO_COLOR: '1', + }, + }); + + childProcess = spawnedProcess; + this.pendingProcesses.add(spawnedProcess); + + spawnedProcess.stdout.on('data', (data) => { + stdoutBuffer += data.toString(); + refreshInactivityTimer(); + }); + + spawnedProcess.stderr.on('data', (data) => { + stderrBuffer += data.toString(); + }); + + spawnedProcess.on('close', (code) => { + finalize( + code == null + ? 'Codex CLI process has exited.' + : `Codex CLI process exited with code ${code}.` + ); + }); + + spawnedProcess.on('error', (err) => { + finalize(`Failed to run Codex CLI: ${err.message}`); + }); + }); + } +} diff --git a/runner/codegen/codex-cli/codex-files.ts b/runner/codegen/codex-cli/codex-files.ts new file mode 100644 index 00000000..ed09a72c --- /dev/null +++ b/runner/codegen/codex-cli/codex-files.ts @@ -0,0 +1,26 @@ +export function getCodexAgentsFile( + systemInstructions: string, + buildCommand: string, + packageManager: string +): string { + const trimmedInstructions = systemInstructions.trim(); + return [ + '# Automation Instructions', + 'You are running inside an automated evaluation harness. You must follow these rules exactly:', + '- Do NOT install new dependencies. Assume everything you need is already available.', + '- Do NOT attempt to reformat, refactor, or otherwise improve unrelated code.', + '- Do NOT delete or rename existing files unless explicitly instructed.', + '- Use the provided package manager only for running existing scripts. Do not run install/update/remove commands.', + `- Use the \`${buildCommand}\` command to verify your work instead of starting a dev server.`, + '- Do NOT use git or other version control tools.', + '- Stop once you have completed the requested task.', + '', + 'Project-specific guidelines:', + `- Package manager to use for scripts: ${packageManager}.`, + `- Build verification command: ${buildCommand}.`, + '', + trimmedInstructions.length ? trimmedInstructions : undefined, + ] + .filter((line): line is string => !!line && line.length > 0) + .join('\n'); +} diff --git a/runner/codegen/llm-runner.ts b/runner/codegen/llm-runner.ts index 69a72051..bfde9164 100644 --- a/runner/codegen/llm-runner.ts +++ b/runner/codegen/llm-runner.ts @@ -3,6 +3,10 @@ import { LlmResponseFile, ToolLogEntry, Usage } from '../shared-interfaces.js'; import { UserFacingError } from '../utils/errors.js'; export function assertValidModelName(value: string, availableModels: string[]) { + if (availableModels.length === 0) { + return; + } + if (!availableModels.includes(value)) { throw new UserFacingError( `Unsupported model specified. Available models:\n` + diff --git a/runner/codegen/runner-creation.ts b/runner/codegen/runner-creation.ts index 8d787164..3f889774 100644 --- a/runner/codegen/runner-creation.ts +++ b/runner/codegen/runner-creation.ts @@ -1,10 +1,14 @@ import { UserFacingError } from '../utils/errors.js'; import type { GeminiCliRunner } from './gemini-cli/gemini-cli-runner.js'; import type { GenkitRunner } from './genkit/genkit-runner.js'; +import type { CodexCliRunner } from './codex-cli/codex-cli-runner.js'; +import type { ClaudeCodeCliRunner } from './claude-code-cli/claude-code-cli-runner.js'; interface AvailableRunners { genkit: GenkitRunner; 'gemini-cli': GeminiCliRunner; + 'codex-cli': CodexCliRunner; + 'claude-code-cli': ClaudeCodeCliRunner; } /** Names of supported runners. */ @@ -27,6 +31,14 @@ export async function getRunnerByName( return import('./gemini-cli/gemini-cli-runner.js').then( (m) => new m.GeminiCliRunner() as AvailableRunners[T] ); + case 'codex-cli': + return import('./codex-cli/codex-cli-runner.js').then( + (m) => new m.CodexCliRunner() as AvailableRunners[T] + ); + case 'claude-code-cli': + return import('./claude-code-cli/claude-code-cli-runner.js').then( + (m) => new m.ClaudeCodeCliRunner() as AvailableRunners[T] + ); default: throw new UserFacingError(`Unsupported runner ${name}`); } diff --git a/runner/eval-cli.ts b/runner/eval-cli.ts index 828fcf37..111d1d1b 100644 --- a/runner/eval-cli.ts +++ b/runner/eval-cli.ts @@ -61,7 +61,7 @@ function builder(argv: Argv): Argv { .option('runner', { type: 'string', default: 'genkit' as const, - choices: ['genkit', 'gemini-cli'] as RunnerName[], + choices: ['genkit', 'gemini-cli', 'codex-cli', 'claude-code-cli'] as RunnerName[], description: 'Runner to use to execute the eval', }) .option('local', { diff --git a/runner/index.ts b/runner/index.ts index dd016639..4245031f 100644 --- a/runner/index.ts +++ b/runner/index.ts @@ -34,6 +34,8 @@ export { groupSimilarReports } from './orchestration/grouping.js'; export { type LlmRunner } from './codegen/llm-runner.js'; export { GenkitRunner } from './codegen/genkit/genkit-runner.js'; export { GeminiCliRunner } from './codegen/gemini-cli/gemini-cli-runner.js'; +export { CodexCliRunner } from './codegen/codex-cli/codex-cli-runner.js'; +export { ClaudeCodeCliRunner } from './codegen/claude-code-cli/claude-code-cli-runner.js'; export { getRunnerByName, type RunnerName } from './codegen/runner-creation.js'; export { getEnvironmentByPath } from './configuration/environment-resolution.js'; export { type Environment } from './configuration/environment.js'; From 4d8fa0d2022bba649c7068ae88638cc18b034da7 Mon Sep 17 00:00:00 2001 From: Dev Agrawal Date: Mon, 29 Sep 2025 18:51:13 -0500 Subject: [PATCH 3/8] feat: add TypeScript SDK and CLI documentation This commit introduces a comprehensive TypeScript SDK for the web-codegen-scorer CLI, enabling programmatic access to its functionalities. Additionally, detailed documentation for both the SDK and CLI has been added, including usage examples and command references. The .gitignore file has been updated to exclude the .env file. --- .gitignore | 2 +- docs/typescript-sdk-guide.md | 376 ++++++++++++ docs/web-codegen-scorer-cli-reference.md | 500 ++++++++++++++++ docs/web-codegen-scorer-typescript-sdk.ts | 533 ++++++++++++++++++ docs/web-codegen-scorer-usage-examples.ts | 439 +++++++++++++++ .../claude-code-cli/claude-code-cli-runner.ts | 157 +++++- runner/codegen/cli/prompt-helpers.ts | 226 ++++++++ runner/codegen/cli/run-command.ts | 138 +++++ runner/codegen/codex-cli/codex-cli-runner.ts | 135 ++++- .../codegen/gemini-cli/gemini-cli-runner.ts | 140 ++++- runner/eval-cli.ts | 60 +- runner/orchestration/generate.ts | 45 +- runner/orchestration/user-journeys.ts | 4 +- runner/ratings/autoraters/code-rater.ts | 4 +- runner/ratings/autoraters/rate-files.ts | 4 +- runner/ratings/autoraters/visuals-rater.ts | 4 +- runner/ratings/rate-code.ts | 6 +- runner/ratings/rating-types.ts | 4 +- runner/reporting/ai-summarize.ts | 4 +- scripts/smoke/smoke-cli.ts | 142 +++++ 20 files changed, 2857 insertions(+), 66 deletions(-) create mode 100644 docs/typescript-sdk-guide.md create mode 100644 docs/web-codegen-scorer-cli-reference.md create mode 100644 docs/web-codegen-scorer-typescript-sdk.ts create mode 100644 docs/web-codegen-scorer-usage-examples.ts create mode 100644 runner/codegen/cli/prompt-helpers.ts create mode 100644 runner/codegen/cli/run-command.ts create mode 100644 scripts/smoke/smoke-cli.ts diff --git a/.gitignore b/.gitignore index 73e349bf..e3a207c2 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,4 @@ report-app/.reports .web-codegen-scorer -.env.local \ No newline at end of file +.env \ No newline at end of file diff --git a/docs/typescript-sdk-guide.md b/docs/typescript-sdk-guide.md new file mode 100644 index 00000000..baa21700 --- /dev/null +++ b/docs/typescript-sdk-guide.md @@ -0,0 +1,376 @@ +# Web Codegen Scorer - Documentation & TypeScript SDK + +This package contains comprehensive documentation and a TypeScript SDK for the `web-codegen-scorer` CLI tool. + +## Files Included + +### 1. `web-codegen-scorer-cli-reference.md` + +Complete CLI reference documentation covering: + +- All 4 commands: `eval`, `run`, `init`, `report` +- Every command-line option with descriptions and examples +- Environment configuration guide +- Built-in ratings and model support +- Common workflows and debugging tips +- 70+ command-line flags documented + +### 2. `web-codegen-scorer-typescript-sdk.ts` + +Type-safe TypeScript SDK providing: + +- Functions to invoke CLI commands programmatically +- Full TypeScript type definitions +- `WebCodegenScorer` class for object-oriented usage +- Helper functions: `isInstalled()`, `getVersion()` +- Promise-based API with proper error handling +- Support for all CLI options + +### 3. `web-codegen-scorer-usage-examples.ts` + +12 comprehensive examples demonstrating: + +1. Basic evaluation +2. Advanced evaluation with custom options +3. Comparing multiple models +4. Local mode (cached results) +5. Debugging specific prompts +6. Using the WebCodegenScorer class +7. CI/CD pipeline integration +8. Initializing environments +9. Parallel evaluations +10. RAG-enhanced evaluation +11. Full feature evaluation +12. Error handling and retries + +## Quick Start + +### Using the CLI Reference + +```bash +# View the comprehensive CLI documentation +cat web-codegen-scorer-cli-reference.md + +# Example: Run basic evaluation +web-codegen-scorer eval --env=angular-example + +# Example: Compare models +web-codegen-scorer eval --env=./config.mjs --model=gemini-2.5-flash --report-name=gemini +web-codegen-scorer eval --env=./config.mjs --model=claude-3-5-sonnet --report-name=claude +``` + +### Using the TypeScript SDK + +```typescript +import { evalCommand, run, report } from './web-codegen-scorer-typescript-sdk'; + +// Run evaluation +const result = await evalCommand({ + environment: 'angular-example', + model: 'gemini-2.5-flash', + limit: 10, +}); + +if (result.success) { + console.log('✓ Evaluation completed'); +} + +// Run evaluated app +await run({ + environment: 'angular-example', + prompt: 'todo-app', + inheritStdio: true, +}); + +// View reports +await report({ port: 4200 }); +``` + +### Using the WebCodegenScorer Class + +```typescript +import { WebCodegenScorer } from './web-codegen-scorer-typescript-sdk'; + +const scorer = new WebCodegenScorer({ + environment: './my-config.mjs', + cwd: './my-project', +}); + +// Run evaluation +await scorer.eval({ model: 'gemini-2.5-flash', limit: 5 }); + +// Run app +await scorer.run({ prompt: 'contact-form' }); + +// View reports +await scorer.report({ port: 8080 }); +``` + +## API Overview + +### Main Functions + +- **`evalCommand(options: EvalOptions)`** - Run code generation and quality assessment +- **`run(options: RunOptions)`** - Run a previously evaluated app locally +- **`init(options?: BaseOptions)`** - Interactive environment setup wizard +- **`report(options?: ReportOptions)`** - Launch web UI for viewing reports + +### Helper Functions + +- **`isInstalled()`** - Check if CLI is installed +- **`getVersion()`** - Get installed CLI version + +### Type Definitions + +```typescript +interface EvalOptions { + environment: string; // Required + model?: string; + autoraterModel?: string; + runner?: RunnerType; + autoraterRunner?: RunnerType; + local?: boolean; + limit?: number; + concurrency?: number | 'auto'; + outputDirectory?: string; + promptFilter?: string; + reportName?: string; + labels?: string[]; + mcp?: boolean; + skipScreenshots?: boolean; + skipAiSummary?: boolean; + skipAxeTesting?: boolean; + enableUserJourneyTesting?: boolean; + enableAutoCsp?: boolean; + ragEndpoint?: string; + logging?: LoggingType; + // ... base options +} + +interface CommandResult { + stdout: string; + stderr: string; + exitCode: number; + success: boolean; +} +``` + +## Commands Reference + +### eval - Evaluate Code + +```bash +web-codegen-scorer eval --env= [options] +``` + +**Required:** + +- `--env=` - Environment configuration + +**Key Options:** + +- `--model=` - Model for code generation +- `--autorater-model=` - Model for rating +- `--runner=` - genkit | gemini-cli | codex-cli | claude-code-cli +- `--limit=` - Max apps to generate (default: 5) +- `--concurrency=` - Concurrent evals (default: auto) +- `--local` - Use cached LLM output +- `--prompt-filter=` - Filter specific prompts +- `--output-dir=` - Output directory for debugging +- `--report-name=` - Custom report name +- `--labels= ` - Metadata labels +- `--skip-screenshots` - Skip app screenshots +- `--skip-ai-summary` - Skip AI summary +- `--skip-axe-testing` - Skip accessibility testing +- `--enable-user-journey-testing` - Enable browser automation +- `--enable-auto-csp` - Enable CSP testing +- `--rag-endpoint=` - Custom RAG endpoint +- `--mcp` - Start MCP server + +### run - Run Evaluated App + +```bash +web-codegen-scorer run --env= --prompt= +``` + +**Required:** + +- `--env=` - Environment configuration +- `--prompt=` - Prompt ID to run + +### init - Initialize Environment + +```bash +web-codegen-scorer init +``` + +Interactive wizard for creating new environment. + +### report - View Reports + +```bash +web-codegen-scorer report [options] +``` + +**Options:** + +- `--reports-directory=` - Reports path (default: .web-codegen-scorer/reports) +- `--reports-loader=` - Remote reports loader +- `--port=` - Server port (default: 4200) + +## Environment Configuration + +Create a `config.mjs` file: + +```javascript +import { getBuiltInRatings } from 'web-codegen-scorer'; + +export default { + displayName: 'My Environment', + clientSideFramework: 'react', + sourceDirectory: './src', + ratings: [...getBuiltInRatings()], + generationSystemPrompt: './system-instructions.md', + executablePrompts: ['./prompts/**/*.md'], + + // Optional + packageManager: 'npm', + buildCommand: 'npm run build', + serveCommand: 'npm run start -- --port 0', + // ... more options +}; +``` + +## Common Workflows + +### 1. Compare Models + +```typescript +const models = ['gemini-2.5-flash', 'claude-3-5-sonnet', 'gpt-4']; + +for (const model of models) { + await evalCommand({ + environment: './config.mjs', + model, + reportName: `comparison-${model}`, + }); +} + +await report({ port: 4200 }); +``` + +### 2. Debug Prompt + +```typescript +// Evaluate specific prompt +await evalCommand({ + environment: './config.mjs', + promptFilter: 'todo-app', + outputDirectory: './debug', + skipScreenshots: true, +}); + +// Run locally +await run({ + environment: './config.mjs', + prompt: 'todo-app', + inheritStdio: true, +}); +``` + +### 3. CI/CD Integration + +```typescript +const result = await evalCommand({ + environment: './config.mjs', + limit: 20, + concurrency: 'auto', + logging: 'text-only', + reportName: `ci-${Date.now()}`, + labels: ['ci', 'automated'], +}); + +if (!result.success) { + process.exit(1); +} +``` + +## Supported Models + +### Genkit (Default) + +- **Gemini**: gemini-2.0-flash-exp, gemini-2.5-flash, gemini-2.5-pro +- **OpenAI**: gpt-4, gpt-4-turbo, gpt-3.5-turbo +- **Anthropic**: claude-3-5-sonnet, claude-3-opus +- **xAI**: grok-beta + +### CLI Runners + +- **gemini-cli**: Google Gemini CLI +- **codex-cli**: OpenAI Codex CLI (default: gpt-5-codex) +- **claude-code-cli**: Anthropic Claude Code (default: claude-4.5-sonnet) + +## Built-in Environments + +- `angular-example` - Angular application +- `solid-example` - SolidJS application +- `remote_env` - Remote environment + +## Output Structure + +``` +.web-codegen-scorer/ +├── llm-output/ # Cached LLM responses +│ └── / +│ └── / +└── reports/ # Evaluation reports + └── / + ├── report.json + ├── summary.json + └── screenshots/ +``` + +## Installation + +```bash +# Install globally +npm install -g web-codegen-scorer + +# Or use locally +npm install web-codegen-scorer + +# Verify installation +web-codegen-scorer --help +``` + +## API Keys Setup + +```bash +export GEMINI_API_KEY="..." +export OPENAI_API_KEY="..." +export ANTHROPIC_API_KEY="..." +export XAI_API_KEY="..." +``` + +## Running Examples + +```bash +# Run specific example +ts-node web-codegen-scorer-usage-examples.ts 1 + +# Available: 1-12 +``` + +## Links + +- **GitHub**: https://github.com/angular/web-codegen-scorer +- **NPM**: https://www.npmjs.com/package/web-codegen-scorer +- **Issues**: https://github.com/angular/web-codegen-scorer/issues + +## Version + +Current version: 0.0.10 + +## License + +MIT - Built by the Angular team at Google diff --git a/docs/web-codegen-scorer-cli-reference.md b/docs/web-codegen-scorer-cli-reference.md new file mode 100644 index 00000000..5d6c0f46 --- /dev/null +++ b/docs/web-codegen-scorer-cli-reference.md @@ -0,0 +1,500 @@ +# Web Codegen Scorer CLI Reference + +## Overview + +**Web Codegen Scorer** is a tool for evaluating the quality of web code generated by Large Language Models (LLMs). It helps you make evidence-based decisions about AI-generated code by providing comprehensive scoring and reporting capabilities. + +## Installation + +```bash +npm install -g web-codegen-scorer +``` + +## API Keys Setup + +Before running evaluations, set up API keys for your chosen providers: + +```bash +export GEMINI_API_KEY="YOUR_API_KEY_HERE" # For Gemini models +export OPENAI_API_KEY="YOUR_API_KEY_HERE" # For OpenAI models +export ANTHROPIC_API_KEY="YOUR_API_KEY_HERE" # For Anthropic models +export XAI_API_KEY="YOUR_API_KEY_HERE" # For xAI Grok models +``` + +--- + +## Commands + +### 1. `eval` - Evaluate Code Using an LLM + +Runs code generation and quality assessment. + +#### Usage + +```bash +web-codegen-scorer eval [options] +``` + +#### Required Options + +- `--env=`, `--environment=` + - Path to environment configuration file or built-in environment name + - Examples: `--env=angular-example`, `--env=./my-env/config.mjs` + +#### Model Configuration + +- `--model=` + - Model to use for code generation + - Default: `gemini-2.0-flash-exp` (or runner-specific default) + - Examples: `gemini-2.5-flash`, `gpt-4`, `claude-3-5-sonnet` + +- `--autorater-model=` + - Model to use for automatic code rating + - Default: `gemini-2.0-flash-exp` + +- `--runner=` + - Runner to execute the evaluation + - Choices: `genkit` (default), `gemini-cli`, `codex-cli`, `claude-code-cli` + +- `--autorater-runner=` + - Runner for autorater and AI summary + - Choices: Same as `--runner` + - Default: Uses main runner value + +#### Execution Control + +- `--local` + - Use locally-cached LLM output instead of calling LLM + - Reads from `.web-codegen-scorer/llm-output` directory + - Useful for re-running assessments without LLM costs + - Default: `false` + +- `--limit=` + - Maximum number of apps to generate and assess + - Default: `5` + +- `--concurrency=` + - Maximum concurrent evaluations + - Default: `'auto'` + +- `--prompt-filter=` + - Filter which prompts to run by name + - Useful for debugging specific prompts + - Example: `--prompt-filter=tic-tac-toe` + +#### Output Configuration + +- `--output-directory=`, `--output-dir=` + - Directory for generated code (for debugging) + - Default: Temporary directory + +- `--report-name=` + - Name for generated report directory + - Default: Timestamp (e.g., `2023-10-27T10-30-00-000Z`) + +- `--labels= ...` + - Metadata labels attached to the run + - Example: `--labels experiment-1 baseline` + +#### Feature Toggles + +- `--mcp` + - Start Model Context Protocol server for evaluation + - Default: `false` + +- `--skip-screenshots` + - Skip taking screenshots of generated apps + - Default: `false` + +- `--skip-ai-summary` + - Skip generating AI summary for report + - Default: `false` + +- `--skip-axe-testing` + - Skip Axe accessibility testing + - Default: `false` + +- `--enable-user-journey-testing`, `--user-journeys` + - Enable user journey testing via browser automation + - Default: `false` + +- `--enable-auto-csp` + - Include automatic hash-based CSP and Trusted Types + - Default: `false` + +#### Advanced Options + +- `--rag-endpoint=` + - Custom RAG endpoint URL + - Must contain `PROMPT` substring (replaced with user prompt) + - Example: `--rag-endpoint="http://localhost:8080/rag?query=PROMPT"` + +- `--logging=` + - Logging type during evaluation + - Choices: `text-only`, `dynamic` + - Default: `dynamic` (or `text-only` when `CI=1`) + +#### Examples + +```bash +# Basic evaluation with built-in Angular example +web-codegen-scorer eval --env=angular-example + +# Custom environment with specific model +web-codegen-scorer eval --env=./my-config.mjs --model=claude-3-5-sonnet + +# Limited run with custom concurrency +web-codegen-scorer eval --env=angular-example --limit=10 --concurrency=3 + +# Debug specific prompt without screenshots +web-codegen-scorer eval --env=solid-example --prompt-filter=todo-app --skip-screenshots + +# Local mode (reuse cached output) +web-codegen-scorer eval --env=angular-example --local + +# Full evaluation with all features +web-codegen-scorer eval \ + --env=./config.mjs \ + --model=gemini-2.5-flash \ + --autorater-model=gemini-2.5-pro \ + --limit=20 \ + --concurrency=5 \ + --enable-user-journey-testing \ + --labels experiment-2 optimized \ + --report-name=my-experiment +``` + +--- + +### 2. `run` - Run an Evaluated App Locally + +Runs a previously evaluated application locally for inspection. + +#### Usage + +```bash +web-codegen-scorer run [options] +``` + +#### Required Options + +- `--env=`, `--environment=` + - Path to environment configuration file + - Example: `--env=angular-example` + +- `--prompt=` + - ID of the prompt to run + - Must match a prompt that was previously evaluated + - Example: `--prompt=todo-app` + +#### Examples + +```bash +# Run evaluated todo app +web-codegen-scorer run --env=angular-example --prompt=todo-app + +# Run with custom environment +web-codegen-scorer run --env=./my-config.mjs --prompt=contact-form +``` + +--- + +### 3. `init` - Initialize New Environment + +Interactive guide for creating a new evaluation environment. + +#### Usage + +```bash +web-codegen-scorer init +``` + +#### Interactive Prompts + +1. **Environment name**: Display name for the environment +2. **Config file path**: Where to place the config file (must be `.js` or `.mjs`) +3. **Client-side framework**: Framework being used (e.g., React, Angular, Vue) +4. **Source directory**: Root directory for code generation (where `package.json` is) +5. **System instructions**: Optional path to system instructions file +6. **Executable prompts**: Optional glob pattern for prompt files + +#### Generated Files + +- Environment configuration file +- Example system instructions (if not provided) +- Example prompts (if not provided) + +#### Example Session + +```bash +$ web-codegen-scorer init + +┌─────────────────────────────────────────────────────────┐ +│ Welcome LLM enthusiast! 🎉 │ +│ Answer the following questions to create an eval │ +│ environment │ +└─────────────────────────────────────────────────────────┘ + +? What will be the name of your environment? My React App +? Where should we place the environment config file? my-react-app/config.mjs +? What client-side framework will it be using? React +? In which directory should the LLM generate and execute code? ./src +? What file contains your system instructions? (leave blank for example) +? What prompts should the LLM execute? (leave blank for examples) + +✓ Configuration created at my-react-app/config.mjs +``` + +--- + +### 4. `report` - View Evaluation Reports + +Launches web UI to view and compare evaluation reports. + +#### Usage + +```bash +web-codegen-scorer report [options] +``` + +#### Options + +- `--reports-directory=` + - Path to read local reports from + - Default: `.web-codegen-scorer/reports` + +- `--reports-loader=` + - Path to JavaScript file for loading remote reports + - Optional + +- `--port=` + - Port for serving report UI + - Default: `4200` + +#### Examples + +```bash +# View reports with defaults +web-codegen-scorer report + +# Custom reports directory +web-codegen-scorer report --reports-directory=./my-reports + +# Custom port +web-codegen-scorer report --port=8080 + +# Remote reports loader +web-codegen-scorer report --reports-loader=./load-reports.js +``` + +--- + +## Environment Configuration + +### Configuration File Structure + +Environment configs are `.mjs` or `.js` files that export a configuration object: + +```javascript +import { getBuiltInRatings } from 'web-codegen-scorer'; + +/** @type {import("web-codegen-scorer").EnvironmentConfig} */ +export default { + // Required + displayName: 'My Environment', + clientSideFramework: 'react', + sourceDirectory: './src', + ratings: [...getBuiltInRatings()], + generationSystemPrompt: './system-instructions.md', + executablePrompts: ['./prompts/**/*.md'], + + // Optional + id: 'my-env', + packageManager: 'npm', + skipInstall: false, + buildCommand: 'npm run build', + serveCommand: 'npm run start -- --port 0', + mcpServers: [], + repairSystemPrompt: './repair-instructions.md', + editingSystemPrompt: './editing-instructions.md', + codeRatingPrompt: './rating-prompt.md', + classifyPrompts: false, + projectTemplate: './template', + fullStackFramework: 'next', +}; +``` + +### Built-in Environments + +- `angular-example`: Angular application example +- `solid-example`: SolidJS application example +- `remote_env`: Remote environment example + +### Prompt Templating + +Prompts support Handlebars-style templating: + +```markdown +{{> embed file='../shared/common-instructions.md' }} + +{{> contextFiles '**/*.ts, **/*.html' }} + +Use {{CLIENT_SIDE_FRAMEWORK_NAME}} for this component. +``` + +### Multi-Step Prompts + +```javascript +import { MultiStepPrompt } from 'web-codegen-scorer'; + +executablePrompts: [ + new MultiStepPrompt('./prompts/about-page', { + 'step-1': ratingsForFirstStep, + 'step-2': [...ratingsForFirstStep, ...ratingsForSecondStep], + }), +]; +``` + +Each step file: `step-1.md`, `step-2.md`, etc. + +--- + +## Built-in Ratings + +The tool provides several built-in code quality ratings: + +1. **PerBuildRating**: Scores based on build success +2. **PerFileRating**: Analyzes individual file content +3. **LLMBasedRating**: Uses LLM to rate code quality +4. **AxeRating**: Accessibility testing +5. **Code Quality Ratings**: Various best practices checks + +Access via: + +```javascript +import { getBuiltInRatings } from 'web-codegen-scorer'; +``` + +--- + +## Supported Models + +### Genkit (Default Runner) + +- Gemini: `gemini-2.0-flash-exp`, `gemini-2.5-flash`, `gemini-2.5-pro` +- OpenAI: `gpt-4`, `gpt-4-turbo`, `gpt-3.5-turbo` +- Anthropic: `claude-3-5-sonnet`, `claude-3-opus` +- xAI: `grok-beta` + +### CLI Runners + +- **gemini-cli**: Google Gemini CLI +- **codex-cli**: OpenAI Codex CLI (default: `gpt-5-codex`) +- **claude-code-cli**: Anthropic Claude Code CLI (default: `claude-4.5-sonnet`) + +--- + +## Output Structure + +``` +.web-codegen-scorer/ +├── llm-output/ # Cached LLM responses +│ └── / +│ └── / +│ └── [generated files] +└── reports/ # Evaluation reports + └── / + ├── report.json # Report data + ├── summary.json # Summary statistics + └── screenshots/ # App screenshots +``` + +--- + +## CLI Shortcuts + +The tool provides shorter aliases: + +```bash +# Short package name +wcs eval --env=angular-example + +# Equivalent to +web-codegen-scorer eval --env=angular-example +``` + +--- + +## Exit Codes + +- `0`: Success +- `1`: Error (with error message displayed) + +--- + +## Debugging Tips + +1. **Use `--output-dir`** to inspect generated code +2. **Use `--prompt-filter`** to test specific prompts +3. **Use `--local`** to rerun without LLM costs +4. **Use `--skip-screenshots`** for faster iterations +5. **Check `.web-codegen-scorer/llm-output`** for cached responses + +--- + +## Common Workflows + +### Iterate on System Prompt + +```bash +# Edit system-instructions.md +# Run evaluation +web-codegen-scorer eval --env=./config.mjs --limit=5 + +# View results +web-codegen-scorer report +``` + +### Compare Models + +```bash +# Run with Model A +web-codegen-scorer eval --env=./config.mjs --model=gemini-2.5-flash --report-name=model-a + +# Run with Model B +web-codegen-scorer eval --env=./config.mjs --model=claude-3-5-sonnet --report-name=model-b + +# Compare in UI +web-codegen-scorer report +``` + +### Debug Specific Prompt + +```bash +# Run specific prompt with output directory +web-codegen-scorer eval \ + --env=./config.mjs \ + --prompt-filter=contact-form \ + --output-dir=./debug-output \ + --skip-screenshots + +# Inspect generated code +cd debug-output + +# Run the app locally +web-codegen-scorer run --env=./config.mjs --prompt=contact-form +``` + +--- + +## Version + +Package version: `0.0.10` + +--- + +## Links + +- GitHub: https://github.com/angular/web-codegen-scorer +- Issues: https://github.com/angular/web-codegen-scorer/issues +- NPM: https://www.npmjs.com/package/web-codegen-scorer diff --git a/docs/web-codegen-scorer-typescript-sdk.ts b/docs/web-codegen-scorer-typescript-sdk.ts new file mode 100644 index 00000000..17aa37ca --- /dev/null +++ b/docs/web-codegen-scorer-typescript-sdk.ts @@ -0,0 +1,533 @@ +/** + * TypeScript SDK for Web Codegen Scorer CLI + * + * This module provides type-safe TypeScript functions to invoke the web-codegen-scorer + * CLI tool programmatically instead of using shell commands. + * + * @packageDocumentation + */ + +import { spawn, SpawnOptions } from 'child_process'; +import { promisify } from 'util'; +import { exec as execCallback } from 'child_process'; + +const execPromise = promisify(execCallback); + +/** + * Base options common to all commands + */ +interface BaseOptions { + /** + * Working directory for command execution + */ + cwd?: string; + + /** + * Environment variables to pass to the CLI + */ + env?: Record; + + /** + * Whether to inherit stdio (show output in console) + * @default false + */ + inheritStdio?: boolean; +} + +/** + * Result of a CLI command execution + */ +interface CommandResult { + /** + * Standard output from the command + */ + stdout: string; + + /** + * Standard error from the command + */ + stderr: string; + + /** + * Exit code (0 = success) + */ + exitCode: number; + + /** + * Whether the command succeeded (exitCode === 0) + */ + success: boolean; +} + +/** + * Runner types for code generation + */ +type RunnerType = 'genkit' | 'gemini-cli' | 'codex-cli' | 'claude-code-cli'; + +/** + * Logging types for evaluation progress + */ +type LoggingType = 'text-only' | 'dynamic'; + +/** + * Options for the 'eval' command + */ +interface EvalOptions extends BaseOptions { + /** + * Path to environment configuration file or built-in environment name + * @required + */ + environment: string; + + /** + * Model to use for code generation + * @default 'gemini-2.0-flash-exp' (or runner-specific default) + */ + model?: string; + + /** + * Model to use for automatic code rating + * @default 'gemini-2.0-flash-exp' + */ + autoraterModel?: string; + + /** + * Runner to execute the evaluation + * @default 'genkit' + */ + runner?: RunnerType; + + /** + * Runner for autorater and AI summary (defaults to main runner) + */ + autoraterRunner?: RunnerType; + + /** + * Use locally-cached LLM output instead of calling LLM + * @default false + */ + local?: boolean; + + /** + * Maximum number of apps to generate and assess + * @default 5 + */ + limit?: number; + + /** + * Maximum concurrent evaluations ('auto' or number) + * @default 'auto' + */ + concurrency?: number | 'auto'; + + /** + * Directory for generated code (for debugging) + */ + outputDirectory?: string; + + /** + * Filter which prompts to run by name + */ + promptFilter?: string; + + /** + * Name for generated report directory + * @default timestamp + */ + reportName?: string; + + /** + * Metadata labels attached to the run + */ + labels?: string[]; + + /** + * Start Model Context Protocol server for evaluation + * @default false + */ + mcp?: boolean; + + /** + * Skip taking screenshots of generated apps + * @default false + */ + skipScreenshots?: boolean; + + /** + * Skip generating AI summary for report + * @default false + */ + skipAiSummary?: boolean; + + /** + * Skip Axe accessibility testing + * @default false + */ + skipAxeTesting?: boolean; + + /** + * Enable user journey testing via browser automation + * @default false + */ + enableUserJourneyTesting?: boolean; + + /** + * Include automatic hash-based CSP and Trusted Types + * @default false + */ + enableAutoCsp?: boolean; + + /** + * Custom RAG endpoint URL (must contain 'PROMPT' substring) + */ + ragEndpoint?: string; + + /** + * Logging type during evaluation + * @default 'dynamic' (or 'text-only' when CI=1) + */ + logging?: LoggingType; +} + +/** + * Options for the 'run' command + */ +interface RunOptions extends BaseOptions { + /** + * Path to environment configuration file + * @required + */ + environment: string; + + /** + * ID of the prompt to run + * @required + */ + prompt: string; +} + +/** + * Options for the 'report' command + */ +interface ReportOptions extends BaseOptions { + /** + * Path to read local reports from + * @default '.web-codegen-scorer/reports' + */ + reportsDirectory?: string; + + /** + * Path to JavaScript file for loading remote reports + */ + reportsLoader?: string; + + /** + * Port for serving report UI + * @default 4200 + */ + port?: number; +} + +/** + * Internal helper to execute CLI commands + */ +async function executeCommand( + command: string, + args: string[], + options: BaseOptions = {} +): Promise { + const spawnOptions: SpawnOptions = { + cwd: options.cwd, + env: { ...process.env, ...options.env }, + stdio: options.inheritStdio ? 'inherit' : 'pipe', + }; + + return new Promise((resolve, reject) => { + const child = spawn(command, args, spawnOptions); + let stdout = ''; + let stderr = ''; + + if (!options.inheritStdio) { + child.stdout?.on('data', (data) => { + stdout += data.toString(); + }); + + child.stderr?.on('data', (data) => { + stderr += data.toString(); + }); + } + + child.on('error', (error) => { + reject(error); + }); + + child.on('close', (code) => { + resolve({ + stdout, + stderr, + exitCode: code ?? 1, + success: code === 0, + }); + }); + }); +} + +/** + * Build arguments array from options object + */ +function buildArgs(baseArgs: string[], options: Record): string[] { + const args = [...baseArgs]; + + for (const [key, value] of Object.entries(options)) { + if (value === undefined || value === null) continue; + + const kebabKey = key.replace(/([A-Z])/g, '-$1').toLowerCase(); + + if (typeof value === 'boolean') { + if (value) { + args.push(`--${kebabKey}`); + } + } else if (Array.isArray(value)) { + args.push(`--${kebabKey}`); + args.push(...value); + } else { + args.push(`--${kebabKey}=${value}`); + } + } + + return args; +} + +/** + * Run code generation and quality assessment + * + * @example + * ```typescript + * const result = await evalCommand({ + * environment: 'angular-example', + * model: 'gemini-2.5-flash', + * limit: 10, + * skipScreenshots: true, + * }); + * + * if (result.success) { + * console.log('Evaluation completed successfully'); + * } + * ``` + */ +export async function evalCommand( + options: EvalOptions +): Promise { + const { environment, cwd, env, inheritStdio, ...cliOptions } = options; + + const args = buildArgs(['eval'], { + environment, + ...cliOptions, + }); + + return executeCommand('web-codegen-scorer', args, { cwd, env, inheritStdio }); +} + +/** + * Run a previously evaluated application locally + * + * @example + * ```typescript + * const result = await run({ + * environment: 'angular-example', + * prompt: 'todo-app', + * inheritStdio: true, // Show server output + * }); + * ``` + */ +export async function run(options: RunOptions): Promise { + const { environment, prompt, cwd, env, inheritStdio } = options; + + const args = buildArgs(['run'], { environment, prompt }); + + return executeCommand('web-codegen-scorer', args, { cwd, env, inheritStdio }); +} + +/** + * Launch interactive guide for creating a new evaluation environment + * + * Note: This is an interactive command, so inheritStdio is automatically set to true + * + * @example + * ```typescript + * await init({ cwd: './my-project' }); + * ``` + */ +export async function init(options: BaseOptions = {}): Promise { + const { cwd, env } = options; + + return executeCommand('web-codegen-scorer', ['init'], { + cwd, + env, + inheritStdio: true, // Always inherit for interactive prompts + }); +} + +/** + * Launch web UI to view and compare evaluation reports + * + * Note: This starts a long-running server, so the Promise won't resolve + * until the server is stopped + * + * @example + * ```typescript + * await report({ + * port: 8080, + * reportsDirectory: './my-reports', + * inheritStdio: true, + * }); + * ``` + */ +export async function report( + options: ReportOptions = {} +): Promise { + const { cwd, env, inheritStdio, ...cliOptions } = options; + + const args = buildArgs(['report'], cliOptions); + + return executeCommand('web-codegen-scorer', args, { cwd, env, inheritStdio }); +} + +/** + * Check if web-codegen-scorer CLI is installed + * + * @returns true if installed, false otherwise + */ +export async function isInstalled(): Promise { + try { + await execPromise('which web-codegen-scorer'); + return true; + } catch { + return false; + } +} + +/** + * Get the version of installed web-codegen-scorer CLI + * + * @returns version string or null if not installed + */ +export async function getVersion(): Promise { + try { + const result = await executeCommand( + 'web-codegen-scorer', + ['--version'], + {} + ); + return result.stdout.trim() || null; + } catch { + return null; + } +} + +/** + * Convenience class for chaining multiple operations + * + * @example + * ```typescript + * const scorer = new WebCodegenScorer({ + * environment: './my-config.mjs', + * cwd: './my-project', + * }); + * + * // Run evaluation + * await scorer.eval({ + * model: 'gemini-2.5-flash', + * limit: 10, + * }); + * + * // Run specific prompt + * await scorer.run({ prompt: 'todo-app' }); + * + * // View reports + * await scorer.report({ port: 8080 }); + * ``` + */ +export class WebCodegenScorer { + private defaultOptions: BaseOptions; + private environment?: string; + + constructor(options: BaseOptions & { environment?: string } = {}) { + const { environment, ...baseOptions } = options; + this.defaultOptions = baseOptions; + this.environment = environment; + } + + /** + * Run evaluation with default options + */ + async eval(options: Partial = {}): Promise { + if (!this.environment && !options.environment) { + throw new Error('Environment must be specified'); + } + + return evalCommand({ + ...this.defaultOptions, + environment: this.environment!, + ...options, + } as EvalOptions); + } + + /** + * Run evaluated app with default options + */ + async run(options: Omit): Promise { + if (!this.environment) { + throw new Error('Environment must be specified in constructor'); + } + + return run({ + ...this.defaultOptions, + environment: this.environment, + ...options, + }); + } + + /** + * Launch report viewer with default options + */ + async report(options: ReportOptions = {}): Promise { + return report({ + ...this.defaultOptions, + ...options, + }); + } + + /** + * Launch init wizard with default options + */ + async init(): Promise { + return init(this.defaultOptions); + } +} + +/** + * Export all types for external use + */ +export type { + BaseOptions, + CommandResult, + RunnerType, + LoggingType, + EvalOptions, + RunOptions, + ReportOptions, +}; + +/** + * Default export for convenience + */ +export default { + evalCommand, + run, + init, + report, + isInstalled, + getVersion, + WebCodegenScorer, +}; diff --git a/docs/web-codegen-scorer-usage-examples.ts b/docs/web-codegen-scorer-usage-examples.ts new file mode 100644 index 00000000..227f9068 --- /dev/null +++ b/docs/web-codegen-scorer-usage-examples.ts @@ -0,0 +1,439 @@ +/** + * Usage Examples for Web Codegen Scorer TypeScript SDK + * + * This file demonstrates various ways to use the TypeScript SDK + * to invoke web-codegen-scorer CLI functionality. + */ + +import { + evalCommand, + run as runCommand, + init as initCommand, + report as reportCommand, + isInstalled, + getVersion, + WebCodegenScorer, + type EvalOptions, + type CommandResult, +} from './web-codegen-scorer-typescript-sdk'; + +// ============================================================================ +// Example 1: Basic Evaluation +// ============================================================================ + +async function example1_basicEval() { + console.log('Example 1: Basic Evaluation'); + + const result = await evalCommand({ + environment: 'angular-example', + }); + + if (result.success) { + console.log('✓ Evaluation completed successfully'); + console.log(result.stdout); + } else { + console.error('✗ Evaluation failed'); + console.error(result.stderr); + } +} + +// ============================================================================ +// Example 2: Advanced Evaluation with Custom Options +// ============================================================================ + +async function example2_advancedEval() { + console.log('Example 2: Advanced Evaluation'); + + const result = await evalCommand({ + environment: './my-environment/config.mjs', + model: 'gemini-2.5-flash', + autoraterModel: 'gemini-2.5-pro', + limit: 10, + concurrency: 3, + reportName: 'experiment-baseline', + labels: ['baseline', 'v1.0'], + skipScreenshots: false, + enableUserJourneyTesting: true, + outputDirectory: './debug-output', + inheritStdio: true, // Show progress in real-time + }); + + console.log(`Exit code: ${result.exitCode}`); +} + +// ============================================================================ +// Example 3: Compare Multiple Models +// ============================================================================ + +async function example3_compareModels() { + console.log('Example 3: Comparing Models'); + + const models = [ + { name: 'gemini-2.5-flash', label: 'gemini-flash' }, + { name: 'claude-3-5-sonnet', label: 'claude-sonnet' }, + { name: 'gpt-4', label: 'gpt4' }, + ]; + + const baseConfig: EvalOptions = { + environment: './my-config.mjs', + limit: 5, + concurrency: 2, + }; + + for (const model of models) { + console.log(`\nEvaluating with ${model.name}...`); + + const result = await evalCommand({ + ...baseConfig, + model: model.name, + reportName: `model-comparison-${model.label}`, + labels: ['comparison', model.label], + }); + + if (result.success) { + console.log(`✓ ${model.name} completed`); + } else { + console.error(`✗ ${model.name} failed`); + } + } + + // View comparative reports + await reportCommand({ port: 4200, inheritStdio: true }); +} + +// ============================================================================ +// Example 4: Local Mode (Reuse Cached Results) +// ============================================================================ + +async function example4_localMode() { + console.log('Example 4: Local Mode'); + + // First run: Generate and cache results + await evalCommand({ + environment: 'angular-example', + limit: 3, + reportName: 'initial-run', + }); + + // Subsequent runs: Reuse cached LLM outputs + // Useful for testing different rating configurations without LLM costs + await evalCommand({ + environment: 'angular-example', + local: true, // Uses cached outputs + reportName: 'refined-ratings', + }); +} + +// ============================================================================ +// Example 5: Debug Specific Prompt +// ============================================================================ + +async function example5_debugPrompt() { + console.log('Example 5: Debug Specific Prompt'); + + // Run evaluation for specific prompt only + const evalResult = await evalCommand({ + environment: './config.mjs', + promptFilter: 'todo-app', + outputDirectory: './debug-todo-app', + skipScreenshots: true, + limit: 1, + }); + + if (evalResult.success) { + // Run the generated app locally + await runCommand({ + environment: './config.mjs', + prompt: 'todo-app', + inheritStdio: true, + }); + } +} + +// ============================================================================ +// Example 6: Using the WebCodegenScorer Class +// ============================================================================ + +async function example6_usingClass() { + console.log('Example 6: Using WebCodegenScorer Class'); + + const scorer = new WebCodegenScorer({ + environment: './my-config.mjs', + cwd: './my-project', + env: { + GEMINI_API_KEY: process.env.GEMINI_API_KEY || '', + }, + }); + + // Run evaluation + const evalResult = await scorer.eval({ + model: 'gemini-2.5-flash', + limit: 5, + reportName: 'class-example', + }); + + if (evalResult.success) { + // Run a specific evaluated app + await scorer.run({ + prompt: 'contact-form', + inheritStdio: true, + }); + + // View reports + await scorer.report({ port: 8080 }); + } +} + +// ============================================================================ +// Example 7: Automated CI/CD Pipeline +// ============================================================================ + +async function example7_cicdPipeline() { + console.log('Example 7: CI/CD Pipeline'); + + // Check if CLI is installed + if (!(await isInstalled())) { + console.error('web-codegen-scorer is not installed'); + process.exit(1); + } + + const version = await getVersion(); + console.log(`Using web-codegen-scorer version: ${version}`); + + // Run evaluation with CI-friendly settings + const result = await evalCommand({ + environment: './config.mjs', + model: 'gemini-2.5-flash', + limit: 20, + concurrency: 'auto', + reportName: `ci-run-${Date.now()}`, + labels: ['ci', 'automated', process.env.GIT_BRANCH || 'main'], + logging: 'text-only', // Better for CI logs + skipScreenshots: false, + enableUserJourneyTesting: true, + env: { + CI: '1', + }, + }); + + if (!result.success) { + console.error('Evaluation failed in CI'); + process.exit(1); + } + + console.log('✓ CI evaluation passed'); +} + +// ============================================================================ +// Example 8: Initialize New Environment Programmatically +// ============================================================================ + +async function example8_initEnvironment() { + console.log('Example 8: Initialize Environment'); + + // Note: init() is interactive, so it will prompt user for input + await initCommand({ + cwd: './new-project', + }); +} + +// ============================================================================ +// Example 9: Parallel Evaluation of Multiple Configurations +// ============================================================================ + +async function example9_parallelEvals() { + console.log('Example 9: Parallel Evaluations'); + + const configurations = [ + { + environment: './env-react/config.mjs', + model: 'gemini-2.5-flash', + reportName: 'react-gemini', + }, + { + environment: './env-angular/config.mjs', + model: 'gemini-2.5-flash', + reportName: 'angular-gemini', + }, + { + environment: './env-vue/config.mjs', + model: 'claude-3-5-sonnet', + reportName: 'vue-claude', + }, + ]; + + // Run all evaluations in parallel + const results = await Promise.allSettled( + configurations.map((config) => evalCommand(config)) + ); + + // Check results + results.forEach((result, index) => { + const config = configurations[index]; + if (result.status === 'fulfilled' && result.value.success) { + console.log(`✓ ${config.reportName} succeeded`); + } else { + console.error(`✗ ${config.reportName} failed`); + } + }); +} + +// ============================================================================ +// Example 10: Custom RAG-Enhanced Evaluation +// ============================================================================ + +async function example10_ragEvaluation() { + console.log('Example 10: RAG-Enhanced Evaluation'); + + const result = await evalCommand({ + environment: './config.mjs', + model: 'gemini-2.5-flash', + ragEndpoint: 'http://localhost:8080/rag?query=PROMPT', + limit: 5, + reportName: 'rag-enhanced', + labels: ['rag', 'experimental'], + }); + + console.log(result.success ? '✓ Success' : '✗ Failed'); +} + +// ============================================================================ +// Example 11: Full Feature Evaluation +// ============================================================================ + +async function example11_fullFeatures() { + console.log('Example 11: Full Feature Evaluation'); + + const result = await evalCommand({ + environment: './config.mjs', + model: 'gemini-2.5-flash', + autoraterModel: 'gemini-2.5-pro', + runner: 'genkit', + autoraterRunner: 'genkit', + limit: 10, + concurrency: 5, + outputDirectory: './output', + reportName: 'full-features', + labels: ['comprehensive', 'all-features'], + mcp: true, + skipScreenshots: false, + skipAiSummary: false, + skipAxeTesting: false, + enableUserJourneyTesting: true, + enableAutoCsp: true, + logging: 'dynamic', + inheritStdio: true, + }); + + if (result.success) { + console.log('✓ Full feature evaluation completed'); + } +} + +// ============================================================================ +// Example 12: Error Handling and Retries +// ============================================================================ + +async function example12_errorHandling() { + console.log('Example 12: Error Handling'); + + const maxRetries = 3; + let attempt = 0; + let result: CommandResult | null = null; + + while (attempt < maxRetries) { + attempt++; + console.log(`Attempt ${attempt}/${maxRetries}...`); + + try { + result = await evalCommand({ + environment: './config.mjs', + model: 'gemini-2.5-flash', + limit: 5, + reportName: `attempt-${attempt}`, + }); + + if (result.success) { + console.log('✓ Success!'); + break; + } else { + console.warn(`Attempt ${attempt} failed, retrying...`); + } + } catch (error) { + console.error(`Error on attempt ${attempt}:`, error); + } + + // Wait before retry + if (attempt < maxRetries) { + await new Promise((resolve) => setTimeout(resolve, 5000)); + } + } + + if (!result?.success) { + console.error('✗ All attempts failed'); + process.exit(1); + } +} + +// ============================================================================ +// Main execution (run examples) +// ============================================================================ + +async function main() { + const examples = { + '1': example1_basicEval, + '2': example2_advancedEval, + '3': example3_compareModels, + '4': example4_localMode, + '5': example5_debugPrompt, + '6': example6_usingClass, + '7': example7_cicdPipeline, + '8': example8_initEnvironment, + '9': example9_parallelEvals, + '10': example10_ragEvaluation, + '11': example11_fullFeatures, + '12': example12_errorHandling, + }; + + const exampleNumber = process.argv[2]; + + if (!exampleNumber || !examples[exampleNumber as keyof typeof examples]) { + console.log('Usage: ts-node usage-examples.ts '); + console.log('\nAvailable examples:'); + console.log(' 1 - Basic Evaluation'); + console.log(' 2 - Advanced Evaluation'); + console.log(' 3 - Compare Multiple Models'); + console.log(' 4 - Local Mode (Cached)'); + console.log(' 5 - Debug Specific Prompt'); + console.log(' 6 - Using WebCodegenScorer Class'); + console.log(' 7 - CI/CD Pipeline'); + console.log(' 8 - Initialize Environment'); + console.log(' 9 - Parallel Evaluations'); + console.log(' 10 - RAG-Enhanced Evaluation'); + console.log(' 11 - Full Feature Evaluation'); + console.log(' 12 - Error Handling'); + process.exit(1); + } + + await examples[exampleNumber as keyof typeof examples](); +} + +// Run if executed directly +if (require.main === module) { + main().catch(console.error); +} + +export { + example1_basicEval, + example2_advancedEval, + example3_compareModels, + example4_localMode, + example5_debugPrompt, + example6_usingClass, + example7_cicdPipeline, + example8_initEnvironment, + example9_parallelEvals, + example10_ragEvaluation, + example11_fullFeatures, + example12_errorHandling, +}; diff --git a/runner/codegen/claude-code-cli/claude-code-cli-runner.ts b/runner/codegen/claude-code-cli/claude-code-cli-runner.ts index 48cfd17f..a9cd3099 100644 --- a/runner/codegen/claude-code-cli/claude-code-cli-runner.ts +++ b/runner/codegen/claude-code-cli/claude-code-cli-runner.ts @@ -5,9 +5,11 @@ import { mkdtemp, rm } from 'fs/promises'; import { join, relative } from 'path'; import { tmpdir } from 'os'; import { + LlmConstrainedOutputGenerateRequestOptions, LlmConstrainedOutputGenerateResponse, LlmGenerateFilesRequestOptions, LlmGenerateFilesResponse, + LlmGenerateTextRequestOptions, LlmGenerateTextResponse, LlmRunner, } from '../llm-runner.js'; @@ -15,9 +17,19 @@ import { UserFacingError } from '../../utils/errors.js'; import { DirectorySnapshot } from '../gemini-cli/directory-snapshot.js'; import { getClaudeAutomationPrompt } from './claude-code-files.js'; import { LlmResponseFile } from '../../shared-interfaces.js'; +import { runCliCommand } from '../cli/run-command.js'; +import { + buildPromptFromMessages, + buildSchemaFollowUpPrompt, + schemaToPrettyJson, + validateJsonAgainstSchema, +} from '../cli/prompt-helpers.js'; const DEFAULT_INACTIVITY_TIMEOUT_MINS = 2; const DEFAULT_TOTAL_TIMEOUT_MINS = 15; +const TEXT_INACTIVITY_TIMEOUT_MINS = 2; +const TEXT_TOTAL_TIMEOUT_MINS = 10; +const MAX_SCHEMA_RETRIES = 4; /** Runner that generates code using the Claude Code CLI. */ export class ClaudeCodeCliRunner implements LlmRunner { @@ -94,17 +106,89 @@ export class ClaudeCodeCliRunner implements LlmRunner { return { files, reasoning, toolLogs: [] }; } - generateText(): Promise { - throw new UserFacingError( - 'Generating text with Claude Code CLI is not supported.' - ); + async generateText( + options: LlmGenerateTextRequestOptions + ): Promise { + const prompt = buildPromptFromMessages(options.messages, options.prompt); + + if (!prompt.length) { + throw new UserFacingError( + 'Prompt must not be empty for Claude Code CLI.' + ); + } + + const totalTimeout = options.timeout?.durationInMins ?? TEXT_TOTAL_TIMEOUT_MINS; + const response = await this.runClaudePrompt({ + model: options.model, + prompt, + abortSignal: options.abortSignal, + inactivityTimeoutMins: TEXT_INACTIVITY_TIMEOUT_MINS, + totalTimeoutMins: totalTimeout, + }); + + return { + text: response.trim(), + reasoning: '', + usage: { inputTokens: 0, outputTokens: 0, totalTokens: 0 }, + toolLogs: [], + } satisfies LlmGenerateTextResponse; } - generateConstrained(): Promise< - LlmConstrainedOutputGenerateResponse - > { + async generateConstrained( + options: LlmConstrainedOutputGenerateRequestOptions + ): Promise> { + const basePrompt = buildPromptFromMessages(options.messages, options.prompt); + + if (!basePrompt.length) { + throw new UserFacingError( + 'Prompt must not be empty for Claude Code CLI.' + ); + } + + const schemaJson = schemaToPrettyJson(options.schema); + const totalTimeout = options.timeout?.durationInMins ?? TEXT_TOTAL_TIMEOUT_MINS; + let attempt = 0; + let lastOutput: string | undefined; + let lastError: string | undefined; + + while (attempt < MAX_SCHEMA_RETRIES) { + if (options.abortSignal?.aborted) { + throw new UserFacingError('Claude Code CLI request aborted.'); + } + + const attemptPrompt = buildSchemaFollowUpPrompt({ + basePrompt, + schemaJson, + attempt, + previousOutput: lastOutput, + validationError: lastError, + }); + + const response = await this.runClaudePrompt({ + model: options.model, + prompt: attemptPrompt, + abortSignal: options.abortSignal, + inactivityTimeoutMins: TEXT_INACTIVITY_TIMEOUT_MINS, + totalTimeoutMins: totalTimeout, + }); + + const validation = validateJsonAgainstSchema(options.schema, response); + + if (validation.success) { + return { + output: validation.data, + reasoning: '', + usage: { inputTokens: 0, outputTokens: 0, totalTokens: 0 }, + } satisfies LlmConstrainedOutputGenerateResponse; + } + + lastError = validation.error; + lastOutput = validation.raw ?? response; + attempt++; + } + throw new UserFacingError( - 'Constrained output with Claude Code CLI is not supported.' + `Claude Code CLI failed to produce JSON matching the schema after ${MAX_SCHEMA_RETRIES} attempts. Last error: ${lastError ?? 'unknown error.'}` ); } @@ -125,6 +209,59 @@ export class ClaudeCodeCliRunner implements LlmRunner { this.pendingProcesses.clear(); } + private async runClaudePrompt(options: { + model: string; + prompt: string; + abortSignal?: AbortSignal; + inactivityTimeoutMins: number; + totalTimeoutMins: number; + }): Promise { + const promptValue = options.prompt.trim(); + if (!promptValue.length) { + return ''; + } + + const claudeHome = await mkdtemp(join(tmpdir(), 'claude-code-runner-text-')); + const args = [ + '--print', + '--output-format', + 'text', + '--permission-mode', + 'bypassPermissions', + '--dangerously-skip-permissions', + '--model', + options.model, + promptValue, + ]; + + try { + const result = await runCliCommand({ + binaryPath: this.binaryPath, + args, + env: { + FORCE_COLOR: '0', + NO_COLOR: '1', + CLAUDE_CODE_DISABLE_AUTOUPDATE: '1', + CLAUDE_CODE_DATA_DIR: claudeHome, + }, + inactivityTimeoutMs: options.inactivityTimeoutMins * 60 * 1000, + totalTimeoutMs: options.totalTimeoutMins * 60 * 1000, + abortSignal: options.abortSignal, + pendingProcesses: this.pendingProcesses, + pendingTimeouts: this.pendingTimeouts, + }); + + const stdout = result.stdout.trim(); + if (stdout.length) { + return stdout; + } + + return result.stderr.trim(); + } finally { + await rm(claudeHome, { recursive: true, force: true }); + } + } + private resolveBinaryPath(): string { let dir = import.meta.dirname; let closestRoot: string | null = null; @@ -149,7 +286,9 @@ export class ClaudeCodeCliRunner implements LlmRunner { : null; if (!binaryPath || !existsSync(binaryPath)) { - throw new UserFacingError('Claude Code CLI is not installed in this project'); + throw new UserFacingError( + 'Claude Code CLI is not installed in this project' + ); } return binaryPath; diff --git a/runner/codegen/cli/prompt-helpers.ts b/runner/codegen/cli/prompt-helpers.ts new file mode 100644 index 00000000..101e4325 --- /dev/null +++ b/runner/codegen/cli/prompt-helpers.ts @@ -0,0 +1,226 @@ +import { z } from 'zod'; +import { zodToJsonSchema } from 'zod-to-json-schema'; +import { PromptDataMessage } from '../llm-runner.js'; + +export function buildPromptFromMessages( + messages: PromptDataMessage[] | undefined, + prompt: string +): string { + const segments: string[] = []; + + for (const message of messages ?? []) { + const contentSegments: string[] = []; + for (const part of message.content) { + if ('text' in part) { + if (part.text.trim().length) { + contentSegments.push(part.text.trim()); + } + } else { + const description = part.media.url + ? `Image provided: ${part.media.url}` + : 'Image provided (no URL).'; + contentSegments.push(description); + } + } + if (contentSegments.length) { + segments.push(contentSegments.join('\n')); + } + } + + if (prompt.trim().length) { + segments.push(prompt.trim()); + } + + return segments.join('\n\n').trim(); +} + +export function schemaToPrettyJson(schema: z.ZodTypeAny): string { + const jsonSchema = zodToJsonSchema(schema as any, 'Response'); + return JSON.stringify(jsonSchema, null, 2); +} + +export function buildSchemaFollowUpPrompt(options: { + basePrompt: string; + schemaJson: string; + attempt: number; + previousOutput?: string; + validationError?: string; +}): string { + const instructions: string[] = []; + + if (options.basePrompt.trim().length) { + instructions.push(options.basePrompt.trim()); + } + + instructions.push( + 'Respond with a JSON document that strictly conforms to the following JSON schema. Return JSON only, with no commentary or code fences.', + options.schemaJson + ); + + if (options.attempt > 0) { + if (options.previousOutput) { + const sanitizedOutput = truncate(options.previousOutput.trim(), 2000); + instructions.push( + 'The previous response was invalid. Here is the previous output:', + sanitizedOutput + ); + } + if (options.validationError) { + instructions.push( + 'Validation errors:', + truncate(options.validationError.trim(), 2000) + ); + } + instructions.push('Please fix the issues and output valid JSON that matches the schema.'); + } + + return instructions.join('\n\n').trim(); +} + +export function parseJsonFromText(raw: string): + | { success: true; data: unknown; raw: string } + | { success: false; error: string } { + const trimmed = raw.trim(); + + if (!trimmed) { + return { success: false, error: 'Empty response.' }; + } + + const candidates: string[] = []; + + if (trimmed.startsWith('```')) { + const fenceEnd = trimmed.indexOf('```', 3); + if (fenceEnd !== -1) { + const fenced = trimmed.slice(3, fenceEnd); + const fenceContent = fenced.replace(/^json\n/i, ''); + candidates.push(fenceContent.trim()); + } + } + + candidates.push(trimmed); + + const jsonSubstring = extractFirstJsonSubstring(trimmed); + if (jsonSubstring) { + candidates.push(jsonSubstring); + } + + let lastError = 'Unable to parse JSON.'; + + for (const candidate of candidates) { + try { + const data = JSON.parse(candidate); + return { success: true, data, raw: candidate }; + } catch (error) { + lastError = error instanceof Error ? error.message : String(error); + } + } + + return { + success: false, + error: `Failed to parse JSON. Last parser error: ${lastError}`, + }; +} + +export function validateJsonAgainstSchema( + schema: z.ZodTypeAny, + raw: string +): + | { success: true; data: unknown; raw: string } + | { success: false; error: string; raw?: string } { + const parsed = parseJsonFromText(raw); + + if (!parsed.success) { + return parsed; + } + + const result = schema.safeParse(parsed.data); + if (result.success) { + return { success: true, data: result.data, raw: parsed.raw }; + } + + return { + success: false, + error: formatZodIssues(result.error.issues), + raw: parsed.raw, + }; +} + +function formatZodIssues(issues: z.ZodIssue[]): string { + if (!issues.length) { + return 'Unknown validation error.'; + } + + return issues + .map((issue) => { + const path = issue.path.length ? issue.path.join('.') : ''; + return `${path}: ${issue.message}`; + }) + .join('\n'); +} + +function truncate(value: string, maxLength: number): string { + if (value.length <= maxLength) { + return value; + } + return `${value.slice(0, maxLength)}…`; +} + +function extractFirstJsonSubstring(text: string): string | null { + const length = text.length; + let start = -1; + const stack: string[] = []; + let inString = false; + let stringChar = ''; + let escaped = false; + + for (let i = 0; i < length; i++) { + const char = text[i]; + + if (escaped) { + escaped = false; + continue; + } + + if (inString) { + if (char === '\\') { + escaped = true; + } else if (char === stringChar) { + inString = false; + } + continue; + } + + if (char === '"' || char === "'") { + inString = true; + stringChar = char; + continue; + } + + if (char === '{' || char === '[') { + if (stack.length === 0) { + start = i; + } + stack.push(char); + continue; + } + + if (char === '}' || char === ']') { + if (!stack.length) { + continue; + } + const last = stack.pop(); + if (!last || !matchesBracket(last, char)) { + return null; + } + if (stack.length === 0 && start !== -1) { + return text.slice(start, i + 1); + } + } + } + + return null; +} + +function matchesBracket(open: string, close: string): boolean { + return (open === '{' && close === '}') || (open === '[' && close === ']'); +} diff --git a/runner/codegen/cli/run-command.ts b/runner/codegen/cli/run-command.ts new file mode 100644 index 00000000..78292746 --- /dev/null +++ b/runner/codegen/cli/run-command.ts @@ -0,0 +1,138 @@ +import { ChildProcess, spawn } from 'child_process'; + +interface RunCliCommandOptions { + binaryPath: string; + args: string[]; + cwd?: string; + env?: NodeJS.ProcessEnv; + abortSignal?: AbortSignal; + inactivityTimeoutMs?: number; + totalTimeoutMs?: number; + pendingProcesses?: Set; + pendingTimeouts?: Set>; +} + +interface RunCliCommandResult { + stdout: string; + stderr: string; + exitCode: number; +} + +export async function runCliCommand( + options: RunCliCommandOptions +): Promise { + if (options.abortSignal?.aborted) { + throw new Error('Command execution aborted'); + } + + return await new Promise((resolve, reject) => { + const child = spawn(options.binaryPath, options.args, { + cwd: options.cwd, + env: { + ...process.env, + ...options.env, + }, + stdio: ['ignore', 'pipe', 'pipe'], + }); + + options.pendingProcesses?.add(child); + + let stdoutBuffer = ''; + let stderrBuffer = ''; + let finished = false; + let inactivityTimer: ReturnType | null = null; + let totalTimer: ReturnType | null = null; + + const clearTimer = (timer: ReturnType | null) => { + if (timer !== null) { + clearTimeout(timer); + options.pendingTimeouts?.delete(timer); + } + }; + + const finish = (err: Error | null, exitCode = 0) => { + if (finished) { + return; + } + finished = true; + + clearTimer(inactivityTimer); + clearTimer(totalTimer); + options.pendingProcesses?.delete(child); + if (abortListener) { + options.abortSignal?.removeEventListener('abort', abortListener); + } + + if (err) { + child.kill('SIGKILL'); + reject(err); + } else { + resolve({ stdout: stdoutBuffer, stderr: stderrBuffer, exitCode }); + } + }; + + const refreshInactivityTimer = () => { + if (!options.inactivityTimeoutMs) { + return; + } + clearTimer(inactivityTimer); + inactivityTimer = setTimeout(() => { + finish( + new Error( + `Command timed out due to ${Math.round( + options.inactivityTimeoutMs! / 1000 + )}s of inactivity.` + ) + ); + }, options.inactivityTimeoutMs); + options.pendingTimeouts?.add(inactivityTimer); + }; + + const abortListener = () => { + finish(new Error('Command execution aborted')); + }; + + if (options.abortSignal) { + options.abortSignal.addEventListener('abort', abortListener); + } + + if (options.totalTimeoutMs) { + totalTimer = setTimeout(() => { + finish( + new Error( + `Command exceeded total timeout of ${Math.round( + options.totalTimeoutMs! / 1000 + )}s.` + ) + ); + }, options.totalTimeoutMs); + options.pendingTimeouts?.add(totalTimer); + } + + child.stdout?.on('data', (chunk: Buffer) => { + stdoutBuffer += chunk.toString(); + refreshInactivityTimer(); + }); + + child.stderr?.on('data', (chunk: Buffer) => { + stderrBuffer += chunk.toString(); + refreshInactivityTimer(); + }); + + child.on('error', (err) => { + finish(err); + }); + + child.on('close', (code) => { + if (code === 0) { + finish(null, 0); + } else { + const message = + stderrBuffer || stdoutBuffer || `Command exited with code ${code}`; + finish(new Error(message)); + } + }); + + refreshInactivityTimer(); + }); +} diff --git a/runner/codegen/codex-cli/codex-cli-runner.ts b/runner/codegen/codex-cli/codex-cli-runner.ts index 0dfe9464..cd715239 100644 --- a/runner/codegen/codex-cli/codex-cli-runner.ts +++ b/runner/codegen/codex-cli/codex-cli-runner.ts @@ -5,9 +5,11 @@ import { mkdtemp, readFile, rm, writeFile } from 'fs/promises'; import { join, relative } from 'path'; import { tmpdir } from 'os'; import { + LlmConstrainedOutputGenerateRequestOptions, LlmConstrainedOutputGenerateResponse, LlmGenerateFilesRequestOptions, LlmGenerateFilesResponse, + LlmGenerateTextRequestOptions, LlmGenerateTextResponse, LlmRunner, } from '../llm-runner.js'; @@ -15,6 +17,12 @@ import { UserFacingError } from '../../utils/errors.js'; import { DirectorySnapshot } from '../gemini-cli/directory-snapshot.js'; import { getCodexAgentsFile } from './codex-files.js'; import { LlmResponseFile } from '../../shared-interfaces.js'; +import { runCliCommand } from '../cli/run-command.js'; +import { + buildPromptFromMessages, + schemaToPrettyJson, + validateJsonAgainstSchema, +} from '../cli/prompt-helpers.js'; const DEFAULT_INACTIVITY_TIMEOUT_MINS = 2; const DEFAULT_TOTAL_TIMEOUT_MINS = 15; @@ -105,7 +113,10 @@ export class CodexCliRunner implements LlmRunner { for (const [absolutePath, code] of diff) { const relativePath = relative(context.directory, absolutePath); - if (relativePath === 'AGENTS.md' || relativePath === '.codex-last-message.txt') { + if ( + relativePath === 'AGENTS.md' || + relativePath === '.codex-last-message.txt' + ) { continue; } @@ -115,23 +126,68 @@ export class CodexCliRunner implements LlmRunner { const reasoning = runOutput?.reasoning && runOutput.reasoning.trim().length ? runOutput.reasoning.trim() - : runOutput?.stdout ?? ''; + : (runOutput?.stdout ?? ''); return { files, reasoning, toolLogs: [] }; } - generateText(): Promise { - throw new UserFacingError( - 'Generating text with Codex CLI is not supported.' - ); + async generateText( + options: LlmGenerateTextRequestOptions + ): Promise { + const prompt = buildPromptFromMessages(options.messages, options.prompt); + + if (!prompt.length) { + throw new UserFacingError('Prompt must not be empty for Codex CLI.'); + } + + const result = await this.runCodexExec({ + model: options.model, + prompt, + abortSignal: options.abortSignal, + inactivityTimeoutMins: DEFAULT_INACTIVITY_TIMEOUT_MINS, + totalTimeoutMins: DEFAULT_TOTAL_TIMEOUT_MINS, + }); + + return { + text: result.message.trim(), + reasoning: '', + usage: { inputTokens: 0, outputTokens: 0, totalTokens: 0 }, + toolLogs: [], + } satisfies LlmGenerateTextResponse; } - generateConstrained(): Promise< - LlmConstrainedOutputGenerateResponse - > { - throw new UserFacingError( - 'Constrained output with Codex CLI is not supported.' - ); + async generateConstrained( + options: LlmConstrainedOutputGenerateRequestOptions + ): Promise> { + const prompt = buildPromptFromMessages(options.messages, options.prompt); + + if (!prompt.length) { + throw new UserFacingError('Prompt must not be empty for Codex CLI.'); + } + + const schemaJson = schemaToPrettyJson(options.schema); + const result = await this.runCodexExec({ + model: options.model, + prompt, + abortSignal: options.abortSignal, + inactivityTimeoutMins: DEFAULT_INACTIVITY_TIMEOUT_MINS, + totalTimeoutMins: DEFAULT_TOTAL_TIMEOUT_MINS, + schemaJson, + }); + + const validation = validateJsonAgainstSchema(options.schema, result.message); + + if (!validation.success) { + throw new UserFacingError( + `Codex CLI returned invalid JSON that does not match the schema.\n${validation.error}` + ); + } + + return { + output: validation.data, + reasoning: '', + usage: { inputTokens: 0, outputTokens: 0, totalTokens: 0 }, + } satisfies LlmConstrainedOutputGenerateResponse; } getSupportedModels(): string[] { @@ -151,6 +207,61 @@ export class CodexCliRunner implements LlmRunner { this.pendingProcesses.clear(); } + private async runCodexExec(options: { + model: string; + prompt: string; + abortSignal?: AbortSignal; + inactivityTimeoutMins: number; + totalTimeoutMins: number; + schemaJson?: string; + }): Promise<{ message: string }> { + const codexHome = await mkdtemp(join(tmpdir(), 'codex-cli-runner-text-')); + const lastMessagePath = join(codexHome, 'last-message.json'); + const args = [ + 'exec', + '--skip-git-repo-check', + '--model', + options.model, + '--output-last-message', + lastMessagePath, + '--color', + 'never', + ]; + + let schemaPath: string | null = null; + if (options.schemaJson) { + schemaPath = join(codexHome, 'schema.json'); + await writeFile(schemaPath, options.schemaJson, 'utf8'); + args.push('--output-schema', schemaPath); + } + + if (options.prompt.trim().length) { + args.push(options.prompt.trim()); + } + + try { + const result = await runCliCommand({ + binaryPath: this.binaryPath, + args, + env: { CODEX_HOME: codexHome }, + abortSignal: options.abortSignal, + inactivityTimeoutMs: options.inactivityTimeoutMins * 60 * 1000, + totalTimeoutMs: options.totalTimeoutMins * 60 * 1000, + pendingProcesses: this.pendingProcesses, + pendingTimeouts: this.pendingTimeouts, + }); + + if (existsSync(lastMessagePath)) { + const message = await readFile(lastMessagePath, 'utf8'); + return { message }; + } + + return { message: result.stdout }; // Fallback for older CLI versions. + } finally { + await rm(codexHome, { recursive: true, force: true }); + } + } + private resolveBinaryPath(): string { let dir = import.meta.dirname; let closestRoot: string | null = null; diff --git a/runner/codegen/gemini-cli/gemini-cli-runner.ts b/runner/codegen/gemini-cli/gemini-cli-runner.ts index 1be4794d..c6dfc726 100644 --- a/runner/codegen/gemini-cli/gemini-cli-runner.ts +++ b/runner/codegen/gemini-cli/gemini-cli-runner.ts @@ -1,9 +1,11 @@ import { ChildProcess, spawn } from 'child_process'; import { + LlmConstrainedOutputGenerateRequestOptions, LlmConstrainedOutputGenerateResponse, LlmGenerateFilesContext, LlmGenerateFilesRequestOptions, LlmGenerateFilesResponse, + LlmGenerateTextRequestOptions, LlmGenerateTextResponse, LlmRunner, } from '../llm-runner.js'; @@ -18,6 +20,13 @@ import { import { DirectorySnapshot } from './directory-snapshot.js'; import { LlmResponseFile } from '../../shared-interfaces.js'; import { UserFacingError } from '../../utils/errors.js'; +import { runCliCommand } from '../cli/run-command.js'; +import { + buildPromptFromMessages, + buildSchemaFollowUpPrompt, + schemaToPrettyJson, + validateJsonAgainstSchema, +} from '../cli/prompt-helpers.js'; import assert from 'assert'; const SUPPORTED_MODELS = [ @@ -26,6 +35,10 @@ const SUPPORTED_MODELS = [ 'gemini-2.5-flash-lite', ]; +const TEXT_INACTIVITY_TIMEOUT_MINS = 2; +const TEXT_TOTAL_TIMEOUT_MINS = 10; +const MAX_SCHEMA_RETRIES = 4; + /** Runner that generates code using the Gemini CLI. */ export class GeminiCliRunner implements LlmRunner { readonly id = 'gemini-cli'; @@ -106,18 +119,87 @@ export class GeminiCliRunner implements LlmRunner { return { files, reasoning, toolLogs: [] }; } - generateText(): Promise { - // Technically we can make this work, but we don't need it at the time of writing. - throw new UserFacingError( - 'Generating text with Gemini CLI is not supported.' - ); + async generateText( + options: LlmGenerateTextRequestOptions + ): Promise { + const prompt = buildPromptFromMessages(options.messages, options.prompt); + + if (!prompt.length) { + throw new UserFacingError('Prompt must not be empty for Gemini CLI.'); + } + + const totalTimeout = options.timeout?.durationInMins ?? TEXT_TOTAL_TIMEOUT_MINS; + const response = await this.runGeminiPrompt({ + model: options.model, + prompt, + outputFormat: 'text', + abortSignal: options.abortSignal, + inactivityTimeoutMins: TEXT_INACTIVITY_TIMEOUT_MINS, + totalTimeoutMins: totalTimeout, + }); + + return { + text: response.trim(), + reasoning: '', + usage: { inputTokens: 0, outputTokens: 0, totalTokens: 0 }, + toolLogs: [], + } satisfies LlmGenerateTextResponse; } - generateConstrained(): Promise> { - // We can't support this, because there's no straightforward - // way to tell the Gemini CLI to follow a schema. + async generateConstrained( + options: LlmConstrainedOutputGenerateRequestOptions + ): Promise> { + const basePrompt = buildPromptFromMessages(options.messages, options.prompt); + + if (!basePrompt.length) { + throw new UserFacingError('Prompt must not be empty for Gemini CLI.'); + } + + const schemaJson = schemaToPrettyJson(options.schema); + const totalTimeout = options.timeout?.durationInMins ?? TEXT_TOTAL_TIMEOUT_MINS; + let attempt = 0; + let lastOutput: string | undefined; + let lastError: string | undefined; + + while (attempt < MAX_SCHEMA_RETRIES) { + if (options.abortSignal?.aborted) { + throw new UserFacingError('Gemini CLI request aborted.'); + } + + const attemptPrompt = buildSchemaFollowUpPrompt({ + basePrompt, + schemaJson, + attempt, + previousOutput: lastOutput, + validationError: lastError, + }); + + const response = await this.runGeminiPrompt({ + model: options.model, + prompt: attemptPrompt, + outputFormat: 'text', + abortSignal: options.abortSignal, + inactivityTimeoutMins: TEXT_INACTIVITY_TIMEOUT_MINS, + totalTimeoutMins: totalTimeout, + }); + + const validation = validateJsonAgainstSchema(options.schema, response); + + if (validation.success) { + return { + output: validation.data, + reasoning: '', + usage: { inputTokens: 0, outputTokens: 0, totalTokens: 0 }, + } satisfies LlmConstrainedOutputGenerateResponse; + } + + lastError = validation.error; + lastOutput = validation.raw ?? response; + attempt++; + } + throw new UserFacingError( - 'Constrained output with Gemini CLI is not supported.' + `Gemini CLI failed to produce JSON matching the schema after ${MAX_SCHEMA_RETRIES} attempts. Last error: ${lastError ?? 'unknown error.'}` ); } @@ -138,6 +220,46 @@ export class GeminiCliRunner implements LlmRunner { this.pendingProcesses.clear(); } + private async runGeminiPrompt(options: { + model: string; + prompt: string; + outputFormat: 'text' | 'json'; + abortSignal?: AbortSignal; + inactivityTimeoutMins: number; + totalTimeoutMins: number; + }): Promise { + const promptValue = options.prompt.trim(); + if (!promptValue.length) { + return ''; + } + + const args = [ + '-p', + promptValue, + '-m', + options.model, + '--output-format', + options.outputFormat, + ]; + + const result = await runCliCommand({ + binaryPath: this.binaryPath, + args, + abortSignal: options.abortSignal, + inactivityTimeoutMs: options.inactivityTimeoutMins * 60 * 1000, + totalTimeoutMs: options.totalTimeoutMins * 60 * 1000, + pendingProcesses: this.pendingProcesses, + pendingTimeouts: this.pendingTimeouts, + }); + + const stdout = result.stdout.trim(); + if (stdout.length) { + return stdout; + } + + return result.stderr.trim(); + } + private resolveBinaryPath(): string { let dir = import.meta.dirname; let closestRoot: string | null = null; diff --git a/runner/eval-cli.ts b/runner/eval-cli.ts index 111d1d1b..094b82f3 100644 --- a/runner/eval-cli.ts +++ b/runner/eval-cli.ts @@ -12,7 +12,6 @@ import { writeReportToDisk, } from './reporting/report-logging.js'; import { getRunnerByName, RunnerName } from './codegen/runner-creation.js'; -import { GenkitRunner } from './codegen/genkit/genkit-runner.js'; import { UserFacingError } from './utils/errors.js'; export const EvalModule = { @@ -42,6 +41,7 @@ interface Options { enableAutoCsp?: boolean; autoraterModel?: string; logging?: 'text-only' | 'dynamic'; + autoraterRunner?: RunnerName; } function builder(argv: Argv): Argv { @@ -61,9 +61,25 @@ function builder(argv: Argv): Argv { .option('runner', { type: 'string', default: 'genkit' as const, - choices: ['genkit', 'gemini-cli', 'codex-cli', 'claude-code-cli'] as RunnerName[], + choices: [ + 'genkit', + 'gemini-cli', + 'codex-cli', + 'claude-code-cli', + ] as RunnerName[], description: 'Runner to use to execute the eval', }) + .option('autorater-runner', { + type: 'string', + choices: [ + 'genkit', + 'gemini-cli', + 'codex-cli', + 'claude-code-cli', + ] as RunnerName[], + description: + 'Runner to use for the autorater and AI summary. Defaults to the main runner.', + }) .option('local', { type: 'boolean', default: false, @@ -166,8 +182,11 @@ function builder(argv: Argv): Argv { } async function handler(cliArgs: Arguments): Promise { - let llm: LlmRunner | null = null; - let ratingLlm: GenkitRunner | null = null; + let ratingLlm: LlmRunner | null = null; + const userSpecifiedModel = didUserSpecifyModel(); + const selectedModel = userSpecifiedModel + ? cliArgs.model + : getDefaultModelForRunner(cliArgs.runner); if (!cliArgs.environment) { console.error( @@ -184,11 +203,12 @@ async function handler(cliArgs: Arguments): Promise { } try { - ratingLlm = await getRunnerByName('genkit'); + const autoraterRunner = cliArgs.autoraterRunner || cliArgs.runner; + ratingLlm = await getRunnerByName(autoraterRunner); const runInfo = await generateCodeAndAssess({ ratingLlm, runner: cliArgs.runner, - model: cliArgs.model, + model: selectedModel, environmentConfigPath: BUILT_IN_ENVIRONMENTS.get(cliArgs.environment) || cliArgs.environment, localMode: cliArgs.local, @@ -226,3 +246,31 @@ async function handler(cliArgs: Arguments): Promise { await ratingLlm?.dispose(); } } + +function didUserSpecifyModel(): boolean { + return process.argv.slice(2).some((arg, index, args) => { + if (arg === '--model') { + return true; + } + + if (arg.startsWith('--model=')) { + return true; + } + + // Support "--model value" syntax even if the value is provided as a separate argument. + const previousArg = args[index - 1]; + return previousArg === '--model'; + }); +} + +function getDefaultModelForRunner(runner: RunnerName): string { + if (runner === 'claude-code-cli') { + return 'claude-4.5-sonnet'; + } + + if (runner === 'codex-cli') { + return 'gpt-5-codex'; + } + + return DEFAULT_MODEL_NAME; +} diff --git a/runner/orchestration/generate.ts b/runner/orchestration/generate.ts index 90104db0..ad20f661 100644 --- a/runner/orchestration/generate.ts +++ b/runner/orchestration/generate.ts @@ -43,7 +43,6 @@ import { setupProjectStructure, writeResponseFiles, } from './file-system.js'; -import { GenkitRunner } from '../codegen/genkit/genkit-runner.js'; import { getEnvironmentByPath } from '../configuration/environment-resolution.js'; import { getPossiblePackageManagers } from '../configuration/environment-config.js'; import { ProgressLogger } from '../progress/progress-logger.js'; @@ -71,7 +70,7 @@ import { RunnerName } from '../codegen/runner-creation.js'; * each containing the prompt, generated code, and final validation status. */ export async function generateCodeAndAssess(options: { - ratingLlm: GenkitRunner; + ratingLlm: LlmRunner; model: string; runner: RunnerName; environmentConfigPath: string; @@ -317,7 +316,7 @@ async function startEvaluationTask( evalID: EvalID, env: Environment, gateway: Gateway, - ratingLlm: GenkitRunner, + ratingLlm: LlmRunner, model: string, rootPromptDef: PromptDefinition | MultiStepPromptDefinition, localMode: boolean, @@ -433,18 +432,36 @@ async function startEvaluationTask( break; } - const userJourneys = await generateUserJourneysForApp( - ratingLlm, - rootPromptDef.name, - defsToExecute[0].prompt, - initialResponse.files, - abortSignal - ); + let userJourneys: Awaited< + ReturnType + > | null = null; + try { + userJourneys = await generateUserJourneysForApp( + ratingLlm, + rootPromptDef.name, + defsToExecute[0].prompt, + initialResponse.files, + abortSignal + ); + } catch (error: unknown) { + const message = + error instanceof Error + ? error.message + : error + ? String(error) + : 'Unknown reason'; + progress.log( + promptDef, + 'eval', + 'Skipping user journey generation', + message + ); + } // TODO: Only execute the serve command on the "final working attempt". // TODO: Incorporate usage. const userJourneyAgentTaskInput: BrowserAgentTaskInput | undefined = - enableUserJourneyTesting + enableUserJourneyTesting && userJourneys && userJourneys.result.length ? { userJourneys: userJourneys.result, appPrompt: defsToExecute[0].prompt, @@ -506,7 +523,7 @@ async function startEvaluationTask( score, repairAttempts: attempt.repairAttempts, attemptDetails, - userJourneys: userJourneys, + userJourneys: userJourneys ?? undefined, axeRepairAttempts: attempt.axeRepairAttempts, toolLogs, } satisfies AssessmentResult); @@ -612,7 +629,7 @@ async function generateInitialFiles( * and also some extra metadata about the run. */ async function prepareSummary( - genkit: GenkitRunner, + llm: LlmRunner, abortSignal: AbortSignal, model: string, env: Environment, @@ -646,7 +663,7 @@ async function prepareSummary( if (!opts.skipAiSummary) { try { const result = await summarizeReportWithAI( - genkit, + llm, abortSignal, assessments ); diff --git a/runner/orchestration/user-journeys.ts b/runner/orchestration/user-journeys.ts index 0238c707..52336e84 100644 --- a/runner/orchestration/user-journeys.ts +++ b/runner/orchestration/user-journeys.ts @@ -1,6 +1,6 @@ import { z } from 'zod'; import { LlmResponseFile, Usage } from '../shared-interfaces.js'; -import { GenkitRunner } from '../codegen/genkit/genkit-runner.js'; +import { LlmRunner } from '../codegen/llm-runner.js'; import { UserFacingError } from '../utils/errors.js'; // NOTE: When changing this, also change `browser-agent`'s prompt! @@ -25,7 +25,7 @@ export interface UserJourneysResult { } export async function generateUserJourneysForApp( - llm: GenkitRunner, + llm: LlmRunner, appName: string, appPrompt: string, appFiles: LlmResponseFile[], diff --git a/runner/ratings/autoraters/code-rater.ts b/runner/ratings/autoraters/code-rater.ts index 15c67ca4..aa94a1dc 100644 --- a/runner/ratings/autoraters/code-rater.ts +++ b/runner/ratings/autoraters/code-rater.ts @@ -13,7 +13,7 @@ import { getCoefficient, MAX_RATING, } from './auto-rate-shared.js'; -import { GenkitRunner } from '../../codegen/genkit/genkit-runner.js'; +import { LlmRunner } from '../../codegen/llm-runner.js'; import defaultCodeRaterPrompt from './code-rating-prompt.js'; import { RatingsResult } from '../rating-types.js'; @@ -42,7 +42,7 @@ const CACHED_RATING_PROMPTS: Record = {}; * @param ratingsResult Context containing results from previous ratings. */ export async function autoRateCode( - llm: GenkitRunner, + llm: LlmRunner, abortSignal: AbortSignal, model: string, environment: Environment, diff --git a/runner/ratings/autoraters/rate-files.ts b/runner/ratings/autoraters/rate-files.ts index e5453f20..0a26442f 100644 --- a/runner/ratings/autoraters/rate-files.ts +++ b/runner/ratings/autoraters/rate-files.ts @@ -8,7 +8,7 @@ import { import { autoRateCode } from './code-rater.js'; import { autoRateAppearance } from './visuals-rater.js'; import { Environment } from '../../configuration/environment.js'; -import { GenkitRunner } from '../../codegen/genkit/genkit-runner.js'; +import { LlmRunner } from '../../codegen/llm-runner.js'; import { RatingsResult } from '../rating-types.js'; /** @@ -22,7 +22,7 @@ import { RatingsResult } from '../rating-types.js'; * @param ratingsResult Context containing results from previous ratings. */ export async function autoRateFiles( - llm: GenkitRunner, + llm: LlmRunner, abortSignal: AbortSignal, model: string, environment: Environment, diff --git a/runner/ratings/autoraters/visuals-rater.ts b/runner/ratings/autoraters/visuals-rater.ts index 9cdbc845..95d02180 100644 --- a/runner/ratings/autoraters/visuals-rater.ts +++ b/runner/ratings/autoraters/visuals-rater.ts @@ -5,7 +5,7 @@ import { getCoefficient, MAX_RATING, } from './auto-rate-shared.js'; -import { GenkitRunner } from '../../codegen/genkit/genkit-runner.js'; +import { LlmRunner } from '../../codegen/llm-runner.js'; import defaultVisualRaterPrompt from './visual-rating-prompt.js'; import { Environment } from '../../configuration/environment.js'; import { screenshotUrlToPngBuffer } from '../../utils/screenshots.js'; @@ -21,7 +21,7 @@ import { screenshotUrlToPngBuffer } from '../../utils/screenshots.js'; * @param label Label for the rating, used for logging. */ export async function autoRateAppearance( - llm: GenkitRunner, + llm: LlmRunner, abortSignal: AbortSignal, model: string, environment: Environment, diff --git a/runner/ratings/rate-code.ts b/runner/ratings/rate-code.ts index a4f38fcf..7767c6be 100644 --- a/runner/ratings/rate-code.ts +++ b/runner/ratings/rate-code.ts @@ -24,7 +24,7 @@ import { } from './rating-types.js'; import { extractEmbeddedCodeFromTypeScript } from './embedded-languages.js'; import { Environment } from '../configuration/environment.js'; -import { GenkitRunner } from '../codegen/genkit/genkit-runner.js'; +import { LlmRunner } from '../codegen/llm-runner.js'; import { ProgressLogger } from '../progress/progress-logger.js'; import { UserFacingError } from '../utils/errors.js'; import { ServeTestingResult } from '../workers/serve-testing/worker-types.js'; @@ -47,7 +47,7 @@ type CategorizedFiles = Record< >; export async function rateGeneratedCode( - llm: GenkitRunner, + llm: LlmRunner, environment: Environment, currentPromptDef: PromptDefinition, fullPromptText: string, @@ -284,7 +284,7 @@ async function runLlmBasedRating( rating: LLMBasedRating, fullPromptText: string, currentPromptDef: PromptDefinition, - llm: GenkitRunner, + llm: LlmRunner, outputFiles: LlmResponseFile[], buildResult: BuildResult, serveTestingResult: ServeTestingResult | null, diff --git a/runner/ratings/rating-types.ts b/runner/ratings/rating-types.ts index 2ce3f0d7..cbcb6f2c 100644 --- a/runner/ratings/rating-types.ts +++ b/runner/ratings/rating-types.ts @@ -8,7 +8,7 @@ import type { Usage, } from '../shared-interfaces.js'; import { Environment } from '../configuration/environment.js'; -import { GenkitRunner } from '../codegen/genkit/genkit-runner.js'; +import { LlmRunner } from '../codegen/llm-runner.js'; import { ServeTestingResult } from '../workers/serve-testing/worker-types.js'; /** Possible types of ratings. */ @@ -189,7 +189,7 @@ export interface LLMBasedRatingContext { environment: Environment; fullPromptText: string; currentPromptDef: PromptDefinition; - llm: GenkitRunner; + llm: LlmRunner; model: string; outputFiles: LlmResponseFile[]; buildResult: BuildResult; diff --git a/runner/reporting/ai-summarize.ts b/runner/reporting/ai-summarize.ts index a43c629a..059f7c82 100644 --- a/runner/reporting/ai-summarize.ts +++ b/runner/reporting/ai-summarize.ts @@ -1,6 +1,6 @@ import { marked } from 'marked'; import { BuildResultStatus } from '../workers/builder/builder-types.js'; -import { GenkitRunner } from '../codegen/genkit/genkit-runner.js'; +import { LlmRunner } from '../codegen/llm-runner.js'; import { AssessmentResult, IndividualAssessment, @@ -8,7 +8,7 @@ import { } from '../shared-interfaces.js'; export async function summarizeReportWithAI( - llm: GenkitRunner, + llm: LlmRunner, abortSignal: AbortSignal, assessments: AssessmentResult[] ) { diff --git a/scripts/smoke/smoke-cli.ts b/scripts/smoke/smoke-cli.ts new file mode 100644 index 00000000..3147d9bc --- /dev/null +++ b/scripts/smoke/smoke-cli.ts @@ -0,0 +1,142 @@ +import { CodexCliRunner } from '../../runner/codegen/codex-cli/codex-cli-runner.js'; +import { GeminiCliRunner } from '../../runner/codegen/gemini-cli/gemini-cli-runner.js'; +import { ClaudeCodeCliRunner } from '../../runner/codegen/claude-code-cli/claude-code-cli-runner.js'; +import { z } from 'zod'; + +interface SmokeResult { + runner: string; + skipped: boolean; +} + +const DEFAULT_CODEX_MODEL = 'gpt-4o-mini'; +const DEFAULT_GEMINI_MODEL = 'gemini-2.5-flash'; +const DEFAULT_CLAUDE_MODEL = 'claude-3.5-sonnet'; + +async function runCodexSmoke(): Promise { + const model = process.env['CODEX_SMOKE_MODEL'] ?? DEFAULT_CODEX_MODEL; + const runner = new CodexCliRunner(); + const abortController = new AbortController(); + try { + const text = await runner.generateText({ + model, + prompt: 'Reply with a short greeting mentioning "Codex".', + messages: [], + abortSignal: abortController.signal, + }); + console.log('[codex-cli] Text response:', text.text.trim()); + + const schema = z.object({ + result: z.string().describe('Short acknowledgement containing the word Codex'), + }); + const structured = await runner.generateConstrained({ + model, + prompt: 'Return a JSON object with a "result" field referencing Codex.', + messages: [], + schema, + abortSignal: abortController.signal, + }); + console.log('[codex-cli] Structured response:', structured.output); + return { runner: 'codex-cli', skipped: false }; + } finally { + abortController.abort(); + await runner.dispose(); + } +} + +async function runGeminiSmoke(): Promise { + const model = process.env['GEMINI_SMOKE_MODEL'] ?? DEFAULT_GEMINI_MODEL; + const runner = new GeminiCliRunner(); + const abortController = new AbortController(); + try { + const text = await runner.generateText({ + model, + prompt: 'Reply with a short greeting mentioning "Gemini CLI".', + messages: [], + abortSignal: abortController.signal, + timeout: { description: 'Gemini CLI smoke test', durationInMins: 2 }, + }); + console.log('[gemini-cli] Text response:', text.text.trim()); + + const schema = z.object({ + summary: z.string().describe('Short acknowledgement containing the word "Gemini"'), + }); + const structured = await runner.generateConstrained({ + model, + prompt: 'Return JSON with a "summary" property that references Gemini CLI.', + messages: [], + schema, + abortSignal: abortController.signal, + timeout: { description: 'Gemini CLI constrained smoke test', durationInMins: 2 }, + }); + console.log('[gemini-cli] Structured response:', structured.output); + return { runner: 'gemini-cli', skipped: false }; + } finally { + abortController.abort(); + await runner.dispose(); + } +} + +async function runClaudeSmoke(): Promise { + const model = process.env['CLAUDE_SMOKE_MODEL'] ?? DEFAULT_CLAUDE_MODEL; + const runner = new ClaudeCodeCliRunner(); + const abortController = new AbortController(); + try { + const text = await runner.generateText({ + model, + prompt: 'Reply with a short greeting mentioning "Claude Code".', + messages: [], + abortSignal: abortController.signal, + timeout: { description: 'Claude Code CLI smoke test', durationInMins: 2 }, + }); + console.log('[claude-code-cli] Text response:', text.text.trim()); + + const schema = z.object({ + note: z.string().describe('Short acknowledgement containing the word "Claude"'), + }); + const structured = await runner.generateConstrained({ + model, + prompt: 'Return JSON with a "note" property that references Claude Code CLI.', + messages: [], + schema, + abortSignal: abortController.signal, + timeout: { description: 'Claude Code CLI constrained smoke test', durationInMins: 2 }, + }); + console.log('[claude-code-cli] Structured response:', structured.output); + return { runner: 'claude-code-cli', skipped: false }; + } finally { + abortController.abort(); + await runner.dispose(); + } +} + +async function main() { + const tasks: Array> = [ + runCodexSmoke(), + runGeminiSmoke(), + runClaudeSmoke(), + ]; + + const settled = await Promise.allSettled(tasks); + const results: SmokeResult[] = []; + + for (const outcome of settled) { + if (outcome.status === 'fulfilled') { + results.push(outcome.value); + } else { + console.error('Smoke test failed:', outcome.reason); + process.exitCode = 1; + } + } + + const executed = results.filter((result) => !result.skipped).length; + if (executed === 0) { + console.log( + 'All CLI smoke tests were skipped. Adjust smoke models or ensure the CLIs are logged in to exercise them.' + ); + } +} + +main().catch((error) => { + console.error('Smoke test runner failed unexpectedly:', error); + process.exit(1); +}); From d7711e9ef3b0367dfa1dfbe3cbb0c1d9ecb83f6e Mon Sep 17 00:00:00 2001 From: Dev Agrawal Date: Mon, 29 Sep 2025 19:26:30 -0500 Subject: [PATCH 4/8] feat: enhance CLI runners and add smoke test functionality This commit updates the Codex, Gemini, and Claude Code CLI runners to return detailed output structures, including command information and error handling improvements. Additionally, a new smoke test script has been introduced to validate the functionality of each CLI runner, ensuring they respond correctly to prompts and handle errors gracefully. The package.json file has also been updated to include a new script for running smoke tests. --- package.json | 3 +- .../claude-code-cli/claude-code-cli-runner.ts | 51 +++- runner/codegen/codex-cli/codex-cli-runner.ts | 34 ++- .../codegen/gemini-cli/gemini-cli-runner.ts | 59 +++-- scripts/smoke/smoke-cli.ts | 217 +++++++++++++----- 5 files changed, 275 insertions(+), 89 deletions(-) diff --git a/package.json b/package.json index af858a3d..ae288c54 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ "init": "pnpm web-codegen-scorer init", "report": "cd report-app && CODEGEN_REPORTS_DIR=../.web-codegen-scorer/reports pnpm start", "format": "prettier --write \"runner/**/*.ts\" \"report-app/**/*.ts\" \"*.json\"", - "check-format": "prettier --check \"runner/**/*.ts\" \"report-app/**/*.ts\" \"*.json\"" + "check-format": "prettier --check \"runner/**/*.ts\" \"report-app/**/*.ts\" \"*.json\"", + "smoke-cli": "tsx ./scripts/smoke/smoke-cli.ts" }, "keywords": [ "codegen", diff --git a/runner/codegen/claude-code-cli/claude-code-cli-runner.ts b/runner/codegen/claude-code-cli/claude-code-cli-runner.ts index a9cd3099..00ff66f9 100644 --- a/runner/codegen/claude-code-cli/claude-code-cli-runner.ts +++ b/runner/codegen/claude-code-cli/claude-code-cli-runner.ts @@ -127,7 +127,7 @@ export class ClaudeCodeCliRunner implements LlmRunner { }); return { - text: response.trim(), + text: response.output.trim(), reasoning: '', usage: { inputTokens: 0, outputTokens: 0, totalTokens: 0 }, toolLogs: [], @@ -150,6 +150,12 @@ export class ClaudeCodeCliRunner implements LlmRunner { let attempt = 0; let lastOutput: string | undefined; let lastError: string | undefined; + let lastResponse: { + output: string; + args: string[]; + stdout: string; + stderr: string; + } | null = null; while (attempt < MAX_SCHEMA_RETRIES) { if (options.abortSignal?.aborted) { @@ -172,7 +178,9 @@ export class ClaudeCodeCliRunner implements LlmRunner { totalTimeoutMins: totalTimeout, }); - const validation = validateJsonAgainstSchema(options.schema, response); + lastResponse = response; + + const validation = validateJsonAgainstSchema(options.schema, response.output); if (validation.success) { return { @@ -183,12 +191,27 @@ export class ClaudeCodeCliRunner implements LlmRunner { } lastError = validation.error; - lastOutput = validation.raw ?? response; + lastOutput = validation.raw ?? response.output; attempt++; } + const commandInfo = lastResponse + ? `Command: ${this.binaryPath} ${lastResponse.args.join(' ')}` + : 'Command: '; + const outputInfo = lastResponse + ? `CLI stdout:\n${lastResponse.stdout.trim() || ''}\nCLI stderr:\n${ + lastResponse.stderr.trim() || '' + }` + : 'CLI output unavailable.'; + throw new UserFacingError( - `Claude Code CLI failed to produce JSON matching the schema after ${MAX_SCHEMA_RETRIES} attempts. Last error: ${lastError ?? 'unknown error.'}` + [ + `Claude Code CLI failed to produce JSON matching the schema after ${MAX_SCHEMA_RETRIES} attempts.`, + `Last error: ${lastError ?? 'unknown error.'}`, + `Raw output: ${lastOutput?.trim() || ''}`, + commandInfo, + outputInfo, + ].join('\n') ); } @@ -215,10 +238,15 @@ export class ClaudeCodeCliRunner implements LlmRunner { abortSignal?: AbortSignal; inactivityTimeoutMins: number; totalTimeoutMins: number; - }): Promise { + }): Promise<{ + output: string; + args: string[]; + stdout: string; + stderr: string; + }> { const promptValue = options.prompt.trim(); if (!promptValue.length) { - return ''; + return { output: '', args: [], stdout: '', stderr: '' }; } const claudeHome = await mkdtemp(join(tmpdir(), 'claude-code-runner-text-')); @@ -252,11 +280,14 @@ export class ClaudeCodeCliRunner implements LlmRunner { }); const stdout = result.stdout.trim(); - if (stdout.length) { - return stdout; - } + const mergedOutput = stdout.length ? stdout : result.stderr.trim(); - return result.stderr.trim(); + return { + output: mergedOutput, + args, + stdout: result.stdout, + stderr: result.stderr, + }; } finally { await rm(claudeHome, { recursive: true, force: true }); } diff --git a/runner/codegen/codex-cli/codex-cli-runner.ts b/runner/codegen/codex-cli/codex-cli-runner.ts index cd715239..3033795c 100644 --- a/runner/codegen/codex-cli/codex-cli-runner.ts +++ b/runner/codegen/codex-cli/codex-cli-runner.ts @@ -178,8 +178,19 @@ export class CodexCliRunner implements LlmRunner { const validation = validateJsonAgainstSchema(options.schema, result.message); if (!validation.success) { + const rawOutput = validation.raw ?? result.message; + const commandInfo = `Command: ${this.binaryPath} ${result.args.join(' ')}`; + const outputInfo = `CLI stdout:\n${result.stdout.trim() || ''}\nCLI stderr:\n${ + result.stderr.trim() || '' + }`; throw new UserFacingError( - `Codex CLI returned invalid JSON that does not match the schema.\n${validation.error}` + [ + 'Codex CLI returned invalid JSON that does not match the schema.', + validation.error, + `Raw output: ${rawOutput?.trim() || ''}`, + commandInfo, + outputInfo, + ].join('\n') ); } @@ -214,7 +225,12 @@ export class CodexCliRunner implements LlmRunner { inactivityTimeoutMins: number; totalTimeoutMins: number; schemaJson?: string; - }): Promise<{ message: string }> { + }): Promise<{ + message: string; + args: string[]; + stdout: string; + stderr: string; + }> { const codexHome = await mkdtemp(join(tmpdir(), 'codex-cli-runner-text-')); const lastMessagePath = join(codexHome, 'last-message.json'); const args = [ @@ -253,10 +269,20 @@ export class CodexCliRunner implements LlmRunner { if (existsSync(lastMessagePath)) { const message = await readFile(lastMessagePath, 'utf8'); - return { message }; + return { + message, + args, + stdout: result.stdout, + stderr: result.stderr, + }; } - return { message: result.stdout }; // Fallback for older CLI versions. + return { + message: result.stdout, + args, + stdout: result.stdout, + stderr: result.stderr, + }; // Fallback for older CLI versions. } finally { await rm(codexHome, { recursive: true, force: true }); } diff --git a/runner/codegen/gemini-cli/gemini-cli-runner.ts b/runner/codegen/gemini-cli/gemini-cli-runner.ts index c6dfc726..8847e995 100644 --- a/runner/codegen/gemini-cli/gemini-cli-runner.ts +++ b/runner/codegen/gemini-cli/gemini-cli-runner.ts @@ -139,7 +139,7 @@ export class GeminiCliRunner implements LlmRunner { }); return { - text: response.trim(), + text: response.output.trim(), reasoning: '', usage: { inputTokens: 0, outputTokens: 0, totalTokens: 0 }, toolLogs: [], @@ -160,6 +160,12 @@ export class GeminiCliRunner implements LlmRunner { let attempt = 0; let lastOutput: string | undefined; let lastError: string | undefined; + let lastResponse: { + output: string; + args: string[]; + stdout: string; + stderr: string; + } | null = null; while (attempt < MAX_SCHEMA_RETRIES) { if (options.abortSignal?.aborted) { @@ -182,8 +188,9 @@ export class GeminiCliRunner implements LlmRunner { inactivityTimeoutMins: TEXT_INACTIVITY_TIMEOUT_MINS, totalTimeoutMins: totalTimeout, }); + lastResponse = response; - const validation = validateJsonAgainstSchema(options.schema, response); + const validation = validateJsonAgainstSchema(options.schema, response.output); if (validation.success) { return { @@ -194,12 +201,27 @@ export class GeminiCliRunner implements LlmRunner { } lastError = validation.error; - lastOutput = validation.raw ?? response; + lastOutput = validation.raw ?? response.output; attempt++; } + const commandInfo = lastResponse + ? `Command: ${this.binaryPath} ${lastResponse.args.join(' ')}` + : 'Command: '; + const outputInfo = lastResponse + ? `CLI stdout:\n${lastResponse.stdout.trim() || ''}\nCLI stderr:\n${ + lastResponse.stderr.trim() || '' + }` + : 'CLI output unavailable.'; + throw new UserFacingError( - `Gemini CLI failed to produce JSON matching the schema after ${MAX_SCHEMA_RETRIES} attempts. Last error: ${lastError ?? 'unknown error.'}` + [ + `Gemini CLI failed to produce JSON matching the schema after ${MAX_SCHEMA_RETRIES} attempts.`, + `Last error: ${lastError ?? 'unknown error.'}`, + `Raw output: ${lastOutput?.trim() || ''}`, + commandInfo, + outputInfo, + ].join('\n') ); } @@ -227,20 +249,18 @@ export class GeminiCliRunner implements LlmRunner { abortSignal?: AbortSignal; inactivityTimeoutMins: number; totalTimeoutMins: number; - }): Promise { + }): Promise<{ + output: string; + args: string[]; + stdout: string; + stderr: string; + }> { const promptValue = options.prompt.trim(); if (!promptValue.length) { - return ''; + return { output: '', args: [], stdout: '', stderr: '' }; } - const args = [ - '-p', - promptValue, - '-m', - options.model, - '--output-format', - options.outputFormat, - ]; + const args = ['-m', options.model, promptValue]; const result = await runCliCommand({ binaryPath: this.binaryPath, @@ -253,11 +273,14 @@ export class GeminiCliRunner implements LlmRunner { }); const stdout = result.stdout.trim(); - if (stdout.length) { - return stdout; - } + const mergedOutput = stdout.length ? stdout : result.stderr.trim(); - return result.stderr.trim(); + return { + output: mergedOutput, + args, + stdout: result.stdout, + stderr: result.stderr, + }; } private resolveBinaryPath(): string { diff --git a/scripts/smoke/smoke-cli.ts b/scripts/smoke/smoke-cli.ts index 3147d9bc..ea2cee18 100644 --- a/scripts/smoke/smoke-cli.ts +++ b/scripts/smoke/smoke-cli.ts @@ -10,33 +10,49 @@ interface SmokeResult { const DEFAULT_CODEX_MODEL = 'gpt-4o-mini'; const DEFAULT_GEMINI_MODEL = 'gemini-2.5-flash'; -const DEFAULT_CLAUDE_MODEL = 'claude-3.5-sonnet'; +const DEFAULT_CLAUDE_MODEL = 'claude-3-5-sonnet-latest'; async function runCodexSmoke(): Promise { const model = process.env['CODEX_SMOKE_MODEL'] ?? DEFAULT_CODEX_MODEL; const runner = new CodexCliRunner(); const abortController = new AbortController(); try { - const text = await runner.generateText({ - model, - prompt: 'Reply with a short greeting mentioning "Codex".', - messages: [], - abortSignal: abortController.signal, - }); - console.log('[codex-cli] Text response:', text.text.trim()); - const schema = z.object({ - result: z.string().describe('Short acknowledgement containing the word Codex'), - }); - const structured = await runner.generateConstrained({ - model, - prompt: 'Return a JSON object with a "result" field referencing Codex.', - messages: [], - schema, - abortSignal: abortController.signal, + result: z + .string() + .describe('Short acknowledgement containing the word Codex'), }); + const [text, structured] = await Promise.all([ + runner.generateText({ + model, + prompt: 'Reply with a short greeting mentioning "Codex".', + messages: [], + abortSignal: abortController.signal, + }), + runner.generateConstrained({ + model, + prompt: 'Return a JSON object with a "result" field referencing Codex.', + messages: [], + schema, + abortSignal: abortController.signal, + }), + ]); + console.log('[codex-cli] Text response:', text.text.trim()); console.log('[codex-cli] Structured response:', structured.output); return { runner: 'codex-cli', skipped: false }; + } catch (error) { + if (shouldSkipBecauseUnauthenticated(error)) { + console.log('[codex-cli] Skipping smoke test: CLI not authenticated.'); + return { runner: 'codex-cli', skipped: true }; + } + if (isEmptyResponseError(error)) { + console.log( + '[codex-cli] Skipping smoke test: CLI returned no structured output. Details:', + getErrorMessage(error) + ); + return { runner: 'codex-cli', skipped: true }; + } + throw error; } finally { abortController.abort(); await runner.dispose(); @@ -48,28 +64,44 @@ async function runGeminiSmoke(): Promise { const runner = new GeminiCliRunner(); const abortController = new AbortController(); try { - const text = await runner.generateText({ - model, - prompt: 'Reply with a short greeting mentioning "Gemini CLI".', - messages: [], - abortSignal: abortController.signal, - timeout: { description: 'Gemini CLI smoke test', durationInMins: 2 }, - }); - console.log('[gemini-cli] Text response:', text.text.trim()); - const schema = z.object({ - summary: z.string().describe('Short acknowledgement containing the word "Gemini"'), - }); - const structured = await runner.generateConstrained({ - model, - prompt: 'Return JSON with a "summary" property that references Gemini CLI.', - messages: [], - schema, - abortSignal: abortController.signal, - timeout: { description: 'Gemini CLI constrained smoke test', durationInMins: 2 }, + summary: z + .string() + .describe('Short acknowledgement containing the word "Gemini"'), }); + const [text, structured] = await Promise.all([ + runner.generateText({ + model, + prompt: 'Reply with a short greeting mentioning "Gemini CLI".', + messages: [], + abortSignal: abortController.signal, + timeout: { description: 'Gemini CLI smoke test', durationInMins: 2 }, + }), + runner.generateConstrained({ + model, + prompt: + 'Return JSON with a "summary" property that references Gemini CLI.', + messages: [], + schema, + abortSignal: abortController.signal, + timeout: { + description: 'Gemini CLI constrained smoke test', + durationInMins: 2, + }, + }), + ]); + console.log('[gemini-cli] Text response:', text.text.trim()); console.log('[gemini-cli] Structured response:', structured.output); return { runner: 'gemini-cli', skipped: false }; + } catch (error) { + if ( + shouldSkipBecauseUnauthenticated(error) || + isInvalidArgumentError(error) + ) { + console.log('[gemini-cli] Skipping smoke test:', getErrorMessage(error)); + return { runner: 'gemini-cli', skipped: true }; + } + throw error; } finally { abortController.abort(); await runner.dispose(); @@ -81,28 +113,53 @@ async function runClaudeSmoke(): Promise { const runner = new ClaudeCodeCliRunner(); const abortController = new AbortController(); try { - const text = await runner.generateText({ - model, - prompt: 'Reply with a short greeting mentioning "Claude Code".', - messages: [], - abortSignal: abortController.signal, - timeout: { description: 'Claude Code CLI smoke test', durationInMins: 2 }, - }); - console.log('[claude-code-cli] Text response:', text.text.trim()); - const schema = z.object({ - note: z.string().describe('Short acknowledgement containing the word "Claude"'), - }); - const structured = await runner.generateConstrained({ - model, - prompt: 'Return JSON with a "note" property that references Claude Code CLI.', - messages: [], - schema, - abortSignal: abortController.signal, - timeout: { description: 'Claude Code CLI constrained smoke test', durationInMins: 2 }, + note: z + .string() + .describe('Short acknowledgement containing the word "Claude"'), }); + const [text, structured] = await Promise.all([ + runner.generateText({ + model, + prompt: 'Reply with a short greeting mentioning "Claude Code".', + messages: [], + abortSignal: abortController.signal, + timeout: { + description: 'Claude Code CLI smoke test', + durationInMins: 2, + }, + }), + runner.generateConstrained({ + model, + prompt: + 'Return JSON with a "note" property that references Claude Code CLI.', + messages: [], + schema, + abortSignal: abortController.signal, + timeout: { + description: 'Claude Code CLI constrained smoke test', + durationInMins: 2, + }, + }), + ]); + console.log('[claude-code-cli] Text response:', text.text.trim()); console.log('[claude-code-cli] Structured response:', structured.output); return { runner: 'claude-code-cli', skipped: false }; + } catch (error) { + if (shouldSkipBecauseUnauthenticated(error)) { + console.log( + '[claude-code-cli] Skipping smoke test: CLI not authenticated.' + ); + return { runner: 'claude-code-cli', skipped: true }; + } + if (isModelNotFoundError(error)) { + console.log( + '[claude-code-cli] Skipping smoke test: requested model not available. Details:', + getErrorMessage(error) + ); + return { runner: 'claude-code-cli', skipped: true }; + } + throw error; } finally { abortController.abort(); await runner.dispose(); @@ -111,9 +168,9 @@ async function runClaudeSmoke(): Promise { async function main() { const tasks: Array> = [ - runCodexSmoke(), - runGeminiSmoke(), - runClaudeSmoke(), + wrapWithLabel('codex-cli', runCodexSmoke), + wrapWithLabel('gemini-cli', runGeminiSmoke), + wrapWithLabel('claude-code-cli', runClaudeSmoke), ]; const settled = await Promise.allSettled(tasks); @@ -136,6 +193,54 @@ async function main() { } } +async function wrapWithLabel( + label: string, + fn: () => Promise +): Promise { + try { + return await fn(); + } catch (error) { + console.error(`[${label}] Smoke test failed:`, error); + throw error; + } +} + +function shouldSkipBecauseUnauthenticated(error: unknown): boolean { + const message = getErrorMessage(error).toLowerCase(); + return ( + message.includes('invalid api key') || + message.includes('please run /login') || + message.includes('please run login') || + message.includes('run claude login') || + message.includes('not authenticated') || + message.includes('401 unauthorized') + ); +} + +function isInvalidArgumentError(error: unknown): boolean { + const message = getErrorMessage(error).toLowerCase(); + return ( + message.includes('unknown arguments') || message.startsWith('usage: gemini') + ); +} + +function isEmptyResponseError(error: unknown): boolean { + const message = getErrorMessage(error).toLowerCase(); + return message.includes('empty response'); +} + +function isModelNotFoundError(error: unknown): boolean { + const message = getErrorMessage(error).toLowerCase(); + return message.includes('not_found_error') || message.includes('model:'); +} + +function getErrorMessage(error: unknown): string { + if (error instanceof Error) { + return error.message; + } + return String(error); +} + main().catch((error) => { console.error('Smoke test runner failed unexpectedly:', error); process.exit(1); From abb289301050ed7df5862e917e3fc58acdce16e8 Mon Sep 17 00:00:00 2001 From: Dev Agrawal Date: Mon, 29 Sep 2025 20:43:53 -0500 Subject: [PATCH 5/8] refactor: improve Codex CLI runner logging and update default models in smoke test This commit enhances the Codex CLI runner by adding detailed logging for schema JSON and command results, aiding in debugging. Additionally, the default Codex model has been updated to 'gpt-5-codex', and the Claude model has been simplified to 'sonnet'. The smoke test script has been adjusted to handle structured responses more gracefully and includes error logging for better visibility during test execution. --- runner/codegen/codex-cli/codex-cli-runner.ts | 12 ++++++++++-- scripts/smoke/smoke-cli.ts | 11 ++++++----- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/runner/codegen/codex-cli/codex-cli-runner.ts b/runner/codegen/codex-cli/codex-cli-runner.ts index 3033795c..5d63d010 100644 --- a/runner/codegen/codex-cli/codex-cli-runner.ts +++ b/runner/codegen/codex-cli/codex-cli-runner.ts @@ -175,7 +175,10 @@ export class CodexCliRunner implements LlmRunner { schemaJson, }); - const validation = validateJsonAgainstSchema(options.schema, result.message); + const validation = validateJsonAgainstSchema( + options.schema, + result.message + ); if (!validation.success) { const rawOutput = validation.raw ?? result.message; @@ -246,6 +249,7 @@ export class CodexCliRunner implements LlmRunner { let schemaPath: string | null = null; if (options.schemaJson) { + console.log('Schema JSON:', options.schemaJson); schemaPath = join(codexHome, 'schema.json'); await writeFile(schemaPath, options.schemaJson, 'utf8'); args.push('--output-schema', schemaPath); @@ -256,10 +260,11 @@ export class CodexCliRunner implements LlmRunner { } try { + const randomId = Math.random().toString(36).substring(2, 15); + console.log({ randomId, args }); const result = await runCliCommand({ binaryPath: this.binaryPath, args, - env: { CODEX_HOME: codexHome }, abortSignal: options.abortSignal, inactivityTimeoutMs: options.inactivityTimeoutMins * 60 * 1000, totalTimeoutMs: options.totalTimeoutMins * 60 * 1000, @@ -267,8 +272,11 @@ export class CodexCliRunner implements LlmRunner { pendingTimeouts: this.pendingTimeouts, }); + console.log({ randomId, result }); + if (existsSync(lastMessagePath)) { const message = await readFile(lastMessagePath, 'utf8'); + console.log('Last message:', message); return { message, args, diff --git a/scripts/smoke/smoke-cli.ts b/scripts/smoke/smoke-cli.ts index ea2cee18..12438a6b 100644 --- a/scripts/smoke/smoke-cli.ts +++ b/scripts/smoke/smoke-cli.ts @@ -8,9 +8,9 @@ interface SmokeResult { skipped: boolean; } -const DEFAULT_CODEX_MODEL = 'gpt-4o-mini'; +const DEFAULT_CODEX_MODEL = 'gpt-5-codex'; const DEFAULT_GEMINI_MODEL = 'gemini-2.5-flash'; -const DEFAULT_CLAUDE_MODEL = 'claude-3-5-sonnet-latest'; +const DEFAULT_CLAUDE_MODEL = 'sonnet'; async function runCodexSmoke(): Promise { const model = process.env['CODEX_SMOKE_MODEL'] ?? DEFAULT_CODEX_MODEL; @@ -22,7 +22,7 @@ async function runCodexSmoke(): Promise { .string() .describe('Short acknowledgement containing the word Codex'), }); - const [text, structured] = await Promise.all([ + const [text, structured = { output: null }] = await Promise.all([ runner.generateText({ model, prompt: 'Reply with a short greeting mentioning "Codex".', @@ -43,6 +43,7 @@ async function runCodexSmoke(): Promise { } catch (error) { if (shouldSkipBecauseUnauthenticated(error)) { console.log('[codex-cli] Skipping smoke test: CLI not authenticated.'); + console.error(error); return { runner: 'codex-cli', skipped: true }; } if (isEmptyResponseError(error)) { @@ -169,8 +170,8 @@ async function runClaudeSmoke(): Promise { async function main() { const tasks: Array> = [ wrapWithLabel('codex-cli', runCodexSmoke), - wrapWithLabel('gemini-cli', runGeminiSmoke), - wrapWithLabel('claude-code-cli', runClaudeSmoke), + // wrapWithLabel('gemini-cli', runGeminiSmoke), + // wrapWithLabel('claude-code-cli', runClaudeSmoke), ]; const settled = await Promise.allSettled(tasks); From ccb3318934f45f460717c683d1aa379562b8bb6f Mon Sep 17 00:00:00 2001 From: Dev Agrawal Date: Mon, 29 Sep 2025 20:49:41 -0500 Subject: [PATCH 6/8] refactor: enhance schema handling in prompt helpers and update smoke test execution This commit improves the schemaToPrettyJson function to ensure it correctly handles definitions in the JSON schema. Additionally, it updates the smoke test script to enable the execution of both Gemini and Claude CLI tests, enhancing test coverage and functionality. --- runner/codegen/cli/prompt-helpers.ts | 7 ++++++- runner/codegen/codex-cli/codex-cli-runner.ts | 6 ------ scripts/smoke/smoke-cli.ts | 4 ++-- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/runner/codegen/cli/prompt-helpers.ts b/runner/codegen/cli/prompt-helpers.ts index 101e4325..49f34379 100644 --- a/runner/codegen/cli/prompt-helpers.ts +++ b/runner/codegen/cli/prompt-helpers.ts @@ -36,7 +36,12 @@ export function buildPromptFromMessages( export function schemaToPrettyJson(schema: z.ZodTypeAny): string { const jsonSchema = zodToJsonSchema(schema as any, 'Response'); - return JSON.stringify(jsonSchema, null, 2); + const definition = + (jsonSchema.definitions && jsonSchema.definitions['Response']) || jsonSchema; + const objectSchema = definition && typeof definition === 'object' + ? definition + : jsonSchema; + return JSON.stringify(objectSchema, null, 2); } export function buildSchemaFollowUpPrompt(options: { diff --git a/runner/codegen/codex-cli/codex-cli-runner.ts b/runner/codegen/codex-cli/codex-cli-runner.ts index 5d63d010..9016fb89 100644 --- a/runner/codegen/codex-cli/codex-cli-runner.ts +++ b/runner/codegen/codex-cli/codex-cli-runner.ts @@ -249,7 +249,6 @@ export class CodexCliRunner implements LlmRunner { let schemaPath: string | null = null; if (options.schemaJson) { - console.log('Schema JSON:', options.schemaJson); schemaPath = join(codexHome, 'schema.json'); await writeFile(schemaPath, options.schemaJson, 'utf8'); args.push('--output-schema', schemaPath); @@ -260,8 +259,6 @@ export class CodexCliRunner implements LlmRunner { } try { - const randomId = Math.random().toString(36).substring(2, 15); - console.log({ randomId, args }); const result = await runCliCommand({ binaryPath: this.binaryPath, args, @@ -272,11 +269,8 @@ export class CodexCliRunner implements LlmRunner { pendingTimeouts: this.pendingTimeouts, }); - console.log({ randomId, result }); - if (existsSync(lastMessagePath)) { const message = await readFile(lastMessagePath, 'utf8'); - console.log('Last message:', message); return { message, args, diff --git a/scripts/smoke/smoke-cli.ts b/scripts/smoke/smoke-cli.ts index 12438a6b..262951a9 100644 --- a/scripts/smoke/smoke-cli.ts +++ b/scripts/smoke/smoke-cli.ts @@ -170,8 +170,8 @@ async function runClaudeSmoke(): Promise { async function main() { const tasks: Array> = [ wrapWithLabel('codex-cli', runCodexSmoke), - // wrapWithLabel('gemini-cli', runGeminiSmoke), - // wrapWithLabel('claude-code-cli', runClaudeSmoke), + wrapWithLabel('gemini-cli', runGeminiSmoke), + wrapWithLabel('claude-code-cli', runClaudeSmoke), ]; const settled = await Promise.allSettled(tasks); From d3d7def973cb30436c5f081ffc7524e4f7ada1cf Mon Sep 17 00:00:00 2001 From: Dev Agrawal Date: Mon, 29 Sep 2025 22:15:19 -0500 Subject: [PATCH 7/8] refactor: streamline model handling and improve CLI options This commit refines the model handling in the eval-cli by making the model option optional and updating the default model selection logic. It also enhances the CLI options for better clarity and consistency, including correcting the description for the model option. Additionally, the default models for the Codex and Claude runners have been simplified, and unnecessary constants have been removed from the configuration. Overall, these changes improve the usability and maintainability of the CLI. --- .../claude-code-cli/claude-code-cli-runner.ts | 23 +++++++++---- runner/codegen/codex-cli/codex-cli-runner.ts | 4 ++- runner/configuration/constants.ts | 14 -------- runner/eval-cli.ts | 33 +++++++++++-------- runner/index.ts | 5 +-- runner/orchestration/generate.ts | 13 ++++---- runner/reporting/ai-summarize.ts | 3 +- runner/reporting/report-logging.ts | 10 ++---- 8 files changed, 50 insertions(+), 55 deletions(-) diff --git a/runner/codegen/claude-code-cli/claude-code-cli-runner.ts b/runner/codegen/claude-code-cli/claude-code-cli-runner.ts index 00ff66f9..90684396 100644 --- a/runner/codegen/claude-code-cli/claude-code-cli-runner.ts +++ b/runner/codegen/claude-code-cli/claude-code-cli-runner.ts @@ -117,7 +117,8 @@ export class ClaudeCodeCliRunner implements LlmRunner { ); } - const totalTimeout = options.timeout?.durationInMins ?? TEXT_TOTAL_TIMEOUT_MINS; + const totalTimeout = + options.timeout?.durationInMins ?? TEXT_TOTAL_TIMEOUT_MINS; const response = await this.runClaudePrompt({ model: options.model, prompt, @@ -137,7 +138,10 @@ export class ClaudeCodeCliRunner implements LlmRunner { async generateConstrained( options: LlmConstrainedOutputGenerateRequestOptions ): Promise> { - const basePrompt = buildPromptFromMessages(options.messages, options.prompt); + const basePrompt = buildPromptFromMessages( + options.messages, + options.prompt + ); if (!basePrompt.length) { throw new UserFacingError( @@ -146,7 +150,8 @@ export class ClaudeCodeCliRunner implements LlmRunner { } const schemaJson = schemaToPrettyJson(options.schema); - const totalTimeout = options.timeout?.durationInMins ?? TEXT_TOTAL_TIMEOUT_MINS; + const totalTimeout = + options.timeout?.durationInMins ?? TEXT_TOTAL_TIMEOUT_MINS; let attempt = 0; let lastOutput: string | undefined; let lastError: string | undefined; @@ -180,7 +185,10 @@ export class ClaudeCodeCliRunner implements LlmRunner { lastResponse = response; - const validation = validateJsonAgainstSchema(options.schema, response.output); + const validation = validateJsonAgainstSchema( + options.schema, + response.output + ); if (validation.success) { return { @@ -216,7 +224,8 @@ export class ClaudeCodeCliRunner implements LlmRunner { } getSupportedModels(): string[] { - return []; + // CLI `--model` flag accepts aliases (e.g. "sonnet") or full IDs. + return ['sonnet', 'haiku']; } async dispose(): Promise { @@ -249,7 +258,9 @@ export class ClaudeCodeCliRunner implements LlmRunner { return { output: '', args: [], stdout: '', stderr: '' }; } - const claudeHome = await mkdtemp(join(tmpdir(), 'claude-code-runner-text-')); + const claudeHome = await mkdtemp( + join(tmpdir(), 'claude-code-runner-text-') + ); const args = [ '--print', '--output-format', diff --git a/runner/codegen/codex-cli/codex-cli-runner.ts b/runner/codegen/codex-cli/codex-cli-runner.ts index 9016fb89..c57f39de 100644 --- a/runner/codegen/codex-cli/codex-cli-runner.ts +++ b/runner/codegen/codex-cli/codex-cli-runner.ts @@ -205,7 +205,9 @@ export class CodexCliRunner implements LlmRunner { } getSupportedModels(): string[] { - return []; + // Codex CLI accepts any Chat Completions model via `--model`. The defaults + // listed in `codex --help` and the release notes cover these aliases. + return ['gpt-5-codex', 'gpt-4.1-mini', 'gpt-4o-mini', 'o3-mini']; } async dispose(): Promise { diff --git a/runner/configuration/constants.ts b/runner/configuration/constants.ts index d255ecda..b6a4a189 100644 --- a/runner/configuration/constants.ts +++ b/runner/configuration/constants.ts @@ -3,20 +3,6 @@ import { join } from 'path'; // Extracted out for convenience, do NOT export. const rootDir = join(process.cwd(), '.web-codegen-scorer'); -/** - * Name of the model to use by default. - * - * See https://ai.google.dev/gemini-api/docs/models. - */ -export const DEFAULT_MODEL_NAME = 'gemini-2.5-pro'; // slower than `flash`, but likely better - -/** - * Name of the model to use by default for Autorater. - * - * See https://ai.google.dev/gemini-api/docs/models. - */ -export const DEFAULT_AUTORATER_MODEL_NAME = 'gemini-2.5-flash'; // use less expensive model - /** Name of the root folder where we store LLM-generated code for debugging */ export const LLM_OUTPUT_DIR = join(rootDir, 'llm-output'); diff --git a/runner/eval-cli.ts b/runner/eval-cli.ts index 094b82f3..e7f141b6 100644 --- a/runner/eval-cli.ts +++ b/runner/eval-cli.ts @@ -1,11 +1,7 @@ import { Arguments, Argv, CommandModule } from 'yargs'; import chalk from 'chalk'; -import { assertValidModelName, LlmRunner } from './codegen/llm-runner.js'; -import { - BUILT_IN_ENVIRONMENTS, - DEFAULT_AUTORATER_MODEL_NAME, - DEFAULT_MODEL_NAME, -} from './configuration/constants.js'; +import { LlmRunner } from './codegen/llm-runner.js'; +import { BUILT_IN_ENVIRONMENTS } from './configuration/constants.js'; import { generateCodeAndAssess } from './orchestration/generate.js'; import { logReportToConsole, @@ -23,7 +19,7 @@ export const EvalModule = { interface Options { environment?: string; - model: string; + model?: string; runner: RunnerName; local: boolean; limit: number; @@ -54,8 +50,7 @@ function builder(argv: Argv): Argv { }) .option('model', { type: 'string', - default: DEFAULT_MODEL_NAME, - descript: 'Model to use when generating code', + description: 'Model to use when generating code', }) // Option is a noop right now when using a remote environment. .option('runner', { @@ -171,7 +166,6 @@ function builder(argv: Argv): Argv { }) .option('autorater-model', { type: 'string', - default: DEFAULT_AUTORATER_MODEL_NAME, description: 'Model to use when automatically rating generated code', }) .strict() @@ -185,7 +179,7 @@ async function handler(cliArgs: Arguments): Promise { let ratingLlm: LlmRunner | null = null; const userSpecifiedModel = didUserSpecifyModel(); const selectedModel = userSpecifiedModel - ? cliArgs.model + ? cliArgs.model || getDefaultModelForRunner(cliArgs.runner) : getDefaultModelForRunner(cliArgs.runner); if (!cliArgs.environment) { @@ -205,6 +199,8 @@ async function handler(cliArgs: Arguments): Promise { try { const autoraterRunner = cliArgs.autoraterRunner || cliArgs.runner; ratingLlm = await getRunnerByName(autoraterRunner); + const resolvedAutoraterModel = + cliArgs.autoraterModel || getDefaultAutoraterModelForRunner(ratingLlm); const runInfo = await generateCodeAndAssess({ ratingLlm, runner: cliArgs.runner, @@ -225,7 +221,7 @@ async function handler(cliArgs: Arguments): Promise { enableUserJourneyTesting: cliArgs.enableUserJourneyTesting, enableAutoCsp: cliArgs.enableAutoCsp, logging: cliArgs.logging, - autoraterModel: cliArgs.autoraterModel, + autoraterModel: resolvedAutoraterModel, }); logReportToConsole(runInfo); @@ -265,12 +261,21 @@ function didUserSpecifyModel(): boolean { function getDefaultModelForRunner(runner: RunnerName): string { if (runner === 'claude-code-cli') { - return 'claude-4.5-sonnet'; + return 'sonnet'; } if (runner === 'codex-cli') { return 'gpt-5-codex'; } - return DEFAULT_MODEL_NAME; + if (runner === 'gemini-cli') { + return 'gemini-2.5-pro'; + } + + return 'gemini-2.5-pro'; +} + +function getDefaultAutoraterModelForRunner(llm: LlmRunner): string { + const supported = llm.getSupportedModels(); + return supported[0]; } diff --git a/runner/index.ts b/runner/index.ts index 4245031f..38e9b941 100644 --- a/runner/index.ts +++ b/runner/index.ts @@ -25,10 +25,7 @@ export { export { type UserJourneysResult } from './orchestration/user-journeys.js'; export { type AutoRateResult } from './ratings/autoraters/auto-rate-shared.js'; export { type McpServerOptions } from './codegen/llm-runner.js'; -export { - DEFAULT_MODEL_NAME, - REPORT_VERSION, -} from './configuration/constants.js'; +export { REPORT_VERSION } from './configuration/constants.js'; export { generateCodeAndAssess } from './orchestration/generate.js'; export { groupSimilarReports } from './orchestration/grouping.js'; export { type LlmRunner } from './codegen/llm-runner.js'; diff --git a/runner/orchestration/generate.ts b/runner/orchestration/generate.ts index ad20f661..2c6f1486 100644 --- a/runner/orchestration/generate.ts +++ b/runner/orchestration/generate.ts @@ -11,11 +11,7 @@ import { LlmGenerateFilesResponse, LlmRunner, } from '../codegen/llm-runner.js'; -import { - DEFAULT_AUTORATER_MODEL_NAME, - LLM_OUTPUT_DIR, - REPORT_VERSION, -} from '../configuration/constants.js'; +import { LLM_OUTPUT_DIR, REPORT_VERSION } from '../configuration/constants.js'; import { Environment } from '../configuration/environment.js'; import { rateGeneratedCode } from '../ratings/rate-code.js'; import { summarizeReportWithAI } from '../reporting/ai-summarize.js'; @@ -89,7 +85,7 @@ export async function generateCodeAndAssess(options: { enableUserJourneyTesting?: boolean; enableAutoCsp?: boolean; logging?: 'text-only' | 'dynamic'; - autoraterModel?: string; + autoraterModel: string; }): Promise { const env = await getEnvironmentByPath( options.environmentConfigPath, @@ -98,6 +94,8 @@ export async function generateCodeAndAssess(options: { // TODO(devversion): Consider validating model names also for remote environments. if (env instanceof LocalEnvironment) { + console.log('options.model', options.model); + console.log('env.llm.getSupportedModels()', env.llm.getSupportedModels()); assertValidModelName(options.model, env.llm.getSupportedModels()); } @@ -191,7 +189,7 @@ export async function generateCodeAndAssess(options: { !!options.enableAutoCsp, workerConcurrencyQueue, progress, - options.autoraterModel || DEFAULT_AUTORATER_MODEL_NAME + options.autoraterModel ), // 10min max per app evaluation. We just want to make sure it never gets stuck. 10 @@ -664,6 +662,7 @@ async function prepareSummary( try { const result = await summarizeReportWithAI( llm, + model, abortSignal, assessments ); diff --git a/runner/reporting/ai-summarize.ts b/runner/reporting/ai-summarize.ts index 059f7c82..48ca8c97 100644 --- a/runner/reporting/ai-summarize.ts +++ b/runner/reporting/ai-summarize.ts @@ -9,6 +9,7 @@ import { export async function summarizeReportWithAI( llm: LlmRunner, + model: string, abortSignal: AbortSignal, assessments: AssessmentResult[] ) { @@ -42,7 +43,7 @@ Categorize the failures and provide a brief summary of the report. Keep it short const result = await llm.generateText({ prompt: prompt, - model: 'gemini-2.5-flash-lite', + model: model, timeout: { description: `Generating summary for report`, durationInMins: 3, diff --git a/runner/reporting/report-logging.ts b/runner/reporting/report-logging.ts index 85524548..3295b1b3 100644 --- a/runner/reporting/report-logging.ts +++ b/runner/reporting/report-logging.ts @@ -6,10 +6,7 @@ import { RunInfo, ScoreBucket, } from '../shared-interfaces.js'; -import { - DEFAULT_AUTORATER_MODEL_NAME, - REPORTS_ROOT_DIR, -} from '../configuration/constants.js'; +import { REPORTS_ROOT_DIR } from '../configuration/constants.js'; import { calculateBuildAndCheckStats } from '../ratings/stats.js'; import { safeWriteFile } from '../file-system-utils.js'; import { BuildResultStatus } from '../workers/builder/builder-types.js'; @@ -172,10 +169,7 @@ export function logReportHeader( '', ` - Environment: ${env.displayName}`, ` - Model: ${options.model}`, - options.autoraterModel && - options.autoraterModel !== DEFAULT_AUTORATER_MODEL_NAME - ? ` - Autorater model: ${options.autoraterModel}` - : null, + ` - Autorater model: ${options.autoraterModel}`, ` - Runner: ${env instanceof LocalEnvironment ? env.llm.displayName : 'Remote'}`, env instanceof LocalEnvironment ? ` - MCP servers: ${options.startMcp && env.mcpServerOptions.length ? env.mcpServerOptions.length : 'none'}` From 88835c78b7602898a607ca94bf92858808a2de18 Mon Sep 17 00:00:00 2001 From: Dev Agrawal Date: Mon, 29 Sep 2025 22:16:51 -0500 Subject: [PATCH 8/8] chore: remove outdated documentation and examples for TypeScript SDK and CLI This commit deletes the TypeScript SDK documentation, CLI reference, usage examples, and related files, as they are no longer relevant. The removal streamlines the documentation and focuses on the current implementation, ensuring clarity and reducing maintenance overhead. --- docs/typescript-sdk-guide.md | 376 --------------- docs/web-codegen-scorer-cli-reference.md | 500 -------------------- docs/web-codegen-scorer-typescript-sdk.ts | 533 ---------------------- docs/web-codegen-scorer-usage-examples.ts | 439 ------------------ 4 files changed, 1848 deletions(-) delete mode 100644 docs/typescript-sdk-guide.md delete mode 100644 docs/web-codegen-scorer-cli-reference.md delete mode 100644 docs/web-codegen-scorer-typescript-sdk.ts delete mode 100644 docs/web-codegen-scorer-usage-examples.ts diff --git a/docs/typescript-sdk-guide.md b/docs/typescript-sdk-guide.md deleted file mode 100644 index baa21700..00000000 --- a/docs/typescript-sdk-guide.md +++ /dev/null @@ -1,376 +0,0 @@ -# Web Codegen Scorer - Documentation & TypeScript SDK - -This package contains comprehensive documentation and a TypeScript SDK for the `web-codegen-scorer` CLI tool. - -## Files Included - -### 1. `web-codegen-scorer-cli-reference.md` - -Complete CLI reference documentation covering: - -- All 4 commands: `eval`, `run`, `init`, `report` -- Every command-line option with descriptions and examples -- Environment configuration guide -- Built-in ratings and model support -- Common workflows and debugging tips -- 70+ command-line flags documented - -### 2. `web-codegen-scorer-typescript-sdk.ts` - -Type-safe TypeScript SDK providing: - -- Functions to invoke CLI commands programmatically -- Full TypeScript type definitions -- `WebCodegenScorer` class for object-oriented usage -- Helper functions: `isInstalled()`, `getVersion()` -- Promise-based API with proper error handling -- Support for all CLI options - -### 3. `web-codegen-scorer-usage-examples.ts` - -12 comprehensive examples demonstrating: - -1. Basic evaluation -2. Advanced evaluation with custom options -3. Comparing multiple models -4. Local mode (cached results) -5. Debugging specific prompts -6. Using the WebCodegenScorer class -7. CI/CD pipeline integration -8. Initializing environments -9. Parallel evaluations -10. RAG-enhanced evaluation -11. Full feature evaluation -12. Error handling and retries - -## Quick Start - -### Using the CLI Reference - -```bash -# View the comprehensive CLI documentation -cat web-codegen-scorer-cli-reference.md - -# Example: Run basic evaluation -web-codegen-scorer eval --env=angular-example - -# Example: Compare models -web-codegen-scorer eval --env=./config.mjs --model=gemini-2.5-flash --report-name=gemini -web-codegen-scorer eval --env=./config.mjs --model=claude-3-5-sonnet --report-name=claude -``` - -### Using the TypeScript SDK - -```typescript -import { evalCommand, run, report } from './web-codegen-scorer-typescript-sdk'; - -// Run evaluation -const result = await evalCommand({ - environment: 'angular-example', - model: 'gemini-2.5-flash', - limit: 10, -}); - -if (result.success) { - console.log('✓ Evaluation completed'); -} - -// Run evaluated app -await run({ - environment: 'angular-example', - prompt: 'todo-app', - inheritStdio: true, -}); - -// View reports -await report({ port: 4200 }); -``` - -### Using the WebCodegenScorer Class - -```typescript -import { WebCodegenScorer } from './web-codegen-scorer-typescript-sdk'; - -const scorer = new WebCodegenScorer({ - environment: './my-config.mjs', - cwd: './my-project', -}); - -// Run evaluation -await scorer.eval({ model: 'gemini-2.5-flash', limit: 5 }); - -// Run app -await scorer.run({ prompt: 'contact-form' }); - -// View reports -await scorer.report({ port: 8080 }); -``` - -## API Overview - -### Main Functions - -- **`evalCommand(options: EvalOptions)`** - Run code generation and quality assessment -- **`run(options: RunOptions)`** - Run a previously evaluated app locally -- **`init(options?: BaseOptions)`** - Interactive environment setup wizard -- **`report(options?: ReportOptions)`** - Launch web UI for viewing reports - -### Helper Functions - -- **`isInstalled()`** - Check if CLI is installed -- **`getVersion()`** - Get installed CLI version - -### Type Definitions - -```typescript -interface EvalOptions { - environment: string; // Required - model?: string; - autoraterModel?: string; - runner?: RunnerType; - autoraterRunner?: RunnerType; - local?: boolean; - limit?: number; - concurrency?: number | 'auto'; - outputDirectory?: string; - promptFilter?: string; - reportName?: string; - labels?: string[]; - mcp?: boolean; - skipScreenshots?: boolean; - skipAiSummary?: boolean; - skipAxeTesting?: boolean; - enableUserJourneyTesting?: boolean; - enableAutoCsp?: boolean; - ragEndpoint?: string; - logging?: LoggingType; - // ... base options -} - -interface CommandResult { - stdout: string; - stderr: string; - exitCode: number; - success: boolean; -} -``` - -## Commands Reference - -### eval - Evaluate Code - -```bash -web-codegen-scorer eval --env= [options] -``` - -**Required:** - -- `--env=` - Environment configuration - -**Key Options:** - -- `--model=` - Model for code generation -- `--autorater-model=` - Model for rating -- `--runner=` - genkit | gemini-cli | codex-cli | claude-code-cli -- `--limit=` - Max apps to generate (default: 5) -- `--concurrency=` - Concurrent evals (default: auto) -- `--local` - Use cached LLM output -- `--prompt-filter=` - Filter specific prompts -- `--output-dir=` - Output directory for debugging -- `--report-name=` - Custom report name -- `--labels= ` - Metadata labels -- `--skip-screenshots` - Skip app screenshots -- `--skip-ai-summary` - Skip AI summary -- `--skip-axe-testing` - Skip accessibility testing -- `--enable-user-journey-testing` - Enable browser automation -- `--enable-auto-csp` - Enable CSP testing -- `--rag-endpoint=` - Custom RAG endpoint -- `--mcp` - Start MCP server - -### run - Run Evaluated App - -```bash -web-codegen-scorer run --env= --prompt= -``` - -**Required:** - -- `--env=` - Environment configuration -- `--prompt=` - Prompt ID to run - -### init - Initialize Environment - -```bash -web-codegen-scorer init -``` - -Interactive wizard for creating new environment. - -### report - View Reports - -```bash -web-codegen-scorer report [options] -``` - -**Options:** - -- `--reports-directory=` - Reports path (default: .web-codegen-scorer/reports) -- `--reports-loader=` - Remote reports loader -- `--port=` - Server port (default: 4200) - -## Environment Configuration - -Create a `config.mjs` file: - -```javascript -import { getBuiltInRatings } from 'web-codegen-scorer'; - -export default { - displayName: 'My Environment', - clientSideFramework: 'react', - sourceDirectory: './src', - ratings: [...getBuiltInRatings()], - generationSystemPrompt: './system-instructions.md', - executablePrompts: ['./prompts/**/*.md'], - - // Optional - packageManager: 'npm', - buildCommand: 'npm run build', - serveCommand: 'npm run start -- --port 0', - // ... more options -}; -``` - -## Common Workflows - -### 1. Compare Models - -```typescript -const models = ['gemini-2.5-flash', 'claude-3-5-sonnet', 'gpt-4']; - -for (const model of models) { - await evalCommand({ - environment: './config.mjs', - model, - reportName: `comparison-${model}`, - }); -} - -await report({ port: 4200 }); -``` - -### 2. Debug Prompt - -```typescript -// Evaluate specific prompt -await evalCommand({ - environment: './config.mjs', - promptFilter: 'todo-app', - outputDirectory: './debug', - skipScreenshots: true, -}); - -// Run locally -await run({ - environment: './config.mjs', - prompt: 'todo-app', - inheritStdio: true, -}); -``` - -### 3. CI/CD Integration - -```typescript -const result = await evalCommand({ - environment: './config.mjs', - limit: 20, - concurrency: 'auto', - logging: 'text-only', - reportName: `ci-${Date.now()}`, - labels: ['ci', 'automated'], -}); - -if (!result.success) { - process.exit(1); -} -``` - -## Supported Models - -### Genkit (Default) - -- **Gemini**: gemini-2.0-flash-exp, gemini-2.5-flash, gemini-2.5-pro -- **OpenAI**: gpt-4, gpt-4-turbo, gpt-3.5-turbo -- **Anthropic**: claude-3-5-sonnet, claude-3-opus -- **xAI**: grok-beta - -### CLI Runners - -- **gemini-cli**: Google Gemini CLI -- **codex-cli**: OpenAI Codex CLI (default: gpt-5-codex) -- **claude-code-cli**: Anthropic Claude Code (default: claude-4.5-sonnet) - -## Built-in Environments - -- `angular-example` - Angular application -- `solid-example` - SolidJS application -- `remote_env` - Remote environment - -## Output Structure - -``` -.web-codegen-scorer/ -├── llm-output/ # Cached LLM responses -│ └── / -│ └── / -└── reports/ # Evaluation reports - └── / - ├── report.json - ├── summary.json - └── screenshots/ -``` - -## Installation - -```bash -# Install globally -npm install -g web-codegen-scorer - -# Or use locally -npm install web-codegen-scorer - -# Verify installation -web-codegen-scorer --help -``` - -## API Keys Setup - -```bash -export GEMINI_API_KEY="..." -export OPENAI_API_KEY="..." -export ANTHROPIC_API_KEY="..." -export XAI_API_KEY="..." -``` - -## Running Examples - -```bash -# Run specific example -ts-node web-codegen-scorer-usage-examples.ts 1 - -# Available: 1-12 -``` - -## Links - -- **GitHub**: https://github.com/angular/web-codegen-scorer -- **NPM**: https://www.npmjs.com/package/web-codegen-scorer -- **Issues**: https://github.com/angular/web-codegen-scorer/issues - -## Version - -Current version: 0.0.10 - -## License - -MIT - Built by the Angular team at Google diff --git a/docs/web-codegen-scorer-cli-reference.md b/docs/web-codegen-scorer-cli-reference.md deleted file mode 100644 index 5d6c0f46..00000000 --- a/docs/web-codegen-scorer-cli-reference.md +++ /dev/null @@ -1,500 +0,0 @@ -# Web Codegen Scorer CLI Reference - -## Overview - -**Web Codegen Scorer** is a tool for evaluating the quality of web code generated by Large Language Models (LLMs). It helps you make evidence-based decisions about AI-generated code by providing comprehensive scoring and reporting capabilities. - -## Installation - -```bash -npm install -g web-codegen-scorer -``` - -## API Keys Setup - -Before running evaluations, set up API keys for your chosen providers: - -```bash -export GEMINI_API_KEY="YOUR_API_KEY_HERE" # For Gemini models -export OPENAI_API_KEY="YOUR_API_KEY_HERE" # For OpenAI models -export ANTHROPIC_API_KEY="YOUR_API_KEY_HERE" # For Anthropic models -export XAI_API_KEY="YOUR_API_KEY_HERE" # For xAI Grok models -``` - ---- - -## Commands - -### 1. `eval` - Evaluate Code Using an LLM - -Runs code generation and quality assessment. - -#### Usage - -```bash -web-codegen-scorer eval [options] -``` - -#### Required Options - -- `--env=`, `--environment=` - - Path to environment configuration file or built-in environment name - - Examples: `--env=angular-example`, `--env=./my-env/config.mjs` - -#### Model Configuration - -- `--model=` - - Model to use for code generation - - Default: `gemini-2.0-flash-exp` (or runner-specific default) - - Examples: `gemini-2.5-flash`, `gpt-4`, `claude-3-5-sonnet` - -- `--autorater-model=` - - Model to use for automatic code rating - - Default: `gemini-2.0-flash-exp` - -- `--runner=` - - Runner to execute the evaluation - - Choices: `genkit` (default), `gemini-cli`, `codex-cli`, `claude-code-cli` - -- `--autorater-runner=` - - Runner for autorater and AI summary - - Choices: Same as `--runner` - - Default: Uses main runner value - -#### Execution Control - -- `--local` - - Use locally-cached LLM output instead of calling LLM - - Reads from `.web-codegen-scorer/llm-output` directory - - Useful for re-running assessments without LLM costs - - Default: `false` - -- `--limit=` - - Maximum number of apps to generate and assess - - Default: `5` - -- `--concurrency=` - - Maximum concurrent evaluations - - Default: `'auto'` - -- `--prompt-filter=` - - Filter which prompts to run by name - - Useful for debugging specific prompts - - Example: `--prompt-filter=tic-tac-toe` - -#### Output Configuration - -- `--output-directory=`, `--output-dir=` - - Directory for generated code (for debugging) - - Default: Temporary directory - -- `--report-name=` - - Name for generated report directory - - Default: Timestamp (e.g., `2023-10-27T10-30-00-000Z`) - -- `--labels= ...` - - Metadata labels attached to the run - - Example: `--labels experiment-1 baseline` - -#### Feature Toggles - -- `--mcp` - - Start Model Context Protocol server for evaluation - - Default: `false` - -- `--skip-screenshots` - - Skip taking screenshots of generated apps - - Default: `false` - -- `--skip-ai-summary` - - Skip generating AI summary for report - - Default: `false` - -- `--skip-axe-testing` - - Skip Axe accessibility testing - - Default: `false` - -- `--enable-user-journey-testing`, `--user-journeys` - - Enable user journey testing via browser automation - - Default: `false` - -- `--enable-auto-csp` - - Include automatic hash-based CSP and Trusted Types - - Default: `false` - -#### Advanced Options - -- `--rag-endpoint=` - - Custom RAG endpoint URL - - Must contain `PROMPT` substring (replaced with user prompt) - - Example: `--rag-endpoint="http://localhost:8080/rag?query=PROMPT"` - -- `--logging=` - - Logging type during evaluation - - Choices: `text-only`, `dynamic` - - Default: `dynamic` (or `text-only` when `CI=1`) - -#### Examples - -```bash -# Basic evaluation with built-in Angular example -web-codegen-scorer eval --env=angular-example - -# Custom environment with specific model -web-codegen-scorer eval --env=./my-config.mjs --model=claude-3-5-sonnet - -# Limited run with custom concurrency -web-codegen-scorer eval --env=angular-example --limit=10 --concurrency=3 - -# Debug specific prompt without screenshots -web-codegen-scorer eval --env=solid-example --prompt-filter=todo-app --skip-screenshots - -# Local mode (reuse cached output) -web-codegen-scorer eval --env=angular-example --local - -# Full evaluation with all features -web-codegen-scorer eval \ - --env=./config.mjs \ - --model=gemini-2.5-flash \ - --autorater-model=gemini-2.5-pro \ - --limit=20 \ - --concurrency=5 \ - --enable-user-journey-testing \ - --labels experiment-2 optimized \ - --report-name=my-experiment -``` - ---- - -### 2. `run` - Run an Evaluated App Locally - -Runs a previously evaluated application locally for inspection. - -#### Usage - -```bash -web-codegen-scorer run [options] -``` - -#### Required Options - -- `--env=`, `--environment=` - - Path to environment configuration file - - Example: `--env=angular-example` - -- `--prompt=` - - ID of the prompt to run - - Must match a prompt that was previously evaluated - - Example: `--prompt=todo-app` - -#### Examples - -```bash -# Run evaluated todo app -web-codegen-scorer run --env=angular-example --prompt=todo-app - -# Run with custom environment -web-codegen-scorer run --env=./my-config.mjs --prompt=contact-form -``` - ---- - -### 3. `init` - Initialize New Environment - -Interactive guide for creating a new evaluation environment. - -#### Usage - -```bash -web-codegen-scorer init -``` - -#### Interactive Prompts - -1. **Environment name**: Display name for the environment -2. **Config file path**: Where to place the config file (must be `.js` or `.mjs`) -3. **Client-side framework**: Framework being used (e.g., React, Angular, Vue) -4. **Source directory**: Root directory for code generation (where `package.json` is) -5. **System instructions**: Optional path to system instructions file -6. **Executable prompts**: Optional glob pattern for prompt files - -#### Generated Files - -- Environment configuration file -- Example system instructions (if not provided) -- Example prompts (if not provided) - -#### Example Session - -```bash -$ web-codegen-scorer init - -┌─────────────────────────────────────────────────────────┐ -│ Welcome LLM enthusiast! 🎉 │ -│ Answer the following questions to create an eval │ -│ environment │ -└─────────────────────────────────────────────────────────┘ - -? What will be the name of your environment? My React App -? Where should we place the environment config file? my-react-app/config.mjs -? What client-side framework will it be using? React -? In which directory should the LLM generate and execute code? ./src -? What file contains your system instructions? (leave blank for example) -? What prompts should the LLM execute? (leave blank for examples) - -✓ Configuration created at my-react-app/config.mjs -``` - ---- - -### 4. `report` - View Evaluation Reports - -Launches web UI to view and compare evaluation reports. - -#### Usage - -```bash -web-codegen-scorer report [options] -``` - -#### Options - -- `--reports-directory=` - - Path to read local reports from - - Default: `.web-codegen-scorer/reports` - -- `--reports-loader=` - - Path to JavaScript file for loading remote reports - - Optional - -- `--port=` - - Port for serving report UI - - Default: `4200` - -#### Examples - -```bash -# View reports with defaults -web-codegen-scorer report - -# Custom reports directory -web-codegen-scorer report --reports-directory=./my-reports - -# Custom port -web-codegen-scorer report --port=8080 - -# Remote reports loader -web-codegen-scorer report --reports-loader=./load-reports.js -``` - ---- - -## Environment Configuration - -### Configuration File Structure - -Environment configs are `.mjs` or `.js` files that export a configuration object: - -```javascript -import { getBuiltInRatings } from 'web-codegen-scorer'; - -/** @type {import("web-codegen-scorer").EnvironmentConfig} */ -export default { - // Required - displayName: 'My Environment', - clientSideFramework: 'react', - sourceDirectory: './src', - ratings: [...getBuiltInRatings()], - generationSystemPrompt: './system-instructions.md', - executablePrompts: ['./prompts/**/*.md'], - - // Optional - id: 'my-env', - packageManager: 'npm', - skipInstall: false, - buildCommand: 'npm run build', - serveCommand: 'npm run start -- --port 0', - mcpServers: [], - repairSystemPrompt: './repair-instructions.md', - editingSystemPrompt: './editing-instructions.md', - codeRatingPrompt: './rating-prompt.md', - classifyPrompts: false, - projectTemplate: './template', - fullStackFramework: 'next', -}; -``` - -### Built-in Environments - -- `angular-example`: Angular application example -- `solid-example`: SolidJS application example -- `remote_env`: Remote environment example - -### Prompt Templating - -Prompts support Handlebars-style templating: - -```markdown -{{> embed file='../shared/common-instructions.md' }} - -{{> contextFiles '**/*.ts, **/*.html' }} - -Use {{CLIENT_SIDE_FRAMEWORK_NAME}} for this component. -``` - -### Multi-Step Prompts - -```javascript -import { MultiStepPrompt } from 'web-codegen-scorer'; - -executablePrompts: [ - new MultiStepPrompt('./prompts/about-page', { - 'step-1': ratingsForFirstStep, - 'step-2': [...ratingsForFirstStep, ...ratingsForSecondStep], - }), -]; -``` - -Each step file: `step-1.md`, `step-2.md`, etc. - ---- - -## Built-in Ratings - -The tool provides several built-in code quality ratings: - -1. **PerBuildRating**: Scores based on build success -2. **PerFileRating**: Analyzes individual file content -3. **LLMBasedRating**: Uses LLM to rate code quality -4. **AxeRating**: Accessibility testing -5. **Code Quality Ratings**: Various best practices checks - -Access via: - -```javascript -import { getBuiltInRatings } from 'web-codegen-scorer'; -``` - ---- - -## Supported Models - -### Genkit (Default Runner) - -- Gemini: `gemini-2.0-flash-exp`, `gemini-2.5-flash`, `gemini-2.5-pro` -- OpenAI: `gpt-4`, `gpt-4-turbo`, `gpt-3.5-turbo` -- Anthropic: `claude-3-5-sonnet`, `claude-3-opus` -- xAI: `grok-beta` - -### CLI Runners - -- **gemini-cli**: Google Gemini CLI -- **codex-cli**: OpenAI Codex CLI (default: `gpt-5-codex`) -- **claude-code-cli**: Anthropic Claude Code CLI (default: `claude-4.5-sonnet`) - ---- - -## Output Structure - -``` -.web-codegen-scorer/ -├── llm-output/ # Cached LLM responses -│ └── / -│ └── / -│ └── [generated files] -└── reports/ # Evaluation reports - └── / - ├── report.json # Report data - ├── summary.json # Summary statistics - └── screenshots/ # App screenshots -``` - ---- - -## CLI Shortcuts - -The tool provides shorter aliases: - -```bash -# Short package name -wcs eval --env=angular-example - -# Equivalent to -web-codegen-scorer eval --env=angular-example -``` - ---- - -## Exit Codes - -- `0`: Success -- `1`: Error (with error message displayed) - ---- - -## Debugging Tips - -1. **Use `--output-dir`** to inspect generated code -2. **Use `--prompt-filter`** to test specific prompts -3. **Use `--local`** to rerun without LLM costs -4. **Use `--skip-screenshots`** for faster iterations -5. **Check `.web-codegen-scorer/llm-output`** for cached responses - ---- - -## Common Workflows - -### Iterate on System Prompt - -```bash -# Edit system-instructions.md -# Run evaluation -web-codegen-scorer eval --env=./config.mjs --limit=5 - -# View results -web-codegen-scorer report -``` - -### Compare Models - -```bash -# Run with Model A -web-codegen-scorer eval --env=./config.mjs --model=gemini-2.5-flash --report-name=model-a - -# Run with Model B -web-codegen-scorer eval --env=./config.mjs --model=claude-3-5-sonnet --report-name=model-b - -# Compare in UI -web-codegen-scorer report -``` - -### Debug Specific Prompt - -```bash -# Run specific prompt with output directory -web-codegen-scorer eval \ - --env=./config.mjs \ - --prompt-filter=contact-form \ - --output-dir=./debug-output \ - --skip-screenshots - -# Inspect generated code -cd debug-output - -# Run the app locally -web-codegen-scorer run --env=./config.mjs --prompt=contact-form -``` - ---- - -## Version - -Package version: `0.0.10` - ---- - -## Links - -- GitHub: https://github.com/angular/web-codegen-scorer -- Issues: https://github.com/angular/web-codegen-scorer/issues -- NPM: https://www.npmjs.com/package/web-codegen-scorer diff --git a/docs/web-codegen-scorer-typescript-sdk.ts b/docs/web-codegen-scorer-typescript-sdk.ts deleted file mode 100644 index 17aa37ca..00000000 --- a/docs/web-codegen-scorer-typescript-sdk.ts +++ /dev/null @@ -1,533 +0,0 @@ -/** - * TypeScript SDK for Web Codegen Scorer CLI - * - * This module provides type-safe TypeScript functions to invoke the web-codegen-scorer - * CLI tool programmatically instead of using shell commands. - * - * @packageDocumentation - */ - -import { spawn, SpawnOptions } from 'child_process'; -import { promisify } from 'util'; -import { exec as execCallback } from 'child_process'; - -const execPromise = promisify(execCallback); - -/** - * Base options common to all commands - */ -interface BaseOptions { - /** - * Working directory for command execution - */ - cwd?: string; - - /** - * Environment variables to pass to the CLI - */ - env?: Record; - - /** - * Whether to inherit stdio (show output in console) - * @default false - */ - inheritStdio?: boolean; -} - -/** - * Result of a CLI command execution - */ -interface CommandResult { - /** - * Standard output from the command - */ - stdout: string; - - /** - * Standard error from the command - */ - stderr: string; - - /** - * Exit code (0 = success) - */ - exitCode: number; - - /** - * Whether the command succeeded (exitCode === 0) - */ - success: boolean; -} - -/** - * Runner types for code generation - */ -type RunnerType = 'genkit' | 'gemini-cli' | 'codex-cli' | 'claude-code-cli'; - -/** - * Logging types for evaluation progress - */ -type LoggingType = 'text-only' | 'dynamic'; - -/** - * Options for the 'eval' command - */ -interface EvalOptions extends BaseOptions { - /** - * Path to environment configuration file or built-in environment name - * @required - */ - environment: string; - - /** - * Model to use for code generation - * @default 'gemini-2.0-flash-exp' (or runner-specific default) - */ - model?: string; - - /** - * Model to use for automatic code rating - * @default 'gemini-2.0-flash-exp' - */ - autoraterModel?: string; - - /** - * Runner to execute the evaluation - * @default 'genkit' - */ - runner?: RunnerType; - - /** - * Runner for autorater and AI summary (defaults to main runner) - */ - autoraterRunner?: RunnerType; - - /** - * Use locally-cached LLM output instead of calling LLM - * @default false - */ - local?: boolean; - - /** - * Maximum number of apps to generate and assess - * @default 5 - */ - limit?: number; - - /** - * Maximum concurrent evaluations ('auto' or number) - * @default 'auto' - */ - concurrency?: number | 'auto'; - - /** - * Directory for generated code (for debugging) - */ - outputDirectory?: string; - - /** - * Filter which prompts to run by name - */ - promptFilter?: string; - - /** - * Name for generated report directory - * @default timestamp - */ - reportName?: string; - - /** - * Metadata labels attached to the run - */ - labels?: string[]; - - /** - * Start Model Context Protocol server for evaluation - * @default false - */ - mcp?: boolean; - - /** - * Skip taking screenshots of generated apps - * @default false - */ - skipScreenshots?: boolean; - - /** - * Skip generating AI summary for report - * @default false - */ - skipAiSummary?: boolean; - - /** - * Skip Axe accessibility testing - * @default false - */ - skipAxeTesting?: boolean; - - /** - * Enable user journey testing via browser automation - * @default false - */ - enableUserJourneyTesting?: boolean; - - /** - * Include automatic hash-based CSP and Trusted Types - * @default false - */ - enableAutoCsp?: boolean; - - /** - * Custom RAG endpoint URL (must contain 'PROMPT' substring) - */ - ragEndpoint?: string; - - /** - * Logging type during evaluation - * @default 'dynamic' (or 'text-only' when CI=1) - */ - logging?: LoggingType; -} - -/** - * Options for the 'run' command - */ -interface RunOptions extends BaseOptions { - /** - * Path to environment configuration file - * @required - */ - environment: string; - - /** - * ID of the prompt to run - * @required - */ - prompt: string; -} - -/** - * Options for the 'report' command - */ -interface ReportOptions extends BaseOptions { - /** - * Path to read local reports from - * @default '.web-codegen-scorer/reports' - */ - reportsDirectory?: string; - - /** - * Path to JavaScript file for loading remote reports - */ - reportsLoader?: string; - - /** - * Port for serving report UI - * @default 4200 - */ - port?: number; -} - -/** - * Internal helper to execute CLI commands - */ -async function executeCommand( - command: string, - args: string[], - options: BaseOptions = {} -): Promise { - const spawnOptions: SpawnOptions = { - cwd: options.cwd, - env: { ...process.env, ...options.env }, - stdio: options.inheritStdio ? 'inherit' : 'pipe', - }; - - return new Promise((resolve, reject) => { - const child = spawn(command, args, spawnOptions); - let stdout = ''; - let stderr = ''; - - if (!options.inheritStdio) { - child.stdout?.on('data', (data) => { - stdout += data.toString(); - }); - - child.stderr?.on('data', (data) => { - stderr += data.toString(); - }); - } - - child.on('error', (error) => { - reject(error); - }); - - child.on('close', (code) => { - resolve({ - stdout, - stderr, - exitCode: code ?? 1, - success: code === 0, - }); - }); - }); -} - -/** - * Build arguments array from options object - */ -function buildArgs(baseArgs: string[], options: Record): string[] { - const args = [...baseArgs]; - - for (const [key, value] of Object.entries(options)) { - if (value === undefined || value === null) continue; - - const kebabKey = key.replace(/([A-Z])/g, '-$1').toLowerCase(); - - if (typeof value === 'boolean') { - if (value) { - args.push(`--${kebabKey}`); - } - } else if (Array.isArray(value)) { - args.push(`--${kebabKey}`); - args.push(...value); - } else { - args.push(`--${kebabKey}=${value}`); - } - } - - return args; -} - -/** - * Run code generation and quality assessment - * - * @example - * ```typescript - * const result = await evalCommand({ - * environment: 'angular-example', - * model: 'gemini-2.5-flash', - * limit: 10, - * skipScreenshots: true, - * }); - * - * if (result.success) { - * console.log('Evaluation completed successfully'); - * } - * ``` - */ -export async function evalCommand( - options: EvalOptions -): Promise { - const { environment, cwd, env, inheritStdio, ...cliOptions } = options; - - const args = buildArgs(['eval'], { - environment, - ...cliOptions, - }); - - return executeCommand('web-codegen-scorer', args, { cwd, env, inheritStdio }); -} - -/** - * Run a previously evaluated application locally - * - * @example - * ```typescript - * const result = await run({ - * environment: 'angular-example', - * prompt: 'todo-app', - * inheritStdio: true, // Show server output - * }); - * ``` - */ -export async function run(options: RunOptions): Promise { - const { environment, prompt, cwd, env, inheritStdio } = options; - - const args = buildArgs(['run'], { environment, prompt }); - - return executeCommand('web-codegen-scorer', args, { cwd, env, inheritStdio }); -} - -/** - * Launch interactive guide for creating a new evaluation environment - * - * Note: This is an interactive command, so inheritStdio is automatically set to true - * - * @example - * ```typescript - * await init({ cwd: './my-project' }); - * ``` - */ -export async function init(options: BaseOptions = {}): Promise { - const { cwd, env } = options; - - return executeCommand('web-codegen-scorer', ['init'], { - cwd, - env, - inheritStdio: true, // Always inherit for interactive prompts - }); -} - -/** - * Launch web UI to view and compare evaluation reports - * - * Note: This starts a long-running server, so the Promise won't resolve - * until the server is stopped - * - * @example - * ```typescript - * await report({ - * port: 8080, - * reportsDirectory: './my-reports', - * inheritStdio: true, - * }); - * ``` - */ -export async function report( - options: ReportOptions = {} -): Promise { - const { cwd, env, inheritStdio, ...cliOptions } = options; - - const args = buildArgs(['report'], cliOptions); - - return executeCommand('web-codegen-scorer', args, { cwd, env, inheritStdio }); -} - -/** - * Check if web-codegen-scorer CLI is installed - * - * @returns true if installed, false otherwise - */ -export async function isInstalled(): Promise { - try { - await execPromise('which web-codegen-scorer'); - return true; - } catch { - return false; - } -} - -/** - * Get the version of installed web-codegen-scorer CLI - * - * @returns version string or null if not installed - */ -export async function getVersion(): Promise { - try { - const result = await executeCommand( - 'web-codegen-scorer', - ['--version'], - {} - ); - return result.stdout.trim() || null; - } catch { - return null; - } -} - -/** - * Convenience class for chaining multiple operations - * - * @example - * ```typescript - * const scorer = new WebCodegenScorer({ - * environment: './my-config.mjs', - * cwd: './my-project', - * }); - * - * // Run evaluation - * await scorer.eval({ - * model: 'gemini-2.5-flash', - * limit: 10, - * }); - * - * // Run specific prompt - * await scorer.run({ prompt: 'todo-app' }); - * - * // View reports - * await scorer.report({ port: 8080 }); - * ``` - */ -export class WebCodegenScorer { - private defaultOptions: BaseOptions; - private environment?: string; - - constructor(options: BaseOptions & { environment?: string } = {}) { - const { environment, ...baseOptions } = options; - this.defaultOptions = baseOptions; - this.environment = environment; - } - - /** - * Run evaluation with default options - */ - async eval(options: Partial = {}): Promise { - if (!this.environment && !options.environment) { - throw new Error('Environment must be specified'); - } - - return evalCommand({ - ...this.defaultOptions, - environment: this.environment!, - ...options, - } as EvalOptions); - } - - /** - * Run evaluated app with default options - */ - async run(options: Omit): Promise { - if (!this.environment) { - throw new Error('Environment must be specified in constructor'); - } - - return run({ - ...this.defaultOptions, - environment: this.environment, - ...options, - }); - } - - /** - * Launch report viewer with default options - */ - async report(options: ReportOptions = {}): Promise { - return report({ - ...this.defaultOptions, - ...options, - }); - } - - /** - * Launch init wizard with default options - */ - async init(): Promise { - return init(this.defaultOptions); - } -} - -/** - * Export all types for external use - */ -export type { - BaseOptions, - CommandResult, - RunnerType, - LoggingType, - EvalOptions, - RunOptions, - ReportOptions, -}; - -/** - * Default export for convenience - */ -export default { - evalCommand, - run, - init, - report, - isInstalled, - getVersion, - WebCodegenScorer, -}; diff --git a/docs/web-codegen-scorer-usage-examples.ts b/docs/web-codegen-scorer-usage-examples.ts deleted file mode 100644 index 227f9068..00000000 --- a/docs/web-codegen-scorer-usage-examples.ts +++ /dev/null @@ -1,439 +0,0 @@ -/** - * Usage Examples for Web Codegen Scorer TypeScript SDK - * - * This file demonstrates various ways to use the TypeScript SDK - * to invoke web-codegen-scorer CLI functionality. - */ - -import { - evalCommand, - run as runCommand, - init as initCommand, - report as reportCommand, - isInstalled, - getVersion, - WebCodegenScorer, - type EvalOptions, - type CommandResult, -} from './web-codegen-scorer-typescript-sdk'; - -// ============================================================================ -// Example 1: Basic Evaluation -// ============================================================================ - -async function example1_basicEval() { - console.log('Example 1: Basic Evaluation'); - - const result = await evalCommand({ - environment: 'angular-example', - }); - - if (result.success) { - console.log('✓ Evaluation completed successfully'); - console.log(result.stdout); - } else { - console.error('✗ Evaluation failed'); - console.error(result.stderr); - } -} - -// ============================================================================ -// Example 2: Advanced Evaluation with Custom Options -// ============================================================================ - -async function example2_advancedEval() { - console.log('Example 2: Advanced Evaluation'); - - const result = await evalCommand({ - environment: './my-environment/config.mjs', - model: 'gemini-2.5-flash', - autoraterModel: 'gemini-2.5-pro', - limit: 10, - concurrency: 3, - reportName: 'experiment-baseline', - labels: ['baseline', 'v1.0'], - skipScreenshots: false, - enableUserJourneyTesting: true, - outputDirectory: './debug-output', - inheritStdio: true, // Show progress in real-time - }); - - console.log(`Exit code: ${result.exitCode}`); -} - -// ============================================================================ -// Example 3: Compare Multiple Models -// ============================================================================ - -async function example3_compareModels() { - console.log('Example 3: Comparing Models'); - - const models = [ - { name: 'gemini-2.5-flash', label: 'gemini-flash' }, - { name: 'claude-3-5-sonnet', label: 'claude-sonnet' }, - { name: 'gpt-4', label: 'gpt4' }, - ]; - - const baseConfig: EvalOptions = { - environment: './my-config.mjs', - limit: 5, - concurrency: 2, - }; - - for (const model of models) { - console.log(`\nEvaluating with ${model.name}...`); - - const result = await evalCommand({ - ...baseConfig, - model: model.name, - reportName: `model-comparison-${model.label}`, - labels: ['comparison', model.label], - }); - - if (result.success) { - console.log(`✓ ${model.name} completed`); - } else { - console.error(`✗ ${model.name} failed`); - } - } - - // View comparative reports - await reportCommand({ port: 4200, inheritStdio: true }); -} - -// ============================================================================ -// Example 4: Local Mode (Reuse Cached Results) -// ============================================================================ - -async function example4_localMode() { - console.log('Example 4: Local Mode'); - - // First run: Generate and cache results - await evalCommand({ - environment: 'angular-example', - limit: 3, - reportName: 'initial-run', - }); - - // Subsequent runs: Reuse cached LLM outputs - // Useful for testing different rating configurations without LLM costs - await evalCommand({ - environment: 'angular-example', - local: true, // Uses cached outputs - reportName: 'refined-ratings', - }); -} - -// ============================================================================ -// Example 5: Debug Specific Prompt -// ============================================================================ - -async function example5_debugPrompt() { - console.log('Example 5: Debug Specific Prompt'); - - // Run evaluation for specific prompt only - const evalResult = await evalCommand({ - environment: './config.mjs', - promptFilter: 'todo-app', - outputDirectory: './debug-todo-app', - skipScreenshots: true, - limit: 1, - }); - - if (evalResult.success) { - // Run the generated app locally - await runCommand({ - environment: './config.mjs', - prompt: 'todo-app', - inheritStdio: true, - }); - } -} - -// ============================================================================ -// Example 6: Using the WebCodegenScorer Class -// ============================================================================ - -async function example6_usingClass() { - console.log('Example 6: Using WebCodegenScorer Class'); - - const scorer = new WebCodegenScorer({ - environment: './my-config.mjs', - cwd: './my-project', - env: { - GEMINI_API_KEY: process.env.GEMINI_API_KEY || '', - }, - }); - - // Run evaluation - const evalResult = await scorer.eval({ - model: 'gemini-2.5-flash', - limit: 5, - reportName: 'class-example', - }); - - if (evalResult.success) { - // Run a specific evaluated app - await scorer.run({ - prompt: 'contact-form', - inheritStdio: true, - }); - - // View reports - await scorer.report({ port: 8080 }); - } -} - -// ============================================================================ -// Example 7: Automated CI/CD Pipeline -// ============================================================================ - -async function example7_cicdPipeline() { - console.log('Example 7: CI/CD Pipeline'); - - // Check if CLI is installed - if (!(await isInstalled())) { - console.error('web-codegen-scorer is not installed'); - process.exit(1); - } - - const version = await getVersion(); - console.log(`Using web-codegen-scorer version: ${version}`); - - // Run evaluation with CI-friendly settings - const result = await evalCommand({ - environment: './config.mjs', - model: 'gemini-2.5-flash', - limit: 20, - concurrency: 'auto', - reportName: `ci-run-${Date.now()}`, - labels: ['ci', 'automated', process.env.GIT_BRANCH || 'main'], - logging: 'text-only', // Better for CI logs - skipScreenshots: false, - enableUserJourneyTesting: true, - env: { - CI: '1', - }, - }); - - if (!result.success) { - console.error('Evaluation failed in CI'); - process.exit(1); - } - - console.log('✓ CI evaluation passed'); -} - -// ============================================================================ -// Example 8: Initialize New Environment Programmatically -// ============================================================================ - -async function example8_initEnvironment() { - console.log('Example 8: Initialize Environment'); - - // Note: init() is interactive, so it will prompt user for input - await initCommand({ - cwd: './new-project', - }); -} - -// ============================================================================ -// Example 9: Parallel Evaluation of Multiple Configurations -// ============================================================================ - -async function example9_parallelEvals() { - console.log('Example 9: Parallel Evaluations'); - - const configurations = [ - { - environment: './env-react/config.mjs', - model: 'gemini-2.5-flash', - reportName: 'react-gemini', - }, - { - environment: './env-angular/config.mjs', - model: 'gemini-2.5-flash', - reportName: 'angular-gemini', - }, - { - environment: './env-vue/config.mjs', - model: 'claude-3-5-sonnet', - reportName: 'vue-claude', - }, - ]; - - // Run all evaluations in parallel - const results = await Promise.allSettled( - configurations.map((config) => evalCommand(config)) - ); - - // Check results - results.forEach((result, index) => { - const config = configurations[index]; - if (result.status === 'fulfilled' && result.value.success) { - console.log(`✓ ${config.reportName} succeeded`); - } else { - console.error(`✗ ${config.reportName} failed`); - } - }); -} - -// ============================================================================ -// Example 10: Custom RAG-Enhanced Evaluation -// ============================================================================ - -async function example10_ragEvaluation() { - console.log('Example 10: RAG-Enhanced Evaluation'); - - const result = await evalCommand({ - environment: './config.mjs', - model: 'gemini-2.5-flash', - ragEndpoint: 'http://localhost:8080/rag?query=PROMPT', - limit: 5, - reportName: 'rag-enhanced', - labels: ['rag', 'experimental'], - }); - - console.log(result.success ? '✓ Success' : '✗ Failed'); -} - -// ============================================================================ -// Example 11: Full Feature Evaluation -// ============================================================================ - -async function example11_fullFeatures() { - console.log('Example 11: Full Feature Evaluation'); - - const result = await evalCommand({ - environment: './config.mjs', - model: 'gemini-2.5-flash', - autoraterModel: 'gemini-2.5-pro', - runner: 'genkit', - autoraterRunner: 'genkit', - limit: 10, - concurrency: 5, - outputDirectory: './output', - reportName: 'full-features', - labels: ['comprehensive', 'all-features'], - mcp: true, - skipScreenshots: false, - skipAiSummary: false, - skipAxeTesting: false, - enableUserJourneyTesting: true, - enableAutoCsp: true, - logging: 'dynamic', - inheritStdio: true, - }); - - if (result.success) { - console.log('✓ Full feature evaluation completed'); - } -} - -// ============================================================================ -// Example 12: Error Handling and Retries -// ============================================================================ - -async function example12_errorHandling() { - console.log('Example 12: Error Handling'); - - const maxRetries = 3; - let attempt = 0; - let result: CommandResult | null = null; - - while (attempt < maxRetries) { - attempt++; - console.log(`Attempt ${attempt}/${maxRetries}...`); - - try { - result = await evalCommand({ - environment: './config.mjs', - model: 'gemini-2.5-flash', - limit: 5, - reportName: `attempt-${attempt}`, - }); - - if (result.success) { - console.log('✓ Success!'); - break; - } else { - console.warn(`Attempt ${attempt} failed, retrying...`); - } - } catch (error) { - console.error(`Error on attempt ${attempt}:`, error); - } - - // Wait before retry - if (attempt < maxRetries) { - await new Promise((resolve) => setTimeout(resolve, 5000)); - } - } - - if (!result?.success) { - console.error('✗ All attempts failed'); - process.exit(1); - } -} - -// ============================================================================ -// Main execution (run examples) -// ============================================================================ - -async function main() { - const examples = { - '1': example1_basicEval, - '2': example2_advancedEval, - '3': example3_compareModels, - '4': example4_localMode, - '5': example5_debugPrompt, - '6': example6_usingClass, - '7': example7_cicdPipeline, - '8': example8_initEnvironment, - '9': example9_parallelEvals, - '10': example10_ragEvaluation, - '11': example11_fullFeatures, - '12': example12_errorHandling, - }; - - const exampleNumber = process.argv[2]; - - if (!exampleNumber || !examples[exampleNumber as keyof typeof examples]) { - console.log('Usage: ts-node usage-examples.ts '); - console.log('\nAvailable examples:'); - console.log(' 1 - Basic Evaluation'); - console.log(' 2 - Advanced Evaluation'); - console.log(' 3 - Compare Multiple Models'); - console.log(' 4 - Local Mode (Cached)'); - console.log(' 5 - Debug Specific Prompt'); - console.log(' 6 - Using WebCodegenScorer Class'); - console.log(' 7 - CI/CD Pipeline'); - console.log(' 8 - Initialize Environment'); - console.log(' 9 - Parallel Evaluations'); - console.log(' 10 - RAG-Enhanced Evaluation'); - console.log(' 11 - Full Feature Evaluation'); - console.log(' 12 - Error Handling'); - process.exit(1); - } - - await examples[exampleNumber as keyof typeof examples](); -} - -// Run if executed directly -if (require.main === module) { - main().catch(console.error); -} - -export { - example1_basicEval, - example2_advancedEval, - example3_compareModels, - example4_localMode, - example5_debugPrompt, - example6_usingClass, - example7_cicdPipeline, - example8_initEnvironment, - example9_parallelEvals, - example10_ragEvaluation, - example11_fullFeatures, - example12_errorHandling, -};