agents 0.26.0 → 0.28.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 (301) hide show
  1. package/README.md +8 -9
  2. package/dist/abortable-C1SpfVoi.js +21 -0
  3. package/dist/abortable-C1SpfVoi.js.map +1 -0
  4. package/dist/{agent-routing-0DR0Tk2v.d.ts → agent-routing-QDcchcQP.d.ts} +16 -16
  5. package/dist/agent-routing.d.ts +1 -1
  6. package/dist/agent-tool-types.d.ts +1 -1
  7. package/dist/{agent-tools-YrATZJu2.d.ts → agent-tools-DHL2XI7u.d.ts} +2 -2
  8. package/dist/agent-tools.d.ts +1 -1
  9. package/dist/ai-ahruGw7e.d.ts +239 -0
  10. package/dist/ai-sdk-Bdsf6mSA.js +2444 -0
  11. package/dist/ai-sdk-Bdsf6mSA.js.map +1 -0
  12. package/dist/apply-chunks-1FheRb9W.js +99 -0
  13. package/dist/apply-chunks-1FheRb9W.js.map +1 -0
  14. package/dist/broadcast-state-CEyI4uAK.js +69 -0
  15. package/dist/broadcast-state-CEyI4uAK.js.map +1 -0
  16. package/dist/browser/ai.d.ts +8 -227
  17. package/dist/browser/ai.js +259 -1
  18. package/dist/browser/ai.js.map +1 -0
  19. package/dist/browser/index.d.ts +56 -46
  20. package/dist/browser/index.js +4 -361
  21. package/dist/browser/{ai-sdk.d.ts → tools/ai-sdk.d.ts} +7 -7
  22. package/dist/browser/{ai-sdk.js → tools/ai-sdk.js} +6 -5
  23. package/dist/browser/tools/ai-sdk.js.map +1 -0
  24. package/dist/browser/tools/pi.d.ts +111 -0
  25. package/dist/browser/tools/pi.js +119 -0
  26. package/dist/browser/tools/pi.js.map +1 -0
  27. package/dist/browser/{tanstack-ai.d.ts → tools/tanstack-ai.d.ts} +39 -37
  28. package/dist/browser/{tanstack-ai.js → tools/tanstack-ai.js} +73 -59
  29. package/dist/browser/tools/tanstack-ai.js.map +1 -0
  30. package/dist/browser-CEdNlsaD.js +481 -0
  31. package/dist/browser-CEdNlsaD.js.map +1 -0
  32. package/dist/{browser-DE3d-RLk.d.ts → browser-D30VlpcA.d.ts} +63 -37
  33. package/dist/{browser-tool-CQ10e6Kj.js → browser-tool-4iomavs_.js} +198 -62
  34. package/dist/browser-tool-4iomavs_.js.map +1 -0
  35. package/dist/{browser-tool-DuNdlwZ9.d.ts → browser-tool-vtrPOV8e.d.ts} +25 -6
  36. package/dist/{capability-B4WbF81e.js → capability-DBAKc6UZ.js} +1 -3
  37. package/dist/capability-DBAKc6UZ.js.map +1 -0
  38. package/dist/{capability-runner-DBAnGr6L.d.ts → capability-runner-BiVUtjqC.d.ts} +9 -7
  39. package/dist/channel-Bak_6zDP.d.ts +333 -0
  40. package/dist/chat/index.d.ts +11 -9
  41. package/dist/chat/index.js +5 -194
  42. package/dist/chat/index.js.map +1 -1
  43. package/dist/chat/react.d.ts +2 -4
  44. package/dist/chat/react.js +3 -1
  45. package/dist/chat/react.js.map +1 -1
  46. package/dist/chat-sdk/index.d.ts +1 -1
  47. package/dist/chat-sdk/index.js +1 -1
  48. package/dist/cli.js +144 -0
  49. package/dist/{client-je3koD9Z.d.ts → client-BGIQKJhX.d.ts} +2 -2
  50. package/dist/{client-fyQrLGkD.js → client-BnYbNT3z.js} +29 -5
  51. package/dist/client-BnYbNT3z.js.map +1 -0
  52. package/dist/client-tools-aIBO0Fk7.d.ts +53 -0
  53. package/dist/client.d.ts +1 -1
  54. package/dist/{connector-58XDGvc3.js → connector-CtZylXdk.js} +3 -603
  55. package/dist/connector-CtZylXdk.js.map +1 -0
  56. package/dist/{connector-Cl-VqPmA.d.ts → connector-DEXzVoaY.d.ts} +9 -374
  57. package/dist/conversations-FjHDRZyD.d.ts +192 -0
  58. package/dist/{current-agent-vAk_5JMt.d.ts → current-agent-CKgT5d1O.d.ts} +3 -5
  59. package/dist/current-agent-DhoDkSnH.js.map +1 -1
  60. package/dist/daemon-core-Buubj-y1.js +481 -0
  61. package/dist/daemon-core-Buubj-y1.js.map +1 -0
  62. package/dist/daemon-core-CbohVPAu.d.ts +132 -0
  63. package/dist/{do-oauth-client-provider-Tmf1vgKz.d.ts → do-oauth-client-provider-DfsUcpc3.d.ts} +7 -1
  64. package/dist/{durable-object-lifecycle-HhgOMWq9.d.ts → durable-object-lifecycle-DOI_bzCH.d.ts} +2 -2
  65. package/dist/{channels/email.d.ts → experimental/channels/email/index.d.ts} +25 -12
  66. package/dist/{channels/email.js → experimental/channels/email/index.js} +13 -35
  67. package/dist/experimental/channels/email/index.js.map +1 -0
  68. package/dist/experimental/channels/index.d.ts +270 -0
  69. package/dist/experimental/channels/index.js +1186 -0
  70. package/dist/experimental/channels/index.js.map +1 -0
  71. package/dist/{channels/slack.d.ts → experimental/channels/slack/index.d.ts} +19 -9
  72. package/dist/experimental/channels/slack/index.js +267 -0
  73. package/dist/experimental/channels/slack/index.js.map +1 -0
  74. package/dist/{channels/telegram.d.ts → experimental/channels/telegram/index.d.ts} +19 -9
  75. package/dist/experimental/channels/telegram/index.js +198 -0
  76. package/dist/experimental/channels/telegram/index.js.map +1 -0
  77. package/dist/experimental/channels/web/ai-sdk.d.ts +55 -0
  78. package/dist/experimental/channels/web/ai-sdk.js +266 -0
  79. package/dist/experimental/channels/web/ai-sdk.js.map +1 -0
  80. package/dist/experimental/channels/web/client.d.ts +97 -0
  81. package/dist/experimental/channels/web/client.js +349 -0
  82. package/dist/experimental/channels/web/client.js.map +1 -0
  83. package/dist/experimental/channels/web/index.d.ts +189 -0
  84. package/dist/experimental/channels/web/index.js +332 -0
  85. package/dist/experimental/channels/web/index.js.map +1 -0
  86. package/dist/gateway-BFO6vRDn.d.ts +100 -0
  87. package/dist/handle-zAzh0UW2.d.ts +460 -0
  88. package/dist/harness/ai-sdk/index.d.ts +175 -0
  89. package/dist/harness/ai-sdk/index.js +605 -0
  90. package/dist/harness/ai-sdk/index.js.map +1 -0
  91. package/dist/harness/container/daemon/index.d.ts +76 -0
  92. package/dist/harness/container/daemon/index.js +3 -0
  93. package/dist/harness/container/index.d.ts +740 -0
  94. package/dist/harness/container/index.js +2152 -0
  95. package/dist/harness/container/index.js.map +1 -0
  96. package/dist/harness/container/runtime/index.d.ts +144 -0
  97. package/dist/harness/container/runtime/index.js +1082 -0
  98. package/dist/harness/container/runtime/index.js.map +1 -0
  99. package/dist/harness/opencode/index.d.ts +369 -0
  100. package/dist/harness/opencode/index.js +1072 -0
  101. package/dist/harness/opencode/index.js.map +1 -0
  102. package/dist/harness/pi/index.d.ts +3 -2
  103. package/dist/harness/pi/index.js +3 -3
  104. package/dist/harness/store/index.d.ts +24 -0
  105. package/dist/harness/store/index.js +2 -0
  106. package/dist/harness/think/index.d.ts +821 -0
  107. package/dist/harness/think/index.js +2721 -0
  108. package/dist/harness/think/index.js.map +1 -0
  109. package/dist/harness-B6B9S3rb.d.ts +203 -0
  110. package/dist/{images-iiTDSyRu.js → images-Ce9SCu3X.js} +2 -248
  111. package/dist/images-Ce9SCu3X.js.map +1 -0
  112. package/dist/{index-BreL0YrQ.d.ts → index-BEL3ZV-s.d.ts} +2 -6
  113. package/dist/index-CBt8oRJt.d.ts +198 -0
  114. package/dist/index.d.ts +5 -5
  115. package/dist/index.js +2 -2
  116. package/dist/ingress-EFbrS547.js +9 -0
  117. package/dist/ingress-EFbrS547.js.map +1 -0
  118. package/dist/input-schema-BQykTEp_.js +20 -0
  119. package/dist/input-schema-BQykTEp_.js.map +1 -0
  120. package/dist/input-schema-D2QAtHZH.js +23 -0
  121. package/dist/input-schema-D2QAtHZH.js.map +1 -0
  122. package/dist/internal-kmw70xwR.js +46 -0
  123. package/dist/internal-kmw70xwR.js.map +1 -0
  124. package/dist/internal_context.d.ts +1 -1
  125. package/dist/lifecycle/index.d.ts +3 -3
  126. package/dist/lifecycle/index.js +2 -2
  127. package/dist/{lifecycle-CFu6OV03.js → lifecycle-DGorpAmA.js} +2 -4
  128. package/dist/lifecycle-DGorpAmA.js.map +1 -0
  129. package/dist/mcp/client/do-oauth-client-provider.d.ts +1 -1
  130. package/dist/mcp/client/do-oauth-client-provider.js +9 -0
  131. package/dist/mcp/client/do-oauth-client-provider.js.map +1 -1
  132. package/dist/mcp/client/index.d.ts +1 -1
  133. package/dist/mcp/client/index.js +1 -1
  134. package/dist/mcp/client/x402.d.ts +35 -4
  135. package/dist/mcp/client/x402.js +24 -3
  136. package/dist/mcp/client/x402.js.map +1 -1
  137. package/dist/mcp/index.d.ts +1 -1
  138. package/dist/mcp/index.js +2 -2
  139. package/dist/models/ai-sdk/index.d.ts +16 -14
  140. package/dist/models/ai-sdk/index.js +1 -2442
  141. package/dist/models/opencode/index.d.ts +65 -0
  142. package/dist/models/opencode/index.js +285 -0
  143. package/dist/models/opencode/index.js.map +1 -0
  144. package/dist/models/pi-ai/index.d.ts +9 -7
  145. package/dist/models/pi-ai/index.js +2 -1
  146. package/dist/models/pi-ai/index.js.map +1 -1
  147. package/dist/options-CiIsJHXR.d.ts +130 -0
  148. package/dist/protocol-BEgrJYC5.d.ts +331 -0
  149. package/dist/protocol-CukuI73M.d.ts +386 -0
  150. package/dist/protocol-cOklVBBD.js +227 -0
  151. package/dist/protocol-cOklVBBD.js.map +1 -0
  152. package/dist/{protocol-kHsr-f0X.js → protocol-eXeJxhgu.js} +2 -67
  153. package/dist/protocol-eXeJxhgu.js.map +1 -0
  154. package/dist/protocol-y2sSY584.js +148 -0
  155. package/dist/protocol-y2sSY584.js.map +1 -0
  156. package/dist/queue/index.d.ts +1 -1
  157. package/dist/queue/index.js +1 -1
  158. package/dist/{queue-BB-zfIYF.js → queue-CcIjVYTE.js} +2 -2
  159. package/dist/{queue-BB-zfIYF.js.map → queue-CcIjVYTE.js.map} +1 -1
  160. package/dist/react.d.ts +2 -2
  161. package/dist/routing/index.d.ts +2 -2
  162. package/dist/routing/index.js +1 -1
  163. package/dist/{scheduler-RdACNXDP.d.ts → scheduler-BCLESHSC.d.ts} +2 -12
  164. package/dist/{scheduler-DZ3xQfeK.js → scheduler-FIHv2-kJ.js} +2 -4
  165. package/dist/scheduler-FIHv2-kJ.js.map +1 -0
  166. package/dist/schedules/index.d.ts +1 -1
  167. package/dist/schedules/index.js +1 -1
  168. package/dist/serializable.d.ts +1 -1
  169. package/dist/session-store-Do4xkDcf.js +606 -0
  170. package/dist/session-store-Do4xkDcf.js.map +1 -0
  171. package/dist/session-store-DoPY12xM.d.ts +383 -0
  172. package/dist/sessions/index.d.ts +11 -434
  173. package/dist/sessions/index.js +1 -2271
  174. package/dist/sessions-_vN5BEZX.js +2272 -0
  175. package/dist/sessions-_vN5BEZX.js.map +1 -0
  176. package/dist/settings-C45hDliX.js +253 -0
  177. package/dist/settings-C45hDliX.js.map +1 -0
  178. package/dist/{transport-PfFnt-Ld.d.ts → settings-NgGwF7Qt.d.ts} +14 -208
  179. package/dist/{src-BZeu-SCD.js → src-CQxJFv4l.js} +8 -8
  180. package/dist/src-CQxJFv4l.js.map +1 -0
  181. package/dist/stall-watchdog-BpRF2uwG.js +195 -0
  182. package/dist/stall-watchdog-BpRF2uwG.js.map +1 -0
  183. package/dist/state/index.d.ts +1 -1
  184. package/dist/state/index.js +1 -3
  185. package/dist/state/index.js.map +1 -1
  186. package/dist/store-BKM4Xm9M.d.ts +332 -0
  187. package/dist/store-CslVzfN7.js +458 -0
  188. package/dist/store-CslVzfN7.js.map +1 -0
  189. package/dist/streams/index.d.ts +1 -1
  190. package/dist/streams/index.js +1 -1
  191. package/dist/{streams-DW-UCOUc.js → streams-lsHMJhRW.js} +17 -4
  192. package/dist/streams-lsHMJhRW.js.map +1 -0
  193. package/dist/{streams-Cmkj9QfW.d.ts → streams-vrCtbUIn.d.ts} +2 -2
  194. package/dist/sub-routing.d.ts +1 -1
  195. package/dist/tasks/index.d.ts +1 -1
  196. package/dist/tasks/index.js +1 -1
  197. package/dist/{tasks-68DESxf0.js → tasks-BN_5AWqI.js} +3 -2
  198. package/dist/tasks-BN_5AWqI.js.map +1 -0
  199. package/dist/{tasks-9YxYtByh.d.ts → tasks-E89KdwkS.d.ts} +2 -2
  200. package/dist/tool-CTp72Jb_.d.ts +278 -0
  201. package/dist/tool-CxKsvxjm.js +1126 -0
  202. package/dist/tool-CxKsvxjm.js.map +1 -0
  203. package/dist/tool-DoVberpN.d.ts +301 -0
  204. package/dist/tool-cQRkwSZZ.js +410 -0
  205. package/dist/tool-cQRkwSZZ.js.map +1 -0
  206. package/dist/tool-helpers-O5BDVEAY.js +58 -0
  207. package/dist/tool-helpers-O5BDVEAY.js.map +1 -0
  208. package/dist/transport-k2mFrtL8.d.ts +200 -0
  209. package/dist/turns-DCV3ycDl.js +317 -0
  210. package/dist/turns-DCV3ycDl.js.map +1 -0
  211. package/dist/voice/client.js +1 -1
  212. package/dist/voice/index.d.ts +2 -2
  213. package/dist/voice/index.js +1 -1
  214. package/dist/web/fetch/index.d.ts +89 -0
  215. package/dist/web/fetch/index.js +20 -0
  216. package/dist/web/fetch/index.js.map +1 -0
  217. package/dist/web/fetch/tools/ai-sdk.d.ts +80 -0
  218. package/dist/web/fetch/tools/ai-sdk.js +47 -0
  219. package/dist/web/fetch/tools/ai-sdk.js.map +1 -0
  220. package/dist/web/fetch/tools/pi.d.ts +84 -0
  221. package/dist/web/fetch/tools/pi.js +88 -0
  222. package/dist/web/fetch/tools/pi.js.map +1 -0
  223. package/dist/web/fetch/tools/tanstack-ai.d.ts +78 -0
  224. package/dist/web/fetch/tools/tanstack-ai.js +45 -0
  225. package/dist/web/fetch/tools/tanstack-ai.js.map +1 -0
  226. package/dist/web/search/index.d.ts +58 -0
  227. package/dist/web/search/index.js +2 -0
  228. package/dist/web/search/tools/ai-sdk.d.ts +77 -0
  229. package/dist/web/search/tools/ai-sdk.js +46 -0
  230. package/dist/web/search/tools/ai-sdk.js.map +1 -0
  231. package/dist/web/search/tools/pi.d.ts +82 -0
  232. package/dist/web/search/tools/pi.js +89 -0
  233. package/dist/web/search/tools/pi.js.map +1 -0
  234. package/dist/web/search/tools/tanstack-ai.d.ts +71 -0
  235. package/dist/web/search/tools/tanstack-ai.js +46 -0
  236. package/dist/web/search/tools/tanstack-ai.js.map +1 -0
  237. package/dist/websockets/index.d.ts +12 -296
  238. package/dist/websockets/index.js +1 -1
  239. package/dist/{websockets-Ci-LZFHH.js → websockets-C3zy8YR0.js} +20 -8
  240. package/dist/websockets-C3zy8YR0.js.map +1 -0
  241. package/dist/{wire-types-CrjKvDyi.d.ts → wire-types-Cv0iwjk5.d.ts} +3 -51
  242. package/dist/workflow-types.d.ts +1 -1
  243. package/dist/workflows.d.ts +1 -1
  244. package/dist/workflows.js +1 -1
  245. package/docs/browse-the-web.md +29 -1
  246. package/docs/fetch-the-web.md +276 -0
  247. package/docs/harnesses/pi.md +25 -0
  248. package/docs/harnesses/think.md +215 -0
  249. package/docs/index.md +99 -75
  250. package/docs/lifecycle.md +42 -3
  251. package/docs/queue.md +2 -3
  252. package/docs/scheduling.md +2 -6
  253. package/docs/search-the-web.md +135 -0
  254. package/package.json +148 -44
  255. package/dist/ai-fm7xx1BK.js +0 -312
  256. package/dist/ai-fm7xx1BK.js.map +0 -1
  257. package/dist/browser/ai-sdk.js.map +0 -1
  258. package/dist/browser/index.js.map +0 -1
  259. package/dist/browser/tanstack-ai.js.map +0 -1
  260. package/dist/browser-tool-CQ10e6Kj.js.map +0 -1
  261. package/dist/capability-B4WbF81e.js.map +0 -1
  262. package/dist/channel-Bnm4S7T2.d.ts +0 -491
  263. package/dist/channels/ai-sdk.d.ts +0 -46
  264. package/dist/channels/ai-sdk.js +0 -120
  265. package/dist/channels/ai-sdk.js.map +0 -1
  266. package/dist/channels/email.js.map +0 -1
  267. package/dist/channels/index.d.ts +0 -233
  268. package/dist/channels/index.js +0 -608
  269. package/dist/channels/index.js.map +0 -1
  270. package/dist/channels/slack.js +0 -614
  271. package/dist/channels/slack.js.map +0 -1
  272. package/dist/channels/tanstack-ai.d.ts +0 -39
  273. package/dist/channels/tanstack-ai.js +0 -17
  274. package/dist/channels/tanstack-ai.js.map +0 -1
  275. package/dist/channels/telegram.js +0 -427
  276. package/dist/channels/telegram.js.map +0 -1
  277. package/dist/channels/voice.d.ts +0 -45
  278. package/dist/channels/voice.js +0 -122
  279. package/dist/channels/voice.js.map +0 -1
  280. package/dist/client-fyQrLGkD.js.map +0 -1
  281. package/dist/connector-58XDGvc3.js.map +0 -1
  282. package/dist/images-iiTDSyRu.js.map +0 -1
  283. package/dist/index-BB0kqhIz.d.ts +0 -101
  284. package/dist/ingress-BfetZbMO.js +0 -83
  285. package/dist/ingress-BfetZbMO.js.map +0 -1
  286. package/dist/internal-CYlgHl1l.js +0 -59
  287. package/dist/internal-CYlgHl1l.js.map +0 -1
  288. package/dist/lifecycle-CFu6OV03.js.map +0 -1
  289. package/dist/models/ai-sdk/index.js.map +0 -1
  290. package/dist/protocol-kHsr-f0X.js.map +0 -1
  291. package/dist/scheduler-DZ3xQfeK.js.map +0 -1
  292. package/dist/sessions/index.js.map +0 -1
  293. package/dist/src-BZeu-SCD.js.map +0 -1
  294. package/dist/streams-DW-UCOUc.js.map +0 -1
  295. package/dist/surface-bZZJqBka.js +0 -17
  296. package/dist/surface-bZZJqBka.js.map +0 -1
  297. package/dist/tasks-68DESxf0.js.map +0 -1
  298. package/dist/tool-schema-CBjGPrsQ.js +0 -31
  299. package/dist/tool-schema-CBjGPrsQ.js.map +0 -1
  300. package/dist/websockets-Ci-LZFHH.js.map +0 -1
  301. package/docs/channels.md +0 -323
