experimental-a2 0.3.0 → 0.5.0

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.
Files changed (205) hide show
  1. package/CHANGELOG.md +207 -0
  2. package/dist/ai-CFNeCrRl.d.ts +334 -0
  3. package/dist/ai-CFNeCrRl.d.ts.map +1 -0
  4. package/dist/ai-server.browser.js +2 -0
  5. package/dist/ai-server.browser.js.map +1 -0
  6. package/dist/ai-server.d.ts +49 -9
  7. package/dist/ai-server.d.ts.map +1 -0
  8. package/dist/ai-server.js +123 -49
  9. package/dist/ai-server.js.map +1 -0
  10. package/dist/ai.d.ts +2 -303
  11. package/dist/ai.js +233 -86
  12. package/dist/ai.js.map +1 -0
  13. package/dist/cli-B3VuxoDe.js +599 -0
  14. package/dist/cli-B3VuxoDe.js.map +1 -0
  15. package/dist/cli-bin.d.ts +1 -0
  16. package/dist/cli-bin.js +7 -0
  17. package/dist/cli-bin.js.map +1 -0
  18. package/dist/cli.d.ts +20 -0
  19. package/dist/cli.d.ts.map +1 -0
  20. package/dist/cli.js +2 -0
  21. package/dist/client-BKlyLiOU.js +1008 -0
  22. package/dist/client-BKlyLiOU.js.map +1 -0
  23. package/dist/client-D7mvIXrF.d.ts +191 -0
  24. package/dist/client-D7mvIXrF.d.ts.map +1 -0
  25. package/dist/client.d.ts +2 -90
  26. package/dist/client.js +1 -409
  27. package/dist/{contract-CG_adnu_.js → contract-48bUMgcL.js} +12 -2
  28. package/dist/contract-48bUMgcL.js.map +1 -0
  29. package/dist/{contract-C_3dIIEU.d.ts → contract-jIfaR085.d.ts} +63 -8
  30. package/dist/contract-jIfaR085.d.ts.map +1 -0
  31. package/dist/devtools-J_jZ2vQf.d.ts +152 -0
  32. package/dist/devtools-J_jZ2vQf.d.ts.map +1 -0
  33. package/dist/devtools-kJJaORn-.js +340 -0
  34. package/dist/devtools-kJJaORn-.js.map +1 -0
  35. package/dist/devtools-server.browser.js +3 -1
  36. package/dist/devtools-server.browser.js.map +1 -0
  37. package/dist/devtools-server.d.ts +4 -3
  38. package/dist/devtools-server.d.ts.map +1 -0
  39. package/dist/devtools-server.js +226 -43
  40. package/dist/devtools-server.js.map +1 -0
  41. package/dist/devtools.d.ts +2 -0
  42. package/dist/devtools.js +2 -0
  43. package/dist/{errors-BJRMd-h6.js → errors-BQuJpe82.js} +6 -4
  44. package/dist/errors-BQuJpe82.js.map +1 -0
  45. package/dist/{errors-xL_JTXsY.d.ts → errors-W6nwJ-fm.d.ts} +3 -2
  46. package/dist/errors-W6nwJ-fm.d.ts.map +1 -0
  47. package/dist/http.d.ts +135 -28
  48. package/dist/http.d.ts.map +1 -0
  49. package/dist/http.js +647 -61
  50. package/dist/http.js.map +1 -0
  51. package/dist/{idempotent-replay-BMyHrP0L.js → idempotent-replay-DuqEkYA7.js} +4 -2
  52. package/dist/idempotent-replay-DuqEkYA7.js.map +1 -0
  53. package/dist/index.d.ts +5 -5
  54. package/dist/index.js +2 -2
  55. package/dist/{inspection-E7qbD0Xj.js → inspection-DaxB5jM2.js} +4 -1
  56. package/dist/inspection-DaxB5jM2.js.map +1 -0
  57. package/dist/internal-DstsI6Re.js +211 -0
  58. package/dist/internal-DstsI6Re.js.map +1 -0
  59. package/dist/otel.d.ts +3 -2
  60. package/dist/otel.d.ts.map +1 -0
  61. package/dist/otel.js +2 -0
  62. package/dist/otel.js.map +1 -0
  63. package/dist/platform-B4TnJtWu.js +34 -0
  64. package/dist/platform-B4TnJtWu.js.map +1 -0
  65. package/dist/react.d.ts +47 -15
  66. package/dist/react.d.ts.map +1 -0
  67. package/dist/react.js +30 -15
  68. package/dist/react.js.map +1 -0
  69. package/dist/retryable-lazy-DZWmHpii.js +2 -0
  70. package/dist/retryable-lazy-DZWmHpii.js.map +1 -0
  71. package/dist/scheduler-qstash.d.ts +79 -0
  72. package/dist/scheduler-qstash.d.ts.map +1 -0
  73. package/dist/scheduler-qstash.js +501 -0
  74. package/dist/scheduler-qstash.js.map +1 -0
  75. package/dist/scheduler-task-BpzhPnRS.js +56 -0
  76. package/dist/scheduler-task-BpzhPnRS.js.map +1 -0
  77. package/dist/{recovery-vercel.d.ts → scheduler-vercel.d.ts} +18 -24
  78. package/dist/scheduler-vercel.d.ts.map +1 -0
  79. package/dist/scheduler-vercel.js +228 -0
  80. package/dist/scheduler-vercel.js.map +1 -0
  81. package/dist/server-C72KOw51.js +1457 -0
  82. package/dist/server-C72KOw51.js.map +1 -0
  83. package/dist/server-DUF9pjsx.d.ts +261 -0
  84. package/dist/server-DUF9pjsx.d.ts.map +1 -0
  85. package/dist/server.browser.js +2 -0
  86. package/dist/server.browser.js.map +1 -0
  87. package/dist/server.d.ts +4 -155
  88. package/dist/server.js +2 -2
  89. package/dist/{log-ldf5g8Cx.d.ts → store-DysUkTH3.d.ts} +120 -35
  90. package/dist/store-DysUkTH3.d.ts.map +1 -0
  91. package/dist/{log-yJbXUf72.js → store-N8PXxDAS.js} +3 -1
  92. package/dist/store-N8PXxDAS.js.map +1 -0
  93. package/dist/store-codec-DTG0Ftek.js +10 -0
  94. package/dist/store-codec-DTG0Ftek.js.map +1 -0
  95. package/dist/store-memory.d.ts +12 -0
  96. package/dist/store-memory.d.ts.map +1 -0
  97. package/dist/{log-memory.js → store-memory.js} +145 -34
  98. package/dist/store-memory.js.map +1 -0
  99. package/dist/{log-polling-DZ1MiKLg.js → store-polling-dSeLxzfb.js} +7 -5
  100. package/dist/store-polling-dSeLxzfb.js.map +1 -0
  101. package/dist/{log-postgres.d.ts → store-postgres.d.ts} +7 -6
  102. package/dist/store-postgres.d.ts.map +1 -0
  103. package/dist/{log-postgres.js → store-postgres.js} +214 -24
  104. package/dist/store-postgres.js.map +1 -0
  105. package/dist/{log-redis-core-CyJ5L8yR.js → store-redis-core-BFLwz0Wj.js} +271 -66
  106. package/dist/store-redis-core-BFLwz0Wj.js.map +1 -0
  107. package/dist/{log-redis-http.d.ts → store-redis-http.d.ts} +8 -7
  108. package/dist/store-redis-http.d.ts.map +1 -0
  109. package/dist/{log-redis-http.js → store-redis-http.js} +22 -12
  110. package/dist/store-redis-http.js.map +1 -0
  111. package/dist/{log-redis.d.ts → store-redis.d.ts} +7 -6
  112. package/dist/store-redis.d.ts.map +1 -0
  113. package/dist/{log-redis.js → store-redis.js} +101 -39
  114. package/dist/store-redis.js.map +1 -0
  115. package/dist/{log-sqlite.d.ts → store-sqlite.d.ts} +7 -6
  116. package/dist/store-sqlite.d.ts.map +1 -0
  117. package/dist/{log-sqlite.js → store-sqlite.js} +118 -22
  118. package/dist/store-sqlite.js.map +1 -0
  119. package/dist/{telemetry-Cso0qyHQ.d.ts → telemetry-BjYHTfh2.d.ts} +3 -2
  120. package/dist/telemetry-BjYHTfh2.d.ts.map +1 -0
  121. package/dist/testing.browser.d.ts +1 -0
  122. package/dist/testing.browser.js +6 -0
  123. package/dist/testing.browser.js.map +1 -0
  124. package/dist/testing.d.ts +32 -0
  125. package/dist/testing.d.ts.map +1 -0
  126. package/dist/testing.js +103 -0
  127. package/dist/testing.js.map +1 -0
  128. package/dist/validate-XKT4FSNn.js +2 -0
  129. package/dist/validate-XKT4FSNn.js.map +1 -0
  130. package/dist/wire-BFQmSJ-9.js +284 -0
  131. package/dist/wire-BFQmSJ-9.js.map +1 -0
  132. package/docs/01-quickstart.mdx +3 -3
  133. package/docs/concepts/01-contracts.mdx +18 -13
  134. package/docs/concepts/02-handlers.mdx +7 -7
  135. package/docs/concepts/03-durability.mdx +21 -21
  136. package/docs/concepts/04-state.mdx +18 -21
  137. package/docs/guides/01-timers.mdx +154 -49
  138. package/docs/guides/02-cancellation.mdx +30 -4
  139. package/docs/guides/03-react.mdx +76 -57
  140. package/docs/guides/04-local-first.mdx +1 -1
  141. package/docs/guides/05-production.mdx +310 -61
  142. package/docs/guides/06-ai-agents.mdx +252 -74
  143. package/docs/guides/07-devtools.mdx +137 -12
  144. package/docs/guides/08-application-data.mdx +1 -1
  145. package/docs/guides/09-presence.mdx +263 -0
  146. package/docs/guides/10-transports.mdx +140 -0
  147. package/docs/index.mdx +18 -14
  148. package/docs/reference/01-api.mdx +839 -110
  149. package/docs/reference/02-errors.mdx +13 -6
  150. package/package.json +24 -7
  151. package/src/ai-coordinator.ts +358 -0
  152. package/src/ai-projector.ts +524 -0
  153. package/src/ai-sdk-step.ts +261 -0
  154. package/src/ai-server.browser.ts +5 -0
  155. package/src/ai-server.ts +1719 -0
  156. package/src/ai.ts +2155 -0
  157. package/src/cache-indexeddb.ts +10 -0
  158. package/src/cli-bin.ts +5 -0
  159. package/src/cli.ts +1046 -0
  160. package/src/client.ts +1826 -0
  161. package/src/contract.ts +206 -0
  162. package/src/deterministic-id.ts +72 -0
  163. package/src/devtools-app.ts +989 -0
  164. package/src/devtools-server.browser.ts +5 -0
  165. package/src/devtools-server.ts +604 -0
  166. package/src/devtools.ts +716 -0
  167. package/src/errors.ts +50 -0
  168. package/src/http.ts +394 -0
  169. package/src/idempotent-replay.ts +53 -0
  170. package/src/index.ts +37 -0
  171. package/src/inspection.ts +39 -0
  172. package/src/internal.ts +426 -0
  173. package/src/otel.ts +59 -0
  174. package/src/platform.ts +60 -0
  175. package/src/push-envelope.ts +137 -0
  176. package/src/react.ts +284 -0
  177. package/src/reducer.ts +108 -0
  178. package/src/retryable-lazy.ts +27 -0
  179. package/src/scheduler-qstash.ts +915 -0
  180. package/src/scheduler-task.ts +106 -0
  181. package/src/scheduler-vercel.ts +437 -0
  182. package/src/server.browser.ts +12 -0
  183. package/src/server.ts +2700 -0
  184. package/src/session-socket.ts +548 -0
  185. package/src/sse.ts +141 -0
  186. package/src/standard-schema.ts +77 -0
  187. package/src/store-codec.ts +10 -0
  188. package/src/store-memory.ts +788 -0
  189. package/src/store-polling.ts +102 -0
  190. package/src/store-postgres.ts +1212 -0
  191. package/src/store-redis-core.ts +1494 -0
  192. package/src/store-redis-http.ts +116 -0
  193. package/src/store-redis.ts +458 -0
  194. package/src/store-sqlite.ts +1108 -0
  195. package/src/store.ts +385 -0
  196. package/src/telemetry.ts +47 -0
  197. package/src/testing.browser.ts +5 -0
  198. package/src/testing.ts +185 -0
  199. package/src/validate.ts +39 -0
  200. package/src/wire.ts +454 -0
  201. package/dist/internal-gCd5qMry.js +0 -44
  202. package/dist/log-memory.d.ts +0 -11
  203. package/dist/recovery-vercel.js +0 -119
  204. package/dist/server-BcLa4RFL.js +0 -877
  205. package/dist/wire-BVsgR8o9.js +0 -62
