diff --git a/CHANGELOG.md b/CHANGELOG.md index 24fff1569..2c9ad7904 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased - Minor] +### Changed + +- `@agent-relay/config`, `@agent-relay/cli`, `@agent-relay/fleet`, and `@agent-relay/harness-driver` now build on Zod 4, matching `@agent-relay/sdk`; Relay no longer ships a split Zod 3/Zod 4 install. +- `@agent-relay/config` builds `jsonSchemas` with Zod's built-in `z.toJSONSchema` and drops the `zod-to-json-schema` dependency. Output stays draft-7 and still describes config files as authored, but some keywords differ (records gain `propertyNames`, integers gain explicit bounds, and `RegExp` fields render as unconstrained). +- `@agent-relay/harness-driver` now exports `SpawnAgentResultSchema` as a Zod 4 schema, and `@agent-relay/fleet` `action()` validates its `input` with Zod 4. Code that pairs either with its own Zod 3 instance — `z.infer`, `.extend()` — needs `zod@^4`. + ### Added - `agent-relay cloud login` now records your user, email, and organization to `~/.agentworkforce/relay/cloud-identity.json`, and the CLI, broker, and Relaycast traffic all report usage under that user and org instead of an anonymous machine id. `agent-relay cloud whoami` refreshes the record; `agent-relay cloud logout` clears it. @@ -24,6 +30,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - The broker now reads its telemetry preference and machine-id files from `AGENT_RELAY_DATA_DIR` when set, matching the CLI. It previously only read `~/.agentworkforce/relay/telemetry.json`, so an opt-out written by `agent-relay telemetry disable` under a configured data directory was ignored. - `WhoAmIResponse.currentOrganization` and `currentWorkspace` are typed as nullable, matching what Cloud returns for a user with no active workspace; `agent-relay cloud whoami` no longer crashes for those users. +### Security + +- Upgraded `axios`, `concurrently`, `fast-uri`, `form-data`, `hono`, `js-yaml`, `postcss`, `shell-quote`, and `tar` past their high- and critical-severity advisories. + ## [11.2.0] - 2026-07-25 ### Added diff --git a/package-lock.json b/package-lock.json index 101fada99..4488930f3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@agent-relay/monorepo", - "version": "10.6.0", + "version": "11.2.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@agent-relay/monorepo", - "version": "10.6.0", + "version": "11.2.0", "license": "Apache-2.0", "workspaces": [ "packages/*" @@ -15,6 +15,7 @@ "@agent-assistant/telemetry": "^0.4.35", "@agentworkforce/delivery": "^4.1.23", "@agentworkforce/runtime": "^4.1.23", + "@eslint/js": "^10.0.1", "@relaycast/sdk": "^6.0.0", "@relayfile/relay-helpers": "^0.4.6", "@testing-library/jest-dom": "^6.9.1", @@ -22,11 +23,12 @@ "@types/node": "^22.19.3", "@types/ssh2": "^1.15.5", "@types/ws": "^8.18.1", - "@typescript-eslint/eslint-plugin": "^8.18.2", - "@typescript-eslint/parser": "^8.18.2", + "@typescript-eslint/eslint-plugin": "^8.65.0", + "@typescript-eslint/parser": "^8.65.0", "@vitest/coverage-v8": "^4.1.0", - "concurrently": "^9.2.1", - "eslint": "^8.57.1", + "concurrently": "^9.2.4", + "eslint": "^10.8.0", + "globals": "^17.8.0", "jsdom": "^25.0.1", "knip": "^5.84.1", "prettier": "^3.6.2", @@ -35,7 +37,7 @@ "typescript": "5.9.3", "vitest": "^4.1.0", "yaml": "^2.7.0", - "zod": "^3.25.76" + "zod": "^4.4.3" }, "engines": { "node": ">=22.0.0" @@ -255,6 +257,16 @@ "node": ">=20.0.0" } }, + "node_modules/@agent-assistant/harness/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/@agent-assistant/memory": { "version": "0.4.35", "resolved": "https://registry.npmjs.org/@agent-assistant/memory/-/memory-0.4.35.tgz", @@ -370,6 +382,16 @@ "supermemory": "^4.21.1" } }, + "node_modules/@agent-assistant/turn-context/node_modules/@agent-assistant/harness/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/@agent-assistant/turn-context/node_modules/@agent-assistant/memory": { "version": "0.2.24", "resolved": "https://registry.npmjs.org/@agent-assistant/memory/-/memory-0.2.24.tgz", @@ -484,6 +506,16 @@ "zod-to-json-schema": "^3.23.1" } }, + "node_modules/@agent-assistant/turn-context/node_modules/@agent-relay/config/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/@agent-assistant/turn-context/node_modules/@agent-relay/hooks": { "version": "4.0.40", "resolved": "https://registry.npmjs.org/@agent-relay/hooks/-/hooks-4.0.40.tgz", @@ -560,6 +592,16 @@ } } }, + "node_modules/@agent-assistant/turn-context/node_modules/@agent-relay/hooks/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/@agent-assistant/turn-context/node_modules/@agent-relay/sdk": { "version": "6.3.6", "resolved": "https://registry.npmjs.org/@agent-relay/sdk/-/sdk-6.3.6.tgz", @@ -647,6 +689,16 @@ "zod-to-json-schema": "^3.23.1" } }, + "node_modules/@agent-assistant/turn-context/node_modules/@agent-relay/trajectory/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/@agent-assistant/turn-context/node_modules/@agent-relay/workflow-types": { "version": "6.3.6", "resolved": "https://registry.npmjs.org/@agent-relay/workflow-types/-/workflow-types-6.3.6.tgz", @@ -663,16 +715,6 @@ "zod": "^4.3.6" } }, - "node_modules/@agent-assistant/turn-context/node_modules/@relaycast/sdk/node_modules/zod": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", - "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, "node_modules/@agent-assistant/turn-context/node_modules/@relaycast/types": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@relaycast/types/-/types-1.2.0.tgz", @@ -682,16 +724,6 @@ "zod": "^4.3.6" } }, - "node_modules/@agent-assistant/turn-context/node_modules/@relaycast/types/node_modules/zod": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", - "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, "node_modules/@agent-assistant/turn-context/node_modules/agent-trajectories": { "version": "0.5.9", "resolved": "https://registry.npmjs.org/agent-trajectories/-/agent-trajectories-0.5.9.tgz", @@ -710,6 +742,16 @@ "node": ">=20.0.0" } }, + "node_modules/@agent-assistant/turn-context/node_modules/agent-trajectories/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/@agent-assistant/vfs": { "version": "0.2.24", "resolved": "https://registry.npmjs.org/@agent-assistant/vfs/-/vfs-0.2.24.tgz", @@ -926,6 +968,16 @@ "zod-to-json-schema": "^3.23.1" } }, + "node_modules/@agent-relay/hooks/node_modules/@agent-relay/config/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/@agent-relay/hooks/node_modules/@agent-relay/sdk": { "version": "6.3.6", "resolved": "https://registry.npmjs.org/@agent-relay/sdk/-/sdk-6.3.6.tgz", @@ -1010,16 +1062,6 @@ "zod": "^4.3.6" } }, - "node_modules/@agent-relay/hooks/node_modules/@relaycast/sdk/node_modules/zod": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", - "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, "node_modules/@agent-relay/hooks/node_modules/@relaycast/types": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@relaycast/types/-/types-1.2.0.tgz", @@ -1029,16 +1071,6 @@ "zod": "^4.3.6" } }, - "node_modules/@agent-relay/hooks/node_modules/@relaycast/types/node_modules/zod": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", - "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, "node_modules/@agent-relay/hooks/node_modules/agent-trajectories": { "version": "0.5.9", "resolved": "https://registry.npmjs.org/agent-trajectories/-/agent-trajectories-0.5.9.tgz", @@ -1057,6 +1089,16 @@ "node": ">=20.0.0" } }, + "node_modules/@agent-relay/hooks/node_modules/agent-trajectories/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/@agent-relay/integration-prompts": { "resolved": "packages/integration-prompts", "link": true @@ -1113,6 +1155,16 @@ "zod-to-json-schema": "^3.23.1" } }, + "node_modules/@agent-relay/trajectory/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/@agent-relay/utils": { "resolved": "packages/utils", "link": true @@ -1213,6 +1265,16 @@ "node": ">=20.0.0" } }, + "node_modules/@agentworkforce/runtime/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/@agentworkforce/workload-router": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@agentworkforce/workload-router/-/workload-router-0.11.0.tgz", @@ -2197,6 +2259,7 @@ }, "node_modules/@clack/prompts/node_modules/is-unicode-supported": { "version": "1.3.0", + "extraneous": true, "inBundle": true, "license": "MIT", "engines": { @@ -2824,7 +2887,7 @@ "typebox": "1.1.38" }, "bin": { - "pi-ai": "./dist/cli.js" + "pi-ai": "dist/cli.js" }, "engines": { "node": ">=22.19.0" @@ -2940,9 +3003,6 @@ "cpu": [ "arm64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -2959,9 +3019,6 @@ "cpu": [ "arm64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -2978,9 +3035,6 @@ "cpu": [ "riscv64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -2997,9 +3051,6 @@ "cpu": [ "x64" ], - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -3016,9 +3067,6 @@ "cpu": [ "x64" ], - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -3356,9 +3404,9 @@ "license": "MIT" }, "node_modules/@earendil-works/pi-coding-agent/node_modules/brace-expansion": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz", - "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", "license": "MIT", "dependencies": { "balanced-match": "^4.0.2" @@ -4201,6 +4249,7 @@ "os": [ "aix" ], + "peer": true, "engines": { "node": ">=18" } @@ -4218,6 +4267,7 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">=18" } @@ -4235,6 +4285,7 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">=18" } @@ -4252,6 +4303,7 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">=18" } @@ -4269,6 +4321,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": ">=18" } @@ -4286,6 +4339,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": ">=18" } @@ -4303,6 +4357,7 @@ "os": [ "freebsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -4320,6 +4375,7 @@ "os": [ "freebsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -4337,6 +4393,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -4354,6 +4411,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -4371,6 +4429,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -4388,6 +4447,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -4405,6 +4465,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -4422,6 +4483,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -4439,6 +4501,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -4456,6 +4519,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -4473,6 +4537,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -4490,6 +4555,7 @@ "os": [ "netbsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -4507,6 +4573,7 @@ "os": [ "netbsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -4524,6 +4591,7 @@ "os": [ "openbsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -4541,6 +4609,7 @@ "os": [ "openbsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -4558,6 +4627,7 @@ "os": [ "openharmony" ], + "peer": true, "engines": { "node": ">=18" } @@ -4575,6 +4645,7 @@ "os": [ "sunos" ], + "peer": true, "engines": { "node": ">=18" } @@ -4592,6 +4663,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=18" } @@ -4609,6 +4681,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=18" } @@ -4626,6 +4699,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=18" } @@ -4659,79 +4733,90 @@ "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "node_modules/@eslint/config-array": { + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.5.tgz", + "integrity": "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "@eslint/object-schema": "^3.0.5", + "debug": "^4.3.1", + "minimatch": "^10.2.4" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": "^20.19.0 || ^22.13.0 || >=24" } }, - "node_modules/@eslint/eslintrc/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "node_modules/@eslint/config-helpers": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.7.0.tgz", + "integrity": "sha512-DObd/KKUsU+FaFv4PLxSRenpXfQWmPXXP3pPZ6/K1PCrMu2vQpMDMuQe/BqYeoLcz8ro0bVDF1RxOJgfVEdhUw==", "dev": true, - "license": "MIT" + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", - "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", + "node_modules/@eslint/core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz", + "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" } }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "node_modules/@eslint/js": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", + "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", "dev": true, "license": "MIT", "engines": { - "node": ">= 4" + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "eslint": "^10.0.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "node_modules/@eslint/object-schema": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.5.tgz", + "integrity": "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==", "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "license": "Apache-2.0", "engines": { - "node": "*" + "node": "^20.19.0 || ^22.13.0 || >=24" } }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "node_modules/@eslint/plugin-kit": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.2.tgz", + "integrity": "sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1", + "levn": "^0.4.1" + }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^20.19.0 || ^22.13.0 || >=24" } }, "node_modules/@hono/node-server": { @@ -4746,51 +4831,42 @@ "hono": "^4" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", + "node_modules/@humanfs/core": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "@humanfs/types": "^0.15.0" }, "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", - "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", + "node_modules/@humanfs/node": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "license": "Apache-2.0", "engines": { - "node": "*" + "node": ">=18.18.0" } }, "node_modules/@humanwhocodes/module-importer": { @@ -4807,13 +4883,19 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "dev": true, - "license": "BSD-3-Clause" + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@isaacs/fs-minipass": { "version": "4.0.1", @@ -5816,9 +5898,6 @@ "arm" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -5840,9 +5919,6 @@ "arm" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -5864,9 +5940,6 @@ "arm64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -5888,9 +5961,6 @@ "arm64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -5912,9 +5982,6 @@ "x64" ], "dev": true, - "libc": [ - "glibc" - ], "license": "MIT", "optional": true, "os": [ @@ -5936,9 +6003,6 @@ "x64" ], "dev": true, - "libc": [ - "musl" - ], "license": "MIT", "optional": true, "os": [ @@ -6105,15 +6169,6 @@ "zod": "^4.3.6" } }, - "node_modules/@relaycast/sdk/node_modules/zod": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", - "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, "node_modules/@relaycast/types": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/@relaycast/types/-/types-6.0.2.tgz", @@ -6122,15 +6177,6 @@ "zod": "^4.3.6" } }, - "node_modules/@relaycast/types/node_modules/zod": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", - "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, "node_modules/@relayfile/adapter-core": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@relayfile/adapter-core/-/adapter-core-0.5.7.tgz", @@ -6504,6 +6550,15 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "node_modules/@relayflows/core/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/@relayflows/github-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@relayflows/github-primitive/-/github-primitive-1.0.1.tgz", @@ -7502,6 +7557,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/estree": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", @@ -7509,6 +7571,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/node": { "version": "22.19.19", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.19.tgz", @@ -7562,17 +7631,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.60.1.tgz", - "integrity": "sha512-JQ4S5GB0tfjO8BuJ4fcX+HodkzJjYBV+7OJ+wLygaX7OGQ7FudyHL4NSCA6ob+w3Yn+5MkKIozOwQhXeM7opVg==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.65.0.tgz", + "integrity": "sha512-IEgob78X12rHpUmtcwFsXhZdVGJtwTVP8FiCLZkR6GlYVrl2PcuB+KhCE5BlVC/eQpQnu8WXRtkHZuPar+gCRA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.60.1", - "@typescript-eslint/type-utils": "8.60.1", - "@typescript-eslint/utils": "8.60.1", - "@typescript-eslint/visitor-keys": "8.60.1", + "@typescript-eslint/scope-manager": "8.65.0", + "@typescript-eslint/type-utils": "8.65.0", + "@typescript-eslint/utils": "8.65.0", + "@typescript-eslint/visitor-keys": "8.65.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" @@ -7585,22 +7654,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.60.1", + "@typescript-eslint/parser": "^8.65.0", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.60.1.tgz", - "integrity": "sha512-A0M6ua6H252bVjPvvtSgl2QA4+ET9S5Mtkb2GDyTxIhH/C4qDItT7RQNO5PhMC6NXGYXOR9dIalcDDgBKT7oFA==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.65.0.tgz", + "integrity": "sha512-CZ4nMxWwgu1HEEFNkeaCptra9QCtkmKdgf3sWh1rl1trIhmxLilgTV4cwcbQ4wemnT4sWQN8CaKOmdYx+g2gMA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.60.1", - "@typescript-eslint/types": "8.60.1", - "@typescript-eslint/typescript-estree": "8.60.1", - "@typescript-eslint/visitor-keys": "8.60.1", + "@typescript-eslint/scope-manager": "8.65.0", + "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/typescript-estree": "8.65.0", + "@typescript-eslint/visitor-keys": "8.65.0", "debug": "^4.4.3" }, "engines": { @@ -7616,14 +7685,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.60.1.tgz", - "integrity": "sha512-eXkTH2bxmXlqD1RnOPmLZ9ZM9D3VwSx04JOwBnP9RQ+yUA5a2Mu7SfW8uaV2Aon53NJzZlZYuX7tn91Izf+xaw==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.65.0.tgz", + "integrity": "sha512-SxnPhbTsGahizDgbu7oqFH/xVtzIqMd/s+WtnSxNxJZJpLbdT5IPdzg8EZxO3+PoKahXmwJLeNQOpKJb3/bi7Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.60.1", - "@typescript-eslint/types": "^8.60.1", + "@typescript-eslint/tsconfig-utils": "^8.65.0", + "@typescript-eslint/types": "^8.65.0", "debug": "^4.4.3" }, "engines": { @@ -7638,14 +7707,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.60.1.tgz", - "integrity": "sha512-gvI5OQoptnxQnchOirukCuQ55svJSTuD/4k5+pC267xyBtYry748R9/c3tYUzb/iE6RZfllRz2lVulLCHkTm4w==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.65.0.tgz", + "integrity": "sha512-Esbl8OSYiVxBokYgWPf7VVWg/BE798wXhimnn9ML9Pt5qoDf8bfQlgjlKXR/k98+AcNzlLKYrpCcrcuZ9DZLgg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.60.1", - "@typescript-eslint/visitor-keys": "8.60.1" + "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/visitor-keys": "8.65.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7656,9 +7725,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.60.1.tgz", - "integrity": "sha512-nh8w4qAteiKuZu3pSSzG/yGKpw0OlkrKnzFmbVRenKaD4qc+7i1GrmZaLVkr8rk4uipiPGMOW4YsM6WmKZ5CvA==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.65.0.tgz", + "integrity": "sha512-j6GzGqCiRdA7Qhur2VVmKZAkBLfnHFQfx4TaJGL9RMveZqCo48jSHHO0DTgizEnGhtWnqmbtCUSrqSkdiY/0Hg==", "dev": true, "license": "MIT", "engines": { @@ -7673,15 +7742,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.60.1.tgz", - "integrity": "sha512-sdwTrpjosW7ANQYJ39ZBF1ZyEMEGVB2UsikrserVM/30a/F1dTLnu9bGxEdosugyu5caigjLrR2qiD11asjI1A==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.65.0.tgz", + "integrity": "sha512-YjaZ7PRI5qY7ax2L3PbvX0rRyGtipAReCWs0mhhDBHjH/vl0g0BonaGXrKdKpMbIIsMIwDgbk/xzkBTyAltS5g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.60.1", - "@typescript-eslint/typescript-estree": "8.60.1", - "@typescript-eslint/utils": "8.60.1", + "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/typescript-estree": "8.65.0", + "@typescript-eslint/utils": "8.65.0", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, @@ -7698,9 +7767,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.60.1.tgz", - "integrity": "sha512-4h0tY8ppCkdCzcrl2YM5M3my0xsE1Tf8om3owEu5oPWmXwkKRmk0j0LGDzYBGUcAlesEbxBhazqu/K4cu3Ug7w==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.65.0.tgz", + "integrity": "sha512-JSSwWNy+H0E/01jJEM+hrX6N0OFDzFzeIhHFSAS01tlVaevpG8cFyYRPhS5yjGOvBUx3sqQHVMjCL1CAZZMxBg==", "dev": true, "license": "MIT", "engines": { @@ -7712,16 +7781,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.60.1.tgz", - "integrity": "sha512-alpRkfG8hlVE5kdJW2GkfgDgXxold3e8e4l6EnmhRmRLbekgAPCCGDVD++sABy9FcgPFroq+uFcCSM1vR57Cew==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.65.0.tgz", + "integrity": "sha512-JboAE2swaYt4tb1fHhHTABE2K+OLy09XfcTbhnk4Pw96f9dd2e9iYsJ28gBggHlo5z5x1rkyWvcPoTuNTd4oGg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.60.1", - "@typescript-eslint/tsconfig-utils": "8.60.1", - "@typescript-eslint/types": "8.60.1", - "@typescript-eslint/visitor-keys": "8.60.1", + "@typescript-eslint/project-service": "8.65.0", + "@typescript-eslint/tsconfig-utils": "8.65.0", + "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/visitor-keys": "8.65.0", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", @@ -7740,16 +7809,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.60.1.tgz", - "integrity": "sha512-h2MPBLoNtjc3qZWfY3Tl51yPorQ2McHn8pJfcMNTcIvrrZrr90Ykffit0yjrPFWQcRcUxzH20+6OcVdW4yHtUg==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.65.0.tgz", + "integrity": "sha512-gXiwIHsYreboxeJucHKPvgwl7dXt50mF8s1/c00cP/WoVTyWKFdtfhRWwZiXYFU5H2O8vVoSLNrexFZjYS/SGA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.60.1", - "@typescript-eslint/types": "8.60.1", - "@typescript-eslint/typescript-estree": "8.60.1" + "@typescript-eslint/scope-manager": "8.65.0", + "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/typescript-estree": "8.65.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7764,13 +7833,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.60.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.60.1.tgz", - "integrity": "sha512-EbGRQg4FhrmwLodl+t3JNAnXHWVr9Vp+Zl1QBZVPY4ByfkzIT8cX3K6QWODHtkIZqqJVEWvhHSx3v5PDHsaQag==", + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.65.0.tgz", + "integrity": "sha512-8C71BQkGjiMmXtop7pHVJu1l2NNShFdkCyD6a2ezzs5vU/L3LRtb69EtcteFwz0mYMPzIgOw0n6OV4VBUWZd7A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.60.1", + "@typescript-eslint/types": "8.65.0", "eslint-visitor-keys": "^5.0.0" }, "engines": { @@ -7794,13 +7863,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.1.tgz", - "integrity": "sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ==", - "dev": true, - "license": "ISC" - }, "node_modules/@vercel/oidc": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/@vercel/oidc/-/oidc-3.2.0.tgz", @@ -8015,9 +8077,9 @@ } }, "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", "dev": true, "license": "MIT", "bin": { @@ -8068,9 +8130,18 @@ "node": ">=20.0.0" } }, - "node_modules/ai": { - "version": "7.0.29", - "resolved": "https://registry.npmjs.org/ai/-/ai-7.0.29.tgz", + "node_modules/agent-trajectories/node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/ai": { + "version": "7.0.29", + "resolved": "https://registry.npmjs.org/ai/-/ai-7.0.29.tgz", "integrity": "sha512-q+A+skhl6SyjWliU6W7zNYgDUrEk5SbNrCc5vt4S9n6+n6e7jSorDmu51hlhjDOsS7VwzWGCgbWFvvT3iomtvg==", "license": "Apache-2.0", "dependencies": { @@ -8295,13 +8366,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, "node_modules/aria-query": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", @@ -8351,9 +8415,9 @@ "license": "MIT" }, "node_modules/axios": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.17.0.tgz", - "integrity": "sha512-J8SwNxprqqpbfenehxWYXE7CW+wM1BB4w3+N+g+/Wx40xM4rsLrfPmHHxSWIxJLYDgSY/HqlFPIYb2/S3rxafw==", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.18.1.tgz", + "integrity": "sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==", "license": "MIT", "dependencies": { "follow-redirects": "^1.16.0", @@ -8461,16 +8525,16 @@ "license": "MIT" }, "node_modules/brace-expansion": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz", - "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.8.tgz", + "integrity": "sha512-JZyDyq3D4AUifKTPOB7DELf6XsB3WdPuNxCtob1vFXPsSXhdAiHBWJ/tJ8HAc9aH84BK+5JFZLNkJKx3G9kzQg==", "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^4.0.2" }, "engines": { - "node": "18 || 20 || >=22" + "node": "20 || >=22" } }, "node_modules/braces": { @@ -8490,6 +8554,7 @@ "version": "0.0.7", "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.7.tgz", "integrity": "sha512-lHblz4ahamxpTmnsk+MNTRWsjYKv965MwOrSJyeD588rR3Jcu7swE+0wN5F+PbL5cjgu/9ObkhfzEPuofEMwLA==", + "dev": true, "optional": true, "engines": { "node": ">=10.0.0" @@ -8533,16 +8598,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/chai": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", @@ -8768,23 +8823,16 @@ "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", "license": "MIT" }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, "node_modules/concurrently": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz", - "integrity": "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==", + "version": "9.2.4", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.4.tgz", + "integrity": "sha512-TZ0CEhyzvFjgtAvHTusDMgj7wNdihCh7LLLrzdUOXIhdlnL2JBBGA9eJxR24rtqgmdjh3OA3hrN1rCHj6HM8qA==", "dev": true, "license": "MIT", "dependencies": { "chalk": "4.1.2", "rxjs": "7.8.2", - "shell-quote": "1.8.3", + "shell-quote": "1.9.0", "supports-color": "8.1.1", "tree-kill": "1.2.2", "yargs": "17.7.2" @@ -8861,6 +8909,7 @@ "version": "0.0.10", "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.10.tgz", "integrity": "sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==", + "dev": true, "hasInstallScript": true, "optional": true, "dependencies": { @@ -9016,19 +9065,6 @@ "node": ">=8" } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/dom-accessibility-api": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", @@ -9319,74 +9355,78 @@ } }, "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "version": "10.8.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.8.0.tgz", + "integrity": "sha512-nuKKvN+oIBO0koN7Tm7dlkmnkc21mtt0QJLwAKzjLq14y6lRTdVG36MZHJ8eQHwdJMwZbQNMlPOYedMq/oVJvQ==", "dev": true, "license": "MIT", + "workspaces": [ + "packages/*" + ], "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.5", + "@eslint/config-helpers": "^0.7.0", + "@eslint/core": "^1.2.1", + "@eslint/plugin-kit": "^0.7.2", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^9.1.2", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.2.0", + "esquery": "^1.7.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", + "minimatch": "^10.2.5", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" @@ -9405,22 +9445,17 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", - "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/ignore": { @@ -9433,32 +9468,32 @@ "node": ">= 4" } }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "node_modules/espree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", "dev": true, - "license": "ISC", + "license": "BSD-2-Clause", "dependencies": { - "brace-expansion": "^1.1.7" + "acorn": "^8.16.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^5.0.1" }, "engines": { - "node": "*" + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, + "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { "url": "https://opencollective.com/eslint" @@ -9703,9 +9738,9 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", - "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.4.tgz", + "integrity": "sha512-8JnbkQ4juDyvYs4mgFGQqg4yCYtFDtUtmp2QIQq11ZZe5CFQ5wcqm1rqDgAh/QdMySuBnPzMUiJUNZG5N/AiQw==", "funding": [ { "type": "github", @@ -9794,16 +9829,16 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/fill-range": { @@ -9858,24 +9893,23 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "license": "MIT", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.3.tgz", + "integrity": "sha512-/zipXxyO6rGvuNGDiULY9MvEGSkb2gaG4GGH4ygMi0ZZzyMHdUZBmntJmx5x1G2VuPytCwGN4xsJP6cw+sK+vQ==", "dev": true, "license": "ISC" }, @@ -9900,16 +9934,16 @@ } }, "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" + "hasown": "^2.0.4", + "mime-types": "^2.1.35" }, "engines": { "node": ">= 6" @@ -9949,13 +9983,6 @@ "node": ">= 0.8" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -10039,28 +10066,6 @@ "node": ">= 0.4" } }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -10074,48 +10079,14 @@ "node": ">=10.13.0" } }, - "node_modules/glob/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.15.tgz", - "integrity": "sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "17.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.8.0.tgz", + "integrity": "sha512-Zz/LMDZScFmkakeL2cTHzf+PbWKdpU3uclqkZT7TjDG58j5WPt0PpA+n9uPI24fZtlw07q0OtEi84K+umsRzqQ==", "dev": true, "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -10133,13 +10104,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -10189,9 +10153,9 @@ } }, "node_modules/hono": { - "version": "4.12.23", - "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.23.tgz", - "integrity": "sha512-eIaZ9qDgu7XV0pxOCrg7/WhnQ6Ivm22UcxhXx/A3dcbqbbYgBEkc6e/J/s7j2tS96zoB0S9VBdLwQNCWwUo4LA==", + "version": "4.12.32", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.32.tgz", + "integrity": "sha512-XcuyW9qE2kJn07PkecMOBd5Vq/hMy7mmGw+idz1yblbg9N17ijJODrvPkn7/dwL3Kulj8LcRJ69DLOWf91dRUg==", "license": "MIT", "engines": { "node": ">=16.9.0" @@ -10320,23 +10284,6 @@ "node": ">= 4" } }, - "node_modules/import-fresh": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", - "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -10357,18 +10304,6 @@ "node": ">=8" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -10442,16 +10377,6 @@ "node": ">=0.12.0" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -10551,29 +10476,6 @@ "dev": true, "license": "MIT" }, - "node_modules/js-yaml": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.2.0.tgz", - "integrity": "sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/puzrin" - }, - { - "type": "github", - "url": "https://github.com/sponsors/nodeca" - } - ], - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/jsdom": { "version": "25.0.1", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-25.0.1.tgz", @@ -10714,16 +10616,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/knip/node_modules/zod": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", - "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -11103,13 +10995,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, "node_modules/log-update": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", @@ -11458,13 +11343,14 @@ "version": "2.27.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.27.0.tgz", "integrity": "sha512-hC+0LidcL3XE4rp1C4H54KujgXKzbfyTngZTwBByQxsOxCEKZT0MPQ4hOKUH2jU1OYstqdDH4onyHPDzcV0XdQ==", + "dev": true, "license": "MIT", "optional": true }, "node_modules/nanoid": { - "version": "3.3.12", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz", - "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==", + "version": "3.3.16", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz", + "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==", "dev": true, "funding": [ { @@ -11728,19 +11614,6 @@ "node": ">=8" } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/parse5": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", @@ -11815,16 +11688,6 @@ "node": ">=14.0.0" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -11924,9 +11787,9 @@ } }, "node_modules/postcss": { - "version": "8.5.15", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", - "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "version": "8.5.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.23.tgz", + "integrity": "sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==", "dev": true, "funding": [ { @@ -11944,7 +11807,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.12", + "nanoid": "^3.3.16", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -12163,16 +12026,6 @@ "node": ">=0.10.0" } }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/restore-cursor": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", @@ -12215,23 +12068,6 @@ "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "license": "MIT" }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/rolldown": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.3.tgz", @@ -12453,9 +12289,9 @@ } }, "node_modules/shell-quote": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", - "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.10.0.tgz", + "integrity": "sha512-w1aiOKwKuRgtwAReIIj89puqg+I7GvX4IbLrvmhXbzQsj1+Zwi4VO3+fa6ZF91TWSjIxoEkKnMeHcLEODK5ZXA==", "dev": true, "license": "MIT", "engines": { @@ -12710,19 +12546,6 @@ "node": ">=8" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/strnum": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.3.0.tgz", @@ -12931,9 +12754,9 @@ } }, "node_modules/tar": { - "version": "7.5.16", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.16.tgz", - "integrity": "sha512-56adEpPMouktRlBLXiaYFFzZ/3+JXa8P9n7WbR+ibIjtviN55mEaOkiysCnPnWm+7kkui1Dn8J9l+g6zV8731w==", + "version": "7.5.22", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.22.tgz", + "integrity": "sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA==", "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", @@ -12955,13 +12778,6 @@ "node": ">=18" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, "node_modules/tinybench": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", @@ -13141,19 +12957,6 @@ "node": ">= 0.8.0" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/type-is": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", @@ -13710,9 +13513,9 @@ } }, "node_modules/zod": { - "version": "3.25.76", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", - "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" @@ -13729,14 +13532,14 @@ }, "packages/brand": { "name": "@agent-relay/brand", - "version": "10.6.0", + "version": "11.2.0", "engines": { "node": ">=22.0.0" } }, "packages/broker-darwin-arm64": { "name": "@agent-relay/broker-darwin-arm64", - "version": "10.6.0", + "version": "11.2.0", "license": "MIT", "engines": { "node": ">=22.0.0" @@ -13744,7 +13547,7 @@ }, "packages/broker-darwin-x64": { "name": "@agent-relay/broker-darwin-x64", - "version": "10.6.0", + "version": "11.2.0", "license": "MIT", "engines": { "node": ">=22.0.0" @@ -13752,7 +13555,7 @@ }, "packages/broker-linux-arm64": { "name": "@agent-relay/broker-linux-arm64", - "version": "10.6.0", + "version": "11.2.0", "license": "MIT", "engines": { "node": ">=22.0.0" @@ -13760,7 +13563,7 @@ }, "packages/broker-linux-x64": { "name": "@agent-relay/broker-linux-x64", - "version": "10.6.0", + "version": "11.2.0", "license": "MIT", "engines": { "node": ">=22.0.0" @@ -13768,7 +13571,7 @@ }, "packages/broker-win32-x64": { "name": "@agent-relay/broker-win32-x64", - "version": "10.6.0", + "version": "11.2.0", "license": "MIT", "engines": { "node": ">=22.0.0" @@ -13776,17 +13579,17 @@ }, "packages/cli": { "name": "agent-relay", - "version": "10.6.0", + "version": "11.2.0", "license": "Apache-2.0", "dependencies": { - "@agent-relay/cloud": "10.6.0", - "@agent-relay/config": "10.6.0", - "@agent-relay/fleet": "10.6.0", - "@agent-relay/harness-driver": "10.6.0", - "@agent-relay/harnesses": "10.6.0", - "@agent-relay/sdk": "10.6.0", - "@agent-relay/utils": "10.6.0", - "@modelcontextprotocol/sdk": "^1.0.0", + "@agent-relay/cloud": "11.2.0", + "@agent-relay/config": "11.2.0", + "@agent-relay/fleet": "11.2.0", + "@agent-relay/harness-driver": "11.2.0", + "@agent-relay/harnesses": "11.2.0", + "@agent-relay/sdk": "11.2.0", + "@agent-relay/utils": "11.2.0", + "@modelcontextprotocol/sdk": "^1.23.0", "@relayfile/client": "^0.10.27", "@relayflows/cli": "^1.0.1", "@xterm/headless": "^6.0.0", @@ -13795,7 +13598,7 @@ "jiti": "^2.6.1", "posthog-node": "^5.29.2", "ws": "^8.18.3", - "zod": "^3.23.8" + "zod": "^4.4.3" }, "bin": { "agent-relay": "dist/cli/index.js", @@ -13813,12 +13616,12 @@ }, "packages/cloud": { "name": "@agent-relay/cloud", - "version": "10.6.0", + "version": "11.2.0", "dependencies": { - "@agent-relay/config": "10.6.0", + "@agent-relay/config": "11.2.0", "@aws-sdk/client-s3": "3.1020.0", "ignore": "^7.0.5", - "tar": "^7.5.10" + "tar": "^7.5.21" }, "devDependencies": { "@types/node": "^22.19.3", @@ -13834,10 +13637,9 @@ }, "packages/config": { "name": "@agent-relay/config", - "version": "10.6.0", + "version": "11.2.0", "dependencies": { - "zod": "^3.23.8", - "zod-to-json-schema": "^3.23.1" + "zod": "^4.4.3" }, "devDependencies": { "@types/node": "^22.19.3", @@ -13850,11 +13652,11 @@ }, "packages/evals": { "name": "@agent-relay/evals", - "version": "10.6.0", + "version": "11.2.0", "license": "Apache-2.0", "dependencies": { - "@agent-relay/harness-driver": "10.6.0", - "@agent-relay/integration-prompts": "10.6.0" + "@agent-relay/harness-driver": "11.2.0", + "@agent-relay/integration-prompts": "11.2.0" }, "engines": { "node": ">=22.0.0" @@ -13862,14 +13664,14 @@ }, "packages/fleet": { "name": "@agent-relay/fleet", - "version": "10.6.0", + "version": "11.2.0", "license": "Apache-2.0", "dependencies": { - "@agent-relay/harness-driver": "10.6.0", - "@agent-relay/harnesses": "10.6.0", + "@agent-relay/harness-driver": "11.2.0", + "@agent-relay/harnesses": "11.2.0", "@relaycast/sdk": "^6.0.0", "ws": "^8.18.3", - "zod": "^3.23.8" + "zod": "^4.4.3" }, "devDependencies": { "@types/ws": "^8.18.1" @@ -13880,31 +13682,31 @@ }, "packages/harness-driver": { "name": "@agent-relay/harness-driver", - "version": "10.6.0", + "version": "11.2.0", "license": "Apache-2.0", "dependencies": { - "@agent-relay/sdk": "10.6.0", + "@agent-relay/sdk": "11.2.0", "ws": "^8.18.3", - "zod": "^3.23.8" + "zod": "^4.4.3" }, "engines": { "node": ">=22.0.0" }, "optionalDependencies": { - "@agent-relay/broker-darwin-arm64": "10.6.0", - "@agent-relay/broker-darwin-x64": "10.6.0", - "@agent-relay/broker-linux-arm64": "10.6.0", - "@agent-relay/broker-linux-x64": "10.6.0", - "@agent-relay/broker-win32-x64": "10.6.0" + "@agent-relay/broker-darwin-arm64": "11.2.0", + "@agent-relay/broker-darwin-x64": "11.2.0", + "@agent-relay/broker-linux-arm64": "11.2.0", + "@agent-relay/broker-linux-x64": "11.2.0", + "@agent-relay/broker-win32-x64": "11.2.0" } }, "packages/harnesses": { "name": "@agent-relay/harnesses", - "version": "10.6.0", + "version": "11.2.0", "license": "Apache-2.0", "dependencies": { - "@agent-relay/harness-driver": "10.6.0", - "@agent-relay/sdk": "10.6.0", + "@agent-relay/harness-driver": "11.2.0", + "@agent-relay/sdk": "11.2.0", "@ai-sdk/harness": "1.0.34", "@ai-sdk/harness-claude-code": "1.0.35", "@ai-sdk/harness-codex": "1.0.40", @@ -13918,7 +13720,7 @@ }, "packages/integration-prompts": { "name": "@agent-relay/integration-prompts", - "version": "10.6.0", + "version": "11.2.0", "license": "Apache-2.0", "engines": { "node": ">=22.0.0" @@ -13926,9 +13728,9 @@ }, "packages/policy": { "name": "@agent-relay/policy", - "version": "10.6.0", + "version": "11.2.0", "dependencies": { - "@agent-relay/config": "10.6.0" + "@agent-relay/config": "11.2.0" }, "devDependencies": { "@types/node": "^22.19.3", @@ -13940,11 +13742,11 @@ }, "packages/sdk": { "name": "@agent-relay/sdk", - "version": "10.6.0", + "version": "11.2.0", "dependencies": { "@relaycast/sdk": "^6.0.0", "@relaycast/types": "^6.0.0", - "zod": "^4.3.6" + "zod": "^4.4.3" }, "devDependencies": { "@types/node": "^22.13.10" @@ -13953,20 +13755,11 @@ "node": ">=22.0.0" } }, - "packages/sdk/node_modules/zod": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", - "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, "packages/utils": { "name": "@agent-relay/utils", - "version": "10.6.0", + "version": "11.2.0", "dependencies": { - "@agent-relay/config": "10.6.0", + "@agent-relay/config": "11.2.0", "compare-versions": "^6.1.1" }, "devDependencies": { diff --git a/package.json b/package.json index fc11075aa..b4e271849 100644 --- a/package.json +++ b/package.json @@ -117,6 +117,7 @@ "@agent-assistant/telemetry": "^0.4.35", "@agentworkforce/delivery": "^4.1.23", "@agentworkforce/runtime": "^4.1.23", + "@eslint/js": "^10.0.1", "@relaycast/sdk": "^6.0.0", "@relayfile/relay-helpers": "^0.4.6", "@testing-library/jest-dom": "^6.9.1", @@ -124,11 +125,12 @@ "@types/node": "^22.19.3", "@types/ssh2": "^1.15.5", "@types/ws": "^8.18.1", - "@typescript-eslint/eslint-plugin": "^8.18.2", - "@typescript-eslint/parser": "^8.18.2", + "@typescript-eslint/eslint-plugin": "^8.65.0", + "@typescript-eslint/parser": "^8.65.0", "@vitest/coverage-v8": "^4.1.0", - "concurrently": "^9.2.1", - "eslint": "^8.57.1", + "concurrently": "^9.2.4", + "eslint": "^10.8.0", + "globals": "^17.8.0", "jsdom": "^25.0.1", "knip": "^5.84.1", "prettier": "^3.6.2", @@ -137,13 +139,21 @@ "typescript": "5.9.3", "vitest": "^4.1.0", "yaml": "^2.7.0", - "zod": "^3.25.76" + "zod": "^4.4.3" }, "engines": { "node": ">=22.0.0" }, "packageManager": "npm@10.5.1", "overrides": { - "flatted": "^3.4.2" + "flatted": "^3.4.2", + "axios": "^1.18.1", + "fast-uri": "^3.1.4", + "form-data": "^4.0.6", + "hono": "^4.12.32", + "js-yaml": "^4.3.0", + "postcss": "^8.5.23", + "shell-quote": "^1.10.0", + "tar": "^7.5.22" } } diff --git a/packages/cli/.eslintrc.cjs b/packages/cli/.eslintrc.cjs deleted file mode 100644 index e1f0b9e60..000000000 --- a/packages/cli/.eslintrc.cjs +++ /dev/null @@ -1,46 +0,0 @@ -/** @type {import("eslint").Linter.Config} */ -module.exports = { - root: true, - env: { - node: true, - es2022: true, - }, - parser: '@typescript-eslint/parser', - parserOptions: { - ecmaVersion: 2022, - sourceType: 'module', - }, - plugins: ['@typescript-eslint'], - extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended'], - rules: { - // This repo intentionally uses a few tight loops (e.g., streaming parsers). - 'no-constant-condition': 'off', - // Regex/string escaping in protocol/state templates can appear "redundant" to ESLint. - 'no-useless-escape': 'off', - // Useful signal, but too noisy for this early release. - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/no-unused-vars': [ - 'warn', - { - argsIgnorePattern: '^_', - varsIgnorePattern: '^_', - caughtErrorsIgnorePattern: '^_', - }, - ], - '@typescript-eslint/naming-convention': [ - 'warn', - { - selector: 'variable', - format: ['camelCase', 'UPPER_CASE', 'PascalCase'], - leadingUnderscore: 'allow', - }, - { - selector: 'typeLike', - format: ['PascalCase'], - }, - ], - complexity: ['warn', 15], - 'max-depth': ['warn', 4], - }, - ignorePatterns: ['dist/**', 'node_modules/**', 'coverage/**', '**/out/**', '**/*.gen.ts'], -}; diff --git a/packages/cli/eslint.config.js b/packages/cli/eslint.config.js new file mode 100644 index 000000000..f2d272ac2 --- /dev/null +++ b/packages/cli/eslint.config.js @@ -0,0 +1,67 @@ +import js from '@eslint/js'; +import tsPlugin from '@typescript-eslint/eslint-plugin'; +import tsParser from '@typescript-eslint/parser'; +import globals from 'globals'; + +/** @type {import("eslint").Linter.Config[]} */ +export default [ + { + ignores: ['dist/**', 'node_modules/**', 'coverage/**', '**/out/**', '**/*.gen.ts'], + }, + js.configs.recommended, + // Turns off the core rules TypeScript already enforces (notably `no-undef`, + // which cannot see ambient types such as `NodeJS.Timeout`). + tsPlugin.configs['flat/eslint-recommended'], + { + files: ['**/*.ts'], + languageOptions: { + parser: tsParser, + ecmaVersion: 2022, + sourceType: 'module', + globals: { + ...globals.node, + ...globals.es2022, + }, + }, + plugins: { + '@typescript-eslint': tsPlugin, + }, + rules: { + ...tsPlugin.configs.recommended.rules, + // This repo intentionally uses a few tight loops (e.g., streaming parsers). + 'no-constant-condition': 'off', + // Regex/string escaping in protocol/state templates can appear "redundant" to ESLint. + 'no-useless-escape': 'off', + // Useful signal, but too noisy for this early release. + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-unused-vars': [ + 'warn', + { + argsIgnorePattern: '^_', + varsIgnorePattern: '^_', + caughtErrorsIgnorePattern: '^_', + }, + ], + '@typescript-eslint/naming-convention': [ + 'warn', + { + selector: 'variable', + format: ['camelCase', 'UPPER_CASE', 'PascalCase'], + leadingUnderscore: 'allow', + }, + { + selector: 'typeLike', + format: ['PascalCase'], + }, + ], + complexity: ['warn', 15], + 'max-depth': ['warn', 4], + // Added to `eslint:recommended` in ESLint 10. Both flag real issues (11 at + // the time of the upgrade), but they are unrelated to the dependency bump + // that pulled ESLint 10 in — surfaced as warnings, like the other advisory + // rules here, so they stay visible without gating CI. + 'preserve-caught-error': 'warn', + 'no-useless-assignment': 'warn', + }, + }, +]; diff --git a/packages/cli/package.json b/packages/cli/package.json index 47f4308a7..8c15d67bf 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -38,7 +38,7 @@ "build:cjs": "node ./scripts/build-cjs.mjs", "prepack": "if [ -d ../../node_modules ]; then npm --prefix ../.. run build:cli; else echo 'node_modules not found, skipping prepack build'; fi", "start": "node dist/cli/index.js", - "lint": "eslint src --ext .ts", + "lint": "eslint src", "audit:deps": "echo 'No bundled dependency audit is required for the simplified CLI package.'", "pack:validate": "npm pack --dry-run" }, @@ -50,7 +50,7 @@ "@agent-relay/harnesses": "11.2.0", "@agent-relay/sdk": "11.2.0", "@agent-relay/utils": "11.2.0", - "@modelcontextprotocol/sdk": "^1.0.0", + "@modelcontextprotocol/sdk": "^1.23.0", "@relayfile/client": "^0.10.27", "@relayflows/cli": "^1.0.1", "@xterm/headless": "^6.0.0", @@ -59,7 +59,7 @@ "jiti": "^2.6.1", "posthog-node": "^5.29.2", "ws": "^8.18.3", - "zod": "^3.23.8" + "zod": "^4.4.3" }, "optionalDependencies": { "ai-hist-native": "^0.4.1" diff --git a/packages/cli/src/cli/agent-relay-mcp.ts b/packages/cli/src/cli/agent-relay-mcp.ts index 3f095dc04..8007c828e 100644 --- a/packages/cli/src/cli/agent-relay-mcp.ts +++ b/packages/cli/src/cli/agent-relay-mcp.ts @@ -559,7 +559,7 @@ function registerAgentRelayTools( status: z.enum(['online', 'offline']).optional().describe('Optional status filter'), }, outputSchema: { - agents: z.array(z.object({}).passthrough()).describe('Registered agents'), + agents: z.array(z.looseObject({})).describe('Registered agents'), }, annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, }, @@ -580,7 +580,7 @@ function registerAgentRelayTools( name: z.string().optional().describe('Optional node name filter'), }, outputSchema: { - nodes: z.array(z.object({}).passthrough()).describe('Fleet nodes'), + nodes: z.array(z.looseObject({})).describe('Fleet nodes'), }, annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, }, diff --git a/packages/cli/src/cli/mcp/action-schema.ts b/packages/cli/src/cli/mcp/action-schema.ts index c214ba3cf..56523c594 100644 --- a/packages/cli/src/cli/mcp/action-schema.ts +++ b/packages/cli/src/cli/mcp/action-schema.ts @@ -26,7 +26,7 @@ function getSchemaDescription(schema: ActionSchema | undefined): string | undefi } /** Convert a JSON-schema-lite node into an equivalent zod type. */ -export function zodFromJsonSchema(schema: ActionSchema | undefined): z.ZodTypeAny { +export function zodFromJsonSchema(schema: ActionSchema | undefined): z.ZodType { if (schema === false) { return z.never(); } @@ -35,7 +35,7 @@ export function zodFromJsonSchema(schema: ActionSchema | undefined): z.ZodTypeAn return z.unknown(); } - let zodType: z.ZodTypeAny; + let zodType: z.ZodType; const schemaType = Array.isArray(schema.type) ? schema.type[0] : schema.type; switch (schemaType) { case 'array': @@ -53,12 +53,12 @@ export function zodFromJsonSchema(schema: ActionSchema | undefined): z.ZodTypeAn case 'object': if (schema.properties) { const required = new Set(schema.required ?? []); - const shape: Record = {}; + const shape: Record = {}; for (const [key, childSchema] of Object.entries(schema.properties)) { const child = zodFromJsonSchema(childSchema); shape[key] = required.has(key) ? child : child.optional(); } - zodType = z.object(shape).passthrough(); + zodType = z.looseObject(shape); } else { zodType = z.record(z.string(), z.unknown()); } @@ -75,7 +75,7 @@ export function zodFromJsonSchema(schema: ActionSchema | undefined): z.ZodTypeAn return description ? zodType.describe(description) : zodType; } -function zodObjectShape(schema: ActionSchema | undefined): Record | undefined { +function zodObjectShape(schema: ActionSchema | undefined): Record | undefined { if (schema instanceof z.ZodObject) { return schema.shape; } @@ -83,7 +83,7 @@ function zodObjectShape(schema: ActionSchema | undefined): Record { +export function actionToolInputSchema(schema: ActionSchema | undefined): Record { const zodShape = zodObjectShape(schema); if (zodShape) { return zodShape; @@ -96,7 +96,7 @@ export function actionToolInputSchema(schema: ActionSchema | undefined): Record< } const required = new Set(schema.required ?? []); - const shape: Record = {}; + const shape: Record = {}; for (const [key, childSchema] of Object.entries(schema.properties ?? {})) { const child = zodFromJsonSchema(childSchema); shape[key] = required.has(key) ? child : child.optional(); diff --git a/packages/cli/src/cli/mcp/messaging-tools.ts b/packages/cli/src/cli/mcp/messaging-tools.ts index 591101058..e6b9772c8 100644 --- a/packages/cli/src/cli/mcp/messaging-tools.ts +++ b/packages/cli/src/cli/mcp/messaging-tools.ts @@ -61,7 +61,7 @@ export function registerMessagingTools( ...identityOverrideInputShape, }, outputSchema: { - channels: z.array(z.object({}).passthrough()).describe('Channels'), + channels: z.array(z.looseObject({})).describe('Channels'), }, annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, }, @@ -199,7 +199,7 @@ export function registerMessagingTools( ...identityOverrideInputShape, }, outputSchema: { - messages: z.array(z.object({}).passthrough()).describe('Messages'), + messages: z.array(z.looseObject({})).describe('Messages'), }, annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, }, @@ -280,7 +280,7 @@ export function registerMessagingTools( ...identityOverrideInputShape, }, outputSchema: { - conversations: z.array(z.object({}).passthrough()).describe('DM conversations'), + conversations: z.array(z.looseObject({})).describe('DM conversations'), }, annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, }, @@ -367,7 +367,7 @@ export function registerMessagingTools( ...identityOverrideInputShape, }, outputSchema: { - results: z.array(z.object({}).passthrough()).describe('Search results'), + results: z.array(z.looseObject({})).describe('Search results'), }, annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, }, @@ -419,7 +419,7 @@ export function registerMessagingTools( ...identityOverrideInputShape, }, outputSchema: { - readers: z.array(z.object({}).passthrough()).describe('Readers'), + readers: z.array(z.looseObject({})).describe('Readers'), }, annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true }, }, diff --git a/packages/cli/src/cli/mcp/tool-results.ts b/packages/cli/src/cli/mcp/tool-results.ts index 407a7859c..ef4b41782 100644 --- a/packages/cli/src/cli/mcp/tool-results.ts +++ b/packages/cli/src/cli/mcp/tool-results.ts @@ -2,7 +2,7 @@ import { INVALID_AGENT_TOKEN_CODE, agentTokenRecoveryMessage } from '@agent-rela import { z } from 'zod'; /** Permissive output schema for tools that return arbitrary JSON objects. */ -export const jsonResult = z.object({}).passthrough(); +export const jsonResult = z.looseObject({}); export type JsonToolResult = { content: Array<{ type: 'text'; text: string }>; diff --git a/packages/cloud/package.json b/packages/cloud/package.json index 79d8ade3b..182a0470e 100644 --- a/packages/cloud/package.json +++ b/packages/cloud/package.json @@ -61,7 +61,7 @@ "@agent-relay/config": "11.2.0", "@aws-sdk/client-s3": "3.1020.0", "ignore": "^7.0.5", - "tar": "^7.5.10" + "tar": "^7.5.21" }, "optionalDependencies": { "ssh2": "^1.17.0" diff --git a/packages/config/package.json b/packages/config/package.json index aa1766210..e8d63b1b7 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -86,8 +86,7 @@ "test:watch": "vitest" }, "dependencies": { - "zod": "^3.23.8", - "zod-to-json-schema": "^3.23.1" + "zod": "^4.4.3" }, "devDependencies": { "@types/node": "^22.19.3", diff --git a/packages/config/src/schemas.test.ts b/packages/config/src/schemas.test.ts index 3a3bef82b..31fb5efd8 100644 --- a/packages/config/src/schemas.test.ts +++ b/packages/config/src/schemas.test.ts @@ -5,6 +5,8 @@ import { CloudConfigSchema, BridgeConfigSchema, RelayRuntimeConfigSchema, + ShadowConfigSchema, + jsonSchemas, } from './schemas.js'; import { DEFAULT_CONNECTION_CONFIG, DEFAULT_TMUX_WRAPPER_CONFIG } from './relay-config.js'; @@ -104,4 +106,59 @@ describe('config schemas', () => { trajectories: { storeInRepo: true }, }); }); + + it('validates shadow config with keyed pair and role records', () => { + const cfg = { + shadows: { + pairs: { Builder: { shadow: 'Reviewer', speakOn: ['commit'] } }, + roles: { Reviewer: { prompt: 'review carefully', speakOn: [] } }, + }, + }; + expect(ShadowConfigSchema.parse(cfg)).toEqual(cfg); + }); +}); + +describe('jsonSchemas', () => { + const entries = Object.entries(jsonSchemas) as Array<[string, Record]>; + + it('exposes one schema per config surface', () => { + expect(entries.map(([name]) => name)).toEqual([ + 'connection', + 'tmuxWrapper', + 'relayRuntime', + 'bridge', + 'teams', + 'shadow', + 'agentFrontmatter', + 'cliAuth', + 'cloud', + ]); + }); + + it.each(entries)('renders %s as an identified draft-7 object schema', (_name, schema) => { + expect(schema.$schema).toBe('http://json-schema.org/draft-07/schema#'); + expect(typeof schema.$id).toBe('string'); + expect(schema.type).toBe('object'); + expect(schema.properties).toBeTypeOf('object'); + }); + + it('describes config files as written, leaving defaulted fields optional', () => { + // `agents` has `.default([])`, so a hand-written teams config may omit it. + const teams = jsonSchemas.teams as { + required: string[]; + properties: { agents: { default: unknown } }; + }; + expect(teams.required).toEqual(['team']); + expect(teams.properties.agents.default).toEqual([]); + }); + + it('renders RegExp fields as unconstrained rather than failing to serialize', () => { + // `z.instanceof(RegExp)` has no JSON Schema equivalent; it must degrade to + // "anything" instead of throwing while the rest of the schema still renders. + const cliAuth = jsonSchemas.cliAuth as { + properties: { urlPattern: Record; command: { type: string } }; + }; + expect(cliAuth.properties.urlPattern).toEqual({}); + expect(cliAuth.properties.command.type).toBe('string'); + }); }); diff --git a/packages/config/src/schemas.ts b/packages/config/src/schemas.ts index 622695092..6bc8cfa34 100644 --- a/packages/config/src/schemas.ts +++ b/packages/config/src/schemas.ts @@ -1,8 +1,17 @@ import { z } from 'zod'; -import { zodToJsonSchema } from 'zod-to-json-schema'; const withId = (schema: unknown, id: string) => Object.assign(schema as Record, { $id: id }); +/** + * Render a config schema as JSON Schema draft-7. + * + * `io: 'input'` describes what a user writes in a config file (fields with a + * `.default()` stay optional); `unrepresentable: 'any'` keeps `z.instanceof(RegExp)` + * fields — which have no JSON Schema equivalent — from throwing. + */ +const toJsonSchema = (schema: z.ZodType) => + z.toJSONSchema(schema, { target: 'draft-7', io: 'input', unrepresentable: 'any' }); + // Relay connection defaults (used by broker + wrapper) export const ConnectionConfigSchema = z.object({ maxFrameBytes: z.number().int().positive(), @@ -37,6 +46,7 @@ export const RelayRuntimeConfigSchema = z.object({ export const BridgeConfigSchema = z.object({ projects: z .record( + z.string(), z.object({ lead: z.string().optional(), cli: z.string().optional(), @@ -75,8 +85,8 @@ export const ShadowPairConfigSchema = z.object({ export const ShadowConfigSchema = z.object({ shadows: z .object({ - pairs: z.record(ShadowPairConfigSchema).optional(), - roles: z.record(ShadowRoleConfigSchema).optional(), + pairs: z.record(z.string(), ShadowPairConfigSchema).optional(), + roles: z.record(z.string(), ShadowRoleConfigSchema).optional(), }) .optional(), }); @@ -181,31 +191,19 @@ export const CloudConfigSchema = z.object({ secretKey: z.string(), publishableKey: z.string(), webhookSecret: z.string(), - priceIds: z.record(z.string().optional()), + priceIds: z.record(z.string(), z.string().optional()), }), adminUsers: z.array(z.string()), }); export const jsonSchemas = { - connection: withId( - zodToJsonSchema(ConnectionConfigSchema, { target: 'jsonSchema7' }), - 'RelayConnectionConfig' - ), - tmuxWrapper: withId( - zodToJsonSchema(TmuxWrapperConfigSchema, { target: 'jsonSchema7' }), - 'RelayTmuxWrapperConfig' - ), - relayRuntime: withId( - zodToJsonSchema(RelayRuntimeConfigSchema, { target: 'jsonSchema7' }), - 'RelayRuntimeConfig' - ), - bridge: withId(zodToJsonSchema(BridgeConfigSchema, { target: 'jsonSchema7' }), 'BridgeConfig'), - teams: withId(zodToJsonSchema(TeamsConfigSchema, { target: 'jsonSchema7' }), 'TeamsConfig'), - shadow: withId(zodToJsonSchema(ShadowConfigSchema, { target: 'jsonSchema7' }), 'ShadowConfig'), - agentFrontmatter: withId( - zodToJsonSchema(AgentFrontmatterSchema, { target: 'jsonSchema7' }), - 'AgentFrontmatter' - ), - cliAuth: withId(zodToJsonSchema(CLIAuthConfigSchema, { target: 'jsonSchema7' }), 'CLIAuthConfig'), - cloud: withId(zodToJsonSchema(CloudConfigSchema, { target: 'jsonSchema7' }), 'CloudConfig'), + connection: withId(toJsonSchema(ConnectionConfigSchema), 'RelayConnectionConfig'), + tmuxWrapper: withId(toJsonSchema(TmuxWrapperConfigSchema), 'RelayTmuxWrapperConfig'), + relayRuntime: withId(toJsonSchema(RelayRuntimeConfigSchema), 'RelayRuntimeConfig'), + bridge: withId(toJsonSchema(BridgeConfigSchema), 'BridgeConfig'), + teams: withId(toJsonSchema(TeamsConfigSchema), 'TeamsConfig'), + shadow: withId(toJsonSchema(ShadowConfigSchema), 'ShadowConfig'), + agentFrontmatter: withId(toJsonSchema(AgentFrontmatterSchema), 'AgentFrontmatter'), + cliAuth: withId(toJsonSchema(CLIAuthConfigSchema), 'CLIAuthConfig'), + cloud: withId(toJsonSchema(CloudConfigSchema), 'CloudConfig'), }; diff --git a/packages/fleet/package.json b/packages/fleet/package.json index 6d7749861..67ab8d470 100644 --- a/packages/fleet/package.json +++ b/packages/fleet/package.json @@ -30,7 +30,7 @@ "@agent-relay/harnesses": "11.2.0", "@relaycast/sdk": "^6.0.0", "ws": "^8.18.3", - "zod": "^3.23.8" + "zod": "^4.4.3" }, "devDependencies": { "@types/ws": "^8.18.1" diff --git a/packages/fleet/src/index.ts b/packages/fleet/src/index.ts index 62fc1cecb..3e081b21a 100644 --- a/packages/fleet/src/index.ts +++ b/packages/fleet/src/index.ts @@ -119,7 +119,7 @@ export type ZodLikeSchema = Pick, 'safeParse'> & { }; const spawnInputSchema = z - .object({ + .looseObject({ name: z.string().min(1).optional(), agent: z.string().min(1).optional(), model: z.string().min(1).optional(), @@ -131,7 +131,6 @@ const spawnInputSchema = z team: z.string().min(1).optional(), skip_relay_prompt: z.boolean().optional(), }) - .passthrough() .refine((input) => Boolean(input.name ?? input.agent), { message: 'spawn input requires name or agent', path: ['name'], diff --git a/packages/harness-driver/package.json b/packages/harness-driver/package.json index 2176e5f04..8fe76acd2 100644 --- a/packages/harness-driver/package.json +++ b/packages/harness-driver/package.json @@ -58,7 +58,7 @@ "dependencies": { "@agent-relay/sdk": "11.2.0", "ws": "^8.18.3", - "zod": "^3.23.8" + "zod": "^4.4.3" }, "optionalDependencies": { "@agent-relay/broker-darwin-arm64": "11.2.0", diff --git a/packages/harness-driver/src/client.ts b/packages/harness-driver/src/client.ts index d256c06a8..debf87686 100644 --- a/packages/harness-driver/src/client.ts +++ b/packages/harness-driver/src/client.ts @@ -102,18 +102,16 @@ export interface HarnessDriverClientOptions { const optionalString = z.preprocess((value) => (value === null ? undefined : value), z.string().optional()); const optionalNumber = z.preprocess((value) => (value === null ? undefined : value), z.number().optional()); -export const SpawnAgentResultSchema = z - .object({ - success: z.boolean().optional(), - name: z.string(), - runtime: z.enum(['pty', 'headless']), - model: z.string().nullable().optional(), - pid: optionalNumber, - pre_registered: z.boolean().optional(), - warning: z.string().nullable().optional(), - sessionId: optionalString, - }) - .passthrough(); +export const SpawnAgentResultSchema = z.looseObject({ + success: z.boolean().optional(), + name: z.string(), + runtime: z.enum(['pty', 'headless']), + model: z.string().nullable().optional(), + pid: optionalNumber, + pre_registered: z.boolean().optional(), + warning: z.string().nullable().optional(), + sessionId: optionalString, +}); export interface SessionInfo { broker_version: string; diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 31b5f8219..593780c26 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -64,6 +64,6 @@ "dependencies": { "@relaycast/sdk": "^6.0.0", "@relaycast/types": "^6.0.0", - "zod": "^4.3.6" + "zod": "^4.4.3" } } diff --git a/tests/e2e/fleet/nodes/node-a.ts b/tests/e2e/fleet/nodes/node-a.ts index ded405809..7dcd7c23d 100644 --- a/tests/e2e/fleet/nodes/node-a.ts +++ b/tests/e2e/fleet/nodes/node-a.ts @@ -25,12 +25,10 @@ export default defineNode({ 'spawn:pool': spawn(stub), echo: action( { - input: z - .object({ - text: z.string().optional(), - message: z.object({ text: z.string() }).passthrough().optional(), - }) - .passthrough(), + input: z.looseObject({ + text: z.string().optional(), + message: z.looseObject({ text: z.string() }).optional(), + }), }, async (input, ctx) => { const text = (input.text ?? input.message?.text ?? '') as string; diff --git a/tests/e2e/prod-smoke/agent-relay.ts b/tests/e2e/prod-smoke/agent-relay.ts index f33e8219a..1d22278ba 100644 --- a/tests/e2e/prod-smoke/agent-relay.ts +++ b/tests/e2e/prod-smoke/agent-relay.ts @@ -15,12 +15,10 @@ export default defineNode({ capabilities: { 'hello-prod': action( { - input: z - .object({ - echo: z.unknown().optional(), - notify: z.object({ channel: z.string(), from: z.string() }).optional(), - }) - .passthrough(), + input: z.looseObject({ + echo: z.unknown().optional(), + notify: z.object({ channel: z.string(), from: z.string() }).optional(), + }), }, async (input, ctx) => { if (input.notify) {