@@ -2,12 +2,13 @@ import { isPositionlessAgentToolChunk } from "../agent-tool-types.js";
2
2
  import { isDurableObjectResetError, isPlatformFailure, tryN } from "../retries.js";
3
3
  import { a as isReplayChunk, i as isLateToolInputChunk, n as applyLateToolInput, o as lateToolInputForwardChunks, r as getPartialStreamText, s as normalizeToolInput, t as applyChunkToParts } from "../message-builder-DAl9AhHH.js";
4
4
  import { a as interceptAgentToolBroadcast, i as createAgentToolEventState, r as applyAgentToolEvent, s as storedChunkBytes, t as AgentToolProgressEmitter } from "../agent-tools-CdJC-8Dc.js";
5
- import { t as TextSegmentJoiner } from "../text-segment-joiner-BtAFQSA_.js";
6
5
  import { n as sanitizeMessage, t as byteLength } from "../sanitize-D9TujEK8.js";
7
- import { a as StreamAccumulator, i as transition, n as STREAM_RESUME_NONE_REASONS, t as CHAT_MESSAGE_TYPES } from "../protocol-kHsr-f0X.js";
8
- import { n as Streams } from "../streams-DW-UCOUc.js";
6
+ import { n as STREAM_RESUME_NONE_REASONS, r as StreamAccumulator, t as CHAT_MESSAGE_TYPES } from "../protocol-eXeJxhgu.js";
7
+ import { t as TextSegmentJoiner } from "../text-segment-joiner-BtAFQSA_.js";
8
+ import { n as transition } from "../broadcast-state-CEyI4uAK.js";
9
+ import { n as Streams } from "../streams-lsHMJhRW.js";
10
+ import { i as createToolsFromClientSchemas, n as iterateWithStallWatchdog, r as parseProtocolMessage, t as ChatStreamStalledError } from "../stall-watchdog-BpRF2uwG.js";
9
11
  import { t as MessageType } from "../wire-types-CnMt6_HR.js";
