diff --git a/.github/workflows/sdk-typescript.yml b/.github/workflows/sdk-typescript.yml index e1418debd5..5f91a7964e 100644 --- a/.github/workflows/sdk-typescript.yml +++ b/.github/workflows/sdk-typescript.yml @@ -49,7 +49,7 @@ jobs: run: pnpm lint:check - name: Type check - run: npx tsc + run: pnpm exec tsc test-unit: runs-on: ubicloud-standard-4 diff --git a/examples/typescript/durable/workflow.ts b/examples/typescript/durable/workflow.ts index 25d8b547d9..38cfc8c355 100644 --- a/examples/typescript/durable/workflow.ts +++ b/examples/typescript/durable/workflow.ts @@ -1,4 +1,4 @@ -import { z } from 'zod'; +import { z } from 'zod/v4'; import { Or, SleepCondition, UserEventCondition } from '@hatchet-dev/typescript-sdk/v1/conditions'; import { NonDeterminismError } from '@hatchet-dev/typescript-sdk/util/errors/non-determinism-error'; import sleep from '@hatchet-dev/typescript-sdk/util/sleep'; @@ -254,6 +254,10 @@ const lookbackEventPayloadSchema = z.object({ user_id: z.number(), }); +const twoEventsPayloadSchema = z.object({ + order: z.string(), +}); + export const waitForEventLookback = hatchet.durableTask({ name: 'wait-for-event-lookback', executionTimeout: '10m', @@ -312,14 +316,14 @@ export const waitForTwoEventsSecondPushedFirst = hatchet.durableTask({ const event1 = await ctx.waitForEvent( 'key1', undefined, - undefined, + twoEventsPayloadSchema, input.scope, LOOKBACK_WINDOW ); const event2 = await ctx.waitForEvent( 'key2', undefined, - undefined, + twoEventsPayloadSchema, input.scope, LOOKBACK_WINDOW ); diff --git a/examples/typescript/simple/run.ts b/examples/typescript/simple/run.ts index e0823896c6..918b7ea92b 100644 --- a/examples/typescript/simple/run.ts +++ b/examples/typescript/simple/run.ts @@ -1,6 +1,7 @@ import { hatchet } from '../hatchet-client'; import { simple } from './workflow'; import { parent } from './workflow-with-child'; +import { simpleWithZod } from './zod'; async function main() { // > Running a Task @@ -15,6 +16,11 @@ async function main() { } ); + const res3 = await simpleWithZod.run({ + Message: 'HeLlO WoRlD', + }); + console.log(res3.TransformedMessage); + // 👀 Access the results of the Task console.log(res.TransformedMessage); } diff --git a/examples/typescript/simple/zod.ts b/examples/typescript/simple/zod.ts index e43eb64cb8..88f6a8f231 100644 --- a/examples/typescript/simple/zod.ts +++ b/examples/typescript/simple/zod.ts @@ -1,5 +1,5 @@ // > Declaring a Task -import * as z from 'zod'; +import * as z from 'zod/v4'; import { hatchet } from '../hatchet-client'; const SimpleInputSchema = z.object({ diff --git a/sdks/typescript/CHANGELOG.md b/sdks/typescript/CHANGELOG.md index e41c90a1a2..4e2dfb6fea 100644 --- a/sdks/typescript/CHANGELOG.md +++ b/sdks/typescript/CHANGELOG.md @@ -5,6 +5,14 @@ All notable changes to Hatchet's TypeScript SDK will be documented in this chang The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.22.0] - 2026-04-28 + +### Added + +- Adds `mcpTool` method to Workflow objects for integration with Claude and OpenAI agent SDKs. Requires Zod v4. +- Bumps minimum Zod version to `3.25.0`. Zod schemas provided to the SDK must be Zod 4 schemas, but you can still use Zod 3 in your application +code. + ## [1.21.2] - 2026-04-22 ### Added diff --git a/sdks/typescript/package.json b/sdks/typescript/package.json index 4dc20400fe..04405c1a2b 100644 --- a/sdks/typescript/package.json +++ b/sdks/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@hatchet-dev/typescript-sdk", - "version": "1.21.2", + "version": "1.22.0", "description": "Background task orchestration & visibility for developers", "types": "dist/index.d.ts", "files": [ @@ -44,7 +44,6 @@ "license": "MIT", "devDependencies": { "@eslint/js": "^10.0.1", - "@tsd/typescript": "^5.9.3", "@types/jest": "^29.5.14", "@types/node": "^22.13.14", "autoprefixer": "^10.4.27", @@ -63,6 +62,8 @@ "ts-jest": "^29.4.6", "ts-node": "^10.9.2", "ts-proto": "^2.11.4", + "tsconfig-paths": "^4.2.0", + "tsx": "^4.21.0", "typedoc": "^0.28.17", "typedoc-plugin-markdown": "^4.10.0", "typedoc-plugin-no-inherit": "^1.6.1", @@ -81,11 +82,16 @@ "qs": "^6.14.2", "semver": "^7.7.4", "yaml": "^2.8.2", - "zod": "^3.24.2", - "zod-to-json-schema": "^3.24.1" + "zod-to-json-schema": "^3.24.2" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" }, "optionalDependencies": { + "@anthropic-ai/claude-agent-sdk": "^0.2.87", "@grpc/grpc-js": "^1.14.3", + "@modelcontextprotocol/sdk": "^1.29.0", + "@openai/agents": "0.8.3", "@opentelemetry/api": "^1.9.0", "@opentelemetry/core": "^2.0.0", "@opentelemetry/exporter-trace-otlp-grpc": "^0.215.0", diff --git a/sdks/typescript/pnpm-lock.yaml b/sdks/typescript/pnpm-lock.yaml index f43291166c..f4b35c4fab 100644 --- a/sdks/typescript/pnpm-lock.yaml +++ b/sdks/typescript/pnpm-lock.yaml @@ -49,18 +49,15 @@ importers: specifier: ^2.8.2 version: 2.8.3 zod: - specifier: ^3.24.2 - version: 3.25.76 + specifier: ^3.25.0 || ^4.0.0 + version: 4.3.6 zod-to-json-schema: - specifier: ^3.24.1 - version: 3.25.2(zod@3.25.76) + specifier: ^3.24.2 + version: 3.25.2(zod@4.3.6) devDependencies: '@eslint/js': specifier: ^10.0.1 version: 10.0.1(eslint@10.2.0) - '@tsd/typescript': - specifier: ^5.9.3 - version: 5.9.3 '@types/jest': specifier: ^29.5.14 version: 29.5.14 @@ -115,6 +112,12 @@ importers: ts-proto: specifier: ^2.11.4 version: 2.11.6 + tsconfig-paths: + specifier: ^4.2.0 + version: 4.2.0 + tsx: + specifier: ^4.21.0 + version: 4.21.0 typedoc: specifier: ^0.28.17 version: 0.28.19(typescript@5.9.2) @@ -131,9 +134,18 @@ importers: specifier: ^8.56.1 version: 8.58.2(eslint@10.2.0)(typescript@5.9.2) optionalDependencies: + '@anthropic-ai/claude-agent-sdk': + specifier: ^0.2.87 + version: 0.2.121(zod@4.3.6) '@grpc/grpc-js': specifier: ^1.14.3 version: 1.14.3 + '@modelcontextprotocol/sdk': + specifier: ^1.29.0 + version: 1.29.0(zod@4.3.6) + '@openai/agents': + specifier: 0.8.3 + version: 0.8.3(ws@8.20.0)(zod@4.3.6) '@opentelemetry/api': specifier: ^1.9.0 version: 1.9.1 @@ -159,6 +171,65 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} + '@anthropic-ai/claude-agent-sdk-darwin-arm64@0.2.121': + resolution: {integrity: sha512-zVHcXvx6Hl/glDcOCH+EyNx4KPE9cMGLk42eEBSZe014tAN5W8bwM/By08iM6dxijnpH0NQRNNEAW+BryWzuDg==} + cpu: [arm64] + os: [darwin] + + '@anthropic-ai/claude-agent-sdk-darwin-x64@0.2.121': + resolution: {integrity: sha512-lIXdqKj+bpfDxCk/eU1F1TXNqsIsLTRrkUG/wx19WIGZ8gLUmmVSveUKGlNegTs7S6evMvuezprJzDJT4TcvPA==} + cpu: [x64] + os: [darwin] + + '@anthropic-ai/claude-agent-sdk-linux-arm64-musl@0.2.121': + resolution: {integrity: sha512-4XaGK+dRBYy7krln7BrDG0WsdE6ejUSgHjWHlUGXoubFfZUvls4GSahLcYjJBArLi4dLnxKw8zEuiQguPAIbrw==} + cpu: [arm64] + os: [linux] + libc: [musl] + + '@anthropic-ai/claude-agent-sdk-linux-arm64@0.2.121': + resolution: {integrity: sha512-AQSnJzaiFvQpUPfO1tWLvsHgb6KNar4QYEQ/5/sk1itfgr3Fx9gxTreq43wX7AXSvkBX1QlDaP1aR1sfM/g/lQ==} + cpu: [arm64] + os: [linux] + libc: [glibc] + + '@anthropic-ai/claude-agent-sdk-linux-x64-musl@0.2.121': + resolution: {integrity: sha512-sQoGIgzLlBRrwizxsCV/lbaEuxXom/cfOwlDtQ2HnS1IzDDSjSf5d5pugpWItkOyXBWcHzMUu731WTTutvd/BQ==} + cpu: [x64] + os: [linux] + libc: [musl] + + '@anthropic-ai/claude-agent-sdk-linux-x64@0.2.121': + resolution: {integrity: sha512-DJUgpm7au086WaQV/S7BGOt2M8D90spGZRizT3twYsacf1BxzK1qsXqB/Pw1lUjPy6pI107pml/TaPzWuS/Vzg==} + cpu: [x64] + os: [linux] + libc: [glibc] + + '@anthropic-ai/claude-agent-sdk-win32-arm64@0.2.121': + resolution: {integrity: sha512-6n/NHkHxs0/lCJX3XPADjo1EFzXBf0IwYz/nyzJGBCDJjGKmgTe0i8eYBr/hviwt1/OPeK7dmVzVSVl6EL9Azg==} + cpu: [arm64] + os: [win32] + + '@anthropic-ai/claude-agent-sdk-win32-x64@0.2.121': + resolution: {integrity: sha512-v2/R918/t94cCwc6rmbxk+UYeQPtF2oBLtQAk+cT0M60hvqmCZO2noyZx5uTp8TQncOlG4MkINIeNY2yfmWSoQ==} + cpu: [x64] + os: [win32] + + '@anthropic-ai/claude-agent-sdk@0.2.121': + resolution: {integrity: sha512-hwZNYTkGLKVixd/V/OCJwfH/SdfxZXGV0m6wvy5EBq6qfB+lvJTRz/MSOSa7dHqo4/F7zJY68crEEca68Wrxpw==} + engines: {node: '>=18.0.0'} + peerDependencies: + zod: ^4.0.0 + + '@anthropic-ai/sdk@0.81.0': + resolution: {integrity: sha512-D4K5PvEV6wPiRtVlVsJHIUhHAmOZ6IT/I9rKlTf84gR7GyyAurPJK7z9BOf/AZqC5d1DhYQGJNKRmV+q8dGhgw==} + hasBin: true + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + peerDependenciesMeta: + zod: + optional: true + '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} @@ -309,6 +380,10 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/runtime@7.29.2': + resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} + engines: {node: '>=6.9.0'} + '@babel/template@7.27.2': resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} @@ -340,6 +415,162 @@ packages: '@emnapi/wasi-threads@1.0.4': resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==} + '@esbuild/aix-ppc64@0.27.7': + resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.27.7': + resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.27.7': + resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.27.7': + resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.27.7': + resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.27.7': + resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.27.7': + resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.27.7': + resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.27.7': + resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.27.7': + resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.27.7': + resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.27.7': + resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.27.7': + resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.27.7': + resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.27.7': + resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.27.7': + resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.27.7': + resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.27.7': + resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.27.7': + resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.27.7': + resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.27.7': + resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.27.7': + resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.27.7': + resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.27.7': + resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.27.7': + resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.27.7': + resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.9.1': resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -391,6 +622,12 @@ packages: engines: {node: '>=6'} hasBin: true + '@hono/node-server@1.19.14': + resolution: {integrity: sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==} + engines: {node: '>=18.14.1'} + peerDependencies: + hono: ^4 + '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} @@ -509,6 +746,16 @@ packages: engines: {node: '>=18'} hasBin: true + '@modelcontextprotocol/sdk@1.29.0': + resolution: {integrity: sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==} + engines: {node: '>=18'} + peerDependencies: + '@cfworker/json-schema': ^4.1.1 + zod: ^3.25 || ^4.0 + peerDependenciesMeta: + '@cfworker/json-schema': + optional: true + '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} @@ -528,6 +775,29 @@ packages: resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} engines: {node: '>=12.4.0'} + '@openai/agents-core@0.8.3': + resolution: {integrity: sha512-UWRwtGF4t+MkT2xMWTHuEUI2xgp58bKvMYN0rQu6rB9zWtiP0aY5tCXlWUdPKhpPlM/X68u6eUN7qDitqrf50g==} + peerDependencies: + zod: ^4.0.0 + peerDependenciesMeta: + zod: + optional: true + + '@openai/agents-openai@0.8.3': + resolution: {integrity: sha512-n5bsRfVDINupkeSh/E/lRoGWUi9xVSRpf6muRjnEckIO0pmCG3NzKO+FQVhiyFA3c8i2vrn28SXF/ZdGcG4+vQ==} + peerDependencies: + zod: ^4.0.0 + + '@openai/agents-realtime@0.8.3': + resolution: {integrity: sha512-no5AdAfYM5V/1u32OEQpP+VOJP/Y/JyTCVOvcgAdSKIV43ZG82f72pxbB0B2aFRdLZwC7C6sDgCJz6pbp+TjRg==} + peerDependencies: + zod: ^4.0.0 + + '@openai/agents@0.8.3': + resolution: {integrity: sha512-VmUywYNVaOuBOOv5hdH6tj3UjU3ZOkvM5WyRyEgRXEVkYbISkZuVWlnzEtiZkQ3lWjp0M8GGtKfSq2Dbr5DaQQ==} + peerDependencies: + zod: ^4.0.0 + '@opentelemetry/api-logs@0.215.0': resolution: {integrity: sha512-xrFlqhdhUyO8wSRn6DjE0145/HPWSJ5Nm0C7vWua6TdL/FSEAZvEyvdsa9CRXuxo9ebb7j/NEPhEcO62IJ0qUA==} engines: {node: '>=8.0.0'} @@ -734,6 +1004,9 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} @@ -913,6 +1186,10 @@ packages: abort-controller-x@0.5.0: resolution: {integrity: sha512-yTt9CI0x+nRfX6BFMenEGP8ooPvErGH6AbFz20C2IeOLIlDsrw/VHpgne3GsCEuTA410IiFiaLVFKmgM4bKEPQ==} + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} + acorn-import-attributes@1.9.5: resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} peerDependencies: @@ -941,9 +1218,20 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + ajv@6.14.0: resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} + ajv@8.20.0: + resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==} + ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} @@ -1060,6 +1348,10 @@ packages: bintrees@1.0.2: resolution: {integrity: sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==} + body-parser@2.2.2: + resolution: {integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==} + engines: {node: '>=18'} + brace-expansion@5.0.5: resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==} engines: {node: 18 || 20 || >=22} @@ -1083,6 +1375,10 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -1170,9 +1466,29 @@ packages: resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} engines: {node: ^14.18.0 || >=16.10.0} + content-disposition@1.1.0: + resolution: {integrity: sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==} + engines: {node: '>=18'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} + engines: {node: '>=6.6.0'} + + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + + cors@2.8.6: + resolution: {integrity: sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==} + engines: {node: '>= 0.10'} + create-jest@29.7.0: resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -1250,6 +1566,10 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + detect-libc@1.0.3: resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} engines: {node: '>=0.10'} @@ -1294,6 +1614,9 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + electron-to-chromium@1.5.340: resolution: {integrity: sha512-908qahOGocRMinT2nM3ajCEM99H4iPdv84eagPP3FfZy/1ZGeOy2CZYzjhms81ckOPCXPlW7LkY4XpxD8r1DrA==} @@ -1304,6 +1627,10 @@ packages: emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -1339,10 +1666,18 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} + esbuild@0.27.7: + resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + escape-string-regexp@2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} @@ -1491,6 +1826,18 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + eventsource-parser@3.0.8: + resolution: {integrity: sha512-70QWGkr4snxr0OXLRWsFLeRBIRPuQOvt4s8QYjmUlmlkyTZkRqS7EDVRZtzU3TiyDbXSzaOeF0XUKy8PchzukQ==} + engines: {node: '>=18.0.0'} + + eventsource@3.0.7: + resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} + engines: {node: '>=18.0.0'} + execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -1503,6 +1850,16 @@ packages: resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + express-rate-limit@8.4.1: + resolution: {integrity: sha512-NGVYwQSAyEQgzxX1iCM978PP9AdO/hW93gMcF6ZwQCm+rFvLsBH6w4xcXWTcliS8La5EPRN3p9wzItqBwJrfNw==} + engines: {node: '>= 16'} + peerDependencies: + express: '>= 4.11' + + express@5.2.1: + resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==} + engines: {node: '>= 18'} + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -1519,6 +1876,9 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} + fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} @@ -1550,6 +1910,10 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} + finalhandler@2.1.1: + resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==} + engines: {node: '>= 18.0.0'} + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -1582,9 +1946,17 @@ packages: resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} engines: {node: '>= 6'} + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + fraction.js@5.3.4: resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} + fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -1700,9 +2072,17 @@ packages: resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==} engines: {node: '>= 0.4'} + hono@4.12.15: + resolution: {integrity: sha512-qM0jDhFEaCBb4TxoW7f53Qrpv9RBiayUHo0S52JudprkhvpjIrGoU1mnnr29Fvd1U335ZFPZQY1wlkqgfGXyLg==} + engines: {node: '>=16.9.0'} + html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + http-errors@2.0.1: + resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} + engines: {node: '>= 0.8'} + https-proxy-agent@7.0.6: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} @@ -1711,6 +2091,10 @@ packages: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} + iconv-lite@0.7.2: + resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==} + engines: {node: '>=0.10.0'} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -1743,6 +2127,14 @@ packages: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} + ip-address@10.1.0: + resolution: {integrity: sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==} + engines: {node: '>= 12'} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + is-array-buffer@3.0.5: resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} engines: {node: '>= 0.4'} @@ -1821,6 +2213,9 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + is-regex@1.2.1: resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} engines: {node: '>= 0.4'} @@ -2025,6 +2420,9 @@ packages: node-notifier: optional: true + jose@6.2.3: + resolution: {integrity: sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==} + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -2043,9 +2441,19 @@ packages: json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + json-schema-to-ts@3.1.1: + resolution: {integrity: sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==} + engines: {node: '>=16'} + json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-schema-typed@8.0.2: + resolution: {integrity: sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==} + json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -2123,6 +2531,14 @@ packages: mdurl@2.0.0: resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -2138,10 +2554,18 @@ packages: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + mime-types@3.0.2: + resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} + engines: {node: '>=18'} + mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} @@ -2180,6 +2604,10 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} @@ -2221,6 +2649,10 @@ packages: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} @@ -2253,6 +2685,10 @@ packages: resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} engines: {node: '>=14.0.0'} + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -2260,6 +2696,18 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} + openai@6.34.0: + resolution: {integrity: sha512-yEr2jdGf4tVFYG6ohmr3pF6VJuveP0EA/sS8TBx+4Eq5NT10alu5zg2dmxMXMgqpihRDQlFGpRt2XwsGj+Fyxw==} + hasBin: true + peerDependencies: + ws: ^8.18.0 + zod: ^3.25 || ^4.0 + peerDependenciesMeta: + ws: + optional: true + zod: + optional: true + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -2292,6 +2740,10 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -2307,6 +2759,9 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-to-regexp@8.4.2: + resolution: {integrity: sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -2336,6 +2791,10 @@ packages: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} + pkce-challenge@5.0.1: + resolution: {integrity: sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==} + engines: {node: '>=16.20.0'} + pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} @@ -2387,6 +2846,10 @@ packages: resolution: {integrity: sha512-NWWCCscLjs+cOKF/s/XVNFRW7Yih0fdH+9brffR5NZCy8k42yRdl5KlWKMVXuI1vfCoy4o1z80XR/W/QUb3V3w==} engines: {node: '>=12.0.0'} + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + proxy-from-env@2.1.0: resolution: {integrity: sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==} engines: {node: '>=10'} @@ -2412,6 +2875,14 @@ packages: quick-format-unescaped@4.0.4: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@3.0.2: + resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} + engines: {node: '>= 0.10'} + react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} @@ -2431,6 +2902,10 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + require-in-the-middle@8.0.1: resolution: {integrity: sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ==} engines: {node: '>=9.3.0 || >=8.10.0 <9.0.0'} @@ -2470,6 +2945,10 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + router@2.2.0: + resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} + engines: {node: '>= 18'} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -2489,6 +2968,9 @@ packages: resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} engines: {node: '>=10'} + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -2498,6 +2980,14 @@ packages: engines: {node: '>=10'} hasBin: true + send@1.2.1: + resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==} + engines: {node: '>= 18'} + + serve-static@2.2.1: + resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==} + engines: {node: '>= 18'} + set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} engines: {node: '>= 0.4'} @@ -2510,6 +3000,9 @@ packages: resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} engines: {node: '>= 0.4'} + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -2576,6 +3069,10 @@ packages: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} + engines: {node: '>= 0.8'} + stop-iteration-iterator@1.1.0: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} @@ -2665,9 +3162,16 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + ts-algebra@2.0.0: + resolution: {integrity: sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==} + ts-api-utils@2.5.0: resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==} engines: {node: '>=18.12'} @@ -2731,6 +3235,10 @@ packages: tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + tsd-lite@0.7.0: resolution: {integrity: sha512-XhQ7w/RPzfjSb98LIQB1qx7yAvRV6+h5JFP4dCvd79Hbp23X8CCx4EdRAQm6faTkRdprKYvZE8kxlK6LpJp8vg==} engines: {node: '>=14'} @@ -2741,6 +3249,11 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tsx@4.21.0: + resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==} + engines: {node: '>=18.0.0'} + hasBin: true + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -2757,6 +3270,10 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} + type-is@2.0.1: + resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} + engines: {node: '>= 0.6'} + typed-array-buffer@1.0.3: resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} engines: {node: '>= 0.4'} @@ -2818,6 +3335,10 @@ packages: undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + unrs-resolver@1.11.1: resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} @@ -2837,6 +3358,10 @@ packages: resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} @@ -2885,6 +3410,18 @@ packages: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + ws@8.20.0: + resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -2922,8 +3459,8 @@ packages: peerDependencies: zod: ^3.25.28 || ^4 - zod@3.25.76: - resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} + zod@4.3.6: + resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} snapshots: @@ -2932,6 +3469,56 @@ snapshots: '@jridgewell/gen-mapping': 0.3.12 '@jridgewell/trace-mapping': 0.3.29 + '@anthropic-ai/claude-agent-sdk-darwin-arm64@0.2.121': + optional: true + + '@anthropic-ai/claude-agent-sdk-darwin-x64@0.2.121': + optional: true + + '@anthropic-ai/claude-agent-sdk-linux-arm64-musl@0.2.121': + optional: true + + '@anthropic-ai/claude-agent-sdk-linux-arm64@0.2.121': + optional: true + + '@anthropic-ai/claude-agent-sdk-linux-x64-musl@0.2.121': + optional: true + + '@anthropic-ai/claude-agent-sdk-linux-x64@0.2.121': + optional: true + + '@anthropic-ai/claude-agent-sdk-win32-arm64@0.2.121': + optional: true + + '@anthropic-ai/claude-agent-sdk-win32-x64@0.2.121': + optional: true + + '@anthropic-ai/claude-agent-sdk@0.2.121(zod@4.3.6)': + dependencies: + '@anthropic-ai/sdk': 0.81.0(zod@4.3.6) + '@modelcontextprotocol/sdk': 1.29.0(zod@4.3.6) + zod: 4.3.6 + optionalDependencies: + '@anthropic-ai/claude-agent-sdk-darwin-arm64': 0.2.121 + '@anthropic-ai/claude-agent-sdk-darwin-x64': 0.2.121 + '@anthropic-ai/claude-agent-sdk-linux-arm64': 0.2.121 + '@anthropic-ai/claude-agent-sdk-linux-arm64-musl': 0.2.121 + '@anthropic-ai/claude-agent-sdk-linux-x64': 0.2.121 + '@anthropic-ai/claude-agent-sdk-linux-x64-musl': 0.2.121 + '@anthropic-ai/claude-agent-sdk-win32-arm64': 0.2.121 + '@anthropic-ai/claude-agent-sdk-win32-x64': 0.2.121 + transitivePeerDependencies: + - '@cfworker/json-schema' + - supports-color + optional: true + + '@anthropic-ai/sdk@0.81.0(zod@4.3.6)': + dependencies: + json-schema-to-ts: 3.1.1 + optionalDependencies: + zod: 4.3.6 + optional: true + '@babel/code-frame@7.27.1': dependencies: '@babel/helper-validator-identifier': 7.27.1 @@ -3096,51 +3683,132 @@ snapshots: '@babel/core': 7.28.0 '@babel/helper-plugin-utils': 7.27.1 - '@babel/template@7.27.2': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.0 - '@babel/types': 7.28.2 + '@babel/runtime@7.29.2': + optional: true + + '@babel/template@7.27.2': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.28.0 + '@babel/types': 7.28.2 + + '@babel/traverse@7.28.0': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.0 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.0 + '@babel/template': 7.27.2 + '@babel/types': 7.28.2 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.28.2': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + + '@bcoe/v8-coverage@0.2.3': {} + + '@bufbuild/protobuf@2.11.0': {} + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@emnapi/core@1.4.5': + dependencies: + '@emnapi/wasi-threads': 1.0.4 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.4.5': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.0.4': + dependencies: + tslib: 2.8.1 + optional: true + + '@esbuild/aix-ppc64@0.27.7': + optional: true + + '@esbuild/android-arm64@0.27.7': + optional: true + + '@esbuild/android-arm@0.27.7': + optional: true + + '@esbuild/android-x64@0.27.7': + optional: true + + '@esbuild/darwin-arm64@0.27.7': + optional: true + + '@esbuild/darwin-x64@0.27.7': + optional: true + + '@esbuild/freebsd-arm64@0.27.7': + optional: true + + '@esbuild/freebsd-x64@0.27.7': + optional: true + + '@esbuild/linux-arm64@0.27.7': + optional: true + + '@esbuild/linux-arm@0.27.7': + optional: true + + '@esbuild/linux-ia32@0.27.7': + optional: true + + '@esbuild/linux-loong64@0.27.7': + optional: true + + '@esbuild/linux-mips64el@0.27.7': + optional: true + + '@esbuild/linux-ppc64@0.27.7': + optional: true + + '@esbuild/linux-riscv64@0.27.7': + optional: true + + '@esbuild/linux-s390x@0.27.7': + optional: true + + '@esbuild/linux-x64@0.27.7': + optional: true + + '@esbuild/netbsd-arm64@0.27.7': + optional: true - '@babel/traverse@7.28.0': - dependencies: - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.0 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.0 - '@babel/template': 7.27.2 - '@babel/types': 7.28.2 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color + '@esbuild/netbsd-x64@0.27.7': + optional: true - '@babel/types@7.28.2': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 + '@esbuild/openbsd-arm64@0.27.7': + optional: true - '@bcoe/v8-coverage@0.2.3': {} + '@esbuild/openbsd-x64@0.27.7': + optional: true - '@bufbuild/protobuf@2.11.0': {} + '@esbuild/openharmony-arm64@0.27.7': + optional: true - '@cspotcode/source-map-support@0.8.1': - dependencies: - '@jridgewell/trace-mapping': 0.3.9 + '@esbuild/sunos-x64@0.27.7': + optional: true - '@emnapi/core@1.4.5': - dependencies: - '@emnapi/wasi-threads': 1.0.4 - tslib: 2.8.1 + '@esbuild/win32-arm64@0.27.7': optional: true - '@emnapi/runtime@1.4.5': - dependencies: - tslib: 2.8.1 + '@esbuild/win32-ia32@0.27.7': optional: true - '@emnapi/wasi-threads@1.0.4': - dependencies: - tslib: 2.8.1 + '@esbuild/win32-x64@0.27.7': optional: true '@eslint-community/eslint-utils@4.9.1(eslint@10.2.0)': @@ -3197,6 +3865,11 @@ snapshots: protobufjs: 7.5.5 yargs: 17.7.2 + '@hono/node-server@1.19.14(hono@4.12.15)': + dependencies: + hono: 4.12.15 + optional: true + '@humanfs/core@0.19.1': {} '@humanfs/node@0.16.7': @@ -3418,6 +4091,29 @@ snapshots: - encoding - supports-color + '@modelcontextprotocol/sdk@1.29.0(zod@4.3.6)': + dependencies: + '@hono/node-server': 1.19.14(hono@4.12.15) + ajv: 8.20.0 + ajv-formats: 3.0.1(ajv@8.20.0) + content-type: 1.0.5 + cors: 2.8.6 + cross-spawn: 7.0.6 + eventsource: 3.0.7 + eventsource-parser: 3.0.8 + express: 5.2.1 + express-rate-limit: 8.4.1(express@5.2.1) + hono: 4.12.15 + jose: 6.2.3 + json-schema-typed: 8.0.2 + pkce-challenge: 5.0.1 + raw-body: 3.0.2 + zod: 4.3.6 + zod-to-json-schema: 3.25.2(zod@4.3.6) + transitivePeerDependencies: + - supports-color + optional: true + '@napi-rs/wasm-runtime@0.2.12': dependencies: '@emnapi/core': 1.4.5 @@ -3439,6 +4135,61 @@ snapshots: '@nolyfill/is-core-module@1.0.39': {} + '@openai/agents-core@0.8.3(ws@8.20.0)(zod@4.3.6)': + dependencies: + debug: 4.4.3 + openai: 6.34.0(ws@8.20.0)(zod@4.3.6) + optionalDependencies: + '@modelcontextprotocol/sdk': 1.29.0(zod@4.3.6) + zod: 4.3.6 + transitivePeerDependencies: + - '@cfworker/json-schema' + - supports-color + - ws + optional: true + + '@openai/agents-openai@0.8.3(ws@8.20.0)(zod@4.3.6)': + dependencies: + '@openai/agents-core': 0.8.3(ws@8.20.0)(zod@4.3.6) + debug: 4.4.3 + openai: 6.34.0(ws@8.20.0)(zod@4.3.6) + zod: 4.3.6 + transitivePeerDependencies: + - '@cfworker/json-schema' + - supports-color + - ws + optional: true + + '@openai/agents-realtime@0.8.3(zod@4.3.6)': + dependencies: + '@openai/agents-core': 0.8.3(ws@8.20.0)(zod@4.3.6) + '@types/ws': 8.18.1 + debug: 4.4.3 + ws: 8.20.0 + zod: 4.3.6 + transitivePeerDependencies: + - '@cfworker/json-schema' + - bufferutil + - supports-color + - utf-8-validate + optional: true + + '@openai/agents@0.8.3(ws@8.20.0)(zod@4.3.6)': + dependencies: + '@openai/agents-core': 0.8.3(ws@8.20.0)(zod@4.3.6) + '@openai/agents-openai': 0.8.3(ws@8.20.0)(zod@4.3.6) + '@openai/agents-realtime': 0.8.3(zod@4.3.6) + debug: 4.4.3 + openai: 6.34.0(ws@8.20.0)(zod@4.3.6) + zod: 4.3.6 + transitivePeerDependencies: + - '@cfworker/json-schema' + - bufferutil + - supports-color + - utf-8-validate + - ws + optional: true + '@opentelemetry/api-logs@0.215.0': dependencies: '@opentelemetry/api': 1.9.1 @@ -3673,6 +4424,11 @@ snapshots: '@types/unist@3.0.3': {} + '@types/ws@8.18.1': + dependencies: + '@types/node': 22.17.1 + optional: true + '@types/yargs-parser@21.0.3': {} '@types/yargs@17.0.33': @@ -3836,6 +4592,12 @@ snapshots: abort-controller-x@0.5.0: {} + accepts@2.0.0: + dependencies: + mime-types: 3.0.2 + negotiator: 1.0.0 + optional: true + acorn-import-attributes@1.9.5(acorn@8.16.0): dependencies: acorn: 8.16.0 @@ -3855,6 +4617,11 @@ snapshots: agent-base@7.1.4: {} + ajv-formats@3.0.1(ajv@8.20.0): + optionalDependencies: + ajv: 8.20.0 + optional: true + ajv@6.14.0: dependencies: fast-deep-equal: 3.1.3 @@ -3862,6 +4629,14 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@8.20.0: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.1.0 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + optional: true + ansi-colors@4.1.3: {} ansi-escapes@4.3.2: @@ -4032,6 +4807,21 @@ snapshots: bintrees@1.0.2: optional: true + body-parser@2.2.2: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 4.4.3 + http-errors: 2.0.1 + iconv-lite: 0.7.2 + on-finished: 2.4.1 + qs: 6.15.1 + raw-body: 3.0.2 + type-is: 2.0.1 + transitivePeerDependencies: + - supports-color + optional: true + brace-expansion@5.0.5: dependencies: balanced-match: 4.0.4 @@ -4058,6 +4848,9 @@ snapshots: buffer-from@1.1.2: {} + bytes@3.1.2: + optional: true + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -4129,8 +4922,26 @@ snapshots: consola@3.4.2: {} + content-disposition@1.1.0: + optional: true + + content-type@1.0.5: + optional: true + convert-source-map@2.0.0: {} + cookie-signature@1.2.2: + optional: true + + cookie@0.7.2: + optional: true + + cors@2.8.6: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + optional: true + create-jest@29.7.0(@types/node@22.17.1)(ts-node@10.9.2(@types/node@22.17.1)(typescript@5.9.2)): dependencies: '@jest/types': 29.6.3 @@ -4210,6 +5021,9 @@ snapshots: delayed-stream@1.0.0: {} + depd@2.0.0: + optional: true + detect-libc@1.0.3: {} detect-libc@2.0.4: {} @@ -4246,12 +5060,18 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 + ee-first@1.1.1: + optional: true + electron-to-chromium@1.5.340: {} emittery@0.13.1: {} emoji-regex@8.0.0: {} + encodeurl@2.0.0: + optional: true + entities@4.5.0: {} error-ex@1.3.2: @@ -4343,8 +5163,40 @@ snapshots: is-symbol: 1.1.1 optional: true + esbuild@0.27.7: + optionalDependencies: + '@esbuild/aix-ppc64': 0.27.7 + '@esbuild/android-arm': 0.27.7 + '@esbuild/android-arm64': 0.27.7 + '@esbuild/android-x64': 0.27.7 + '@esbuild/darwin-arm64': 0.27.7 + '@esbuild/darwin-x64': 0.27.7 + '@esbuild/freebsd-arm64': 0.27.7 + '@esbuild/freebsd-x64': 0.27.7 + '@esbuild/linux-arm': 0.27.7 + '@esbuild/linux-arm64': 0.27.7 + '@esbuild/linux-ia32': 0.27.7 + '@esbuild/linux-loong64': 0.27.7 + '@esbuild/linux-mips64el': 0.27.7 + '@esbuild/linux-ppc64': 0.27.7 + '@esbuild/linux-riscv64': 0.27.7 + '@esbuild/linux-s390x': 0.27.7 + '@esbuild/linux-x64': 0.27.7 + '@esbuild/netbsd-arm64': 0.27.7 + '@esbuild/netbsd-x64': 0.27.7 + '@esbuild/openbsd-arm64': 0.27.7 + '@esbuild/openbsd-x64': 0.27.7 + '@esbuild/openharmony-arm64': 0.27.7 + '@esbuild/sunos-x64': 0.27.7 + '@esbuild/win32-arm64': 0.27.7 + '@esbuild/win32-ia32': 0.27.7 + '@esbuild/win32-x64': 0.27.7 + escalade@3.2.0: {} + escape-html@1.0.3: + optional: true + escape-string-regexp@2.0.0: {} escape-string-regexp@4.0.0: {} @@ -4526,6 +5378,17 @@ snapshots: esutils@2.0.3: {} + etag@1.8.1: + optional: true + + eventsource-parser@3.0.8: + optional: true + + eventsource@3.0.7: + dependencies: + eventsource-parser: 3.0.8 + optional: true + execa@5.1.1: dependencies: cross-spawn: 7.0.6 @@ -4548,6 +5411,46 @@ snapshots: jest-message-util: 29.7.0 jest-util: 29.7.0 + express-rate-limit@8.4.1(express@5.2.1): + dependencies: + express: 5.2.1 + ip-address: 10.1.0 + optional: true + + express@5.2.1: + dependencies: + accepts: 2.0.0 + body-parser: 2.2.2 + content-disposition: 1.1.0 + content-type: 1.0.5 + cookie: 0.7.2 + cookie-signature: 1.2.2 + debug: 4.4.3 + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 2.1.1 + fresh: 2.0.0 + http-errors: 2.0.1 + merge-descriptors: 2.0.0 + mime-types: 3.0.2 + on-finished: 2.4.1 + once: 1.4.0 + parseurl: 1.3.3 + proxy-addr: 2.0.7 + qs: 6.15.1 + range-parser: 1.2.1 + router: 2.2.0 + send: 1.2.1 + serve-static: 2.2.1 + statuses: 2.0.2 + type-is: 2.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + optional: true + fast-deep-equal@3.1.3: {} fast-diff@1.3.0: {} @@ -4564,6 +5467,9 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-uri@3.1.0: + optional: true + fastq@1.19.1: dependencies: reusify: 1.1.0 @@ -4588,6 +5494,18 @@ snapshots: dependencies: to-regex-range: 5.0.1 + finalhandler@2.1.1: + dependencies: + debug: 4.4.3 + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + optional: true + find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -4620,8 +5538,14 @@ snapshots: hasown: 2.0.3 mime-types: 2.1.35 + forwarded@0.2.0: + optional: true + fraction.js@5.3.4: {} + fresh@2.0.0: + optional: true + fs.realpath@1.0.0: {} fsevents@2.3.3: @@ -4685,7 +5609,6 @@ snapshots: get-tsconfig@4.14.0: dependencies: resolve-pkg-maps: 1.0.0 - optional: true glob-parent@5.1.2: dependencies: @@ -4755,8 +5678,20 @@ snapshots: dependencies: function-bind: 1.1.2 + hono@4.12.15: + optional: true + html-escaper@2.0.2: {} + http-errors@2.0.1: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.2 + toidentifier: 1.0.1 + optional: true + https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.4 @@ -4766,6 +5701,11 @@ snapshots: human-signals@2.1.0: {} + iconv-lite@0.7.2: + dependencies: + safer-buffer: 2.1.2 + optional: true + ignore@5.3.2: {} ignore@7.0.5: {} @@ -4799,6 +5739,12 @@ snapshots: side-channel: 1.1.0 optional: true + ip-address@10.1.0: + optional: true + + ipaddr.js@1.9.1: + optional: true + is-array-buffer@3.0.5: dependencies: call-bind: 1.0.9 @@ -4890,6 +5836,9 @@ snapshots: is-number@7.0.0: {} + is-promise@4.0.0: + optional: true + is-regex@1.2.1: dependencies: call-bound: 1.0.4 @@ -5302,6 +6251,9 @@ snapshots: - supports-color - ts-node + jose@6.2.3: + optional: true + js-tokens@4.0.0: {} js-yaml@4.1.1: @@ -5314,8 +6266,20 @@ snapshots: json-parse-even-better-errors@2.3.1: {} + json-schema-to-ts@3.1.1: + dependencies: + '@babel/runtime': 7.29.2 + ts-algebra: 2.0.0 + optional: true + json-schema-traverse@0.4.1: {} + json-schema-traverse@1.0.0: + optional: true + + json-schema-typed@8.0.2: + optional: true + json-stable-stringify-without-jsonify@1.0.1: {} json5@1.0.2: @@ -5387,6 +6351,12 @@ snapshots: mdurl@2.0.0: {} + media-typer@1.1.0: + optional: true + + merge-descriptors@2.0.0: + optional: true + merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -5398,10 +6368,18 @@ snapshots: mime-db@1.52.0: {} + mime-db@1.54.0: + optional: true + mime-types@2.1.35: dependencies: mime-db: 1.52.0 + mime-types@3.0.2: + dependencies: + mime-db: 1.54.0 + optional: true + mimic-fn@2.1.0: {} minimatch@10.2.5: @@ -5427,6 +6405,9 @@ snapshots: natural-compare@1.4.0: {} + negotiator@1.0.0: + optional: true + neo-async@2.6.2: {} nice-grpc-common@2.0.3: @@ -5465,6 +6446,9 @@ snapshots: dependencies: path-key: 3.1.1 + object-assign@4.1.1: + optional: true + object-inspect@1.13.4: {} object-keys@1.1.1: @@ -5513,6 +6497,11 @@ snapshots: on-exit-leak-free@2.1.2: {} + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + optional: true + once@1.4.0: dependencies: wrappy: 1.0.2 @@ -5521,6 +6510,12 @@ snapshots: dependencies: mimic-fn: 2.1.0 + openai@6.34.0(ws@8.20.0)(zod@4.3.6): + optionalDependencies: + ws: 8.20.0 + zod: 4.3.6 + optional: true + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -5562,6 +6557,9 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + parseurl@1.3.3: + optional: true + path-exists@4.0.0: {} path-is-absolute@1.0.1: {} @@ -5570,6 +6568,9 @@ snapshots: path-parse@1.0.7: {} + path-to-regexp@8.4.2: + optional: true + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -5600,6 +6601,9 @@ snapshots: pirates@4.0.7: {} + pkce-challenge@5.0.1: + optional: true + pkg-dir@4.2.0: dependencies: find-up: 4.1.0 @@ -5673,6 +6677,12 @@ snapshots: long: 5.3.2 optional: true + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + optional: true + proxy-from-env@2.1.0: {} punycode.js@2.3.1: {} @@ -5689,6 +6699,17 @@ snapshots: quick-format-unescaped@4.0.4: {} + range-parser@1.2.1: + optional: true + + raw-body@3.0.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.1 + iconv-lite: 0.7.2 + unpipe: 1.0.0 + optional: true + react-is@18.3.1: {} real-require@0.2.0: {} @@ -5717,6 +6738,9 @@ snapshots: require-directory@2.1.1: {} + require-from-string@2.0.2: + optional: true + require-in-the-middle@8.0.1: dependencies: debug: 4.4.3 @@ -5760,6 +6784,17 @@ snapshots: reusify@1.1.0: {} + router@2.2.0: + dependencies: + debug: 4.4.3 + depd: 2.0.0 + is-promise: 4.0.0 + parseurl: 1.3.3 + path-to-regexp: 8.4.2 + transitivePeerDependencies: + - supports-color + optional: true + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -5788,10 +6823,40 @@ snapshots: safe-stable-stringify@2.5.0: {} + safer-buffer@2.1.2: + optional: true + semver@6.3.1: {} semver@7.7.4: {} + send@1.2.1: + dependencies: + debug: 4.4.3 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 2.0.0 + http-errors: 2.0.1 + mime-types: 3.0.2 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.2 + transitivePeerDependencies: + - supports-color + optional: true + + serve-static@2.2.1: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 1.2.1 + transitivePeerDependencies: + - supports-color + optional: true + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 @@ -5817,6 +6882,9 @@ snapshots: es-object-atoms: 1.1.1 optional: true + setprototypeof@1.2.0: + optional: true + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 @@ -5883,6 +6951,9 @@ snapshots: dependencies: escape-string-regexp: 2.0.0 + statuses@2.0.2: + optional: true + stop-iteration-iterator@1.1.0: dependencies: es-errors: 1.3.0 @@ -5930,8 +7001,7 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-bom@3.0.0: - optional: true + strip-bom@3.0.0: {} strip-bom@4.0.0: {} @@ -5992,8 +7062,14 @@ snapshots: dependencies: is-number: 7.0.0 + toidentifier@1.0.1: + optional: true + tr46@0.0.3: {} + ts-algebra@2.0.0: + optional: true + ts-api-utils@2.5.0(typescript@5.9.2): dependencies: typescript: 5.9.2 @@ -6061,6 +7137,12 @@ snapshots: strip-bom: 3.0.0 optional: true + tsconfig-paths@4.2.0: + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + tsd-lite@0.7.0(@tsd/typescript@5.9.3): dependencies: '@tsd/typescript': 5.9.3 @@ -6068,6 +7150,13 @@ snapshots: tslib@2.8.1: optional: true + tsx@4.21.0: + dependencies: + esbuild: 0.27.7 + get-tsconfig: 4.14.0 + optionalDependencies: + fsevents: 2.3.3 + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -6078,6 +7167,13 @@ snapshots: type-fest@4.41.0: {} + type-is@2.0.1: + dependencies: + content-type: 1.0.5 + media-typer: 1.1.0 + mime-types: 3.0.2 + optional: true + typed-array-buffer@1.0.3: dependencies: call-bound: 1.0.4 @@ -6160,6 +7256,9 @@ snapshots: undici-types@6.21.0: {} + unpipe@1.0.0: + optional: true + unrs-resolver@1.11.1: dependencies: napi-postinstall: 0.3.3 @@ -6202,6 +7301,9 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 + vary@1.1.2: + optional: true + walker@1.0.8: dependencies: makeerror: 1.0.12 @@ -6279,6 +7381,9 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 3.0.7 + ws@8.20.0: + optional: true + y18n@5.0.8: {} yallist@3.1.1: {} @@ -6303,8 +7408,8 @@ snapshots: yocto-queue@0.1.0: {} - zod-to-json-schema@3.25.2(zod@3.25.76): + zod-to-json-schema@3.25.2(zod@4.3.6): dependencies: - zod: 3.25.76 + zod: 4.3.6 - zod@3.25.76: {} + zod@4.3.6: {} diff --git a/sdks/typescript/src/clients/hatchet-client/client-config.ts b/sdks/typescript/src/clients/hatchet-client/client-config.ts index d2bd765e98..f584810655 100644 --- a/sdks/typescript/src/clients/hatchet-client/client-config.ts +++ b/sdks/typescript/src/clients/hatchet-client/client-config.ts @@ -1,5 +1,5 @@ import { ChannelCredentials } from 'nice-grpc'; -import { z } from 'zod'; +import { z } from 'zod/v4'; import type { Context } from '@hatchet/v1/client/worker/context'; import { Logger, LogLevel } from '@util/logger'; diff --git a/sdks/typescript/src/legacy/legacy-client.ts b/sdks/typescript/src/legacy/legacy-client.ts index 3a5bcc7700..f147239a2b 100644 --- a/sdks/typescript/src/legacy/legacy-client.ts +++ b/sdks/typescript/src/legacy/legacy-client.ts @@ -1,4 +1,4 @@ -import { z } from 'zod'; +import { z } from 'zod/v4'; import { ConfigLoader } from '@util/config-loader'; import { EventClient } from '@clients/event/event-client'; import { DispatcherClient } from '@clients/dispatcher/dispatcher-client'; diff --git a/sdks/typescript/src/legacy/step.ts b/sdks/typescript/src/legacy/step.ts index b5c5e89915..11f084016f 100644 --- a/sdks/typescript/src/legacy/step.ts +++ b/sdks/typescript/src/legacy/step.ts @@ -1,5 +1,5 @@ import HatchetError from '@util/errors/hatchet-error'; -import * as z from 'zod'; +import * as z from 'zod/v4'; import { JsonObject } from '@bufbuild/protobuf'; import { Workflow } from './workflow'; import { Action } from '../clients/dispatcher/action-listener'; @@ -9,7 +9,8 @@ import { parseJSON } from '../util/parse'; import WorkflowRunRef from '../util/workflow-run-ref'; import { WorkerLabels } from '../clients/dispatcher/dispatcher-client'; import { CreateStepRateLimit, RateLimitDuration } from '../protoc/workflows'; -import { CreateWorkflowTaskOpts, Priority, WorkerLabelComparator } from '../v1'; +import { CreateWorkflowTaskOpts, Priority } from '../v1'; +import { WorkerLabelComparator } from '../v1/task'; import { RunOpts, TaskWorkflowDeclaration, @@ -31,7 +32,7 @@ export const CreateRateLimitSchema = z.object({ units: z.union([z.number().min(0), z.string()]), limit: z.union([z.number().min(1), z.string()]).optional(), - duration: z.nativeEnum(RateLimitDuration).optional(), + duration: z.enum(RateLimitDuration).optional(), }); export const DesiredWorkerLabelSchema = z @@ -46,7 +47,7 @@ export const DesiredWorkerLabelSchema = z // (optional) comparator for the label // if not provided, the default is EQUAL // desired COMPARATOR actual (i.e. desired > actual for GREATER_THAN) - comparator: z.nativeEnum(WorkerLabelComparator).optional(), + comparator: z.enum(WorkerLabelComparator).optional(), }), ]) .optional(); @@ -57,7 +58,12 @@ export const CreateStepSchema = z.object({ timeout: z.string().optional(), retries: z.number().optional(), rate_limits: z.array(CreateRateLimitSchema).optional(), - worker_labels: z.record(z.lazy(() => DesiredWorkerLabelSchema)).optional(), + worker_labels: z + .record( + z.any(), + z.lazy(() => DesiredWorkerLabelSchema) + ) + .optional(), backoff: z .object({ factor: z.number().optional(), diff --git a/sdks/typescript/src/legacy/workflow.ts b/sdks/typescript/src/legacy/workflow.ts index 304f7b5055..23ebd5f16a 100644 --- a/sdks/typescript/src/legacy/workflow.ts +++ b/sdks/typescript/src/legacy/workflow.ts @@ -1,4 +1,4 @@ -import * as z from 'zod'; +import * as z from 'zod/v4'; import { CreateStep, CreateStepSchema } from '../step'; import { @@ -8,11 +8,11 @@ import { const CronConfigSchema = z.object({ cron: z.string(), - event: z.undefined(), + event: z.undefined().optional(), }); const EventConfigSchema = z.object({ - cron: z.undefined(), + cron: z.undefined().optional(), event: z.string(), }); @@ -27,7 +27,7 @@ export const ConcurrencyLimitStrategy = PbConcurrencyLimitStrategy; export const WorkflowConcurrency = z.object({ name: z.string(), maxRuns: z.number().optional(), - limitStrategy: z.nativeEnum(ConcurrencyLimitStrategy).optional(), + limitStrategy: z.enum(ConcurrencyLimitStrategy).optional(), expression: z.string().optional(), }); @@ -39,7 +39,7 @@ export const CreateWorkflowSchema = z.object({ id: z.string(), description: z.string(), version: z.string().optional(), - sticky: z.union([z.nativeEnum(PbStickyStrategy), z.enum(['soft', 'hard'])]).optional(), + sticky: z.union([z.enum(PbStickyStrategy), z.enum(['soft', 'hard'])]).optional(), scheduleTimeout: z.string().optional(), /** * @deprecated Workflow timeout is deprecated. Use step timeouts instead. diff --git a/sdks/typescript/src/util/config-loader/config-loader.ts b/sdks/typescript/src/util/config-loader/config-loader.ts index e7b97cfe31..a831953638 100644 --- a/sdks/typescript/src/util/config-loader/config-loader.ts +++ b/sdks/typescript/src/util/config-loader/config-loader.ts @@ -1,7 +1,7 @@ import { parse } from 'yaml'; import { readFileSync } from 'fs'; import * as p from 'path'; -import { z } from 'zod'; +import { z } from 'zod/v4'; import { ClientConfig, ClientConfigSchema } from '@clients/hatchet-client'; import { ChannelCredentials } from 'nice-grpc'; import { LogLevel } from '@util/logger'; diff --git a/sdks/typescript/src/util/uuid.ts b/sdks/typescript/src/util/uuid.ts index 455656672a..ee3a3e9bd7 100644 --- a/sdks/typescript/src/util/uuid.ts +++ b/sdks/typescript/src/util/uuid.ts @@ -1,5 +1,5 @@ -import { z } from 'zod'; +import { z } from 'zod/v4'; export function isValidUUID(uuid: string): boolean { - return z.string().uuid().safeParse(uuid).success; + return z.uuid().safeParse(uuid).success; } diff --git a/sdks/typescript/src/v1/agent/claude.ts b/sdks/typescript/src/v1/agent/claude.ts new file mode 100644 index 0000000000..cecf2886c8 --- /dev/null +++ b/sdks/typescript/src/v1/agent/claude.ts @@ -0,0 +1,50 @@ +import * as z from 'zod/v4'; +import { BaseWorkflowDeclaration, InputType, OutputType } from '@hatchet/v1'; +import type { SdkMcpToolDefinition } from '@anthropic-ai/claude-agent-sdk'; +import type { CallToolResult, ToolAnnotations } from '@modelcontextprotocol/sdk/types.js'; + +export type ClaudeToolFuncT = ( + runnable: BaseWorkflowDeclaration, + annotations?: ToolAnnotations +) => SdkMcpToolDefinition; + +export const ClaudeToolFunc = ( + runnable: BaseWorkflowDeclaration, + annotations?: ToolAnnotations +) => { + const hasZodV4 = '_zod' in z.string(); + let hasClaudeAgentSdk = true; + try { + require.resolve('@anthropic-ai/claude-agent-sdk'); + } catch { + hasClaudeAgentSdk = false; + } + if (!hasZodV4 || !hasClaudeAgentSdk) { + throw new Error( + "To use Hatchet's Claude agent SDK integration, you must install Zod v4 and @anthropic-ai/claude-agent-sdk: npm install zod@^4.0.0 @anthropic-ai/claude-agent-sdk @modelcontextprotocol/sdk" + ); + } + if (!runnable.definition.inputValidator) { + throw new Error('inputValidator must be defined'); + } + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const inputValidatorV4 = runnable.definition.inputValidator as unknown as z.ZodObject; + const { description } = runnable.definition; + if (description === undefined) { + throw new Error('Runnable description must be defined'); + } + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const handler = async (args: any, _: unknown): Promise => { + const result = await runnable.run(args); + return { + content: [{ type: 'text', text: JSON.stringify(result) }], + }; + }; + return { + annotations: annotations, + description: description, + handler: handler, + name: runnable.name, + inputSchema: inputValidatorV4.shape, + }; +}; diff --git a/sdks/typescript/src/v1/agent/openai.ts b/sdks/typescript/src/v1/agent/openai.ts new file mode 100644 index 0000000000..6b0433cd42 --- /dev/null +++ b/sdks/typescript/src/v1/agent/openai.ts @@ -0,0 +1,47 @@ +import * as z from 'zod/v4'; +import { BaseWorkflowDeclaration, InputType, OutputType } from '@hatchet/v1'; +import type { FunctionTool } from '@openai/agents'; + +export type OpenAIToolFuncT = ( + runnable: BaseWorkflowDeclaration +) => FunctionTool; + +export const OpenAIToolFunc = ( + runnable: BaseWorkflowDeclaration +) => { + // Check both requirements before loading @openai/agents — it crashes at load time with Zod v3. + // z is imported from 'zod', so '_zod' in z.string() reflects the user's actual installed version. + const hasZodV4 = '_zod' in z.string(); + let hasOpenAIAgents = true; + try { + require.resolve('@openai/agents'); + } catch { + hasOpenAIAgents = false; + } + if (!hasZodV4 || !hasOpenAIAgents) { + throw new Error( + "To use Hatchet's OpenAI agent SDK integration, you must install Zod v4 and @openai/agents: npm install zod@^4.0.0 @openai/agents" + ); + } + if (!runnable.definition.inputValidator) { + throw new Error('inputValidator must be defined'); + } + // eslint-disable-next-line @typescript-eslint/no-require-imports + const { tool } = require('@openai/agents'); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const inputValidatorV4 = runnable.definition.inputValidator as unknown as z.ZodObject; + const { description } = runnable.definition; + if (description === undefined) { + throw new Error('Runnable description must be defined'); + } + return tool({ + name: runnable.name, + description: description, + parameters: z.toJSONSchema(inputValidatorV4), + // eslint-disable-next-line @typescript-eslint/no-explicit-any + execute: async (input: any): Promise => { + const result = await runnable.run(input); + return JSON.stringify(result); + }, + }); +}; diff --git a/sdks/typescript/src/v1/client/client.ts b/sdks/typescript/src/v1/client/client.ts index a892488435..7d2c646eac 100644 --- a/sdks/typescript/src/v1/client/client.ts +++ b/sdks/typescript/src/v1/client/client.ts @@ -19,7 +19,7 @@ import WorkflowRunRef from '@hatchet/util/workflow-run-ref'; import api, { Api } from '@hatchet/clients/rest'; import { ConfigLoader } from '@hatchet/util/config-loader'; import { DEFAULT_LOGGER } from '@hatchet/clients/hatchet-client/hatchet-logger'; -import { z } from 'zod'; +import { z } from 'zod/v4'; import { EventClient, LogLevel } from '@hatchet/clients/event/event-client'; import { DispatcherClient } from '@hatchet/clients/dispatcher/dispatcher-client'; import { Logger } from '@hatchet/util/logger'; diff --git a/sdks/typescript/src/v1/client/features/crons.ts b/sdks/typescript/src/v1/client/features/crons.ts index 2c223af796..e3c5af7939 100644 --- a/sdks/typescript/src/v1/client/features/crons.ts +++ b/sdks/typescript/src/v1/client/features/crons.ts @@ -1,5 +1,5 @@ import { CronWorkflows, CronWorkflowsList } from '@hatchet/clients/rest/generated/data-contracts'; -import { z } from 'zod'; +import { z } from 'zod/v4'; import { AxiosError } from 'axios'; import { isValidUUID } from '@util/uuid'; import { BaseWorkflowDeclaration } from '@hatchet/v1'; @@ -15,8 +15,8 @@ import { workflowNameString, WorkflowsClient } from './workflows'; export const CreateCronTriggerSchema = z.object({ name: z.string(), expression: z.string(), - input: z.record(z.any()).optional(), - additionalMetadata: z.record(z.string()).optional(), + input: z.record(z.any(), z.any()).optional(), + additionalMetadata: z.record(z.string(), z.string()).optional(), priority: z.number().optional(), }); diff --git a/sdks/typescript/src/v1/client/features/schedules.ts b/sdks/typescript/src/v1/client/features/schedules.ts index 2baa971678..de5751a94c 100644 --- a/sdks/typescript/src/v1/client/features/schedules.ts +++ b/sdks/typescript/src/v1/client/features/schedules.ts @@ -5,7 +5,7 @@ import { ScheduledWorkflowsBulkUpdateResponse, ScheduledWorkflowsList, } from '@hatchet/clients/rest/generated/data-contracts'; -import { z } from 'zod'; +import { z } from 'zod/v4'; import { Workflow } from '@hatchet/workflow'; import { AxiosError } from 'axios'; import { isValidUUID } from '@util/uuid'; @@ -19,8 +19,8 @@ import { workflowNameString, WorkflowsClient } from './workflows'; */ export const CreateScheduledRunTriggerSchema = z.object({ triggerAt: z.coerce.date(), - input: z.record(z.any()).optional(), - additionalMetadata: z.record(z.string()).optional(), + input: z.record(z.any(), z.any()).optional(), + additionalMetadata: z.record(z.string(), z.string()).optional(), priority: z.number().optional(), }); diff --git a/sdks/typescript/src/v1/client/worker/context.ts b/sdks/typescript/src/v1/client/worker/context.ts index 18390e796d..10366f660f 100644 --- a/sdks/typescript/src/v1/client/worker/context.ts +++ b/sdks/typescript/src/v1/client/worker/context.ts @@ -32,7 +32,7 @@ import { parentRunContextManager } from '@hatchet/v1/parent-run-context-vars'; import { NextStep } from '@hatchet-dev/typescript-sdk/legacy/step'; import { DurableListenerClient } from '@hatchet/clients/listeners/durable-listener/durable-listener-client'; import { createHash } from 'crypto'; -import { z } from 'zod'; +import { z } from 'zod/v4'; import { InternalWorker } from './worker-internal'; import { Duration, durationToMs, durationToString } from '../duration'; import { DurableEvictionManager } from './eviction/eviction-manager'; diff --git a/sdks/typescript/src/v1/client/worker/worker-internal.ts b/sdks/typescript/src/v1/client/worker/worker-internal.ts index f5276bf21e..ffa409fc51 100644 --- a/sdks/typescript/src/v1/client/worker/worker-internal.ts +++ b/sdks/typescript/src/v1/client/worker/worker-internal.ts @@ -25,7 +25,7 @@ import { NonRetryableError, } from '@hatchet/v1/task'; import { taskConditionsToPb } from '@hatchet/v1/conditions/transformer'; -import { zodToJsonSchema } from 'zod-to-json-schema'; +import * as z from 'zod/v4'; import { WorkerLabels } from '@hatchet/clients/dispatcher/dispatcher-client'; import { applyNamespace } from '@hatchet/util/apply-namespace'; @@ -346,7 +346,7 @@ export class InternalWorker { // Convert Zod schema to JSON Schema if provided let inputJsonSchema: Uint8Array | undefined; if (workflow.inputValidator) { - const jsonSchema = zodToJsonSchema(workflow.inputValidator as any); + const jsonSchema = z.toJSONSchema(workflow.inputValidator as any); inputJsonSchema = new TextEncoder().encode(JSON.stringify(jsonSchema)); } diff --git a/sdks/typescript/src/v1/declaration.ts b/sdks/typescript/src/v1/declaration.ts index 0cab952397..49ad94baae 100644 --- a/sdks/typescript/src/v1/declaration.ts +++ b/sdks/typescript/src/v1/declaration.ts @@ -12,7 +12,7 @@ import { ScheduledWorkflows, V1CreateFilterRequest, } from '@hatchet/clients/rest/generated/data-contracts'; -import { z } from 'zod'; +import * as z from 'zod/v4'; import { throwIfAborted } from '@hatchet/util/abort-error'; import { IHatchetClient } from './client/client.interface'; import { @@ -32,6 +32,10 @@ import { InputType, OutputType, UnknownInputType, JsonObject, Resolved } from '. import { Context, DurableContext } from './client/worker/context'; import { parentRunContextManager } from './parent-run-context-vars'; import { EvictionPolicy } from './client/worker/eviction/eviction-policy'; +import type { FunctionTool } from '@openai/agents'; +import type { SdkMcpToolDefinition } from '@anthropic-ai/claude-agent-sdk'; +import type { OpenAIToolFuncT } from '@hatchet/v1/agent/openai'; +import type { ClaudeToolFuncT } from '@hatchet/v1/agent/claude'; const UNBOUND_ERR = new Error('workflow unbound to hatchet client, hint: use client.run instead'); @@ -40,6 +44,14 @@ export enum Priority { MEDIUM = 2, HIGH = 3, } +type AgentSdk = 'claude' | 'openai'; + +type AgentSdkFuncMap = { + claude: ClaudeToolFuncT; + openai: OpenAIToolFuncT; +}; + +type Tail = T extends [any, ...infer R] ? R : never; /** * Additional metadata that can be attached to a workflow run. @@ -813,6 +825,27 @@ export class BaseWorkflowDeclaration< get name() { return this.definition.name; } + /** + * Create an MCP tool from a workflow. Supports both Claude and OpenAI agent sdks. + * @param sdk The agent SDK the tool will be used with. + * @param args Optional arguments passed to create the MCP tool object. + * @returns The MCP tool object. + **/ + mcpTool( + sdk: 'claude', + ...args: Tail> + ): SdkMcpToolDefinition; + mcpTool(sdk: 'openai', ...args: Tail>): FunctionTool; + mcpTool(sdk: K, ...args: any): SdkMcpToolDefinition | FunctionTool { + if (sdk === 'openai') { + // eslint-disable-next-line @typescript-eslint/no-require-imports + const { OpenAIToolFunc } = require('./agent/openai'); + return OpenAIToolFunc(this, ...args); + } + // eslint-disable-next-line @typescript-eslint/no-require-imports + const { ClaudeToolFunc } = require('./agent/claude'); + return ClaudeToolFunc(this, ...args); + } } /** diff --git a/sdks/typescript/src/v1/examples/agent/agent-claude.ts b/sdks/typescript/src/v1/examples/agent/agent-claude.ts new file mode 100644 index 0000000000..6639363512 --- /dev/null +++ b/sdks/typescript/src/v1/examples/agent/agent-claude.ts @@ -0,0 +1,40 @@ +// eslint-disable-next-line +import { getTemperature, getTemperatureWorkflow } from './workflow'; +import { query } from '@anthropic-ai/claude-agent-sdk'; +import { createSdkMcpServer } from '@anthropic-ai/claude-agent-sdk'; + +async function main() { + // Generate a tool from a standalone task + // const temperatureTool = getTemperature.mcpTool('claude'); + + // Or from a workflow + const temperatureTool = getTemperatureWorkflow.mcpTool('claude'); + + // Wrap the tool in an in-process MCP server + const weatherServer = createSdkMcpServer({ + name: 'weather', + version: '1.0.0', + tools: [temperatureTool], + }); + + for await (const message of query({ + prompt: "What's the temperature in San Francisco?", + options: { + mcpServers: { weather: weatherServer }, + allowedTools: [`mcp__${weatherServer.name}__${temperatureTool.name}`], + }, + })) { + // "result" is the final message after all tool calls complete + if (message.type === 'result' && message.subtype === 'success') { + console.log(message.result); + } + } +} + +if (require.main === module) { + main() + .catch(console.error) + .finally(() => { + process.exit(0); + }); +} diff --git a/sdks/typescript/src/v1/examples/agent/agent-openai.ts b/sdks/typescript/src/v1/examples/agent/agent-openai.ts new file mode 100644 index 0000000000..7112310dbf --- /dev/null +++ b/sdks/typescript/src/v1/examples/agent/agent-openai.ts @@ -0,0 +1,31 @@ +// eslint-disable-next-line +import { getTemperature, getTemperatureWorkflow } from './workflow'; + +async function main() { + // Generate a tool from a standalone task + // const temperatureTool = getTemperature.mcpTool('openai'); + + // Or from a workflow. + // mcpTool validates Zod v4 is installed before loading @openai/agents, so call it first + // to get a clear error message if the wrong Zod version is present. + const temperatureTool = getTemperatureWorkflow.mcpTool('openai'); + + // Dynamic import — @openai/agents crashes at load time with Zod v3, so we delay + // the import until after mcpTool has already verified Zod v4 is available. + const { Agent, run } = await import('@openai/agents'); + + const agent = new Agent({ + name: 'Agent', + tools: [temperatureTool], + }); + const result = await run(agent, 'What is the weather in San Francisco?'); + console.log(result.finalOutput); +} + +if (require.main === module) { + main() + .catch(console.error) + .finally(() => { + process.exit(0); + }); +} diff --git a/sdks/typescript/src/v1/examples/agent/worker.ts b/sdks/typescript/src/v1/examples/agent/worker.ts new file mode 100644 index 0000000000..90c7ecf6d3 --- /dev/null +++ b/sdks/typescript/src/v1/examples/agent/worker.ts @@ -0,0 +1,14 @@ +import { hatchet } from '../hatchet-client'; +import { getTemperature, getTemperatureWorkflow } from './workflow'; + +async function main() { + const worker = await hatchet.worker('temperature-worker', { + workflows: [getTemperature, getTemperatureWorkflow], + }); + + await worker.start(); +} + +if (require.main === module) { + main(); +} diff --git a/sdks/typescript/src/v1/examples/agent/workflow.ts b/sdks/typescript/src/v1/examples/agent/workflow.ts new file mode 100644 index 0000000000..902ebfac08 --- /dev/null +++ b/sdks/typescript/src/v1/examples/agent/workflow.ts @@ -0,0 +1,48 @@ +// > Declaring a Task +import { hatchet } from '../hatchet-client'; +import { z } from 'zod/v4'; + +// Note that for agent tools, Zod must be used to create the input and output types for workflows/tasks +const TemperatureCoordinates = z.object({ + latitude: z.number(), + longitude: z.number(), +}); + +const TemperatureInput = z.object({ + locationName: z.string(), + coords: TemperatureCoordinates, +}); + +export type TemperatureInputWithZod = z.infer; + +const temperatureRequest = async (input: TemperatureInputWithZod) => { + const response = await fetch( + `https://api.open-meteo.com/v1/forecast?latitude=${input.coords.latitude}&longitude=${input.coords.longitude}¤t=temperature_2m&temperature_unit=fahrenheit` + ); + const data: any = await response.json(); + + return { + text: `Temperature: ${data.current.temperature_2m}°F`, + }; +}; + +export const getTemperature = hatchet.task({ + name: 'getTemperature', + retries: 3, + fn: temperatureRequest, + inputValidator: TemperatureInput, + description: 'Get the current temperature at a location', +}); + +export const getTemperatureWorkflow = hatchet.workflow({ + name: 'getTemperatureWorkflow', + inputValidator: TemperatureInput, + description: 'Get the current temperature at a location', +}); + +getTemperatureWorkflow.task({ + name: 'getTemperature', + fn: temperatureRequest, +}); + +// !! diff --git a/sdks/typescript/src/v1/examples/durable/workflow.ts b/sdks/typescript/src/v1/examples/durable/workflow.ts index 2e9174e07d..654538fed6 100644 --- a/sdks/typescript/src/v1/examples/durable/workflow.ts +++ b/sdks/typescript/src/v1/examples/durable/workflow.ts @@ -1,4 +1,4 @@ -import { z } from 'zod'; +import { z } from 'zod/v4'; import { Or, SleepCondition, UserEventCondition } from '@hatchet/v1/conditions'; import { NonDeterminismError } from '@hatchet/util/errors/non-determinism-error'; import sleep from '@hatchet/util/sleep'; @@ -255,6 +255,10 @@ const lookbackEventPayloadSchema = z.object({ user_id: z.number(), }); +const twoEventsPayloadSchema = z.object({ + order: z.string(), +}); + export const waitForEventLookback = hatchet.durableTask({ name: 'wait-for-event-lookback', executionTimeout: '10m', @@ -314,14 +318,14 @@ export const waitForTwoEventsSecondPushedFirst = hatchet.durableTask({ const event1 = await ctx.waitForEvent( 'key1', undefined, - undefined, + twoEventsPayloadSchema, input.scope, LOOKBACK_WINDOW ); const event2 = await ctx.waitForEvent( 'key2', undefined, - undefined, + twoEventsPayloadSchema, input.scope, LOOKBACK_WINDOW ); diff --git a/sdks/typescript/src/v1/examples/simple/run.ts b/sdks/typescript/src/v1/examples/simple/run.ts index e1ff454cf9..dc12e6953c 100644 --- a/sdks/typescript/src/v1/examples/simple/run.ts +++ b/sdks/typescript/src/v1/examples/simple/run.ts @@ -1,6 +1,7 @@ import { hatchet } from '../hatchet-client'; import { simple } from './workflow'; import { parent } from './workflow-with-child'; +import { simpleWithZod } from './zod'; async function main() { // > Running a Task @@ -15,6 +16,11 @@ async function main() { } ); + const res3 = await simpleWithZod.run({ + Message: 'HeLlO WoRlD', + }); + console.log(res3.TransformedMessage); + // 👀 Access the results of the Task console.log(res.TransformedMessage); // !! diff --git a/sdks/typescript/src/v1/examples/simple/zod.ts b/sdks/typescript/src/v1/examples/simple/zod.ts index 08d349c02f..b4d0336fbf 100644 --- a/sdks/typescript/src/v1/examples/simple/zod.ts +++ b/sdks/typescript/src/v1/examples/simple/zod.ts @@ -1,5 +1,5 @@ // > Declaring a Task -import * as z from 'zod'; +import * as z from 'zod/v4'; import { hatchet } from '../hatchet-client'; const SimpleInputSchema = z.object({ diff --git a/sdks/typescript/src/version.ts b/sdks/typescript/src/version.ts index e31b7d5e5f..2b2dd0529a 100644 --- a/sdks/typescript/src/version.ts +++ b/sdks/typescript/src/version.ts @@ -1 +1 @@ -export const HATCHET_VERSION = '1.19.0'; +export const HATCHET_VERSION = '1.19.1';