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
@@ -0,0 +1,200 @@
1
+ import { a as ResolvedGateway } from "./settings-NgGwF7Qt.js";
2
+
3
+ //#region src/models/core/errors.d.ts
4
+ /**
5
+ * Coarse classification of a failed Cloudflare AI call.
6
+ *
7
+ * @experimental This surface is experimental and may change.
8
+ */
9
+ type CloudflareAIErrorCode =
10
+ | "auth"
11
+ | "rate-limit"
12
+ | "not-found"
13
+ | "bad-request"
14
+ | "provider-error"
15
+ | "gateway-error"
16
+ | "unknown";
17
+ /**
18
+ * One leg of a {@link CloudflareAIError} fallback chain.
19
+ *
20
+ * @experimental This surface is experimental and may change.
21
+ */
22
+ interface CloudflareAIAttempt {
23
+ /** The model id that was tried. */
24
+ model: string;
25
+ /** The error that leg failed with. */
26
+ error: unknown;
27
+ }
28
+ /**
29
+ * Error thrown for every failed Cloudflare AI call, whether it came back as a
30
+ * non-2xx `Response` or as a thrown Workers AI binding error. Framework
31
+ * modules wrap it into their own error type at their boundary (the AI SDK
32
+ * module into an `APICallError`, so `ai`'s retry loop honours
33
+ * {@link CloudflareAIError.isRetryable}).
34
+ *
35
+ * @experimental This surface is experimental and may change.
36
+ */
37
+ declare class CloudflareAIError extends Error {
38
+ /** HTTP status, when the failure carried one. */
39
+ readonly status: number | undefined;
40
+ /** Coarse classification used for routing and fallback decisions. */
41
+ readonly code: CloudflareAIErrorCode;
42
+ /** `cf-aig-log-id` of the failed request, when the response carried one. */
43
+ readonly logId: string | undefined;
44
+ /** The model id that produced this error. */
45
+ readonly model: string;
46
+ /** Which binding path the request went down, for error reporting. */
47
+ readonly url: string;
48
+ /** The request body that failed. */
49
+ readonly requestBodyValues: unknown;
50
+ /** Response headers, when there was a response. */
51
+ readonly responseHeaders: Record<string, string> | undefined;
52
+ /** Raw response body text, when there was a response. */
53
+ readonly responseBody: string | undefined;
54
+ /** Whether a retry is worth attempting. */
55
+ readonly isRetryable: boolean;
56
+ /** Parsed error envelope, or other structured detail. */
57
+ readonly data: unknown;
58
+ /** Every leg tried, when this error ends a fallback chain. */
59
+ readonly attempts: CloudflareAIAttempt[] | undefined;
60
+ readonly cause: unknown;
61
+ constructor(options: {
62
+ message: string;
63
+ model: string;
64
+ url: string;
65
+ requestBodyValues: unknown;
66
+ status?: number;
67
+ code: CloudflareAIErrorCode;
68
+ logId?: string;
69
+ responseHeaders?: Record<string, string>;
70
+ responseBody?: string;
71
+ isRetryable?: boolean;
72
+ data?: unknown;
73
+ cause?: unknown;
74
+ attempts?: CloudflareAIAttempt[];
75
+ });
76
+ }
77
+ //#endregion
78
+ //#region src/models/core/gateway-providers.d.ts
79
+ /**
80
+ * The AI Gateway provider table: which gateway provider slug a vendor's own
81
+ * base URL belongs to, and what the universal request's `endpoint` is for a
82
+ * given upstream URL.
83
+ *
84
+ * This is platform knowledge, not vendor knowledge — the gateway publishes the
85
+ * list, and every entry here appears in `AIGatewayProviders` from
86
+ * `@cloudflare/workers-types`. Nothing about a vendor's wire format, model ids
87
+ * or capabilities lives here: the vendor's own provider package builds the
88
+ * request, and this table only says where it goes.
89
+ *
90
+ * Adapted from `@cloudflare/ai-gateway-provider`'s `providers.ts`.
91
+ *
92
+ * @experimental This surface is experimental and may change.
93
+ */
94
+ /**
95
+ * The gateway provider slugs this table maps onto. A subset of the ambient
96
+ * `AIGatewayProviders` union; {@link GatewayProviderNameCheck} keeps it one.
97
+ *
98
+ * @experimental This surface is experimental and may change.
99
+ */
100
+ declare const GATEWAY_PROVIDER_NAMES: readonly [
101
+ "workers-ai",
102
+ "anthropic",
103
+ "openai",
104
+ "azure-openai",
105
+ "google-ai-studio",
106
+ "google-vertex-ai",
107
+ "grok",
108
+ "mistral",
109
+ "perplexity-ai",
110
+ "replicate",
111
+ "groq",
112
+ "deepseek",
113
+ "openrouter",
114
+ "cerebras",
115
+ "cohere",
116
+ "huggingface",
117
+ "aws-bedrock",
118
+ "elevenlabs",
119
+ "cartesia"
120
+ ];
121
+ /**
122
+ * A gateway provider slug.
123
+ *
124
+ * @experimental This surface is experimental and may change.
125
+ */
126
+ type GatewayProviderName = (typeof GATEWAY_PROVIDER_NAMES)[number];
127
+ //#endregion
128
+ //#region src/models/core/transport.d.ts
129
+ /** One request on the Cloudflare run path. */
130
+ interface TransportRequest {
131
+ /** Model id — Workers AI slug or catalog `<author>/<model>`. */
132
+ model: string;
133
+ /** The provider-shaped request body (`input` on the run path). */
134
+ input: Record<string, unknown>;
135
+ /** Gateway options for this request. */
136
+ gateway: ResolvedGateway;
137
+ /** Extra request headers, merged last. */
138
+ headers: Record<string, string>;
139
+ /** Abort signal, forwarded to the binding or to `fetch`. */
140
+ signal?: AbortSignal;
141
+ }
142
+ /**
143
+ * One request on the universal AI Gateway path: a vendor's own request, routed
144
+ * by the gateway to that vendor. The body is the vendor's, untouched — nothing
145
+ * here knows the vendor's wire format.
146
+ *
147
+ * @experimental This surface is experimental and may change.
148
+ */
149
+ interface UniversalRequest {
150
+ /** The gateway provider slug the request is routed to. */
151
+ provider: GatewayProviderName | string;
152
+ /** The vendor path the gateway appends to that provider's base URL. */
153
+ endpoint: string;
154
+ /** The vendor's own request headers, minus its credential header. */
155
+ headers: Record<string, string>;
156
+ /** The vendor's request body, verbatim. */
157
+ query: unknown;
158
+ /** Gateway options for this request. */
159
+ gateway: ResolvedGateway;
160
+ /** Extra headers merged last, outside the vendor's own set. */
161
+ extraHeaders?: Record<string, string>;
162
+ /** Abort signal, forwarded to the binding or to `fetch`. */
163
+ signal?: AbortSignal;
164
+ }
165
+ /**
166
+ * The single code path both backends implement. Always resolves to a raw
167
+ * `Response`, so streaming and non-streaming calls share one path and nothing
168
+ * is buffered on the caller's behalf.
169
+ *
170
+ * @experimental This surface is experimental and may change.
171
+ */
172
+ interface Transport {
173
+ /** A stable identifier for the endpoint, used in error reporting. */
174
+ readonly url: string;
175
+ run(request: TransportRequest): Promise<Response>;
176
+ /**
177
+ * Sends a vendor's own request through the gateway's universal endpoint.
178
+ * Always resolves to the vendor's raw `Response`, error responses included:
179
+ * only the gateway's own failures (a missing gateway, an unpaid account) are
180
+ * lifted into a {@link CloudflareAIError}, because the vendor's provider
181
+ * knows how to read its own errors and we do not.
182
+ */
183
+ universal(request: UniversalRequest): Promise<Response>;
184
+ /**
185
+ * A log id read off the backend itself when the response carried none. The
186
+ * Workers AI binding exposes the last gateway log id as a mutable property,
187
+ * so it is captured per response rather than read late.
188
+ */
189
+ logIdFallback(response: Response): string | undefined;
190
+ }
191
+ //#endregion
192
+ export {
193
+ CloudflareAIError as a,
194
+ CloudflareAIAttempt as i,
195
+ GATEWAY_PROVIDER_NAMES as n,
196
+ CloudflareAIErrorCode as o,
197
+ GatewayProviderName as r,
198
+ Transport as t
199
+ };
200
+ //# sourceMappingURL=transport-k2mFrtL8.d.ts.map
@@ -0,0 +1,317 @@
1
+ //#region src/harness/ai-sdk/turns.ts
2
+ function ownerOf(toolName, { tools, owner }) {
3
+ const tool = tools && Object.hasOwn(tools, toolName) ? tools[toolName] : void 0;
4
+ return tool && !tool.execute ? owner : void 0;
5
+ }
6
+ const json = (value) => value ?? null;
7
+ const object = (value) => typeof value === "object" && value !== null ? value : void 0;
8
+ function withMetadata(value, metadata) {
9
+ const providerMetadata = object(metadata);
10
+ return providerMetadata ? {
11
+ ...value,
12
+ providerMetadata
13
+ } : value;
14
+ }
15
+ let warned = false;
16
+ function warnSkipped(type) {
17
+ if (warned) return;
18
+ warned = true;
19
+ console.warn(`Channels skipped an AI SDK part it cannot carry: "${type}"`);
20
+ }
21
+ /**
22
+ * Convert an AI SDK UI message stream into response chunks.
23
+ *
24
+ * An `error` or `abort` chunk makes the iteration throw once the stream
25
+ * ends, so a failed or aborted generation never reads as a finished one, while the stream still
26
+ * runs to its end and its `onEnd` sees the partial message.
27
+ */
28
+ async function* toResponseChunks(stream, options = {}) {
29
+ let error;
30
+ for await (const chunk of stream) {
31
+ if (chunk.type === "error") error ??= new Error(chunk.errorText);
32
+ if (chunk.type === "abort") error ??= /* @__PURE__ */ new Error("The generation was aborted");
33
+ const converted = toResponseChunk(chunk, options);
34
+ if (converted) yield converted;
35
+ }
36
+ if (error) throw error;
37
+ }
38
+ /** Convert one AI SDK UI message chunk into a response chunk, if it has one. */
39
+ function toResponseChunk(chunk, options) {
40
+ switch (chunk.type) {
41
+ case "text-start":
42
+ case "text-end":
43
+ case "reasoning-start":
44
+ case "reasoning-end": return withMetadata({
45
+ type: chunk.type,
46
+ id: chunk.id
47
+ }, chunk.providerMetadata);
48
+ case "text-delta":
49
+ case "reasoning-delta": return {
50
+ type: chunk.type,
51
+ id: chunk.id,
52
+ delta: chunk.delta
53
+ };
54
+ case "tool-input-start": return tool(chunk, options, { type: "tool-input-start" });
55
+ case "tool-input-delta": return {
56
+ type: "tool-input-delta",
57
+ toolCallId: chunk.toolCallId,
58
+ delta: chunk.inputTextDelta
59
+ };
60
+ case "tool-input-available": return withMetadata(tool(chunk, options, {
61
+ type: "tool-input-available",
62
+ input: json(chunk.input)
63
+ }), chunk.providerMetadata);
64
+ case "tool-input-error": {
65
+ const { owner: _owner, ...call } = tool(chunk, {}, {});
66
+ return {
67
+ ...call,
68
+ type: "tool-input-error",
69
+ input: json(chunk.input),
70
+ errorText: chunk.errorText
71
+ };
72
+ }
73
+ case "tool-approval-request": return {
74
+ type: "tool-approval-request",
75
+ toolCallId: chunk.toolCallId,
76
+ approvalId: chunk.approvalId
77
+ };
78
+ case "tool-output-available": return {
79
+ type: "tool-output-available",
80
+ toolCallId: chunk.toolCallId,
81
+ output: json(chunk.output),
82
+ ...chunk.preliminary && { preliminary: true },
83
+ ...chunk.providerExecuted && { providerExecuted: true }
84
+ };
85
+ case "tool-output-error": return {
86
+ type: "tool-output-error",
87
+ toolCallId: chunk.toolCallId,
88
+ errorText: chunk.errorText,
89
+ ...chunk.providerExecuted && { providerExecuted: true }
90
+ };
91
+ case "tool-output-denied": return {
92
+ type: "tool-output-denied",
93
+ toolCallId: chunk.toolCallId
94
+ };
95
+ case "source-url":
96
+ case "source-document":
97
+ case "file": {
98
+ const { providerMetadata, ...part } = chunk;
99
+ return withMetadata(part, providerMetadata);
100
+ }
101
+ case "start":
102
+ case "finish": return chunk.messageMetadata === void 0 ? void 0 : metadata(chunk.messageMetadata);
103
+ case "message-metadata": return metadata(chunk.messageMetadata);
104
+ case "start-step":
105
+ case "finish-step":
106
+ case "tool-approval-response":
107
+ case "error":
108
+ case "abort": return;
109
+ default:
110
+ if (chunk.type.startsWith("data-") && "data" in chunk) return {
111
+ type: "data",
112
+ name: chunk.type.slice(5),
113
+ ...chunk.id !== void 0 && { id: chunk.id },
114
+ data: json(chunk.data),
115
+ ...chunk.transient && { transient: true }
116
+ };
117
+ warnSkipped(chunk.type);
118
+ return;
119
+ }
120
+ }
121
+ function tool(chunk, options, rest) {
122
+ const owner = ownerOf(chunk.toolName, options);
123
+ return {
124
+ toolCallId: chunk.toolCallId,
125
+ toolName: chunk.toolName,
126
+ ...owner !== void 0 && { owner },
127
+ ...chunk.providerExecuted && { providerExecuted: true },
128
+ ...chunk.dynamic && { dynamic: true },
129
+ ...chunk.title !== void 0 && { title: chunk.title },
130
+ ...rest
131
+ };
132
+ }
133
+ function metadata(value) {
134
+ const converted = object(value);
135
+ return converted ? {
136
+ type: "metadata",
137
+ metadata: converted
138
+ } : void 0;
139
+ }
140
+ /**
141
+ * Convert a response chunk into an AI SDK UI message chunk. Fields that only
142
+ * Channels has, such as a tool call's `owner`, are dropped.
143
+ */
144
+ function toUIMessageChunk(chunk) {
145
+ switch (chunk.type) {
146
+ case "tool-input-start":
147
+ case "tool-input-available": {
148
+ const { owner: _owner, ...rest } = chunk;
149
+ return rest;
150
+ }
151
+ case "tool-input-delta": return {
152
+ type: "tool-input-delta",
153
+ toolCallId: chunk.toolCallId,
154
+ inputTextDelta: chunk.delta
155
+ };
156
+ case "data": {
157
+ const { name, ...rest } = chunk;
158
+ return {
159
+ ...rest,
160
+ type: `data-${name}`
161
+ };
162
+ }
163
+ case "metadata": return {
164
+ type: "message-metadata",
165
+ messageMetadata: chunk.metadata
166
+ };
167
+ default: return chunk;
168
+ }
169
+ }
170
+ /** Convert a saved AI SDK UI message into a transcript message. */
171
+ function toTranscriptMessage(message, options = {}) {
172
+ const metadata = object(message.metadata);
173
+ return {
174
+ id: message.id,
175
+ role: message.role,
176
+ parts: message.parts.flatMap((part) => {
177
+ const converted = toMessagePart(part, options);
178
+ return converted ? [converted] : [];
179
+ }),
180
+ ...metadata && { metadata }
181
+ };
182
+ }
183
+ function toMessagePart(part, options) {
184
+ switch (part.type) {
185
+ case "text":
186
+ case "reasoning": return withMetadata({
187
+ type: part.type,
188
+ text: part.text
189
+ }, part.providerMetadata);
190
+ case "file":
191
+ case "source-url":
192
+ case "source-document": {
193
+ const { providerMetadata, ...rest } = part;
194
+ if ("providerReference" in rest) delete rest.providerReference;
195
+ return withMetadata(rest, providerMetadata);
196
+ }
197
+ case "step-start": return;
198
+ case "dynamic-tool": return toToolPart(part, part.toolName, true, options);
199
+ default:
200
+ if (part.type.startsWith("tool-") && "toolCallId" in part) return toToolPart(part, part.type.slice(5), false, options);
201
+ if (part.type.startsWith("data-") && "data" in part) return {
202
+ type: "data",
203
+ name: part.type.slice(5),
204
+ ...part.id !== void 0 && { id: part.id },
205
+ data: json(part.data)
206
+ };
207
+ warnSkipped(part.type);
208
+ return;
209
+ }
210
+ }
211
+ function toToolPart(part, toolName, dynamic, options) {
212
+ const owner = ownerOf(toolName, options);
213
+ return withMetadata({
214
+ type: "tool",
215
+ toolCallId: part.toolCallId,
216
+ toolName,
217
+ state: part.state,
218
+ ...part.input !== void 0 && { input: json(part.input) },
219
+ ...part.state === "output-available" && {
220
+ output: json(part.output),
221
+ ...part.preliminary && { preliminary: true }
222
+ },
223
+ ...part.state === "output-error" && { errorText: part.errorText },
224
+ ...part.approval && { approval: {
225
+ id: part.approval.id,
226
+ ...part.approval.approved !== void 0 && { approved: part.approval.approved },
227
+ ...part.approval.reason !== void 0 && { reason: part.approval.reason }
228
+ } },
229
+ ...owner !== void 0 && { owner },
230
+ ...part.providerExecuted && { providerExecuted: true },
231
+ ...dynamic && { dynamic: true },
232
+ ...part.title !== void 0 && { title: part.title }
233
+ }, part.callProviderMetadata);
234
+ }
235
+ /** Convert a transcript message into an AI SDK UI message. */
236
+ function toUIMessage(message) {
237
+ return {
238
+ id: message.id,
239
+ role: message.role,
240
+ parts: message.parts.map(toUIPart),
241
+ ...message.metadata && { metadata: message.metadata }
242
+ };
243
+ }
244
+ function toUIPart(part) {
245
+ switch (part.type) {
246
+ case "data": {
247
+ const { name, ...rest } = part;
248
+ return {
249
+ ...rest,
250
+ type: `data-${name}`
251
+ };
252
+ }
253
+ case "tool": {
254
+ const { type: _type, toolName, dynamic, owner: _owner, providerMetadata, ...rest } = part;
255
+ const call = {
256
+ ...rest,
257
+ ...providerMetadata && { callProviderMetadata: providerMetadata }
258
+ };
259
+ return dynamic ? {
260
+ ...call,
261
+ type: "dynamic-tool",
262
+ toolName
263
+ } : {
264
+ ...call,
265
+ type: `tool-${toolName}`
266
+ };
267
+ }
268
+ default: return part;
269
+ }
270
+ }
271
+ /** Whether the message has a tool call waiting for a result or an approval. */
272
+ function awaitsInput(message) {
273
+ return message.parts.some((part) => "toolCallId" in part && (part.state === "input-available" || part.state === "approval-requested"));
274
+ }
275
+ /**
276
+ * Record a tool result or approval response on the tool call it answers.
277
+ * Returns the updated message, or undefined when no call is waiting for it,
278
+ * so the first answer wins.
279
+ */
280
+ function answerToolCall(messages, event) {
281
+ for (const message of messages) {
282
+ const index = message.parts.findIndex((part) => answers(part, event));
283
+ if (index === -1) continue;
284
+ const parts = [...message.parts];
285
+ const part = parts[index];
286
+ parts[index] = event.type === "approval-response" ? {
287
+ ...part,
288
+ state: event.approved ? "approval-responded" : "output-denied",
289
+ approval: {
290
+ id: event.approvalId,
291
+ approved: event.approved,
292
+ ...event.reason !== void 0 && { reason: event.reason }
293
+ }
294
+ } : event.type === "tool-result" && event.result.ok ? {
295
+ ...part,
296
+ state: "output-available",
297
+ output: event.result.output
298
+ } : {
299
+ ...part,
300
+ state: "output-error",
301
+ errorText: event.type === "tool-result" && !event.result.ok ? event.result.errorText ?? "" : ""
302
+ };
303
+ return {
304
+ ...message,
305
+ parts
306
+ };
307
+ }
308
+ }
309
+ function answers(part, event) {
310
+ if (!("toolCallId" in part)) return false;
311
+ if (event.type === "tool-result") return part.toolCallId === event.toolCallId && (part.state === "input-available" || part.state === "approval-responded");
312
+ return event.type === "approval-response" && part.state === "approval-requested" && part.approval.id === event.approvalId;
313
+ }
314
+ //#endregion
315
+ export { toTranscriptMessage as a, toResponseChunks as i, awaitsInput as n, toUIMessage as o, toResponseChunk as r, toUIMessageChunk as s, answerToolCall as t };
316
+
317
+ //# sourceMappingURL=turns-DCV3ycDl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turns-DCV3ycDl.js","names":[],"sources":["../src/harness/ai-sdk/turns.ts"],"sourcesContent":["import type { ToolSet, UIMessage, UIMessageChunk } from \"ai\";\nimport type {\n InboundEvent,\n Json,\n JsonObject,\n MessagePart,\n ResponseChunk,\n ToolPart,\n TranscriptMessage\n} from \"../../experimental/channels/protocol\";\n\nexport type AiSdkConversionOptions = {\n /** The agent's tools. Those without `execute` run on a client. */\n tools?: ToolSet;\n /** Id of the participant whose client runs this message's client tools. */\n owner?: string;\n};\n\nfunction ownerOf(\n toolName: string,\n { tools, owner }: AiSdkConversionOptions\n): string | undefined {\n const tool =\n tools && Object.hasOwn(tools, toolName) ? tools[toolName] : undefined;\n return tool && !tool.execute ? owner : undefined;\n}\n\ntype UIPart = UIMessage[\"parts\"][number];\n\n// SAFETY: AI SDK values that reach these casts are JSON: tool inputs are\n// parsed JSON, and outputs, metadata and data are JSON-serializable by the\n// AI SDK's own contract for UI messages.\nconst json = (value: unknown): Json => (value ?? null) as Json;\nconst object = (value: unknown): JsonObject | undefined =>\n typeof value === \"object\" && value !== null\n ? (value as JsonObject)\n : undefined;\n\nfunction withMetadata<T extends object>(\n value: T,\n metadata: unknown\n): T & { providerMetadata?: JsonObject } {\n const providerMetadata = object(metadata);\n return providerMetadata ? { ...value, providerMetadata } : value;\n}\n\nlet warned = false;\nfunction warnSkipped(type: string): void {\n if (warned) return;\n warned = true;\n console.warn(`Channels skipped an AI SDK part it cannot carry: \"${type}\"`);\n}\n\n/**\n * Convert an AI SDK UI message stream into response chunks.\n *\n * An `error` or `abort` chunk makes the iteration throw once the stream\n * ends, so a failed or aborted generation never reads as a finished one, while the stream still\n * runs to its end and its `onEnd` sees the partial message.\n */\nexport async function* toResponseChunks(\n stream: AsyncIterable<UIMessageChunk>,\n options: AiSdkConversionOptions = {}\n): AsyncGenerator<ResponseChunk> {\n let error: Error | undefined;\n for await (const chunk of stream) {\n if (chunk.type === \"error\") error ??= new Error(chunk.errorText);\n if (chunk.type === \"abort\")\n error ??= new Error(\"The generation was aborted\");\n const converted = toResponseChunk(chunk, options);\n if (converted) yield converted;\n }\n if (error) throw error;\n}\n\n/** Convert one AI SDK UI message chunk into a response chunk, if it has one. */\nexport function toResponseChunk(\n chunk: UIMessageChunk,\n options: AiSdkConversionOptions\n): ResponseChunk | undefined {\n switch (chunk.type) {\n case \"text-start\":\n case \"text-end\":\n case \"reasoning-start\":\n case \"reasoning-end\":\n return withMetadata(\n { type: chunk.type, id: chunk.id },\n chunk.providerMetadata\n );\n case \"text-delta\":\n case \"reasoning-delta\":\n return { type: chunk.type, id: chunk.id, delta: chunk.delta };\n case \"tool-input-start\":\n return tool(chunk, options, { type: \"tool-input-start\" as const });\n case \"tool-input-delta\":\n return {\n type: \"tool-input-delta\",\n toolCallId: chunk.toolCallId,\n delta: chunk.inputTextDelta\n };\n case \"tool-input-available\":\n return withMetadata(\n tool(chunk, options, {\n type: \"tool-input-available\" as const,\n input: json(chunk.input)\n }),\n chunk.providerMetadata\n );\n case \"tool-input-error\": {\n const { owner: _owner, ...call } = tool(chunk, {}, {});\n return {\n ...call,\n type: \"tool-input-error\",\n input: json(chunk.input),\n errorText: chunk.errorText\n };\n }\n case \"tool-approval-request\":\n return {\n type: \"tool-approval-request\",\n toolCallId: chunk.toolCallId,\n approvalId: chunk.approvalId\n };\n case \"tool-output-available\":\n return {\n type: \"tool-output-available\",\n toolCallId: chunk.toolCallId,\n output: json(chunk.output),\n ...(chunk.preliminary && { preliminary: true }),\n ...(chunk.providerExecuted && { providerExecuted: true })\n };\n case \"tool-output-error\":\n return {\n type: \"tool-output-error\",\n toolCallId: chunk.toolCallId,\n errorText: chunk.errorText,\n ...(chunk.providerExecuted && { providerExecuted: true })\n };\n case \"tool-output-denied\":\n return { type: \"tool-output-denied\", toolCallId: chunk.toolCallId };\n case \"source-url\":\n case \"source-document\":\n case \"file\": {\n const { providerMetadata, ...part } = chunk;\n // SAFETY: these chunk shapes match the Channels parts field for field.\n return withMetadata(part, providerMetadata) as ResponseChunk;\n }\n case \"start\":\n case \"finish\":\n return chunk.messageMetadata === undefined\n ? undefined\n : metadata(chunk.messageMetadata);\n case \"message-metadata\":\n return metadata(chunk.messageMetadata);\n case \"start-step\":\n case \"finish-step\":\n case \"tool-approval-response\":\n case \"error\":\n case \"abort\":\n return undefined;\n default:\n if (chunk.type.startsWith(\"data-\") && \"data\" in chunk) {\n return {\n type: \"data\",\n name: chunk.type.slice(\"data-\".length),\n ...(chunk.id !== undefined && { id: chunk.id }),\n data: json(chunk.data),\n ...(chunk.transient && { transient: true })\n };\n }\n warnSkipped(chunk.type);\n return undefined;\n }\n}\n\nfunction tool<T extends object>(\n chunk: {\n toolCallId: string;\n toolName: string;\n providerExecuted?: boolean;\n dynamic?: boolean;\n title?: string;\n },\n options: AiSdkConversionOptions,\n rest: T\n) {\n const owner = ownerOf(chunk.toolName, options);\n return {\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n ...(owner !== undefined && { owner }),\n ...(chunk.providerExecuted && { providerExecuted: true }),\n ...(chunk.dynamic && { dynamic: true }),\n ...(chunk.title !== undefined && { title: chunk.title }),\n ...rest\n };\n}\n\nfunction metadata(value: unknown): ResponseChunk | undefined {\n const converted = object(value);\n return converted ? { type: \"metadata\", metadata: converted } : undefined;\n}\n\n/**\n * Convert a response chunk into an AI SDK UI message chunk. Fields that only\n * Channels has, such as a tool call's `owner`, are dropped.\n */\nexport function toUIMessageChunk(chunk: ResponseChunk): UIMessageChunk {\n switch (chunk.type) {\n case \"tool-input-start\":\n case \"tool-input-available\": {\n const { owner: _owner, ...rest } = chunk;\n // SAFETY: as below, once the Channels-only owner is gone.\n return rest as UIMessageChunk;\n }\n case \"tool-input-delta\":\n return {\n type: \"tool-input-delta\",\n toolCallId: chunk.toolCallId,\n inputTextDelta: chunk.delta\n };\n case \"data\": {\n const { name, ...rest } = chunk;\n return { ...rest, type: `data-${name}` };\n }\n case \"metadata\":\n return { type: \"message-metadata\", messageMetadata: chunk.metadata };\n default:\n // SAFETY: the remaining chunks match their AI SDK shapes field for\n // field.\n return chunk as UIMessageChunk;\n }\n}\n\n/** Convert a saved AI SDK UI message into a transcript message. */\nexport function toTranscriptMessage(\n message: UIMessage,\n options: AiSdkConversionOptions = {}\n): TranscriptMessage {\n const metadata = object(message.metadata);\n return {\n id: message.id,\n role: message.role,\n parts: message.parts.flatMap((part) => {\n const converted = toMessagePart(part, options);\n return converted ? [converted] : [];\n }),\n ...(metadata && { metadata })\n };\n}\n\nfunction toMessagePart(\n part: UIPart,\n options: AiSdkConversionOptions\n): MessagePart | undefined {\n switch (part.type) {\n case \"text\":\n case \"reasoning\":\n return withMetadata(\n { type: part.type, text: part.text },\n part.providerMetadata\n );\n case \"file\":\n case \"source-url\":\n case \"source-document\": {\n const { providerMetadata, ...rest } = part;\n if (\"providerReference\" in rest) delete rest.providerReference;\n // SAFETY: these part shapes match the Channels parts field for field.\n return withMetadata(rest, providerMetadata) as MessagePart;\n }\n case \"step-start\":\n return undefined;\n case \"dynamic-tool\":\n return toToolPart(part, part.toolName, true, options);\n default:\n if (part.type.startsWith(\"tool-\") && \"toolCallId\" in part) {\n return toToolPart(\n part,\n part.type.slice(\"tool-\".length),\n false,\n options\n );\n }\n if (part.type.startsWith(\"data-\") && \"data\" in part) {\n return {\n type: \"data\",\n name: part.type.slice(\"data-\".length),\n ...(part.id !== undefined && { id: part.id }),\n data: json(part.data)\n };\n }\n warnSkipped(part.type);\n return undefined;\n }\n}\n\ntype UIToolPart = Extract<UIPart, { toolCallId: string }>;\n\nfunction toToolPart(\n part: UIToolPart,\n toolName: string,\n dynamic: boolean,\n options: AiSdkConversionOptions\n): ToolPart {\n const owner = ownerOf(toolName, options);\n return withMetadata(\n {\n type: \"tool\",\n toolCallId: part.toolCallId,\n toolName,\n state: part.state,\n ...(part.input !== undefined && { input: json(part.input) }),\n ...(part.state === \"output-available\" && {\n output: json(part.output),\n ...(part.preliminary && { preliminary: true })\n }),\n ...(part.state === \"output-error\" && { errorText: part.errorText }),\n ...(part.approval && {\n approval: {\n id: part.approval.id,\n ...(part.approval.approved !== undefined && {\n approved: part.approval.approved\n }),\n ...(part.approval.reason !== undefined && {\n reason: part.approval.reason\n })\n }\n }),\n ...(owner !== undefined && { owner }),\n ...(part.providerExecuted && { providerExecuted: true }),\n ...(dynamic && { dynamic: true }),\n ...(part.title !== undefined && { title: part.title })\n } satisfies ToolPart,\n part.callProviderMetadata\n );\n}\n\n/** Convert a transcript message into an AI SDK UI message. */\nexport function toUIMessage(message: TranscriptMessage): UIMessage {\n return {\n id: message.id,\n role: message.role,\n parts: message.parts.map(toUIPart),\n ...(message.metadata && { metadata: message.metadata })\n };\n}\n\nfunction toUIPart(part: MessagePart): UIPart {\n switch (part.type) {\n case \"data\": {\n const { name, ...rest } = part;\n return { ...rest, type: `data-${name}` };\n }\n case \"tool\": {\n const {\n type: _type,\n toolName,\n dynamic,\n owner: _owner,\n providerMetadata,\n ...rest\n } = part;\n const call = {\n ...rest,\n ...(providerMetadata && { callProviderMetadata: providerMetadata })\n };\n // SAFETY: the state and its fields were produced together by\n // toToolPart, or by an agent following the same ToolState rules.\n return (\n dynamic\n ? { ...call, type: \"dynamic-tool\", toolName }\n : { ...call, type: `tool-${toolName}` }\n ) as UIPart;\n }\n default:\n // SAFETY: the remaining parts match their AI SDK shapes field for field.\n return part as UIPart;\n }\n}\n\n/** Whether the message has a tool call waiting for a result or an approval. */\nexport function awaitsInput(message: UIMessage): boolean {\n return message.parts.some(\n (part) =>\n \"toolCallId\" in part &&\n (part.state === \"input-available\" || part.state === \"approval-requested\")\n );\n}\n\n/** A tool result or approval response, as an inbound event carries it. */\nexport type ToolCallAnswer =\n | Pick<\n Extract<InboundEvent, { type: \"tool-result\" }>,\n \"type\" | \"toolCallId\" | \"result\"\n >\n | Pick<\n Extract<InboundEvent, { type: \"approval-response\" }>,\n \"type\" | \"approvalId\" | \"approved\" | \"reason\"\n >;\n\n/**\n * Record a tool result or approval response on the tool call it answers.\n * Returns the updated message, or undefined when no call is waiting for it,\n * so the first answer wins.\n */\nexport function answerToolCall(\n messages: readonly UIMessage[],\n event: ToolCallAnswer\n): UIMessage | undefined {\n for (const message of messages) {\n const index = message.parts.findIndex((part) => answers(part, event));\n if (index === -1) continue;\n const parts = [...message.parts];\n const part = parts[index] as UIToolPart;\n // SAFETY: the new state is set with exactly the fields it requires.\n parts[index] = (\n event.type === \"approval-response\"\n ? {\n ...part,\n // As the AI SDK records them: a rejection ends the call.\n state: event.approved ? \"approval-responded\" : \"output-denied\",\n approval: {\n id: event.approvalId,\n approved: event.approved,\n ...(event.reason !== undefined && { reason: event.reason })\n }\n }\n : event.type === \"tool-result\" && event.result.ok\n ? { ...part, state: \"output-available\", output: event.result.output }\n : {\n ...part,\n state: \"output-error\",\n errorText:\n event.type === \"tool-result\" && !event.result.ok\n ? (event.result.errorText ?? \"\")\n : \"\"\n }\n ) as UIPart;\n return { ...message, parts };\n }\n return undefined;\n}\n\nfunction answers(part: UIPart, event: ToolCallAnswer): boolean {\n if (!(\"toolCallId\" in part)) return false;\n if (event.type === \"tool-result\") {\n return (\n part.toolCallId === event.toolCallId &&\n // An approved client tool is answered after its approval.\n (part.state === \"input-available\" || part.state === \"approval-responded\")\n );\n }\n return (\n event.type === \"approval-response\" &&\n part.state === \"approval-requested\" &&\n part.approval.id === event.approvalId\n );\n}\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { i as _classPrivateFieldInitSpec, n as _classPrivateFieldSet2, r as _assertClassBrand, t as _classPrivateFieldGet2 } from "../classPrivateFieldGet2-DZBYAB34.js";
2
2
  import { t as _classPrivateMethodInitSpec } from "../classPrivateMethodInitSpec-qMjJ6sHQ.js";