10
- import { jsonSchema, tool } from "ai";
11
12
  import { nanoid } from "nanoid";
12
13
  //#region src/chat/tool-output-truncation.ts
13
14
  const DEFAULT_MAX_DEPTH = 8;
@@ -1495,42 +1496,6 @@ function buildInClauseStrings(prefix, count) {
1495
1496
  return asTemplateStringsArray(parts);
1496
1497
  }
1497
1498
  //#endregion
1498
- //#region src/chat/client-tools.ts
1499
- /**
1500
- * Converts client tool schemas to AI SDK tool format.
1501
- *
1502
- * By default these tools have no `execute` function — when the AI model calls
1503
- * them, the tool call is sent back to the client for execution.
1504
- *
1505
- * When `options.execute` is provided, each tool is built WITH an `execute` that
1506
- * delegates to it. This is used by the RPC path (e.g. a parent agent driving a
1507
- * Think sub-agent) so the model's client-tool call is resolved inline within
1508
- * the same turn.
1509
- *
1510
- * @param clientTools - Array of tool schemas from the client
1511
- * @param options - Optional `execute` delegate to run the tools inline
1512
- * @returns Record of AI SDK tools that can be spread into your tools object
1513
- */
1514
- function createToolsFromClientSchemas(clientTools, options) {
1515
- if (!clientTools || clientTools.length === 0) return {};
1516
- const seenNames = /* @__PURE__ */ new Set();
1517
- for (const t of clientTools) {
1518
- if (seenNames.has(t.name)) console.warn(`[createToolsFromClientSchemas] Duplicate tool name "${t.name}" found. Later definitions will override earlier ones.`);
1519
- seenNames.add(t.name);
1520
- }
1521
- const execute = options?.execute;
1522
- const createTool = tool;
1523
- return Object.fromEntries(clientTools.map((t) => [t.name, createTool({
1524
- description: typeof t.description === "function" ? "" : t.description ?? "",
1525
- inputSchema: jsonSchema(t.parameters ?? { type: "object" }),
1526
- ...execute ? { execute: (input, executeOptions) => execute({
1527
- toolName: t.name,
1528
- input,
1529
- toolCallId: executeOptions?.toolCallId ?? ""
1530
- }) } : {}
1531
- })]));
1532
- }
1533
- //#endregion
1534
1499
  //#region src/chat/continuation-state.ts