package/dist/ai.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.js","names":["isRecord","createContract"],"sources":["../src/ai-projector.ts","../src/ai.ts"],"sourcesContent":["import type { UIMessage, UIMessageChunk } from 'ai'\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 structuredClone(base ?? { id: messageId, role: 'assistant', parts: [] }) 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\nconst parseCompleteJSON = (value: string): unknown => {\n try {\n return JSON.parse(value) as unknown\n } catch {\n return undefined\n }\n}\n\n/** Internal synchronous counterpart of the AI SDK UI message stream fold. */\nexport function projectUIMessage<M extends UIMessage>(options: {\n messageId: string\n base?: M\n chunks: readonly UIMessageChunk[]\n}): M {\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<string, MutablePart>()\n const activeReasoning = new Map<string, MutablePart>()\n const partialTools = new Map<string, PartialToolCall>()\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: parseCompleteJSON(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 (chunk.messageId !== undefined) record['id'] = chunk.messageId\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 return message\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 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-streaming' ||\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","/**\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 { contract as createContract } from './contract.ts'\nimport type { AppendInput, Contract, EventDefs } from './contract.ts'\nimport { interruptUIMessage, projectUIMessage } from './ai-projector.ts'\nimport { ambientToolScopeStorage } from './internal.ts'\nimport type { Reducer } from './reducer.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'\n\nexport type GenerationReason = 'message' | 'tool' | 'input' | 'retry'\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 messageId: string\n reason: GenerationReason\n responseMessageId?: 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}\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}\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 messageId: string\n generationId: string\n approvalId: string\n toolCallId: string\n isAutomatic?: boolean\n signature?: string\n}\nexport type ApprovalRespondedPayload = {\n messageId: string\n generationId: string\n approvalId: string\n approved: boolean\n reason?: string\n}\nexport type InputRequestedPayload = {\n messageId: string\n generationId: string\n inputId: string\n name: string\n question?: JSONValue\n}\nexport type InputRespondedPayload = {\n messageId: string\n generationId: string\n inputId: string\n name: string\n value: JSONValue\n}\nexport type CompactionRequestedPayload = {\n generationId: string\n throughMessageId: string\n}\nexport type CompactionCompletedPayload<M extends UIMessage> = {\n generationId: string\n throughMessageId: string\n messages: M[]\n retainedMessageIds?: string[]\n}\n\nexport type AIEventDefs<M extends UIMessage = UIMessage> = {\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}\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 baseCompaction?: CompactionState<M> | null\n batches: Array<{ index: number; chunks: UIMessageChunk[] }>\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 messages?: M[]\n retainedMessageIds?: string[]\n}\n\nexport type GenerationUsage = {\n generationId: string\n usage: LanguageModelUsage\n}\n\nexport type AIState<M extends UIMessage = UIMessage> = {\n session: { created: boolean; metadata?: JSONValue }\n messages: M[]\n status: AgentStatus\n activeGeneration: ActiveGeneration | null\n activeRequestId: string | null\n activeResponseMessageId: string | null\n activeProjection: ActiveGenerationProjection<M> | null\n responseGenerationIds: Record<string, string>\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 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: Reducer<D, AIState<M>>\n}\n\nexport type AgentToolEventDefs = EventDefs &\n Pick<AIEventDefs, 'ai.tool.called' | 'ai.approval.responded'>\n\n/** The durable handler context supplied when A2 executes a local AI tool. */\nexport type AgentToolContext<D extends AgentToolEventDefs> =\n | HandlerContext<D, 'ai.tool.called'>\n | HandlerContext<D, 'ai.approval.responded'>\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 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 !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 !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 messages,\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.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 optionalStringField(value, 'responseMessageId') &&\n (value['reason'] === 'message' ||\n value['reason'] === 'tool' ||\n value['reason'] === 'input' ||\n value['reason'] === 'retry'),\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 ),\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, '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, '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, '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, '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 ),\n 'ai.compaction.completed': compactionPayloadSchema(messageSchema),\n }\n return definition\n}\n\nexport const events: AIEventDefs<UIMessage> = createEvents()\n\nconst initialState = <M extends UIMessage>(): AIState<M> => ({\n session: { created: false },\n messages: [],\n status: 'idle',\n activeGeneration: null,\n activeRequestId: null,\n activeResponseMessageId: null,\n activeProjection: null,\n responseGenerationIds: {},\n pendingApprovals: [],\n pendingInputs: [],\n tools: [],\n compaction: null,\n usage: [],\n error: null,\n})\n\nconst upsertMessage = <M extends UIMessage>(messages: M[], message: M): 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\nconst 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\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 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\nconst 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\nconst 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\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 generationId: string,\n): boolean => {\n const current = state.responseGenerationIds[messageId]\n return current !== undefined && current !== generationId\n}\n\nconst projectedMessage = <M extends UIMessage>(\n projection: ActiveGenerationProjection<M>,\n): M => {\n const projectionEvents: Array<{ index: number; chunks: UIMessageChunk[] }> = [\n ...projection.batches,\n ]\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 projectUIMessage({\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\nconst 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\nconst 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\nconst restoreGenerationBase = <M extends UIMessage>(\n state: AIState<M>,\n generationId: string,\n responseMessageId: string,\n reason: 'interrupted' | 'superseded',\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\nconst 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\nconst 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: projection.batches.filter((batch) => batch.index <= cutoff),\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 restored.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\nconst generationRequestId = (generationId: string): string | undefined => {\n const marker = ':generation:'\n const markerIndex = generationId.lastIndexOf(marker)\n return markerIndex === -1 ? undefined : generationId.slice(0, markerIndex)\n}\n\nconst terminalGenerationReason = <M extends UIMessage>(\n state: AIState<M>,\n generationId: string,\n): 'completed' | 'failed' | 'interrupted' | 'superseded' | undefined => {\n const terminal = state.terminalGenerations?.[generationId]\n if (terminal !== undefined) return terminal\n const requestId = generationRequestId(generationId)\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.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 status: 'closed',\n activeGeneration: null,\n activeRequestId: null,\n activeResponseMessageId: null,\n activeProjection: null,\n }\n case 'ai.message.created': {\n const { message } = event.payload as MessageCreatedPayload<M>\n return { ...state, messages: upsertMessage(state.messages, message) }\n }\n case 'ai.message.completed': {\n const { messageId } = event.payload as MessageCompletedPayload\n const generationId = state.responseGenerationIds[messageId]\n if (\n generationId === undefined ||\n terminalGenerationReason(state, generationId) !== undefined\n ) {\n return state\n }\n const requestId = generationRequestId(generationId)\n return {\n ...state,\n activeRequestId: 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 =\n payload.responseMessageId ??\n (payload.reason === 'message'\n ? `${payload.messageId}:assistant`\n : payload.messageId)\n const ownerGenerationId =\n state.responseGenerationIds[responseMessageId] ??\n state.activeGeneration?.generationId\n const ownerRequestId =\n ownerGenerationId === undefined\n ? undefined\n : generationRequestId(ownerGenerationId)\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.reason === 'message' ||\n (payload.reason === 'tool'\n ? ownerGenerationId !== undefined &&\n requestId === `ai.generate:tools:${ownerGenerationId}` &&\n state.activeRequestId === ownerRequestId &&\n state.status !== 'failed'\n : payload.reason === 'retry'\n ? state.status === 'failed'\n : ownerGenerationId !== undefined &&\n requestId?.startsWith(\n `ai.generate:input:${encodeURIComponent(responseMessageId)}:${encodeURIComponent(ownerGenerationId)}:`,\n ) === true &&\n state.activeRequestId === ownerRequestId &&\n state.status !== 'failed')\n if (!acceptsRequest) return state\n return {\n ...state,\n messages:\n payload.reason === 'retry' && payload.responseMessageId !== undefined\n ? state.messages.filter(\n (message) => message.id !== payload.responseMessageId,\n )\n : state.messages,\n activeProjection:\n payload.reason === 'retry' ? null : state.activeProjection,\n status: schedulesToolContinuation ? state.status : 'generating',\n activeRequestId: requestId ?? 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(state, payload.generationId) !== 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 =\n state.responseGenerationIds[payload.responseMessageId]\n const currentTerminal =\n currentOwner === undefined\n ? undefined\n : terminalGenerationReason(state, currentOwner)\n if (\n currentTerminal === 'completed' ||\n currentTerminal === 'interrupted'\n ) {\n return state\n }\n const marker = ':generation:'\n const currentAttempt = currentOwner?.startsWith(\n `${payload.requestId}${marker}`,\n )\n ? Number(currentOwner.slice(`${payload.requestId}${marker}`.length))\n : undefined\n if (\n currentAttempt !== undefined &&\n Number.isFinite(currentAttempt) &&\n currentAttempt >= payload.attempt\n ) {\n return state\n }\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 responseGenerationIds: {\n ...baseState.responseGenerationIds,\n [payload.responseMessageId]: payload.generationId,\n },\n activeProjection: {\n generationId: payload.generationId,\n responseMessageId: payload.responseMessageId,\n ...(baseMessage === undefined ? {} : { baseMessage }),\n baseCompaction: baseState.compaction,\n batches: [],\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 (terminalGenerationReason(state, payload.generationId) !== undefined) {\n return state\n }\n const activeProjection = state.activeProjection\n if (\n state.activeGeneration?.generationId !== payload.generationId ||\n activeProjection?.generationId !== payload.generationId\n ) {\n return state\n }\n const projection: ActiveGenerationProjection<M> = {\n ...activeProjection,\n batches: [\n ...activeProjection.batches.filter(\n (batch) => batch.index !== event.index,\n ),\n { index: event.index, chunks: payload.chunks },\n ].toSorted((left, right) => left.index - right.index),\n }\n return {\n ...state,\n messages: upsertMessage(state.messages, projectedMessage(projection)),\n activeProjection: projection,\n status: 'generating',\n }\n }\n case 'ai.generation.completed': {\n const payload = event.payload as GenerationCompletedPayload\n if (terminalGenerationReason(state, payload.generationId) !== undefined) {\n return state\n }\n if (state.activeGeneration?.generationId !== payload.generationId) {\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 (terminalGenerationReason(state, payload.generationId) !== undefined) {\n return state\n }\n if (\n state.activeGeneration?.generationId !== payload.generationId &&\n !(\n payload.stepLimit === true &&\n state.responseGenerationIds[payload.responseMessageId] ===\n payload.generationId &&\n state.activeRequestId ===\n `ai.generate:tools:${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 currentGenerationId = state.responseGenerationIds[payload.messageId]\n const targetRequestId =\n payload.requestId ?? generationRequestId(payload.generationId)\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 : generationRequestId(currentGenerationId) !== 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(state, currentGenerationId)\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 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 generationRequestId(currentGenerationId) === 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.activeRequestId === `ai.generate:tools:${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 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 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.generationId) ||\n terminalGenerationReason(state, payload.generationId) !== 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 )\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.generationId) ||\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 toolEvents: [\n ...projection.toolEvents,\n { index: event.index, type: 'ai.tool.result', payload },\n ],\n }\n const projected = projectedMessage(activeProjection)\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.generationId) ||\n terminalGenerationReason(state, payload.generationId) !== 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 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(state.messages, projectedMessage(activeProjection)),\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.generationId) ||\n terminalGenerationReason(state, payload.generationId) !== 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 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(state.messages, projectedMessage(activeProjection)),\n activeProjection,\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.generationId) ||\n terminalGenerationReason(state, payload.generationId) !== 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.generationId) ||\n terminalGenerationReason(state, payload.generationId) !== 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 return {\n ...state,\n compaction: { status: 'completed', ...payload },\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}): Reducer<D, AIState<AIMessageFrom<D>>> {\n type M = AIMessageFrom<D>\n return options.contract\n .reducer({\n name: options.name ?? 'a2.ai.state.v8',\n initialState: initialState<M>(),\n })\n .fold((state, event) => reduceAIState(state, event))\n}\n\ntype ProtocolInput<\n M extends UIMessage,\n K extends keyof AIEventDefs<M> & string,\n> = AppendInput<Pick<AIEventDefs<M>, K>>\n\nexport type AIInputs = {\n /** Record a message. User messages schedule unless generate is false. */\n message<M extends UIMessage>(\n message: M,\n options?: { generate?: boolean },\n ): ProtocolInput<M, 'ai.message.created'>[]\n /** Record a message without requesting a generation. */\n seed<M extends UIMessage>(\n message: M,\n ): ProtocolInput<M, 'ai.message.created'>[]\n /** Answer an AI SDK tool approval. The tool barrier owns continuation. */\n approval(\n response: ApprovalRespondedPayload,\n ): ProtocolInput<UIMessage, 'ai.approval.responded'>[]\n /** Answer an application-defined input request. */\n input(\n response: InputRespondedPayload,\n ): ProtocolInput<UIMessage, 'ai.input.responded'>[]\n /** Record an application-defined request for input. */\n requestInput(\n request: InputRequestedPayload,\n ): ProtocolInput<UIMessage, 'ai.input.requested'>[]\n /** Request a fresh attempt for a failed response. */\n retry(\n options: RetryGenerationOptions,\n ): ProtocolInput<UIMessage, 'ai.retry.requested'>[]\n /** Interrupt the active response for a message. */\n interrupt(\n interruption: MessageInterruptedPayload,\n ): ProtocolInput<UIMessage, 'ai.message.interrupted'>[]\n}\n\nconst messageInput = <M extends UIMessage>(\n message: M,\n generate?: boolean,\n): ProtocolInput<M, 'ai.message.created'>[] => [\n {\n type: 'ai.message.created',\n id: `ai.message:${message.id}`,\n payload: {\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 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 return [\n {\n type: 'ai.approval.responded',\n id: `ai.approval:${encodeURIComponent(response.messageId)}:${encodeURIComponent(response.generationId)}:${encodeURIComponent(response.approvalId)}:response`,\n payload: response,\n },\n ]\n },\n input(response) {\n return [\n {\n type: 'ai.input.responded',\n id: `ai.input:${encodeURIComponent(response.messageId)}:${encodeURIComponent(response.generationId)}:${encodeURIComponent(response.inputId)}:response`,\n payload: response,\n },\n ]\n },\n requestInput(request) {\n return [\n {\n type: 'ai.input.requested',\n id: `ai.input:${encodeURIComponent(request.messageId)}:${encodeURIComponent(request.generationId)}:${encodeURIComponent(request.inputId)}:request`,\n payload: request,\n },\n ]\n },\n retry(retryOptions) {\n return [\n {\n type: 'ai.retry.requested',\n id: `ai.retry:${retryOptions.retryId}`,\n payload: retryOptions,\n },\n ]\n },\n interrupt(interruption) {\n return [\n {\n type: 'ai.message.interrupted',\n id: `ai.interrupt:${interruption.generationId ?? interruption.requestId}`,\n payload: interruption,\n },\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.v8',\n initialState: initialState<M>(),\n })\n .fold((state, event) => reduceAIState(state, event))\n\n const definition = {\n contract: agentContract,\n reducer,\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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"}