From c2e403ae0be2b288ea7a1288156a9b5f381b17d6 Mon Sep 17 00:00:00 2001 From: smartinellibenedetti <139791797+smartinellibenedetti@users.noreply.github.com> Date: Wed, 19 Aug 2026 00:26:46 -0600 Subject: [PATCH 1/6] Migrate to MCP TypeScript SDK v2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Runs the official v1-to-v2 codemod (Server/Client packages, string-literal request handler methods) plus the manual fixes it can't automate: bumps zod to v4 (required by v2) and fixes the resulting z.record() signature and ZodError.issues changes, types tools/call and prompts/get handlers against the new strict CallToolResult/GetPromptResult schemas, fixes prompts/get error paths that returned a non-spec-compliant isError/content shape, and replaces zod-to-json-schema (incompatible with zod v4 — it was silently emitting empty schemas) with zod's built-in z.toJSONSchema. Co-Authored-By: Claude Sonnet 5 --- package-lock.json | 192 +++++++++++++++++- package.json | 6 +- .../integration-server-tool-gating.test.ts | 5 +- src/index.ts | 107 ++++------ src/tools/api.ts | 4 +- src/tools/jobs.ts | 2 +- src/tools/resources.ts | 2 +- 7 files changed, 238 insertions(+), 80 deletions(-) diff --git a/package-lock.json b/package-lock.json index 414e2ac..5f22c1a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,11 +10,11 @@ "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { - "@modelcontextprotocol/sdk": "1.30.0", + "@modelcontextprotocol/client": "^2.0.0", + "@modelcontextprotocol/server": "^2.0.0", "marked": "^18.0.0", "yaml": "2.9.0", - "zod": "^3.23.8", - "zod-to-json-schema": "^3.25.0" + "zod": "^4.2.0" }, "bin": { "rundeck-mcp": "dist/index.js" @@ -634,6 +634,7 @@ "version": "2.0.12", "resolved": "https://npm.artifacts.pd-internal.com/npm/@hono/node-server/-/node-server-2.0.12.tgz", "integrity": "sha512-eWpQYr67tqJLeaSUl0Q+TquuYfUdTibpOJlUMV2FfUP7+KqCC5TufnwnlXL6mobZBJbGAYRd7ZvEBDCbLInjhg==", + "dev": true, "license": "MIT", "engines": { "node": ">=20" @@ -1226,6 +1227,55 @@ "react-dom": "^18 || ^19" } }, + "node_modules/@mcp-ui/client/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://npm.artifacts.pd-internal.com/npm/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/@modelcontextprotocol/client": { + "version": "2.0.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@modelcontextprotocol/client/-/client-2.0.0.tgz", + "integrity": "sha512-8f1OghQ2rjzIOfqgUCP+8GiUWqRs89njoWLNqAe8kWmDePv3s1fZXseej+QXemssEuuOvLLmLO/kqM3IQHtISw==", + "license": "MIT", + "dependencies": { + "@modelcontextprotocol/core": "2.0.0", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "jose": "^6.1.3", + "pkce-challenge": "^5.0.0", + "zod": "^4.2.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@modelcontextprotocol/client/node_modules/pkce-challenge": { + "version": "5.0.1", + "resolved": "https://npm.artifacts.pd-internal.com/npm/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@modelcontextprotocol/core": { + "version": "2.0.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@modelcontextprotocol/core/-/core-2.0.0.tgz", + "integrity": "sha512-pJCEwGG7Lfr/+PQp9ZTwKXNeO5wzbfKL7H3MYpCorM4oFBoQrdjnBgEoqG+RjhsvS1FKrDbKux+M1HhlnGWqcA==", + "license": "MIT", + "dependencies": { + "zod": "^4.2.0" + }, + "engines": { + "node": ">=20" + } + }, "node_modules/@modelcontextprotocol/ext-apps": { "version": "1.7.4", "resolved": "https://npm.artifacts.pd-internal.com/npm/@modelcontextprotocol/ext-apps/-/ext-apps-1.7.4.tgz", @@ -1342,6 +1392,16 @@ "mcp-inspector-client": "bin/start.js" } }, + "node_modules/@modelcontextprotocol/inspector-client/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://npm.artifacts.pd-internal.com/npm/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/@modelcontextprotocol/inspector-server": { "version": "1.0.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/@modelcontextprotocol/inspector-server/-/inspector-server-1.0.0.tgz", @@ -1363,6 +1423,16 @@ "mcp-inspector-server": "build/index.js" } }, + "node_modules/@modelcontextprotocol/inspector-server/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://npm.artifacts.pd-internal.com/npm/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/@modelcontextprotocol/inspector/node_modules/concurrently": { "version": "9.2.4", "resolved": "https://npm.artifacts.pd-internal.com/npm/concurrently/-/concurrently-9.2.4.tgz", @@ -1388,10 +1458,21 @@ "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" } }, + "node_modules/@modelcontextprotocol/inspector/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://npm.artifacts.pd-internal.com/npm/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/@modelcontextprotocol/sdk": { "version": "1.30.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/@modelcontextprotocol/sdk/-/sdk-1.30.0.tgz", "integrity": "sha512-xKd8OIzlqNzcqcNumGAa6g+PW2kjD5vrpcKOnfldAUPP3j7lnqMPwlTXQm8gF+UwH72z0lqaRbjr9hqGz0eITA==", + "dev": true, "license": "MIT", "dependencies": { "@hono/node-server": "^1.19.9 || ^2.0.5", @@ -1432,6 +1513,7 @@ "version": "8.20.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/ajv/-/ajv-8.20.0.tgz", "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -1448,17 +1530,32 @@ "version": "1.0.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, "license": "MIT" }, "node_modules/@modelcontextprotocol/sdk/node_modules/pkce-challenge": { "version": "5.0.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/pkce-challenge/-/pkce-challenge-5.0.1.tgz", "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=16.20.0" } }, + "node_modules/@modelcontextprotocol/server": { + "version": "2.0.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@modelcontextprotocol/server/-/server-2.0.0.tgz", + "integrity": "sha512-YhHWdHfpFMQfd0prsEnxKeS3Qz3ytIGmsS0sth4KDjnacIT7hxk6hXHkJ9KysxlkvTM+WZAtQbbcUhdoP4Hvtw==", + "license": "MIT", + "dependencies": { + "@modelcontextprotocol/core": "2.0.0", + "zod": "^4.2.0" + }, + "engines": { + "node": ">=20" + } + }, "node_modules/@napi-rs/wasm-runtime": { "version": "1.2.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.1.tgz", @@ -2880,6 +2977,7 @@ "version": "2.0.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/accepts/-/accepts-2.0.0.tgz", "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "dev": true, "license": "MIT", "dependencies": { "mime-types": "^3.0.0", @@ -2936,6 +3034,7 @@ "version": "3.0.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/ajv-formats/-/ajv-formats-3.0.1.tgz", "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "dev": true, "license": "MIT", "dependencies": { "ajv": "^8.0.0" @@ -2953,6 +3052,7 @@ "version": "8.20.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/ajv/-/ajv-8.20.0.tgz", "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "dev": true, "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -2969,6 +3069,7 @@ "version": "1.0.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, "license": "MIT" }, "node_modules/ansi-escapes": { @@ -3061,6 +3162,7 @@ "version": "1.0.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/async-function/-/async-function-1.0.0.tgz", "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -3070,6 +3172,7 @@ "version": "1.0.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/async-generator-function/-/async-generator-function-1.0.0.tgz", "integrity": "sha512-+NAXNqgCrB95ya4Sr66i1CL2hqLVckAk7xwRYWdcm39/ELQ6YNn1aw5r0bdQtqNZgQpEWzc5yc/igXc7aL5SLA==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -3211,6 +3314,7 @@ "version": "2.3.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/body-parser/-/body-parser-2.3.0.tgz", "integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==", + "dev": true, "license": "MIT", "dependencies": { "bytes": "^3.1.2", @@ -3235,6 +3339,7 @@ "version": "2.0.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/content-type/-/content-type-2.0.0.tgz", "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -3352,6 +3457,7 @@ "version": "3.1.2", "resolved": "https://npm.artifacts.pd-internal.com/npm/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -3361,6 +3467,7 @@ "version": "1.0.2", "resolved": "https://npm.artifacts.pd-internal.com/npm/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -3374,6 +3481,7 @@ "version": "1.0.4", "resolved": "https://npm.artifacts.pd-internal.com/npm/call-bound/-/call-bound-1.0.4.tgz", "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -3821,6 +3929,7 @@ "version": "1.1.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/content-disposition/-/content-disposition-1.1.0.tgz", "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -3834,6 +3943,7 @@ "version": "1.0.5", "resolved": "https://npm.artifacts.pd-internal.com/npm/content-type/-/content-type-1.0.5.tgz", "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -3850,6 +3960,7 @@ "version": "0.7.2", "resolved": "https://npm.artifacts.pd-internal.com/npm/cookie/-/cookie-0.7.2.tgz", "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -3859,6 +3970,7 @@ "version": "1.2.2", "resolved": "https://npm.artifacts.pd-internal.com/npm/cookie-signature/-/cookie-signature-1.2.2.tgz", "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.6.0" @@ -3868,6 +3980,7 @@ "version": "2.8.6", "resolved": "https://npm.artifacts.pd-internal.com/npm/cors/-/cors-2.8.6.tgz", "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "dev": true, "license": "MIT", "dependencies": { "object-assign": "^4", @@ -3916,6 +4029,7 @@ "version": "4.4.3", "resolved": "https://npm.artifacts.pd-internal.com/npm/debug/-/debug-4.4.3.tgz", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -4001,6 +4115,7 @@ "version": "2.0.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -4037,6 +4152,7 @@ "version": "1.0.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -4058,6 +4174,7 @@ "version": "1.1.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, "license": "MIT" }, "node_modules/electron-to-chromium": { @@ -4091,6 +4208,7 @@ "version": "2.0.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/encodeurl/-/encodeurl-2.0.0.tgz", "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -4110,6 +4228,7 @@ "version": "1.0.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -4119,6 +4238,7 @@ "version": "1.3.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -4128,6 +4248,7 @@ "version": "1.1.2", "resolved": "https://npm.artifacts.pd-internal.com/npm/es-object-atoms/-/es-object-atoms-1.1.2.tgz", "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -4150,6 +4271,7 @@ "version": "1.0.3", "resolved": "https://npm.artifacts.pd-internal.com/npm/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, "license": "MIT" }, "node_modules/escape-string-regexp": { @@ -4180,6 +4302,7 @@ "version": "1.8.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -4262,6 +4385,7 @@ "version": "5.2.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/express/-/express-5.2.1.tgz", "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "dev": true, "license": "MIT", "dependencies": { "accepts": "^2.0.0", @@ -4305,6 +4429,7 @@ "version": "8.5.2", "resolved": "https://npm.artifacts.pd-internal.com/npm/express-rate-limit/-/express-rate-limit-8.5.2.tgz", "integrity": "sha512-5Kb34ipNX694DH48vN9irak1Qx30nb0PLYHXfJgw4YEjiC3ZEmZJhwOp+VfiCYwFzvFTdB9QkArYS5kXa2cx2A==", + "dev": true, "license": "MIT", "dependencies": { "ip-address": "^10.2.0" @@ -4323,6 +4448,7 @@ "version": "3.1.3", "resolved": "https://npm.artifacts.pd-internal.com/npm/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, "license": "MIT" }, "node_modules/fast-json-stable-stringify": { @@ -4336,6 +4462,7 @@ "version": "4.1.2", "resolved": "https://npm.artifacts.pd-internal.com/npm/fast-uri/-/fast-uri-4.1.2.tgz", "integrity": "sha512-TyGmBcbDTZXcb2cj5MV89DrF42DKvb3y5DDUNh95iO+IMeAzMkVSxK1PZRrRIpc9yg8U2GhGdbofNa0LS/a4Bw==", + "dev": true, "funding": [ { "type": "github", @@ -4399,6 +4526,7 @@ "version": "2.1.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/finalhandler/-/finalhandler-2.1.1.tgz", "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "dev": true, "license": "MIT", "dependencies": { "debug": "^4.4.0", @@ -4477,6 +4605,7 @@ "version": "0.2.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -4486,6 +4615,7 @@ "version": "2.0.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/fresh/-/fresh-2.0.0.tgz", "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -4516,6 +4646,7 @@ "version": "1.1.2", "resolved": "https://npm.artifacts.pd-internal.com/npm/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4525,6 +4656,7 @@ "version": "2.0.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/generator-function/-/generator-function-2.0.1.tgz", "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -4567,6 +4699,7 @@ "version": "1.3.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/get-intrinsic/-/get-intrinsic-1.3.1.tgz", "integrity": "sha512-fk1ZVEeOX9hVZ6QzoBNEC55+Ucqg4sTVwrVuigZhuRPESVFpMyXnd3sbXvPOwp7Y9riVyANiqhEuRF0G1aVSeQ==", + "dev": true, "license": "MIT", "dependencies": { "async-function": "^1.0.0", @@ -4614,6 +4747,7 @@ "version": "1.0.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", @@ -4674,6 +4808,7 @@ "version": "1.2.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -4725,6 +4860,7 @@ "version": "1.1.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -4737,6 +4873,7 @@ "version": "2.0.4", "resolved": "https://npm.artifacts.pd-internal.com/npm/hasown/-/hasown-2.0.4.tgz", "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -4749,6 +4886,7 @@ "version": "4.12.34", "resolved": "https://npm.artifacts.pd-internal.com/npm/hono/-/hono-4.12.34.tgz", "integrity": "sha512-GqXJqY/xJkJmuloTrnV1ZEXG3fqte+VjkUqoRNZXcrUidiUOP4fMSIHHY4tsqZBK++kVyWmt/AAfSUuy57/eSA==", + "dev": true, "license": "MIT", "engines": { "node": ">=16.9.0" @@ -4765,6 +4903,7 @@ "version": "2.0.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/http-errors/-/http-errors-2.0.1.tgz", "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, "license": "MIT", "dependencies": { "depd": "~2.0.0", @@ -4795,6 +4934,7 @@ "version": "0.7.3", "resolved": "https://npm.artifacts.pd-internal.com/npm/iconv-lite/-/iconv-lite-0.7.3.tgz", "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", + "dev": true, "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -4859,6 +4999,7 @@ "version": "2.0.4", "resolved": "https://npm.artifacts.pd-internal.com/npm/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, "license": "ISC" }, "node_modules/interpret": { @@ -4875,6 +5016,7 @@ "version": "10.3.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/ip-address/-/ip-address-10.3.1.tgz", "integrity": "sha512-1e9d3kb97NHJTIJDZW9rKqW2h6+dFa50Dy0fpPSMQp2ADje5gvKsXmdiK6dwY5t76TaTt5+P5N1Y/LoToIxP6g==", + "dev": true, "license": "MIT", "engines": { "node": ">= 12" @@ -4884,6 +5026,7 @@ "version": "1.9.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.10" @@ -5017,6 +5160,7 @@ "version": "4.0.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/is-promise/-/is-promise-4.0.0.tgz", "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "dev": true, "license": "MIT" }, "node_modules/is-stream": { @@ -5938,6 +6082,7 @@ "version": "8.0.2", "resolved": "https://npm.artifacts.pd-internal.com/npm/json-schema-typed/-/json-schema-typed-8.0.2.tgz", "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", + "dev": true, "license": "BSD-2-Clause" }, "node_modules/json5": { @@ -6085,6 +6230,7 @@ "version": "1.1.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -6094,6 +6240,7 @@ "version": "1.1.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/media-typer/-/media-typer-1.1.0.tgz", "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -6103,6 +6250,7 @@ "version": "2.0.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/merge-descriptors/-/merge-descriptors-2.0.0.tgz", "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", + "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -6122,6 +6270,7 @@ "version": "1.54.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/mime-db/-/mime-db-1.54.0.tgz", "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -6131,6 +6280,7 @@ "version": "3.0.2", "resolved": "https://npm.artifacts.pd-internal.com/npm/mime-types/-/mime-types-3.0.2.tgz", "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "dev": true, "license": "MIT", "dependencies": { "mime-db": "^1.54.0" @@ -6190,6 +6340,7 @@ "version": "2.1.3", "resolved": "https://npm.artifacts.pd-internal.com/npm/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, "license": "MIT" }, "node_modules/napi-postinstall": { @@ -6219,6 +6370,7 @@ "version": "1.0.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/negotiator/-/negotiator-1.0.0.tgz", "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -6418,6 +6570,7 @@ "version": "4.1.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -6427,6 +6580,7 @@ "version": "1.13.4", "resolved": "https://npm.artifacts.pd-internal.com/npm/object-inspect/-/object-inspect-1.13.4.tgz", "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -6439,6 +6593,7 @@ "version": "2.4.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, "license": "MIT", "dependencies": { "ee-first": "1.1.1" @@ -6451,6 +6606,7 @@ "version": "1.4.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, "license": "ISC", "dependencies": { "wrappy": "1" @@ -6576,6 +6732,7 @@ "version": "1.3.3", "resolved": "https://npm.artifacts.pd-internal.com/npm/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -6652,6 +6809,7 @@ "version": "8.4.2", "resolved": "https://npm.artifacts.pd-internal.com/npm/path-to-regexp/-/path-to-regexp-8.4.2.tgz", "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "dev": true, "license": "MIT", "funding": { "type": "opencollective", @@ -6754,6 +6912,7 @@ "version": "2.0.7", "resolved": "https://npm.artifacts.pd-internal.com/npm/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, "license": "MIT", "dependencies": { "forwarded": "0.2.0", @@ -6801,6 +6960,7 @@ "version": "6.15.3", "resolved": "https://npm.artifacts.pd-internal.com/npm/qs/-/qs-6.15.3.tgz", "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "es-define-property": "^1.0.1", @@ -6817,6 +6977,7 @@ "version": "1.3.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/range-parser/-/range-parser-1.3.0.tgz", "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -6830,6 +6991,7 @@ "version": "3.0.2", "resolved": "https://npm.artifacts.pd-internal.com/npm/raw-body/-/raw-body-3.0.2.tgz", "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", + "dev": true, "license": "MIT", "dependencies": { "bytes": "~3.1.2", @@ -7006,6 +7168,7 @@ "version": "2.0.2", "resolved": "https://npm.artifacts.pd-internal.com/npm/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -7060,6 +7223,7 @@ "version": "2.2.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/router/-/router-2.2.0.tgz", "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "dev": true, "license": "MIT", "dependencies": { "debug": "^4.4.0", @@ -7099,6 +7263,7 @@ "version": "2.1.2", "resolved": "https://npm.artifacts.pd-internal.com/npm/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, "license": "MIT" }, "node_modules/scheduler": { @@ -7125,6 +7290,7 @@ "version": "1.2.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/send/-/send-1.2.1.tgz", "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "dev": true, "license": "MIT", "dependencies": { "debug": "^4.4.3", @@ -7227,6 +7393,7 @@ "version": "2.2.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/serve-static/-/serve-static-2.2.1.tgz", "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "dev": true, "license": "MIT", "dependencies": { "encodeurl": "^2.0.0", @@ -7246,6 +7413,7 @@ "version": "1.2.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, "license": "ISC" }, "node_modules/shebang-command": { @@ -7321,6 +7489,7 @@ "version": "1.1.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/side-channel/-/side-channel-1.1.1.tgz", "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -7340,6 +7509,7 @@ "version": "1.0.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/side-channel-list/-/side-channel-list-1.0.1.tgz", "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -7356,6 +7526,7 @@ "version": "1.0.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/side-channel-map/-/side-channel-map-1.0.1.tgz", "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -7374,6 +7545,7 @@ "version": "1.0.2", "resolved": "https://npm.artifacts.pd-internal.com/npm/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -7488,6 +7660,7 @@ "version": "2.0.2", "resolved": "https://npm.artifacts.pd-internal.com/npm/statuses/-/statuses-2.0.2.tgz", "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -7693,6 +7866,7 @@ "version": "1.0.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.6" @@ -7875,6 +8049,7 @@ "version": "2.1.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/type-is/-/type-is-2.1.0.tgz", "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", + "dev": true, "license": "MIT", "dependencies": { "content-type": "^2.0.0", @@ -7893,6 +8068,7 @@ "version": "2.0.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/content-type/-/content-type-2.0.0.tgz", "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -7948,6 +8124,7 @@ "version": "1.0.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -8103,6 +8280,7 @@ "version": "1.1.2", "resolved": "https://npm.artifacts.pd-internal.com/npm/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.8" @@ -8191,6 +8369,7 @@ "version": "1.0.2", "resolved": "https://npm.artifacts.pd-internal.com/npm/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, "license": "ISC" }, "node_modules/write-file-atomic": { @@ -8343,9 +8522,9 @@ } }, "node_modules/zod": { - "version": "3.25.76", - "resolved": "https://npm.artifacts.pd-internal.com/npm/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "version": "4.4.3", + "resolved": "https://npm.artifacts.pd-internal.com/npm/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" @@ -8355,6 +8534,7 @@ "version": "3.25.2", "resolved": "https://npm.artifacts.pd-internal.com/npm/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", + "dev": true, "license": "ISC", "peerDependencies": { "zod": "^3.25.28 || ^4" diff --git a/package.json b/package.json index cac12f9..e9a13d6 100644 --- a/package.json +++ b/package.json @@ -39,11 +39,11 @@ "author": "", "license": "Apache-2.0", "dependencies": { - "@modelcontextprotocol/sdk": "1.30.0", "marked": "^18.0.0", "yaml": "2.9.0", - "zod": "^3.23.8", - "zod-to-json-schema": "^3.25.0" + "zod": "^4.2.0", + "@modelcontextprotocol/server": "^2.0.0", + "@modelcontextprotocol/client": "^2.0.0" }, "overrides": { "hono": "4.12.34", diff --git a/src/__tests__/integration/integration-server-tool-gating.test.ts b/src/__tests__/integration/integration-server-tool-gating.test.ts index 549c953..fb26283 100644 --- a/src/__tests__/integration/integration-server-tool-gating.test.ts +++ b/src/__tests__/integration/integration-server-tool-gating.test.ts @@ -10,9 +10,8 @@ * an actual client would, to verify that `rundeck_connect` is listed only * when RUNDECK_INSTANCES is configured. */ - -import { Client } from "@modelcontextprotocol/sdk/client/index.js"; -import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js"; +import { StdioClientTransport } from "@modelcontextprotocol/client/stdio"; +import { Client } from "@modelcontextprotocol/client"; import path from "node:path"; import fs from "node:fs"; import { fileURLToPath } from "node:url"; diff --git a/src/index.ts b/src/index.ts index 8324a85..fd47f67 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,20 +1,8 @@ #!/usr/bin/env node -/** - * Rundeck Documentation MCP Server - * stdio entry point — used by Claude Desktop and stdio-based clients. - */ - -import { Server } from "@modelcontextprotocol/sdk/server/index.js"; -import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; -import { - CallToolRequestSchema, - ListResourcesRequestSchema, - ListToolsRequestSchema, - ReadResourceRequestSchema, - ListPromptsRequestSchema, - GetPromptRequestSchema, -} from "@modelcontextprotocol/sdk/types.js"; +import { StdioServerTransport } from "@modelcontextprotocol/server/stdio"; +import { Server } from "@modelcontextprotocol/server"; +import type { CallToolResult, GetPromptResult } from "@modelcontextprotocol/server"; import { handleResource, listResources } from "./resources/index.js"; import { rundeckApiCall, @@ -54,7 +42,6 @@ import { import { configManager } from "./config.js"; import { logger } from "./utils/logger.js"; import { z } from "zod"; -import { zodToJsonSchema } from "zod-to-json-schema"; import { getJobCreationGuidance, getJobValidationGuidance, @@ -72,7 +59,7 @@ export { REGISTERED_TOOL_NAMES }; // Convert Zod schemas to JSON Schema (lazy conversion to avoid memory issues) function convertSchema(schema: any): any { try { - return zodToJsonSchema(schema); + return z.toJSONSchema(schema, { io: "input" }); } catch (error) { logger.error("Error converting schema", error); return { type: "object", properties: {} }; @@ -91,7 +78,7 @@ function needsGuidance(params: unknown, requiredFields: string[]): boolean { return requiredFields.some((field) => missingRequiredScalar(args[field])); } -function returnGuidance(guidanceContent: string) { +function returnGuidance(guidanceContent: string): CallToolResult { return { content: [{ type: "text", text: guidanceContent }] }; } @@ -105,7 +92,7 @@ const server = new Server( // ── Resources ────────────────────────────────────────────────────────────── -server.setRequestHandler(ListResourcesRequestSchema, async (request) => { +server.setRequestHandler('resources/list', async (request) => { logger.logRequest("resources/list", request.params); const resources = listResources(); const result = { @@ -120,7 +107,7 @@ server.setRequestHandler(ListResourcesRequestSchema, async (request) => { return result; }); -server.setRequestHandler(ReadResourceRequestSchema, async (request) => { +server.setRequestHandler('resources/read', async (request) => { const uri = request.params.uri; logger.logRequest("resources/read", request.params); logger.logResourceAccess(uri); @@ -134,7 +121,7 @@ server.setRequestHandler(ReadResourceRequestSchema, async (request) => { // ── Tools ────────────────────────────────────────────────────────────────── -server.setRequestHandler(ListToolsRequestSchema, async (request) => { +server.setRequestHandler('tools/list', async (request) => { logger.logRequest("tools/list", request.params); const toolDefinitions: Record = { api_call: { @@ -242,7 +229,7 @@ server.setRequestHandler(ListToolsRequestSchema, async (request) => { return result; }); -server.setRequestHandler(CallToolRequestSchema, async (request) => { +server.setRequestHandler('tools/call', async (request): Promise => { const { name, arguments: args } = request.params; logger.logRequest("tools/call", request.params); logger.logToolCall(name, args); @@ -380,7 +367,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => { // ── Prompts ──────────────────────────────────────────────────────────────── -server.setRequestHandler(ListPromptsRequestSchema, async (request) => { +server.setRequestHandler('prompts/list', async (request) => { logger.logRequest("prompts/list", request.params); const promptList = prompts.map((prompt) => ({ name: prompt.name, @@ -397,56 +384,48 @@ server.setRequestHandler(ListPromptsRequestSchema, async (request) => { return result; }); -server.setRequestHandler(GetPromptRequestSchema, async (request) => { +server.setRequestHandler('prompts/get', async (request): Promise => { const { name, arguments: args } = request.params; logger.logRequest("prompts/get", request.params); - try { - const prompt = getPrompt(name); - if (!prompt) { - const availablePrompts = prompts.map((p) => p.name).join(", "); - const errorMessage = `Prompt "${name}" not found. Available prompts: ${availablePrompts}`; - logger.warn(errorMessage); - return { content: [{ type: "text", text: errorMessage }], isError: true }; - } - - if (prompt.argumentSchema && args) { - try { - prompt.argumentSchema.parse(args); - } catch (validationError) { - if (validationError instanceof z.ZodError) { - const errorMessages = validationError.errors - .map((err) => `${err.path.join(".")}: ${err.message}`) - .join("; "); - const errorMessage = `Invalid arguments for prompt "${name}": ${errorMessages}`; - logger.warn(errorMessage); - return { content: [{ type: "text", text: errorMessage }], isError: true }; - } - } - } + const prompt = getPrompt(name); + if (!prompt) { + const availablePrompts = prompts.map((p) => p.name).join(", "); + const errorMessage = `Prompt "${name}" not found. Available prompts: ${availablePrompts}`; + logger.warn(errorMessage); + throw new Error(errorMessage); + } - if (prompt.arguments) { - const missingRequired = prompt.arguments - .filter((arg) => arg.required && (!args || !(arg.name in args))) - .map((arg) => arg.name); - if (missingRequired.length > 0) { - const errorMessage = `Missing required arguments for prompt "${name}": ${missingRequired.join(", ")}`; + if (prompt.argumentSchema && args) { + try { + prompt.argumentSchema.parse(args); + } catch (validationError) { + if (validationError instanceof z.ZodError) { + const errorMessages = validationError.issues + .map((err) => `${err.path.join(".")}: ${err.message}`) + .join("; "); + const errorMessage = `Invalid arguments for prompt "${name}": ${errorMessages}`; logger.warn(errorMessage); - return { content: [{ type: "text", text: errorMessage }], isError: true }; + throw new Error(errorMessage); } + throw validationError; } + } - const content = prompt.getContent(args || {}); - logger.logResponse("prompts/get", { name, hasContent: !!content }); - return { messages: [{ role: "user", content: { type: "text", text: content } }] }; - } catch (error) { - const errorMessage = error instanceof Error ? error.message : String(error); - logger.error(`Error getting prompt "${name}":`, errorMessage); - return { - content: [{ type: "text", text: `Error retrieving prompt "${name}": ${errorMessage}` }], - isError: true, - }; + if (prompt.arguments) { + const missingRequired = prompt.arguments + .filter((arg) => arg.required && (!args || !(arg.name in args))) + .map((arg) => arg.name); + if (missingRequired.length > 0) { + const errorMessage = `Missing required arguments for prompt "${name}": ${missingRequired.join(", ")}`; + logger.warn(errorMessage); + throw new Error(errorMessage); + } } + + const content = prompt.getContent(args || {}); + logger.logResponse("prompts/get", { name, hasContent: !!content }); + return { messages: [{ role: "user", content: { type: "text", text: content } }] }; }); // ── Error handler ────────────────────────────────────────────────────────── diff --git a/src/tools/api.ts b/src/tools/api.ts index e0ad937..387b0d8 100644 --- a/src/tools/api.ts +++ b/src/tools/api.ts @@ -200,14 +200,14 @@ export const rundeckApiCallSchema = z.object({ "HTTP method. GET for retrieving data, POST for creating/triggering, PUT for updating, DELETE for removing, PATCH for partial updates. " + "Default: GET" ), - body: z.union([z.record(z.unknown()), z.array(z.unknown()), z.string()]) + body: z.union([z.record(z.string(), z.unknown()), z.array(z.unknown()), z.string()]) .optional() .describe( "Request body for POST/PUT/PATCH requests. Accepts a JSON object, a JSON array, or a pre-serialized JSON string (sent verbatim). " + "Example (run a job): {\"options\": {\"option-name\": \"value\"}, \"nodeFilters\": {\"name\": \"web-*\"}}. " + "Example (import jobs): [{\"name\": \"my-job\", \"project\": \"MyProject\", \"sequence\": {\"commands\": []}}] — the jobs import endpoint requires a JSON array." ), - query_params: z.record(z.string()) + query_params: z.record(z.string(), z.string()) .optional() .describe( "Query parameters as key-value pairs. Names must match the OpenAPI definition for this route (validation uses docs/.vuepress/public/files/rundeck-api.yml). " + diff --git a/src/tools/jobs.ts b/src/tools/jobs.ts index 4abb821..f53a950 100644 --- a/src/tools/jobs.ts +++ b/src/tools/jobs.ts @@ -349,7 +349,7 @@ export const workflowStepSchema = z.object({ plugin: z .object({ type: z.string(), - configuration: z.record(z.unknown()).optional(), + configuration: z.record(z.string(), z.unknown()).optional(), }) .optional(), nodeStep: z.boolean().optional(), diff --git a/src/tools/resources.ts b/src/tools/resources.ts index 948efae..403e45c 100644 --- a/src/tools/resources.ts +++ b/src/tools/resources.ts @@ -505,7 +505,7 @@ export const rundeckManageResourceSourceSchema = z "installed, and 'describe_provider_config' to see the exact config keys each expects, instead of guessing." ), config: z - .record(z.string()) + .record(z.string(), z.string()) .optional() .describe( "Provider-specific configuration for 'add_source', written as `resources.source.{index}.config.{key}` " + From 02432d93970a9471665da7a9d7d86e54d2d5f282 Mon Sep 17 00:00:00 2001 From: smartinellibenedetti <139791797+smartinellibenedetti@users.noreply.github.com> Date: Wed, 19 Aug 2026 15:32:00 -0600 Subject: [PATCH 2/6] Restore additionalProperties: false on tool inputSchema after v2 migration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit zod v4's z.toJSONSchema(schema, { io: "input" }) — needed so optional fields with a .default() (e.g. api_call's method) aren't misreported as required — silently drops additionalProperties from plain z.object() schemas, unlike the zod-to-json-schema output it replaced. That's a real regression: clients validating tool arguments against the schema would no longer catch unknown/misspelled params before calling. Restores it in convertSchema() and adds integration coverage that drives the real compiled server over stdio (the only way this surfaces, since it depends on the SDK's own tools/list response validation) to check every tool's inputSchema declares additionalProperties: false and that optional/defaulted params never appear in required. Co-Authored-By: Claude Sonnet 5 --- .../integration-server-tool-gating.test.ts | 53 +++++++++++++++++-- src/index.ts | 10 +++- 2 files changed, 59 insertions(+), 4 deletions(-) diff --git a/src/__tests__/integration/integration-server-tool-gating.test.ts b/src/__tests__/integration/integration-server-tool-gating.test.ts index fb26283..c5f26f5 100644 --- a/src/__tests__/integration/integration-server-tool-gating.test.ts +++ b/src/__tests__/integration/integration-server-tool-gating.test.ts @@ -19,7 +19,7 @@ import { fileURLToPath } from "node:url"; const __dirname = path.dirname(fileURLToPath(import.meta.url)); const serverEntry = path.resolve(__dirname, "../../../dist/index.js"); -async function listToolNames(env: Record): Promise { +async function listTools(env: Record) { const transport = new StdioClientTransport({ command: process.execPath, args: [serverEntry], @@ -28,13 +28,17 @@ async function listToolNames(env: Record): Promise { const client = new Client({ name: "test-client", version: "0.0.0" }); await client.connect(transport); try { - const result = await client.listTools(); - return result.tools.map((tool) => tool.name); + return await client.listTools(); } finally { await client.close(); } } +async function listToolNames(env: Record): Promise { + const result = await listTools(env); + return result.tools.map((tool) => tool.name); +} + describe("Integration: index.ts tools/list registry gating", () => { beforeAll(() => { if (!fs.existsSync(serverEntry)) { @@ -79,3 +83,46 @@ describe("Integration: index.ts tools/list registry gating", () => { expect(toolNames).toContain("rundeck_connect"); }, 15000); }); + +// Regression coverage for the SDK v1->v2 migration: zod v4's z.toJSONSchema +// silently produces different output than the zod-to-json-schema package it +// replaced, and the client-side SDK validates tools/list responses against +// the MCP spec — so these only fail loudly when driven through a real +// client/server round trip, not via the underlying zod schemas directly. +describe("Integration: index.ts tools/list schema fidelity", () => { + beforeAll(() => { + if (!fs.existsSync(serverEntry)) { + throw new Error( + `${serverEntry} does not exist — run \`npm run build\` before running this test.` + ); + } + }); + + it("declares additionalProperties: false on every tool's inputSchema", async () => { + const env = { ...process.env } as Record; + delete env.RUNDECK_INSTANCES; + const { tools } = await listTools(env); + + expect(tools.length).toBeGreaterThan(0); + for (const tool of tools) { + const schema = tool.inputSchema as { type?: string; additionalProperties?: unknown }; + if (schema.type === "object") { + expect(schema.additionalProperties).toBe(false); + } + } + }, 15000); + + it("does not list optional/defaulted params as required", async () => { + const env = { ...process.env } as Record; + delete env.RUNDECK_INSTANCES; + const { tools } = await listTools(env); + + const apiCall = tools.find((tool) => tool.name === "api_call"); + expect(apiCall).toBeDefined(); + const schema = apiCall!.inputSchema as { required?: string[] }; + + // `method` is `.optional().default("GET")` — it must stay out of + // `required`, or clients are misled into thinking it's mandatory. + expect(schema.required).toEqual(["endpoint"]); + }, 15000); +}); diff --git a/src/index.ts b/src/index.ts index fd47f67..c7a75ba 100644 --- a/src/index.ts +++ b/src/index.ts @@ -59,7 +59,15 @@ export { REGISTERED_TOOL_NAMES }; // Convert Zod schemas to JSON Schema (lazy conversion to avoid memory issues) function convertSchema(schema: any): any { try { - return z.toJSONSchema(schema, { io: "input" }); + const jsonSchema = z.toJSONSchema(schema, { io: "input" }); + // z.toJSONSchema's "input" mode (needed so optional fields with a + // .default() aren't misreported as required) omits additionalProperties + // even for plain z.object() schemas, unlike the zod-to-json-schema + // output this replaced — restore it so clients still reject unknown args. + if (jsonSchema.type === "object" && jsonSchema.additionalProperties === undefined) { + jsonSchema.additionalProperties = false; + } + return jsonSchema; } catch (error) { logger.error("Error converting schema", error); return { type: "object", properties: {} }; From 27a1311c09b6b247b33e3f429417005d05c6b708 Mon Sep 17 00:00:00 2001 From: smartinellibenedetti <139791797+smartinellibenedetti@users.noreply.github.com> Date: Wed, 19 Aug 2026 15:45:45 -0600 Subject: [PATCH 3/6] fixes --- TECHNICAL-CAPABILITIES.md | 4 +- .../integration-server-tool-gating.test.ts | 41 ++++++++++++++-- src/index.ts | 47 ++++++++++++++++--- 3 files changed, 78 insertions(+), 14 deletions(-) diff --git a/TECHNICAL-CAPABILITIES.md b/TECHNICAL-CAPABILITIES.md index 937f242..968ea7b 100644 --- a/TECHNICAL-CAPABILITIES.md +++ b/TECHNICAL-CAPABILITIES.md @@ -302,10 +302,10 @@ The guidance system provides interactive help when tools are called without requ ### Dependencies -- **@modelcontextprotocol/sdk**: MCP protocol implementation (see `package.json` for the pinned version) +- **@modelcontextprotocol/server** / **@modelcontextprotocol/client**: MCP protocol implementation (see `package.json` for the pinned version) - **marked**: ^12.0.0 - Markdown parsing - **yaml**: 2.8.3 - YAML parsing and generation -- **zod**: ^3.23.8 - Schema validation +- **zod**: ^4.2.0 - Schema validation - **TypeScript**: ^5.5.0 - Type safety and modern JavaScript features ### Configuration diff --git a/src/__tests__/integration/integration-server-tool-gating.test.ts b/src/__tests__/integration/integration-server-tool-gating.test.ts index c5f26f5..fa03149 100644 --- a/src/__tests__/integration/integration-server-tool-gating.test.ts +++ b/src/__tests__/integration/integration-server-tool-gating.test.ts @@ -98,18 +98,49 @@ describe("Integration: index.ts tools/list schema fidelity", () => { } }); - it("declares additionalProperties: false on every tool's inputSchema", async () => { + it("declares additionalProperties: false on every object schema, including nested ones", async () => { const env = { ...process.env } as Record; delete env.RUNDECK_INSTANCES; const { tools } = await listTools(env); expect(tools.length).toBeGreaterThan(0); - for (const tool of tools) { - const schema = tool.inputSchema as { type?: string; additionalProperties?: unknown }; - if (schema.type === "object") { - expect(schema.additionalProperties).toBe(false); + + // Object schemas produced by an explicit z.record() (e.g. a + // provider-config bag) intentionally declare additionalProperties as a + // value schema rather than `false` — those are legitimate open records, + // not missing restrictions, so only flag schemas where it's unset. + const missing: string[] = []; + function walk(node: unknown, path: string): void { + if (!node || typeof node !== "object") return; + const schema = node as Record; + if (schema.type === "object" && schema.additionalProperties === undefined) { + missing.push(path); + } + if (schema.properties && typeof schema.properties === "object") { + for (const [key, value] of Object.entries(schema.properties as Record)) { + walk(value, `${path}.${key}`); + } + } + if (schema.items) { + if (Array.isArray(schema.items)) { + schema.items.forEach((item, i) => walk(item, `${path}[${i}]`)); + } else { + walk(schema.items, `${path}[]`); + } + } + for (const key of ["anyOf", "oneOf", "allOf"]) { + const branches = (schema as Record)[key]; + if (Array.isArray(branches)) { + branches.forEach((branch, i) => walk(branch, `${path}.${key}[${i}]`)); + } } } + + for (const tool of tools) { + walk(tool.inputSchema, tool.name); + } + + expect(missing).toEqual([]); }, 15000); it("does not list optional/defaulted params as required", async () => { diff --git a/src/index.ts b/src/index.ts index c7a75ba..f6fee7c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -56,17 +56,50 @@ import { prompts, getPrompt } from "./prompts/index.js"; export { REGISTERED_TOOL_NAMES }; +// z.toJSONSchema's "input" mode (needed so optional fields with a .default() +// aren't misreported as required) omits additionalProperties even for plain +// z.object() schemas — at every nesting level, not just the root — unlike +// the zod-to-json-schema output this replaced. Walk the whole tree (nested +// properties, array items, and union branches) and restore it wherever it's +// unset, so clients still reject unknown args on nested objects too. Schemas +// that already declare additionalProperties (e.g. z.record()'s `{}` or a +// value schema) are left untouched. +function restoreAdditionalProperties(node: unknown): void { + if (!node || typeof node !== "object") return; + const schema = node as Record; + + if (schema.type === "object" && schema.additionalProperties === undefined) { + schema.additionalProperties = false; + } + + if (schema.properties && typeof schema.properties === "object") { + for (const value of Object.values(schema.properties as Record)) { + restoreAdditionalProperties(value); + } + } + if (schema.items) { + if (Array.isArray(schema.items)) { + schema.items.forEach(restoreAdditionalProperties); + } else { + restoreAdditionalProperties(schema.items); + } + } + for (const key of ["anyOf", "oneOf", "allOf"] as const) { + const branches = schema[key]; + if (Array.isArray(branches)) branches.forEach(restoreAdditionalProperties); + } + if (schema.$defs && typeof schema.$defs === "object") { + for (const value of Object.values(schema.$defs as Record)) { + restoreAdditionalProperties(value); + } + } +} + // Convert Zod schemas to JSON Schema (lazy conversion to avoid memory issues) function convertSchema(schema: any): any { try { const jsonSchema = z.toJSONSchema(schema, { io: "input" }); - // z.toJSONSchema's "input" mode (needed so optional fields with a - // .default() aren't misreported as required) omits additionalProperties - // even for plain z.object() schemas, unlike the zod-to-json-schema - // output this replaced — restore it so clients still reject unknown args. - if (jsonSchema.type === "object" && jsonSchema.additionalProperties === undefined) { - jsonSchema.additionalProperties = false; - } + restoreAdditionalProperties(jsonSchema); return jsonSchema; } catch (error) { logger.error("Error converting schema", error); From ccd7b2e26c13e0ab6443a8f5929d8cfac8858859 Mon Sep 17 00:00:00 2001 From: smartinellibenedetti <139791797+smartinellibenedetti@users.noreply.github.com> Date: Wed, 19 Aug 2026 16:49:56 -0600 Subject: [PATCH 4/6] Upgrade @modelcontextprotocol/inspector to v2 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps the inspector devDependency from ^1.0.0 to ^2.3.0 per https://github.com/modelcontextprotocol/inspector/blob/main/docs/v1-to-v2-migration.md. Our only invocation (npm run inspect -> mcp-inspector node dist/index.js) has no CLI flags, so it's unaffected by v2's flag-ordering change and needed no script updates — verified it still launches cleanly on the new port layout (6274 web + 6275 sandbox, no 6277 proxy) with the new MCP_INSPECTOR_API_TOKEN env var. Also removes the now-dead overrides.@modelcontextprotocol/sdk.ajv pin: the v1 SDK was inspector v1's last transitive dependent, and with it gone the override was a no-op. Confirmed ajv still resolves safely to 8.20.0 on its own via inspector v2's direct dependency. Co-Authored-By: Claude Sonnet 5 --- package-lock.json | 4319 +++++++++++++++++++-------------------------- package.json | 5 +- 2 files changed, 1780 insertions(+), 2544 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5f22c1a..bc85a87 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "rundeck-mcp": "dist/index.js" }, "devDependencies": { - "@modelcontextprotocol/inspector": "^1.0.0", + "@modelcontextprotocol/inspector": "^2.3.0", "@types/jest": "^30.0.0", "@types/node": "^24.0.0", "concurrently": "10.0.3", @@ -34,6 +34,49 @@ "node": ">=20" } }, + "node_modules/@alcalzone/ansi-tokenize": { + "version": "0.2.5", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@alcalzone/ansi-tokenize/-/ansi-tokenize-0.2.5.tgz", + "integrity": "sha512-3NX/MpTdroi0aKz134A6RC2Gb2iXVECN4QaAXnvCIxxIm3C3AVB1mkUe8NaaiyvOpDfsrqWhYtj+Q6a62RrTsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@alcalzone/ansi-tokenize/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://npm.artifacts.pd-internal.com/npm/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@alcalzone/ansi-tokenize/node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@babel/code-frame": { "version": "7.29.7", "resolved": "https://npm.artifacts.pd-internal.com/npm/@babel/code-frame/-/code-frame-7.29.7.tgz", @@ -530,30 +573,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, "node_modules/@emnapi/core": { "version": "1.10.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/@emnapi/core/-/core-1.10.0.tgz", @@ -588,52 +607,10 @@ "tslib": "^2.4.0" } }, - "node_modules/@floating-ui/core": { - "version": "1.7.5", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@floating-ui/core/-/core-1.7.5.tgz", - "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@floating-ui/utils": "^0.2.11" - } - }, - "node_modules/@floating-ui/dom": { - "version": "1.7.6", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@floating-ui/dom/-/dom-1.7.6.tgz", - "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@floating-ui/core": "^1.7.5", - "@floating-ui/utils": "^0.2.11" - } - }, - "node_modules/@floating-ui/react-dom": { - "version": "2.1.8", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@floating-ui/react-dom/-/react-dom-2.1.8.tgz", - "integrity": "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@floating-ui/dom": "^1.7.6" - }, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, - "node_modules/@floating-ui/utils": { - "version": "0.2.11", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@floating-ui/utils/-/utils-0.2.11.tgz", - "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", - "dev": true, - "license": "MIT" - }, "node_modules/@hono/node-server": { - "version": "2.0.12", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@hono/node-server/-/node-server-2.0.12.tgz", - "integrity": "sha512-eWpQYr67tqJLeaSUl0Q+TquuYfUdTibpOJlUMV2FfUP7+KqCC5TufnwnlXL6mobZBJbGAYRd7ZvEBDCbLInjhg==", + "version": "2.1.1", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@hono/node-server/-/node-server-2.1.1.tgz", + "integrity": "sha512-ELuehkj5VCBdgEw9zs+ivkKwyzzUCSQuE96YmiPvn1ECBoZCczbFXJLeEGMTYjphP6gydh4pHMqEYPVMYUVgQg==", "dev": true, "license": "MIT", "engines": { @@ -1211,32 +1188,6 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@mcp-ui/client": { - "version": "6.1.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@mcp-ui/client/-/client-6.1.1.tgz", - "integrity": "sha512-kN5io7ouEpVfOTloEEGrnuWio3ZzYOVgTk4o8ULleACdKEw7VgOTozPl9aj9qVl/UBh7rXlvKH0JbBm6Tw52LQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@modelcontextprotocol/ext-apps": "^1.2.0", - "@modelcontextprotocol/sdk": "^1.27.1", - "zod": "^3.23.8" - }, - "peerDependencies": { - "react": "^18 || ^19", - "react-dom": "^18 || ^19" - } - }, - "node_modules/@mcp-ui/client/node_modules/zod": { - "version": "3.25.76", - "resolved": "https://npm.artifacts.pd-internal.com/npm/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, "node_modules/@modelcontextprotocol/client": { "version": "2.0.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/@modelcontextprotocol/client/-/client-2.0.0.tgz", @@ -1255,15 +1206,6 @@ "node": ">=20" } }, - "node_modules/@modelcontextprotocol/client/node_modules/pkce-challenge": { - "version": "5.0.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/pkce-challenge/-/pkce-challenge-5.0.1.tgz", - "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", - "license": "MIT", - "engines": { - "node": ">=16.20.0" - } - }, "node_modules/@modelcontextprotocol/core": { "version": "2.0.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/@modelcontextprotocol/core/-/core-2.0.0.tgz", @@ -1277,9 +1219,9 @@ } }, "node_modules/@modelcontextprotocol/ext-apps": { - "version": "1.7.4", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@modelcontextprotocol/ext-apps/-/ext-apps-1.7.4.tgz", - "integrity": "sha512-QQqysE549cf/Y0VabBmAACXhj92EhB3t8yVct2BHbkWiPTFA1S91EqTVjYXXcZEefXU0pmHcdObhsNMcomJIOQ==", + "version": "1.7.5", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@modelcontextprotocol/ext-apps/-/ext-apps-1.7.5.tgz", + "integrity": "sha512-TjPH2S2y5UEGKhmI6+XGFuqfqOV4ppe1x6DA3txnUaEWkgtA4G5vo14jGKFZmegdkZ1H4QMLyujLvoU1BEdnAg==", "dev": true, "license": "MIT", "workspaces": [ @@ -1307,1129 +1249,700 @@ } }, "node_modules/@modelcontextprotocol/inspector": { - "version": "1.0.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@modelcontextprotocol/inspector/-/inspector-1.0.0.tgz", - "integrity": "sha512-QZ8LcTwE5+10MP8e5EYkY/u9za2plvfnl+mdKfG60yNg1K2xbIu2izmhG/6Jcnr0ncVsIKJtSPXeIkCngTDz6g==", + "version": "2.3.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@modelcontextprotocol/inspector/-/inspector-2.3.0.tgz", + "integrity": "sha512-eXqGdLuSIGLLDmmpYzhTZMfs2HEn2ykV9CQ1cjcyf0snAoeV5pcDBs9epIxz9nRWw6HfsvcqBlr8m55olCLGDg==", "dev": true, - "license": "SEE LICENSE IN LICENSE", - "workspaces": [ - "client", - "server", - "cli" - ], + "hasInstallScript": true, + "license": "MIT", "dependencies": { - "@modelcontextprotocol/inspector-cli": "^1.0.0", - "@modelcontextprotocol/inspector-client": "^1.0.0", - "@modelcontextprotocol/inspector-server": "^1.0.0", - "@modelcontextprotocol/sdk": "^1.25.2", - "concurrently": "^9.2.0", - "node-fetch": "^3.3.2", + "@hono/node-server": "^2.0.12", + "@modelcontextprotocol/client": "2.0.0", + "@modelcontextprotocol/core": "2.0.0", + "@modelcontextprotocol/ext-apps": "^1.7.4", + "@modelcontextprotocol/server": "2.0.0", + "@modelcontextprotocol/server-legacy": "2.0.0", + "@napi-rs/keyring": "^1.3.0", + "@vitejs/plugin-react": "^6.0.0", + "ajv": "^8.17.1", + "atomically": "^2.1.1", + "chokidar": "^4.0.3", + "commander": "^13.1.0", + "hono": "^4.12.18", + "ink": "^6.0.0", "open": "^10.2.0", - "shell-quote": "^1.8.4", - "spawn-rx": "^5.1.2", - "ts-node": "^10.9.2", - "zod": "^3.25.76" + "pino": "^9.14.0", + "react": "^19.0.0", + "undici": "^8.5.0", + "vite": "^8.1.5", + "yaml": "^2.9.0", + "zod": "^4.4.3" }, "bin": { - "mcp-inspector": "cli/build/cli.js" + "mcp-inspector": "clients/launcher/build/index.js" }, "engines": { - "node": ">=22.7.5" + "node": ">=22.19.0" } }, - "node_modules/@modelcontextprotocol/inspector-cli": { - "version": "1.0.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@modelcontextprotocol/inspector-cli/-/inspector-cli-1.0.0.tgz", - "integrity": "sha512-Pz6KnRkqrDd7z3SKlTKf6fTiVZbW+N/TqhDdyq23kuUPHOUTNcL6ha07MIUYub4oHKHXPOTGHA+XV4SeyG3dlg==", + "node_modules/@modelcontextprotocol/inspector/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://npm.artifacts.pd-internal.com/npm/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dev": true, - "license": "SEE LICENSE IN LICENSE", + "license": "MIT", "dependencies": { - "@modelcontextprotocol/sdk": "^1.25.2", - "commander": "^13.1.0", - "express": "^5.2.1", - "spawn-rx": "^5.1.2" + "readdirp": "^4.0.1" }, - "bin": { - "mcp-inspector-cli": "build/cli.js" - } - }, - "node_modules/@modelcontextprotocol/inspector-client": { - "version": "1.0.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@modelcontextprotocol/inspector-client/-/inspector-client-1.0.0.tgz", - "integrity": "sha512-ThvIbfE/K+nU/Rn2Z/88Mm+y/ObCr9/lcLWgTmK1iZaVwsNCLuwJojwCzqyflrRCy9ANgqhmD13ams5Soe+Izg==", - "dev": true, - "license": "SEE LICENSE IN LICENSE", - "dependencies": { - "@mcp-ui/client": "^6.0.0", - "@modelcontextprotocol/ext-apps": "^1.0.0", - "@modelcontextprotocol/sdk": "^1.25.2", - "@radix-ui/react-checkbox": "^1.1.4", - "@radix-ui/react-dialog": "^1.1.3", - "@radix-ui/react-icons": "^1.3.0", - "@radix-ui/react-label": "^2.1.0", - "@radix-ui/react-popover": "^1.1.3", - "@radix-ui/react-select": "^2.1.2", - "@radix-ui/react-slot": "^1.1.0", - "@radix-ui/react-switch": "^1.2.6", - "@radix-ui/react-tabs": "^1.1.1", - "@radix-ui/react-toast": "^1.2.6", - "@radix-ui/react-tooltip": "^1.1.8", - "ajv": "^6.12.6", - "class-variance-authority": "^0.7.0", - "clsx": "^2.1.1", - "cmdk": "^1.0.4", - "lucide-react": "^0.523.0", - "pkce-challenge": "^4.1.0", - "prismjs": "^1.30.0", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "react-simple-code-editor": "^0.14.1", - "serve-handler": "^6.1.6", - "tailwind-merge": "^2.5.3", - "zod": "^3.25.76" + "engines": { + "node": ">= 14.16.0" }, - "bin": { - "mcp-inspector-client": "bin/start.js" - } - }, - "node_modules/@modelcontextprotocol/inspector-client/node_modules/zod": { - "version": "3.25.76", - "resolved": "https://npm.artifacts.pd-internal.com/npm/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", - "dev": true, - "license": "MIT", "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "node_modules/@modelcontextprotocol/inspector-server": { - "version": "1.0.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@modelcontextprotocol/inspector-server/-/inspector-server-1.0.0.tgz", - "integrity": "sha512-XyqlwVp3mjewwetXwZ6x6dF2fFvO7L3CCNW3N6V3gUafw9YyQVt9TG1MacNO3rXfkhxna9SRRlV6pOalgk86sQ==", - "dev": true, - "license": "SEE LICENSE IN LICENSE", - "dependencies": { - "@modelcontextprotocol/sdk": "^1.25.2", - "cors": "^2.8.5", - "express": "^5.1.0", - "express-rate-limit": "^8.2.1", - "shell-quote": "^1.8.4", - "shx": "^0.3.4", - "spawn-rx": "^5.1.2", - "ws": "^8.18.0", - "zod": "^3.25.76" - }, - "bin": { - "mcp-inspector-server": "build/index.js" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@modelcontextprotocol/inspector-server/node_modules/zod": { - "version": "3.25.76", - "resolved": "https://npm.artifacts.pd-internal.com/npm/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "node_modules/@modelcontextprotocol/inspector/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://npm.artifacts.pd-internal.com/npm/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "dev": true, "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, "funding": { - "url": "https://github.com/sponsors/colinhacks" + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@modelcontextprotocol/inspector/node_modules/concurrently": { - "version": "9.2.4", - "resolved": "https://npm.artifacts.pd-internal.com/npm/concurrently/-/concurrently-9.2.4.tgz", - "integrity": "sha512-TZ0CEhyzvFjgtAvHTusDMgj7wNdihCh7LLLrzdUOXIhdlnL2JBBGA9eJxR24rtqgmdjh3OA3hrN1rCHj6HM8qA==", - "dev": true, + "node_modules/@modelcontextprotocol/server": { + "version": "2.0.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@modelcontextprotocol/server/-/server-2.0.0.tgz", + "integrity": "sha512-YhHWdHfpFMQfd0prsEnxKeS3Qz3ytIGmsS0sth4KDjnacIT7hxk6hXHkJ9KysxlkvTM+WZAtQbbcUhdoP4Hvtw==", "license": "MIT", "dependencies": { - "chalk": "4.1.2", - "rxjs": "7.8.2", - "shell-quote": "1.9.0", - "supports-color": "8.1.1", - "tree-kill": "1.2.2", - "yargs": "17.7.2" - }, - "bin": { - "conc": "dist/bin/concurrently.js", - "concurrently": "dist/bin/concurrently.js" + "@modelcontextprotocol/core": "2.0.0", + "zod": "^4.2.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" - } - }, - "node_modules/@modelcontextprotocol/inspector/node_modules/zod": { - "version": "3.25.76", - "resolved": "https://npm.artifacts.pd-internal.com/npm/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" + "node": ">=20" } }, - "node_modules/@modelcontextprotocol/sdk": { - "version": "1.30.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@modelcontextprotocol/sdk/-/sdk-1.30.0.tgz", - "integrity": "sha512-xKd8OIzlqNzcqcNumGAa6g+PW2kjD5vrpcKOnfldAUPP3j7lnqMPwlTXQm8gF+UwH72z0lqaRbjr9hqGz0eITA==", + "node_modules/@modelcontextprotocol/server-legacy": { + "version": "2.0.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@modelcontextprotocol/server-legacy/-/server-legacy-2.0.0.tgz", + "integrity": "sha512-LnffC1BSqFMHtMQxEz92lqDpHWma+ErV3ghdHDgdkCyYzVcCYKcUT5loq4kflty+Bf9C9qjJqbnphyBWyCqo8Q==", + "deprecated": "This package is a frozen copy of v1's SSE transport and OAuth Authorization Server helpers for migration purposes only. Use StreamableHTTP from @modelcontextprotocol/server and a dedicated OAuth server in production. Will not receive new features.", "dev": true, "license": "MIT", "dependencies": { - "@hono/node-server": "^1.19.9 || ^2.0.5", - "ajv": "^8.17.1", - "ajv-formats": "^3.0.1", + "@modelcontextprotocol/core": "2.0.0", "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.2.1", "express-rate-limit": "^8.2.1", - "hono": "^4.11.4", - "jose": "^6.1.3", - "json-schema-typed": "^8.0.2", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", - "zod": "^3.25 || ^4.0", - "zod-to-json-schema": "^3.25.1" + "zod": "^4.2.0" }, "engines": { - "node": ">=18" + "node": ">=20" }, "peerDependencies": { - "@cfworker/json-schema": "^4.1.1", - "zod": "^3.25 || ^4.0" + "express": "^4.18.0 || ^5.0.0" }, "peerDependenciesMeta": { - "@cfworker/json-schema": { + "express": { "optional": true - }, - "zod": { - "optional": false } } }, - "node_modules/@modelcontextprotocol/sdk/node_modules/ajv": { - "version": "8.20.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/ajv/-/ajv-8.20.0.tgz", - "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "node_modules/@napi-rs/keyring": { + "version": "1.3.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@napi-rs/keyring/-/keyring-1.3.0.tgz", + "integrity": "sha512-WrOw/bcXm0f9qHkumlT1QlArXSTWqaY9sunsDpOk+yCCorCKMxvWT/a3xko4EYHVdeZoh00yI2TydXn6eyICDA==", "dev": true, "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" + "engines": { + "node": ">= 10" }, "funding": { "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT" - }, - "node_modules/@modelcontextprotocol/sdk/node_modules/pkce-challenge": { - "version": "5.0.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/pkce-challenge/-/pkce-challenge-5.0.1.tgz", - "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/keyring-darwin-arm64": "1.3.0", + "@napi-rs/keyring-darwin-x64": "1.3.0", + "@napi-rs/keyring-freebsd-x64": "1.3.0", + "@napi-rs/keyring-linux-arm-gnueabihf": "1.3.0", + "@napi-rs/keyring-linux-arm64-gnu": "1.3.0", + "@napi-rs/keyring-linux-arm64-musl": "1.3.0", + "@napi-rs/keyring-linux-riscv64-gnu": "1.3.0", + "@napi-rs/keyring-linux-x64-gnu": "1.3.0", + "@napi-rs/keyring-linux-x64-musl": "1.3.0", + "@napi-rs/keyring-win32-arm64-msvc": "1.3.0", + "@napi-rs/keyring-win32-ia32-msvc": "1.3.0", + "@napi-rs/keyring-win32-x64-msvc": "1.3.0" + } + }, + "node_modules/@napi-rs/keyring-darwin-arm64": { + "version": "1.3.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@napi-rs/keyring-darwin-arm64/-/keyring-darwin-arm64-1.3.0.tgz", + "integrity": "sha512-pl76hJvdYUBn6I24bXiOBMA9nbDapo3I5B+f3OorjDU4dUMSypXeKbOVehJe8fhgTiH24flMyTS3aAIy43xegQ==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=16.20.0" + "node": ">= 10" } }, - "node_modules/@modelcontextprotocol/server": { - "version": "2.0.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@modelcontextprotocol/server/-/server-2.0.0.tgz", - "integrity": "sha512-YhHWdHfpFMQfd0prsEnxKeS3Qz3ytIGmsS0sth4KDjnacIT7hxk6hXHkJ9KysxlkvTM+WZAtQbbcUhdoP4Hvtw==", + "node_modules/@napi-rs/keyring-darwin-x64": { + "version": "1.3.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@napi-rs/keyring-darwin-x64/-/keyring-darwin-x64-1.3.0.tgz", + "integrity": "sha512-YcJtEV5LA3cvA4z3BurgxH5IhTsW1JfIvcAAcqcecwk06Si9F9NqkxbZVIfDwQ8oRHgaBmT3zZJnLAotCrVahw==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@modelcontextprotocol/core": "2.0.0", - "zod": "^4.2.0" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=20" + "node": ">= 10" } }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "1.2.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.1.tgz", - "integrity": "sha512-KjZdi8Q1wh89gsVmghvbrMgWl6ZWmRmHV6wjB7/g4Zf0dyO+hH3neZUtuDNPO00qq5YE5RITVWvrIZKRaAmzGQ==", + "node_modules/@napi-rs/keyring-freebsd-x64": { + "version": "1.3.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@napi-rs/keyring-freebsd-x64/-/keyring-freebsd-x64-1.3.0.tgz", + "integrity": "sha512-vlLf31TGhfRAaxLDBhg8b89ss0HHD/lyNmL5F3UjSaz5CUXElsJmKYq9fqA/B+cZKUEUcLHHGhF0I/CqcFdaVw==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", "optional": true, - "dependencies": { - "@tybys/wasm-util": "^0.10.3" - }, + "os": [ + "freebsd" + ], "engines": { - "node": "^20.19.0 || ^22.13.0 || >=23.5.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - }, - "peerDependencies": { - "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.3", - "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.3" + "node": ">= 10" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "node_modules/@napi-rs/keyring-linux-arm-gnueabihf": { + "version": "1.3.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@napi-rs/keyring-linux-arm-gnueabihf/-/keyring-linux-arm-gnueabihf-1.3.0.tgz", + "integrity": "sha512-KiWdMMu/Inz/bHHIAGrnF7r54FZDYXuHO6UFF/rhIrshUsxbMG1Rl9lEymNtqqsVo927G0VYcb02FzWQ3iBQRQ==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=14" + "node": ">= 10" } }, - "node_modules/@pkgr/core": { - "version": "0.3.6", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@pkgr/core/-/core-0.3.6.tgz", - "integrity": "sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/pkgr" - } - }, - "node_modules/@radix-ui/number": { - "version": "1.1.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/number/-/number-1.1.2.tgz", - "integrity": "sha512-ceTwaxc4I5IOi97DgCotl3pqiyRGvffcc0oOsE2dQYaJOFIDsDt4VWG6xEbg1QePv9QWausCEIppud/tJ1wNig==", - "dev": true, - "license": "MIT" - }, - "node_modules/@radix-ui/primitive": { - "version": "1.1.4", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/primitive/-/primitive-1.1.4.tgz", - "integrity": "sha512-7AdCK9PQyiljKoBDbN8OuctCbd/esdwZPQ8RtOE3SsyQtUpiPb+ND75q0jEhC1m1ecBI0MFNeLJvwIh9iKHRcQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@radix-ui/react-arrow": { - "version": "1.1.11", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-arrow/-/react-arrow-1.1.11.tgz", - "integrity": "sha512-Kdil9BB1rIFC/khmf4hC35bn8701AJcizTU7G7cUbEbk5XqqbjDuHW60uUfKqO5WojjZcbAW51Q7P0hRmMLw8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.7" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-checkbox": { - "version": "1.3.6", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-checkbox/-/react-checkbox-1.3.6.tgz", - "integrity": "sha512-eUEUoGMDpfkgHWSE97ZZaUJtzR1M7EKnNIpD1Q16+8JR9NWghcaqMulx9PuCQ720w0UclfYn6FEbCdd5Hx087g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.4", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.1.4", - "@radix-ui/react-presence": "1.1.6", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-use-controllable-state": "1.2.3", - "@radix-ui/react-use-previous": "1.1.2", - "@radix-ui/react-use-size": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-collection": { - "version": "1.1.11", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-collection/-/react-collection-1.1.11.tgz", - "integrity": "sha512-djW9+zeg137KQdlPtmE8xnaD+K2rcXXMWFrSg0hsmYZ6HRbdTA7tDHFgpaW9+huWVEu0RCabL+985T4TA0BE7g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.1.4", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-slot": "1.3.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-compose-refs": { - "version": "1.1.3", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.3.tgz", - "integrity": "sha512-rYOP8OMnuuPMQF1uhPVlGNcCDlkokKqGFE3JcxFViIkAXP7EvFWUliJAstrapypaBLJNHbZL6jGhbVDGTwmVhA==", + "node_modules/@napi-rs/keyring-linux-arm64-gnu": { + "version": "1.3.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@napi-rs/keyring-linux-arm64-gnu/-/keyring-linux-arm64-gnu-1.3.0.tgz", + "integrity": "sha512-eyKGpY40lm9Jvs1aD294XRH4y7+TlJM0YVAryZeXA6TX0mb4gMkxVXwSQv7MCwgah7raeUd0dKUb4BPAYIgcMg==", + "cpu": [ + "arm64" + ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@radix-ui/react-context": { - "version": "1.1.4", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-context/-/react-context-1.1.4.tgz", - "integrity": "sha512-QwH4PO5urrbO+FaGd5Aglg+YJgWTyyuZ3g/6mKvsqraLkglDdckw9JafgL5McL5VEJ6EPNduPaT3ZE9BttDAqg==", + "node_modules/@napi-rs/keyring-linux-arm64-musl": { + "version": "1.3.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@napi-rs/keyring-linux-arm64-musl/-/keyring-linux-arm64-musl-1.3.0.tgz", + "integrity": "sha512-iIK6JWHXAJqDrEyLY3TmswwloVyt2vj+04TZnew+uSJ9gnDO8EwRbp3/iw3LpWaXiDO7VomGO6y8I0Id8uBZSw==", + "cpu": [ + "arm64" + ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@radix-ui/react-dialog": { - "version": "1.1.18", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-dialog/-/react-dialog-1.1.18.tgz", - "integrity": "sha512-apa28mldjMgORmE6g/w3sCcA0Y9UAVeeDVoozN4i7kOw12mLl9RBchfzK3Nn6qxOWjrZhK1Lfy7f07kyzxtnBw==", + "node_modules/@napi-rs/keyring-linux-riscv64-gnu": { + "version": "1.3.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@napi-rs/keyring-linux-riscv64-gnu/-/keyring-linux-riscv64-gnu-1.3.0.tgz", + "integrity": "sha512-/PGqrwn6EwgtK6vccASSXJRfOSP4vN1F4ASsIQ+7MdrK6hNvAJ1FZPrIuD5gGGdxezo3F++To2Wq7DbuGIeuNQ==", + "cpu": [ + "riscv64" + ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.4", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.1.4", - "@radix-ui/react-dismissable-layer": "1.1.14", - "@radix-ui/react-focus-guards": "1.1.4", - "@radix-ui/react-focus-scope": "1.1.11", - "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-portal": "1.1.13", - "@radix-ui/react-presence": "1.1.6", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-slot": "1.3.0", - "@radix-ui/react-use-controllable-state": "1.2.3", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.7.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@radix-ui/react-direction": { - "version": "1.1.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-direction/-/react-direction-1.1.2.tgz", - "integrity": "sha512-C3vFhbyi4SW3PmbAi6Awpu4OzJtd0MxGurvSsYtr7p7nM8RNB3VAF3CUmnp2j50knpkrRcB7+ycVXzgLgF6yNA==", + "node_modules/@napi-rs/keyring-linux-x64-gnu": { + "version": "1.3.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@napi-rs/keyring-linux-x64-gnu/-/keyring-linux-x64-gnu-1.3.0.tgz", + "integrity": "sha512-2PDK1WKWTu9lBGq9VvNEkSlQD3O7YwVpmnyN2M3cy4v7NJ/8gDMd9GXv3G+FVXN13uhp4gnnPBS+ScefmEeD2A==", + "cpu": [ + "x64" + ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@radix-ui/react-dismissable-layer": { - "version": "1.1.14", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.14.tgz", - "integrity": "sha512-4lUhWTWAjbDIqFrAPWJ3WqBOpO5YchVZ88X3nh6H9Lu5AFi5nCUeTPj3D8FSDmabmFeRe9ME0BDA4MwKTha5GQ==", + "node_modules/@napi-rs/keyring-linux-x64-musl": { + "version": "1.3.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@napi-rs/keyring-linux-x64-musl/-/keyring-linux-x64-musl-1.3.0.tgz", + "integrity": "sha512-oJ2HkX8YUo46QBkn0pG+HuIKQNqr523q6vBobCn+P95s4C4K6/kLBqHY/1bg5J4ap31DzsznhnFKcfBNBsjCnw==", + "cpu": [ + "x64" + ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.4", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-use-callback-ref": "1.1.2", - "@radix-ui/react-use-effect-event": "0.0.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@radix-ui/react-focus-guards": { - "version": "1.1.4", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.4.tgz", - "integrity": "sha512-cot/aB/mOm0IYVYTTmQcEEK1M48lZWi8FlYe5nDPQQ8NYZUlXEFgncJ9p2Kzer3RKSrY7cTTpEMLZKNo9QoP5Q==", + "node_modules/@napi-rs/keyring-win32-arm64-msvc": { + "version": "1.3.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@napi-rs/keyring-win32-arm64-msvc/-/keyring-win32-arm64-msvc-1.3.0.tgz", + "integrity": "sha512-tOd3c/uAaeoE4ycVlmAdSvygz0Zt3zdca6Y7gokBeIbaRDWpjDIUOpU3MvML59XAaqyuKGsVVu0F/DZb1lHPmw==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@radix-ui/react-focus-scope": { - "version": "1.1.11", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.11.tgz", - "integrity": "sha512-Mn88Vg2whaRocGJNOH+DKFqYm6ySFPQaiwHNxZPyjn99B52KAEJWWY9NP83+nWdk2HM3rdov+STu9AG471Rt9w==", + "node_modules/@napi-rs/keyring-win32-ia32-msvc": { + "version": "1.3.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@napi-rs/keyring-win32-ia32-msvc/-/keyring-win32-ia32-msvc-1.3.0.tgz", + "integrity": "sha512-sPSqeAFZMGqP1R++M2JTza7GQJJ/TpCo6JU6Vcd4jnebvOaEDs9b7eipakU1PJdSvhpC2yXMCNRk9gXfrhuwHQ==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-use-callback-ref": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@radix-ui/react-icons": { - "version": "1.3.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-icons/-/react-icons-1.3.2.tgz", - "integrity": "sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==", + "node_modules/@napi-rs/keyring-win32-x64-msvc": { + "version": "1.3.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@napi-rs/keyring-win32-x64-msvc/-/keyring-win32-x64-msvc-1.3.0.tgz", + "integrity": "sha512-4DnCWXwDc0HRKwyRlG5y0VhKZW2tNRQfKKfyj6IX/KWfDNyq9hn4n+GL1auyDcOO/v8PwnhmYo2+rOOqCkvvOg==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "peerDependencies": { - "react": "^16.x || ^17.x || ^18.x || ^19.0.0 || ^19.0.0-rc" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" } }, - "node_modules/@radix-ui/react-id": { - "version": "1.1.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-id/-/react-id-1.1.2.tgz", - "integrity": "sha512-orBC88futVpqCmhX1p4cvquNHsELQ+w+vBJnuj3ftETI5bJb0bZn3Tqu3SWN2IOcPycTnMGnhwoermvISt72sA==", + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.2.1", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.1.tgz", + "integrity": "sha512-KjZdi8Q1wh89gsVmghvbrMgWl6ZWmRmHV6wjB7/g4Zf0dyO+hH3neZUtuDNPO00qq5YE5RITVWvrIZKRaAmzGQ==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.2" + "@tybys/wasm-util": "^0.10.3" }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=23.5.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-label": { - "version": "2.1.11", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-label/-/react-label-2.1.11.tgz", - "integrity": "sha512-3PKvDDxOn62k0oV1n4QtNtD2vpu+zYjXR7ojLBPaO6SPvhy53yg0vAmgNeBQeJW5rV3dffoRG+HYfLBZuzw0CQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.7" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" }, "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.3", + "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.3" } }, - "node_modules/@radix-ui/react-popover": { - "version": "1.1.18", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-popover/-/react-popover-1.1.18.tgz", - "integrity": "sha512-qdXDes+eHlnMUGlBAAAe5EG7oOQvqsXuq4mq585diMudg80iB+jHbsSeG3+Q4eWNsogNyhqU2p/3i+Y0iEepqg==", + "node_modules/@oxc-project/types": { + "version": "0.146.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@oxc-project/types/-/types-0.146.0.tgz", + "integrity": "sha512-XC0QsnnhVe7sLIWmYmdPw7x5P0h4W8vUU3Nv1ySgWXtvCz8NizoAEpGXA0sOYoJQV2Rl13LgURAHQ5cI5ILCSA==", "dev": true, "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.4", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.1.4", - "@radix-ui/react-dismissable-layer": "1.1.14", - "@radix-ui/react-focus-guards": "1.1.4", - "@radix-ui/react-focus-scope": "1.1.11", - "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-popper": "1.3.2", - "@radix-ui/react-portal": "1.1.13", - "@radix-ui/react-presence": "1.1.6", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-slot": "1.3.0", - "@radix-ui/react-use-controllable-state": "1.2.3", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.7.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/Boshen" } }, - "node_modules/@radix-ui/react-popper": { - "version": "1.3.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-popper/-/react-popper-1.3.2.tgz", - "integrity": "sha512-3QXNeMkdshed1MR3LNoiCirBywRFPkD8ETJa/HlPuLwSajaQixf2ro+isoDNJlGABg9ug41XuZpINZJIle4XWg==", + "node_modules/@pinojs/redact": { + "version": "0.4.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@pinojs/redact/-/redact-0.4.0.tgz", + "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==", "dev": true, - "license": "MIT", - "dependencies": { - "@floating-ui/react-dom": "^2.0.0", - "@radix-ui/react-arrow": "1.1.11", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.1.4", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-use-callback-ref": "1.1.2", - "@radix-ui/react-use-layout-effect": "1.1.2", - "@radix-ui/react-use-rect": "1.1.2", - "@radix-ui/react-use-size": "1.1.2", - "@radix-ui/rect": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } + "license": "MIT" }, - "node_modules/@radix-ui/react-portal": { - "version": "1.1.13", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-portal/-/react-portal-1.1.13.tgz", - "integrity": "sha512-z3oXfmaHLJTF1wktbjgD6cn9jiEbq3WSondB10LIuIt2m2Ym4iJlrW04/euMwENDdWDdE7z+OuY7Qyp1YpRSwA==", + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-use-layout-effect": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "optional": true, + "engines": { + "node": ">=14" } }, - "node_modules/@radix-ui/react-presence": { - "version": "1.1.6", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-presence/-/react-presence-1.1.6.tgz", - "integrity": "sha512-zdTk4PlUO0E18HnZ3wYbW0KkJJxWCdiNYp6g6X1PtONFhxVkg01vliTJAmwIszU6mHiyBOoW9P0rAugl5/hULQ==", + "node_modules/@pkgr/core": { + "version": "0.3.6", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@pkgr/core/-/core-0.3.6.tgz", + "integrity": "sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==", "dev": true, "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + "engines": { + "node": "^14.18.0 || >=16.0.0" }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "funding": { + "url": "https://opencollective.com/pkgr" } }, - "node_modules/@radix-ui/react-primitive": { - "version": "2.1.7", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-primitive/-/react-primitive-2.1.7.tgz", - "integrity": "sha512-bC3NiwsprbxKjuon9l7X6BUTw7FPVzEYaL92MPEY5SCd/9hUTPXVFtVwRix7778wtRsVao+zE062gL79FZleeQ==", + "node_modules/@rolldown/binding-android-arm-eabi": { + "version": "1.2.5", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.5.tgz", + "integrity": "sha512-DLe/i+l8ynIBY7XEQ191TeZvCoowIGa18R+dIV30GW7DiOtp74i/xX8hs8GUjW5ARV7VZuie3d6AumSmCwbeRA==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "@radix-ui/react-slot": "1.3.0" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@radix-ui/react-roving-focus": { - "version": "1.1.14", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.14.tgz", - "integrity": "sha512-8Qcnx9447tx/aCBgw6Jenfqg4Skq+vqab9mCBmuGNipIS5YXvL275wbKEu7+ICYHIlAPgCduUMJH1XOYewKF6Q==", + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.5", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.5.tgz", + "integrity": "sha512-zXcwKlQApYAOELHd8PwKDFkagYF9Wy4e0RJ+0qnzl9Pjnpj75TEG8ufv40p2J7kCEfwZAsNiuzRIyNNMWT38ig==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.4", - "@radix-ui/react-collection": "1.1.11", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.1.4", - "@radix-ui/react-direction": "1.1.2", - "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-use-callback-ref": "1.1.2", - "@radix-ui/react-use-controllable-state": "1.2.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } - } - }, - "node_modules/@radix-ui/react-select": { - "version": "2.3.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-select/-/react-select-2.3.2.tgz", - "integrity": "sha512-brXD6C/V0fVK0DDbscLVw6LsXrjQ+ay8jdOBaN+tLb4vsHsAMm6Gt6eT77wHX1Eq8GPtD5rJ+RxFtfDozsb4+Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@radix-ui/number": "1.1.2", - "@radix-ui/primitive": "1.1.4", - "@radix-ui/react-collection": "1.1.11", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.1.4", - "@radix-ui/react-direction": "1.1.2", - "@radix-ui/react-dismissable-layer": "1.1.14", - "@radix-ui/react-focus-guards": "1.1.4", - "@radix-ui/react-focus-scope": "1.1.11", - "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-popper": "1.3.2", - "@radix-ui/react-portal": "1.1.13", - "@radix-ui/react-presence": "1.1.6", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-slot": "1.3.0", - "@radix-ui/react-use-callback-ref": "1.1.2", - "@radix-ui/react-use-controllable-state": "1.2.3", - "@radix-ui/react-use-layout-effect": "1.1.2", - "@radix-ui/react-use-previous": "1.1.2", - "@radix-ui/react-visually-hidden": "1.2.7", - "aria-hidden": "^1.2.4", - "react-remove-scroll": "^2.7.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@radix-ui/react-slot": { - "version": "1.3.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-slot/-/react-slot-1.3.0.tgz", - "integrity": "sha512-MojKku4U/miO8Av4Dkb+ctMAQx7JmY96LmtDQlAarCRtd7rN52QCSzBF+XAvr5S6coSVj9HEPBgHAHKEJVk/WA==", + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.2.5", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.5.tgz", + "integrity": "sha512-dK4QakI42nzWgJT5sm4y4y/O//D4OxM75/cH28RLV+nzIN9AY+YsbuUVrUTjlLjXR6vpyxFbSsbmNuJ6BP9sww==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@radix-ui/react-compose-refs": "1.1.3" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@radix-ui/react-switch": { - "version": "1.3.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-switch/-/react-switch-1.3.2.tgz", - "integrity": "sha512-tgRBI3DdNwAJYE4BBZyZcz/HRRCvAsPkRvG1wvKc+41tBGMxPn/a87T/wikXAvyDypNQ9kaZwHbeZe+veHCGpA==", + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.2.5", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.5.tgz", + "integrity": "sha512-fqSALaUu1Wjd1nK2uW2kJDWdLCc8lx1IcY+MTY26Aurfdx19anlzhqXOgCFbBFQnlFDTn4TC1/7Nz4Bl2mLP3A==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.4", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.1.4", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-use-controllable-state": "1.2.3", - "@radix-ui/react-use-previous": "1.1.2", - "@radix-ui/react-use-size": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@radix-ui/react-tabs": { - "version": "1.1.16", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-tabs/-/react-tabs-1.1.16.tgz", - "integrity": "sha512-v3Ab2l7z6U7tRB4xA0IyKdq0OsqaO1o9ZjsIEoKKnSZ/l96mZz8aCTX0NCXw+YVHJXr8Km4d+Mn6/Q8YjXa+gw==", + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.2.5", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.5.tgz", + "integrity": "sha512-/vCnNxlkxs9tKxNDcyWUePpJ/PgTzxIaVhoM5SmG8UV+GR/IcPam4VYxi7GIMo7PSDuNqlJqvprqii9NqqVCMw==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.4", - "@radix-ui/react-context": "1.1.4", - "@radix-ui/react-direction": "1.1.2", - "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-presence": "1.1.6", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-roving-focus": "1.1.14", - "@radix-ui/react-use-controllable-state": "1.2.3" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@radix-ui/react-toast": { - "version": "1.2.18", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-toast/-/react-toast-1.2.18.tgz", - "integrity": "sha512-YNEnTHV47hPep+U0QvVM02OJNka9uygREc+k4Nh5VSZBg4MmE+myI442x3hCGfRpX7N2WSSYSJKws4gE+Z8lgg==", + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.2.5", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.5.tgz", + "integrity": "sha512-abk0NLA519LxRCszmbE0jYKuQ9YPocOXTiOXOo6Yr+YAT95VH+PtqYAjOJvGKt3viEd/x4qzabAlwd5bHOOARg==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.4", - "@radix-ui/react-collection": "1.1.11", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.1.4", - "@radix-ui/react-dismissable-layer": "1.1.14", - "@radix-ui/react-portal": "1.1.13", - "@radix-ui/react-presence": "1.1.6", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-use-callback-ref": "1.1.2", - "@radix-ui/react-use-controllable-state": "1.2.3", - "@radix-ui/react-use-layout-effect": "1.1.2", - "@radix-ui/react-visually-hidden": "1.2.7" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@radix-ui/react-tooltip": { - "version": "1.2.11", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-tooltip/-/react-tooltip-1.2.11.tgz", - "integrity": "sha512-8XZ6Py3y3W2nEzAUGCN5cfVKaUi+CVApcz1d6lrNVVf2hvYEixMRkq8k9ggPKnQUpRRuOV5avt8uvxViH2jLwA==", + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.2.5", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.5.tgz", + "integrity": "sha512-Y7eALiJ8lr0M2HH103Js+g7V34wf6snlpZLAsHI90uLhr3PVlNsbFVAXJC9d/V6BnPyKtpSwI+NcB/RLxsQxuA==", + "cpu": [ + "arm64" + ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", - "dependencies": { - "@radix-ui/primitive": "1.1.4", - "@radix-ui/react-compose-refs": "1.1.3", - "@radix-ui/react-context": "1.1.4", - "@radix-ui/react-dismissable-layer": "1.1.14", - "@radix-ui/react-id": "1.1.2", - "@radix-ui/react-popper": "1.3.2", - "@radix-ui/react-portal": "1.1.13", - "@radix-ui/react-presence": "1.1.6", - "@radix-ui/react-primitive": "2.1.7", - "@radix-ui/react-slot": "1.3.0", - "@radix-ui/react-use-controllable-state": "1.2.3", - "@radix-ui/react-visually-hidden": "1.2.7" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@radix-ui/react-use-callback-ref": { - "version": "1.1.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.2.tgz", - "integrity": "sha512-xCso9j1/u8sEgP1RNHjFrXJLApL8LiqOkI1R4ywuN00rxWdYg4oQXuwKLS3i0j5NWLromUD27/4nlxj2UFVvIw==", + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.2.5", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.5.tgz", + "integrity": "sha512-xMvZgnbZg4YVnR/AX2b3oOPDTFYJvUVaJg5FedA/LuvexAtXibZQej4cnTkw3rjsJ/ggUROB64TdtETiim+FYA==", + "cpu": [ + "arm64" + ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@radix-ui/react-use-controllable-state": { - "version": "1.2.3", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.3.tgz", - "integrity": "sha512-PLzC90MS+ReootmjC597dvopoelpZ8Q61HJkDXZSExitIq7PL55vHNnesAHwguHK0aPfBnpdNzQtv1uliaqQrA==", + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.5", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.5.tgz", + "integrity": "sha512-GRjeqTUDHTo5GwntsLaAMcBahG3nlpjftXWZLN73HiYQlhwEowvarFgQnRnQZtIp4keXX7quXFbG38uPZBa2EA==", + "cpu": [ + "ppc64" + ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", - "dependencies": { - "@radix-ui/react-use-effect-event": "0.0.3", - "@radix-ui/react-use-layout-effect": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@radix-ui/react-use-effect-event": { - "version": "0.0.3", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.3.tgz", - "integrity": "sha512-6c8ZqvPTWILEKnyVkP53EGRCcpnJiKTC21sS/6R1GF5xKyHJJWQEPfkqlcgUkdRQivd6tb23abUwe4ngWmY0JA==", + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.5", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.5.tgz", + "integrity": "sha512-vLNTR45F2Uwc8AufkNXPmB4VliaXs+FvcheEogIzOXzO4l+LzieXF5A/TWxLy5HtqpsRCHUfd0lPVrrdgXdLHQ==", + "cpu": [ + "s390x" + ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@radix-ui/react-use-layout-effect": { - "version": "1.1.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.2.tgz", - "integrity": "sha512-jrBWOxZITuGcnjRCM2t2U5ZPkCLxD+Ym6DjfssS5haTj2iiak/DOb64JeN6OdLfLgptb6/e2kKR+ZuTrGoZTPA==", + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.2.5", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.5.tgz", + "integrity": "sha512-Mgj59/HTuYeK9Gz2MA+mBWKnHsAgkBSec15ZMb1st3oIfFbX7gCjOae7GydHhzcyQi9Z/7M1QuN9bR3oFqF0jQ==", + "cpu": [ + "x64" + ], "dev": true, + "libc": [ + "glibc" + ], "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@radix-ui/react-use-previous": { - "version": "1.1.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-use-previous/-/react-use-previous-1.1.2.tgz", - "integrity": "sha512-IGBQPtRFdhN6MQ8dbegVmBq1LVZluya3F1jWY+puIcQC3MHctRwTDSBWCkL/3ZcnMJLTMJ++Z+ktmvg0F89iCw==", + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.2.5", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.5.tgz", + "integrity": "sha512-mY8AP0/ichsbhAxGnLa3d3+MwV0EfgrPND2bplI3Ym8T6R2pJ0N87bvrKVwNXmdy3jnr6eQBecdqx/HMknBmpA==", + "cpu": [ + "x64" + ], "dev": true, + "libc": [ + "musl" + ], "license": "MIT", - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@radix-ui/react-use-rect": { - "version": "1.1.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-use-rect/-/react-use-rect-1.1.2.tgz", - "integrity": "sha512-d8a+bBY/FxikNPlgJJoaBHZX+zKVbWHYJGTLnLvveQgFSTntkGdEKv3JDtHrMS0DNYpllz2nRsTLGLKYttbpmw==", + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.2.5", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.5.tgz", + "integrity": "sha512-8SLssA2oweAxyRgDp789ACfRb/3P+zNRJpzZxSizxF9m8NUDQ4+3xjo8ttjhVGGw6Qxb70oZiEtIjaKikCO7Yw==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@radix-ui/rect": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@radix-ui/react-use-size": { - "version": "1.1.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-use-size/-/react-use-size-1.1.2.tgz", - "integrity": "sha512-giWQp+4mxjBPt4KZ0MmyuykFNWfbDxKt4x+fPkRYmgRFJSbCZFzUglvMb/Kjn38tm10YP4ufiQZDx3zna4LU6w==", + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.2.5", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.5.tgz", + "integrity": "sha512-vGbruD5zquhoc8D9SViXgN2FBJtNdTyQ4DtG+SWiEGlJiAzoKcZ2xp+xuXCffhubVdt0NJlTZqkeRuERy7g8Cw==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@radix-ui/react-use-layout-effect": "1.1.2" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@radix-ui/react-visually-hidden": { - "version": "1.2.7", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.7.tgz", - "integrity": "sha512-1wNZBggTDK3GRuuQ6nP4k2yi7a6l7I5qbMPbZcRsrGsGVead/f/d5FhEzUvqFs0bcrDLx7n1zKQ3JvLR6whaaw==", + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.2.5", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.5.tgz", + "integrity": "sha512-e/SXpgISz+IoqVcSSI0rx/d/he8zqLex+/rCWpnHpmVfmPIUjag9H6P7zotf0gJHwPUhQxZ/mF8tr6acebT9yw==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@radix-ui/react-primitive": "2.1.7" - }, - "peerDependencies": { - "@types/react": "*", - "@types/react-dom": "*", - "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", - "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "@types/react-dom": { - "optional": true - } + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@radix-ui/rect": { - "version": "1.1.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@radix-ui/rect/-/rect-1.1.2.tgz", - "integrity": "sha512-xnXE7wG13PI+cxieVssYXlQJuYVRhH9NBoxt3KNwzghDIA69GMm7d4wXRouHIYjE+KvS6U/MsMO73NdS2MH9ZA==", + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", "dev": true, "license": "MIT" }, @@ -2467,34 +1980,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@tsconfig/node10": { - "version": "1.0.12", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@tsconfig/node10/-/node10-1.0.12.tgz", - "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://npm.artifacts.pd-internal.com/npm/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true, - "license": "MIT" - }, "node_modules/@tybys/wasm-util": { "version": "0.10.3", "resolved": "https://npm.artifacts.pd-internal.com/npm/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", @@ -2973,82 +2458,33 @@ "win32" ] }, - "node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.17.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/acorn/-/acorn-8.17.0.tgz", - "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.5", - "resolved": "https://npm.artifacts.pd-internal.com/npm/acorn-walk/-/acorn-walk-8.3.5.tgz", - "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", + "node_modules/@vitejs/plugin-react": { + "version": "6.0.5", + "resolved": "https://npm.artifacts.pd-internal.com/npm/@vitejs/plugin-react/-/plugin-react-6.0.5.tgz", + "integrity": "sha512-BOVzne/NL162sMdResB25mUv+vWMF5NoAjNf09TeGlE7ZpszZWSD3winycicLJw72yeVsoCn/2kOhEuCvEShMA==", "dev": true, "license": "MIT", "dependencies": { - "acorn": "^8.11.0" + "@rolldown/pluginutils": "^1.0.1" }, "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ajv": { - "version": "6.15.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/ajv/-/ajv-6.15.0.tgz", - "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", - "dev": true, - "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/ajv-formats": { - "version": "3.0.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" + "node": "^20.19.0 || >=22.12.0" }, "peerDependencies": { - "ajv": "^8.0.0" + "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", + "babel-plugin-react-compiler": "^1.0.0", + "vite": "^8.0.0" }, "peerDependenciesMeta": { - "ajv": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { "optional": true } } }, - "node_modules/ajv-formats/node_modules/ajv": { + "node_modules/ajv": { "version": "8.20.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/ajv/-/ajv-8.20.0.tgz", "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", @@ -3065,13 +2501,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT" - }, "node_modules/ansi-escapes": { "version": "4.3.2", "resolved": "https://npm.artifacts.pd-internal.com/npm/ansi-escapes/-/ansi-escapes-4.3.2.tgz", @@ -3128,13 +2557,6 @@ "node": ">= 8" } }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://npm.artifacts.pd-internal.com/npm/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, - "license": "MIT" - }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://npm.artifacts.pd-internal.com/npm/argparse/-/argparse-1.0.10.tgz", @@ -3145,37 +2567,38 @@ "sprintf-js": "~1.0.2" } }, - "node_modules/aria-hidden": { - "version": "1.2.6", - "resolved": "https://npm.artifacts.pd-internal.com/npm/aria-hidden/-/aria-hidden-1.2.6.tgz", - "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", "dev": true, "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" - }, "engines": { - "node": ">=10" + "node": ">=8.0.0" } }, - "node_modules/async-function": { - "version": "1.0.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "node_modules/atomically": { + "version": "2.1.1", + "resolved": "https://npm.artifacts.pd-internal.com/npm/atomically/-/atomically-2.1.1.tgz", + "integrity": "sha512-P4w9o2dqARji6P7MHprklbfiArZAWvo07yW7qs3pdljb3BWr12FIB7W+p0zJiuiVsUpRO0iZn1kFFcpPegg0tQ==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "stubborn-fs": "^2.0.0", + "when-exit": "^2.1.4" } }, - "node_modules/async-generator-function": { - "version": "1.0.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/async-generator-function/-/async-generator-function-1.0.0.tgz", - "integrity": "sha512-+NAXNqgCrB95ya4Sr66i1CL2hqLVckAk7xwRYWdcm39/ELQ6YNn1aw5r0bdQtqNZgQpEWzc5yc/igXc7aL5SLA==", + "node_modules/auto-bind": { + "version": "5.0.1", + "resolved": "https://npm.artifacts.pd-internal.com/npm/auto-bind/-/auto-bind-5.0.1.tgz", + "integrity": "sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/babel-jest": { @@ -3293,60 +2716,21 @@ "bin": { "baseline-browser-mapping": "dist/cli.cjs" }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/body-parser": { - "version": "2.3.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/body-parser/-/body-parser-2.3.0.tgz", - "integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "^3.1.2", - "content-type": "^2.0.0", - "debug": "^4.4.3", - "http-errors": "^2.0.1", - "iconv-lite": "^0.7.2", - "on-finished": "^2.4.1", - "qs": "^6.15.2", - "raw-body": "^3.0.2", - "type-is": "^2.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/body-parser/node_modules/content-type": { - "version": "2.0.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/content-type/-/content-type-2.0.0.tgz", - "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/brace-expansion": { @@ -3463,37 +2847,6 @@ "node": ">= 0.8" } }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://npm.artifacts.pd-internal.com/npm/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/callsites/-/callsites-3.1.0.tgz", @@ -3623,59 +2976,111 @@ "dev": true, "license": "MIT" }, - "node_modules/class-variance-authority": { - "version": "0.7.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/class-variance-authority/-/class-variance-authority-0.7.1.tgz", - "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "license": "MIT", "dependencies": { - "clsx": "^2.1.1" + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://polar.sh/cva" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "node_modules/cli-truncate": { + "version": "5.2.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/cli-truncate/-/cli-truncate-5.2.0.tgz", + "integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" + "slice-ansi": "^8.0.0", + "string-width": "^8.2.0" + }, + "engines": { + "node": ">=20" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "6.3.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/ansi-regex/-/ansi-regex-6.3.0.tgz", + "integrity": "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==", + "dev": true, + "license": "MIT", "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "node_modules/cli-truncate/node_modules/string-width": { + "version": "8.2.2", + "resolved": "https://npm.artifacts.pd-internal.com/npm/string-width/-/string-width-8.2.2.tgz", + "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", "dev": true, "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, "engines": { - "node": ">=6" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cmdk": { - "version": "1.1.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/cmdk/-/cmdk-1.1.1.tgz", - "integrity": "sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==", + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "license": "MIT", "dependencies": { - "@radix-ui/react-compose-refs": "^1.1.1", - "@radix-ui/react-dialog": "^1.1.6", - "@radix-ui/react-id": "^1.1.0", - "@radix-ui/react-primitive": "^2.0.2" + "ansi-regex": "^6.2.2" }, - "peerDependencies": { - "react": "^18 || ^19 || ^19.0.0-rc", - "react-dom": "^18 || ^19 || ^19.0.0-rc" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://npm.artifacts.pd-internal.com/npm/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/co": { @@ -3689,6 +3094,19 @@ "node": ">= 0.12.0" } }, + "node_modules/code-excerpt": { + "version": "4.0.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/code-excerpt/-/code-excerpt-4.0.0.tgz", + "integrity": "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==", + "dev": true, + "license": "MIT", + "dependencies": { + "convert-to-spaces": "^2.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, "node_modules/collect-v8-coverage": { "version": "1.0.3", "resolved": "https://npm.artifacts.pd-internal.com/npm/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", @@ -3925,20 +3343,6 @@ "node": "^20.19.0 || ^22.12.0 || >=23" } }, - "node_modules/content-disposition": { - "version": "1.1.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/content-disposition/-/content-disposition-1.1.0.tgz", - "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/content-type": { "version": "1.0.5", "resolved": "https://npm.artifacts.pd-internal.com/npm/content-type/-/content-type-1.0.5.tgz", @@ -3956,24 +3360,14 @@ "dev": true, "license": "MIT" }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "node_modules/convert-to-spaces": { + "version": "2.0.1", + "resolved": "https://npm.artifacts.pd-internal.com/npm/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz", + "integrity": "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=6.6.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/cors": { @@ -3994,13 +3388,6 @@ "url": "https://opencollective.com/express" } }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true, - "license": "MIT" - }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://npm.artifacts.pd-internal.com/npm/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -4015,16 +3402,6 @@ "node": ">= 8" } }, - "node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://npm.artifacts.pd-internal.com/npm/debug/-/debug-4.4.3.tgz", @@ -4121,46 +3498,24 @@ "node": ">= 0.8" } }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://npm.artifacts.pd-internal.com/npm/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "engines": { "node": ">=8" } }, - "node_modules/detect-node-es": { - "version": "1.1.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/detect-node-es/-/detect-node-es-1.1.0.tgz", - "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/diff": { - "version": "4.0.4", - "resolved": "https://npm.artifacts.pd-internal.com/npm/diff/-/diff-4.0.4.tgz", - "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, "node_modules/eastasianwidth": { @@ -4170,13 +3525,6 @@ "dev": true, "license": "MIT" }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true, - "license": "MIT" - }, "node_modules/electron-to-chromium": { "version": "1.5.389", "resolved": "https://npm.artifacts.pd-internal.com/npm/electron-to-chromium/-/electron-to-chromium-1.5.389.tgz", @@ -4204,14 +3552,17 @@ "dev": true, "license": "MIT" }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/error-ex": { @@ -4224,38 +3575,18 @@ "is-arrayish": "^0.2.1" } }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/es-object-atoms/-/es-object-atoms-1.1.2.tgz", - "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", + "node_modules/es-toolkit": { + "version": "1.51.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/es-toolkit/-/es-toolkit-1.51.0.tgz", + "integrity": "sha512-zC2lQGkM7QX+Gm6iM3+WIdZJzthsEd14LvRNJneSO2hzyz/zNBENR8+YXWo1cKxgPBtV6ksPYHELbcwBRzmdCw==", "dev": true, "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } + "workspaces": [ + "docs", + "benchmarks", + "tests/types", + "tests/browser-compat" + ] }, "node_modules/escalade": { "version": "3.2.0", @@ -4267,13 +3598,6 @@ "node": ">=6" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://npm.artifacts.pd-internal.com/npm/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true, - "license": "MIT" - }, "node_modules/escape-string-regexp": { "version": "2.0.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", @@ -4298,16 +3622,6 @@ "node": ">=4" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/eventsource": { "version": "3.0.7", "resolved": "https://npm.artifacts.pd-internal.com/npm/eventsource/-/eventsource-3.0.7.tgz", @@ -4381,57 +3695,14 @@ "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/express": { - "version": "5.2.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/express/-/express-5.2.1.tgz", - "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.1", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "depd": "^2.0.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/express-rate-limit": { - "version": "8.5.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/express-rate-limit/-/express-rate-limit-8.5.2.tgz", - "integrity": "sha512-5Kb34ipNX694DH48vN9irak1Qx30nb0PLYHXfJgw4YEjiC3ZEmZJhwOp+VfiCYwFzvFTdB9QkArYS5kXa2cx2A==", + "version": "8.6.2", + "resolved": "https://npm.artifacts.pd-internal.com/npm/express-rate-limit/-/express-rate-limit-8.6.2.tgz", + "integrity": "sha512-YH4ru+eOJxQABscKFfRCy9R7x9QFGdezclVMwwgFFndzS2Xnm0uo6B0ABZsLhcpeptGv2qvuJVWlQr9gQZoC3A==", "dev": true, "license": "MIT", "dependencies": { + "debug": "^4.4.3", "ip-address": "^10.2.0" }, "engines": { @@ -4485,28 +3756,22 @@ "bser": "2.1.1" } }, - "node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], "license": "MIT", - "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, "engines": { - "node": "^12.20 || >= 14.13" + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, "node_modules/fill-range": { @@ -4518,30 +3783,8 @@ "dependencies": { "to-regex-range": "^5.0.1" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "2.1.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/finalhandler/-/finalhandler-2.1.1.tgz", - "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" + "engines": { + "node": ">=8" } }, "node_modules/find-up": { @@ -4588,39 +3831,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://npm.artifacts.pd-internal.com/npm/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fetch-blob": "^3.1.2" - }, - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "2.0.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -4642,26 +3852,6 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/generator-function": { - "version": "2.0.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/generator-function/-/generator-function-2.0.1.tgz", - "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://npm.artifacts.pd-internal.com/npm/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -4695,44 +3885,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-intrinsic": { - "version": "1.3.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/get-intrinsic/-/get-intrinsic-1.3.1.tgz", - "integrity": "sha512-fk1ZVEeOX9hVZ6QzoBNEC55+Ucqg4sTVwrVuigZhuRPESVFpMyXnd3sbXvPOwp7Y9riVyANiqhEuRF0G1aVSeQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "async-function": "^1.0.0", - "async-generator-function": "^1.0.0", - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "generator-function": "^2.0.0", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-nonce": { - "version": "1.0.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/get-nonce/-/get-nonce-1.0.1.tgz", - "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/get-package-type/-/get-package-type-0.1.0.tgz", @@ -4743,20 +3895,6 @@ "node": ">=8.0.0" } }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/get-stream": { "version": "6.0.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/get-stream/-/get-stream-6.0.1.tgz", @@ -4804,19 +3942,6 @@ "node": ">= 6" } }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://npm.artifacts.pd-internal.com/npm/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -4856,32 +3981,6 @@ "node": ">=8" } }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.4", - "resolved": "https://npm.artifacts.pd-internal.com/npm/hasown/-/hasown-2.0.4.tgz", - "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/hono": { "version": "4.12.34", "resolved": "https://npm.artifacts.pd-internal.com/npm/hono/-/hono-4.12.34.tgz", @@ -4984,6 +4083,19 @@ "node": ">=0.8.19" } }, + "node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://npm.artifacts.pd-internal.com/npm/inflight/-/inflight-1.0.6.tgz", @@ -5002,70 +4114,231 @@ "dev": true, "license": "ISC" }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "node_modules/ink": { + "version": "6.8.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/ink/-/ink-6.8.0.tgz", + "integrity": "sha512-sbl1RdLOgkO9isK42WCZlJCFN9hb++sX9dsklOvfd1YQ3bQ2AiFu12Q6tFlr0HvEUvzraJntQCCpfEoUe9DSzA==", "dev": true, "license": "MIT", + "dependencies": { + "@alcalzone/ansi-tokenize": "^0.2.4", + "ansi-escapes": "^7.3.0", + "ansi-styles": "^6.2.1", + "auto-bind": "^5.0.1", + "chalk": "^5.6.0", + "cli-boxes": "^3.0.0", + "cli-cursor": "^4.0.0", + "cli-truncate": "^5.1.1", + "code-excerpt": "^4.0.0", + "es-toolkit": "^1.39.10", + "indent-string": "^5.0.0", + "is-in-ci": "^2.0.0", + "patch-console": "^2.0.0", + "react-reconciler": "^0.33.0", + "scheduler": "^0.27.0", + "signal-exit": "^3.0.7", + "slice-ansi": "^8.0.0", + "stack-utils": "^2.0.6", + "string-width": "^8.1.1", + "terminal-size": "^4.0.1", + "type-fest": "^5.4.1", + "widest-line": "^6.0.0", + "wrap-ansi": "^9.0.0", + "ws": "^8.18.0", + "yoga-layout": "~3.2.1" + }, "engines": { - "node": ">= 0.10" + "node": ">=20" + }, + "peerDependencies": { + "@types/react": ">=19.0.0", + "react": ">=19.0.0", + "react-devtools-core": ">=6.1.2" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react-devtools-core": { + "optional": true + } } }, - "node_modules/ip-address": { - "version": "10.3.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/ip-address/-/ip-address-10.3.1.tgz", - "integrity": "sha512-1e9d3kb97NHJTIJDZW9rKqW2h6+dFa50Dy0fpPSMQp2ADje5gvKsXmdiK6dwY5t76TaTt5+P5N1Y/LoToIxP6g==", + "node_modules/ink/node_modules/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", "dev": true, "license": "MIT", + "dependencies": { + "environment": "^1.0.0" + }, "engines": { - "node": ">= 12" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "node_modules/ink/node_modules/ansi-regex": { + "version": "6.3.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/ansi-regex/-/ansi-regex-6.3.0.tgz", + "integrity": "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.10" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "node_modules/ink/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://npm.artifacts.pd-internal.com/npm/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ink/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://npm.artifacts.pd-internal.com/npm/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ink/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", "dev": true, "license": "MIT" }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/ink/node_modules/string-width": { + "version": "8.2.2", + "resolved": "https://npm.artifacts.pd-internal.com/npm/string-width/-/string-width-8.2.2.tgz", + "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", "dev": true, "license": "MIT", "dependencies": { - "binary-extensions": "^2.0.0" + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" }, "engines": { - "node": ">=8" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ink/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/is-core-module": { - "version": "2.16.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/is-core-module/-/is-core-module-2.16.2.tgz", - "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", + "node_modules/ink/node_modules/type-fest": { + "version": "5.8.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/type-fest/-/type-fest-5.8.0.tgz", + "integrity": "sha512-YGYEVz3Fm5iy/AybuA0oyNFq7H4CgQNfRp/qfe8nurE1kuCeNm3/vfm9X4Mtl+qLyaKJUh5xrFZwogr41SMjYA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "dependencies": { + "tagged-tag": "^1.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ink/node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://npm.artifacts.pd-internal.com/npm/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "dev": true, + "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/ink/node_modules/wrap-ansi/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ip-address": { + "version": "10.3.1", + "resolved": "https://npm.artifacts.pd-internal.com/npm/ip-address/-/ip-address-10.3.1.tgz", + "integrity": "sha512-1e9d3kb97NHJTIJDZW9rKqW2h6+dFa50Dy0fpPSMQp2ADje5gvKsXmdiK6dwY5t76TaTt5+P5N1Y/LoToIxP6g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://npm.artifacts.pd-internal.com/npm/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "license": "MIT", "dependencies": { - "hasown": "^2.0.3" + "binary-extensions": "^2.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, "node_modules/is-docker": { @@ -5127,6 +4400,22 @@ "node": ">=0.10.0" } }, + "node_modules/is-in-ci": { + "version": "2.0.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/is-in-ci/-/is-in-ci-2.0.0.tgz", + "integrity": "sha512-cFeerHriAnhrQSbpAxL37W1wcJKUUX07HyLWZCW1URJT/ra3GyUTzBgUnh24TMVfNTV2Hij2HLxkPHFZfOZy5w==", + "dev": true, + "license": "MIT", + "bin": { + "is-in-ci": "cli.js" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-inside-container": { "version": "1.0.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/is-inside-container/-/is-inside-container-1.0.0.tgz", @@ -5156,13 +4445,6 @@ "node": ">=0.12.0" } }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "dev": true, - "license": "MIT" - }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/is-stream/-/is-stream-2.0.1.tgz", @@ -6072,19 +5354,12 @@ "license": "MIT" }, "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "version": "1.0.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, "license": "MIT" }, - "node_modules/json-schema-typed": { - "version": "8.0.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/json-schema-typed/-/json-schema-typed-8.0.2.tgz", - "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", - "dev": true, - "license": "BSD-2-Clause" - }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://npm.artifacts.pd-internal.com/npm/json5/-/json5-2.2.3.tgz", @@ -6108,6 +5383,279 @@ "node": ">=6" } }, + "node_modules/lightningcss": { + "version": "1.33.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://npm.artifacts.pd-internal.com/npm/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -6135,19 +5683,6 @@ "dev": true, "license": "MIT" }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/lru-cache/-/lru-cache-5.1.1.tgz", @@ -6158,16 +5693,6 @@ "yallist": "^3.0.2" } }, - "node_modules/lucide-react": { - "version": "0.523.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/lucide-react/-/lucide-react-0.523.0.tgz", - "integrity": "sha512-rUjQoy7egZT9XYVXBK1je9ckBnNp7qzRZOhLQx5RcEp2dCGlXo+mv6vf7Am4LimEcFBJIIZzSGfgTqc9QCrPSw==", - "dev": true, - "license": "ISC", - "peerDependencies": { - "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, "node_modules/make-dir": { "version": "4.0.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/make-dir/-/make-dir-4.0.0.tgz", @@ -6209,54 +5734,21 @@ "resolved": "https://npm.artifacts.pd-internal.com/npm/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/marked": { - "version": "18.0.6", - "resolved": "https://npm.artifacts.pd-internal.com/npm/marked/-/marked-18.0.6.tgz", - "integrity": "sha512-MrV5puXBfuiy6wl6DLaq3BtIJQAJToAd5zt/ZKhRfGRAuFPALE7/4Y7jnxRQoEgK/pBgurGqLyAuRgZ2xOjr6w==", - "license": "MIT", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 20" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" } }, - "node_modules/merge-descriptors": { - "version": "2.0.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", - "dev": true, + "node_modules/marked": { + "version": "18.0.6", + "resolved": "https://npm.artifacts.pd-internal.com/npm/marked/-/marked-18.0.6.tgz", + "integrity": "sha512-MrV5puXBfuiy6wl6DLaq3BtIJQAJToAd5zt/ZKhRfGRAuFPALE7/4Y7jnxRQoEgK/pBgurGqLyAuRgZ2xOjr6w==", "license": "MIT", - "engines": { - "node": ">=18" + "bin": { + "marked": "bin/marked.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 20" } }, "node_modules/merge-stream": { @@ -6266,33 +5758,6 @@ "dev": true, "license": "MIT" }, - "node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "3.0.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/mimic-fn/-/mimic-fn-2.1.0.tgz", @@ -6343,6 +5808,25 @@ "dev": true, "license": "MIT" }, + "node_modules/nanoid": { + "version": "3.3.18", + "resolved": "https://npm.artifacts.pd-internal.com/npm/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/napi-postinstall": { "version": "0.3.4", "resolved": "https://npm.artifacts.pd-internal.com/npm/napi-postinstall/-/napi-postinstall-0.3.4.tgz", @@ -6366,16 +5850,6 @@ "dev": true, "license": "MIT" }, - "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://npm.artifacts.pd-internal.com/npm/neo-async/-/neo-async-2.6.2.tgz", @@ -6383,45 +5857,6 @@ "dev": true, "license": "MIT" }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "dev": true, - "license": "MIT", - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/node-int64/-/node-int64-0.4.0.tgz", @@ -6576,30 +6011,14 @@ "node": ">=0.10.0" } }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://npm.artifacts.pd-internal.com/npm/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://npm.artifacts.pd-internal.com/npm/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", "dev": true, "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, "engines": { - "node": ">= 0.8" + "node": ">=14.0.0" } }, "node_modules/once": { @@ -6728,14 +6147,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://npm.artifacts.pd-internal.com/npm/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "node_modules/patch-console": { + "version": "2.0.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/patch-console/-/patch-console-2.0.0.tgz", + "integrity": "sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, "node_modules/path-exists": { @@ -6758,13 +6177,6 @@ "node": ">=0.10.0" } }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", - "dev": true, - "license": "(WTFPL OR MIT)" - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/path-key/-/path-key-3.1.1.tgz", @@ -6774,13 +6186,6 @@ "node": ">=8" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://npm.artifacts.pd-internal.com/npm/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, "node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/path-scurry/-/path-scurry-1.11.1.tgz", @@ -6805,17 +6210,6 @@ "dev": true, "license": "ISC" }, - "node_modules/path-to-regexp": { - "version": "8.4.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/path-to-regexp/-/path-to-regexp-8.4.2.tgz", - "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/picocolors/-/picocolors-1.1.1.tgz", @@ -6836,6 +6230,46 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pino": { + "version": "9.14.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/pino/-/pino-9.14.0.tgz", + "integrity": "sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pinojs/redact": "^0.4.0", + "atomic-sleep": "^1.0.0", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^2.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^5.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^4.0.1", + "thread-stream": "^3.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "2.0.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", + "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "split2": "^4.0.0" + } + }, + "node_modules/pino-std-serializers": { + "version": "7.1.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz", + "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==", + "dev": true, + "license": "MIT" + }, "node_modules/pirates": { "version": "4.0.7", "resolved": "https://npm.artifacts.pd-internal.com/npm/pirates/-/pirates-4.0.7.tgz", @@ -6847,10 +6281,9 @@ } }, "node_modules/pkce-challenge": { - "version": "4.1.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/pkce-challenge/-/pkce-challenge-4.1.0.tgz", - "integrity": "sha512-ZBmhE1C9LcPoH9XZSdwiPtbPHZROwAnMy+kIFQVrnMCxY4Cudlz3gBOpzilgc0jOgRaiT3sIWfpMomW2ar2orQ==", - "dev": true, + "version": "5.0.1", + "resolved": "https://npm.artifacts.pd-internal.com/npm/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", "license": "MIT", "engines": { "node": ">=16.20.0" @@ -6869,6 +6302,35 @@ "node": ">=8" } }, + "node_modules/postcss": { + "version": "8.5.26", + "resolved": "https://npm.artifacts.pd-internal.com/npm/postcss/-/postcss-8.5.26.tgz", + "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.17", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "node_modules/pretty-format": { "version": "30.4.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/pretty-format/-/pretty-format-30.4.1.tgz", @@ -6898,29 +6360,22 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/prismjs": { - "version": "1.30.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/prismjs/-/prismjs-1.30.0.tgz", - "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://npm.artifacts.pd-internal.com/npm/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "node_modules/process-warning": { + "version": "5.1.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/process-warning/-/process-warning-5.1.0.tgz", + "integrity": "sha512-jQSaVHsPgtyw60e1rQ/A+/ArPEj/S8pS/vFnyGa/gYFXrKk/6RuDkoqVDQ5NI5MmS01698ltlAk0NoDBNLujRw==", "dev": true, - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" }, "node_modules/pstree.remy": { "version": "1.1.8", @@ -6929,16 +6384,6 @@ "dev": true, "license": "MIT" }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/pure-rand": { "version": "7.0.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/pure-rand/-/pure-rand-7.0.1.tgz", @@ -6956,36 +6401,12 @@ ], "license": "MIT" }, - "node_modules/qs": { - "version": "6.15.3", - "resolved": "https://npm.artifacts.pd-internal.com/npm/qs/-/qs-6.15.3.tgz", - "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "es-define-property": "^1.0.1", - "side-channel": "^1.1.1" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/range-parser": { - "version": "1.3.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/range-parser/-/range-parser-1.3.0.tgz", - "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://npm.artifacts.pd-internal.com/npm/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } + "license": "MIT" }, "node_modules/raw-body": { "version": "3.0.2", @@ -7004,32 +6425,15 @@ } }, "node_modules/react": { - "version": "18.3.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "version": "19.2.8", + "resolved": "https://npm.artifacts.pd-internal.com/npm/react/-/react-19.2.8.tgz", + "integrity": "sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==", "dev": true, "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" - }, - "peerDependencies": { - "react": "^18.3.1" - } - }, "node_modules/react-is-18": { "name": "react-is", "version": "18.3.1", @@ -7039,94 +6443,27 @@ "license": "MIT" }, "node_modules/react-is-19": { - "name": "react-is", - "version": "19.2.7", - "resolved": "https://npm.artifacts.pd-internal.com/npm/react-is/-/react-is-19.2.7.tgz", - "integrity": "sha512-kZFnouyVv7eP/Phmrlo9FK+zcAdriZJvzxXHF1Sl1P377WSGe2G/JxVolhTrB/jeV47lKImhNUsijjHAAbcl/A==", - "dev": true, - "license": "MIT" - }, - "node_modules/react-remove-scroll": { - "version": "2.7.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/react-remove-scroll/-/react-remove-scroll-2.7.2.tgz", - "integrity": "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "react-remove-scroll-bar": "^2.3.7", - "react-style-singleton": "^2.2.3", - "tslib": "^2.1.0", - "use-callback-ref": "^1.3.3", - "use-sidecar": "^1.1.3" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-remove-scroll-bar": { - "version": "2.3.8", - "resolved": "https://npm.artifacts.pd-internal.com/npm/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", - "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "react-style-singleton": "^2.2.2", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-simple-code-editor": { - "version": "0.14.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/react-simple-code-editor/-/react-simple-code-editor-0.14.1.tgz", - "integrity": "sha512-BR5DtNRy+AswWJECyA17qhUDvrrCZ6zXOCfkQY5zSmb96BVUbpVAv03WpcjcwtCwiLbIANx3gebHOcXYn1EHow==", + "name": "react-is", + "version": "19.2.7", + "resolved": "https://npm.artifacts.pd-internal.com/npm/react-is/-/react-is-19.2.7.tgz", + "integrity": "sha512-kZFnouyVv7eP/Phmrlo9FK+zcAdriZJvzxXHF1Sl1P377WSGe2G/JxVolhTrB/jeV47lKImhNUsijjHAAbcl/A==", "dev": true, - "license": "MIT", - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } + "license": "MIT" }, - "node_modules/react-style-singleton": { - "version": "2.2.3", - "resolved": "https://npm.artifacts.pd-internal.com/npm/react-style-singleton/-/react-style-singleton-2.2.3.tgz", - "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "node_modules/react-reconciler": { + "version": "0.33.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/react-reconciler/-/react-reconciler-0.33.0.tgz", + "integrity": "sha512-KetWRytFv1epdpJc3J4G75I4WrplZE5jOL7Yq0p34+OVOKF4Se7WrdIdVC45XsSSmUTlht2FM/fM1FZb1mfQeA==", "dev": true, "license": "MIT", "dependencies": { - "get-nonce": "^1.0.0", - "tslib": "^2.0.0" + "scheduler": "^0.27.0" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "react": "^19.2.0" } }, "node_modules/readdirp": { @@ -7142,16 +6479,14 @@ "node": ">=8.10.0" } }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, + "license": "MIT", "engines": { - "node": ">= 0.10" + "node": ">= 12.13.0" } }, "node_modules/require-directory": { @@ -7174,28 +6509,6 @@ "node": ">=0.10.0" } }, - "node_modules/resolve": { - "version": "1.22.12", - "resolved": "https://npm.artifacts.pd-internal.com/npm/resolve/-/resolve-1.22.12.tgz", - "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/resolve-cwd": { "version": "3.0.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/resolve-cwd/-/resolve-cwd-3.0.0.tgz", @@ -7219,21 +6532,55 @@ "node": ">=8" } }, - "node_modules/router": { - "version": "2.2.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", + "node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rolldown": { + "version": "1.2.5", + "resolved": "https://npm.artifacts.pd-internal.com/npm/rolldown/-/rolldown-1.2.5.tgz", + "integrity": "sha512-VD2IE5PUG4Oj8zz2VGykiYd5wbnjdIiSsNQb8Qu5B+noEp+A78mu2iVvpp27g8es14Tk9rofNs5Tku9iQCS4fA==", "dev": true, "license": "MIT", "dependencies": { - "debug": "^4.4.0", - "depd": "^2.0.0", - "is-promise": "^4.0.0", - "parseurl": "^1.3.3", - "path-to-regexp": "^8.0.0" + "@oxc-project/types": "=0.146.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" }, "engines": { - "node": ">= 18" + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm-eabi": "1.2.5", + "@rolldown/binding-android-arm64": "1.2.5", + "@rolldown/binding-darwin-arm64": "1.2.5", + "@rolldown/binding-darwin-x64": "1.2.5", + "@rolldown/binding-freebsd-x64": "1.2.5", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.5", + "@rolldown/binding-linux-arm64-gnu": "1.2.5", + "@rolldown/binding-linux-arm64-musl": "1.2.5", + "@rolldown/binding-linux-ppc64-gnu": "1.2.5", + "@rolldown/binding-linux-s390x-gnu": "1.2.5", + "@rolldown/binding-linux-x64-gnu": "1.2.5", + "@rolldown/binding-linux-x64-musl": "1.2.5", + "@rolldown/binding-openharmony-arm64": "1.2.5", + "@rolldown/binding-win32-arm64-msvc": "1.2.5", + "@rolldown/binding-win32-x64-msvc": "1.2.5" } }, "node_modules/run-applescript": { @@ -7259,6 +6606,16 @@ "tslib": "^2.1.0" } }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://npm.artifacts.pd-internal.com/npm/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -7267,14 +6624,11 @@ "license": "MIT" }, "node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "version": "0.27.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - } + "license": "MIT" }, "node_modules/semver": { "version": "6.3.1", @@ -7286,129 +6640,6 @@ "semver": "bin/semver.js" } }, - "node_modules/send": { - "version": "1.2.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/send/-/send-1.2.1.tgz", - "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.4.3", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.1", - "mime-types": "^3.0.2", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/serve-handler": { - "version": "6.1.7", - "resolved": "https://npm.artifacts.pd-internal.com/npm/serve-handler/-/serve-handler-6.1.7.tgz", - "integrity": "sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg==", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "mime-types": "2.1.18", - "minimatch": "3.1.5", - "path-is-inside": "1.0.2", - "path-to-regexp": "3.3.0", - "range-parser": "1.2.0" - } - }, - "node_modules/serve-handler/node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serve-handler/node_modules/content-disposition": { - "version": "0.5.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-handler/node_modules/mime-db": { - "version": "1.33.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-handler/node_modules/mime-types": { - "version": "2.1.18", - "resolved": "https://npm.artifacts.pd-internal.com/npm/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "~1.33.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-handler/node_modules/path-to-regexp": { - "version": "3.3.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/path-to-regexp/-/path-to-regexp-3.3.0.tgz", - "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", - "dev": true, - "license": "MIT" - }, - "node_modules/serve-handler/node_modules/range-parser": { - "version": "1.2.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "2.2.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/serve-static/-/serve-static-2.2.1.tgz", - "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -7437,171 +6668,103 @@ "node": ">=8" } }, - "node_modules/shell-quote": { - "version": "1.9.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/shell-quote/-/shell-quote-1.9.0.tgz", - "integrity": "sha512-Iov+JwFv/2HcTpcwNMKd8+IWNb8tboQJNQTkAY/LLVK7gGH9jy+LGkVqPxfekHl+yMmiqXszdGWXgkfml7hjqA==", + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://npm.artifacts.pd-internal.com/npm/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "license": "ISC" }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://npm.artifacts.pd-internal.com/npm/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" + "semver": "^7.5.3" }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/shx": { - "version": "0.3.4", - "resolved": "https://npm.artifacts.pd-internal.com/npm/shx/-/shx-0.3.4.tgz", - "integrity": "sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==", + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://npm.artifacts.pd-internal.com/npm/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.3", - "shelljs": "^0.8.5" - }, + "license": "ISC", "bin": { - "shx": "lib/cli.js" + "semver": "bin/semver.js" }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/side-channel": { - "version": "1.1.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/side-channel/-/side-channel-1.1.1.tgz", - "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.4", - "side-channel-list": "^1.0.1", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/side-channel-list": { - "version": "1.0.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/side-channel-list/-/side-channel-list-1.0.1.tgz", - "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "node_modules/slice-ansi": { + "version": "8.0.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/slice-ansi/-/slice-ansi-8.0.0.tgz", + "integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==", "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.4" + "ansi-styles": "^6.2.3", + "is-fullwidth-code-point": "^5.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=20" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://npm.artifacts.pd-internal.com/npm/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" + "get-east-asian-width": "^1.3.1" }, "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://npm.artifacts.pd-internal.com/npm/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/simple-update-notifier": { - "version": "2.0.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", - "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "node_modules/sonic-boom": { + "version": "4.2.1", + "resolved": "https://npm.artifacts.pd-internal.com/npm/sonic-boom/-/sonic-boom-4.2.1.tgz", + "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==", "dev": true, "license": "MIT", "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.8.5", - "resolved": "https://npm.artifacts.pd-internal.com/npm/semver/-/semver-7.8.5.tgz", - "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "atomic-sleep": "^1.0.0" } }, "node_modules/source-map": { @@ -7614,6 +6777,16 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://npm.artifacts.pd-internal.com/npm/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-support": { "version": "0.5.13", "resolved": "https://npm.artifacts.pd-internal.com/npm/source-map-support/-/source-map-support-0.5.13.tgz", @@ -7625,15 +6798,14 @@ "source-map": "^0.6.0" } }, - "node_modules/spawn-rx": { - "version": "5.1.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/spawn-rx/-/spawn-rx-5.1.2.tgz", - "integrity": "sha512-/y7tJKALVZ1lPzeZZB9jYnmtrL7d0N2zkorii5a7r7dhHkWIuLTzZpZzMJLK1dmYRgX/NCc4iarTO3F7BS2c/A==", + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.7", - "rxjs": "^7.8.1" + "license": "ISC", + "engines": { + "node": ">= 10.x" } }, "node_modules/sprintf-js": { @@ -7771,6 +6943,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/stubborn-fs": { + "version": "2.0.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/stubborn-fs/-/stubborn-fs-2.0.0.tgz", + "integrity": "sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "stubborn-utils": "^1.0.1" + } + }, + "node_modules/stubborn-utils": { + "version": "1.0.2", + "resolved": "https://npm.artifacts.pd-internal.com/npm/stubborn-utils/-/stubborn-utils-1.0.2.tgz", + "integrity": "sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==", + "dev": true, + "license": "MIT" + }, "node_modules/supports-color": { "version": "8.1.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/supports-color/-/supports-color-8.1.1.tgz", @@ -7787,19 +6976,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/synckit": { "version": "0.11.13", "resolved": "https://npm.artifacts.pd-internal.com/npm/synckit/-/synckit-0.11.13.tgz", @@ -7816,15 +6992,30 @@ "url": "https://opencollective.com/synckit" } }, - "node_modules/tailwind-merge": { - "version": "2.6.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/tailwind-merge/-/tailwind-merge-2.6.1.tgz", - "integrity": "sha512-Oo6tHdpZsGpkKG88HJ8RR1rg/RdnEkQEfMoEk2x1XRI3F1AxeU+ijRXpiVUF4UbLfcxxRGw6TbUINKYdWVsQTQ==", + "node_modules/tagged-tag": { + "version": "1.0.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/tagged-tag/-/tagged-tag-1.0.0.tgz", + "integrity": "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==", "dev": true, "license": "MIT", + "engines": { + "node": ">=20" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/dcastil" + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-size": { + "version": "4.0.1", + "resolved": "https://npm.artifacts.pd-internal.com/npm/terminal-size/-/terminal-size-4.0.1.tgz", + "integrity": "sha512-avMLDQpUI9I5XFrklECw1ZEUPJhqzcwSWsyyI8blhRLT+8N1jLJWLWWYQpB2q2xthq8xDvjZPISVh53T/+CLYQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/test-exclude": { @@ -7842,6 +7033,46 @@ "node": ">=8" } }, + "node_modules/thread-stream": { + "version": "3.2.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/thread-stream/-/thread-stream-3.2.0.tgz", + "integrity": "sha512-zLBvqpwr4Esa0kRjcrzGU6zL25lePWaCLMx0RQFrmteozIfeNdaMLpG5U7PeHzvlFkAWaRKA9/KVW4F60iB+qw==", + "dev": true, + "license": "MIT", + "dependencies": { + "real-require": "^0.2.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://npm.artifacts.pd-internal.com/npm/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://npm.artifacts.pd-internal.com/npm/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://npm.artifacts.pd-internal.com/npm/tmpl/-/tmpl-1.0.5.tgz", @@ -7971,50 +7202,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, "node_modules/tslib": { "version": "2.8.1", "resolved": "https://npm.artifacts.pd-internal.com/npm/tslib/-/tslib-2.8.1.tgz", @@ -8045,39 +7232,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/type-is": { - "version": "2.1.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/type-is/-/type-is-2.1.0.tgz", - "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", - "dev": true, - "license": "MIT", - "dependencies": { - "content-type": "^2.0.0", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/type-is/node_modules/content-type": { - "version": "2.0.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/content-type/-/content-type-2.0.0.tgz", - "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/typescript": { "version": "5.9.3", "resolved": "https://npm.artifacts.pd-internal.com/npm/typescript/-/typescript-5.9.3.tgz", @@ -8113,6 +7267,16 @@ "dev": true, "license": "MIT" }, + "node_modules/undici": { + "version": "8.10.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/undici/-/undici-8.10.0.tgz", + "integrity": "sha512-HvltHd7avK13QIw/oLe4qoOLyoVSoafqJ2jYOrtMRBkbYT31eiBQ8O0ehRKZiEZCMEyLFQNIADpgCWC5fALvYQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=22.19.0" + } + }, "node_modules/undici-types": { "version": "7.18.2", "resolved": "https://npm.artifacts.pd-internal.com/npm/undici-types/-/undici-types-7.18.2.tgz", @@ -8199,91 +7363,120 @@ "browserslist": ">= 4.21.0" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", "dev": true, - "license": "BSD-2-Clause", + "license": "ISC", "dependencies": { - "punycode": "^2.1.0" + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" } }, - "node_modules/use-callback-ref": { - "version": "1.3.3", - "resolved": "https://npm.artifacts.pd-internal.com/npm/use-callback-ref/-/use-callback-ref-1.3.3.tgz", - "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://npm.artifacts.pd-internal.com/npm/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true, "license": "MIT", - "dependencies": { - "tslib": "^2.0.0" - }, "engines": { - "node": ">=10" - }, - "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } + "node": ">= 0.8" } }, - "node_modules/use-sidecar": { - "version": "1.1.3", - "resolved": "https://npm.artifacts.pd-internal.com/npm/use-sidecar/-/use-sidecar-1.1.3.tgz", - "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "node_modules/vite": { + "version": "8.2.1", + "resolved": "https://npm.artifacts.pd-internal.com/npm/vite/-/vite-8.2.1.tgz", + "integrity": "sha512-EU/eS7BH3XROHh2YnBefjM6DBKA6ZeMZEYQbj7NLWg5wHYlhB8B/Mayd5XsgWq+NFYccDOTemRpdETWR6Ka/lw==", "dev": true, "license": "MIT", "dependencies": { - "detect-node-es": "^1.1.0", - "tslib": "^2.0.0" + "lightningcss": "^1.33.0", + "picomatch": "^4.0.5", + "postcss": "^8.5.25", + "rolldown": "~1.2.1", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" }, "engines": { - "node": ">=10" + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/react": "*", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.4.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" }, "peerDependenciesMeta": { - "@types/react": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { "optional": true } } }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true, - "license": "MIT" - }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://npm.artifacts.pd-internal.com/npm/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/walker": { @@ -8296,15 +7489,12 @@ "makeerror": "1.0.12" } }, - "node_modules/web-streams-polyfill": { - "version": "3.3.3", - "resolved": "https://npm.artifacts.pd-internal.com/npm/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "node_modules/when-exit": { + "version": "2.1.5", + "resolved": "https://npm.artifacts.pd-internal.com/npm/when-exit/-/when-exit-2.1.5.tgz", + "integrity": "sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } + "license": "MIT" }, "node_modules/which": { "version": "2.0.2", @@ -8321,6 +7511,68 @@ "node": ">= 8" } }, + "node_modules/widest-line": { + "version": "6.0.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/widest-line/-/widest-line-6.0.0.tgz", + "integrity": "sha512-U89AsyEeAsyoF0zVJBkG9zBgekjgjK7yk9sje3F4IQpXBJ10TF6ByLlIfjMhcmHMJgHZI4KHt4rdNfktzxIAMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^8.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/widest-line/node_modules/ansi-regex": { + "version": "6.3.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/ansi-regex/-/ansi-regex-6.3.0.tgz", + "integrity": "sha512-WpDfL7NO6j7tH88IDBNVdUJxDh9nmCteAVW9dsep846XdwF4naCBK+/tGLX3KJgcpgMRXCFlTM2hKGoK9FsdrQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/widest-line/node_modules/string-width": { + "version": "8.2.2", + "resolved": "https://npm.artifacts.pd-internal.com/npm/string-width/-/string-width-8.2.2.tgz", + "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/widest-line/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://npm.artifacts.pd-internal.com/npm/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/wordwrap/-/wordwrap-1.0.0.tgz", @@ -8400,9 +7652,9 @@ } }, "node_modules/ws": { - "version": "8.21.0", - "resolved": "https://npm.artifacts.pd-internal.com/npm/ws/-/ws-8.21.0.tgz", - "integrity": "sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==", + "version": "8.21.3", + "resolved": "https://npm.artifacts.pd-internal.com/npm/ws/-/ws-8.21.3.tgz", + "integrity": "sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==", "dev": true, "license": "MIT", "engines": { @@ -8498,16 +7750,6 @@ "node": ">=12" } }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://npm.artifacts.pd-internal.com/npm/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://npm.artifacts.pd-internal.com/npm/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -8521,6 +7763,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yoga-layout": { + "version": "3.2.1", + "resolved": "https://npm.artifacts.pd-internal.com/npm/yoga-layout/-/yoga-layout-3.2.1.tgz", + "integrity": "sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==", + "dev": true, + "license": "MIT" + }, "node_modules/zod": { "version": "4.4.3", "resolved": "https://npm.artifacts.pd-internal.com/npm/zod/-/zod-4.4.3.tgz", @@ -8529,16 +7778,6 @@ "funding": { "url": "https://github.com/sponsors/colinhacks" } - }, - "node_modules/zod-to-json-schema": { - "version": "3.25.2", - "resolved": "https://npm.artifacts.pd-internal.com/npm/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", - "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", - "dev": true, - "license": "ISC", - "peerDependencies": { - "zod": "^3.25.28 || ^4" - } } } } diff --git a/package.json b/package.json index e9a13d6..8b63143 100644 --- a/package.json +++ b/package.json @@ -48,14 +48,11 @@ "overrides": { "hono": "4.12.34", "fast-uri": "4.1.2", - "@modelcontextprotocol/sdk": { - "ajv": "8.20.0" - }, "ip-address": "10.3.1", "@hono/node-server": "^2.0.5" }, "devDependencies": { - "@modelcontextprotocol/inspector": "^1.0.0", + "@modelcontextprotocol/inspector": "^2.3.0", "@types/jest": "^30.0.0", "@types/node": "^24.0.0", "concurrently": "10.0.3", From 21063aa36b9e42c5d5880313c43635e96a6f37fd Mon Sep 17 00:00:00 2001 From: smartinellibenedetti <139791797+smartinellibenedetti@users.noreply.github.com> Date: Wed, 19 Aug 2026 17:15:56 -0600 Subject: [PATCH 5/6] Serve both 2025-era and 2026-07-28 MCP protocol revisions over stdio MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The v2 SDK's modern-era (2026-07-28) support is opt-in: a hand-wired server.connect(new StdioServerTransport()) only ever serves the 2025-era protocol regardless of SDK version. Switches to serveStdio(buildServer) from @modelcontextprotocol/server/stdio, which pins one instance per connection and transparently serves both eras from the same handler registrations via the SDK's legacy shim — no handler logic changes. Verified both eras end-to-end: the existing 2025-era integration test (via @modelcontextprotocol/client) still passes, and a hand-built 2026-07-28 server/discover -> tools/list -> tools/call round trip against the built server returns resultType: "complete" throughout. Also adds inspector.config.json (a catalog entry with protocolEra: "modern") and points npm run inspect at it via --config/--server, since MCP Inspector's ad-hoc launch mode (mcp-inspector ) has no persisted server entry for a Protocol Era setting to attach to. Co-Authored-By: Claude Sonnet 5 --- inspector.config.json | 9 + package.json | 2 +- src/index.ts | 649 +++++++++++++++++++++--------------------- 3 files changed, 338 insertions(+), 322 deletions(-) create mode 100644 inspector.config.json diff --git a/inspector.config.json b/inspector.config.json new file mode 100644 index 0000000..474258c --- /dev/null +++ b/inspector.config.json @@ -0,0 +1,9 @@ +{ + "mcpServers": { + "rundeck-mcp": { + "command": "node", + "args": ["dist/index.js"], + "protocolEra": "modern" + } + } +} diff --git a/package.json b/package.json index 8b63143..ea609da 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "test": "env -u RUNDECK_URL -u RUNDECK_TOKEN -u RUNDECK_INSTANCES -u RUNDECK_API_VERSION NODE_OPTIONS=--experimental-vm-modules jest", "test:watch": "env -u RUNDECK_URL -u RUNDECK_TOKEN -u RUNDECK_INSTANCES -u RUNDECK_API_VERSION NODE_OPTIONS=--experimental-vm-modules jest --watch", "validate": "npm run build && npm test && node dist/__tests__/run-all-validations.js", - "inspect": "npm run build && mcp-inspector node dist/index.js" + "inspect": "npm run build && mcp-inspector --config ./inspector.config.json --server rundeck-mcp" }, "keywords": [ "mcp", diff --git a/src/index.ts b/src/index.ts index f6fee7c..1e3a8b9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,6 @@ #!/usr/bin/env node -import { StdioServerTransport } from "@modelcontextprotocol/server/stdio"; +import { serveStdio } from "@modelcontextprotocol/server/stdio"; import { Server } from "@modelcontextprotocol/server"; import type { CallToolResult, GetPromptResult } from "@modelcontextprotocol/server"; import { handleResource, listResources } from "./resources/index.js"; @@ -126,367 +126,374 @@ function returnGuidance(guidanceContent: string): CallToolResult { // Initialize configuration configManager.initialize(); -const server = new Server( - { name: "rundeck-docs", version: "1.0.0" }, - { capabilities: { resources: {}, tools: {}, prompts: {} } } -); - -// ── Resources ────────────────────────────────────────────────────────────── - -server.setRequestHandler('resources/list', async (request) => { - logger.logRequest("resources/list", request.params); - const resources = listResources(); - const result = { - resources: resources.map((r) => ({ - uri: r.uri, - name: r.description, - mimeType: "text/markdown", - description: r.description, - })), - }; - logger.logResponse("resources/list", result); - return result; -}); - -server.setRequestHandler('resources/read', async (request) => { - const uri = request.params.uri; - logger.logRequest("resources/read", request.params); - logger.logResourceAccess(uri); - const content = handleResource(uri); - const result = { - contents: [{ uri, mimeType: "text/markdown", text: content }], - }; - logger.logResponse("resources/read", result); - return result; -}); - -// ── Tools ────────────────────────────────────────────────────────────────── - -server.setRequestHandler('tools/list', async (request) => { - logger.logRequest("tools/list", request.params); - const toolDefinitions: Record = { - api_call: { - description: API_CALL_DESCRIPTION, - inputSchema: convertSchema(rundeckApiCallSchema), - }, - api_list: { - description: `List available Rundeck API endpoints with descriptions and categories. - -**When to use:** -- Discovering available API endpoints -- Finding endpoints for specific categories (jobs, projects, executions, etc.) -- Understanding API structure before making calls - -**When NOT to use:** -- Making actual API calls (use api_call instead) -- Reading API documentation (use rundeck://api resource instead) - -**Example:** List all job-related endpoints by calling with category: "jobs"`, - inputSchema: convertSchema(rundeckListEndpointsSchema), - }, - job_create: { - description: JOB_CREATE_DESCRIPTION, - inputSchema: convertSchema(rundeckGenerateJobSchema), - }, - job_validate: { - description: JOB_VALIDATE_DESCRIPTION, - inputSchema: convertSchema(rundeckValidateJobSchema), - }, - runner_create: { - description: RUNNER_CREATE_DESCRIPTION, - inputSchema: convertSchema(rundeckCreateRunnerSchema), - }, - acl_validate: { - description: `Validate a Rundeck ACL Policy YAML document offline against the aclpolicy v1.0 format. - -**When to use:** -- Checking ACL policy structure (context, for, by/notBy, allow/deny) before creating or updating it -- Debugging why a policy might be silently rejecting access (missing match clause, missing by/notBy, etc.) - -**When NOT to use:** -- Actually creating/updating/deleting a policy on the server (use acl_manage instead) -- Making generic API calls (use api_call instead) - -**Reference docs (read these directly — do not guess the URI or list all resources):** -- \`rundeck://docs/manual/document-format-reference/aclpolicy-v10\` — full YAML format spec (context, for, by/notBy, allow/deny) -- Worked examples, one per access pattern: \`rundeck://docs/learning/howto/acls/group-readonly\`, \`rundeck://docs/learning/howto/acls/group-project-exec\`, \`rundeck://docs/learning/howto/acls/group-project-full\`, \`rundeck://docs/learning/howto/acls/group-manage-runner\`, \`rundeck://docs/learning/howto/acls/group-jobname\`, \`rundeck://docs/learning/howto/acls/group-jobgroup\`, \`rundeck://docs/learning/howto/acls/group-node-filtered\`, \`rundeck://docs/learning/howto/acls/group-multiproject\`, \`rundeck://docs/learning/howto/acls/group-apikey\` - -**Guidance Mode:** Call without required params (acl_definition) to get guidance. -**Note:** This is a local structural check, not a substitute for Rundeck's own server-side validation.`, - inputSchema: convertSchema(rundeckValidateAclSchema), - }, - acl_manage: { - description: ACL_MANAGE_DESCRIPTION, - inputSchema: convertSchema(rundeckManageAclSchema), - }, - resource_model_source_manage: { - description: RESOURCE_MODEL_SOURCE_MANAGE_DESCRIPTION, - inputSchema: convertSchema(rundeckManageResourceSourceSchema), - }, - docs_search: { - description: `Search local Rundeck documentation (markdown under RUNDECK_DOCS_PATH) by keywords and phrases. - -**When to use:** -- Finding where a topic, term, or feature is documented before opening a resource -- Exploring the docs when you do not know the exact \`rundeck://\` URI -- Getting ranked excerpts and file paths to narrow which resource to read next - -**When NOT to use:** -- Reading a full document you already identified (use resources/read with the \`rundeck://...\` URI) -- Making API calls to a Rundeck server (use api_call) -- Generating jobs (use job_create) - -**Follow-up:** Prefer \`resources/read\` on the best match for complete, authoritative content.`, - inputSchema: convertSchema(rundeckSearchDocsSchema), - }, - }; +// Builds a fresh Server instance with every handler registered. serveStdio() +// (below) pins one instance from this factory per connection — the same +// factory transparently serves both the 2025-era protocol and 2026-07-28, +// so handler logic here needs no era-specific branching. +function buildServer(): Server { + const server = new Server( + { name: "rundeck-docs", version: "1.0.0" }, + { capabilities: { resources: {}, tools: {}, prompts: {} } } + ); + + // ── Resources ──────────────────────────────────────────────────────────── + + server.setRequestHandler('resources/list', async (request) => { + logger.logRequest("resources/list", request.params); + const resources = listResources(); + const result = { + resources: resources.map((r) => ({ + uri: r.uri, + name: r.description, + mimeType: "text/markdown", + description: r.description, + })), + }; + logger.logResponse("resources/list", result); + return result; + }); + + server.setRequestHandler('resources/read', async (request) => { + const uri = request.params.uri; + logger.logRequest("resources/read", request.params); + logger.logResourceAccess(uri); + const content = handleResource(uri); + const result = { + contents: [{ uri, mimeType: "text/markdown", text: content }], + }; + logger.logResponse("resources/read", result); + return result; + }); + + // ── Tools ────────────────────────────────────────────────────────────────── + + server.setRequestHandler('tools/list', async (request) => { + logger.logRequest("tools/list", request.params); + const toolDefinitions: Record = { + api_call: { + description: API_CALL_DESCRIPTION, + inputSchema: convertSchema(rundeckApiCallSchema), + }, + api_list: { + description: `List available Rundeck API endpoints with descriptions and categories. + + **When to use:** + - Discovering available API endpoints + - Finding endpoints for specific categories (jobs, projects, executions, etc.) + - Understanding API structure before making calls + + **When NOT to use:** + - Making actual API calls (use api_call instead) + - Reading API documentation (use rundeck://api resource instead) + + **Example:** List all job-related endpoints by calling with category: "jobs"`, + inputSchema: convertSchema(rundeckListEndpointsSchema), + }, + job_create: { + description: JOB_CREATE_DESCRIPTION, + inputSchema: convertSchema(rundeckGenerateJobSchema), + }, + job_validate: { + description: JOB_VALIDATE_DESCRIPTION, + inputSchema: convertSchema(rundeckValidateJobSchema), + }, + runner_create: { + description: RUNNER_CREATE_DESCRIPTION, + inputSchema: convertSchema(rundeckCreateRunnerSchema), + }, + acl_validate: { + description: `Validate a Rundeck ACL Policy YAML document offline against the aclpolicy v1.0 format. + + **When to use:** + - Checking ACL policy structure (context, for, by/notBy, allow/deny) before creating or updating it + - Debugging why a policy might be silently rejecting access (missing match clause, missing by/notBy, etc.) + + **When NOT to use:** + - Actually creating/updating/deleting a policy on the server (use acl_manage instead) + - Making generic API calls (use api_call instead) + + **Reference docs (read these directly — do not guess the URI or list all resources):** + - \`rundeck://docs/manual/document-format-reference/aclpolicy-v10\` — full YAML format spec (context, for, by/notBy, allow/deny) + - Worked examples, one per access pattern: \`rundeck://docs/learning/howto/acls/group-readonly\`, \`rundeck://docs/learning/howto/acls/group-project-exec\`, \`rundeck://docs/learning/howto/acls/group-project-full\`, \`rundeck://docs/learning/howto/acls/group-manage-runner\`, \`rundeck://docs/learning/howto/acls/group-jobname\`, \`rundeck://docs/learning/howto/acls/group-jobgroup\`, \`rundeck://docs/learning/howto/acls/group-node-filtered\`, \`rundeck://docs/learning/howto/acls/group-multiproject\`, \`rundeck://docs/learning/howto/acls/group-apikey\` + + **Guidance Mode:** Call without required params (acl_definition) to get guidance. + **Note:** This is a local structural check, not a substitute for Rundeck's own server-side validation.`, + inputSchema: convertSchema(rundeckValidateAclSchema), + }, + acl_manage: { + description: ACL_MANAGE_DESCRIPTION, + inputSchema: convertSchema(rundeckManageAclSchema), + }, + resource_model_source_manage: { + description: RESOURCE_MODEL_SOURCE_MANAGE_DESCRIPTION, + inputSchema: convertSchema(rundeckManageResourceSourceSchema), + }, + docs_search: { + description: `Search local Rundeck documentation (markdown under RUNDECK_DOCS_PATH) by keywords and phrases. + + **When to use:** + - Finding where a topic, term, or feature is documented before opening a resource + - Exploring the docs when you do not know the exact \`rundeck://\` URI + - Getting ranked excerpts and file paths to narrow which resource to read next + + **When NOT to use:** + - Reading a full document you already identified (use resources/read with the \`rundeck://...\` URI) + - Making API calls to a Rundeck server (use api_call) + - Generating jobs (use job_create) + + **Follow-up:** Prefer \`resources/read\` on the best match for complete, authoritative content.`, + inputSchema: convertSchema(rundeckSearchDocsSchema), + }, + }; - const tools = REGISTERED_TOOL_NAMES.map((name) => ({ name, ...toolDefinitions[name] })); + const tools = REGISTERED_TOOL_NAMES.map((name) => ({ name, ...toolDefinitions[name] })); - // Only exposed when RUNDECK_INSTANCES defines a multi-instance registry. - // Without it, RUNDECK_URL/RUNDECK_TOKEN are the only connection and there's - // nothing to switch between, so the tool would just be confusing clutter. - if (configManager.hasInstanceRegistry()) { - tools.push({ - name: "rundeck_connect", - description: `Switch the active Rundeck instance by name, when multiple instances are registered via RUNDECK_INSTANCES. + // Only exposed when RUNDECK_INSTANCES defines a multi-instance registry. + // Without it, RUNDECK_URL/RUNDECK_TOKEN are the only connection and there's + // nothing to switch between, so the tool would just be confusing clutter. + if (configManager.hasInstanceRegistry()) { + tools.push({ + name: "rundeck_connect", + description: `Switch the active Rundeck instance by name, when multiple instances are registered via RUNDECK_INSTANCES. -**When to use:** -- The user asks to use a different registered Rundeck instance (e.g. "switch to staging") + **When to use:** + - The user asks to use a different registered Rundeck instance (e.g. "switch to staging") -**When NOT to use:** -- Only one Rundeck instance is configured (this tool won't be available in that case) -- Making API calls (use api_call instead — it uses whichever instance is currently active) + **When NOT to use:** + - Only one Rundeck instance is configured (this tool won't be available in that case) + - Making API calls (use api_call instead — it uses whichever instance is currently active) -**Input:** Only a registered instance **name** — never a URL or token. -**Guidance:** Omit \`instance\` to see the list of registered instance names.`, - inputSchema: convertSchema(rundeckConnectSchema), - }); - } + **Input:** Only a registered instance **name** — never a URL or token. + **Guidance:** Omit \`instance\` to see the list of registered instance names.`, + inputSchema: convertSchema(rundeckConnectSchema), + }); + } - logger.info(`Returning ${tools.length} tools`); - const result = { tools }; - logger.logResponse("tools/list", result); - return result; -}); + logger.info(`Returning ${tools.length} tools`); + const result = { tools }; + logger.logResponse("tools/list", result); + return result; + }); -server.setRequestHandler('tools/call', async (request): Promise => { - const { name, arguments: args } = request.params; - logger.logRequest("tools/call", request.params); - logger.logToolCall(name, args); + server.setRequestHandler('tools/call', async (request): Promise => { + const { name, arguments: args } = request.params; + logger.logRequest("tools/call", request.params); + logger.logToolCall(name, args); - try { - switch (name) { - case "api_call": { - if (needsGuidance(args, ["endpoint"])) { - logger.info("api_call called without required params - returning guidance"); - return returnGuidance(getApiCallGuidance()); + try { + switch (name) { + case "api_call": { + if (needsGuidance(args, ["endpoint"])) { + logger.info("api_call called without required params - returning guidance"); + return returnGuidance(getApiCallGuidance()); + } + const parsed = rundeckApiCallSchema.parse(args ?? {}); + const apiResult = await rundeckApiCall(parsed); + return { content: [{ type: "text", text: JSON.stringify(apiResult, null, 2) }] }; } - const parsed = rundeckApiCallSchema.parse(args ?? {}); - const apiResult = await rundeckApiCall(parsed); - return { content: [{ type: "text", text: JSON.stringify(apiResult, null, 2) }] }; - } - - case "api_list": { - const parsed = rundeckListEndpointsSchema.parse(args ?? {}); - const endpoints = rundeckListEndpoints(parsed); - return { content: [{ type: "text", text: JSON.stringify(endpoints, null, 2) }] }; - } - case "job_create": { - if (needsGuidance(args, ["name", "project", "workflow_steps"])) { - logger.info("job_create called without required params - returning guidance"); - return returnGuidance(getJobCreationGuidance()); + case "api_list": { + const parsed = rundeckListEndpointsSchema.parse(args ?? {}); + const endpoints = rundeckListEndpoints(parsed); + return { content: [{ type: "text", text: JSON.stringify(endpoints, null, 2) }] }; } - const parsed = rundeckGenerateJobSchema.parse(args ?? {}); - const jobDef = rundeckGenerateJob(parsed); - return { content: [{ type: "text", text: jobDef }] }; - } - case "job_validate": { - if (needsGuidance(args, ["job_definition", "format"])) { - logger.info("job_validate called without required params - returning guidance"); - return returnGuidance(getJobValidationGuidance()); + case "job_create": { + if (needsGuidance(args, ["name", "project", "workflow_steps"])) { + logger.info("job_create called without required params - returning guidance"); + return returnGuidance(getJobCreationGuidance()); + } + const parsed = rundeckGenerateJobSchema.parse(args ?? {}); + const jobDef = rundeckGenerateJob(parsed); + return { content: [{ type: "text", text: jobDef }] }; } - const parsed = rundeckValidateJobSchema.parse(args ?? {}); - const validation = rundeckValidateJob(parsed); - return { content: [{ type: "text", text: JSON.stringify(validation, null, 2) }] }; - } - case "runner_create": { - if (needsGuidance(args, ["name", "scope"])) { - logger.info("runner_create called without required params - returning guidance"); - return returnGuidance(getRunnerGuidance()); + case "job_validate": { + if (needsGuidance(args, ["job_definition", "format"])) { + logger.info("job_validate called without required params - returning guidance"); + return returnGuidance(getJobValidationGuidance()); + } + const parsed = rundeckValidateJobSchema.parse(args ?? {}); + const validation = rundeckValidateJob(parsed); + return { content: [{ type: "text", text: JSON.stringify(validation, null, 2) }] }; } - const runnerParams = rundeckCreateRunnerSchema.parse(args); - const runnerResult = await rundeckCreateRunner(runnerParams); - return { content: [{ type: "text", text: JSON.stringify(runnerResult, null, 2) }] }; - } - case "acl_validate": { - if (needsGuidance(args, ["acl_definition"])) { - logger.info("acl_validate called without required params - returning guidance"); - return returnGuidance(getAclValidateGuidance()); + case "runner_create": { + if (needsGuidance(args, ["name", "scope"])) { + logger.info("runner_create called without required params - returning guidance"); + return returnGuidance(getRunnerGuidance()); + } + const runnerParams = rundeckCreateRunnerSchema.parse(args); + const runnerResult = await rundeckCreateRunner(runnerParams); + return { content: [{ type: "text", text: JSON.stringify(runnerResult, null, 2) }] }; } - const parsed = rundeckValidateAclSchema.parse(args ?? {}); - const aclValidation = rundeckValidateAcl(parsed); - return { content: [{ type: "text", text: JSON.stringify(aclValidation, null, 2) }] }; - } - case "acl_manage": - if (needsGuidance(args, ["action", "scope"])) { - logger.info("acl_manage called without required params - returning guidance"); - return returnGuidance(getAclManageGuidance()); + case "acl_validate": { + if (needsGuidance(args, ["acl_definition"])) { + logger.info("acl_validate called without required params - returning guidance"); + return returnGuidance(getAclValidateGuidance()); + } + const parsed = rundeckValidateAclSchema.parse(args ?? {}); + const aclValidation = rundeckValidateAcl(parsed); + return { content: [{ type: "text", text: JSON.stringify(aclValidation, null, 2) }] }; } - const aclParams = rundeckManageAclSchema.parse(args); - const aclResult = await rundeckManageAcl(aclParams); - return { content: [{ type: "text", text: JSON.stringify(aclResult, null, 2) }] }; - - case "resource_model_source_manage": { - // 'project' isn't required for 'list_provider_types'/'describe_provider_config' (instance-wide - // plugin metadata, not project-scoped), so it's only checked for the actions that do need it — - // otherwise a bare `{ action: "add_source" }` call would skip straight to a terse schema-refine - // error instead of the full step-by-step guidance. - const rsmAction = (args as Record | undefined)?.action; - const rsmNeedsProject = - typeof rsmAction === "string" && - (PROJECT_SCOPED_ACTIONS as string[]).includes(rsmAction) && - needsGuidance(args, ["project"]); - if (needsGuidance(args, ["action"]) || rsmNeedsProject) { - logger.info("resource_model_source_manage called without required params - returning guidance"); - return returnGuidance(getResourceSourceManageGuidance()); + + case "acl_manage": + if (needsGuidance(args, ["action", "scope"])) { + logger.info("acl_manage called without required params - returning guidance"); + return returnGuidance(getAclManageGuidance()); + } + const aclParams = rundeckManageAclSchema.parse(args); + const aclResult = await rundeckManageAcl(aclParams); + return { content: [{ type: "text", text: JSON.stringify(aclResult, null, 2) }] }; + + case "resource_model_source_manage": { + // 'project' isn't required for 'list_provider_types'/'describe_provider_config' (instance-wide + // plugin metadata, not project-scoped), so it's only checked for the actions that do need it — + // otherwise a bare `{ action: "add_source" }` call would skip straight to a terse schema-refine + // error instead of the full step-by-step guidance. + const rsmAction = (args as Record | undefined)?.action; + const rsmNeedsProject = + typeof rsmAction === "string" && + (PROJECT_SCOPED_ACTIONS as string[]).includes(rsmAction) && + needsGuidance(args, ["project"]); + if (needsGuidance(args, ["action"]) || rsmNeedsProject) { + logger.info("resource_model_source_manage called without required params - returning guidance"); + return returnGuidance(getResourceSourceManageGuidance()); + } + const resourceSourceParams = rundeckManageResourceSourceSchema.parse(args); + const resourceSourceResult = await rundeckManageResourceSource(resourceSourceParams); + return { content: [{ type: "text", text: JSON.stringify(resourceSourceResult, null, 2) }] }; } - const resourceSourceParams = rundeckManageResourceSourceSchema.parse(args); - const resourceSourceResult = await rundeckManageResourceSource(resourceSourceParams); - return { content: [{ type: "text", text: JSON.stringify(resourceSourceResult, null, 2) }] }; - } - case "docs_search": { - const parsed = rundeckSearchDocsSchema.parse(args ?? {}); - const searchHits = rundeckSearchDocs(parsed); - return { content: [{ type: "text", text: JSON.stringify(searchHits, null, 2) }] }; - } + case "docs_search": { + const parsed = rundeckSearchDocsSchema.parse(args ?? {}); + const searchHits = rundeckSearchDocs(parsed); + return { content: [{ type: "text", text: JSON.stringify(searchHits, null, 2) }] }; + } - case "rundeck_connect": { - if (!configManager.hasInstanceRegistry()) { - throw new Error( - "rundeck_connect is unavailable: no RUNDECK_INSTANCES registry is configured." - ); + case "rundeck_connect": { + if (!configManager.hasInstanceRegistry()) { + throw new Error( + "rundeck_connect is unavailable: no RUNDECK_INSTANCES registry is configured." + ); + } + if (needsGuidance(args, ["instance"])) { + logger.info("rundeck_connect called without required params - returning guidance"); + return returnGuidance(getRundeckConnectGuidance(configManager.listInstanceNames())); + } + const parsed = rundeckConnectSchema.parse(args ?? {}); + const connectResult = await rundeckConnect(parsed); + return { content: [{ type: "text", text: JSON.stringify(connectResult, null, 2) }] }; } - if (needsGuidance(args, ["instance"])) { - logger.info("rundeck_connect called without required params - returning guidance"); - return returnGuidance(getRundeckConnectGuidance(configManager.listInstanceNames())); + + default: { + logger.warn(`Unknown tool requested: ${name}`); + const available = [...REGISTERED_TOOL_NAMES]; + if (configManager.hasInstanceRegistry()) { + available.push("rundeck_connect"); + } + throw new Error(`Unknown tool: ${name}. Available tools: ${available.join(", ")}.`); } - const parsed = rundeckConnectSchema.parse(args ?? {}); - const connectResult = await rundeckConnect(parsed); - return { content: [{ type: "text", text: JSON.stringify(connectResult, null, 2) }] }; } + } catch (error) { + const errorMessage = + error instanceof z.ZodError + ? error.issues.map((e) => `${e.path.join(".") || "(root)"}: ${e.message}`).join("; ") + : error instanceof Error + ? error.message + : String(error); + logger.error(`Tool error for ${name}`, error); + return { + content: [{ type: "text", text: `Error executing tool '${name}': ${errorMessage}` }], + isError: true, + }; + } + }); + + // ── Prompts ──────────────────────────────────────────────────────────────── + + server.setRequestHandler('prompts/list', async (request) => { + logger.logRequest("prompts/list", request.params); + const promptList = prompts.map((prompt) => ({ + name: prompt.name, + description: prompt.description, + arguments: (prompt.arguments ?? []).map((arg) => ({ + name: arg.name, + description: arg.description, + required: arg.required, + })), + })); + logger.info(`Returning ${promptList.length} prompts`); + const result = { prompts: promptList }; + logger.logResponse("prompts/list", result); + return result; + }); + + server.setRequestHandler('prompts/get', async (request): Promise => { + const { name, arguments: args } = request.params; + logger.logRequest("prompts/get", request.params); + + const prompt = getPrompt(name); + if (!prompt) { + const availablePrompts = prompts.map((p) => p.name).join(", "); + const errorMessage = `Prompt "${name}" not found. Available prompts: ${availablePrompts}`; + logger.warn(errorMessage); + throw new Error(errorMessage); + } - default: { - logger.warn(`Unknown tool requested: ${name}`); - const available = [...REGISTERED_TOOL_NAMES]; - if (configManager.hasInstanceRegistry()) { - available.push("rundeck_connect"); + if (prompt.argumentSchema && args) { + try { + prompt.argumentSchema.parse(args); + } catch (validationError) { + if (validationError instanceof z.ZodError) { + const errorMessages = validationError.issues + .map((err) => `${err.path.join(".")}: ${err.message}`) + .join("; "); + const errorMessage = `Invalid arguments for prompt "${name}": ${errorMessages}`; + logger.warn(errorMessage); + throw new Error(errorMessage); } - throw new Error(`Unknown tool: ${name}. Available tools: ${available.join(", ")}.`); + throw validationError; } } - } catch (error) { - const errorMessage = - error instanceof z.ZodError - ? error.issues.map((e) => `${e.path.join(".") || "(root)"}: ${e.message}`).join("; ") - : error instanceof Error - ? error.message - : String(error); - logger.error(`Tool error for ${name}`, error); - return { - content: [{ type: "text", text: `Error executing tool '${name}': ${errorMessage}` }], - isError: true, - }; - } -}); - -// ── Prompts ──────────────────────────────────────────────────────────────── - -server.setRequestHandler('prompts/list', async (request) => { - logger.logRequest("prompts/list", request.params); - const promptList = prompts.map((prompt) => ({ - name: prompt.name, - description: prompt.description, - arguments: (prompt.arguments ?? []).map((arg) => ({ - name: arg.name, - description: arg.description, - required: arg.required, - })), - })); - logger.info(`Returning ${promptList.length} prompts`); - const result = { prompts: promptList }; - logger.logResponse("prompts/list", result); - return result; -}); - -server.setRequestHandler('prompts/get', async (request): Promise => { - const { name, arguments: args } = request.params; - logger.logRequest("prompts/get", request.params); - - const prompt = getPrompt(name); - if (!prompt) { - const availablePrompts = prompts.map((p) => p.name).join(", "); - const errorMessage = `Prompt "${name}" not found. Available prompts: ${availablePrompts}`; - logger.warn(errorMessage); - throw new Error(errorMessage); - } - if (prompt.argumentSchema && args) { - try { - prompt.argumentSchema.parse(args); - } catch (validationError) { - if (validationError instanceof z.ZodError) { - const errorMessages = validationError.issues - .map((err) => `${err.path.join(".")}: ${err.message}`) - .join("; "); - const errorMessage = `Invalid arguments for prompt "${name}": ${errorMessages}`; + if (prompt.arguments) { + const missingRequired = prompt.arguments + .filter((arg) => arg.required && (!args || !(arg.name in args))) + .map((arg) => arg.name); + if (missingRequired.length > 0) { + const errorMessage = `Missing required arguments for prompt "${name}": ${missingRequired.join(", ")}`; logger.warn(errorMessage); throw new Error(errorMessage); } - throw validationError; } - } - if (prompt.arguments) { - const missingRequired = prompt.arguments - .filter((arg) => arg.required && (!args || !(arg.name in args))) - .map((arg) => arg.name); - if (missingRequired.length > 0) { - const errorMessage = `Missing required arguments for prompt "${name}": ${missingRequired.join(", ")}`; - logger.warn(errorMessage); - throw new Error(errorMessage); - } - } + const content = prompt.getContent(args || {}); + logger.logResponse("prompts/get", { name, hasContent: !!content }); + return { messages: [{ role: "user", content: { type: "text", text: content } }] }; + }); - const content = prompt.getContent(args || {}); - logger.logResponse("prompts/get", { name, hasContent: !!content }); - return { messages: [{ role: "user", content: { type: "text", text: content } }] }; -}); + // ── Error handler ────────────────────────────────────────────────────────── -// ── Error handler ────────────────────────────────────────────────────────── + server.onerror = (error) => { + logger.error("MCP server error", error); + }; -server.onerror = (error) => { - logger.error("MCP server error", error); -}; + return server; +} -process.on("SIGINT", async () => { - await server.close(); - process.exit(0); -}); +// ── Bootstrap ──────────────────────────────────────────────────────────────── -async function main() { - const transport = new StdioServerTransport(); - await server.connect(transport); +try { + const stdioHandle = serveStdio(buildServer); logger.info("Rundeck Documentation MCP server running on stdio"); -} -main().catch((error) => { + process.on("SIGINT", async () => { + await stdioHandle.close(); + process.exit(0); + }); +} catch (error) { logger.error("Fatal error starting server", error); process.exit(1); -}); +} From 9be42a7bebbea31c713275e4e369c98f0e9ae0a9 Mon Sep 17 00:00:00 2001 From: smartinellibenedetti <139791797+smartinellibenedetti@users.noreply.github.com> Date: Wed, 19 Aug 2026 17:28:59 -0600 Subject: [PATCH 6/6] Simplify serveStdio wiring and add out-of-band error logging + modern-era test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Drops the buildServer() factory wrapper from the previous commit: since a stdio process serves exactly one connection for its whole lifetime, serveStdio()'s factory is only ever called once anyway, so there's no need to move the ~300 lines of handler registrations into a new function scope. Builds the single Server instance at module scope exactly as before and hands serveStdio() a trivial `() => server` factory instead — same runtime behavior, but the diff against the SDK v2 migration base is now a few dozen lines instead of a wholesale reindentation of the whole file. Also wires up ServeStdioOptions.onerror: out-of-band errors from the opening/era-classification exchange (e.g. a malformed 2026-07-28 envelope claim) happen before any Server instance is pinned, so they never reached the instance's own onerror — they were answered correctly on the wire but invisible in our logs until now. Adds an integration test that pins a real Client to `versionNegotiation: { mode: { pin: "2026-07-28" } }` and drives a full discover -> tools/list -> tools/call round trip against the built server. Verified it's load-bearing by temporarily reverting the serveStdio bootstrap to the old hand-wired (2025-only) form: the test failed with a clear SdkError, then passed again once restored. Co-Authored-By: Claude Sonnet 5 --- .../integration-server-tool-gating.test.ts | 51 ++ src/index.ts | 641 +++++++++--------- 2 files changed, 373 insertions(+), 319 deletions(-) diff --git a/src/__tests__/integration/integration-server-tool-gating.test.ts b/src/__tests__/integration/integration-server-tool-gating.test.ts index fa03149..c673ac5 100644 --- a/src/__tests__/integration/integration-server-tool-gating.test.ts +++ b/src/__tests__/integration/integration-server-tool-gating.test.ts @@ -157,3 +157,54 @@ describe("Integration: index.ts tools/list schema fidelity", () => { expect(schema.required).toEqual(["endpoint"]); }, 15000); }); + +// Regression coverage for the serveStdio() migration: index.ts serves both +// the 2025-era protocol and 2026-07-28 ("modern era") from the same handler +// registrations via the SDK's legacy shim. The 2025-era path is already +// exercised by every other test in this file (Client defaults to it); this +// specifically pins the client to 2026-07-28 so a regression in the +// serveStdio() wiring (e.g. reverting to a hand-wired +// `server.connect(new StdioServerTransport())`, which only ever serves +// 2025-era) is caught automatically instead of requiring manual verification. +describe("Integration: index.ts serves the 2026-07-28 protocol revision", () => { + beforeAll(() => { + if (!fs.existsSync(serverEntry)) { + throw new Error( + `${serverEntry} does not exist — run \`npm run build\` before running this test.` + ); + } + }); + + async function connectModern(env: Record) { + const transport = new StdioClientTransport({ + command: process.execPath, + args: [serverEntry], + env, + }); + const client = new Client( + { name: "test-client-modern", version: "0.0.0" }, + { versionNegotiation: { mode: { pin: "2026-07-28" } } } + ); + await client.connect(transport); + return client; + } + + it("completes a full discover -> tools/list -> tools/call round trip pinned to 2026-07-28", async () => { + const env = { ...process.env } as Record; + delete env.RUNDECK_INSTANCES; + const client = await connectModern(env); + + try { + const tools = await client.listTools(); + expect(tools.tools.length).toBeGreaterThan(0); + + const result = await client.callTool({ + name: "docs_search", + arguments: { query: "node filters" }, + }); + expect(result.content).toBeDefined(); + } finally { + await client.close(); + } + }, 15000); +}); diff --git a/src/index.ts b/src/index.ts index 1e3a8b9..32d3535 100644 --- a/src/index.ts +++ b/src/index.ts @@ -126,367 +126,370 @@ function returnGuidance(guidanceContent: string): CallToolResult { // Initialize configuration configManager.initialize(); -// Builds a fresh Server instance with every handler registered. serveStdio() -// (below) pins one instance from this factory per connection — the same -// factory transparently serves both the 2025-era protocol and 2026-07-28, -// so handler logic here needs no era-specific branching. -function buildServer(): Server { - const server = new Server( - { name: "rundeck-docs", version: "1.0.0" }, - { capabilities: { resources: {}, tools: {}, prompts: {} } } - ); - - // ── Resources ──────────────────────────────────────────────────────────── - - server.setRequestHandler('resources/list', async (request) => { - logger.logRequest("resources/list", request.params); - const resources = listResources(); - const result = { - resources: resources.map((r) => ({ - uri: r.uri, - name: r.description, - mimeType: "text/markdown", - description: r.description, - })), - }; - logger.logResponse("resources/list", result); - return result; - }); - - server.setRequestHandler('resources/read', async (request) => { - const uri = request.params.uri; - logger.logRequest("resources/read", request.params); - logger.logResourceAccess(uri); - const content = handleResource(uri); - const result = { - contents: [{ uri, mimeType: "text/markdown", text: content }], - }; - logger.logResponse("resources/read", result); - return result; - }); - - // ── Tools ────────────────────────────────────────────────────────────────── - - server.setRequestHandler('tools/list', async (request) => { - logger.logRequest("tools/list", request.params); - const toolDefinitions: Record = { - api_call: { - description: API_CALL_DESCRIPTION, - inputSchema: convertSchema(rundeckApiCallSchema), - }, - api_list: { - description: `List available Rundeck API endpoints with descriptions and categories. - - **When to use:** - - Discovering available API endpoints - - Finding endpoints for specific categories (jobs, projects, executions, etc.) - - Understanding API structure before making calls - - **When NOT to use:** - - Making actual API calls (use api_call instead) - - Reading API documentation (use rundeck://api resource instead) - - **Example:** List all job-related endpoints by calling with category: "jobs"`, - inputSchema: convertSchema(rundeckListEndpointsSchema), - }, - job_create: { - description: JOB_CREATE_DESCRIPTION, - inputSchema: convertSchema(rundeckGenerateJobSchema), - }, - job_validate: { - description: JOB_VALIDATE_DESCRIPTION, - inputSchema: convertSchema(rundeckValidateJobSchema), - }, - runner_create: { - description: RUNNER_CREATE_DESCRIPTION, - inputSchema: convertSchema(rundeckCreateRunnerSchema), - }, - acl_validate: { - description: `Validate a Rundeck ACL Policy YAML document offline against the aclpolicy v1.0 format. - - **When to use:** - - Checking ACL policy structure (context, for, by/notBy, allow/deny) before creating or updating it - - Debugging why a policy might be silently rejecting access (missing match clause, missing by/notBy, etc.) - - **When NOT to use:** - - Actually creating/updating/deleting a policy on the server (use acl_manage instead) - - Making generic API calls (use api_call instead) - - **Reference docs (read these directly — do not guess the URI or list all resources):** - - \`rundeck://docs/manual/document-format-reference/aclpolicy-v10\` — full YAML format spec (context, for, by/notBy, allow/deny) - - Worked examples, one per access pattern: \`rundeck://docs/learning/howto/acls/group-readonly\`, \`rundeck://docs/learning/howto/acls/group-project-exec\`, \`rundeck://docs/learning/howto/acls/group-project-full\`, \`rundeck://docs/learning/howto/acls/group-manage-runner\`, \`rundeck://docs/learning/howto/acls/group-jobname\`, \`rundeck://docs/learning/howto/acls/group-jobgroup\`, \`rundeck://docs/learning/howto/acls/group-node-filtered\`, \`rundeck://docs/learning/howto/acls/group-multiproject\`, \`rundeck://docs/learning/howto/acls/group-apikey\` - - **Guidance Mode:** Call without required params (acl_definition) to get guidance. - **Note:** This is a local structural check, not a substitute for Rundeck's own server-side validation.`, - inputSchema: convertSchema(rundeckValidateAclSchema), - }, - acl_manage: { - description: ACL_MANAGE_DESCRIPTION, - inputSchema: convertSchema(rundeckManageAclSchema), - }, - resource_model_source_manage: { - description: RESOURCE_MODEL_SOURCE_MANAGE_DESCRIPTION, - inputSchema: convertSchema(rundeckManageResourceSourceSchema), - }, - docs_search: { - description: `Search local Rundeck documentation (markdown under RUNDECK_DOCS_PATH) by keywords and phrases. - - **When to use:** - - Finding where a topic, term, or feature is documented before opening a resource - - Exploring the docs when you do not know the exact \`rundeck://\` URI - - Getting ranked excerpts and file paths to narrow which resource to read next - - **When NOT to use:** - - Reading a full document you already identified (use resources/read with the \`rundeck://...\` URI) - - Making API calls to a Rundeck server (use api_call) - - Generating jobs (use job_create) - - **Follow-up:** Prefer \`resources/read\` on the best match for complete, authoritative content.`, - inputSchema: convertSchema(rundeckSearchDocsSchema), - }, - }; +// A single Server instance, built once: this stdio process serves exactly +// one connection for its whole lifetime, so serveStdio() (below) only ever +// calls its factory once — the same instance transparently serves both the +// 2025-era protocol and 2026-07-28 via the SDK's legacy shim. +const server = new Server( + { name: "rundeck-docs", version: "1.0.0" }, + { capabilities: { resources: {}, tools: {}, prompts: {} } } +); + +// ── Resources ────────────────────────────────────────────────────────────── + +server.setRequestHandler('resources/list', async (request) => { + logger.logRequest("resources/list", request.params); + const resources = listResources(); + const result = { + resources: resources.map((r) => ({ + uri: r.uri, + name: r.description, + mimeType: "text/markdown", + description: r.description, + })), + }; + logger.logResponse("resources/list", result); + return result; +}); + +server.setRequestHandler('resources/read', async (request) => { + const uri = request.params.uri; + logger.logRequest("resources/read", request.params); + logger.logResourceAccess(uri); + const content = handleResource(uri); + const result = { + contents: [{ uri, mimeType: "text/markdown", text: content }], + }; + logger.logResponse("resources/read", result); + return result; +}); + +// ── Tools ────────────────────────────────────────────────────────────────── + +server.setRequestHandler('tools/list', async (request) => { + logger.logRequest("tools/list", request.params); + const toolDefinitions: Record = { + api_call: { + description: API_CALL_DESCRIPTION, + inputSchema: convertSchema(rundeckApiCallSchema), + }, + api_list: { + description: `List available Rundeck API endpoints with descriptions and categories. + +**When to use:** +- Discovering available API endpoints +- Finding endpoints for specific categories (jobs, projects, executions, etc.) +- Understanding API structure before making calls + +**When NOT to use:** +- Making actual API calls (use api_call instead) +- Reading API documentation (use rundeck://api resource instead) + +**Example:** List all job-related endpoints by calling with category: "jobs"`, + inputSchema: convertSchema(rundeckListEndpointsSchema), + }, + job_create: { + description: JOB_CREATE_DESCRIPTION, + inputSchema: convertSchema(rundeckGenerateJobSchema), + }, + job_validate: { + description: JOB_VALIDATE_DESCRIPTION, + inputSchema: convertSchema(rundeckValidateJobSchema), + }, + runner_create: { + description: RUNNER_CREATE_DESCRIPTION, + inputSchema: convertSchema(rundeckCreateRunnerSchema), + }, + acl_validate: { + description: `Validate a Rundeck ACL Policy YAML document offline against the aclpolicy v1.0 format. + +**When to use:** +- Checking ACL policy structure (context, for, by/notBy, allow/deny) before creating or updating it +- Debugging why a policy might be silently rejecting access (missing match clause, missing by/notBy, etc.) + +**When NOT to use:** +- Actually creating/updating/deleting a policy on the server (use acl_manage instead) +- Making generic API calls (use api_call instead) + +**Reference docs (read these directly — do not guess the URI or list all resources):** +- \`rundeck://docs/manual/document-format-reference/aclpolicy-v10\` — full YAML format spec (context, for, by/notBy, allow/deny) +- Worked examples, one per access pattern: \`rundeck://docs/learning/howto/acls/group-readonly\`, \`rundeck://docs/learning/howto/acls/group-project-exec\`, \`rundeck://docs/learning/howto/acls/group-project-full\`, \`rundeck://docs/learning/howto/acls/group-manage-runner\`, \`rundeck://docs/learning/howto/acls/group-jobname\`, \`rundeck://docs/learning/howto/acls/group-jobgroup\`, \`rundeck://docs/learning/howto/acls/group-node-filtered\`, \`rundeck://docs/learning/howto/acls/group-multiproject\`, \`rundeck://docs/learning/howto/acls/group-apikey\` + +**Guidance Mode:** Call without required params (acl_definition) to get guidance. +**Note:** This is a local structural check, not a substitute for Rundeck's own server-side validation.`, + inputSchema: convertSchema(rundeckValidateAclSchema), + }, + acl_manage: { + description: ACL_MANAGE_DESCRIPTION, + inputSchema: convertSchema(rundeckManageAclSchema), + }, + resource_model_source_manage: { + description: RESOURCE_MODEL_SOURCE_MANAGE_DESCRIPTION, + inputSchema: convertSchema(rundeckManageResourceSourceSchema), + }, + docs_search: { + description: `Search local Rundeck documentation (markdown under RUNDECK_DOCS_PATH) by keywords and phrases. + +**When to use:** +- Finding where a topic, term, or feature is documented before opening a resource +- Exploring the docs when you do not know the exact \`rundeck://\` URI +- Getting ranked excerpts and file paths to narrow which resource to read next + +**When NOT to use:** +- Reading a full document you already identified (use resources/read with the \`rundeck://...\` URI) +- Making API calls to a Rundeck server (use api_call) +- Generating jobs (use job_create) + +**Follow-up:** Prefer \`resources/read\` on the best match for complete, authoritative content.`, + inputSchema: convertSchema(rundeckSearchDocsSchema), + }, + }; - const tools = REGISTERED_TOOL_NAMES.map((name) => ({ name, ...toolDefinitions[name] })); + const tools = REGISTERED_TOOL_NAMES.map((name) => ({ name, ...toolDefinitions[name] })); - // Only exposed when RUNDECK_INSTANCES defines a multi-instance registry. - // Without it, RUNDECK_URL/RUNDECK_TOKEN are the only connection and there's - // nothing to switch between, so the tool would just be confusing clutter. - if (configManager.hasInstanceRegistry()) { - tools.push({ - name: "rundeck_connect", - description: `Switch the active Rundeck instance by name, when multiple instances are registered via RUNDECK_INSTANCES. + // Only exposed when RUNDECK_INSTANCES defines a multi-instance registry. + // Without it, RUNDECK_URL/RUNDECK_TOKEN are the only connection and there's + // nothing to switch between, so the tool would just be confusing clutter. + if (configManager.hasInstanceRegistry()) { + tools.push({ + name: "rundeck_connect", + description: `Switch the active Rundeck instance by name, when multiple instances are registered via RUNDECK_INSTANCES. - **When to use:** - - The user asks to use a different registered Rundeck instance (e.g. "switch to staging") +**When to use:** +- The user asks to use a different registered Rundeck instance (e.g. "switch to staging") - **When NOT to use:** - - Only one Rundeck instance is configured (this tool won't be available in that case) - - Making API calls (use api_call instead — it uses whichever instance is currently active) +**When NOT to use:** +- Only one Rundeck instance is configured (this tool won't be available in that case) +- Making API calls (use api_call instead — it uses whichever instance is currently active) - **Input:** Only a registered instance **name** — never a URL or token. - **Guidance:** Omit \`instance\` to see the list of registered instance names.`, - inputSchema: convertSchema(rundeckConnectSchema), - }); - } +**Input:** Only a registered instance **name** — never a URL or token. +**Guidance:** Omit \`instance\` to see the list of registered instance names.`, + inputSchema: convertSchema(rundeckConnectSchema), + }); + } - logger.info(`Returning ${tools.length} tools`); - const result = { tools }; - logger.logResponse("tools/list", result); - return result; - }); + logger.info(`Returning ${tools.length} tools`); + const result = { tools }; + logger.logResponse("tools/list", result); + return result; +}); - server.setRequestHandler('tools/call', async (request): Promise => { - const { name, arguments: args } = request.params; - logger.logRequest("tools/call", request.params); - logger.logToolCall(name, args); +server.setRequestHandler('tools/call', async (request): Promise => { + const { name, arguments: args } = request.params; + logger.logRequest("tools/call", request.params); + logger.logToolCall(name, args); - try { - switch (name) { - case "api_call": { - if (needsGuidance(args, ["endpoint"])) { - logger.info("api_call called without required params - returning guidance"); - return returnGuidance(getApiCallGuidance()); - } - const parsed = rundeckApiCallSchema.parse(args ?? {}); - const apiResult = await rundeckApiCall(parsed); - return { content: [{ type: "text", text: JSON.stringify(apiResult, null, 2) }] }; + try { + switch (name) { + case "api_call": { + if (needsGuidance(args, ["endpoint"])) { + logger.info("api_call called without required params - returning guidance"); + return returnGuidance(getApiCallGuidance()); } + const parsed = rundeckApiCallSchema.parse(args ?? {}); + const apiResult = await rundeckApiCall(parsed); + return { content: [{ type: "text", text: JSON.stringify(apiResult, null, 2) }] }; + } - case "api_list": { - const parsed = rundeckListEndpointsSchema.parse(args ?? {}); - const endpoints = rundeckListEndpoints(parsed); - return { content: [{ type: "text", text: JSON.stringify(endpoints, null, 2) }] }; - } + case "api_list": { + const parsed = rundeckListEndpointsSchema.parse(args ?? {}); + const endpoints = rundeckListEndpoints(parsed); + return { content: [{ type: "text", text: JSON.stringify(endpoints, null, 2) }] }; + } - case "job_create": { - if (needsGuidance(args, ["name", "project", "workflow_steps"])) { - logger.info("job_create called without required params - returning guidance"); - return returnGuidance(getJobCreationGuidance()); - } - const parsed = rundeckGenerateJobSchema.parse(args ?? {}); - const jobDef = rundeckGenerateJob(parsed); - return { content: [{ type: "text", text: jobDef }] }; + case "job_create": { + if (needsGuidance(args, ["name", "project", "workflow_steps"])) { + logger.info("job_create called without required params - returning guidance"); + return returnGuidance(getJobCreationGuidance()); } + const parsed = rundeckGenerateJobSchema.parse(args ?? {}); + const jobDef = rundeckGenerateJob(parsed); + return { content: [{ type: "text", text: jobDef }] }; + } - case "job_validate": { - if (needsGuidance(args, ["job_definition", "format"])) { - logger.info("job_validate called without required params - returning guidance"); - return returnGuidance(getJobValidationGuidance()); - } - const parsed = rundeckValidateJobSchema.parse(args ?? {}); - const validation = rundeckValidateJob(parsed); - return { content: [{ type: "text", text: JSON.stringify(validation, null, 2) }] }; + case "job_validate": { + if (needsGuidance(args, ["job_definition", "format"])) { + logger.info("job_validate called without required params - returning guidance"); + return returnGuidance(getJobValidationGuidance()); } + const parsed = rundeckValidateJobSchema.parse(args ?? {}); + const validation = rundeckValidateJob(parsed); + return { content: [{ type: "text", text: JSON.stringify(validation, null, 2) }] }; + } - case "runner_create": { - if (needsGuidance(args, ["name", "scope"])) { - logger.info("runner_create called without required params - returning guidance"); - return returnGuidance(getRunnerGuidance()); - } - const runnerParams = rundeckCreateRunnerSchema.parse(args); - const runnerResult = await rundeckCreateRunner(runnerParams); - return { content: [{ type: "text", text: JSON.stringify(runnerResult, null, 2) }] }; + case "runner_create": { + if (needsGuidance(args, ["name", "scope"])) { + logger.info("runner_create called without required params - returning guidance"); + return returnGuidance(getRunnerGuidance()); } + const runnerParams = rundeckCreateRunnerSchema.parse(args); + const runnerResult = await rundeckCreateRunner(runnerParams); + return { content: [{ type: "text", text: JSON.stringify(runnerResult, null, 2) }] }; + } - case "acl_validate": { - if (needsGuidance(args, ["acl_definition"])) { - logger.info("acl_validate called without required params - returning guidance"); - return returnGuidance(getAclValidateGuidance()); - } - const parsed = rundeckValidateAclSchema.parse(args ?? {}); - const aclValidation = rundeckValidateAcl(parsed); - return { content: [{ type: "text", text: JSON.stringify(aclValidation, null, 2) }] }; + case "acl_validate": { + if (needsGuidance(args, ["acl_definition"])) { + logger.info("acl_validate called without required params - returning guidance"); + return returnGuidance(getAclValidateGuidance()); } + const parsed = rundeckValidateAclSchema.parse(args ?? {}); + const aclValidation = rundeckValidateAcl(parsed); + return { content: [{ type: "text", text: JSON.stringify(aclValidation, null, 2) }] }; + } - case "acl_manage": - if (needsGuidance(args, ["action", "scope"])) { - logger.info("acl_manage called without required params - returning guidance"); - return returnGuidance(getAclManageGuidance()); - } - const aclParams = rundeckManageAclSchema.parse(args); - const aclResult = await rundeckManageAcl(aclParams); - return { content: [{ type: "text", text: JSON.stringify(aclResult, null, 2) }] }; - - case "resource_model_source_manage": { - // 'project' isn't required for 'list_provider_types'/'describe_provider_config' (instance-wide - // plugin metadata, not project-scoped), so it's only checked for the actions that do need it — - // otherwise a bare `{ action: "add_source" }` call would skip straight to a terse schema-refine - // error instead of the full step-by-step guidance. - const rsmAction = (args as Record | undefined)?.action; - const rsmNeedsProject = - typeof rsmAction === "string" && - (PROJECT_SCOPED_ACTIONS as string[]).includes(rsmAction) && - needsGuidance(args, ["project"]); - if (needsGuidance(args, ["action"]) || rsmNeedsProject) { - logger.info("resource_model_source_manage called without required params - returning guidance"); - return returnGuidance(getResourceSourceManageGuidance()); - } - const resourceSourceParams = rundeckManageResourceSourceSchema.parse(args); - const resourceSourceResult = await rundeckManageResourceSource(resourceSourceParams); - return { content: [{ type: "text", text: JSON.stringify(resourceSourceResult, null, 2) }] }; + case "acl_manage": + if (needsGuidance(args, ["action", "scope"])) { + logger.info("acl_manage called without required params - returning guidance"); + return returnGuidance(getAclManageGuidance()); } - - case "docs_search": { - const parsed = rundeckSearchDocsSchema.parse(args ?? {}); - const searchHits = rundeckSearchDocs(parsed); - return { content: [{ type: "text", text: JSON.stringify(searchHits, null, 2) }] }; + const aclParams = rundeckManageAclSchema.parse(args); + const aclResult = await rundeckManageAcl(aclParams); + return { content: [{ type: "text", text: JSON.stringify(aclResult, null, 2) }] }; + + case "resource_model_source_manage": { + // 'project' isn't required for 'list_provider_types'/'describe_provider_config' (instance-wide + // plugin metadata, not project-scoped), so it's only checked for the actions that do need it — + // otherwise a bare `{ action: "add_source" }` call would skip straight to a terse schema-refine + // error instead of the full step-by-step guidance. + const rsmAction = (args as Record | undefined)?.action; + const rsmNeedsProject = + typeof rsmAction === "string" && + (PROJECT_SCOPED_ACTIONS as string[]).includes(rsmAction) && + needsGuidance(args, ["project"]); + if (needsGuidance(args, ["action"]) || rsmNeedsProject) { + logger.info("resource_model_source_manage called without required params - returning guidance"); + return returnGuidance(getResourceSourceManageGuidance()); } + const resourceSourceParams = rundeckManageResourceSourceSchema.parse(args); + const resourceSourceResult = await rundeckManageResourceSource(resourceSourceParams); + return { content: [{ type: "text", text: JSON.stringify(resourceSourceResult, null, 2) }] }; + } - case "rundeck_connect": { - if (!configManager.hasInstanceRegistry()) { - throw new Error( - "rundeck_connect is unavailable: no RUNDECK_INSTANCES registry is configured." - ); - } - if (needsGuidance(args, ["instance"])) { - logger.info("rundeck_connect called without required params - returning guidance"); - return returnGuidance(getRundeckConnectGuidance(configManager.listInstanceNames())); - } - const parsed = rundeckConnectSchema.parse(args ?? {}); - const connectResult = await rundeckConnect(parsed); - return { content: [{ type: "text", text: JSON.stringify(connectResult, null, 2) }] }; - } + case "docs_search": { + const parsed = rundeckSearchDocsSchema.parse(args ?? {}); + const searchHits = rundeckSearchDocs(parsed); + return { content: [{ type: "text", text: JSON.stringify(searchHits, null, 2) }] }; + } - default: { - logger.warn(`Unknown tool requested: ${name}`); - const available = [...REGISTERED_TOOL_NAMES]; - if (configManager.hasInstanceRegistry()) { - available.push("rundeck_connect"); - } - throw new Error(`Unknown tool: ${name}. Available tools: ${available.join(", ")}.`); + case "rundeck_connect": { + if (!configManager.hasInstanceRegistry()) { + throw new Error( + "rundeck_connect is unavailable: no RUNDECK_INSTANCES registry is configured." + ); + } + if (needsGuidance(args, ["instance"])) { + logger.info("rundeck_connect called without required params - returning guidance"); + return returnGuidance(getRundeckConnectGuidance(configManager.listInstanceNames())); } + const parsed = rundeckConnectSchema.parse(args ?? {}); + const connectResult = await rundeckConnect(parsed); + return { content: [{ type: "text", text: JSON.stringify(connectResult, null, 2) }] }; } - } catch (error) { - const errorMessage = - error instanceof z.ZodError - ? error.issues.map((e) => `${e.path.join(".") || "(root)"}: ${e.message}`).join("; ") - : error instanceof Error - ? error.message - : String(error); - logger.error(`Tool error for ${name}`, error); - return { - content: [{ type: "text", text: `Error executing tool '${name}': ${errorMessage}` }], - isError: true, - }; - } - }); - - // ── Prompts ──────────────────────────────────────────────────────────────── - - server.setRequestHandler('prompts/list', async (request) => { - logger.logRequest("prompts/list", request.params); - const promptList = prompts.map((prompt) => ({ - name: prompt.name, - description: prompt.description, - arguments: (prompt.arguments ?? []).map((arg) => ({ - name: arg.name, - description: arg.description, - required: arg.required, - })), - })); - logger.info(`Returning ${promptList.length} prompts`); - const result = { prompts: promptList }; - logger.logResponse("prompts/list", result); - return result; - }); - - server.setRequestHandler('prompts/get', async (request): Promise => { - const { name, arguments: args } = request.params; - logger.logRequest("prompts/get", request.params); - const prompt = getPrompt(name); - if (!prompt) { - const availablePrompts = prompts.map((p) => p.name).join(", "); - const errorMessage = `Prompt "${name}" not found. Available prompts: ${availablePrompts}`; - logger.warn(errorMessage); - throw new Error(errorMessage); - } - - if (prompt.argumentSchema && args) { - try { - prompt.argumentSchema.parse(args); - } catch (validationError) { - if (validationError instanceof z.ZodError) { - const errorMessages = validationError.issues - .map((err) => `${err.path.join(".")}: ${err.message}`) - .join("; "); - const errorMessage = `Invalid arguments for prompt "${name}": ${errorMessages}`; - logger.warn(errorMessage); - throw new Error(errorMessage); + default: { + logger.warn(`Unknown tool requested: ${name}`); + const available = [...REGISTERED_TOOL_NAMES]; + if (configManager.hasInstanceRegistry()) { + available.push("rundeck_connect"); } - throw validationError; + throw new Error(`Unknown tool: ${name}. Available tools: ${available.join(", ")}.`); } } + } catch (error) { + const errorMessage = + error instanceof z.ZodError + ? error.issues.map((e) => `${e.path.join(".") || "(root)"}: ${e.message}`).join("; ") + : error instanceof Error + ? error.message + : String(error); + logger.error(`Tool error for ${name}`, error); + return { + content: [{ type: "text", text: `Error executing tool '${name}': ${errorMessage}` }], + isError: true, + }; + } +}); + +// ── Prompts ──────────────────────────────────────────────────────────────── + +server.setRequestHandler('prompts/list', async (request) => { + logger.logRequest("prompts/list", request.params); + const promptList = prompts.map((prompt) => ({ + name: prompt.name, + description: prompt.description, + arguments: (prompt.arguments ?? []).map((arg) => ({ + name: arg.name, + description: arg.description, + required: arg.required, + })), + })); + logger.info(`Returning ${promptList.length} prompts`); + const result = { prompts: promptList }; + logger.logResponse("prompts/list", result); + return result; +}); + +server.setRequestHandler('prompts/get', async (request): Promise => { + const { name, arguments: args } = request.params; + logger.logRequest("prompts/get", request.params); + + const prompt = getPrompt(name); + if (!prompt) { + const availablePrompts = prompts.map((p) => p.name).join(", "); + const errorMessage = `Prompt "${name}" not found. Available prompts: ${availablePrompts}`; + logger.warn(errorMessage); + throw new Error(errorMessage); + } - if (prompt.arguments) { - const missingRequired = prompt.arguments - .filter((arg) => arg.required && (!args || !(arg.name in args))) - .map((arg) => arg.name); - if (missingRequired.length > 0) { - const errorMessage = `Missing required arguments for prompt "${name}": ${missingRequired.join(", ")}`; + if (prompt.argumentSchema && args) { + try { + prompt.argumentSchema.parse(args); + } catch (validationError) { + if (validationError instanceof z.ZodError) { + const errorMessages = validationError.issues + .map((err) => `${err.path.join(".")}: ${err.message}`) + .join("; "); + const errorMessage = `Invalid arguments for prompt "${name}": ${errorMessages}`; logger.warn(errorMessage); throw new Error(errorMessage); } + throw validationError; } + } - const content = prompt.getContent(args || {}); - logger.logResponse("prompts/get", { name, hasContent: !!content }); - return { messages: [{ role: "user", content: { type: "text", text: content } }] }; - }); + if (prompt.arguments) { + const missingRequired = prompt.arguments + .filter((arg) => arg.required && (!args || !(arg.name in args))) + .map((arg) => arg.name); + if (missingRequired.length > 0) { + const errorMessage = `Missing required arguments for prompt "${name}": ${missingRequired.join(", ")}`; + logger.warn(errorMessage); + throw new Error(errorMessage); + } + } - // ── Error handler ────────────────────────────────────────────────────────── + const content = prompt.getContent(args || {}); + logger.logResponse("prompts/get", { name, hasContent: !!content }); + return { messages: [{ role: "user", content: { type: "text", text: content } }] }; +}); - server.onerror = (error) => { - logger.error("MCP server error", error); - }; +// ── Error handler ────────────────────────────────────────────────────────── - return server; -} +server.onerror = (error) => { + logger.error("MCP server error", error); +}; // ── Bootstrap ──────────────────────────────────────────────────────────────── try { - const stdioHandle = serveStdio(buildServer); + const stdioHandle = serveStdio(() => server, { + // Out-of-band errors from the opening/era-classification exchange + // itself (e.g. a malformed 2026-07-28 envelope claim) happen before any + // Server instance is pinned, so they never reach that instance's own + // onerror — without this, they're answered correctly on the wire but + // invisible in our logs. + onerror: (error) => logger.error("MCP stdio opening error", error), + }); logger.info("Rundeck Documentation MCP server running on stdio"); process.on("SIGINT", async () => {