1535
1500
  /**
1536
1501
  * ContinuationState — shared state container for auto-continuation lifecycle.
@@ -2274,84 +2239,6 @@ function hasIncompleteToolBatch(messages) {
2274
2239
  return false;
2275
2240
  }
2276
2241
  //#endregion
2277
- //#region src/chat/parse-protocol.ts
2278
- /**
2279
- * Protocol Message Parser — typed parsing of cf_agent_chat_* WebSocket messages.
2280
- *
2281
- * Parses raw WebSocket messages into a discriminated union of protocol events.
2282
- * Both AIChatAgent and Think can use this instead of manual JSON.parse + type checking.
2283
- */
2284
- /**
2285
- * Parse a raw WebSocket message string into a typed protocol event.
2286
- *
2287
- * Returns `null` if the message is not valid JSON or not a recognized
2288
- * protocol message type. Callers should fall through to the user's
2289
- * `onMessage` handler when `null` is returned.
2290
- *
2291
- * @example
2292
- * ```typescript
2293
- * const event = parseProtocolMessage(rawMessage);
2294
- * if (!event) return userOnMessage(connection, rawMessage);
2295
- *
2296
- * switch (event.type) {
2297
- * case "chat-request": { ... }
2298
- * case "clear": { ... }
2299
- * case "tool-result": { ... }
2300
- * }
2301
- * ```
2302
- */
2303
- function parseProtocolMessage(raw) {
2304
- let data;
2305
- try {
2306
- data = JSON.parse(raw);
2307
- } catch {
2308
- return null;
2309
- }
2310
- const wireType = data.type;
2311
- if (!wireType) return null;
2312
- switch (wireType) {
2313
- case CHAT_MESSAGE_TYPES.USE_CHAT_REQUEST: return {
2314
- type: "chat-request",
2315
- id: data.id,
2316
- init: data.init ?? {}
2317
- };
2318
- case CHAT_MESSAGE_TYPES.CHAT_CLEAR: return { type: "clear" };
2319
- case CHAT_MESSAGE_TYPES.CHAT_REQUEST_CANCEL: return {
2320
- type: "cancel",
2321
- id: data.id
2322
- };
2323
- case CHAT_MESSAGE_TYPES.TOOL_RESULT: return {
2324
- type: "tool-result",
2325
- toolCallId: data.toolCallId,
2326
- toolName: data.toolName ?? "",
2327
- output: data.output,
2328
- state: data.state,
2329
- errorText: data.errorText,
2330
- autoContinue: data.autoContinue,
2331
- clientTools: data.clientTools
2332
- };
2333
- case CHAT_MESSAGE_TYPES.TOOL_APPROVAL: return {
2334
- type: "tool-approval",
2335
- toolCallId: data.toolCallId,
2336
- approved: data.approved,
2337
- autoContinue: data.autoContinue
2338
- };
2339
- case CHAT_MESSAGE_TYPES.STREAM_RESUME_REQUEST: return {
2340
- type: "stream-resume-request",
2341
- ...typeof data.probeId === "string" ? { probeId: data.probeId } : {}
2342
- };
2343
- case CHAT_MESSAGE_TYPES.STREAM_RESUME_ACK: return {
2344
- type: "stream-resume-ack",
2345
- id: data.id
2346
- };
2347
- case CHAT_MESSAGE_TYPES.CHAT_MESSAGES: return {
2348
- type: "messages",
2349
- messages: data.messages ?? []
2350
- };
2351
- default: return null;
2352
- }
2353
- }
2354
- //#endregion
2355
2242
  //#region src/chat/message-reconciler.ts
