experimental-a2 0.16.0 → 0.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/dist/{ai-HJ9fHfYI.d.ts → ai-CrEf6p_W.d.ts} +2 -2
- package/dist/ai-CrEf6p_W.d.ts.map +1 -0
- package/dist/{ai-CrLYwNEx.js → ai-DgOBltJ_.js} +323 -303
- package/dist/ai-DgOBltJ_.js.map +1 -0
- package/dist/ai-server.d.ts +1 -1
- package/dist/ai-server.d.ts.map +1 -1
- package/dist/ai-server.js +35 -8
- package/dist/ai-server.js.map +1 -1
- package/dist/ai.d.ts +1 -1
- package/dist/ai.js +1 -1
- package/docs/guides/06-ai-agents.mdx +15 -5
- package/docs/reference/01-api.mdx +8 -3
- package/examples/playground/package.json +1 -1
- package/package.json +1 -1
- package/src/ai-client-state.ts +36 -2
- package/src/ai-control-server.ts +24 -5
- package/src/ai-control.ts +2 -0
- package/src/ai-message-projection.ts +127 -1
- package/src/ai-server.ts +15 -2
- package/src/ai.ts +6 -123
- package/dist/ai-CrLYwNEx.js.map +0 -1
- package/dist/ai-HJ9fHfYI.d.ts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-DgOBltJ_.js","names":["isRecord","isRecord","isRecord","createContract"],"sources":["../src/parse-partial-json.ts","../src/ai-projector.ts","../src/ai-progress-batches.ts","../src/ai-message-projection.ts","../src/ai-client-state.ts","../src/ai-control-state.ts","../src/ai-control.ts","../src/ai-id.ts","../src/ai-stored-state.ts","../src/ai.ts"],"sourcesContent":["/*!\n * Adapted from AI SDK 7.0.58, packages/ai/src/util/fix-json.ts.\n * Source: https://github.com/vercel/ai, packages/ai/src/util/fix-json.ts.\n * Modified to expose a synchronous partial parser with strict TypeScript types.\n * Also preserves positive exponents in unfinished containers.\n * Copyright 2023 Vercel, Inc.\n * @license Apache-2.0. See src/licenses/Apache-2.0.txt.\n */\n\nexport function parsePartialJSON(text: string | undefined): unknown {\n if (text === undefined || text.trim() === '') return undefined\n try {\n return JSON.parse(text) as unknown\n } catch {\n try {\n return JSON.parse(repairPartialJSON(text)) as unknown\n } catch {\n return undefined\n }\n }\n}\n\ntype State =\n | 'ROOT'\n | 'FINISH'\n | 'INSIDE_STRING'\n | 'INSIDE_STRING_ESCAPE'\n | 'INSIDE_STRING_UNICODE_ESCAPE'\n | 'INSIDE_LITERAL'\n | 'INSIDE_NUMBER'\n | 'INSIDE_OBJECT_START'\n | 'INSIDE_OBJECT_KEY'\n | 'INSIDE_OBJECT_AFTER_KEY'\n | 'INSIDE_OBJECT_BEFORE_VALUE'\n | 'INSIDE_OBJECT_AFTER_VALUE'\n | 'INSIDE_OBJECT_AFTER_COMMA'\n | 'INSIDE_ARRAY_START'\n | 'INSIDE_ARRAY_AFTER_VALUE'\n | 'INSIDE_ARRAY_AFTER_COMMA'\n\nconst isHexDigit = (char: string): boolean =>\n (char >= '0' && char <= '9') ||\n (char >= 'A' && char <= 'F') ||\n (char >= 'a' && char <= 'f')\n\nfunction repairPartialJSON(input: string): string {\n const stack: State[] = ['ROOT']\n let lastValidIndex = -1\n let literalStart: number | null = null\n let unicodeEscapeDigits = 0\n\n function processValueStart(char: string, i: number, swapState: State) {\n {\n switch (char) {\n case '\"': {\n lastValidIndex = i\n stack.pop()\n stack.push(swapState)\n stack.push('INSIDE_STRING')\n break\n }\n\n case 'f':\n case 't':\n case 'n': {\n lastValidIndex = i\n literalStart = i\n stack.pop()\n stack.push(swapState)\n stack.push('INSIDE_LITERAL')\n break\n }\n\n case '-': {\n stack.pop()\n stack.push(swapState)\n stack.push('INSIDE_NUMBER')\n break\n }\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9': {\n lastValidIndex = i\n stack.pop()\n stack.push(swapState)\n stack.push('INSIDE_NUMBER')\n break\n }\n\n case '{': {\n lastValidIndex = i\n stack.pop()\n stack.push(swapState)\n stack.push('INSIDE_OBJECT_START')\n break\n }\n\n case '[': {\n lastValidIndex = i\n stack.pop()\n stack.push(swapState)\n stack.push('INSIDE_ARRAY_START')\n break\n }\n }\n }\n }\n\n function processAfterObjectValue(char: string, i: number) {\n switch (char) {\n case ',': {\n stack.pop()\n stack.push('INSIDE_OBJECT_AFTER_COMMA')\n break\n }\n case '}': {\n lastValidIndex = i\n stack.pop()\n break\n }\n }\n }\n\n function processAfterArrayValue(char: string, i: number) {\n switch (char) {\n case ',': {\n stack.pop()\n stack.push('INSIDE_ARRAY_AFTER_COMMA')\n break\n }\n case ']': {\n lastValidIndex = i\n stack.pop()\n break\n }\n }\n }\n\n for (let i = 0; i < input.length; i++) {\n const char = input[i]!\n const currentState = stack[stack.length - 1]\n\n switch (currentState) {\n case 'ROOT':\n processValueStart(char, i, 'FINISH')\n break\n\n case 'INSIDE_OBJECT_START': {\n switch (char) {\n case '\"': {\n stack.pop()\n stack.push('INSIDE_OBJECT_KEY')\n break\n }\n case '}': {\n lastValidIndex = i\n stack.pop()\n break\n }\n }\n break\n }\n\n case 'INSIDE_OBJECT_AFTER_COMMA': {\n switch (char) {\n case '\"': {\n stack.pop()\n stack.push('INSIDE_OBJECT_KEY')\n break\n }\n }\n break\n }\n\n case 'INSIDE_OBJECT_KEY': {\n switch (char) {\n case '\"': {\n stack.pop()\n stack.push('INSIDE_OBJECT_AFTER_KEY')\n break\n }\n }\n break\n }\n\n case 'INSIDE_OBJECT_AFTER_KEY': {\n switch (char) {\n case ':': {\n stack.pop()\n stack.push('INSIDE_OBJECT_BEFORE_VALUE')\n\n break\n }\n }\n break\n }\n\n case 'INSIDE_OBJECT_BEFORE_VALUE': {\n processValueStart(char, i, 'INSIDE_OBJECT_AFTER_VALUE')\n break\n }\n\n case 'INSIDE_OBJECT_AFTER_VALUE': {\n processAfterObjectValue(char, i)\n break\n }\n\n case 'INSIDE_STRING': {\n switch (char) {\n case '\"': {\n stack.pop()\n lastValidIndex = i\n break\n }\n\n case '\\\\': {\n stack.push('INSIDE_STRING_ESCAPE')\n break\n }\n\n default: {\n lastValidIndex = i\n }\n }\n\n break\n }\n\n case 'INSIDE_ARRAY_START': {\n switch (char) {\n case ']': {\n lastValidIndex = i\n stack.pop()\n break\n }\n\n default: {\n lastValidIndex = i\n processValueStart(char, i, 'INSIDE_ARRAY_AFTER_VALUE')\n break\n }\n }\n break\n }\n\n case 'INSIDE_ARRAY_AFTER_VALUE': {\n switch (char) {\n case ',': {\n stack.pop()\n stack.push('INSIDE_ARRAY_AFTER_COMMA')\n break\n }\n\n case ']': {\n lastValidIndex = i\n stack.pop()\n break\n }\n\n default: {\n lastValidIndex = i\n break\n }\n }\n\n break\n }\n\n case 'INSIDE_ARRAY_AFTER_COMMA': {\n processValueStart(char, i, 'INSIDE_ARRAY_AFTER_VALUE')\n break\n }\n\n case 'INSIDE_STRING_ESCAPE': {\n stack.pop()\n\n if (char === 'u') {\n unicodeEscapeDigits = 0\n stack.push('INSIDE_STRING_UNICODE_ESCAPE')\n } else {\n lastValidIndex = i\n }\n\n break\n }\n\n case 'INSIDE_STRING_UNICODE_ESCAPE': {\n if (isHexDigit(char)) {\n unicodeEscapeDigits++\n\n if (unicodeEscapeDigits === 4) {\n stack.pop()\n lastValidIndex = i\n }\n }\n\n break\n }\n\n case 'INSIDE_NUMBER': {\n switch (char) {\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9': {\n lastValidIndex = i\n break\n }\n\n case 'e':\n case 'E':\n case '-':\n case '+':\n case '.': {\n break\n }\n\n case ',': {\n stack.pop()\n\n if (stack[stack.length - 1] === 'INSIDE_ARRAY_AFTER_VALUE') {\n processAfterArrayValue(char, i)\n }\n\n if (stack[stack.length - 1] === 'INSIDE_OBJECT_AFTER_VALUE') {\n processAfterObjectValue(char, i)\n }\n\n break\n }\n\n case '}': {\n stack.pop()\n\n if (stack[stack.length - 1] === 'INSIDE_OBJECT_AFTER_VALUE') {\n processAfterObjectValue(char, i)\n }\n\n break\n }\n\n case ']': {\n stack.pop()\n\n if (stack[stack.length - 1] === 'INSIDE_ARRAY_AFTER_VALUE') {\n processAfterArrayValue(char, i)\n }\n\n break\n }\n\n default: {\n stack.pop()\n break\n }\n }\n\n break\n }\n\n case 'INSIDE_LITERAL': {\n const partialLiteral = input.substring(literalStart!, i + 1)\n\n if (\n !'false'.startsWith(partialLiteral) &&\n !'true'.startsWith(partialLiteral) &&\n !'null'.startsWith(partialLiteral)\n ) {\n stack.pop()\n\n if (stack[stack.length - 1] === 'INSIDE_OBJECT_AFTER_VALUE') {\n processAfterObjectValue(char, i)\n } else if (stack[stack.length - 1] === 'INSIDE_ARRAY_AFTER_VALUE') {\n processAfterArrayValue(char, i)\n }\n } else {\n lastValidIndex = i\n }\n\n break\n }\n }\n }\n\n let result = input.slice(0, lastValidIndex + 1)\n\n for (let i = stack.length - 1; i >= 0; i--) {\n const state = stack[i]\n\n switch (state) {\n case 'INSIDE_STRING': {\n result += '\"'\n break\n }\n\n case 'INSIDE_OBJECT_KEY':\n case 'INSIDE_OBJECT_AFTER_KEY':\n case 'INSIDE_OBJECT_AFTER_COMMA':\n case 'INSIDE_OBJECT_START':\n case 'INSIDE_OBJECT_BEFORE_VALUE':\n case 'INSIDE_OBJECT_AFTER_VALUE': {\n result += '}'\n break\n }\n\n case 'INSIDE_ARRAY_START':\n case 'INSIDE_ARRAY_AFTER_COMMA':\n case 'INSIDE_ARRAY_AFTER_VALUE': {\n result += ']'\n break\n }\n\n case 'INSIDE_LITERAL': {\n const partialLiteral = input.substring(literalStart!, input.length)\n\n if ('true'.startsWith(partialLiteral)) {\n result += 'true'.slice(partialLiteral.length)\n } else if ('false'.startsWith(partialLiteral)) {\n result += 'false'.slice(partialLiteral.length)\n } else if ('null'.startsWith(partialLiteral)) {\n result += 'null'.slice(partialLiteral.length)\n }\n }\n }\n }\n\n return result\n}\n","import type { UIMessage, UIMessageChunk } from 'ai'\nimport { parsePartialJSON } from './parse-partial-json.ts'\n\ntype MutablePart = Record<string, unknown>\n\ntype PartialToolCall = {\n text: string\n toolName: string\n dynamic: boolean\n providerExecuted?: boolean\n providerMetadata?: unknown\n toolMetadata?: unknown\n title?: string\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst cloneMessage = <M extends UIMessage>(messageId: string, base?: M): M =>\n (base === undefined\n ? { id: messageId, role: 'assistant', parts: [] }\n : {\n ...base,\n id: messageId,\n parts: base.parts.map((part) => ({ ...part })),\n }) as M\n\nconst currentStepParts = (parts: MutablePart[]): MutablePart[] => {\n let start = parts.length - 1\n while (start >= 0 && parts[start]?.['type'] !== 'step-start') start -= 1\n return parts.slice(start + 1)\n}\n\nconst isToolPart = (part: MutablePart): boolean =>\n typeof part['toolCallId'] === 'string' &&\n (part['type'] === 'dynamic-tool' ||\n (typeof part['type'] === 'string' && part['type'].startsWith('tool-')))\n\nconst findToolPart = (\n parts: MutablePart[],\n toolCallId: string,\n): MutablePart | undefined => {\n const current = currentStepParts(parts).find(\n (part) => isToolPart(part) && part['toolCallId'] === toolCallId,\n )\n if (current) return current\n return parts.findLast(\n (part) => isToolPart(part) && part['toolCallId'] === toolCallId,\n )\n}\n\nconst findApprovalPart = (\n parts: MutablePart[],\n approvalId: string,\n): MutablePart | undefined =>\n parts.find((part) => {\n const approval = part['approval']\n return (\n isToolPart(part) && isRecord(approval) && approval['id'] === approvalId\n )\n })\n\nconst setOptional = (\n target: MutablePart,\n key: string,\n value: unknown,\n): void => {\n if (value !== undefined) target[key] = value\n}\n\nconst setToolPart = (options: {\n parts: MutablePart[]\n toolCallId: string\n toolName: string\n dynamic: boolean\n state: string\n input?: unknown\n rawInput?: unknown\n output?: unknown\n errorText?: string\n preliminary?: boolean | undefined\n providerExecuted?: boolean | undefined\n providerMetadata?: unknown\n toolMetadata?: unknown\n title?: string | undefined\n}): MutablePart => {\n let part = findToolPart(options.parts, options.toolCallId)\n if (!part) {\n part = {\n type: options.dynamic ? 'dynamic-tool' : `tool-${options.toolName}`,\n ...(options.dynamic ? { toolName: options.toolName } : {}),\n toolCallId: options.toolCallId,\n }\n options.parts.push(part)\n }\n\n part['state'] = options.state\n part['input'] = options.input\n delete part['output']\n delete part['rawInput']\n delete part['errorText']\n delete part['preliminary']\n setOptional(part, 'rawInput', options.rawInput)\n setOptional(part, 'output', options.output)\n setOptional(part, 'errorText', options.errorText)\n setOptional(part, 'preliminary', options.preliminary)\n setOptional(part, 'providerExecuted', options.providerExecuted)\n setOptional(part, 'title', options.title)\n setOptional(part, 'toolMetadata', options.toolMetadata)\n if (options.dynamic) part['toolName'] = options.toolName\n if (options.providerMetadata !== undefined) {\n part[\n options.state === 'output-available' || options.state === 'output-error'\n ? 'resultProviderMetadata'\n : 'callProviderMetadata'\n ] = options.providerMetadata\n }\n return part\n}\n\nconst mergeMetadata = (current: unknown, update: unknown): unknown => {\n if (update === undefined || update === null) return current\n return isRecord(current) && isRecord(update)\n ? { ...current, ...update }\n : update\n}\n\nexport type UIMessageCursor = {\n text: Record<string, number>\n reasoning: Record<string, number>\n tools: Record<string, PartialToolCall>\n}\n\nexport function projectUIMessage<M extends UIMessage>(options: {\n messageId: string\n base?: M\n chunks: readonly UIMessageChunk[]\n}): M {\n return projectUIMessageStream(options).message\n}\n\nexport function projectUIMessageStream<M extends UIMessage>(options: {\n messageId: string\n base?: M\n cursor?: UIMessageCursor\n chunks: readonly UIMessageChunk[]\n}): { message: M; cursor: UIMessageCursor } {\n const message = cloneMessage(options.messageId, options.base)\n const record = message as unknown as Record<string, unknown>\n const parts = message.parts as unknown as MutablePart[]\n const activeText = new Map(\n Object.entries(options.cursor?.text ?? {}).map(([id, index]) => [\n id,\n parts[index]!,\n ]),\n )\n const activeReasoning = new Map(\n Object.entries(options.cursor?.reasoning ?? {}).map(([id, index]) => [\n id,\n parts[index]!,\n ]),\n )\n const partialTools = new Map(\n Object.entries(options.cursor?.tools ?? {}).map(([id, partial]) => [\n id,\n { ...partial },\n ]),\n )\n\n for (const chunk of options.chunks) {\n switch (chunk.type) {\n case 'text-start': {\n const part: MutablePart = {\n type: 'text',\n text: '',\n state: 'streaming',\n ...(chunk.providerMetadata === undefined\n ? {}\n : { providerMetadata: chunk.providerMetadata }),\n }\n activeText.set(chunk.id, part)\n parts.push(part)\n break\n }\n case 'text-delta': {\n let part = activeText.get(chunk.id)\n if (!part) {\n part = { type: 'text', text: '', state: 'streaming' }\n activeText.set(chunk.id, part)\n parts.push(part)\n }\n part['text'] =\n `${typeof part['text'] === 'string' ? part['text'] : ''}${chunk.delta}`\n setOptional(part, 'providerMetadata', chunk.providerMetadata)\n break\n }\n case 'text-end': {\n const part = activeText.get(chunk.id)\n if (part) {\n part['state'] = 'done'\n setOptional(part, 'providerMetadata', chunk.providerMetadata)\n activeText.delete(chunk.id)\n }\n break\n }\n case 'reasoning-start': {\n const part: MutablePart = {\n type: 'reasoning',\n text: '',\n state: 'streaming',\n ...(chunk.providerMetadata === undefined\n ? {}\n : { providerMetadata: chunk.providerMetadata }),\n }\n activeReasoning.set(chunk.id, part)\n parts.push(part)\n break\n }\n case 'reasoning-delta': {\n let part = activeReasoning.get(chunk.id)\n if (!part) {\n part = { type: 'reasoning', text: '', state: 'streaming' }\n activeReasoning.set(chunk.id, part)\n parts.push(part)\n }\n part['text'] =\n `${typeof part['text'] === 'string' ? part['text'] : ''}${chunk.delta}`\n setOptional(part, 'providerMetadata', chunk.providerMetadata)\n break\n }\n case 'reasoning-end': {\n const part = activeReasoning.get(chunk.id)\n if (part) {\n part['state'] = 'done'\n setOptional(part, 'providerMetadata', chunk.providerMetadata)\n activeReasoning.delete(chunk.id)\n }\n break\n }\n case 'custom':\n parts.push({\n type: 'custom',\n kind: chunk.kind,\n ...(chunk.providerMetadata === undefined\n ? {}\n : { providerMetadata: chunk.providerMetadata }),\n })\n break\n case 'file':\n case 'reasoning-file':\n parts.push({\n type: chunk.type,\n mediaType: chunk.mediaType,\n url: chunk.url,\n ...(chunk.providerMetadata === undefined\n ? {}\n : { providerMetadata: chunk.providerMetadata }),\n })\n break\n case 'source-url':\n parts.push({\n type: chunk.type,\n sourceId: chunk.sourceId,\n url: chunk.url,\n ...(chunk.title === undefined ? {} : { title: chunk.title }),\n ...(chunk.providerMetadata === undefined\n ? {}\n : { providerMetadata: chunk.providerMetadata }),\n })\n break\n case 'source-document':\n parts.push({\n type: chunk.type,\n sourceId: chunk.sourceId,\n mediaType: chunk.mediaType,\n title: chunk.title,\n ...(chunk.filename === undefined ? {} : { filename: chunk.filename }),\n ...(chunk.providerMetadata === undefined\n ? {}\n : { providerMetadata: chunk.providerMetadata }),\n })\n break\n case 'tool-input-start': {\n partialTools.set(chunk.toolCallId, {\n text: '',\n toolName: chunk.toolName,\n dynamic: chunk.dynamic === true,\n ...(chunk.providerExecuted === undefined\n ? {}\n : { providerExecuted: chunk.providerExecuted }),\n ...(chunk.providerMetadata === undefined\n ? {}\n : { providerMetadata: chunk.providerMetadata }),\n ...(chunk.toolMetadata === undefined\n ? {}\n : { toolMetadata: chunk.toolMetadata }),\n ...(chunk.title === undefined ? {} : { title: chunk.title }),\n })\n setToolPart({\n parts,\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n dynamic: chunk.dynamic === true,\n state: 'input-streaming',\n providerExecuted: chunk.providerExecuted,\n providerMetadata: chunk.providerMetadata,\n toolMetadata: chunk.toolMetadata,\n title: chunk.title,\n })\n break\n }\n case 'tool-input-delta': {\n const partial = partialTools.get(chunk.toolCallId)\n if (!partial) break\n partial.text += chunk.inputTextDelta\n setToolPart({\n parts,\n toolCallId: chunk.toolCallId,\n toolName: partial.toolName,\n dynamic: partial.dynamic,\n state: 'input-streaming',\n input: parsePartialJSON(partial.text),\n providerExecuted: partial.providerExecuted,\n providerMetadata: partial.providerMetadata,\n toolMetadata: partial.toolMetadata,\n title: partial.title,\n })\n break\n }\n case 'tool-input-available':\n setToolPart({\n parts,\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n dynamic: chunk.dynamic === true,\n state: 'input-available',\n input: chunk.input,\n providerExecuted: chunk.providerExecuted,\n providerMetadata: chunk.providerMetadata,\n toolMetadata: chunk.toolMetadata,\n title: chunk.title,\n })\n partialTools.delete(chunk.toolCallId)\n break\n case 'tool-input-error': {\n const existing = findToolPart(parts, chunk.toolCallId)\n const dynamic = existing?.['type'] === 'dynamic-tool' || chunk.dynamic\n setToolPart({\n parts,\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n dynamic: dynamic === true,\n state: 'output-error',\n input: dynamic ? chunk.input : undefined,\n rawInput: dynamic ? undefined : chunk.input,\n errorText: chunk.errorText,\n providerExecuted: chunk.providerExecuted,\n providerMetadata: chunk.providerMetadata,\n toolMetadata: chunk.toolMetadata,\n title: chunk.title,\n })\n partialTools.delete(chunk.toolCallId)\n break\n }\n case 'tool-approval-request': {\n const part = findToolPart(parts, chunk.toolCallId)\n if (!part) break\n part['state'] = 'approval-requested'\n part['approval'] = {\n id: chunk.approvalId,\n ...(chunk.isAutomatic === true ? { isAutomatic: true } : {}),\n ...(chunk.signature === undefined\n ? {}\n : { signature: chunk.signature }),\n }\n break\n }\n case 'tool-approval-response': {\n const part = findApprovalPart(parts, chunk.approvalId)\n if (!part) break\n const approval = isRecord(part['approval']) ? part['approval'] : {}\n part['state'] = 'approval-responded'\n part['approval'] = {\n id: chunk.approvalId,\n approved: chunk.approved,\n ...(chunk.reason === undefined ? {} : { reason: chunk.reason }),\n ...(approval['isAutomatic'] === true ? { isAutomatic: true } : {}),\n ...(typeof approval['signature'] === 'string'\n ? { signature: approval['signature'] }\n : {}),\n }\n setOptional(part, 'providerExecuted', chunk.providerExecuted)\n setOptional(part, 'callProviderMetadata', chunk.providerMetadata)\n break\n }\n case 'tool-output-available': {\n const part = findToolPart(parts, chunk.toolCallId)\n if (!part) break\n setToolPart({\n parts,\n toolCallId: chunk.toolCallId,\n toolName:\n part['type'] === 'dynamic-tool' &&\n typeof part['toolName'] === 'string'\n ? part['toolName']\n : String(part['type']).slice('tool-'.length),\n dynamic: part['type'] === 'dynamic-tool',\n state: 'output-available',\n input: part['input'],\n output: chunk.output,\n preliminary: chunk.preliminary,\n providerExecuted: chunk.providerExecuted,\n providerMetadata: chunk.providerMetadata,\n toolMetadata: chunk.toolMetadata ?? part['toolMetadata'],\n title: typeof part['title'] === 'string' ? part['title'] : undefined,\n })\n break\n }\n case 'tool-output-error': {\n const part = findToolPart(parts, chunk.toolCallId)\n if (!part) break\n setToolPart({\n parts,\n toolCallId: chunk.toolCallId,\n toolName:\n part['type'] === 'dynamic-tool' &&\n typeof part['toolName'] === 'string'\n ? part['toolName']\n : String(part['type']).slice('tool-'.length),\n dynamic: part['type'] === 'dynamic-tool',\n state: 'output-error',\n input: part['input'],\n rawInput: part['rawInput'],\n errorText: chunk.errorText,\n providerExecuted: chunk.providerExecuted,\n providerMetadata: chunk.providerMetadata,\n toolMetadata: chunk.toolMetadata ?? part['toolMetadata'],\n title: typeof part['title'] === 'string' ? part['title'] : undefined,\n })\n break\n }\n case 'tool-output-denied': {\n const part = findToolPart(parts, chunk.toolCallId)\n if (part) part['state'] = 'output-denied'\n break\n }\n case 'start-step':\n parts.push({ type: 'step-start' })\n break\n case 'finish-step':\n activeText.clear()\n activeReasoning.clear()\n break\n case 'start':\n if (\n chunk.messageMetadata !== undefined &&\n chunk.messageMetadata !== null\n ) {\n record['metadata'] = mergeMetadata(\n record['metadata'],\n chunk.messageMetadata,\n )\n }\n break\n case 'finish':\n if (\n chunk.messageMetadata !== undefined &&\n chunk.messageMetadata !== null\n ) {\n record['metadata'] = mergeMetadata(\n record['metadata'],\n chunk.messageMetadata,\n )\n }\n break\n case 'message-metadata':\n if (\n chunk.messageMetadata !== undefined &&\n chunk.messageMetadata !== null\n ) {\n record['metadata'] = mergeMetadata(\n record['metadata'],\n chunk.messageMetadata,\n )\n }\n break\n case 'abort':\n case 'error':\n break\n default: {\n if (!chunk.type.startsWith('data-') || chunk.transient) break\n const existing =\n chunk.id === undefined\n ? undefined\n : parts.find(\n (part) =>\n part['type'] === chunk.type && part['id'] === chunk.id,\n )\n if (existing) existing['data'] = chunk.data\n else\n parts.push({\n type: chunk.type,\n ...(chunk.id === undefined ? {} : { id: chunk.id }),\n data: chunk.data,\n })\n }\n }\n }\n\n const indexes = new Map(parts.map((part, index) => [part, index]))\n return {\n message,\n cursor: {\n text: Object.fromEntries(\n [...activeText].map(([id, part]) => [id, indexes.get(part)!]),\n ),\n reasoning: Object.fromEntries(\n [...activeReasoning].map(([id, part]) => [id, indexes.get(part)!]),\n ),\n tools: Object.fromEntries(partialTools),\n },\n }\n}\n\nexport function pauseUIMessage<M extends UIMessage>(options: {\n message: M\n toolCallIds: ReadonlySet<string>\n}): M {\n const next = structuredClone(options.message)\n next.parts = next.parts.filter(\n (part) =>\n !('toolCallId' in part && !options.toolCallIds.has(part.toolCallId)),\n )\n for (const part of next.parts) {\n if (\n (part.type === 'text' || part.type === 'reasoning') &&\n part.state === 'streaming'\n )\n part.state = 'done'\n }\n return next\n}\n\nexport function interruptUIMessage<M extends UIMessage>(\n message: M,\n toolError = 'Tool execution was interrupted.',\n): M {\n const next = structuredClone(message)\n next.parts = next.parts.filter((value) => {\n const part = value as unknown as MutablePart\n return !isToolPart(part) || part['state'] !== 'input-streaming'\n })\n for (const value of next.parts as unknown as MutablePart[]) {\n if (value['type'] === 'text' || value['type'] === 'reasoning') {\n if (value['state'] === 'streaming') value['state'] = 'done'\n continue\n }\n if (!isToolPart(value)) continue\n const state = value['state']\n if (state === 'approval-responded') {\n const approval = value['approval']\n if (isRecord(approval) && approval['approved'] === false) {\n value['state'] = 'output-denied'\n continue\n }\n }\n if (state === 'output-available' && value['preliminary'] === true) {\n delete value['output']\n delete value['preliminary']\n value['state'] = 'output-error'\n value['errorText'] = toolError\n continue\n }\n if (\n state === 'input-available' ||\n state === 'approval-requested' ||\n state === 'approval-responded'\n ) {\n if (state === 'approval-requested') delete value['approval']\n value['state'] = 'output-error'\n value['errorText'] = toolError\n }\n }\n return next\n}\n","import type { UIMessageChunk } from 'ai'\n\nexport type ProgressBatch = { index: number; chunks: UIMessageChunk[] }\ntype BatchBlock = ProgressBatch[] | { left: BatchBlock; right: BatchBlock }\n\nexport type ProgressBatches = {\n length: number\n tail: ProgressBatch[]\n blocks: Array<BatchBlock | null>\n}\n\nconst PAGE_SIZE = 64\n\nexport const appendProgressBatch = ({\n batches,\n batch,\n}: {\n batches: ProgressBatches\n batch: ProgressBatch\n}): ProgressBatches => {\n if (batches.tail.length < PAGE_SIZE)\n return {\n ...batches,\n length: batches.length + 1,\n tail: [...batches.tail, batch],\n }\n\n const blocks = [...batches.blocks]\n let block: BatchBlock = batches.tail\n let level = 0\n for (;;) {\n const left = blocks[level]\n if (left == null) break\n block = { left, right: block }\n blocks[level] = null\n level += 1\n }\n blocks[level] = block\n return { length: batches.length + 1, tail: [batch], blocks }\n}\n\nexport const progressBatches = (\n items: readonly ProgressBatch[] = [],\n): ProgressBatches => {\n let batches: ProgressBatches = { length: 0, tail: [], blocks: [] }\n for (const batch of items) batches = appendProgressBatch({ batches, batch })\n return batches\n}\n\nexport const flattenProgressBatches = (\n batches: ProgressBatches,\n): ProgressBatch[] => {\n const items: ProgressBatch[] = []\n const visit = (block: BatchBlock): void => {\n if (Array.isArray(block)) items.push(...block)\n else {\n visit(block.left)\n visit(block.right)\n }\n }\n // Level n holds 2^n completed pages; higher levels contain older batches.\n for (let level = batches.blocks.length - 1; level >= 0; level -= 1) {\n const block = batches.blocks[level]\n if (block) visit(block)\n }\n items.push(...batches.tail)\n return items\n}\n","import type { UIMessage, UIMessageChunk } from 'ai'\nimport type {\n ActiveGenerationProjection,\n AIState,\n ApprovalRequestedPayload,\n ApprovalRespondedPayload,\n ToolCalledPayload,\n ToolResultPayload,\n ToolActivity,\n} from './ai.ts'\nimport {\n type UIMessageCursor,\n projectUIMessageStream,\n interruptUIMessage,\n} from './ai-projector.ts'\nimport {\n flattenProgressBatches,\n appendProgressBatch,\n progressBatches,\n type ProgressBatches,\n} from './ai-progress-batches.ts'\n\nexport type MessageProjection<M extends UIMessage> = Omit<\n ActiveGenerationProjection<M>,\n 'baseTools'\n>\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nexport const upsertMessage = <M extends UIMessage>(\n messages: M[],\n message: M,\n): M[] => {\n const index = messages.findIndex((candidate) => candidate.id === message.id)\n if (index === -1) return [...messages, message]\n const next = [...messages]\n next[index] = message\n return next\n}\n\nexport const upsertResponse = <M extends UIMessage>(options: {\n messages: M[]\n message: M\n inputId: string\n}): M[] => {\n const { messages, message, inputId } = options\n if (messages.some((item) => item.id === message.id))\n return upsertMessage(messages, message)\n const inputIndex = messages.findIndex((item) => item.id === inputId)\n if (inputIndex === -1) return [...messages, message]\n return [\n ...messages.slice(0, inputIndex + 1),\n message,\n ...messages.slice(inputIndex + 1),\n ]\n}\n\nexport const answerApproval = <M extends UIMessage>(\n messages: M[],\n response: ApprovalRespondedPayload,\n): M[] =>\n messages.map((message) => {\n if (message.id !== response.messageId) return message\n let changed = false\n const parts = message.parts.map((part) => {\n const candidate = part as unknown\n if (\n !isRecord(candidate) ||\n candidate['state'] !== 'approval-requested' ||\n !isRecord(candidate['approval']) ||\n candidate['approval']['id'] !== response.approvalId\n ) {\n return part\n }\n changed = true\n return {\n ...part,\n state: 'approval-responded',\n approval: {\n ...candidate['approval'],\n approved: response.approved,\n ...(response.reason === undefined ? {} : { reason: response.reason }),\n },\n } as typeof part\n })\n return changed ? ({ ...message, parts } as M) : message\n })\n\nexport const approvalRequestedChunk = (\n payload: ApprovalRequestedPayload,\n): UIMessageChunk => ({\n type: 'tool-approval-request',\n approvalId: payload.approvalId,\n toolCallId: payload.toolCallId,\n ...(payload.isAutomatic === undefined\n ? {}\n : { isAutomatic: payload.isAutomatic }),\n ...(payload.signature === undefined ? {} : { signature: payload.signature }),\n})\n\nexport const approvalRespondedChunk = (\n payload: ApprovalRespondedPayload,\n): UIMessageChunk => ({\n type: 'tool-approval-response',\n approvalId: payload.approvalId,\n approved: payload.approved,\n ...(payload.reason === undefined ? {} : { reason: payload.reason }),\n})\n\nexport const toolResultChunk = (payload: ToolResultPayload): UIMessageChunk => {\n if (payload.phase === 'input') {\n return {\n type: 'tool-input-error',\n toolCallId: payload.toolCallId,\n toolName: payload.toolName ?? 'unknown',\n input: payload.rawInput ?? payload.input,\n errorText: payload.error ?? 'Invalid tool input',\n ...(payload.dynamic === undefined ? {} : { dynamic: payload.dynamic }),\n ...(payload.providerExecuted === undefined\n ? {}\n : { providerExecuted: payload.providerExecuted }),\n ...(payload.providerMetadata === undefined\n ? {}\n : { providerMetadata: payload.providerMetadata }),\n ...(payload.toolMetadata === undefined\n ? {}\n : { toolMetadata: payload.toolMetadata }),\n } as UIMessageChunk\n }\n if (payload.denied === true) {\n return {\n type: 'tool-output-denied',\n toolCallId: payload.toolCallId,\n } as UIMessageChunk\n }\n if (payload.error !== undefined) {\n return {\n type: 'tool-output-error',\n toolCallId: payload.toolCallId,\n errorText: payload.error,\n ...(payload.dynamic === undefined ? {} : { dynamic: payload.dynamic }),\n ...(payload.providerExecuted === undefined\n ? {}\n : { providerExecuted: payload.providerExecuted }),\n ...(payload.providerMetadata === undefined\n ? {}\n : { providerMetadata: payload.providerMetadata }),\n ...(payload.toolMetadata === undefined\n ? {}\n : { toolMetadata: payload.toolMetadata }),\n } as UIMessageChunk\n }\n return {\n type: 'tool-output-available',\n toolCallId: payload.toolCallId,\n output: payload.output,\n ...(payload.preliminary === undefined\n ? {}\n : { preliminary: payload.preliminary }),\n ...(payload.dynamic === undefined ? {} : { dynamic: payload.dynamic }),\n ...(payload.providerExecuted === undefined\n ? {}\n : { providerExecuted: payload.providerExecuted }),\n ...(payload.providerMetadata === undefined\n ? {}\n : { providerMetadata: payload.providerMetadata }),\n ...(payload.toolMetadata === undefined\n ? {}\n : { toolMetadata: payload.toolMetadata }),\n } as UIMessageChunk\n}\n\nexport const projectedMessageStream = <M extends UIMessage>(\n projection: MessageProjection<M>,\n): { message: M; cursor: UIMessageCursor } => {\n const projectionEvents = flattenProgressBatches(projection.batches)\n for (const event of projection.toolEvents) {\n if (event.type === 'ai.tool.result') {\n projectionEvents.push({\n index: event.index,\n chunks: [toolResultChunk(event.payload)],\n })\n }\n }\n for (const event of projection.approvalEvents) {\n projectionEvents.push({\n index: event.index,\n chunks: [\n event.type === 'ai.approval.requested'\n ? approvalRequestedChunk(event.payload)\n : approvalRespondedChunk(event.payload),\n ],\n })\n }\n return projectUIMessageStream({\n messageId: projection.responseMessageId,\n ...(projection.baseMessage === undefined\n ? {}\n : { base: projection.baseMessage }),\n chunks: projectionEvents\n .toSorted((left, right) => left.index - right.index)\n .flatMap((event) => event.chunks),\n })\n}\n\nexport const projectedMessage = <M extends UIMessage>(\n projection: MessageProjection<M>,\n): M => projectedMessageStream(projection).message\n\nexport const reduceToolActivity = (\n tools: ToolActivity[],\n event:\n | { type: 'ai.tool.called'; payload: ToolCalledPayload }\n | { type: 'ai.tool.result'; payload: ToolResultPayload },\n): ToolActivity[] => {\n if (event.type === 'ai.tool.called') {\n const payload = event.payload\n const { providerMetadata, ...called } = payload\n const activity: ToolActivity = {\n ...called,\n ...(providerMetadata === undefined\n ? {}\n : { callProviderMetadata: providerMetadata }),\n status: 'running',\n }\n return [\n ...tools.filter(\n (candidate) =>\n candidate.generationId !== payload.generationId ||\n candidate.toolCallId !== payload.toolCallId,\n ),\n activity,\n ]\n }\n\n const payload = event.payload\n const existing = tools.find(\n (candidate) =>\n candidate.generationId === payload.generationId &&\n candidate.toolCallId === payload.toolCallId,\n )\n const toolName = payload.toolName ?? existing?.toolName\n const input = payload.input === undefined ? existing?.input : payload.input\n const dynamic = payload.dynamic ?? existing?.dynamic\n const providerExecuted =\n payload.providerExecuted ?? existing?.providerExecuted\n const toolMetadata = payload.toolMetadata ?? existing?.toolMetadata\n const resultProviderMetadata =\n payload.providerMetadata ?? existing?.resultProviderMetadata\n const activity: ToolActivity = {\n requestId: payload.requestId,\n messageId: payload.messageId,\n generationId: payload.generationId,\n toolCallId: payload.toolCallId,\n ...(toolName === undefined ? {} : { toolName }),\n ...(input === undefined ? {} : { input }),\n ...(payload.rawInput === undefined ? {} : { rawInput: payload.rawInput }),\n ...(payload.output === undefined ? {} : { output: payload.output }),\n ...(payload.error === undefined ? {} : { error: payload.error }),\n ...(payload.preliminary === undefined\n ? {}\n : { preliminary: payload.preliminary }),\n ...(payload.phase === undefined ? {} : { phase: payload.phase }),\n ...(dynamic === undefined ? {} : { dynamic }),\n ...(providerExecuted === undefined ? {} : { providerExecuted }),\n ...(existing?.callProviderMetadata === undefined\n ? {}\n : { callProviderMetadata: existing.callProviderMetadata }),\n ...(resultProviderMetadata === undefined ? {} : { resultProviderMetadata }),\n ...(toolMetadata === undefined ? {} : { toolMetadata }),\n ...(existing?.title === undefined ? {} : { title: existing.title }),\n status: payload.denied\n ? 'denied'\n : payload.error\n ? 'failed'\n : payload.preliminary\n ? 'running'\n : 'completed',\n }\n return [\n ...tools.filter(\n (candidate) =>\n candidate.generationId !== payload.generationId ||\n candidate.toolCallId !== payload.toolCallId,\n ),\n activity,\n ]\n}\n\nexport const advanceProjection = <M extends UIMessage>({\n projection,\n base,\n chunks,\n index,\n}: {\n projection: MessageProjection<M>\n base: M | undefined\n chunks: UIMessageChunk[]\n index: number\n}): {\n message: M\n batches: ProgressBatches\n cursor: NonNullable<MessageProjection<M>['cursor']>\n} => {\n const ordered = index > (projection.batches.tail.at(-1)?.index ?? -1)\n const batches = ordered\n ? appendProgressBatch({\n batches: projection.batches,\n batch: { index, chunks },\n })\n : progressBatches(\n [\n ...flattenProgressBatches(projection.batches).filter(\n (batch) => batch.index !== index,\n ),\n { index, chunks },\n ].toSorted((left, right) => left.index - right.index),\n )\n const incremental =\n base !== undefined &&\n projection.cursor != null &&\n index > projection.cursor.throughIndex\n const projected = incremental\n ? projectUIMessageStream({\n messageId: projection.responseMessageId,\n base,\n cursor: projection.cursor!.stream,\n chunks,\n })\n : projectedMessageStream({ ...projection, batches })\n return {\n message: projected.message,\n batches,\n cursor: {\n throughIndex: incremental\n ? index\n : Math.max(\n index,\n batches.tail.at(-1)?.index ?? 0,\n projection.toolEvents.reduce(\n (latest, event) => Math.max(latest, event.index),\n 0,\n ),\n projection.approvalEvents.reduce(\n (latest, event) => Math.max(latest, event.index),\n 0,\n ),\n ),\n stream: projected.cursor,\n },\n }\n}\n\nexport const projectedTools = <M extends UIMessage>(\n projection: ActiveGenerationProjection<M>,\n): ToolActivity[] =>\n projection.toolEvents.reduce(\n (tools, event) => reduceToolActivity(tools, event),\n projection.baseTools,\n )\n\nexport const restoreGenerationBase = <M extends UIMessage>(\n state: AIState<M>,\n generationId: string,\n responseMessageId: string,\n reason: 'interrupted' | 'superseded' | 'failed',\n): AIState<M> => {\n const projection =\n state.activeProjection?.generationId === generationId\n ? state.activeProjection\n : null\n return {\n ...state,\n messages:\n projection?.baseMessage === undefined\n ? state.messages.filter((message) => message.id !== responseMessageId)\n : upsertMessage(state.messages, projection.baseMessage),\n tools:\n projection === null\n ? state.tools.filter(\n (activity) => activity.generationId !== generationId,\n )\n : projection.baseTools,\n pendingApprovals: state.pendingApprovals.filter(\n (approval) => approval.generationId !== generationId,\n ),\n pendingInputs: state.pendingInputs.filter(\n (input) => input.generationId !== generationId,\n ),\n activeGeneration: null,\n activeProjection: null,\n terminalGenerations: {\n ...state.terminalGenerations,\n [generationId]: reason,\n },\n compaction:\n projection === null\n ? state.compaction?.generationId === generationId\n ? null\n : state.compaction\n : (projection.baseCompaction ?? null),\n }\n}\n\nexport const stopGenerationTools = (\n tools: ToolActivity[],\n generationId: string | undefined,\n responseMessageId: string,\n error: string,\n): ToolActivity[] =>\n tools.map((activity) =>\n activity.status === 'running' &&\n (generationId === undefined\n ? activity.messageId === responseMessageId\n : activity.generationId === generationId)\n ? { ...activity, status: 'failed', error, preliminary: false }\n : activity,\n )\n\nexport const interruptGenerationProjection = <M extends UIMessage>(\n state: AIState<M>,\n generationId: string,\n responseMessageId: string,\n cutoff: number,\n): AIState<M> | null => {\n const projection =\n state.activeProjection?.generationId === generationId\n ? state.activeProjection\n : null\n if (projection === null) return null\n const retained: ActiveGenerationProjection<M> = {\n ...projection,\n batches: progressBatches(\n flattenProgressBatches(projection.batches).filter(\n (batch) => batch.index <= cutoff,\n ),\n ),\n toolEvents: projection.toolEvents.filter(\n (toolEvent) => toolEvent.index <= cutoff,\n ),\n approvalEvents: projection.approvalEvents.filter(\n (approvalEvent) => approvalEvent.index <= cutoff,\n ),\n }\n const shouldProject =\n retained.baseMessage !== undefined || retained.batches.length > 0\n const restored = restoreGenerationBase(\n state,\n generationId,\n responseMessageId,\n 'interrupted',\n )\n return {\n ...restored,\n messages: shouldProject\n ? upsertMessage(\n state.messages,\n interruptUIMessage(projectedMessage(retained)),\n )\n : restored.messages,\n tools: stopGenerationTools(\n projectedTools(retained),\n generationId,\n responseMessageId,\n 'Tool execution was interrupted.',\n ),\n usage:\n projection.completionIndex === undefined ||\n projection.completionIndex <= cutoff\n ? restored.usage\n : restored.usage.filter((entry) => entry.generationId !== generationId),\n }\n}\n","import type { UIMessage } from 'ai'\nimport type { AIState } from './ai.ts'\nimport type { ControlCommand, InboxItem } from './ai-control.ts'\nimport { interruptGenerationProjection } from './ai-message-projection.ts'\n\nexport type QueueCommand<M extends UIMessage> = Extract<\n ControlCommand<M>,\n {\n action:\n | 'send'\n | 'edit'\n | 'move'\n | 'remove'\n | 'send-now'\n | 'steer'\n | 'pause'\n | 'resume'\n | 'stop'\n }\n>\nexport type PendingQueueCommand<M extends UIMessage> = {\n commandId: string\n command: QueueCommand<M>\n}\n\nexport const isQueueCommand = <M extends UIMessage>(\n command: ControlCommand<M>,\n): command is QueueCommand<M> =>\n command.action === 'send' ||\n command.action === 'edit' ||\n command.action === 'move' ||\n command.action === 'remove' ||\n command.action === 'send-now' ||\n command.action === 'steer' ||\n command.action === 'pause' ||\n command.action === 'resume' ||\n command.action === 'stop'\n\nconst moveItem = <M extends UIMessage>({\n items,\n inputId,\n beforeId,\n}: {\n items: InboxItem<M>[]\n inputId: string\n beforeId: string | null\n}): InboxItem<M>[] => {\n const from = items.findIndex((item) => item.id === inputId)\n if (\n from < 0 ||\n inputId === beforeId ||\n (beforeId !== null && !items.some((item) => item.id === beforeId))\n )\n return items\n const next = [...items]\n const [item] = next.splice(from, 1)\n const to =\n beforeId === null\n ? next.length\n : next.findIndex((entry) => entry.id === beforeId)\n next.splice(to, 0, item!)\n return next\n}\n\nexport function projectAIClientState<M extends UIMessage>(\n state: AIState<M>,\n): AIState<M> {\n const pending = state.pendingQueueCommands ?? []\n if (state.status === 'closed') return state\n if (\n pending.length === 0 &&\n !state.inbox.items.some((item) => item.afterStepOf !== undefined)\n )\n return state\n let messages = state.messages\n let { items, paused } = state.inbox\n let turnId = state.active?.turnId ?? null\n let starting = false\n let suspended =\n state.active?.phase === 'paused' || state.active?.phase === 'pausing'\n let messageIds: Set<string> | undefined\n const show = (message: M): void => {\n messageIds ??= new Set(messages.map((item) => item.id))\n if (messageIds.has(message.id)) return\n if (messages === state.messages) messages = state.messages.slice()\n messages.push(message)\n messageIds.add(message.id)\n }\n const admit = (): void => {\n if (turnId !== null || paused || items.length === 0) return\n let count = 0\n for (const item of items) {\n count += 1\n show(item.message)\n if (item.generate) {\n turnId = item.id\n starting = true\n suspended = false\n break\n }\n }\n if (count > 0) items = items.slice(count)\n }\n for (const { command } of pending) {\n switch (command.action) {\n case 'send':\n case 'steer': {\n if (\n items.some((item) => item.id === command.message.id) ||\n turnId === command.message.id\n )\n break\n const item = {\n ...(command.action === 'steer'\n ? { afterStepOf: command.turnId }\n : {}),\n id: command.message.id,\n message: command.message,\n generate:\n command.message.role === 'user' &&\n (command.action === 'steer' || command.generate !== false),\n }\n items = command.action === 'steer' ? [item, ...items] : [...items, item]\n break\n }\n case 'edit':\n items = items.map((item) =>\n item.id === command.message.id &&\n item.message.role === command.message.role\n ? { ...item, message: command.message }\n : item,\n )\n break\n case 'move':\n items = moveItem({\n items,\n inputId: command.inputId,\n beforeId: command.beforeId,\n })\n break\n case 'remove':\n items = items.filter((item) => item.id !== command.inputId)\n break\n case 'send-now': {\n if (turnId !== command.turnId) break\n const selected = items.find((item) => item.id === command.inputId)\n if (!selected || selected.message.role !== 'user') break\n items = items.map((item) =>\n item.id === selected.id\n ? {\n ...item,\n generate: true,\n ...(turnId === null ? {} : { afterStepOf: turnId }),\n }\n : item,\n )\n items = moveItem({\n items,\n inputId: command.inputId,\n beforeId: items[0]?.id ?? null,\n })\n break\n }\n case 'pause':\n paused = true\n if (command.when === 'now') suspended = true\n break\n case 'resume':\n paused = false\n suspended = false\n break\n case 'stop':\n continue\n }\n admit()\n }\n items = items.filter((item) => {\n if (item.afterStepOf === undefined) return true\n show(item.message)\n return false\n })\n const displayed = {\n ...state,\n messages,\n inbox: { items, paused },\n starting: starting && !suspended,\n }\n const stop = pending.find(\n ({ command }) =>\n command.action === 'stop' && command.turnId === state.active?.turnId,\n )?.command\n if (stop?.action !== 'stop') return displayed\n const projection = state.activeProjection\n const stopped =\n projection === null\n ? displayed\n : (interruptGenerationProjection(\n displayed,\n projection.generationId,\n projection.responseMessageId,\n stop.lastSeenIndex ?? Number.POSITIVE_INFINITY,\n ) ?? displayed)\n return {\n ...stopped,\n active: null,\n status: paused ? 'paused' : 'idle',\n starting: false,\n activeGeneration: null,\n activeRequestId: null,\n activeRequestReason: null,\n activeRequestSourceGenerationId: null,\n activeResponseMessageId: null,\n pendingApprovals: [],\n pendingInputs: [],\n error: null,\n }\n}\n","import type {\n AIControlState,\n ControlCommit,\n ControlChange,\n} from './ai-control.ts'\nimport type { UIMessage } from 'ai'\n\ntype RecordValue = Record<string, unknown> | unknown[]\nconst container = (value: unknown): value is RecordValue =>\n typeof value === 'object' && value !== null\nconst same = (left: unknown, right: unknown): boolean =>\n JSON.stringify(left) === JSON.stringify(right)\n\nexport const controlChanges = ({\n before,\n after,\n}: {\n before: unknown\n after: unknown\n}): ControlChange[] => {\n const changes: ControlChange[] = []\n const visit = (\n left: unknown,\n right: unknown,\n path: (string | number)[],\n ): void => {\n if (same(left, right)) return\n if (Array.isArray(left) && Array.isArray(right)) {\n let prefix = 0\n while (\n prefix < Math.min(left.length, right.length) &&\n same(left[prefix], right[prefix])\n )\n prefix += 1\n let suffix = 0\n while (\n suffix < Math.min(left.length, right.length) - prefix &&\n same(left[left.length - 1 - suffix], right[right.length - 1 - suffix])\n )\n suffix += 1\n if (left.length === right.length) {\n for (let index = prefix; index < left.length - suffix; index += 1)\n visit(left[index], right[index], [...path, index])\n } else\n changes.push({\n path,\n splice: {\n index: prefix,\n deleteCount: left.length - prefix - suffix,\n items: right.slice(prefix, right.length - suffix),\n },\n })\n return\n }\n if (\n container(left) &&\n container(right) &&\n !Array.isArray(left) &&\n !Array.isArray(right)\n ) {\n if (Object.keys(right).length === 0) {\n changes.push({ path, value: right })\n return\n }\n for (const key of Object.keys(left))\n if (!Object.hasOwn(right, key))\n changes.push({ path: [...path, key], remove: true })\n for (const key of Object.keys(right))\n visit(Object.hasOwn(left, key) ? left[key] : undefined, right[key], [\n ...path,\n key,\n ])\n return\n }\n changes.push({ path, value: right })\n }\n visit(before, after, [])\n return changes\n}\n\nexport const applyControlChanges = <T>({\n state,\n changes,\n}: {\n state: T\n changes: readonly ControlChange[]\n}): T => {\n if (changes.length === 0) return state\n let next = structuredClone(state)\n for (const change of changes) {\n const path = change.path\n if (path.length === 0) {\n next = structuredClone(change.value) as T\n continue\n }\n let target: unknown = next\n for (const key of path.slice(0, -1)) {\n if (!container(target) || !Object.hasOwn(target, key))\n throw new TypeError('Invalid AI control change path')\n target = (target as Record<string | number, unknown>)[key]\n }\n if (!container(target))\n throw new TypeError('Invalid AI control change target')\n const parent = target as Record<string | number, unknown>\n const key = path.at(-1)!\n if (change.remove) delete parent[key]\n else if (change.splice) {\n const items = parent[key] as unknown[]\n Object.defineProperty(parent, key, {\n value: [\n ...items.slice(0, change.splice.index),\n ...structuredClone(change.splice.items),\n ...items.slice(change.splice.index + change.splice.deleteCount),\n ],\n enumerable: true,\n configurable: true,\n writable: true,\n })\n } else if (change.move) {\n const items = parent[key] as unknown[]\n const [item] = items.splice(change.move.from, 1)\n items.splice(change.move.to, 0, item)\n } else\n Object.defineProperty(parent, key, {\n value: structuredClone(change.value),\n enumerable: true,\n configurable: true,\n writable: true,\n })\n }\n return next\n}\n\nexport const controlCommit = <M extends UIMessage>(options: {\n before: AIControlState<M>\n after: AIControlState<M>\n moves: ControlChange[]\n}): ControlCommit => {\n const active = options.after.active\n const response = options.after.coordinator.response\n return {\n changes: [\n ...options.moves,\n ...controlChanges({ before: options.before, after: options.after }),\n ],\n view: {\n turnId: active?.turnId ?? null,\n version: active?.version ?? null,\n phase: active?.phase ?? null,\n paused: options.after.inbox.paused,\n closed: options.after.coordinator.closed,\n requestId: response?.activeRequestId ?? null,\n requestReason: response?.requestReason ?? null,\n sourceGenerationId: response?.sourceGenerationId ?? null,\n responseMessageId: response?.responseMessageId ?? null,\n },\n }\n}\n","import type { UIMessage } from 'ai'\nimport type { AICoordinatorState } from './ai-coordinator.ts'\nimport type {\n ApprovalRespondedPayload,\n GenerationStartedPayload,\n GenerationReason,\n InputRequestedPayload,\n InputRespondedPayload,\n MessageInterruptedPayload,\n RetryRequestedPayload,\n ToolCalledPayload,\n ToolResultPayload,\n} from './ai.ts'\n\nexport type InboxItem<M extends UIMessage = UIMessage> = {\n id: string\n message: M\n generate: boolean\n afterStepOf?: string\n}\n\nexport type ControlCommand<M extends UIMessage = UIMessage> =\n | { action: 'send'; message: M; generate?: boolean }\n | { action: 'edit'; message: M }\n | { action: 'move'; inputId: string; beforeId: string | null }\n | { action: 'remove'; inputId: string }\n | {\n action: 'send-now'\n inputId: string\n turnId: string | null\n lastSeenIndex?: number\n }\n | { action: 'stop'; turnId: string; lastSeenIndex?: number }\n | { action: 'steer'; turnId: string; message: M; lastSeenIndex?: number }\n | { action: 'pause'; when: 'now' | 'after-turn' }\n | { action: 'resume' }\n | { action: 'tool-result'; result: ToolResultPayload }\n | { action: 'approval'; response: ApprovalRespondedPayload }\n | { action: 'input'; response: InputRespondedPayload }\n | { action: 'request-input'; request: InputRequestedPayload }\n | { action: 'retry'; request: RetryRequestedPayload }\n | { action: 'interrupt'; request: MessageInterruptedPayload }\n\nexport type ControlReceipt = {\n commandId: string\n work?: true\n outcome: 'applied' | 'rejected'\n reason?:\n | 'not-pending'\n | 'role-mismatch'\n | 'stale-turn'\n | 'not-found'\n | 'closed'\n | 'stale-work'\n | 'not-user-input'\n}\n\nexport type ActiveTurn<M extends UIMessage = UIMessage> = {\n turnId: string\n input: InboxItem<M>\n phase:\n | 'starting'\n | 'generating'\n | 'tools'\n | 'waiting'\n | 'failed'\n | 'pausing'\n | 'paused'\n}\n\nexport type ControlWork = {\n id: string\n version: number\n settled: boolean\n attempt?: number\n facts?: string[]\n}\n\nexport type AIControlState<M extends UIMessage = UIMessage> = {\n pendingStops: Record<string, string>\n inbox: { paused: boolean; items: InboxItem<M>[] }\n active:\n | (ActiveTurn<M> & {\n version: number\n suspended: boolean\n model: ControlWork | null\n })\n | null\n coordinator: AICoordinatorState\n}\n\nexport type WorkFact = { type: string; id: string; payload: unknown }\nexport type WorkReport = {\n attempt: number\n workId: string\n turnId: string\n version: number\n kind: 'model' | 'tool'\n settled: boolean\n events: WorkFact[]\n}\n\nexport type ToolExecutionRequest = {\n turnId: string\n version: number\n call: ToolCalledPayload\n generation: GenerationStartedPayload\n}\n\nexport const initialControlState = <\n M extends UIMessage,\n>(): AIControlState<M> => ({\n pendingStops: {},\n inbox: { paused: false, items: [] },\n active: null,\n coordinator: { closed: false, queued: [] },\n})\n\nexport type ControlChange = {\n path: (string | number)[]\n value?: unknown\n remove?: true\n splice?: { index: number; deleteCount: number; items: unknown[] }\n move?: { from: number; to: number }\n}\n\nexport type ControlCommit = {\n changes: ControlChange[]\n view: {\n turnId: string | null\n version: number | null\n phase: ActiveTurn['phase'] | null\n paused: boolean\n closed: boolean\n requestId: string | null\n requestReason: GenerationReason | null\n sourceGenerationId: string | null\n responseMessageId: string | null\n }\n}\n","import { idempotentId } from './idempotent-id.ts'\n\nexport const AI_EVENT_ID_PREFIX = 'a2.ai:'\n\nexport const aiEventId = async (...parts: string[]): Promise<string> =>\n `${AI_EVENT_ID_PREFIX}${await idempotentId(...parts)}`\n","import type { UIMessage } from 'ai'\nimport type { AIState } from './ai.ts'\nimport type { MessageProjection } from './ai-message-projection.ts'\nimport type { EventDefs } from './contract.ts'\nimport { clientStateProjection, type Reducer } from './reducer.ts'\nimport { validateSync } from './validate.ts'\n\ntype Value =\n null | boolean | number | string | Value[] | { [key: string]: Value }\ntype Payload = { value?: unknown }\ntype Undo =\n | { value: Value }\n | { length: number; items: Record<string, Undo> }\n | { fields: Record<string, Undo>; remove: string[] }\n\ntype Projection = {\n fields: Value\n hasMessage: boolean\n message?: Undo\n tools?: Undo\n}\n\nexport type AIStoredState = {\n version: 2\n fields: Value\n projection: Projection | null\n values: Payload[]\n}\n\nexport type AIStoredView = {\n messages: UIMessage[]\n activeProjection:\n (MessageProjection<UIMessage> & { baseTools?: AIState['tools'] }) | null\n tools?: AIState['tools']\n usage?: AIState['usage']\n}\n\nexport const aiStateReducer: unique symbol = Symbol('a2.ai.stateReducer')\n\nexport type AIStoredReducer<\n D extends EventDefs,\n S extends AIStoredView,\n> = Reducer<D, AIStoredState, Record<never, never>, S> & {\n readonly [aiStateReducer]: Reducer<D, S>\n view(state: AIStoredState): S\n fromView(state: S): AIStoredState\n}\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst hasKeys = (\n value: unknown,\n { required, optional = [] }: { required: string[]; optional?: string[] },\n): value is Record<string, unknown> =>\n isRecord(value) &&\n required.every((key) => Object.hasOwn(value, key)) &&\n Object.keys(value).every(\n (key) => required.includes(key) || optional.includes(key),\n )\n\nconst reference = (value: Value): number | undefined => {\n if (!isRecord(value) || !Object.hasOwn(value, '$a2Value')) return undefined\n const id = value['$a2Value']\n if (\n typeof id !== 'number' ||\n !Number.isSafeInteger(id) ||\n id < 0 ||\n Object.keys(value).length !== 1\n )\n throw new TypeError('invalid AI payload reference')\n return id\n}\n\nconst payloadFields = new Set([\n 'input',\n 'output',\n 'rawInput',\n 'metadata',\n 'providerMetadata',\n 'callProviderMetadata',\n 'resultProviderMetadata',\n 'toolMetadata',\n 'data',\n])\n\nconst keyFor = (value: unknown): string =>\n value === undefined ? 'undefined' : JSON.stringify(value)\n\nconst sameValue = (left: unknown, right: unknown): boolean => {\n if (Object.is(left, right)) return true\n if (\n typeof left !== 'object' ||\n left === null ||\n typeof right !== 'object' ||\n right === null\n )\n return false\n const prototype = Object.getPrototypeOf(left)\n if (\n prototype !== Object.getPrototypeOf(right) ||\n (prototype !== Object.prototype &&\n prototype !== Array.prototype &&\n prototype !== null)\n )\n return false\n if (\n Array.isArray(left) &&\n (!Array.isArray(right) || left.length !== right.length)\n )\n return false\n const keys = Reflect.ownKeys(left)\n return (\n keys.length === Reflect.ownKeys(right).length &&\n keys.every(\n (key) =>\n Object.hasOwn(right, key) &&\n sameValue(Reflect.get(left, key), Reflect.get(right, key)),\n )\n )\n}\n\nconst restore = (current: Value, undo: Undo | undefined): Value => {\n if (undo === undefined) return current\n if (!isRecord(undo)) throw new TypeError('invalid AI recovery change')\n if ('value' in undo) {\n if (!hasKeys(undo, { required: ['value'] }))\n throw new TypeError('invalid AI replacement recovery')\n return undo.value\n }\n if ('length' in undo) {\n if (\n !hasKeys(undo, { required: ['length', 'items'] }) ||\n !Number.isSafeInteger(undo.length) ||\n undo.length < 0 ||\n undo.length > 0xffffffff ||\n !isRecord(undo.items) ||\n !Array.isArray(current)\n )\n throw new TypeError('invalid AI array recovery')\n const items = Object.entries(undo.items)\n let added = 0\n for (const [key, patch] of items) {\n const index = Number(key)\n if (\n !Number.isSafeInteger(index) ||\n index < 0 ||\n index >= undo.length ||\n String(index) !== key ||\n patch === undefined\n )\n throw new TypeError('invalid AI array recovery index')\n if (index >= current.length) added += 1\n }\n if (added !== Math.max(0, undo.length - current.length))\n throw new TypeError('incomplete AI array recovery')\n const result = current.slice(0, undo.length)\n result.length = undo.length\n for (const [index, patch] of items)\n result[Number(index)] = restore(current[Number(index)] ?? null, patch)\n return result\n }\n if (\n !hasKeys(undo, { required: ['fields', 'remove'] }) ||\n !isRecord(undo.fields) ||\n !Array.isArray(undo.remove) ||\n Object.keys(undo.remove).length !== undo.remove.length ||\n Array.from(undo.remove).some((key) => typeof key !== 'string') ||\n new Set(undo.remove).size !== undo.remove.length ||\n !isRecord(current) ||\n reference(current) !== undefined\n )\n throw new TypeError('invalid AI object recovery')\n const result = { ...current } as Record<string, Value>\n for (const key of undo.remove) delete result[key]\n for (const [key, patch] of Object.entries(undo.fields)) {\n if (patch === undefined || undo.remove.includes(key))\n throw new TypeError('invalid AI object recovery field')\n Object.defineProperty(result, key, {\n value: restore(Object.hasOwn(result, key) ? result[key]! : null, patch),\n enumerable: true,\n configurable: true,\n writable: true,\n })\n }\n return result\n}\n\nconst difference = (current: Value, before: Value): Undo | undefined => {\n if (current === before) return undefined\n if (reference(current) !== undefined || reference(before) !== undefined)\n return reference(current) === reference(before)\n ? undefined\n : { value: before }\n if (Array.isArray(current) && Array.isArray(before)) {\n const items: Record<string, Undo> = {}\n for (const [index, value] of before.entries()) {\n const patch =\n index < current.length ? difference(current[index]!, value) : { value }\n if (patch !== undefined) items[index] = patch\n }\n return current.length === before.length && Object.keys(items).length === 0\n ? undefined\n : { length: before.length, items }\n }\n if (isRecord(current) && isRecord(before)) {\n const fields: Record<string, Undo> = {}\n const remove = Object.keys(current).filter(\n (key) => !Object.hasOwn(before, key),\n )\n for (const [key, value] of Object.entries(before)) {\n const patch = Object.hasOwn(current, key)\n ? difference(current[key] as Value, value as Value)\n : { value: value as Value }\n if (patch !== undefined)\n Object.defineProperty(fields, key, {\n value: patch,\n enumerable: true,\n configurable: true,\n writable: true,\n })\n }\n return remove.length === 0 && Object.keys(fields).length === 0\n ? undefined\n : { fields, remove }\n }\n return { value: before }\n}\n\nconst storeState = <S extends AIStoredView>(state: S): AIStoredState => {\n const packed = new WeakMap<object, Value>()\n const values: Payload[] = []\n const ids = new Map<unknown, number>()\n const contents = new Map<string, number[]>()\n const intern = (value: unknown): Value => {\n let id = ids.get(value)\n if (id !== undefined) return { $a2Value: id }\n const key =\n typeof value === 'object' && value !== null ? keyFor(value) : undefined\n const candidates = key === undefined ? undefined : contents.get(key)\n if (candidates !== undefined)\n id = candidates.find((candidate) =>\n sameValue(values[candidate]!.value, value),\n )\n if (id === undefined) {\n id = values.length\n values.push(value === undefined ? {} : { value })\n }\n ids.set(value, id)\n if (key !== undefined && !candidates?.includes(id))\n contents.set(key, [...(candidates ?? []), id])\n return { $a2Value: id }\n }\n const pack = (value: unknown, field?: string): Value => {\n if (\n value === undefined ||\n (typeof value === 'string' && value.length > 80) ||\n (field !== undefined &&\n payloadFields.has(field) &&\n !(field === 'input' && isRecord(value) && 'message' in value)) ||\n (isRecord(value) && Object.hasOwn(value, '$a2Value'))\n )\n return intern(value)\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'boolean' ||\n typeof value === 'number'\n )\n return value\n if (typeof value !== 'object')\n throw new TypeError('AI state must contain JSON values')\n const cached = packed.get(value)\n if (cached !== undefined) return cached\n const result: Value = Array.isArray(value)\n ? value.map((item) => pack(item))\n : Object.fromEntries(\n Object.entries(value)\n .toSorted(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))\n .map(([key, item]) => [key, pack(item, key)]),\n )\n packed.set(value, result)\n return result\n }\n const saveProjection = (\n projection: NonNullable<AIStoredView['activeProjection']>,\n messages: UIMessage[],\n tools: AIStoredView['tools'],\n ): Projection => {\n const { baseMessage, baseTools, ...fields } = projection\n const current = messages.find(\n (message) => message.id === projection.responseMessageId,\n )\n const message =\n baseMessage === undefined\n ? undefined\n : difference(pack(current), pack(baseMessage))\n const toolPatch =\n baseTools === undefined\n ? undefined\n : difference(pack(tools), pack(baseTools))\n return {\n fields: pack(fields),\n hasMessage: baseMessage !== undefined,\n ...(message === undefined ? {} : { message }),\n ...(toolPatch === undefined ? {} : { tools: toolPatch }),\n }\n }\n const { activeProjection, ...fields } = state\n const projection =\n activeProjection === null\n ? null\n : saveProjection(activeProjection, state.messages, state.tools)\n return {\n version: 2,\n fields: pack(fields),\n projection,\n values,\n }\n}\n\nconst loadState = <S extends AIStoredView>(stored: AIStoredState): S => {\n const unpack = (value: Value): unknown => {\n const id = reference(value)\n if (id !== undefined) {\n if (!Object.hasOwn(stored.values, id))\n throw new TypeError('missing AI payload')\n return stored.values[id]!.value\n }\n if (Array.isArray(value)) {\n if (Object.keys(value).length !== value.length)\n throw new TypeError('invalid AI stored array')\n return Array.from(value, unpack)\n }\n if (isRecord(value))\n return Object.fromEntries(\n Object.entries(value).map(([key, item]) => [\n key,\n unpack(item as Value),\n ]),\n )\n if (\n value === null ||\n typeof value === 'boolean' ||\n typeof value === 'string' ||\n (typeof value === 'number' && Number.isFinite(value))\n )\n return value\n throw new TypeError('invalid AI stored value')\n }\n const fields = stored.fields as Record<string, Value>\n const state = unpack(stored.fields) as S\n const loadProjection = (\n saved: Projection,\n messages: Value,\n tools: Value | undefined,\n ): AIStoredView['activeProjection'] => {\n if (\n !hasKeys(saved, {\n required: ['fields', 'hasMessage'],\n optional: ['message', 'tools'],\n }) ||\n typeof saved.hasMessage !== 'boolean' ||\n !isRecord(saved.fields) ||\n ('message' in saved &&\n (!saved.hasMessage || saved.message === undefined)) ||\n ('tools' in saved && saved.tools === undefined)\n )\n throw new TypeError('invalid AI projection recovery')\n const projection = unpack(saved.fields) as NonNullable<\n AIStoredView['activeProjection']\n >\n const currentMessages = unpack(messages) as UIMessage[]\n const index = currentMessages.findIndex(\n (message) => message.id === projection.responseMessageId,\n )\n if (saved.hasMessage) {\n const current = index === -1 ? null : (messages as Value[])[index]!\n projection.baseMessage = unpack(\n restore(current, saved.message),\n ) as UIMessage\n }\n if (tools !== undefined)\n projection.baseTools = unpack(\n restore(tools, saved.tools),\n ) as AIState['tools']\n else if (saved.tools !== undefined)\n throw new TypeError('missing AI recovery tools')\n return projection\n }\n state.activeProjection =\n stored.projection === null\n ? null\n : loadProjection(stored.projection, fields['messages']!, fields['tools']!)\n return state\n}\n\nexport const storedAIReducer = <D extends EventDefs, S extends AIStoredView>(\n source: Reducer<D, S>,\n): AIStoredReducer<D, S> => {\n const views = new WeakMap<AIStoredState, S>()\n const view = (state: AIStoredState): S => {\n let result = views.get(state)\n if (result === undefined) {\n result = loadState<S>(state)\n views.set(state, result)\n }\n return result\n }\n const defer = (next: S): AIStoredState => {\n let stored: AIStoredState | undefined\n const read = (): AIStoredState => (stored ??= storeState(next))\n const state: AIStoredState = {\n version: 2,\n get fields() {\n return read().fields\n },\n get projection() {\n return read().projection\n },\n get values() {\n return read().values\n },\n }\n views.set(state, next)\n return state\n }\n return {\n ...source,\n name: `${source.name}:records-v2`,\n initialState: storeState(source.initialState),\n [aiStateReducer]: source,\n view,\n fromView: (state) => storeState(state),\n [clientStateProjection]: (state) =>\n source[clientStateProjection]?.(view(state)) ?? view(state),\n stateSchema: {\n '~standard': {\n version: 1,\n vendor: 'a2-ai',\n validate(value) {\n try {\n if (\n !hasKeys(value, {\n required: ['version', 'fields', 'projection', 'values'],\n }) ||\n value['version'] !== 2 ||\n !Array.isArray(value['values']) ||\n !isRecord(value['fields']) ||\n (value['projection'] !== null && !isRecord(value['projection']))\n )\n return { issues: [{ message: 'invalid AI stored state' }] }\n const state = value as AIStoredState\n if (Object.keys(state.values).length !== state.values.length)\n return { issues: [{ message: 'invalid AI payload table' }] }\n for (const payload of state.values) {\n if (!hasKeys(payload, { required: [], optional: ['value'] }))\n return { issues: [{ message: 'invalid AI payload table' }] }\n }\n const decoded = loadState<S>(state)\n if (source.stateSchema) {\n const result = validateSync(\n source.stateSchema,\n decoded,\n 'AI view stateSchema',\n )\n if (result.issues) return result\n return { value: storeState(result.value) }\n }\n return { value: state }\n } catch {\n return { issues: [{ message: 'invalid AI stored state' }] }\n }\n },\n },\n },\n fold(state, event) {\n const current = view(state)\n const next = source.fold(current, event)\n if (next === current) return state\n return defer(next)\n },\n }\n}\n","/**\n * experimental-a2/ai — an isomorphic, extensible agent definition.\n *\n * `agent()` assembles a normal A2 contract, a reducer over the built-in\n * AI protocol, and pure builders for the events applications append.\n * Model calls and tool implementations stay in experimental-a2/ai/server.\n */\n\nimport type {\n FinishReason,\n JSONValue,\n LanguageModelUsage,\n UIMessage,\n UIMessageChunk,\n} from 'ai'\nimport {\n isQueueCommand,\n projectAIClientState,\n type PendingQueueCommand,\n} from './ai-client-state.ts'\nexport type { PendingQueueCommand } from './ai-client-state.ts'\nimport { applyControlChanges } from './ai-control-state.ts'\nimport { initialControlState } from './ai-control.ts'\nimport { AI_EVENT_ID_PREFIX } from './ai-id.ts'\nimport type {\n ControlCommit,\n ActiveTurn,\n ControlCommand,\n ControlReceipt,\n InboxItem,\n ToolExecutionRequest,\n WorkReport,\n} from './ai-control.ts'\nexport type {\n ActiveTurn,\n ControlCommand,\n ControlReceipt,\n InboxItem,\n} from './ai-control.ts'\nimport { contract as createContract } from './contract.ts'\nimport type { Contract, EventDefs } from './contract.ts'\nimport {\n interruptUIMessage,\n pauseUIMessage,\n projectUIMessage,\n type UIMessageCursor,\n} from './ai-projector.ts'\nimport { ambientToolScopeStorage } from './internal.ts'\nimport {\n upsertMessage,\n upsertResponse,\n answerApproval,\n approvalRequestedChunk,\n toolResultChunk,\n advanceProjection,\n projectedTools,\n restoreGenerationBase,\n stopGenerationTools,\n interruptGenerationProjection,\n projectedMessage,\n reduceToolActivity,\n} from './ai-message-projection.ts'\nimport { clientStateProjection, type Reducer } from './reducer.ts'\nimport { storedAIReducer, type AIStoredReducer } from './ai-stored-state.ts'\nexport type { AIStoredState, AIStoredReducer } from './ai-stored-state.ts'\nimport {\n flattenProgressBatches,\n progressBatches,\n type ProgressBatches,\n} from './ai-progress-batches.ts'\nimport type { HandlerContext } from './server.ts'\nimport type { StandardSchemaV1 } from './standard-schema.ts'\nimport { assertSyncSchema, validateSync } from './validate.ts'\n\nexport type AgentStatus =\n 'idle' | 'generating' | 'waiting' | 'failed' | 'closed' | 'paused'\n\nexport type GenerationReason = 'message' | 'tool' | 'input' | 'retry' | 'resume'\n\nexport type SessionCreatedPayload = { metadata?: JSONValue }\nexport type SessionClosedPayload = { reason?: string }\nexport type MessageCreatedPayload<M extends UIMessage> = {\n message: M\n /** For user messages, false records passive context. Omission or true schedules. */\n generate?: boolean\n}\nexport type MessageCompletedPayload = { messageId: string }\ntype MessageInterruption = {\n messageId: string\n reason?: string\n /** Last confirmed event-log index visible to the interrupter. */\n lastSeenIndex?: number\n}\nexport type MessageInterruptedPayload = MessageInterruption &\n (\n | { generationId: string; requestId?: never }\n | { requestId: string; generationId?: never }\n )\nexport type GenerationRequestedPayload = {\n control?: { turnId: string; version: number }\n messageId: string\n reason: GenerationReason\n responseMessageId: string\n sourceGenerationId?: string\n}\nexport type RetryGenerationOptions = {\n messageId: string\n responseMessageId: string\n retryId: string\n}\nexport type RetryRequestedPayload = RetryGenerationOptions\nexport type GenerationStartedPayload = {\n requestId: string\n messageId: string\n generationId: string\n responseMessageId: string\n attempt: number\n model: string\n promptThroughIndex?: number\n}\nexport type GenerationProgressPayload = {\n requestId: string\n messageId: string\n generationId: string\n responseMessageId: string\n sequence: number\n chunks: UIMessageChunk[]\n}\nexport type GenerationCompletedPayload = {\n requestId: string\n messageId: string\n generationId: string\n responseMessageId: string\n finishReason?: FinishReason\n usage?: LanguageModelUsage\n inputTokenEstimate?: number\n}\nexport type GenerationFailedPayload = {\n requestId: string\n messageId: string\n generationId: string\n responseMessageId: string\n error: string\n /** True when a later attempt replaced an incomplete attempt. */\n superseded?: boolean\n stepLimit?: boolean\n}\nexport type ToolCalledPayload = {\n requestId: string\n messageId: string\n generationId: string\n toolCallId: string\n toolName: string\n input: unknown\n dynamic?: boolean\n providerExecuted?: boolean\n supportsDeferredResults?: boolean\n providerMetadata?: unknown\n toolMetadata?: unknown\n title?: string\n}\nexport type ToolResultPayload = {\n requestId: string\n messageId: string\n generationId: string\n toolCallId: string\n toolName?: string\n input?: unknown\n rawInput?: unknown\n output?: unknown\n error?: string\n denied?: boolean\n preliminary?: boolean\n phase?: 'input' | 'execution'\n dynamic?: boolean\n providerExecuted?: boolean\n providerMetadata?: unknown\n toolMetadata?: unknown\n}\nexport type ApprovalRequestedPayload = {\n requestId: string\n messageId: string\n generationId: string\n approvalId: string\n toolCallId: string\n isAutomatic?: boolean\n signature?: string\n}\nexport type ApprovalRespondedPayload = {\n requestId: string\n messageId: string\n generationId: string\n approvalId: string\n approved: boolean\n reason?: string\n}\nexport type InputRequestedPayload = {\n requestId: string\n messageId: string\n generationId: string\n inputId: string\n name: string\n question?: JSONValue\n}\nexport type InputRespondedPayload = {\n requestId: string\n messageId: string\n generationId: string\n inputId: string\n name: string\n value: JSONValue\n}\nexport type ModelLimits = {\n contextWindow: number\n maxOutputTokens: number\n}\nexport type ModelMetadataRequestedPayload = { modelId: string }\nexport type ModelMetadataResolvedPayload = {\n modelId: string\n limits: ModelLimits | null\n}\nexport type ModelMetadataState =\n | { status: 'pending' }\n | { status: 'resolved'; limits: ModelLimits }\n | { status: 'unavailable' }\n\nexport type CompactionRequestedPayload = {\n generationId: string\n throughMessageId: string\n throughIndex?: number\n inputTokenEstimate?: number\n inputTokens?: number\n thresholdTokens?: number\n}\nexport type CompactionCompletedPayload<M extends UIMessage> = {\n generationId: string\n throughMessageId: string\n throughIndex?: number\n messages: M[]\n retainedMessageIds?: string[]\n summary?: string\n usage?: LanguageModelUsage\n}\n\nexport type AIEventDefs<M extends UIMessage = UIMessage> = {\n 'ai.control.requested': StandardSchemaV1<ControlCommand<M>>\n 'ai.control.committed': StandardSchemaV1<ControlCommit>\n 'ai.control.decided': StandardSchemaV1<ControlReceipt>\n 'ai.work.reported': StandardSchemaV1<WorkReport>\n 'ai.tool.execution.requested': StandardSchemaV1<ToolExecutionRequest>\n 'ai.generation.paused': StandardSchemaV1<{\n generationId: string\n messageId: string\n }>\n 'ai.session.created': StandardSchemaV1<SessionCreatedPayload>\n 'ai.session.closed': StandardSchemaV1<SessionClosedPayload>\n 'ai.message.created': StandardSchemaV1<MessageCreatedPayload<M>>\n 'ai.message.completed': StandardSchemaV1<MessageCompletedPayload>\n 'ai.message.interrupted': StandardSchemaV1<MessageInterruptedPayload>\n 'ai.generation.requested': StandardSchemaV1<GenerationRequestedPayload>\n 'ai.retry.requested': StandardSchemaV1<RetryRequestedPayload>\n 'ai.generation.started': StandardSchemaV1<GenerationStartedPayload>\n 'ai.generation.progress': StandardSchemaV1<GenerationProgressPayload>\n 'ai.generation.completed': StandardSchemaV1<GenerationCompletedPayload>\n 'ai.generation.failed': StandardSchemaV1<GenerationFailedPayload>\n 'ai.tool.called': StandardSchemaV1<ToolCalledPayload>\n 'ai.tool.result': StandardSchemaV1<ToolResultPayload>\n 'ai.approval.requested': StandardSchemaV1<ApprovalRequestedPayload>\n 'ai.approval.responded': StandardSchemaV1<ApprovalRespondedPayload>\n 'ai.input.requested': StandardSchemaV1<InputRequestedPayload>\n 'ai.input.responded': StandardSchemaV1<InputRespondedPayload>\n 'ai.compaction.requested': StandardSchemaV1<CompactionRequestedPayload>\n 'ai.compaction.completed': StandardSchemaV1<CompactionCompletedPayload<M>>\n 'ai.model.metadata.requested': StandardSchemaV1<ModelMetadataRequestedPayload>\n 'ai.model.metadata.resolved': StandardSchemaV1<ModelMetadataResolvedPayload>\n}\n\nexport type ActiveGeneration = GenerationStartedPayload\n\nexport type ActiveGenerationProjection<M extends UIMessage = UIMessage> = {\n generationId: string\n responseMessageId: string\n /** Log index of the completed model step while its response remains interruptible. */\n completionIndex?: number\n baseMessage?: M\n promptThroughIndex?: number\n cursor?: { throughIndex: number; stream: UIMessageCursor } | null\n baseCompaction?: CompactionState<M> | null\n batches: ProgressBatches\n baseTools: ToolActivity[]\n toolEvents: Array<\n | { index: number; type: 'ai.tool.called'; payload: ToolCalledPayload }\n | { index: number; type: 'ai.tool.result'; payload: ToolResultPayload }\n >\n approvalEvents: Array<\n | {\n index: number\n type: 'ai.approval.requested'\n payload: ApprovalRequestedPayload\n }\n | {\n index: number\n type: 'ai.approval.responded'\n payload: ApprovalRespondedPayload\n }\n >\n}\n\nexport type PendingApproval = ApprovalRequestedPayload\nexport type PendingInput = InputRequestedPayload\n\nexport type ToolActivity = {\n requestId: string\n messageId: string\n generationId: string\n toolCallId: string\n toolName?: string\n input?: unknown\n rawInput?: unknown\n output?: unknown\n error?: string\n preliminary?: boolean\n phase?: 'input' | 'execution'\n dynamic?: boolean\n providerExecuted?: boolean\n callProviderMetadata?: unknown\n resultProviderMetadata?: unknown\n toolMetadata?: unknown\n title?: string\n status: 'running' | 'completed' | 'failed' | 'denied'\n}\n\nexport type CompactionState<M extends UIMessage> = {\n status: 'running' | 'completed'\n generationId: string\n throughMessageId: string\n throughIndex?: number\n messages?: M[]\n retainedMessageIds?: string[]\n summary?: string\n usage?: LanguageModelUsage\n}\n\nexport type GenerationUsage = {\n generationId: string\n usage: LanguageModelUsage\n}\n\nexport type AIState<M extends UIMessage = UIMessage> = {\n inbox: { paused: boolean; items: InboxItem<M>[] }\n pendingQueueCommands?: PendingQueueCommand<M>[]\n active: ActiveTurn<M> | null\n starting: boolean\n receipt: ControlReceipt | null\n pausedGenerationIds?: Record<string, true>\n session: { created: boolean; metadata?: JSONValue }\n messages: M[]\n status: AgentStatus\n activeGeneration: ActiveGeneration | null\n activeRequestId: string | null\n activeRequestReason: GenerationReason | null\n activeRequestSourceGenerationId: string | null\n activeResponseMessageId: string | null\n activeProjection: ActiveGenerationProjection<M> | null\n responseOwners: Record<\n string,\n Pick<GenerationStartedPayload, 'generationId' | 'requestId' | 'attempt'>\n >\n terminalRequestIds?: Record<string, true>\n terminalGenerations?: Record<\n string,\n 'completed' | 'failed' | 'interrupted' | 'superseded'\n >\n pendingApprovals: PendingApproval[]\n pendingInputs: PendingInput[]\n tools: ToolActivity[]\n compaction: CompactionState<M> | null\n modelMetadata: Record<string, ModelMetadataState>\n usage: GenerationUsage[]\n error: string | null\n}\n\nexport type AgentDefinition<\n M extends UIMessage = UIMessage,\n D extends EventDefs = AIEventDefs<M>,\n> = {\n readonly contract: Contract<D>\n readonly reducer: AIStoredReducer<D, AIState<M>>\n}\n\nexport type AgentToolEventDefs = EventDefs &\n Pick<AIEventDefs, 'ai.tool.execution.requested'>\n\n/** The durable handler context supplied when A2 executes a local AI tool. */\nexport type AgentToolContext<D extends AgentToolEventDefs> = HandlerContext<\n D,\n 'ai.tool.execution.requested'\n>\n\nexport type AgentOptions<M extends UIMessage, E extends EventDefs> = {\n name: string\n events?: E\n /** Optional stricter schema for custom UIMessage metadata/data/tool types. */\n messageSchema?: StandardSchemaV1<M>\n /** Snapshot identity. Bump when application-level projection semantics change. */\n reducerName?: string\n}\n\ntype AIMessageFrom<D extends EventDefs> =\n D extends Record<'ai.message.created', infer S extends StandardSchemaV1>\n ? StandardSchemaV1.InferOutput<S> extends MessageCreatedPayload<\n infer M extends UIMessage\n >\n ? M\n : UIMessage\n : UIMessage\n\ntype SchemaResult<T> = StandardSchemaV1.Result<T>\n\nconst issue = <T>(message: string): SchemaResult<T> => ({\n issues: [{ message }],\n})\n\nconst schema = <T>(\n label: string,\n parse: (value: unknown) => SchemaResult<T>,\n): StandardSchemaV1<T> => ({\n '~standard': {\n version: 1,\n vendor: 'a2',\n validate(value) {\n try {\n return parse(value)\n } catch (error) {\n return issue(\n `${label}: ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n },\n },\n})\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value)\n\nconst isJSONCompatible = (\n value: unknown,\n seen: Set<object> = new Set(),\n): boolean => {\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'boolean'\n ) {\n return true\n }\n if (typeof value === 'number') return Number.isFinite(value)\n if (typeof value === 'undefined') return true\n if (typeof value !== 'object') return false\n if (seen.has(value)) return false\n seen.add(value)\n const valid = Array.isArray(value)\n ? value.every((item) => isJSONCompatible(item, seen))\n : Object.getPrototypeOf(value) === Object.prototype &&\n Object.values(value).every((item) => isJSONCompatible(item, seen))\n seen.delete(value)\n return valid\n}\n\nconst jsonObject = <T extends object>(\n label: string,\n check: (value: Record<string, unknown>) => boolean,\n): StandardSchemaV1<T> =>\n schema(label, (value) => {\n if (!isRecord(value) || !isJSONCompatible(value) || !check(value)) {\n return issue(`invalid ${label}`)\n }\n return { value: value as T }\n })\n\nconst stringField = (value: Record<string, unknown>, key: string): boolean =>\n typeof value[key] === 'string' && value[key].length > 0\n\nconst optionalIndexField = (\n value: Record<string, unknown>,\n key: string,\n): boolean =>\n value[key] === undefined ||\n (typeof value[key] === 'number' &&\n Number.isSafeInteger(value[key]) &&\n value[key] >= 0)\n\nconst optionalStringField = (\n value: Record<string, unknown>,\n key: string,\n): boolean => value[key] === undefined || typeof value[key] === 'string'\n\nconst messageValue = (value: unknown): value is UIMessage =>\n isRecord(value) &&\n typeof value['id'] === 'string' &&\n (value['role'] === 'user' ||\n value['role'] === 'assistant' ||\n value['role'] === 'system') &&\n Array.isArray(value['parts']) &&\n value['parts'].every(\n (part) => isRecord(part) && typeof part['type'] === 'string',\n ) &&\n isJSONCompatible(value)\n\nconst validateMessage = <M extends UIMessage>(\n value: unknown,\n messageSchema?: StandardSchemaV1<M>,\n): SchemaResult<M> => {\n if (!messageValue(value)) return issue('invalid AI SDK UIMessage')\n if (!messageSchema) return { value: value as M }\n return validateSync(messageSchema, value, 'the AI message')\n}\n\nconst messagePayloadSchema = <M extends UIMessage>(\n messageSchema?: StandardSchemaV1<M>,\n): StandardSchemaV1<MessageCreatedPayload<M>> =>\n schema('ai.message.created', (value) => {\n if (!isRecord(value)) return issue('invalid ai.message.created payload')\n const message = validateMessage(value['message'], messageSchema)\n if (message.issues) return { issues: message.issues }\n const generate = value['generate']\n if (generate !== undefined && typeof generate !== 'boolean') {\n return issue('invalid ai.message.created generate flag')\n }\n return {\n value: {\n message: message.value,\n ...(generate === false ? { generate: false } : {}),\n },\n }\n })\n\nconst progressPayloadSchema: StandardSchemaV1<GenerationProgressPayload> =\n schema('ai.generation.progress', (value) => {\n if (\n !isRecord(value) ||\n !isJSONCompatible(value) ||\n !stringField(value, 'requestId') ||\n !stringField(value, 'messageId') ||\n !stringField(value, 'generationId') ||\n !stringField(value, 'responseMessageId') ||\n typeof value['sequence'] !== 'number' ||\n !Number.isInteger(value['sequence']) ||\n value['sequence'] < 0 ||\n !Array.isArray(value['chunks']) ||\n !value['chunks'].every(\n (chunk) => isRecord(chunk) && typeof chunk['type'] === 'string',\n )\n ) {\n return issue('invalid ai.generation.progress payload')\n }\n return { value: value as GenerationProgressPayload }\n })\n\nconst completedPayloadSchema: StandardSchemaV1<GenerationCompletedPayload> =\n schema('ai.generation.completed', (value) => {\n if (\n !isRecord(value) ||\n !isJSONCompatible(value) ||\n !stringField(value, 'requestId') ||\n !stringField(value, 'messageId') ||\n !stringField(value, 'generationId') ||\n !stringField(value, 'responseMessageId') ||\n !optionalIndexField(value, 'inputTokenEstimate') ||\n !optionalStringField(value, 'finishReason')\n ) {\n return issue('invalid ai.generation.completed payload')\n }\n return { value: value as GenerationCompletedPayload }\n })\n\nconst compactionPayloadSchema = <M extends UIMessage>(\n messageSchema?: StandardSchemaV1<M>,\n): StandardSchemaV1<CompactionCompletedPayload<M>> =>\n schema('ai.compaction.completed', (value) => {\n if (\n !isRecord(value) ||\n !isJSONCompatible(value) ||\n !stringField(value, 'generationId') ||\n !stringField(value, 'throughMessageId') ||\n !optionalIndexField(value, 'throughIndex') ||\n !optionalStringField(value, 'summary') ||\n !Array.isArray(value['messages']) ||\n (value['retainedMessageIds'] !== undefined &&\n (!Array.isArray(value['retainedMessageIds']) ||\n !value['retainedMessageIds'].every(\n (candidate) => typeof candidate === 'string',\n )))\n ) {\n return issue('invalid ai.compaction.completed payload')\n }\n const messages: M[] = []\n for (const candidate of value['messages']) {\n const result = validateMessage(candidate, messageSchema)\n if (result.issues) return { issues: result.issues }\n messages.push(result.value)\n }\n return {\n value: {\n generationId: value['generationId'] as string,\n throughMessageId: value['throughMessageId'] as string,\n ...(value['throughIndex'] === undefined\n ? {}\n : { throughIndex: value['throughIndex'] as number }),\n messages,\n ...(value['summary'] === undefined\n ? {}\n : { summary: value['summary'] as string }),\n ...(value['usage'] === undefined\n ? {}\n : { usage: value['usage'] as LanguageModelUsage }),\n ...(value['retainedMessageIds'] === undefined\n ? {}\n : { retainedMessageIds: value['retainedMessageIds'] as string[] }),\n },\n }\n })\n\nexport function createEvents<M extends UIMessage = UIMessage>(options?: {\n messageSchema?: StandardSchemaV1<M>\n}): AIEventDefs<M> {\n const messageSchema = options?.messageSchema\n if (messageSchema) assertSyncSchema(messageSchema, 'the AI message schema')\n const definition: AIEventDefs<M> = {\n 'ai.control.requested': schema('ai.control.requested', (value) => {\n if (!isRecord(value) || !isJSONCompatible(value))\n return issue('invalid AI command')\n const action = value['action']\n const forwarded = {\n approval: ['ai.approval.responded', 'response'],\n 'tool-result': ['ai.tool.result', 'result'],\n input: ['ai.input.responded', 'response'],\n 'request-input': ['ai.input.requested', 'request'],\n retry: ['ai.retry.requested', 'request'],\n interrupt: ['ai.message.interrupted', 'request'],\n } as const\n if (typeof action === 'string' && Object.hasOwn(forwarded, action)) {\n const [type, key] = forwarded[action as keyof typeof forwarded]\n const payload = validateSync(\n definition[type] as StandardSchemaV1<unknown>,\n value[key],\n 'AI command',\n )\n if (payload.issues) return { issues: payload.issues }\n return { value: { action, [key]: payload.value } as ControlCommand<M> }\n }\n if (action === 'send' || action === 'edit' || action === 'steer') {\n const parsed = validateMessage(value['message'], messageSchema)\n if (parsed.issues) return parsed\n if (\n (action === 'send' || action === 'steer') &&\n (parsed.value.id.length === 0 ||\n parsed.value.id.startsWith(AI_EVENT_ID_PREFIX))\n )\n return issue(\n 'AI input IDs must be nonempty and outside the reserved internal prefix',\n )\n if (\n (action === 'steer' &&\n (!stringField(value, 'turnId') ||\n !optionalIndexField(value, 'lastSeenIndex'))) ||\n (action === 'send' &&\n value['generate'] !== undefined &&\n typeof value['generate'] !== 'boolean')\n )\n return issue('invalid AI command')\n return {\n value: { ...value, message: parsed.value } as ControlCommand<M>,\n }\n }\n if (\n (action === 'remove' && stringField(value, 'inputId')) ||\n (action === 'send-now' &&\n stringField(value, 'inputId') &&\n (value['turnId'] === null || stringField(value, 'turnId')) &&\n optionalIndexField(value, 'lastSeenIndex')) ||\n (action === 'move' &&\n stringField(value, 'inputId') &&\n (value['beforeId'] === null || stringField(value, 'beforeId'))) ||\n (action === 'stop' &&\n stringField(value, 'turnId') &&\n optionalIndexField(value, 'lastSeenIndex')) ||\n (action === 'pause' &&\n (value['when'] === 'now' || value['when'] === 'after-turn')) ||\n action === 'resume'\n )\n return { value: value as ControlCommand<M> }\n return issue('invalid AI command')\n }),\n 'ai.control.committed': jsonObject(\n 'ai.control.committed',\n (value) => Array.isArray(value['changes']) && isRecord(value['view']),\n ),\n 'ai.control.decided': jsonObject(\n 'ai.control.decided',\n (value) =>\n stringField(value, 'commandId') &&\n (value['outcome'] === 'applied' || value['outcome'] === 'rejected'),\n ),\n 'ai.work.reported': schema('ai.work.reported', (value) => {\n if (\n !isRecord(value) ||\n !isJSONCompatible(value) ||\n !stringField(value, 'workId') ||\n !stringField(value, 'turnId') ||\n typeof value['version'] !== 'number' ||\n !optionalIndexField(value, 'version') ||\n typeof value['attempt'] !== 'number' ||\n !Number.isSafeInteger(value['attempt']) ||\n value['attempt'] < 1 ||\n typeof value['settled'] !== 'boolean' ||\n (value['kind'] !== 'model' && value['kind'] !== 'tool') ||\n !Array.isArray(value['events'])\n )\n return issue('invalid AI work report')\n const allowed = new Set([\n 'ai.generation.started',\n 'ai.generation.completed',\n 'ai.generation.failed',\n 'ai.tool.called',\n 'ai.tool.result',\n 'ai.approval.requested',\n 'ai.approval.responded',\n 'ai.compaction.requested',\n 'ai.compaction.completed',\n 'ai.model.metadata.requested',\n ])\n const events: WorkReport['events'] = []\n for (const event of value['events']) {\n if (\n !isRecord(event) ||\n !stringField(event, 'id') ||\n typeof event['type'] !== 'string' ||\n !allowed.has(event['type']) ||\n (value['kind'] === 'tool' && event['type'] !== 'ai.tool.result')\n )\n return issue('invalid AI work fact')\n const parsed = validateSync(\n definition[\n event['type'] as keyof AIEventDefs<M>\n ] as StandardSchemaV1<unknown>,\n event['payload'],\n 'AI work fact',\n )\n if (parsed.issues) return { issues: parsed.issues }\n events.push({\n id: event['id'] as string,\n type: event['type'],\n payload: parsed.value,\n })\n }\n return { value: { ...value, events } as WorkReport }\n }),\n 'ai.tool.execution.requested': jsonObject(\n 'ai.tool.execution.requested',\n (value) =>\n stringField(value, 'turnId') &&\n optionalIndexField(value, 'version') &&\n isRecord(value['call']) &&\n isRecord(value['generation']),\n ),\n 'ai.generation.paused': jsonObject(\n 'ai.generation.paused',\n (value) =>\n stringField(value, 'generationId') && stringField(value, 'messageId'),\n ),\n 'ai.session.created': jsonObject('ai.session.created', () => true),\n 'ai.session.closed': jsonObject('ai.session.closed', (value) =>\n optionalStringField(value, 'reason'),\n ),\n 'ai.message.created': messagePayloadSchema(messageSchema),\n 'ai.message.completed': jsonObject('ai.message.completed', (value) =>\n stringField(value, 'messageId'),\n ),\n 'ai.message.interrupted': jsonObject(\n 'ai.message.interrupted',\n (value) =>\n stringField(value, 'messageId') &&\n ((stringField(value, 'generationId') &&\n value['requestId'] === undefined) ||\n (stringField(value, 'requestId') &&\n value['generationId'] === undefined)) &&\n optionalStringField(value, 'reason') &&\n (value['lastSeenIndex'] === undefined ||\n (typeof value['lastSeenIndex'] === 'number' &&\n Number.isInteger(value['lastSeenIndex']) &&\n value['lastSeenIndex'] >= 0)),\n ),\n 'ai.generation.requested': jsonObject(\n 'ai.generation.requested',\n (value) =>\n stringField(value, 'messageId') &&\n stringField(value, 'responseMessageId') &&\n optionalStringField(value, 'sourceGenerationId') &&\n (value['reason'] !== 'tool' ||\n stringField(value, 'sourceGenerationId')) &&\n (value['reason'] === 'message' ||\n value['reason'] === 'tool' ||\n value['reason'] === 'input' ||\n value['reason'] === 'retry' ||\n value['reason'] === 'resume'),\n ),\n 'ai.retry.requested': jsonObject(\n 'ai.retry.requested',\n (value) =>\n stringField(value, 'messageId') &&\n stringField(value, 'responseMessageId') &&\n stringField(value, 'retryId'),\n ),\n 'ai.generation.started': jsonObject(\n 'ai.generation.started',\n (value) =>\n stringField(value, 'requestId') &&\n stringField(value, 'messageId') &&\n stringField(value, 'generationId') &&\n stringField(value, 'responseMessageId') &&\n typeof value['attempt'] === 'number' &&\n Number.isInteger(value['attempt']) &&\n value['attempt'] > 0 &&\n stringField(value, 'model') &&\n optionalIndexField(value, 'promptThroughIndex'),\n ),\n 'ai.generation.progress': progressPayloadSchema,\n 'ai.generation.completed': completedPayloadSchema,\n 'ai.generation.failed': jsonObject(\n 'ai.generation.failed',\n (value) =>\n stringField(value, 'requestId') &&\n stringField(value, 'messageId') &&\n stringField(value, 'generationId') &&\n stringField(value, 'responseMessageId') &&\n stringField(value, 'error') &&\n (value['superseded'] === undefined ||\n typeof value['superseded'] === 'boolean') &&\n (value['stepLimit'] === undefined ||\n typeof value['stepLimit'] === 'boolean'),\n ),\n 'ai.tool.called': jsonObject(\n 'ai.tool.called',\n (value) =>\n stringField(value, 'requestId') &&\n stringField(value, 'messageId') &&\n stringField(value, 'generationId') &&\n stringField(value, 'toolCallId') &&\n stringField(value, 'toolName') &&\n (value['dynamic'] === undefined ||\n typeof value['dynamic'] === 'boolean') &&\n (value['providerExecuted'] === undefined ||\n typeof value['providerExecuted'] === 'boolean') &&\n (value['supportsDeferredResults'] === undefined ||\n typeof value['supportsDeferredResults'] === 'boolean') &&\n optionalStringField(value, 'title'),\n ),\n 'ai.tool.result': jsonObject(\n 'ai.tool.result',\n (value) =>\n stringField(value, 'requestId') &&\n stringField(value, 'messageId') &&\n stringField(value, 'generationId') &&\n stringField(value, 'toolCallId') &&\n optionalStringField(value, 'toolName') &&\n optionalStringField(value, 'error') &&\n (value['denied'] === undefined ||\n typeof value['denied'] === 'boolean') &&\n (value['preliminary'] === undefined ||\n typeof value['preliminary'] === 'boolean') &&\n (value['phase'] === undefined ||\n value['phase'] === 'input' ||\n value['phase'] === 'execution') &&\n (value['dynamic'] === undefined ||\n typeof value['dynamic'] === 'boolean') &&\n (value['providerExecuted'] === undefined ||\n typeof value['providerExecuted'] === 'boolean'),\n ),\n 'ai.approval.requested': jsonObject(\n 'ai.approval.requested',\n (value) =>\n stringField(value, 'requestId') &&\n stringField(value, 'messageId') &&\n stringField(value, 'generationId') &&\n stringField(value, 'approvalId') &&\n stringField(value, 'toolCallId') &&\n (value['isAutomatic'] === undefined ||\n typeof value['isAutomatic'] === 'boolean') &&\n optionalStringField(value, 'signature'),\n ),\n 'ai.approval.responded': jsonObject(\n 'ai.approval.responded',\n (value) =>\n stringField(value, 'requestId') &&\n stringField(value, 'messageId') &&\n stringField(value, 'generationId') &&\n stringField(value, 'approvalId') &&\n typeof value['approved'] === 'boolean' &&\n optionalStringField(value, 'reason'),\n ),\n 'ai.input.requested': jsonObject(\n 'ai.input.requested',\n (value) =>\n stringField(value, 'requestId') &&\n stringField(value, 'messageId') &&\n stringField(value, 'generationId') &&\n stringField(value, 'inputId') &&\n stringField(value, 'name'),\n ),\n 'ai.input.responded': jsonObject(\n 'ai.input.responded',\n (value) =>\n stringField(value, 'requestId') &&\n stringField(value, 'messageId') &&\n stringField(value, 'generationId') &&\n stringField(value, 'inputId') &&\n stringField(value, 'name'),\n ),\n 'ai.compaction.requested': jsonObject(\n 'ai.compaction.requested',\n (value) =>\n stringField(value, 'generationId') &&\n stringField(value, 'throughMessageId') &&\n optionalIndexField(value, 'throughIndex') &&\n optionalIndexField(value, 'inputTokenEstimate') &&\n optionalIndexField(value, 'inputTokens') &&\n optionalIndexField(value, 'thresholdTokens'),\n ),\n 'ai.compaction.completed': compactionPayloadSchema(messageSchema),\n 'ai.model.metadata.requested': jsonObject(\n 'ai.model.metadata.requested',\n (value) => stringField(value, 'modelId'),\n ),\n 'ai.model.metadata.resolved': jsonObject(\n 'ai.model.metadata.resolved',\n (value) =>\n stringField(value, 'modelId') &&\n (value['limits'] === null ||\n (isRecord(value['limits']) &&\n typeof value['limits']['contextWindow'] === 'number' &&\n Number.isSafeInteger(value['limits']['contextWindow']) &&\n value['limits']['contextWindow'] > 0 &&\n typeof value['limits']['maxOutputTokens'] === 'number' &&\n Number.isSafeInteger(value['limits']['maxOutputTokens']) &&\n value['limits']['maxOutputTokens'] > 0)),\n ),\n }\n return definition\n}\n\nexport const events: AIEventDefs<UIMessage> = createEvents()\n\nconst initialState = <M extends UIMessage>(): AIState<M> => ({\n inbox: initialControlState<M>().inbox,\n pendingQueueCommands: [],\n active: null,\n starting: false,\n receipt: null,\n session: { created: false },\n messages: [],\n status: 'idle',\n activeGeneration: null,\n activeRequestId: null,\n activeRequestReason: null,\n activeRequestSourceGenerationId: null,\n activeResponseMessageId: null,\n activeProjection: null,\n responseOwners: {},\n pendingApprovals: [],\n pendingInputs: [],\n tools: [],\n compaction: null,\n modelMetadata: {},\n usage: [],\n error: null,\n})\n\nconst projectMessageChunks = <M extends UIMessage>(\n messages: M[],\n messageId: string,\n chunks: UIMessageChunk[],\n): M[] =>\n messages.map((message) =>\n message.id === messageId\n ? projectUIMessage({ messageId, base: message, chunks })\n : message,\n )\n\nconst waitingStatus = <M extends UIMessage>(state: AIState<M>): AgentStatus => {\n if (state.pendingApprovals.length > 0 || state.pendingInputs.length > 0) {\n return 'waiting'\n }\n return state.activeGeneration !== null ||\n state.tools.some((activity) => activity.status === 'running')\n ? 'generating'\n : 'idle'\n}\n\nconst lifecycleStatus = <M extends UIMessage>(\n previous: AIState<M>,\n next: AIState<M>,\n): AgentStatus =>\n previous.status === 'failed' ? 'failed' : waitingStatus(next)\n\nconst isStaleGeneration = <M extends UIMessage>(\n state: AIState<M>,\n messageId: string,\n owner: { generationId: string; requestId: string },\n): boolean => {\n const current = state.responseOwners[messageId]\n return (\n current !== undefined &&\n (current.generationId !== owner.generationId ||\n current.requestId !== owner.requestId)\n )\n}\n\nconst projectedResponse = <M extends UIMessage>(options: {\n state: AIState<M>\n projection: ActiveGenerationProjection<M>\n}): M => {\n const message = projectedMessage(options.projection)\n return options.state.pausedGenerationIds?.[options.projection.generationId]\n ? pauseUIMessage({\n message,\n toolCallIds: new Set(\n options.state.tools.map((tool) => tool.toolCallId),\n ),\n })\n : message\n}\n\nconst terminalGenerationReason = <M extends UIMessage>(\n state: AIState<M>,\n generationId: string,\n requestId?: string,\n): 'completed' | 'failed' | 'interrupted' | 'superseded' | undefined => {\n const terminal = state.terminalGenerations?.[generationId]\n if (terminal !== undefined) return terminal\n return requestId !== undefined &&\n state.terminalRequestIds?.[requestId] === true\n ? 'interrupted'\n : undefined\n}\n\n/** Pure projection of the built-in AI protocol. Unknown extension events are ignored. */\nexport function reduceAIState<M extends UIMessage>(\n state: AIState<M>,\n event: { type: string; payload: unknown; index: number; id?: string },\n): AIState<M> {\n if (state.status === 'closed') return state\n switch (event.type) {\n case 'ai.control.requested': {\n const command = event.payload as ControlCommand<M>\n if (!event.id || !isQueueCommand(command)) return state\n const pending = state.pendingQueueCommands ?? []\n if (pending.some((item) => item.commandId === event.id)) return state\n if (\n (command.action === 'send' || command.action === 'steer') &&\n (state.messages.some((message) => message.id === command.message.id) ||\n state.inbox.items.some((item) => item.id === command.message.id))\n )\n return state\n return {\n ...state,\n pendingQueueCommands: [...pending, { commandId: event.id, command }],\n }\n }\n case 'ai.control.committed': {\n const commit = event.payload as ControlCommit\n const visible = applyControlChanges({\n state: { inbox: state.inbox, active: state.active },\n changes: commit.changes.filter(\n (change) => change.path[0] === 'inbox' || change.path[0] === 'active',\n ),\n })\n const { phase } = commit.view\n const status: AgentStatus = commit.view.closed\n ? 'closed'\n : phase === 'paused' ||\n phase === 'pausing' ||\n (commit.view.paused && phase === null)\n ? 'paused'\n : phase === 'failed'\n ? 'failed'\n : phase === 'starting' || phase === 'generating'\n ? 'generating'\n : phase\n ? 'waiting'\n : 'idle'\n return {\n ...state,\n ...visible,\n status,\n activeRequestId: commit.view.requestId,\n activeRequestReason: commit.view.requestReason,\n activeRequestSourceGenerationId: commit.view.sourceGenerationId,\n activeResponseMessageId: commit.view.responseMessageId,\n }\n }\n case 'ai.control.decided': {\n const receipt = event.payload as ControlReceipt\n if (receipt.work) return state\n const pending = state.pendingQueueCommands ?? []\n const settled = pending.find(\n (item) => item.commandId === receipt.commandId,\n )\n return {\n ...state,\n receipt,\n ...(settled === undefined\n ? {}\n : {\n pendingQueueCommands: pending.filter(\n (item) => item.commandId !== receipt.commandId,\n ),\n }),\n }\n }\n case 'ai.generation.paused': {\n const payload = event.payload as {\n generationId: string\n messageId: string\n }\n const toolCallIds = new Set(\n state.tools\n .filter((tool) => tool.messageId === payload.messageId)\n .map((tool) => tool.toolCallId),\n )\n const projection = state.activeProjection\n return {\n ...state,\n activeGeneration: null,\n activeProjection:\n projection?.generationId === payload.generationId\n ? {\n ...projection,\n cursor: null,\n batches: progressBatches(\n flattenProgressBatches(projection.batches).map((batch) => ({\n index: batch.index,\n chunks: batch.chunks.filter(\n (chunk) =>\n !('toolCallId' in chunk) ||\n toolCallIds.has(chunk.toolCallId),\n ),\n })),\n ),\n }\n : projection,\n compaction:\n state.compaction?.status === 'running'\n ? (projection?.baseCompaction ?? null)\n : state.compaction,\n messages: state.messages.map((message) =>\n message.id === payload.messageId\n ? pauseUIMessage({ message, toolCallIds })\n : message,\n ),\n pausedGenerationIds: {\n ...state.pausedGenerationIds,\n [payload.generationId]: true,\n },\n }\n }\n case 'ai.model.metadata.requested': {\n const { modelId } = event.payload as ModelMetadataRequestedPayload\n if (Object.hasOwn(state.modelMetadata, modelId)) return state\n return {\n ...state,\n modelMetadata: {\n ...state.modelMetadata,\n [modelId]: { status: 'pending' },\n },\n }\n }\n case 'ai.model.metadata.resolved': {\n const { modelId, limits } = event.payload as ModelMetadataResolvedPayload\n return {\n ...state,\n modelMetadata: {\n ...state.modelMetadata,\n [modelId]:\n limits === null\n ? { status: 'unavailable' }\n : { status: 'resolved', limits },\n },\n }\n }\n case 'ai.session.created': {\n const payload = event.payload as SessionCreatedPayload\n return {\n ...state,\n session: {\n created: true,\n ...(payload.metadata === undefined\n ? state.session.metadata === undefined\n ? {}\n : { metadata: state.session.metadata }\n : { metadata: payload.metadata }),\n },\n }\n }\n case 'ai.session.closed':\n return {\n ...state,\n active: null,\n inbox: { paused: true, items: [] },\n pendingQueueCommands: [],\n status: 'closed',\n compaction:\n state.compaction?.status === 'running'\n ? (state.activeProjection?.baseCompaction ?? null)\n : state.compaction,\n activeGeneration: null,\n activeRequestId: null,\n activeRequestReason: null,\n activeRequestSourceGenerationId: null,\n activeResponseMessageId: null,\n activeProjection: null,\n }\n case 'ai.message.created': {\n const { message } = event.payload as MessageCreatedPayload<M>\n return {\n ...state,\n messages: upsertMessage(state.messages, message),\n activeProjection:\n state.activeProjection?.responseMessageId === message.id\n ? { ...state.activeProjection, cursor: null }\n : state.activeProjection,\n }\n }\n case 'ai.message.completed': {\n const { messageId } = event.payload as MessageCompletedPayload\n const owner = state.responseOwners[messageId]\n const generationId = owner?.generationId\n const requestId = owner?.requestId\n if (\n generationId === undefined ||\n terminalGenerationReason(state, generationId, requestId) !== undefined\n ) {\n return state\n }\n return {\n ...state,\n activeRequestId: null,\n activeRequestReason: null,\n activeRequestSourceGenerationId: null,\n activeResponseMessageId: null,\n activeProjection:\n state.activeProjection?.generationId === generationId\n ? null\n : state.activeProjection,\n terminalGenerations: {\n ...state.terminalGenerations,\n [generationId]: 'completed',\n },\n ...(requestId === undefined\n ? {}\n : {\n terminalRequestIds: {\n ...state.terminalRequestIds,\n [requestId]: true,\n },\n }),\n }\n }\n case 'ai.generation.requested': {\n const payload = event.payload as GenerationRequestedPayload\n const schedulesToolContinuation = payload.reason === 'tool'\n const responseMessageId = payload.responseMessageId\n const owner = state.responseOwners[responseMessageId]\n const ownerGenerationId = owner?.generationId\n const ownerRequestId = owner?.requestId\n const requestId = (event as { id?: string }).id\n if (\n requestId !== undefined &&\n state.terminalRequestIds?.[requestId] === true\n ) {\n return state\n }\n const acceptsRequest =\n (payload.control !== undefined && state.activeRequestId === event.id) ||\n payload.reason === 'message' ||\n (payload.reason === 'tool'\n ? ownerGenerationId !== undefined &&\n payload.sourceGenerationId === ownerGenerationId &&\n state.activeRequestId === ownerRequestId &&\n state.status !== 'failed'\n : payload.reason === 'retry'\n ? state.status === 'failed'\n : ownerGenerationId !== undefined &&\n payload.sourceGenerationId === ownerGenerationId &&\n state.activeRequestId === ownerRequestId &&\n state.status !== 'failed')\n if (!acceptsRequest) return state\n const base =\n payload.reason === 'retry' &&\n state.activeProjection &&\n state.activeProjection.completionIndex === undefined\n ? restoreGenerationBase(\n state,\n state.activeProjection.generationId,\n responseMessageId,\n 'failed',\n )\n : state\n return {\n ...base,\n activeProjection:\n payload.reason === 'retry' ? null : state.activeProjection,\n status: schedulesToolContinuation ? state.status : 'generating',\n activeRequestId: requestId ?? null,\n activeRequestReason: payload.reason,\n activeRequestSourceGenerationId: payload.sourceGenerationId ?? null,\n activeResponseMessageId: responseMessageId,\n error: schedulesToolContinuation ? state.error : null,\n }\n }\n case 'ai.generation.started': {\n const payload = event.payload as GenerationStartedPayload\n if (\n state.terminalRequestIds?.[payload.requestId] === true ||\n terminalGenerationReason(\n state,\n payload.generationId,\n payload.requestId,\n ) !== undefined\n ) {\n return state\n }\n if (\n state.activeRequestId !== null &&\n state.activeRequestId !== payload.requestId\n ) {\n return state\n }\n const currentOwner = state.responseOwners[payload.responseMessageId]\n const currentTerminal =\n currentOwner === undefined\n ? undefined\n : terminalGenerationReason(\n state,\n currentOwner.generationId,\n currentOwner.requestId,\n )\n if (\n currentTerminal === 'completed' ||\n currentTerminal === 'interrupted'\n ) {\n return state\n }\n if (\n currentOwner?.requestId === payload.requestId &&\n currentOwner.attempt >= payload.attempt\n )\n return state\n const activeGeneration = state.activeGeneration\n const replacesActiveAttempt =\n activeGeneration !== null &&\n activeGeneration.requestId === payload.requestId &&\n activeGeneration.responseMessageId === payload.responseMessageId &&\n activeGeneration.attempt < payload.attempt &&\n state.activeProjection?.generationId === activeGeneration.generationId\n const baseState = replacesActiveAttempt\n ? restoreGenerationBase(\n state,\n activeGeneration.generationId,\n activeGeneration.responseMessageId,\n 'superseded',\n )\n : state\n const baseMessage = baseState.messages.find(\n (message) => message.id === payload.responseMessageId,\n )\n return {\n ...baseState,\n status: 'generating',\n activeGeneration: payload,\n activeResponseMessageId: null,\n responseOwners: {\n ...baseState.responseOwners,\n [payload.responseMessageId]: {\n generationId: payload.generationId,\n requestId: payload.requestId,\n attempt: payload.attempt,\n },\n },\n activeProjection: {\n generationId: payload.generationId,\n responseMessageId: payload.responseMessageId,\n promptThroughIndex: payload.promptThroughIndex ?? event.index - 1,\n ...(baseMessage === undefined ? {} : { baseMessage }),\n baseCompaction: baseState.compaction,\n batches: progressBatches(),\n baseTools: baseState.tools,\n toolEvents: [],\n approvalEvents: [],\n },\n error: null,\n }\n }\n case 'ai.generation.progress': {\n const payload = event.payload as GenerationProgressPayload\n if (state.pausedGenerationIds?.[payload.generationId]) return state\n if (\n terminalGenerationReason(\n state,\n payload.generationId,\n payload.requestId,\n ) !== undefined\n ) {\n return state\n }\n const activeProjection = state.activeProjection\n if (\n state.activeGeneration?.generationId !== payload.generationId ||\n state.activeGeneration.requestId !== payload.requestId ||\n activeProjection?.generationId !== payload.generationId\n ) {\n return state\n }\n const progress = advanceProjection({\n projection: activeProjection,\n base: state.messages.find(\n (message) => message.id === activeProjection.responseMessageId,\n ),\n chunks: payload.chunks,\n index: event.index,\n })\n return {\n ...state,\n messages: upsertResponse({\n messages: state.messages,\n message: progress.message,\n inputId: state.activeGeneration.messageId,\n }),\n activeProjection: {\n ...activeProjection,\n batches: progress.batches,\n cursor: progress.cursor,\n },\n status: 'generating',\n }\n }\n case 'ai.generation.completed': {\n const payload = event.payload as GenerationCompletedPayload\n if (\n terminalGenerationReason(\n state,\n payload.generationId,\n payload.requestId,\n ) !== undefined\n ) {\n return state\n }\n if (\n state.activeGeneration?.generationId !== payload.generationId ||\n state.activeGeneration.requestId !== payload.requestId\n ) {\n return state\n }\n const usage = payload.usage\n ? [\n ...state.usage.filter(\n (entry) => entry.generationId !== payload.generationId,\n ),\n { generationId: payload.generationId, usage: payload.usage },\n ]\n : state.usage\n const next = {\n ...state,\n activeGeneration: null,\n activeProjection:\n state.activeProjection?.generationId === payload.generationId\n ? { ...state.activeProjection, completionIndex: event.index }\n : state.activeProjection,\n usage,\n }\n return { ...next, status: waitingStatus(next) }\n }\n case 'ai.generation.failed': {\n const payload = event.payload as GenerationFailedPayload\n if (\n terminalGenerationReason(\n state,\n payload.generationId,\n payload.requestId,\n ) !== undefined\n ) {\n return state\n }\n if (\n (state.activeGeneration?.generationId !== payload.generationId ||\n state.activeGeneration.requestId !== payload.requestId) &&\n !(\n payload.stepLimit === true &&\n state.activeRequestReason === 'tool' &&\n state.responseOwners[payload.responseMessageId]?.requestId ===\n payload.requestId &&\n state.responseOwners[payload.responseMessageId]?.generationId ===\n payload.generationId &&\n state.activeRequestSourceGenerationId === payload.generationId &&\n state.activeResponseMessageId === payload.responseMessageId\n )\n ) {\n return state\n }\n if (payload.superseded === true) {\n return restoreGenerationBase(\n state,\n payload.generationId,\n payload.responseMessageId,\n 'superseded',\n )\n }\n const projection =\n state.activeProjection?.generationId === payload.generationId\n ? state.activeProjection\n : null\n const shouldProject =\n projection !== null &&\n (projection.baseMessage !== undefined || projection.batches.length > 0)\n return {\n ...state,\n messages: shouldProject\n ? upsertMessage(\n state.messages,\n interruptUIMessage(\n projectedMessage(projection),\n `Generation failed before tool completion: ${payload.error}`,\n ),\n )\n : state.messages,\n status: 'failed',\n activeGeneration: null,\n activeResponseMessageId: null,\n activeProjection: projection,\n terminalGenerations: {\n ...state.terminalGenerations,\n [payload.generationId]: 'failed',\n },\n terminalRequestIds: {\n ...state.terminalRequestIds,\n [payload.requestId]: true,\n ...(state.activeRequestId === null\n ? {}\n : { [state.activeRequestId]: true as const }),\n },\n compaction:\n projection?.generationId === payload.generationId\n ? (projection.baseCompaction ?? null)\n : state.compaction?.generationId === payload.generationId\n ? null\n : state.compaction,\n pendingApprovals: state.pendingApprovals.filter(\n (approval) => approval.generationId !== payload.generationId,\n ),\n pendingInputs: state.pendingInputs.filter(\n (input) => input.generationId !== payload.generationId,\n ),\n tools: stopGenerationTools(\n state.tools,\n payload.generationId,\n payload.responseMessageId,\n payload.error,\n ),\n error: payload.error,\n }\n }\n case 'ai.message.interrupted': {\n const payload = event.payload as MessageInterruptedPayload\n const owner = state.responseOwners[payload.messageId]\n const currentGenerationId = owner?.generationId\n const targetRequestId =\n payload.requestId ??\n (owner?.generationId === payload.generationId\n ? owner?.requestId\n : undefined)\n const ownsRequestPhase =\n payload.requestId !== undefined &&\n state.activeGeneration === null &&\n state.activeRequestId === payload.requestId &&\n state.activeResponseMessageId === payload.messageId\n if (\n currentGenerationId !== undefined &&\n !ownsRequestPhase &&\n (payload.generationId !== undefined\n ? currentGenerationId !== payload.generationId\n : owner?.requestId !== payload.requestId)\n ) {\n return state\n }\n if (\n state.activeGeneration === null &&\n state.activeRequestId !== null &&\n state.activeResponseMessageId === payload.messageId &&\n targetRequestId !== state.activeRequestId\n ) {\n return state\n }\n const currentTerminal =\n currentGenerationId === undefined\n ? undefined\n : terminalGenerationReason(\n state,\n currentGenerationId,\n owner?.requestId,\n )\n if (\n currentTerminal === 'completed' ||\n currentTerminal === 'interrupted' ||\n currentTerminal === 'superseded'\n ) {\n return state\n }\n const active = state.activeGeneration\n if (active === null) {\n if (\n payload.requestId !== undefined &&\n state.activeRequestId !== null &&\n state.activeRequestId === payload.requestId &&\n state.activeResponseMessageId === payload.messageId\n ) {\n const projectedState =\n currentGenerationId === undefined\n ? null\n : interruptGenerationProjection(\n state,\n currentGenerationId,\n payload.messageId,\n payload.lastSeenIndex ?? Number.POSITIVE_INFINITY,\n )\n const baseState = projectedState ?? state\n return {\n ...baseState,\n status: 'idle',\n activeRequestId: null,\n activeRequestReason: null,\n activeRequestSourceGenerationId: null,\n activeResponseMessageId: null,\n activeProjection: null,\n terminalRequestIds: {\n ...baseState.terminalRequestIds,\n [payload.requestId]: true,\n },\n ...(currentGenerationId === undefined\n ? {}\n : {\n terminalGenerations: {\n ...baseState.terminalGenerations,\n [currentGenerationId]: 'interrupted' as const,\n },\n }),\n error: null,\n }\n }\n const targetGenerationId =\n payload.generationId ??\n (currentGenerationId !== undefined &&\n owner?.requestId === payload.requestId\n ? currentGenerationId\n : undefined)\n if (targetGenerationId === undefined) return state\n if (currentGenerationId !== targetGenerationId) return state\n const matchesGeneration = (generationId: string): boolean =>\n targetGenerationId === generationId\n const hasMessageWork =\n state.pendingApprovals.some(\n (approval) =>\n approval.messageId === payload.messageId &&\n matchesGeneration(approval.generationId),\n ) ||\n state.pendingInputs.some(\n (input) =>\n input.messageId === payload.messageId &&\n matchesGeneration(input.generationId),\n ) ||\n state.tools.some(\n (activity) =>\n activity.messageId === payload.messageId &&\n activity.status === 'running' &&\n matchesGeneration(activity.generationId),\n )\n const resolvesFailedGeneration =\n state.status === 'failed' &&\n currentGenerationId === targetGenerationId &&\n (state.activeRequestId === null ||\n state.activeRequestId === targetRequestId ||\n (state.activeRequestReason === 'tool' &&\n state.activeRequestSourceGenerationId === targetGenerationId))\n const resolvesCurrentGeneration =\n currentGenerationId === targetGenerationId &&\n currentTerminal === undefined\n if (\n !hasMessageWork &&\n !resolvesFailedGeneration &&\n !resolvesCurrentGeneration\n ) {\n return state\n }\n const pendingRequestId = state.activeRequestId\n const projectedState = interruptGenerationProjection(\n state,\n targetGenerationId,\n payload.messageId,\n payload.lastSeenIndex ?? Number.POSITIVE_INFINITY,\n )\n const baseState = projectedState ?? state\n const next = {\n ...baseState,\n activeRequestId: null,\n activeRequestReason: null,\n activeRequestSourceGenerationId: null,\n activeResponseMessageId: null,\n activeProjection: null,\n messages:\n projectedState === null\n ? state.messages.map((message) =>\n message.id === payload.messageId\n ? interruptUIMessage(message)\n : message,\n )\n : baseState.messages,\n pendingApprovals: baseState.pendingApprovals.filter(\n (approval) =>\n approval.messageId !== payload.messageId ||\n !matchesGeneration(approval.generationId),\n ),\n pendingInputs: baseState.pendingInputs.filter(\n (input) =>\n input.messageId !== payload.messageId ||\n !matchesGeneration(input.generationId),\n ),\n tools:\n projectedState === null\n ? stopGenerationTools(\n state.tools,\n targetGenerationId,\n payload.messageId,\n 'Tool execution was interrupted.',\n )\n : baseState.tools,\n terminalGenerations: {\n ...baseState.terminalGenerations,\n [targetGenerationId]: 'interrupted' as const,\n },\n ...(pendingRequestId === null\n ? {}\n : {\n terminalRequestIds: {\n ...baseState.terminalRequestIds,\n [pendingRequestId]: true as const,\n },\n }),\n error: resolvesFailedGeneration ? null : state.error,\n }\n return {\n ...next,\n status: waitingStatus(next),\n }\n }\n if (\n payload.messageId !== active.responseMessageId ||\n (payload.generationId !== active.generationId &&\n payload.requestId !== active.requestId)\n ) {\n return state\n }\n const cutoff = payload.lastSeenIndex ?? Number.POSITIVE_INFINITY\n const projectedState = interruptGenerationProjection(\n state,\n active.generationId,\n active.responseMessageId,\n cutoff,\n )\n const baseState =\n projectedState ??\n restoreGenerationBase(\n state,\n active.generationId,\n active.responseMessageId,\n 'interrupted',\n )\n const next = {\n ...baseState,\n activeRequestId: null,\n activeRequestReason: null,\n activeRequestSourceGenerationId: null,\n activeResponseMessageId: null,\n terminalRequestIds: {\n ...baseState.terminalRequestIds,\n [active.requestId]: true as const,\n },\n tools:\n projectedState === null\n ? stopGenerationTools(\n baseState.tools,\n active.generationId,\n active.responseMessageId,\n 'Tool execution was interrupted.',\n )\n : baseState.tools,\n }\n return { ...next, status: lifecycleStatus(state, next) }\n }\n case 'ai.tool.called': {\n const payload = event.payload as ToolCalledPayload\n const projection = state.activeProjection\n if (\n isStaleGeneration(state, payload.messageId, payload) ||\n terminalGenerationReason(\n state,\n payload.generationId,\n payload.requestId,\n ) !== undefined\n ) {\n return state\n }\n if (\n state.tools.some(\n (activity) =>\n activity.generationId === payload.generationId &&\n activity.toolCallId === payload.toolCallId &&\n activity.status === 'failed' &&\n state.activeGeneration?.generationId !== payload.generationId,\n )\n ) {\n return state\n }\n if (projection?.generationId !== payload.generationId) {\n const next = {\n ...state,\n tools: reduceToolActivity(state.tools, {\n type: 'ai.tool.called',\n payload,\n }),\n }\n return { ...next, status: lifecycleStatus(state, next) }\n }\n const activeProjection: ActiveGenerationProjection<M> = {\n ...projection,\n toolEvents: [\n ...projection.toolEvents,\n { index: event.index, type: 'ai.tool.called', payload },\n ],\n }\n const next = {\n ...state,\n activeProjection,\n tools: projectedTools(activeProjection),\n }\n return { ...next, status: lifecycleStatus(state, next) }\n }\n case 'ai.tool.result': {\n const payload = event.payload as ToolResultPayload\n const projection = state.activeProjection\n const terminalReason = terminalGenerationReason(\n state,\n payload.generationId,\n payload.requestId,\n )\n const completesFailedTool =\n terminalReason === 'failed' &&\n state.status === 'failed' &&\n payload.preliminary !== true &&\n projection?.generationId === payload.generationId &&\n projectedTools(projection).some(\n (activity) =>\n activity.generationId === payload.generationId &&\n activity.toolCallId === payload.toolCallId &&\n activity.status === 'running',\n )\n if (\n isStaleGeneration(state, payload.messageId, payload) ||\n (terminalReason !== undefined && !completesFailedTool)\n ) {\n return state\n }\n if (\n state.tools.some(\n (activity) =>\n activity.generationId === payload.generationId &&\n activity.toolCallId === payload.toolCallId &&\n activity.status === 'failed' &&\n state.activeGeneration?.generationId !== payload.generationId &&\n !completesFailedTool,\n )\n ) {\n return state\n }\n if (projection?.generationId !== payload.generationId) {\n const next = {\n ...state,\n messages: projectMessageChunks(state.messages, payload.messageId, [\n toolResultChunk(payload),\n ]),\n tools: reduceToolActivity(state.tools, {\n type: 'ai.tool.result',\n payload,\n }),\n }\n return { ...next, status: lifecycleStatus(state, next) }\n }\n const activeProjection: ActiveGenerationProjection<M> = {\n ...projection,\n cursor: null,\n toolEvents: [\n ...projection.toolEvents,\n { index: event.index, type: 'ai.tool.result', payload },\n ],\n }\n const projected = projectedResponse({\n state,\n projection: activeProjection,\n })\n const tools = projectedTools(activeProjection)\n const failureError = state.error ?? 'Generation failed.'\n const next = {\n ...state,\n messages: upsertMessage(\n state.messages,\n terminalReason === 'failed'\n ? interruptUIMessage(\n projected,\n `Generation failed before tool completion: ${failureError}`,\n )\n : projected,\n ),\n activeProjection,\n tools:\n terminalReason === 'failed'\n ? stopGenerationTools(\n tools,\n payload.generationId,\n payload.messageId,\n failureError,\n )\n : tools,\n }\n return { ...next, status: lifecycleStatus(state, next) }\n }\n case 'ai.approval.requested': {\n const payload = event.payload as ApprovalRequestedPayload\n const projection = state.activeProjection\n if (\n isStaleGeneration(state, payload.messageId, payload) ||\n terminalGenerationReason(\n state,\n payload.generationId,\n payload.requestId,\n ) !== undefined\n ) {\n return state\n }\n if (\n state.tools.some(\n (activity) =>\n activity.generationId === payload.generationId &&\n activity.toolCallId === payload.toolCallId &&\n activity.status === 'failed' &&\n state.activeGeneration?.generationId !== payload.generationId,\n )\n ) {\n return state\n }\n const activeProjection =\n projection?.generationId === payload.generationId\n ? {\n ...projection,\n cursor: null,\n approvalEvents: [\n ...projection.approvalEvents,\n {\n index: event.index,\n type: 'ai.approval.requested' as const,\n payload,\n },\n ],\n }\n : projection\n const next = {\n ...state,\n messages:\n activeProjection === null || activeProjection === projection\n ? projectMessageChunks(state.messages, payload.messageId, [\n approvalRequestedChunk(payload),\n ])\n : upsertMessage(\n state.messages,\n projectedResponse({ state, projection: activeProjection }),\n ),\n activeProjection,\n pendingApprovals:\n payload.isAutomatic === true\n ? state.pendingApprovals\n : [\n ...state.pendingApprovals.filter(\n (approval) =>\n approval.approvalId !== payload.approvalId ||\n approval.messageId !== payload.messageId,\n ),\n payload,\n ],\n }\n return {\n ...next,\n status: lifecycleStatus(state, next),\n }\n }\n case 'ai.approval.responded': {\n const payload = event.payload as ApprovalRespondedPayload\n if (\n isStaleGeneration(state, payload.messageId, payload) ||\n terminalGenerationReason(\n state,\n payload.generationId,\n payload.requestId,\n ) !== undefined\n ) {\n return state\n }\n const projection = state.activeProjection\n const pendingRequest = state.pendingApprovals.find(\n (candidate) =>\n candidate.approvalId === payload.approvalId &&\n candidate.messageId === payload.messageId &&\n candidate.generationId === payload.generationId,\n )\n const activeRequest = projection?.approvalEvents.findLast(\n (candidate) =>\n candidate.type === 'ai.approval.requested' &&\n candidate.payload.approvalId === payload.approvalId &&\n candidate.payload.messageId === payload.messageId &&\n candidate.payload.generationId === payload.generationId,\n )\n if (\n state.status === 'failed' &&\n pendingRequest === undefined &&\n activeRequest === undefined\n ) {\n return state\n }\n const activeProjection =\n projection !== null && activeRequest !== undefined\n ? {\n ...projection,\n cursor: null,\n approvalEvents: [\n ...projection.approvalEvents,\n {\n index: event.index,\n type: 'ai.approval.responded' as const,\n payload,\n },\n ],\n }\n : projection\n const next = {\n ...state,\n messages:\n activeProjection === null || activeProjection === projection\n ? answerApproval(state.messages, payload)\n : upsertMessage(\n state.messages,\n projectedResponse({ state, projection: activeProjection }),\n ),\n activeProjection:\n activeProjection === null\n ? null\n : { ...activeProjection, cursor: null },\n pendingApprovals: state.pendingApprovals.filter(\n (approval) =>\n approval.approvalId !== payload.approvalId ||\n approval.messageId !== payload.messageId ||\n approval.generationId !== payload.generationId,\n ),\n }\n return {\n ...next,\n status: lifecycleStatus(state, next),\n }\n }\n case 'ai.input.requested': {\n const payload = event.payload as InputRequestedPayload\n if (\n isStaleGeneration(state, payload.messageId, payload) ||\n terminalGenerationReason(\n state,\n payload.generationId,\n payload.requestId,\n ) !== undefined\n ) {\n return state\n }\n const next = {\n ...state,\n pendingInputs: [\n ...state.pendingInputs.filter(\n (input) =>\n input.messageId !== payload.messageId ||\n input.generationId !== payload.generationId ||\n input.inputId !== payload.inputId,\n ),\n payload,\n ],\n }\n return { ...next, status: lifecycleStatus(state, next) }\n }\n case 'ai.input.responded': {\n const payload = event.payload as InputRespondedPayload\n if (\n isStaleGeneration(state, payload.messageId, payload) ||\n terminalGenerationReason(\n state,\n payload.generationId,\n payload.requestId,\n ) !== undefined\n ) {\n return state\n }\n const next = {\n ...state,\n pendingInputs: state.pendingInputs.filter(\n (input) =>\n input.inputId !== payload.inputId ||\n input.messageId !== payload.messageId ||\n input.generationId !== payload.generationId,\n ),\n }\n return { ...next, status: lifecycleStatus(state, next) }\n }\n case 'ai.compaction.requested': {\n const payload = event.payload as CompactionRequestedPayload\n if (state.activeGeneration?.generationId !== payload.generationId) {\n return state\n }\n return {\n ...state,\n compaction: { status: 'running', ...payload },\n }\n }\n case 'ai.compaction.completed': {\n const payload = event.payload as CompactionCompletedPayload<M>\n if (\n state.activeGeneration?.generationId !== payload.generationId ||\n state.compaction?.status !== 'running' ||\n state.compaction.generationId !== payload.generationId\n ) {\n return state\n }\n const compaction: CompactionState<M> = {\n status: 'completed',\n ...payload,\n throughIndex:\n payload.throughIndex ?? state.activeProjection!.promptThroughIndex!,\n }\n return {\n ...state,\n compaction,\n activeProjection: state.activeProjection && {\n ...state.activeProjection,\n baseCompaction: compaction,\n },\n }\n }\n default:\n return state\n }\n}\n\n/** Derive AI SDK UI messages directly from an A2 event history. */\nexport function deriveUIMessages<M extends UIMessage = UIMessage>(\n history: readonly { type: string; payload: unknown; index: number }[],\n): M[] {\n let state = initialState<M>()\n for (const event of history) state = reduceAIState(state, event)\n return state.messages\n}\n\n/** Build the standard AI state projection for any contract containing the protocol. */\nexport function createReducer<D extends EventDefs>(options: {\n contract: Contract<D>\n name?: string\n fold?: Reducer<D, AIState<AIMessageFrom<D>>>['fold']\n stateSchema?: StandardSchemaV1<unknown, AIState<AIMessageFrom<D>>>\n}): AIStoredReducer<D, AIState<AIMessageFrom<D>>> {\n type M = AIMessageFrom<D>\n const reducer = options.contract\n .reducer({\n name: options.name ?? 'a2.ai.state.v22',\n initialState: initialState<M>(),\n ...(options.stateSchema === undefined\n ? {}\n : { stateSchema: options.stateSchema }),\n })\n .fold(options.fold ?? ((state, event) => reduceAIState(state, event)))\n return storedAIReducer({\n ...reducer,\n [clientStateProjection]: projectAIClientState,\n })\n}\n\ntype CommandInput<C> = { type: 'ai.control.requested'; payload: C; id?: string }\ntype ControlInput<\n M extends UIMessage,\n A extends ControlCommand<M>['action'],\n> = CommandInput<Extract<ControlCommand<M>, { action: A }>> &\n (A extends 'send' | 'steer' ? { id: string } : {})\n\nexport type AIInputs = {\n message<M extends UIMessage>(\n message: M,\n options?: { generate?: boolean },\n ): ControlInput<M, 'send'>[]\n seed<M extends UIMessage>(message: M): ControlInput<M, 'send'>[]\n queue: {\n remove(options: { inputId: string }): ControlInput<UIMessage, 'remove'>[]\n sendNow(options: {\n inputId: string\n turnId: string | null\n lastSeenIndex?: number\n }): ControlInput<UIMessage, 'send-now'>[]\n edit<M extends UIMessage>(options: {\n message: M\n }): ControlInput<M, 'edit'>[]\n move(options: {\n inputId: string\n beforeId: string | null\n }): ControlInput<UIMessage, 'move'>[]\n }\n stop(options: {\n turnId: string\n lastSeenIndex?: number\n }): ControlInput<UIMessage, 'stop'>[]\n steer<M extends UIMessage>(options: {\n turnId: string\n message: M\n lastSeenIndex?: number\n }): ControlInput<M, 'steer'>[]\n pause(options: {\n when: 'now' | 'after-turn'\n }): ControlInput<UIMessage, 'pause'>[]\n resume(): ControlInput<UIMessage, 'resume'>[]\n approval(\n response: ApprovalRespondedPayload,\n ): ControlInput<UIMessage, 'approval'>[]\n input(response: InputRespondedPayload): ControlInput<UIMessage, 'input'>[]\n requestInput(\n request: InputRequestedPayload,\n ): ControlInput<UIMessage, 'request-input'>[]\n retry(request: RetryGenerationOptions): ControlInput<UIMessage, 'retry'>[]\n interrupt(\n request: MessageInterruptedPayload,\n ): ControlInput<UIMessage, 'interrupt'>[]\n toolResult(\n result: ToolResultPayload,\n ): ControlInput<UIMessage, 'tool-result'>[]\n}\n\nconst commandInput = <C extends ControlCommand<UIMessage>>(\n payload: C,\n): CommandInput<C>[] => [{ type: 'ai.control.requested', payload }]\nconst messageInput = <M extends UIMessage>(\n message: M,\n generate?: boolean,\n): ControlInput<M, 'send'>[] => [\n {\n type: 'ai.control.requested',\n id: message.id,\n payload: {\n action: 'send',\n message,\n ...(generate === false ? { generate: false } : {}),\n },\n },\n]\n\n/** Pure append inputs for the built-in AI protocol. */\nexport const inputs: AIInputs = {\n toolResult: (result) => commandInput({ action: 'tool-result', result }),\n queue: {\n remove: (options) => commandInput({ action: 'remove', ...options }),\n sendNow: (options) => commandInput({ action: 'send-now', ...options }),\n edit: (options) => commandInput({ action: 'edit', ...options }),\n move: (options) => commandInput({ action: 'move', ...options }),\n },\n stop: (options) => commandInput({ action: 'stop', ...options }),\n steer: (options) => [\n {\n type: 'ai.control.requested',\n id: options.message.id,\n payload: { action: 'steer', ...options },\n },\n ],\n pause: (options) => commandInput({ action: 'pause', ...options }),\n resume: () => commandInput({ action: 'resume' }),\n message<M extends UIMessage>(message: M, options?: { generate?: boolean }) {\n return messageInput(message, options?.generate)\n },\n seed<M extends UIMessage>(message: M) {\n return messageInput(message, false)\n },\n approval: (response) => [\n {\n ...commandInput({ action: 'approval', response })[0]!,\n id: `ai.approval:${encodeURIComponent(response.requestId)}:${encodeURIComponent(response.messageId)}:${encodeURIComponent(response.generationId)}:${encodeURIComponent(response.approvalId)}:response`,\n },\n ],\n input: (response) => [\n {\n ...commandInput({ action: 'input', response })[0]!,\n id: `ai.input:${encodeURIComponent(response.requestId)}:${encodeURIComponent(response.messageId)}:${encodeURIComponent(response.generationId)}:${encodeURIComponent(response.inputId)}:response`,\n },\n ],\n requestInput: (request) => [\n {\n ...commandInput({ action: 'request-input', request })[0]!,\n id: `ai.input:${encodeURIComponent(request.requestId)}:${encodeURIComponent(request.messageId)}:${encodeURIComponent(request.generationId)}:${encodeURIComponent(request.inputId)}:request`,\n },\n ],\n retry: (request) => [\n {\n ...commandInput({ action: 'retry', request })[0]!,\n id: `ai.retry:${request.retryId}`,\n },\n ],\n interrupt: (request) => [\n {\n ...commandInput({ action: 'interrupt', request })[0]!,\n id: `ai.interrupt:${request.generationId ?? request.requestId}`,\n },\n ],\n}\n\n/**\n * Read the durable handler context ambient to the current AI tool\n * execution. A2 runs each local tool's `execute` inside this scope, so\n * plain AI SDK `tool()` definitions reach their `event`, `attempt`,\n * `session`, and `signal` without an A2-specific wrapper. The agent (or\n * contract) argument carries the event types and is verified against\n * the executing server's contract.\n */\nexport function handlerContext<D extends AgentToolEventDefs>(\n agentOrContract: Contract<D> | { readonly contract: Contract<D> },\n): AgentToolContext<D> {\n const contract =\n 'contract' in agentOrContract ? agentOrContract.contract : agentOrContract\n const scope = ambientToolScopeStorage()?.getStore()\n if (scope === undefined) {\n throw new TypeError(\n `handlerContext('${contract.name}') requires an ambient A2 tool execution: call it inside a local tool's execute, or wrap direct tool tests with runWithHandlerContext`,\n )\n }\n if (scope.contract !== undefined && scope.contract.name !== contract.name) {\n throw new TypeError(\n `handlerContext('${contract.name}') was called during a tool execution for agent '${scope.contract.name}'`,\n )\n }\n return scope.context as AgentToolContext<D>\n}\n\n/**\n * Define an agent: built-in AI protocol + application events and one state\n * reducer. The result is isomorphic.\n */\nexport function agent<\n M extends UIMessage = UIMessage,\n E extends EventDefs = Record<never, never>,\n>(options: AgentOptions<M, E>): AgentDefinition<M, AIEventDefs<M> & E> {\n const builtIns = createEvents(\n options.messageSchema === undefined\n ? undefined\n : { messageSchema: options.messageSchema },\n )\n const extensions = options.events ?? ({} as E)\n for (const key of Object.keys(extensions)) {\n if (Object.hasOwn(builtIns, key)) {\n throw new TypeError(\n `agent event '${key}' conflicts with a built-in event`,\n )\n }\n }\n const agentContract = createContract({\n name: options.name,\n events: { ...builtIns, ...extensions },\n })\n const reducer = agentContract\n .reducer({\n name: options.reducerName ?? 'a2.ai.state.v22',\n initialState: initialState<M>(),\n })\n .fold((state, event) => reduceAIState(state, event))\n\n const definition = {\n contract: agentContract,\n reducer: storedAIReducer({\n ...reducer,\n [clientStateProjection]: projectAIClientState<M>,\n }),\n }\n return definition as unknown as AgentDefinition<M, AIEventDefs<M> & E>\n}\n\nexport type {\n FinishReason,\n JSONValue,\n LanguageModelUsage,\n UIMessage,\n UIMessageChunk,\n}\n"],"mappings":"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"}
|
package/dist/ai-server.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { a as ContractEvent, s as EventDefs } from "./reducer-otzHjuJj.js";
|
|
2
2
|
import { n as A2Server, p as ServerOptions, s as HandlerContext } from "./server-DbD7IJVK.js";
|
|
3
|
-
import { l as AgentToolContext, o as AgentDefinition, t as AIEventDefs, u as AgentToolEventDefs } from "./ai-
|
|
3
|
+
import { l as AgentToolContext, o as AgentDefinition, t as AIEventDefs, u as AgentToolEventDefs } from "./ai-CrEf6p_W.js";
|
|
4
4
|
import { Instructions, LanguageModel, ModelMessage, TextStreamPart, ToolSet, ToolSet as ToolSet$1, UIMessage, UIMessageChunk, streamText } from "ai";
|
|
5
5
|
//#region src/ai-sdk-step.d.ts
|
|
6
6
|
type StreamTextOptions<T extends ToolSet$1> = Parameters<typeof streamText<T>>[0];
|
package/dist/ai-server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-server.d.ts","names":[],"sources":["../src/ai-sdk-step.ts","../src/ai-server.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ai-server.d.ts","names":[],"sources":["../src/ai-sdk-step.ts","../src/ai-server.ts"],"mappings":"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"}
|