3
- import { VOICE_PROTOCOL_VERSION } from "./types.js";
4
3
  import { toVoiceError } from "./errors.js";
5
4
  import { t as ClientDiagnostics } from "../diagnostics-C4jcz3VK.js";
5
+ import { VOICE_PROTOCOL_VERSION } from "./types.js";
6
6
  import { PartySocket } from "partysocket";
7
7
  //#region src/voice/client.ts
8
8
  function camelCaseToKebabCase(str) {
@@ -1,5 +1,5 @@
1
- import { x as Connection } from "../capability-runner-DBAnGr6L.js";
2
- import { c as Agent } from "../agent-routing-0DR0Tk2v.js";
1
+ import { x as Connection } from "../capability-runner-BiVUtjqC.js";
2
+ import { c as Agent } from "../agent-routing-QDcchcQP.js";
3
3
  import {
4
4
  C as VoiceTransport,
5
5
  D as VoiceTurnSource,
@@ -1,8 +1,8 @@
1
1
  import { i as _classPrivateFieldInitSpec, n as _classPrivateFieldSet2, r as _assertClassBrand, t as _classPrivateFieldGet2 } from "../classPrivateFieldGet2-DZBYAB34.js";
2
2
  import { t as _classPrivateMethodInitSpec } from "../classPrivateMethodInitSpec-qMjJ6sHQ.js";
3
- import { VOICE_PROTOCOL_VERSION } from "./types.js";
4
3
  import { logVoiceError, toVoiceError, voiceErrorMessage } from "./errors.js";
5
4
  import { n as ServerDiagnostics } from "../diagnostics-C4jcz3VK.js";
5
+ import { VOICE_PROTOCOL_VERSION } from "./types.js";
6
6
  import { n as iterateTextEvents, r as SentenceChunker, t as iterateText } from "../text-stream-CpdiKrJB.js";
7
7
  import { addSFUTracks, createSFUSession, createSFUWebSocketAdapter, decodeVarint, downsample48kStereoTo16kMono, encodePayloadToProtobuf, encodeVarint, extractPayloadFromProtobuf, renegotiateSFUSession, sfuFetch, upsample16kMonoTo48kStereo } from "./sfu.js";
8
8
  import { WorkersAIFluxSTT, WorkersAINova3STT, WorkersAITTS } from "./workers-ai.js";
@@ -0,0 +1,89 @@
1
+ import {
2
+ C as WindowWebFetchPageOptions,
3
+ S as WebFetchVia,
4
+ T as windowWebFetchPage,
5
+ _ as WEB_FETCH_TOOL_NAME,
6
+ a as WebFetchCallOptions,
7
+ b as WebFetchToolInput,
8
+ c as WebFetchRequest,
9
+ d as DEFAULT_WEB_FETCH_MAX_BYTES,
10
+ f as DEFAULT_WEB_FETCH_MAX_REDIRECTS,
11
+ g as WEB_FETCH_TOOL_DESCRIPTION,
12
+ h as MAX_WEB_FETCH_URL_LENGTH,
13
+ i as DirectWebFetchOptions,
14
+ l as WebFetchSource,
15
+ m as DEFAULT_WEB_FETCH_TIMEOUT_MS,
16
+ n as WebFetchToolOptions,
17
+ o as WebFetchError,
18
+ p as DEFAULT_WEB_FETCH_PAGE_CHARS,
19
+ r as WebFetchToolSourceOptions,
20
+ s as WebFetchErrorCode,
21
+ t as WebFetchToolDirectOptions,
22
+ u as createDirectWebFetch,
23
+ v as WebFetchFormat,
24
+ w as renderWebFetchPage,
25
+ x as WebFetchToolOutput,
26
+ y as WebFetchPage
27
+ } from "../../tool-DoVberpN.js";
28
+
29
+ //#region src/web/url-policy.d.ts
30
+ /**
31
+ * Whether a host, as `URL.hostname` gives it, is in one of the ranges below
32
+ * (IPv4, or IPv6 including IPv4-mapped, NAT64 and 6to4 forms), or is
33
+ * `localhost` or ends in `.localhost` or `.internal`.
34
+ */
35
+ declare function isPrivateOrLocalHost(hostname: string): boolean;
36
+ //#endregion
37
+ //#region src/web/fetch/index.d.ts
38
+ /** Options for {@link fetchWeb}: the direct source's, plus a deadline. */
39
+ interface FetchWebOptions extends DirectWebFetchOptions {
40
+ /**
41
+ * Give up after this many milliseconds with a `web_fetch_timeout` error.
42
+ * A positive integer; defaults to 30 seconds.
43
+ */
44
+ timeoutMs?: number;
45
+ /** Abort the fetch; rejects with the signal's reason. */
46
+ signal?: AbortSignal;
47
+ }
48
+ /**
49
+ * Fetch one URL directly, without a tool: {@link createDirectWebFetch} plus
50
+ * a deadline. Returns the whole page; to show it to a model a window at a
51
+ * time, as the tool does, pass it to {@link windowWebFetchPage} and
52
+ * {@link renderWebFetchPage}.
53
+ */
54
+ declare function fetchWeb(
55
+ request: WebFetchRequest,
56
+ options: FetchWebOptions
57
+ ): Promise<WebFetchPage>;
58
+ //#endregion
59
+ export {
60
+ DEFAULT_WEB_FETCH_MAX_BYTES,
61
+ DEFAULT_WEB_FETCH_MAX_REDIRECTS,
62
+ DEFAULT_WEB_FETCH_PAGE_CHARS,
63
+ DEFAULT_WEB_FETCH_TIMEOUT_MS,
64
+ type DirectWebFetchOptions,
65
+ FetchWebOptions,
66
+ MAX_WEB_FETCH_URL_LENGTH,
67
+ WEB_FETCH_TOOL_DESCRIPTION,
68
+ WEB_FETCH_TOOL_NAME,
69
+ type WebFetchCallOptions,
70
+ WebFetchError,
71
+ type WebFetchErrorCode,
72
+ type WebFetchFormat,
73
+ type WebFetchPage,
74
+ type WebFetchRequest,
75
+ type WebFetchSource,
76
+ type WebFetchToolDirectOptions,
77
+ type WebFetchToolInput,
78
+ type WebFetchToolOptions,
79
+ type WebFetchToolOutput,
80
+ type WebFetchToolSourceOptions,
81
+ type WebFetchVia,
82
+ type WindowWebFetchPageOptions,
83
+ createDirectWebFetch,
84
+ fetchWeb,
85
+ isPrivateOrLocalHost,
86
+ renderWebFetchPage,
87
+ windowWebFetchPage
88
+ };
89
+ //# sourceMappingURL=index.d.ts.map