diff --git a/.scripts/copy-shared-files.mjs b/.scripts/copy-shared-files.mjs index c8b09de4f..8cb77b4b7 100644 --- a/.scripts/copy-shared-files.mjs +++ b/.scripts/copy-shared-files.mjs @@ -15,6 +15,7 @@ const HAS_CHILD_SAMPLES = [ // Some samples have different config files from those in .shared/ // that we don't want to overwrite const TSCONFIG_EXCLUDE = [ + 'ai-sdk', 'nextjs-ecommerce-oneclick', 'monorepo-folders', 'fetch-esm', diff --git a/ai-sdk/README.md b/ai-sdk/README.md index 7ce2bf8ab..381d1d77e 100644 --- a/ai-sdk/README.md +++ b/ai-sdk/README.md @@ -15,3 +15,14 @@ This project demonstrates some uses of the AI SDK inside Temporal. 1. `npm run workflow tools` 1. `npm run workflow mcp` 1. `npm run workflow middleware` +1. `npm run workflow stream` + +### Streaming + +The `stream` sample shows how to stream model output out of a +Workflow. `streamText` runs the model call in +an activity that publishes each delta onto a +[Workflow Stream](https://docs.temporal.io/develop/typescript/workflows/workflow-streams) +topic. The Workflow hosts the stream (`new WorkflowStream()`) and durably reassembles the +final result, while external consumers subscribe by Workflow id to render the tokens live +as they arrive — see `src/client.ts`. diff --git a/ai-sdk/package.json b/ai-sdk/package.json index f2e9b1428..e02252cf9 100644 --- a/ai-sdk/package.json +++ b/ai-sdk/package.json @@ -11,7 +11,7 @@ "start": "ts-node src/worker.ts", "start.watch": "nodemon src/worker.ts", "workflow": "ts-node src/client.ts", - "test": "mocha --exit --require ts-node/register --require source-map-support/register src/mocha/*.test.ts" + "test": "mocha --exit --node-option experimental-require-module --require ts-node/register --require source-map-support/register src/mocha/*.test.ts" }, "nodemonConfig": { "execMap": { @@ -23,22 +23,23 @@ ] }, "dependencies": { - "@ai-sdk/openai": "^3.0.0", - "@ai-sdk/provider": "^3.0.0", - "@ai-sdk/mcp": "^1.0.0", - "@modelcontextprotocol/sdk": "^1.10.2", - "@temporalio/activity": "1.20.3", - "@temporalio/ai-sdk": "1.20.3", - "@temporalio/client": "1.20.3", - "@temporalio/envconfig": "1.20.3", - "@temporalio/worker": "1.20.3", - "@temporalio/workflow": "1.20.3", - "ai": "^6.0.0", + "@ai-sdk/openai": "^4.0.0", + "@ai-sdk/provider": "^4.0.0", + "@ai-sdk/mcp": "^2.0.0", + "@modelcontextprotocol/sdk": "^1.25.2", + "@temporalio/activity": "^1.21.0", + "@temporalio/ai-sdk": "^1.21.0", + "@temporalio/client": "^1.21.0", + "@temporalio/envconfig": "^1.21.0", + "@temporalio/worker": "^1.21.0", + "@temporalio/workflow": "^1.21.0", + "@temporalio/workflow-streams": "^1.21.0", + "ai": "^7.0.0", "nanoid": "3.x", "zod": "^3.25.76" }, "devDependencies": { - "@temporalio/testing": "1.20.3", + "@temporalio/testing": "^1.21.0", "@tsconfig/node22": "^22.0.0", "@types/mocha": "10.x", "@types/node": "^22.9.1", diff --git a/ai-sdk/src/client.ts b/ai-sdk/src/client.ts index 9671725c9..929d377d9 100644 --- a/ai-sdk/src/client.ts +++ b/ai-sdk/src/client.ts @@ -1,8 +1,35 @@ import { Connection, Client } from '@temporalio/client'; import { loadClientConnectConfig } from '@temporalio/envconfig'; -import { haikuAgent, mcpAgent, middlewareAgent, toolsAgent } from './workflows'; +import { WorkflowStreamClient } from '@temporalio/workflow-streams/client'; +import { + haikuAgent, + mcpAgent, + middlewareAgent, + streamingAgent, + toolsAgent, + STREAM_TOPIC, + consumerDoneSignal, +} from './workflows'; import { nanoid } from 'nanoid'; +// @@@SNIPSTART typescript-vercel-ai-sdk-streaming-consumer +// Subscribe to a Workflow's stream topic and render each text delta live as it +// is published by the streaming activity. Each item's payload is the +// JSON-encoded AI SDK stream part; `resultType: true` decodes it to raw bytes. +async function renderStream(client: Client, workflowId: string, topic: string): Promise { + const streamClient = WorkflowStreamClient.create(client, workflowId); + for await (const item of streamClient.subscribe(topic, 0, { resultType: true })) { + const part = JSON.parse(new TextDecoder().decode(item.data)); + if (part.type === 'text-delta') process.stdout.write(part.delta); + if (part.type === 'finish') break; + } + process.stdout.write('\n'); + // Acknowledge receipt so the Workflow can complete without racing this final + // poll against its in-memory stream log being discarded. + await client.workflow.getHandle(workflowId).signal(consumerDoneSignal); +} +// @@@SNIPEND + async function run() { const args = process.argv; const workflow = args[2] ?? 'haiku'; @@ -14,6 +41,18 @@ async function run() { let handle; switch (workflow) { + case 'stream': { + const streamHandle = await client.workflow.start(streamingAgent, { + taskQueue: 'ai-sdk', + args: ['Temporal'], + workflowId: 'workflow-' + nanoid(), + }); + console.log(`Started workflow ${streamHandle.workflowId}`); + await renderStream(client, streamHandle.workflowId, STREAM_TOPIC); + console.log(await streamHandle.result()); + await connection.close(); + return; + } case 'middleware': handle = await client.workflow.start(middlewareAgent, { taskQueue: 'ai-sdk', diff --git a/ai-sdk/src/mocha/streaming.test.ts b/ai-sdk/src/mocha/streaming.test.ts new file mode 100644 index 000000000..17e2292e7 --- /dev/null +++ b/ai-sdk/src/mocha/streaming.test.ts @@ -0,0 +1,138 @@ +import { TestWorkflowEnvironment } from '@temporalio/testing'; +import { after, before, describe, it } from 'mocha'; +import { Worker } from '@temporalio/worker'; +import { WorkflowStreamClient } from '@temporalio/workflow-streams/client'; +import type { + LanguageModelV4, + LanguageModelV4CallOptions, + LanguageModelV4GenerateResult, + LanguageModelV4StreamPart, + LanguageModelV4StreamResult, + ProviderV4, +} from '@ai-sdk/provider'; +import assert from 'assert'; +import { streamingAgent, STREAM_TOPIC, consumerDoneSignal } from '../workflows'; +import * as activities from '../activities'; +import { AiSdkPlugin } from '@temporalio/ai-sdk'; + +// A deterministic, offline model that streams a fixed set of text deltas so +// these tests need no OPENAI_API_KEY and can assert on exact output. +class MockStreamModel implements LanguageModelV4 { + readonly specificationVersion = 'v4'; + readonly provider = 'mock'; + readonly modelId = 'mock-model'; + private readonly chunks: string[]; + + constructor(chunks: string[]) { + this.chunks = chunks; + } + + get supportedUrls(): Record { + return {}; + } + + doGenerate(_options: LanguageModelV4CallOptions): Promise { + throw new Error('generate not supported by mock'); + } + + doStream(_options: LanguageModelV4CallOptions): Promise { + const chunks = this.chunks; + const parts: LanguageModelV4StreamPart[] = [ + { type: 'stream-start', warnings: [] }, + { type: 'text-start', id: 't1' }, + ...chunks.map((delta): LanguageModelV4StreamPart => ({ type: 'text-delta', id: 't1', delta })), + { type: 'text-end', id: 't1' }, + { + type: 'finish', + finishReason: { unified: 'stop', raw: undefined }, + usage: { + inputTokens: { total: 1, noCache: undefined, cacheRead: undefined, cacheWrite: undefined }, + outputTokens: { total: chunks.length, text: undefined, reasoning: undefined }, + }, + }, + ]; + return Promise.resolve({ + stream: new ReadableStream({ + start(controller) { + for (const part of parts) controller.enqueue(part); + controller.close(); + }, + }), + request: {}, + response: {}, + }); + } +} + +function mockProvider(chunks: string[]): ProviderV4 { + return { + specificationVersion: 'v4', + languageModel: () => new MockStreamModel(chunks), + embeddingModel: () => { + throw new Error('not implemented'); + }, + imageModel: () => { + throw new Error('not implemented'); + }, + }; +} + +// Collect the live deltas an external subscriber sees on a topic. +async function collectDeltas(client: any, workflowId: string, topic: string): Promise { + const deltas: string[] = []; + const streamClient = WorkflowStreamClient.create(client, workflowId); + for await (const item of streamClient.subscribe(topic, 0, { resultType: true })) { + const part = JSON.parse(new TextDecoder().decode(item.data)); + if (part.type === 'text-delta') deltas.push(part.delta); + if (part.type === 'finish') break; + } + // Mirror the real consumer: acknowledge receipt so the workflow can complete. + await client.workflow.getHandle(workflowId).signal(consumerDoneSignal); + return deltas; +} + +describe('streaming agents', function () { + this.timeout(30_000); + + let testEnv: TestWorkflowEnvironment; + + before(async () => { + testEnv = await TestWorkflowEnvironment.createLocal(); + }); + + after(async () => { + await testEnv?.teardown(); + }); + + it('streamingAgent publishes live deltas and returns the full text', async () => { + const { client, nativeConnection } = testEnv; + const taskQueue = 'test-stream-text'; + const chunks = ['Dur', 'able ', 'streams ', 'of ', 'thought']; + + const worker = await Worker.create({ + connection: nativeConnection, + plugins: [new AiSdkPlugin({ modelProvider: mockProvider(chunks) })], + taskQueue, + workflowsPath: require.resolve('../workflows'), + activities, + }); + + await worker.runUntil(async () => { + const handle = await client.workflow.start(streamingAgent, { + args: ['Temporal'], + workflowId: 'test-stream-text-' + Date.now(), + taskQueue, + }); + + const deltasPromise = collectDeltas(client, handle.workflowId, STREAM_TOPIC); + const result = await handle.result(); + const deltas = await deltasPromise; + + // The workflow durably reassembles the full text from the replayed stream. + assert.strictEqual(result, chunks.join('')); + // The external subscriber saw the response arrive incrementally. + assert.ok(deltas.length > 1, `expected multiple live deltas, got ${deltas.length}`); + assert.strictEqual(deltas.join(''), chunks.join('')); + }); + }); +}); diff --git a/ai-sdk/src/mocha/workflows.test.ts b/ai-sdk/src/mocha/workflows.test.ts index 1963327bd..71488d2b7 100644 --- a/ai-sdk/src/mocha/workflows.test.ts +++ b/ai-sdk/src/mocha/workflows.test.ts @@ -1,12 +1,21 @@ import { TestWorkflowEnvironment } from '@temporalio/testing'; -import { before, describe, it } from 'mocha'; +import { after, before, describe, it } from 'mocha'; import { Worker } from '@temporalio/worker'; import { haikuAgent } from '../workflows'; import * as activities from '../activities'; import { AiSdkPlugin } from '@temporalio/ai-sdk'; -import { openai } from '@ai-sdk/openai'; import assert from 'assert'; +// `@ai-sdk/openai` is ESM-only. Under this sample's CommonJS build a static +// `import` is emitted as `require()`, which throws on Node 22's require(ESM) +// implementation ("Unexpected module status 0") at module-load time — aborting +// the whole mocha run. Load it lazily via a native dynamic `import()` (wrapped +// in `new Function` so TypeScript doesn't down-level it back to `require`), +// inside `before` so it only runs when this suite isn't skipped. +const importESM = new Function('specifier', 'return import(specifier)') as ( + specifier: string, +) => Promise; + const hasOpenAIKey = Boolean(process.env.OPENAI_API_KEY); const describeWorkflow = hasOpenAIKey ? describe : describe.skip; @@ -16,9 +25,11 @@ describeWorkflow( this.timeout(30_000); let testEnv: TestWorkflowEnvironment; + let openai: (typeof import('@ai-sdk/openai'))['openai']; before(async () => { testEnv = await TestWorkflowEnvironment.createLocal(); + ({ openai } = await importESM('@ai-sdk/openai')); }); after(async () => { diff --git a/ai-sdk/src/workflows.ts b/ai-sdk/src/workflows.ts index 943c8cd0c..2a70e8245 100644 --- a/ai-sdk/src/workflows.ts +++ b/ai-sdk/src/workflows.ts @@ -1,10 +1,10 @@ -import '@temporalio/ai-sdk/lib/load-polyfills'; -import { generateText, stepCountIs, tool, wrapLanguageModel } from 'ai'; -import { TemporalMCPClient, temporalProvider } from '@temporalio/ai-sdk'; +import { generateText, streamText, stepCountIs, tool, wrapLanguageModel } from 'ai'; +import type { LanguageModelMiddleware } from 'ai'; +import { TemporalMCPClient, TemporalProvider, temporalProvider } from '@temporalio/ai-sdk/workflow'; +import { WorkflowStream } from '@temporalio/workflow-streams/workflow'; import type * as activities from './activities'; -import { proxyActivities } from '@temporalio/workflow'; +import { proxyActivities, condition, defineSignal, setHandler } from '@temporalio/workflow'; import z from 'zod'; -import { LanguageModelV3Middleware } from '@ai-sdk/provider'; const { getWeather } = proxyActivities({ startToCloseTimeout: '1 minute', @@ -45,8 +45,8 @@ export async function toolsAgent(question: string): Promise { // @@@SNIPSTART typescript-vercel-ai-sdk-middleware-agent export async function middlewareAgent(prompt: string): Promise { const cache = new Map(); - const middleware: LanguageModelV3Middleware = { - specificationVersion: 'v3', + const middleware: LanguageModelMiddleware = { + specificationVersion: 'v4', wrapGenerate: async ({ doGenerate, params }) => { const cacheKey = JSON.stringify(params); if (cache.has(cacheKey)) { @@ -73,6 +73,7 @@ export async function middlewareAgent(prompt: string): Promise { }); return result.text; } +// @@@SNIPEND // @@@SNIPSTART typescript-vercel-ai-sdk-mcp-agent export async function mcpAgent(prompt: string): Promise { @@ -88,3 +89,61 @@ export async function mcpAgent(prompt: string): Promise { return result.text; } // @@@SNIPEND + +// @@@SNIPSTART typescript-vercel-ai-sdk-streaming-topic +// The topic that streamed model deltas are published to. External consumers +// subscribe to this topic by workflow id to receive live tokens as they are +// generated. See `client.ts` for the consumer side. +export const STREAM_TOPIC = 'text-stream'; +// @@@SNIPEND + +// @@@SNIPSTART typescript-vercel-ai-sdk-consumer-done-signal +// A subscriber sends this signal once it has received the stream's final delta, +// so the workflow knows it is safe to complete. See `client.ts` for the sender. +export const consumerDoneSignal = defineSignal('consumer-done'); +// @@@SNIPEND + +// A provider whose language-model calls stream their deltas onto STREAM_TOPIC. +// Setting `streamingTopic` enables `doStream`; without it, streaming calls +// throw. Use a distinct topic per concurrent streaming call. +const streamingProvider = new TemporalProvider({ + languageModel: { streamingTopic: STREAM_TOPIC }, +}); + +// @@@SNIPSTART typescript-vercel-ai-sdk-streaming-agent +export async function streamingAgent(prompt: string): Promise { + // Host the WorkflowStream as the first statement of the workflow so its + // publish-signal handler is registered before the streaming activity starts + // publishing deltas to it. + new WorkflowStream(); + + // A subscriber flips this once it has consumed the final delta (see below). + let consumerDone = false; + setHandler(consumerDoneSignal, () => { + consumerDone = true; + }); + + const result = streamText({ + model: streamingProvider.languageModel('gpt-4o-mini'), + prompt, + system: 'You only respond in haikus.', + }); + + // The model call runs in an activity that publishes each delta to + // STREAM_TOPIC for external subscribers. Inside the workflow the deltas are + // replayed after the activity completes, so this loop durably reassembles + // the full text. + let text = ''; + for await (const delta of result.textStream) { + text += delta; + } + + // The workflow's stream log lives in memory and is discarded once the run + // completes, which can race a subscriber's final poll. Rather than guess at a + // fixed delay, wait for the subscriber to signal that it received the last + // delta. The timeout is a fallback for when nothing is subscribed, so the run + // can't hang forever. + await condition(() => consumerDone, '10 seconds'); + return text; +} +// @@@SNIPEND diff --git a/ai-sdk/tsconfig.json b/ai-sdk/tsconfig.json index 488f2c62a..ec1db90a8 100644 --- a/ai-sdk/tsconfig.json +++ b/ai-sdk/tsconfig.json @@ -3,6 +3,12 @@ "version": "5.6.3", "compilerOptions": { "lib": ["es2021"], + // The Vercel AI SDK v7 (`ai`) is ESM-only. Use classic CommonJS module + // resolution (matching the @temporalio/ai-sdk build) so it can be required + // from this CommonJS sample and the `@temporalio/ai-sdk/workflow` subpath + // resolves via `typesVersions`. + "module": "commonjs", + "moduleResolution": "node", "declaration": true, "declarationMap": true, "sourceMap": true, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d097e58d9..e919079c7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -242,38 +242,41 @@ importers: ai-sdk: dependencies: '@ai-sdk/mcp': - specifier: ^1.0.0 - version: 1.0.64(zod@3.25.76) + specifier: ^2.0.0 + version: 2.0.16(zod@3.25.76) '@ai-sdk/openai': - specifier: ^3.0.0 - version: 3.0.87(zod@3.25.76) + specifier: ^4.0.0 + version: 4.0.19(zod@3.25.76) '@ai-sdk/provider': - specifier: ^3.0.0 - version: 3.0.14 + specifier: ^4.0.0 + version: 4.0.3 '@modelcontextprotocol/sdk': - specifier: ^1.10.2 - version: 1.25.1(hono@4.12.27)(zod@3.25.76) + specifier: ^1.25.2 + version: 1.29.0(zod@3.25.76) '@temporalio/activity': - specifier: 1.20.3 - version: 1.20.3 + specifier: ^1.21.0 + version: 1.21.0 '@temporalio/ai-sdk': - specifier: 1.20.3 - version: 1.20.3(@ai-sdk/mcp@1.0.64(zod@3.25.76))(@ai-sdk/provider@3.0.14)(ai@6.0.234(zod@3.25.76)) + specifier: ^1.21.0 + version: 1.21.0(@ai-sdk/mcp@2.0.16(zod@3.25.76))(@ai-sdk/provider@4.0.3)(ai@7.0.36(zod@3.25.76)) '@temporalio/client': - specifier: 1.20.3 - version: 1.20.3 + specifier: ^1.21.0 + version: 1.21.0 '@temporalio/envconfig': - specifier: 1.20.3 - version: 1.20.3 + specifier: ^1.21.0 + version: 1.21.0 '@temporalio/worker': - specifier: 1.20.3 - version: 1.20.3(@swc/helpers@0.5.15) + specifier: ^1.21.0 + version: 1.21.0(@swc/helpers@0.5.15) '@temporalio/workflow': - specifier: 1.20.3 - version: 1.20.3 + specifier: ^1.21.0 + version: 1.21.0 + '@temporalio/workflow-streams': + specifier: ^1.21.0 + version: 1.21.0 ai: - specifier: ^6.0.0 - version: 6.0.234(zod@3.25.76) + specifier: ^7.0.0 + version: 7.0.36(zod@3.25.76) nanoid: specifier: 3.x version: 3.3.8 @@ -282,8 +285,8 @@ importers: version: 3.25.76 devDependencies: '@temporalio/testing': - specifier: 1.20.3 - version: 1.20.3(@swc/helpers@0.5.15) + specifier: ^1.21.0 + version: 1.21.0(@swc/helpers@0.5.15) '@tsconfig/node22': specifier: ^22.0.0 version: 22.0.5 @@ -3854,7 +3857,7 @@ importers: version: 1.29.0(zod@4.4.3) '@strands-agents/sdk': specifier: ^1.3.0 - version: 1.11.0(@ai-sdk/provider@3.0.14)(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(@opentelemetry/api@1.9.0)(@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@2.9.0(@opentelemetry/api@1.9.0))(@smithy/types@4.16.1)(express@5.2.1)(openai@6.45.0(@aws-sdk/credential-provider-node@3.972.71)(@smithy/signature-v4@5.6.9)(ws@8.18.0)(zod@4.4.3))(zod@4.4.3) + version: 1.11.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(@opentelemetry/api@1.9.0)(@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@2.9.0(@opentelemetry/api@1.9.0))(@smithy/types@4.16.1)(express@5.2.1)(openai@6.45.0(@aws-sdk/credential-provider-node@3.972.71)(@smithy/signature-v4@5.6.9)(ws@8.18.0)(zod@4.4.3))(zod@4.4.3) '@temporalio/activity': specifier: ^1.21.1 version: 1.21.1 @@ -3869,7 +3872,7 @@ importers: version: 1.21.1 '@temporalio/strands-agents': specifier: ^1.21.1 - version: 1.21.1(@strands-agents/sdk@1.11.0(@ai-sdk/provider@3.0.14)(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(@opentelemetry/api@1.9.0)(@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@2.9.0(@opentelemetry/api@1.9.0))(@smithy/types@4.16.1)(express@5.2.1)(openai@6.45.0(@aws-sdk/credential-provider-node@3.972.71)(@smithy/signature-v4@5.6.9)(ws@8.18.0)(zod@4.4.3))(zod@4.4.3)) + version: 1.21.1(@strands-agents/sdk@1.11.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(@opentelemetry/api@1.9.0)(@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@2.9.0(@opentelemetry/api@1.9.0))(@smithy/types@4.16.1)(express@5.2.1)(openai@6.45.0(@aws-sdk/credential-provider-node@3.972.71)(@smithy/signature-v4@5.6.9)(ws@8.18.0)(zod@4.4.3))(zod@4.4.3)) '@temporalio/worker': specifier: ^1.21.1 version: 1.21.1(@swc/helpers@0.5.15) @@ -4303,33 +4306,33 @@ packages: '@adobe/css-tools@4.4.1': resolution: {integrity: sha512-12WGKBQzjUAI4ayyF4IAtfw2QR/IDoqk6jTddXDhtYTJF9ASmoE1zst7cVtP0aL/F1jUJL5r+JxKXKEgHNbEUQ==} - '@ai-sdk/gateway@3.0.156': - resolution: {integrity: sha512-OeOfIlbp8DwlqBHDe3IbfAF6zRdKQg041UYaTz5gRFUwthZQXLCH5HK8JE0XCfhQFg92cGsQucOuXld+VFOhXQ==} - engines: {node: '>=18'} + '@ai-sdk/gateway@4.0.27': + resolution: {integrity: sha512-gqTMvV0N8/JirIZ3OzwjSZRYxzwZu/PeOFCKb8NB9fstWH39tI+L6CkeMNVou5/HCKEYAw6RCOHW59Vhquv8vA==} + engines: {node: '>=22'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/mcp@1.0.64': - resolution: {integrity: sha512-n6fZiIsiK0TWdJa7bdcjiQxOmg+GRa1wk8ns01gfzaiZbnNwIjmgt1oFMDIzLzgOjVq/LqktbXfxvBFlQ8RDnQ==} - engines: {node: '>=18'} + '@ai-sdk/mcp@2.0.16': + resolution: {integrity: sha512-jC2r+StEuk8uIldfP4j8nBwOEBJ2TRwy/bz71SHMZ3NG6PSbvRPXGfyoHHR6JTm1O5GcIww0f6B8LznzkrseDA==} + engines: {node: '>=22'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/openai@3.0.87': - resolution: {integrity: sha512-fg0Lyr99bX2ApS0+cgKlndOK3l53nNF6JtlQcPsMVp0/tgzAMZSXQ+H5GAy0pdJjevmmwMY5rQaq3L6wE+cSvA==} - engines: {node: '>=18'} + '@ai-sdk/openai@4.0.19': + resolution: {integrity: sha512-Mp0yj3YfmD1UHptjzQcWUjYSSVh8WMvQ2sj5CCrevOkJcADyz15TesnOl/Ncdc2xB0wXwQ2y0EEkKwsAFkva9w==} + engines: {node: '>=22'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/provider-utils@4.0.40': - resolution: {integrity: sha512-OL5IrpUm9Y8Dwy+w/vvFwPotS6m52O9W0op2oXgXdCROMJIBalBI0oro6OIBYkPxvm5Xg02GSkoQN25RlR0bnw==} - engines: {node: '>=18'} + '@ai-sdk/provider-utils@5.0.12': + resolution: {integrity: sha512-bbhlOgHeYwrIGheLkM6fhS8hVger8uFPmcOLg+kxc9EFh7y30XYorWhthlYAgpadO3SJhFZrIcEknN7qEqEVvA==} + engines: {node: '>=22'} peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/provider@3.0.14': - resolution: {integrity: sha512-5X1k57JBJ4H7H1QjX7CnJYAB1I19r/trVZTMcSms7/kLNZ8RaU4Nt2agcwZzv82Hfx6Q7/TOLU7agAKeFfc8cA==} - engines: {node: '>=18'} + '@ai-sdk/provider@4.0.3': + resolution: {integrity: sha512-e0CpNWJUY7OxAFAnCZkw+ri9QOHWwTs1tXP42782KFGCU07qt8NiXCrCVowyCB5dP2r5/Uls+g2oPd8kOJn9dw==} + engines: {node: '>=22'} '@alloc/quick-lru@5.2.0': resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} @@ -6299,12 +6302,6 @@ packages: peerDependencies: hono: ^4 - '@hono/node-server@1.19.7': - resolution: {integrity: sha512-vUcD0uauS7EU2caukW8z5lJKtoGMokxNbJtBiwHgpqxEXokaHCBkQUmCHhjFB1VUTWdqj25QoMkMKzgjq+uhrw==} - engines: {node: '>=18.14.1'} - peerDependencies: - hono: ^4 - '@humanwhocodes/config-array@0.13.0': resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} engines: {node: '>=10.10.0'} @@ -6850,16 +6847,6 @@ packages: resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} hasBin: true - '@modelcontextprotocol/sdk@1.25.1': - resolution: {integrity: sha512-yO28oVFFC7EBoiKdAn+VqRm+plcfv4v0xp6osG/VsCB0NlPZWi87ajbCZZ8f/RvOFLEu7//rSRmuZZ7lMoe3gQ==} - engines: {node: '>=18'} - peerDependencies: - '@cfworker/json-schema': ^4.1.1 - zod: ^3.25 || ^4.0 - peerDependenciesMeta: - '@cfworker/json-schema': - optional: true - '@modelcontextprotocol/sdk@1.29.0': resolution: {integrity: sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==} engines: {node: '>=18'} @@ -8225,10 +8212,6 @@ packages: '@tanstack/virtual-core@3.11.3': resolution: {integrity: sha512-v2mrNSnMwnPJtcVqNvV0c5roGCBqeogN8jDtgtuHCphdwBasOZ17x8UV8qpHUh+u0MLfX43c0uUHKje0s+Zb0w==} - '@temporalio/activity@1.20.3': - resolution: {integrity: sha512-7jtIkCkUe6wwVrnlCd/7DmnVcu1/r4KFvVHvPVszd/EXAz1ziYfsjhenLfxWIvyxSIU9v3tC96uHODN3ABdv4A==} - engines: {node: '>= 20.3.0'} - '@temporalio/activity@1.21.0': resolution: {integrity: sha512-v9Tf3CNi0Iy5VylB5GrzWz9KpuhrWDhdDuyfDHO1BX71Exwq1aXRnak0WQY0umjNI/oK+mPHKQ8/RAmmAFOL/w==} engines: {node: '>= 20.3.0'} @@ -8237,17 +8220,13 @@ packages: resolution: {integrity: sha512-UjA1d4ugL3pRXElwnggtVAMe3lppUPzYpBPmpDLTXfOtxEXPTK1x+8OC2jrZY7qmvpHkOdoo86S+UYFzJkMk/A==} engines: {node: '>= 20.3.0'} - '@temporalio/ai-sdk@1.20.3': - resolution: {integrity: sha512-j3XUiu/3ckePcd9gBzDcwuN/phyvtAQot2RFNeKoLgAeWGgDhhfbrT9q2sg1i8VgTd4z4uprQpRJacFgGW88bA==} - engines: {node: '>= 20.3.0'} + '@temporalio/ai-sdk@1.21.0': + resolution: {integrity: sha512-WLo376a1Qwr/u0CWdgGxoMaOUOYlxRJXIcdBdBhKA0AV96r2UwfyWf/tRlm5TiDiGQy5LYYU0SBZL8B+OWm+mw==} + engines: {node: '>= 22.12.0'} peerDependencies: - '@ai-sdk/mcp': ^1.0.0 - '@ai-sdk/provider': ^3.0.0 - ai: ^6.0.0 - - '@temporalio/client@1.20.3': - resolution: {integrity: sha512-RmEX0Z7h3mWq8PMqeDSbbDZPK8IweajGnRsghiJI0fnaWx61YeW8bhAAKfD/iSop+0PM0oe0KaW5XPAKEY4XEw==} - engines: {node: '>= 20.3.0'} + '@ai-sdk/mcp': ^2.0.0 + '@ai-sdk/provider': ^4.0.0 + ai: ^7.0.0 '@temporalio/client@1.21.0': resolution: {integrity: sha512-ujkdvIOswOi4AbISWbH5/w4vCOhgb+0oj/o/4AImArBLyxVqlqhW+AIrY+7zxOkFpF2CN9dlDJBzDdCGbBeHYA==} @@ -8257,10 +8236,6 @@ packages: resolution: {integrity: sha512-rdZAh20wzI5i/SyS46Nv9mE6t2KkS9DTrB57HEMLsq6eqm58Nc6la0WQKJGsUNkmN98KKirByidZ5D/ik3kiQw==} engines: {node: '>= 20.3.0'} - '@temporalio/common@1.20.3': - resolution: {integrity: sha512-VM9GyUAa7tl413nM24mcBhUfUeqcGazmDkx/GfDA0c+KuEVusclMg9eqa63EDv/rguC/YhWaXu6q5Kl8+99GSw==} - engines: {node: '>= 20.3.0'} - '@temporalio/common@1.21.0': resolution: {integrity: sha512-cGPkW47dRo2MPT5BzTUSuRUrtxNdYUaUSlvwBA2fX45egrlza2oBvsev52c7l0h0tReflDuAAEoh1JGS2qot6Q==} engines: {node: '>= 20.3.0'} @@ -8269,10 +8244,6 @@ packages: resolution: {integrity: sha512-8Pis59xYLrGu6GfkkWvrYWkSPEvo8lBBILsR6gBHGbymNlEc0ynylRXqPmRjwuLfYS7jHzxqjjO7cvXJQ/z2Fg==} engines: {node: '>= 20.3.0'} - '@temporalio/core-bridge@1.20.3': - resolution: {integrity: sha512-i7hu6lg6bm2esyYYDwHh0XmGkOWSL5iicLjC7DNRU4b4As/dKcRxYMxNY6dXtKzbM94xhmX6Fh4j5/fxen/4kw==} - engines: {node: '>= 20.3.0'} - '@temporalio/core-bridge@1.21.0': resolution: {integrity: sha512-EBSLy4fip2e5jPMznGi32bcYZK3MztNvMfDY3Z96gJYk6N1R5EkR+lINoxLv1wkLVUoFBj+I+xQ1Xi8FF4iZbw==} engines: {node: '>= 20.3.0'} @@ -8281,10 +8252,6 @@ packages: resolution: {integrity: sha512-gCy/6TFhcFAjFPRN1DeHSwAnXU380Jn/y6yG2dkSV+rYK0JRl66SE2NvdcAjzhoPO/twHEaHklbppojH0cUpUw==} engines: {node: '>= 20.3.0'} - '@temporalio/envconfig@1.20.3': - resolution: {integrity: sha512-5CgTXb/UsvmwZc8lW5aLkplEpCRGwJkV+bWNcxblFjfayit0VYCxn+S7iMbW01Hj7dQWJ+RX+Xg+E+iFHf07JA==} - engines: {node: '>= 20.3.0'} - '@temporalio/envconfig@1.21.0': resolution: {integrity: sha512-d2MWXGvgsqXUP+Cw6oVyF0Yz68XuR4yns5fuCZgu5BUwlKGdjQ56f+AX2cSyl0/P6yugG0sLJ6iQe9UbQCBdeQ==} engines: {node: '>= 20.3.0'} @@ -8343,10 +8310,6 @@ packages: peerDependencies: langsmith: ^0.7.9 - '@temporalio/nexus@1.20.3': - resolution: {integrity: sha512-OSl73enJ9M8OMk2QaGHr4cQ1DDLEkjMhU1Z3tBt2zbWkKDs2IHKkl1wU/rMeXg7AJf5uqHcp209SBaDN/rqDiA==} - engines: {node: '>= 20.3.0'} - '@temporalio/nexus@1.21.0': resolution: {integrity: sha512-xuOmjJnBwcLf7fXOGWJUyOvGRqF0JTVlSgJPOOQpgWrGUSXYRvPKSW0p3tUE1rzfssBDYZp9905uK2OJE+3LpA==} engines: {node: '>= 20.3.0'} @@ -8376,10 +8339,6 @@ packages: '@opentelemetry/sdk-trace-base': optional: true - '@temporalio/plugin@1.20.3': - resolution: {integrity: sha512-gWs3ulAf15u+M/CG8WMC9cepf8KxOKTJkTSXCEja6eT3McUyDEL1heZ/XYLc/hTRL/Yj7or8y2Jydn3EG60TNA==} - engines: {node: '>= 20.3.0'} - '@temporalio/plugin@1.21.0': resolution: {integrity: sha512-NmKGG27iYQzR0YaU6EWUzBCbiWS+KhmOF1qBOkwdVysLQIT7w2QjFLAmBw80wrrWxb/1l7xlLYHlNYSWJ2OqIg==} engines: {node: '>= 20.3.0'} @@ -8388,10 +8347,6 @@ packages: resolution: {integrity: sha512-OabF/4y0SXn8ifakRGbAAqBUuIPl4dj1peqEbxgOvRQO9Ak6ZWmUpPvR72oh1QUTXYn38svudsL8MeP8+6DHFg==} engines: {node: '>= 20.3.0'} - '@temporalio/proto@1.20.3': - resolution: {integrity: sha512-RdbHC3zH+N0QqG1Q38h2LilFIQ3lbGLVmLYCyNcV+PPfzrtrZ8pwBACpSGwEuF7WWFziLAhJ2oMVXTnmXY5ocQ==} - engines: {node: '>= 20.3.0'} - '@temporalio/proto@1.21.0': resolution: {integrity: sha512-i2rNFdMZOWPDiO9YTl3knksR80IX36DpklJftpJndlAFfPAXv/iHf2UXxiGyr4N4beF8TNyNWOb30Vjk663ROg==} engines: {node: '>= 20.3.0'} @@ -8406,10 +8361,6 @@ packages: peerDependencies: '@strands-agents/sdk': ^1.3.0 - '@temporalio/testing@1.20.3': - resolution: {integrity: sha512-YptZtr/HPKov+9GxOEY9Onpuzy/WppBVOdqWaNbZasD5x3vo3aVOyFA1eVcGXSLnKMmQC+JGr+LLLJP/9Dn36A==} - engines: {node: '>= 20.3.0'} - '@temporalio/testing@1.21.0': resolution: {integrity: sha512-YjCT3v2CUTpGZkY5/epX4QL8KGg2ZR0pTKV/SttGQ8PiBr4HofY6zJxY0bRVxo7sRDboOogOYjbEV+ElGVJHpQ==} engines: {node: '>= 20.3.0'} @@ -8418,10 +8369,6 @@ packages: resolution: {integrity: sha512-vKYQZsa8EFE4Rvlh0v1Ry2B0+vnnpgfHarSadue+3ZUWf3cx28HGCseZEgHcaG299ChsjbADntKO6YjwlMv1Jw==} engines: {node: '>= 20.3.0'} - '@temporalio/worker@1.20.3': - resolution: {integrity: sha512-29W39KxGoz8QfiELT5al1jr+nnZEnpWCjr5gYT2a6ZlXr2WKxbJw4rRBy+OyGwHs5kGT0pPYayYvwcDTvWRpQQ==} - engines: {node: '>= 20.3.0'} - '@temporalio/worker@1.21.0': resolution: {integrity: sha512-8StC83emDAlTg48PyPuqmNhdNRimf2OfMcJbQbMypq7jJg6QULmbLlbXmaZlDc/8qGxyYwOc6b2VwzQhLNGpZw==} engines: {node: '>= 20.3.0'} @@ -8430,10 +8377,6 @@ packages: resolution: {integrity: sha512-ccXus6+w317tL+NsJXEYWpHFxcy0VDPfstmBzej0yZrkzWNvAkaWVGQbguKoLToDM8+DMaqklx1dX4gJnknR1g==} engines: {node: '>= 20.3.0'} - '@temporalio/workflow-streams@1.20.3': - resolution: {integrity: sha512-YIoQTFDhA4yroUOxjj3EDjOk/QHCLXNyz3TGrSFbbVobEykyjXWhkYlLyu1SkVu9bee5Nz+lH4T34B4vvEMzgg==} - engines: {node: '>= 20.3.0'} - '@temporalio/workflow-streams@1.21.0': resolution: {integrity: sha512-ymMFOo6MHfx3HAPs1nAENB4T1EiifBR+73jxRJXpz0cst4SoA8QcmxoGK/eSuA7qC5FmtmeoKX9rmagcUNRUDA==} engines: {node: '>= 20.3.0'} @@ -8442,10 +8385,6 @@ packages: resolution: {integrity: sha512-x4reh2EaiH6ageejhlFslWOAQ5cODYhWWD44XjMCSKj7xelrVgyjAzWmSvbmLOK/z71HhzGYIPCd6W4bY0Nlww==} engines: {node: '>= 20.3.0'} - '@temporalio/workflow@1.20.3': - resolution: {integrity: sha512-6LRfnWp3HcvqvKFwbOhs5iDQkHNIM5Rxtxhsi2E5ViPDvJMBqlQ0sQ4oRo5SEgr5Bri650i7GfEQQJMVl7xoKg==} - engines: {node: '>= 20.3.0'} - '@temporalio/workflow@1.21.0': resolution: {integrity: sha512-TlVrRTkcqbC/LFaWsJDr/43wupXhex3LZnxX/deba6badmRMhnQxzKdAXC2/NDOUrs7k6jG7j3QwOMGvW2rBYw==} engines: {node: '>= 20.3.0'} @@ -9000,6 +8939,7 @@ packages: '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + deprecated: Potential CWE-502 - Update to 1.3.1 or higher '@ungap/structured-clone@1.3.2': resolution: {integrity: sha512-5jsZFwgR5rTdKwidH9Qmat75RKwqfpKlWWB1frDkljN127mwqBu8K0PYo7/hFpF03IEJpfVPpCQDY/eDx3iHvA==} @@ -9128,6 +9068,9 @@ packages: '@webassemblyjs/wast-printer@1.14.1': resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + '@workflow/serde@4.1.0': + resolution: {integrity: sha512-pav4F2BoirECWR7Nf1TKt+2eETcBj7jj4cBefQ8VXQCA6NPkaKeLfj/zMgi+3zYV5ZIBT4GuUiphsj0/b9hPQQ==} + '@xtuc/ieee754@1.2.0': resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} @@ -9226,9 +9169,9 @@ packages: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} - ai@6.0.234: - resolution: {integrity: sha512-6/7Go3Z6j/rpMgTS8wWm38/pcDfvhSmQvNLvElwYezmjYKr5hNDMa4bGlnBtQcYNzbc1dLpWdbYNLJaas3AFPw==} - engines: {node: '>=18'} + ai@7.0.36: + resolution: {integrity: sha512-1XJjua58GVQ0CyO2Xbioyladt85x71Joup2U8qKrjHUl8tHYwrDw8iFRtav6e94AxSVCn9FVgTS17oX1OCquKA==} + engines: {node: '>=22'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -11300,10 +11243,6 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} - eventsource-parser@3.0.6: - resolution: {integrity: sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==} - engines: {node: '>=18.0.0'} - eventsource-parser@3.1.0: resolution: {integrity: sha512-kJezFj9YFAMLeORyi7aCLxLbD5/qWMQnoMVlVPyHIll7lgRJCc3JVln9Vgl9nwQi0YkMnhdGTMNn7CkRRAptMg==} engines: {node: '>=18.0.0'} @@ -11340,12 +11279,6 @@ packages: resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - express-rate-limit@7.5.1: - resolution: {integrity: sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==} - engines: {node: '>= 16'} - peerDependencies: - express: '>= 4.11' - express-rate-limit@8.5.2: resolution: {integrity: sha512-5Kb34ipNX694DH48vN9irak1Qx30nb0PLYHXfJgw4YEjiC3ZEmZJhwOp+VfiCYwFzvFTdB9QkArYS5kXa2cx2A==} engines: {node: '>= 16'} @@ -11726,6 +11659,7 @@ packages: glob@11.0.1: resolution: {integrity: sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==} engines: {node: 20 || >=22} + 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 hasBin: true glob@7.1.6: @@ -11743,7 +11677,7 @@ packages: glob@8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} engines: {node: '>=12'} - deprecated: Glob versions prior to v9 are no longer supported + 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 global-modules@2.0.0: resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} @@ -16587,10 +16521,12 @@ packages: uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true uvu@0.5.6: @@ -16980,18 +16916,6 @@ packages: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - ws@7.5.10: - resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - ws@7.5.11: resolution: {integrity: sha512-zS54Oen9bITtp7kp2XM3AydrCIq1D+HwJOuH+c+e4LfpL/lotP5osijd+UoMnxwAam1GN8R4KtLAyIrIcBNpiA==} engines: {node: '>=8.3.0'} @@ -17114,11 +17038,6 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - zod-to-json-schema@3.25.0: - resolution: {integrity: sha512-HvWtU2UG41LALjajJrML6uQejQhNJx+JBO9IflpSja4R03iNWfKXrj6W2h7ljuLyc1nKS+9yDyL/9tD1U/yBnQ==} - peerDependencies: - zod: ^3.25 || ^4 - zod-to-json-schema@3.25.2: resolution: {integrity: sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==} peerDependencies: @@ -17148,34 +17067,35 @@ snapshots: '@adobe/css-tools@4.4.1': {} - '@ai-sdk/gateway@3.0.156(zod@3.25.76)': + '@ai-sdk/gateway@4.0.27(zod@3.25.76)': dependencies: - '@ai-sdk/provider': 3.0.14 - '@ai-sdk/provider-utils': 4.0.40(zod@3.25.76) + '@ai-sdk/provider': 4.0.3 + '@ai-sdk/provider-utils': 5.0.12(zod@3.25.76) '@vercel/oidc': 3.2.0 zod: 3.25.76 - '@ai-sdk/mcp@1.0.64(zod@3.25.76)': + '@ai-sdk/mcp@2.0.16(zod@3.25.76)': dependencies: - '@ai-sdk/provider': 3.0.14 - '@ai-sdk/provider-utils': 4.0.40(zod@3.25.76) + '@ai-sdk/provider': 4.0.3 + '@ai-sdk/provider-utils': 5.0.12(zod@3.25.76) pkce-challenge: 5.0.1 zod: 3.25.76 - '@ai-sdk/openai@3.0.87(zod@3.25.76)': + '@ai-sdk/openai@4.0.19(zod@3.25.76)': dependencies: - '@ai-sdk/provider': 3.0.14 - '@ai-sdk/provider-utils': 4.0.40(zod@3.25.76) + '@ai-sdk/provider': 4.0.3 + '@ai-sdk/provider-utils': 5.0.12(zod@3.25.76) zod: 3.25.76 - '@ai-sdk/provider-utils@4.0.40(zod@3.25.76)': + '@ai-sdk/provider-utils@5.0.12(zod@3.25.76)': dependencies: - '@ai-sdk/provider': 3.0.14 + '@ai-sdk/provider': 4.0.3 '@standard-schema/spec': 1.1.0 + '@workflow/serde': 4.1.0 eventsource-parser: 3.1.0 zod: 3.25.76 - '@ai-sdk/provider@3.0.14': + '@ai-sdk/provider@4.0.3': dependencies: json-schema: 0.4.0 @@ -17595,8 +17515,8 @@ snapshots: '@babel/helper-member-expression-to-functions@7.25.9': dependencies: - '@babel/traverse': 7.26.7 - '@babel/types': 7.26.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color @@ -17641,7 +17561,7 @@ snapshots: '@babel/helper-optimise-call-expression@7.25.9': dependencies: - '@babel/types': 7.26.7 + '@babel/types': 7.29.7 '@babel/helper-optimise-call-expression@7.29.7': dependencies: @@ -17656,7 +17576,7 @@ snapshots: '@babel/core': 7.26.7 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-wrap-function': 7.25.9 - '@babel/traverse': 7.26.7 + '@babel/traverse': 7.29.7 transitivePeerDependencies: - supports-color @@ -17716,8 +17636,8 @@ snapshots: '@babel/helper-wrap-function@7.25.9': dependencies: '@babel/template': 7.25.9 - '@babel/traverse': 7.26.7 - '@babel/types': 7.26.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 transitivePeerDependencies: - supports-color @@ -19502,10 +19422,6 @@ snapshots: dependencies: hono: 4.12.27 - '@hono/node-server@1.19.7(hono@4.12.27)': - dependencies: - hono: 4.12.27 - '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 @@ -20287,26 +20203,26 @@ snapshots: - encoding - supports-color - '@modelcontextprotocol/sdk@1.25.1(hono@4.12.27)(zod@3.25.76)': + '@modelcontextprotocol/sdk@1.29.0(zod@3.25.76)': dependencies: - '@hono/node-server': 1.19.7(hono@4.12.27) + '@hono/node-server': 1.19.14(hono@4.12.27) ajv: 8.17.1 ajv-formats: 3.0.1(ajv@8.17.1) content-type: 1.0.5 cors: 2.8.5 cross-spawn: 7.0.6 eventsource: 3.0.7 - eventsource-parser: 3.0.6 + eventsource-parser: 3.1.0 express: 5.2.1 - express-rate-limit: 7.5.1(express@5.2.1) + express-rate-limit: 8.5.2(express@5.2.1) + hono: 4.12.27 jose: 6.1.3 json-schema-typed: 8.0.2 pkce-challenge: 5.0.1 raw-body: 3.0.2 zod: 3.25.76 - zod-to-json-schema: 3.25.0(zod@3.25.76) + zod-to-json-schema: 3.25.2(zod@3.25.76) transitivePeerDependencies: - - hono - supports-color '@modelcontextprotocol/sdk@1.29.0(zod@4.4.3)': @@ -20318,7 +20234,7 @@ snapshots: cors: 2.8.5 cross-spawn: 7.0.6 eventsource: 3.0.7 - eventsource-parser: 3.0.6 + eventsource-parser: 3.1.0 express: 5.2.1 express-rate-limit: 8.5.2(express@5.2.1) hono: 4.12.27 @@ -21617,7 +21533,7 @@ snapshots: '@standard-schema/spec@1.1.0': {} - '@strands-agents/sdk@1.11.0(@ai-sdk/provider@3.0.14)(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(@opentelemetry/api@1.9.0)(@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@2.9.0(@opentelemetry/api@1.9.0))(@smithy/types@4.16.1)(express@5.2.1)(openai@6.45.0(@aws-sdk/credential-provider-node@3.972.71)(@smithy/signature-v4@5.6.9)(ws@8.18.0)(zod@4.4.3))(zod@4.4.3)': + '@strands-agents/sdk@1.11.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(@opentelemetry/api@1.9.0)(@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@2.9.0(@opentelemetry/api@1.9.0))(@smithy/types@4.16.1)(express@5.2.1)(openai@6.45.0(@aws-sdk/credential-provider-node@3.972.71)(@smithy/signature-v4@5.6.9)(ws@8.18.0)(zod@4.4.3))(zod@4.4.3)': dependencies: '@aws-sdk/client-bedrock-runtime': 3.1094.0 '@modelcontextprotocol/sdk': 1.29.0(zod@4.4.3) @@ -21627,7 +21543,6 @@ snapshots: yaml: 2.9.0 zod: 4.4.3 optionalDependencies: - '@ai-sdk/provider': 3.0.14 '@opentelemetry/resources': 2.9.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-metrics': 2.9.0(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-base': 2.9.0(@opentelemetry/api@1.9.0) @@ -21798,11 +21713,6 @@ snapshots: '@tanstack/virtual-core@3.11.3': {} - '@temporalio/activity@1.20.3': - dependencies: - '@temporalio/client': 1.20.3 - '@temporalio/common': 1.20.3 - '@temporalio/activity@1.21.0': dependencies: '@temporalio/client': 1.21.0 @@ -21813,31 +21723,21 @@ snapshots: '@temporalio/client': 1.21.1 '@temporalio/common': 1.21.1 - '@temporalio/ai-sdk@1.20.3(@ai-sdk/mcp@1.0.64(zod@3.25.76))(@ai-sdk/provider@3.0.14)(ai@6.0.234(zod@3.25.76))': + '@temporalio/ai-sdk@1.21.0(@ai-sdk/mcp@2.0.16(zod@3.25.76))(@ai-sdk/provider@4.0.3)(ai@7.0.36(zod@3.25.76))': dependencies: - '@ai-sdk/mcp': 1.0.64(zod@3.25.76) - '@ai-sdk/provider': 3.0.14 - '@temporalio/activity': 1.20.3 - '@temporalio/client': 1.20.3 - '@temporalio/common': 1.20.3 - '@temporalio/plugin': 1.20.3 - '@temporalio/workflow': 1.20.3 - '@temporalio/workflow-streams': 1.20.3 + '@ai-sdk/mcp': 2.0.16(zod@3.25.76) + '@ai-sdk/provider': 4.0.3 + '@temporalio/activity': 1.21.0 + '@temporalio/client': 1.21.0 + '@temporalio/common': 1.21.0 + '@temporalio/plugin': 1.21.0 + '@temporalio/workflow': 1.21.0 + '@temporalio/workflow-streams': 1.21.0 '@ungap/structured-clone': 1.3.2 - ai: 6.0.234(zod@3.25.76) + ai: 7.0.36(zod@3.25.76) headers-polyfill: 4.0.3 web-streams-polyfill: 4.2.0 - '@temporalio/client@1.20.3': - dependencies: - '@grpc/grpc-js': 1.14.4 - '@temporalio/common': 1.20.3 - '@temporalio/proto': 1.20.3 - abort-controller: 3.0.0 - long: 5.3.2 - nexus-rpc: 0.0.2 - uuid: 11.1.0 - '@temporalio/client@1.21.0': dependencies: '@grpc/grpc-js': 1.14.4 @@ -21858,14 +21758,6 @@ snapshots: nexus-rpc: 0.0.2 uuid: 11.1.0 - '@temporalio/common@1.20.3': - dependencies: - '@temporalio/proto': 1.20.3 - long: 5.3.2 - ms: 3.0.0-canary.1 - nexus-rpc: 0.0.2 - proto3-json-serializer: 2.0.2 - '@temporalio/common@1.21.0': dependencies: '@temporalio/proto': 1.21.0 @@ -21882,11 +21774,6 @@ snapshots: nexus-rpc: 0.0.2 proto3-json-serializer: 2.0.2 - '@temporalio/core-bridge@1.20.3': - dependencies: - '@grpc/grpc-js': 1.14.4 - '@temporalio/common': 1.20.3 - '@temporalio/core-bridge@1.21.0': dependencies: '@grpc/grpc-js': 1.14.4 @@ -21897,11 +21784,6 @@ snapshots: '@grpc/grpc-js': 1.14.4 '@temporalio/common': 1.21.1 - '@temporalio/envconfig@1.20.3': - dependencies: - '@temporalio/common': 1.20.3 - smol-toml: 1.6.1 - '@temporalio/envconfig@1.21.0': dependencies: '@temporalio/common': 1.21.0 @@ -21985,14 +21867,6 @@ snapshots: - uglify-js - webpack-cli - '@temporalio/nexus@1.20.3': - dependencies: - '@temporalio/client': 1.20.3 - '@temporalio/common': 1.20.3 - '@temporalio/proto': 1.20.3 - long: 5.3.2 - nexus-rpc: 0.0.2 - '@temporalio/nexus@1.21.0': dependencies: '@temporalio/client': 1.21.0 @@ -22055,17 +21929,10 @@ snapshots: - uglify-js - webpack-cli - '@temporalio/plugin@1.20.3': {} - '@temporalio/plugin@1.21.0': {} '@temporalio/plugin@1.21.1': {} - '@temporalio/proto@1.20.3': - dependencies: - long: 5.3.2 - protobufjs: 7.6.5 - '@temporalio/proto@1.21.0': dependencies: long: 5.3.2 @@ -22076,9 +21943,9 @@ snapshots: long: 5.3.2 protobufjs: 7.6.5 - '@temporalio/strands-agents@1.21.1(@strands-agents/sdk@1.11.0(@ai-sdk/provider@3.0.14)(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(@opentelemetry/api@1.9.0)(@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@2.9.0(@opentelemetry/api@1.9.0))(@smithy/types@4.16.1)(express@5.2.1)(openai@6.45.0(@aws-sdk/credential-provider-node@3.972.71)(@smithy/signature-v4@5.6.9)(ws@8.18.0)(zod@4.4.3))(zod@4.4.3))': + '@temporalio/strands-agents@1.21.1(@strands-agents/sdk@1.11.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(@opentelemetry/api@1.9.0)(@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@2.9.0(@opentelemetry/api@1.9.0))(@smithy/types@4.16.1)(express@5.2.1)(openai@6.45.0(@aws-sdk/credential-provider-node@3.972.71)(@smithy/signature-v4@5.6.9)(ws@8.18.0)(zod@4.4.3))(zod@4.4.3))': dependencies: - '@strands-agents/sdk': 1.11.0(@ai-sdk/provider@3.0.14)(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(@opentelemetry/api@1.9.0)(@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@2.9.0(@opentelemetry/api@1.9.0))(@smithy/types@4.16.1)(express@5.2.1)(openai@6.45.0(@aws-sdk/credential-provider-node@3.972.71)(@smithy/signature-v4@5.6.9)(ws@8.18.0)(zod@4.4.3))(zod@4.4.3) + '@strands-agents/sdk': 1.11.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(@opentelemetry/api@1.9.0)(@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-metrics@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-node@2.9.0(@opentelemetry/api@1.9.0))(@smithy/types@4.16.1)(express@5.2.1)(openai@6.45.0(@aws-sdk/credential-provider-node@3.972.71)(@smithy/signature-v4@5.6.9)(ws@8.18.0)(zod@4.4.3))(zod@4.4.3) '@temporalio/activity': 1.21.1 '@temporalio/common': 1.21.1 '@temporalio/plugin': 1.21.1 @@ -22089,30 +21956,6 @@ snapshots: web-streams-polyfill: 4.2.0 zod: 4.4.3 - '@temporalio/testing@1.20.3(@swc/helpers@0.5.15)': - dependencies: - '@temporalio/activity': 1.20.3 - '@temporalio/client': 1.20.3 - '@temporalio/common': 1.20.3 - '@temporalio/core-bridge': 1.20.3 - '@temporalio/proto': 1.20.3 - '@temporalio/worker': 1.20.3(@swc/helpers@0.5.15) - '@temporalio/workflow': 1.20.3 - transitivePeerDependencies: - - '@minify-html/node' - - '@swc/css' - - '@swc/helpers' - - '@swc/html' - - clean-css - - cssnano - - csso - - esbuild - - html-minifier-terser - - lightningcss - - postcss - - uglify-js - - webpack-cli - '@temporalio/testing@1.21.0(@swc/helpers@0.5.15)': dependencies: '@temporalio/activity': 1.21.0 @@ -22161,43 +22004,6 @@ snapshots: - uglify-js - webpack-cli - '@temporalio/worker@1.20.3(@swc/helpers@0.5.15)': - dependencies: - '@grpc/grpc-js': 1.14.4 - '@swc/core': 1.10.11(@swc/helpers@0.5.15) - '@temporalio/activity': 1.20.3 - '@temporalio/client': 1.20.3 - '@temporalio/common': 1.20.3 - '@temporalio/core-bridge': 1.20.3 - '@temporalio/nexus': 1.20.3 - '@temporalio/proto': 1.20.3 - '@temporalio/workflow': 1.20.3 - heap-js: 2.6.0 - memfs: 4.17.0 - nexus-rpc: 0.0.2 - protobufjs: 7.6.5 - rxjs: 7.8.2 - source-map: 0.7.6 - source-map-loader: 5.0.0(webpack@5.108.4(@swc/core@1.10.11(@swc/helpers@0.5.15))) - supports-color: 8.1.1 - swc-loader: 0.2.6(@swc/core@1.10.11(@swc/helpers@0.5.15))(webpack@5.108.4(@swc/core@1.10.11(@swc/helpers@0.5.15))) - unionfs: 4.5.4 - webpack: 5.108.4(@swc/core@1.10.11(@swc/helpers@0.5.15)) - transitivePeerDependencies: - - '@minify-html/node' - - '@swc/css' - - '@swc/helpers' - - '@swc/html' - - clean-css - - cssnano - - csso - - esbuild - - html-minifier-terser - - lightningcss - - postcss - - uglify-js - - webpack-cli - '@temporalio/worker@1.21.0(@swc/helpers@0.5.15)': dependencies: '@grpc/grpc-js': 1.14.4 @@ -22309,14 +22115,6 @@ snapshots: - uglify-js - webpack-cli - '@temporalio/workflow-streams@1.20.3': - dependencies: - '@temporalio/activity': 1.20.3 - '@temporalio/client': 1.20.3 - '@temporalio/common': 1.20.3 - '@temporalio/proto': 1.20.3 - '@temporalio/workflow': 1.20.3 - '@temporalio/workflow-streams@1.21.0': dependencies: '@temporalio/activity': 1.21.0 @@ -22333,12 +22131,6 @@ snapshots: '@temporalio/proto': 1.21.1 '@temporalio/workflow': 1.21.1 - '@temporalio/workflow@1.20.3': - dependencies: - '@temporalio/common': 1.20.3 - '@temporalio/proto': 1.20.3 - nexus-rpc: 0.0.2 - '@temporalio/workflow@1.21.0': dependencies: '@temporalio/common': 1.21.0 @@ -23387,6 +23179,8 @@ snapshots: '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 + '@workflow/serde@4.1.0': {} + '@xtuc/ieee754@1.2.0': {} '@xtuc/long@4.2.2': {} @@ -23474,12 +23268,11 @@ snapshots: clean-stack: 2.2.0 indent-string: 4.0.0 - ai@6.0.234(zod@3.25.76): + ai@7.0.36(zod@3.25.76): dependencies: - '@ai-sdk/gateway': 3.0.156(zod@3.25.76) - '@ai-sdk/provider': 3.0.14 - '@ai-sdk/provider-utils': 4.0.40(zod@3.25.76) - '@opentelemetry/api': 1.9.0 + '@ai-sdk/gateway': 4.0.27(zod@3.25.76) + '@ai-sdk/provider': 4.0.3 + '@ai-sdk/provider-utils': 5.0.12(zod@3.25.76) zod: 3.25.76 ajv-formats@2.1.1(ajv@8.12.0): @@ -23865,14 +23658,14 @@ snapshots: babel-plugin-jest-hoist@28.1.3: dependencies: '@babel/template': 7.25.9 - '@babel/types': 7.26.7 + '@babel/types': 7.29.7 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 babel-plugin-jest-hoist@29.6.3: dependencies: '@babel/template': 7.25.9 - '@babel/types': 7.26.7 + '@babel/types': 7.29.7 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 @@ -25959,8 +25752,6 @@ snapshots: events@3.3.0: {} - eventsource-parser@3.0.6: {} - eventsource-parser@3.1.0: {} eventsource@3.0.7: @@ -26008,10 +25799,6 @@ snapshots: jest-message-util: 29.7.0 jest-util: 29.7.0 - express-rate-limit@7.5.1(express@5.2.1): - dependencies: - express: 5.2.1 - express-rate-limit@8.5.2(express@5.2.1): dependencies: express: 5.2.1 @@ -26104,7 +25891,7 @@ snapshots: etag: 1.8.1 finalhandler: 2.1.1 fresh: 2.0.0 - http-errors: 2.0.0 + http-errors: 2.0.1 merge-descriptors: 2.0.0 mime-types: 3.0.2 on-finished: 2.4.1 @@ -26116,7 +25903,7 @@ snapshots: router: 2.2.0 send: 1.2.1 serve-static: 2.2.1 - statuses: 2.0.1 + statuses: 2.0.2 type-is: 2.0.1 vary: 1.1.2 transitivePeerDependencies: @@ -26254,7 +26041,7 @@ snapshots: escape-html: 1.0.3 on-finished: 2.4.1 parseurl: 1.3.3 - statuses: 2.0.1 + statuses: 2.0.2 transitivePeerDependencies: - supports-color @@ -28449,7 +28236,7 @@ snapshots: whatwg-encoding: 1.0.5 whatwg-mimetype: 2.3.0 whatwg-url: 8.7.0 - ws: 7.5.10 + ws: 7.5.11 xml-name-validator: 3.0.0 transitivePeerDependencies: - bufferutil @@ -33724,8 +33511,6 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 3.0.7 - ws@7.5.10: {} - ws@7.5.11: {} ws@8.13.0: {} @@ -33840,7 +33625,7 @@ snapshots: yocto-queue@0.1.0: {} - zod-to-json-schema@3.25.0(zod@3.25.76): + zod-to-json-schema@3.25.2(zod@3.25.76): dependencies: zod: 3.25.76