2356
2243
  /**
2357
2244
  * Reconcile incoming client messages against server state.
@@ -4057,82 +3944,6 @@ async function runChatRecoveryExhaustion(input, hooks) {
4057
3944
  await hooks.terminalize(ctx);
4058
3945
  }
4059
3946
  //#endregion
4060
- //#region src/chat/stall-watchdog.ts
4061
- /**
4062
- * Shared inactivity watchdog for UI-message streams.
4063
- *
4064
- * A model/transport stream can park indefinitely without ever throwing (a hung
4065
- * provider, a wedged transport). Left unguarded, the consumer read-loop waits
4066
- * forever. {@link iterateWithStallWatchdog} wraps such a stream so that a gap of
4067
- * `timeoutMs` between chunks aborts the upstream and throws
4068
- * {@link ChatStreamStalledError}, letting the consumer route the stall into
4069
- * bounded recovery (#1626) — a transient hang is retried within the existing
4070
- * recovery budget — while genuine in-band errors stay terminal.
4071
- *
4072
- * @internal Sibling-package support for `@cloudflare/ai-chat` and
4073
- * `@cloudflare/think`, not a public API. See
4074
- * `design/rfc-chat-recovery-foundation.md`.
4075
- */
4076
- /**
4077
- * Thrown by {@link iterateWithStallWatchdog} when the inactivity watchdog fires
4078
- * (a model/transport stream that parks without ever throwing). Distinct from
4079
- * in-band model/stream errors so the read-loop catch can route a stall into
4080
- * bounded recovery (#1626) — a transient hang is retried within the existing
4081
- * recovery budget — while genuine errors stay terminal.
4082
- */
4083
- var ChatStreamStalledError = class extends Error {
4084
- constructor(message) {
4085
- super(message);
4086
- this.isChatStreamStall = true;
4087
- this.name = "ChatStreamStalledError";
4088
- }
4089
- };
4090
- /**
4091
- * Wrap a UI-message stream with an inactivity watchdog. If no chunk arrives
4092
- * within `timeoutMs`, `onStall` runs (aborting the upstream model stream) and
4093
- * the iterator throws, so the consumer loop exits with a terminal error
4094
- * instead of parking forever on a hung provider/transport. `timeoutMs <= 0`
4095
- * passes the source through untouched.
4096
- */
4097
- async function* iterateWithStallWatchdog(source, timeoutMs, onStall) {
4098
- if (!(timeoutMs > 0)) {
4099
- yield* source;
4100
- return;
4101
- }
4102
- const iterator = source[Symbol.asyncIterator]();
4103
- let selfAborted = false;
4104
- try {
4105
- while (true) {
4106
- let timer;
4107
- let stalled = false;
4108
- const stall = new Promise((_, reject) => {
4109
- timer = setTimeout(() => {
4110
- stalled = true;
4111
- reject(new ChatStreamStalledError(`Chat stream stalled: no activity for ${timeoutMs}ms; the turn was aborted by the stall watchdog.`));
4112
- }, timeoutMs);
4113
- });
4114
- const nextPromise = iterator.next();
4115
- nextPromise.catch(() => {});
4116
- let next;
4117
- try {
4118
- next = await Promise.race([nextPromise, stall]);
4119
- } catch (err) {
4120
- if (stalled) {
4121
- selfAborted = true;
4122
- onStall();
4123
- }
4124
- throw err;
4125
- } finally {
4126
- if (timer !== void 0) clearTimeout(timer);
4127
- }
4128
- if (next.done) return;
4129
- yield next.value;
4130
- }
4131
- } finally {
4132
- if (!selfAborted) await iterator.return?.(void 0).catch(() => {});
4133
- }
4134
- }
4135
- //#endregion
4136
3947
  //#region src/chat/truncate-older-messages.ts
4137
3948
  /**
4138
3949
  * Truncate tool outputs and long text in older messages.