agents 0.27.0 → 0.28.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (216) hide show
  1. package/dist/abortable-C1SpfVoi.js +21 -0
  2. package/dist/abortable-C1SpfVoi.js.map +1 -0
  3. package/dist/{agent-routing-Bhdbvf7s.d.ts → agent-routing-BMvWTFEp.d.ts} +21 -15
  4. package/dist/agent-routing.d.ts +1 -1
  5. package/dist/agent-tool-types.d.ts +1 -1
  6. package/dist/{agent-tools-bJZwBMfq.d.ts → agent-tools-ohoewW-B.d.ts} +2 -2
  7. package/dist/agent-tools.d.ts +1 -1
  8. package/dist/ai-ahruGw7e.d.ts +239 -0
  9. package/dist/{ai-sdk-OoGkFy3s.js → ai-sdk-C2iTAwUd.js} +44 -18
  10. package/dist/ai-sdk-C2iTAwUd.js.map +1 -0
  11. package/dist/browser/ai.d.ts +8 -227
  12. package/dist/browser/ai.js +259 -1
  13. package/dist/browser/ai.js.map +1 -0
  14. package/dist/browser/index.d.ts +56 -46
  15. package/dist/browser/index.js +4 -361
  16. package/dist/browser/{ai-sdk.d.ts → tools/ai-sdk.d.ts} +7 -7
  17. package/dist/browser/{ai-sdk.js → tools/ai-sdk.js} +5 -4
  18. package/dist/browser/tools/ai-sdk.js.map +1 -0
  19. package/dist/browser/tools/pi.d.ts +111 -0
  20. package/dist/browser/tools/pi.js +119 -0
  21. package/dist/browser/tools/pi.js.map +1 -0
  22. package/dist/browser/{tanstack-ai.d.ts → tools/tanstack-ai.d.ts} +39 -37
  23. package/dist/browser/{tanstack-ai.js → tools/tanstack-ai.js} +73 -59
  24. package/dist/browser/tools/tanstack-ai.js.map +1 -0
  25. package/dist/browser-CEdNlsaD.js +481 -0
  26. package/dist/browser-CEdNlsaD.js.map +1 -0
  27. package/dist/{browser-tmkcAAI3.d.ts → browser-D30VlpcA.d.ts} +63 -37
  28. package/dist/{browser-tool-CBqs6hqa.js → browser-tool-4iomavs_.js} +145 -49
  29. package/dist/browser-tool-4iomavs_.js.map +1 -0
  30. package/dist/{browser-tool-Bn-nzJQI.d.ts → browser-tool-vtrPOV8e.d.ts} +24 -5
  31. package/dist/{capability-B4WbF81e.js → capability-DBAKc6UZ.js} +1 -3
  32. package/dist/capability-DBAKc6UZ.js.map +1 -0
  33. package/dist/{capability-runner-O5VbQzqg.d.ts → capability-runner-BiVUtjqC.d.ts} +1 -7
  34. package/dist/chat/index.d.ts +4 -4
  35. package/dist/chat/index.js +1 -1
  36. package/dist/chat-sdk/index.d.ts +1 -1
  37. package/dist/chat-sdk/index.js +1 -1
  38. package/dist/{client-1tEQ1Oqz.js → client-BnYbNT3z.js} +3 -4
  39. package/dist/client-BnYbNT3z.js.map +1 -0
  40. package/dist/{client-DS3Dz9l0.d.ts → client-Bp-JwL3p.d.ts} +2 -2
  41. package/dist/client.d.ts +1 -1
  42. package/dist/{connector-58XDGvc3.js → connector-CtZylXdk.js} +3 -603
  43. package/dist/connector-CtZylXdk.js.map +1 -0
  44. package/dist/{connector-Cl-VqPmA.d.ts → connector-DEXzVoaY.d.ts} +9 -374
  45. package/dist/{conversations-DH0ut_8n.d.ts → conversations-FjHDRZyD.d.ts} +4 -4
  46. package/dist/{current-agent-C07C5o5Y.d.ts → current-agent-CKgT5d1O.d.ts} +3 -5
  47. package/dist/current-agent-DhoDkSnH.js.map +1 -1
  48. package/dist/{durable-object-lifecycle-DRqp475_.d.ts → durable-object-lifecycle-DOI_bzCH.d.ts} +2 -2
  49. package/dist/experimental/channels/index.d.ts +2 -2
  50. package/dist/experimental/channels/index.js +2 -2
  51. package/dist/experimental/channels/web/index.d.ts +2 -2
  52. package/dist/experimental/channels/web/index.js +1 -1
  53. package/dist/{gateway-BDC07gYO.d.ts → gateway-BFO6vRDn.d.ts} +2 -2
  54. package/dist/{handler-stateless-VvrWSAVA.js → handler-stateless-Bly_nSH3.js} +12 -3
  55. package/dist/handler-stateless-Bly_nSH3.js.map +1 -0
  56. package/dist/harness/ai-sdk/index.d.ts +2 -2
  57. package/dist/harness/ai-sdk/index.js +1 -1
  58. package/dist/harness/container/index.d.ts +2 -2
  59. package/dist/harness/container/index.js +3 -3
  60. package/dist/harness/opencode/index.d.ts +183 -7
  61. package/dist/harness/opencode/index.js +355 -24
  62. package/dist/harness/opencode/index.js.map +1 -1
  63. package/dist/harness/pi/index.d.ts +2 -2
  64. package/dist/harness/pi/index.js +3 -3
  65. package/dist/harness/store/index.d.ts +1 -1
  66. package/dist/harness/store/index.js +1 -1
  67. package/dist/harness/think/index.d.ts +2 -2
  68. package/dist/harness/think/index.js +363 -171
  69. package/dist/harness/think/index.js.map +1 -1
  70. package/dist/{images-Ce9SCu3X.js → images-C4hiIexM.js} +46 -4
  71. package/dist/images-C4hiIexM.js.map +1 -0
  72. package/dist/{index-D0A5tbWu.d.ts → index-BEL3ZV-s.d.ts} +2 -6
  73. package/dist/{index-Ib_4dwOo.d.ts → index-CBt8oRJt.d.ts} +3 -5
  74. package/dist/index.d.ts +4 -4
  75. package/dist/index.js +2 -2
  76. package/dist/input-schema-BQykTEp_.js +20 -0
  77. package/dist/input-schema-BQykTEp_.js.map +1 -0
  78. package/dist/{input-schema-DNrpTu49.js → input-schema-xBofjBKC.js} +3 -3
  79. package/dist/input-schema-xBofjBKC.js.map +1 -0
  80. package/dist/internal_context.d.ts +1 -1
  81. package/dist/lifecycle/index.d.ts +3 -3
  82. package/dist/lifecycle/index.js +2 -2
  83. package/dist/{lifecycle-CFu6OV03.js → lifecycle-DGorpAmA.js} +2 -4
  84. package/dist/lifecycle-DGorpAmA.js.map +1 -0
  85. package/dist/mcp/client/index.d.ts +1 -1
  86. package/dist/mcp/client/index.js +1 -1
  87. package/dist/mcp/index.d.ts +1 -1
  88. package/dist/mcp/index.js +18 -4
  89. package/dist/mcp/index.js.map +1 -1
  90. package/dist/mcp/server/index.js +1 -1
  91. package/dist/models/ai-sdk/index.d.ts +45 -17
  92. package/dist/models/ai-sdk/index.js +1 -1
  93. package/dist/models/opencode/index.d.ts +2 -2
  94. package/dist/models/opencode/index.js +1 -1
  95. package/dist/models/pi-ai/index.d.ts +8 -3
  96. package/dist/models/pi-ai/index.js +6 -6
  97. package/dist/models/pi-ai/index.js.map +1 -1
  98. package/dist/{options-pwTNq9z6.d.ts → options-CiIsJHXR.d.ts} +2 -6
  99. package/dist/queue/index.d.ts +1 -1
  100. package/dist/queue/index.js +1 -1
  101. package/dist/{queue-BB-zfIYF.js → queue-CcIjVYTE.js} +2 -2
  102. package/dist/{queue-BB-zfIYF.js.map → queue-CcIjVYTE.js.map} +1 -1
  103. package/dist/react.d.ts +2 -2
  104. package/dist/routing/index.d.ts +2 -2
  105. package/dist/routing/index.js +1 -1
  106. package/dist/{scheduler-CrFCnv_J.d.ts → scheduler-BCLESHSC.d.ts} +2 -12
  107. package/dist/{scheduler-DZ3xQfeK.js → scheduler-FIHv2-kJ.js} +2 -4
  108. package/dist/scheduler-FIHv2-kJ.js.map +1 -0
  109. package/dist/schedules/index.d.ts +1 -1
  110. package/dist/schedules/index.js +1 -1
  111. package/dist/serializable.d.ts +1 -1
  112. package/dist/session-store-Do4xkDcf.js +606 -0
  113. package/dist/session-store-Do4xkDcf.js.map +1 -0
  114. package/dist/session-store-DoPY12xM.d.ts +383 -0
  115. package/dist/sessions/index.d.ts +1 -1
  116. package/dist/sessions/index.js +1 -1
  117. package/dist/{sessions-B9pNuxdT.js → sessions-_vN5BEZX.js} +2 -2
  118. package/dist/{sessions-B9pNuxdT.js.map → sessions-_vN5BEZX.js.map} +1 -1
  119. package/dist/{settings-C45hDliX.js → settings-BjAiPd6Z.js} +7 -4
  120. package/dist/settings-BjAiPd6Z.js.map +1 -0
  121. package/dist/{settings-NgGwF7Qt.d.ts → settings-DnD__xuE.d.ts} +22 -4
  122. package/dist/{src-DgCbZtIR.js → src-CQxJFv4l.js} +8 -8
  123. package/dist/src-CQxJFv4l.js.map +1 -0
  124. package/dist/state/index.d.ts +1 -1
  125. package/dist/state/index.js +1 -3
  126. package/dist/state/index.js.map +1 -1
  127. package/dist/{store-DLeqKuj3.d.ts → store-BKM4Xm9M.d.ts} +23 -1
  128. package/dist/{store-vgcPYo8K.js → store-CslVzfN7.js} +28 -2
  129. package/dist/store-CslVzfN7.js.map +1 -0
  130. package/dist/streams/index.d.ts +1 -1
  131. package/dist/streams/index.js +1 -1
  132. package/dist/{streams-CITClVer.js → streams-lsHMJhRW.js} +2 -2
  133. package/dist/{streams-CITClVer.js.map → streams-lsHMJhRW.js.map} +1 -1
  134. package/dist/{streams-fbG61qM8.d.ts → streams-vrCtbUIn.d.ts} +2 -2
  135. package/dist/sub-routing.d.ts +1 -1
  136. package/dist/tasks/index.d.ts +1 -1
  137. package/dist/tasks/index.js +1 -1
  138. package/dist/{tasks-CkTZNaV1.js → tasks-BN_5AWqI.js} +2 -2
  139. package/dist/{tasks-CkTZNaV1.js.map → tasks-BN_5AWqI.js.map} +1 -1
  140. package/dist/{tasks-PtlB4Uyn.d.ts → tasks-E89KdwkS.d.ts} +2 -2
  141. package/dist/{tool-BPJEbwaX.d.ts → tool-CTp72Jb_.d.ts} +4 -4
  142. package/dist/tool-CxKsvxjm.js +1126 -0
  143. package/dist/tool-CxKsvxjm.js.map +1 -0
  144. package/dist/tool-DoVberpN.d.ts +301 -0
  145. package/dist/{tool-3PA8xjB_.js → tool-VF0qiO7q.js} +7 -18
  146. package/dist/tool-VF0qiO7q.js.map +1 -0
  147. package/dist/tool-helpers-O5BDVEAY.js +58 -0
  148. package/dist/tool-helpers-O5BDVEAY.js.map +1 -0
  149. package/dist/{transport-k2mFrtL8.d.ts → transport-DCyarnwm.d.ts} +2 -2
  150. package/dist/voice/index.d.ts +2 -2
  151. package/dist/web/fetch/index.d.ts +89 -0
  152. package/dist/web/fetch/index.js +20 -0
  153. package/dist/web/fetch/index.js.map +1 -0
  154. package/dist/web/fetch/tools/ai-sdk.d.ts +80 -0
  155. package/dist/web/fetch/tools/ai-sdk.js +47 -0
  156. package/dist/web/fetch/tools/ai-sdk.js.map +1 -0
  157. package/dist/web/fetch/tools/pi.d.ts +84 -0
  158. package/dist/web/fetch/tools/pi.js +88 -0
  159. package/dist/web/fetch/tools/pi.js.map +1 -0
  160. package/dist/web/fetch/tools/tanstack-ai.d.ts +78 -0
  161. package/dist/web/fetch/tools/tanstack-ai.js +45 -0
  162. package/dist/web/fetch/tools/tanstack-ai.js.map +1 -0
  163. package/dist/{websearch → web/search}/index.d.ts +1 -1
  164. package/dist/{websearch → web/search}/index.js +1 -1
  165. package/dist/{websearch → web/search}/tools/ai-sdk.d.ts +2 -2
  166. package/dist/{websearch → web/search}/tools/ai-sdk.js +3 -3
  167. package/dist/web/search/tools/ai-sdk.js.map +1 -0
  168. package/dist/{websearch → web/search}/tools/pi.d.ts +3 -3
  169. package/dist/{websearch → web/search}/tools/pi.js +2 -2
  170. package/dist/web/search/tools/pi.js.map +1 -0
  171. package/dist/{websearch → web/search}/tools/tanstack-ai.d.ts +2 -2
  172. package/dist/{websearch → web/search}/tools/tanstack-ai.js +3 -3
  173. package/dist/web/search/tools/tanstack-ai.js.map +1 -0
  174. package/dist/websockets/index.d.ts +2 -2
  175. package/dist/websockets/index.js +1 -1
  176. package/dist/{websockets-CmENGb-Z.js → websockets-C3zy8YR0.js} +3 -5
  177. package/dist/websockets-C3zy8YR0.js.map +1 -0
  178. package/dist/workflow-types.d.ts +1 -1
  179. package/dist/workflows.d.ts +1 -1
  180. package/dist/workflows.js +1 -1
  181. package/docs/browse-the-web.md +26 -1
  182. package/docs/fetch-the-web.md +276 -0
  183. package/docs/harnesses/pi.md +25 -0
  184. package/docs/index.md +99 -76
  185. package/docs/lifecycle.md +2 -3
  186. package/docs/mcp-client.md +1 -1
  187. package/docs/mcp-servers.md +1 -1
  188. package/docs/models-pi-ai.md +11 -0
  189. package/docs/models.md +45 -3
  190. package/docs/queue.md +2 -3
  191. package/docs/scheduling.md +2 -6
  192. package/docs/search-the-web.md +2 -0
  193. package/package.json +52 -27
  194. package/dist/ai-fm7xx1BK.js +0 -312
  195. package/dist/ai-fm7xx1BK.js.map +0 -1
  196. package/dist/ai-sdk-OoGkFy3s.js.map +0 -1
  197. package/dist/browser/ai-sdk.js.map +0 -1
  198. package/dist/browser/index.js.map +0 -1
  199. package/dist/browser/tanstack-ai.js.map +0 -1
  200. package/dist/browser-tool-CBqs6hqa.js.map +0 -1
  201. package/dist/capability-B4WbF81e.js.map +0 -1
  202. package/dist/client-1tEQ1Oqz.js.map +0 -1
  203. package/dist/connector-58XDGvc3.js.map +0 -1
  204. package/dist/handler-stateless-VvrWSAVA.js.map +0 -1
  205. package/dist/images-Ce9SCu3X.js.map +0 -1
  206. package/dist/input-schema-DNrpTu49.js.map +0 -1
  207. package/dist/lifecycle-CFu6OV03.js.map +0 -1
  208. package/dist/scheduler-DZ3xQfeK.js.map +0 -1
  209. package/dist/settings-C45hDliX.js.map +0 -1
  210. package/dist/src-DgCbZtIR.js.map +0 -1
  211. package/dist/store-vgcPYo8K.js.map +0 -1
  212. package/dist/tool-3PA8xjB_.js.map +0 -1
  213. package/dist/websearch/tools/ai-sdk.js.map +0 -1
  214. package/dist/websearch/tools/pi.js.map +0 -1
  215. package/dist/websearch/tools/tanstack-ai.js.map +0 -1
  216. package/dist/websockets-CmENGb-Z.js.map +0 -1
@@ -0,0 +1,21 @@
1
+ //#region src/web/abortable.ts
2
+ /**
3
+ * Shared by the `web_search` and `web_fetch` tools. Internal — not an entry
4
+ * point.
5
+ */
6
+ /** Settle with `promise`, or reject with the signal's reason once it aborts. */
7
+ function abortable(promise, signal) {
8
+ if (!signal) return promise;
9
+ signal.throwIfAborted();
10
+ return new Promise((resolve, reject) => {
11
+ const onAbort = () => reject(signal.reason);
12
+ signal.addEventListener("abort", onAbort, { once: true });
13
+ promise.then(resolve, reject).finally(() => {
14
+ signal.removeEventListener("abort", onAbort);
15
+ });
16
+ });
17
+ }
18
+ //#endregion
19
+ export { abortable as t };
20
+
21
+ //# sourceMappingURL=abortable-C1SpfVoi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abortable-C1SpfVoi.js","names":[],"sources":["../src/web/abortable.ts"],"sourcesContent":["/**\n * Shared by the `web_search` and `web_fetch` tools. Internal — not an entry\n * point.\n */\n\n/** Settle with `promise`, or reject with the signal's reason once it aborts. */\nexport function abortable<T>(\n promise: Promise<T>,\n signal?: AbortSignal\n): Promise<T> {\n if (!signal) return promise;\n signal.throwIfAborted();\n return new Promise<T>((resolve, reject) => {\n const onAbort = () => reject(signal.reason);\n signal.addEventListener(\"abort\", onAbort, { once: true });\n promise.then(resolve, reject).finally(() => {\n signal.removeEventListener(\"abort\", onAbort);\n });\n });\n}\n"],"mappings":";;;;;;AAMA,SAAgB,UACd,SACA,QACY;CACZ,IAAI,CAAC,QAAQ,OAAO;CACpB,OAAO,eAAe;CACtB,OAAO,IAAI,SAAY,SAAS,WAAW;EACzC,MAAM,gBAAgB,OAAO,OAAO,MAAM;EAC1C,OAAO,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;EACxD,QAAQ,KAAK,SAAS,MAAM,CAAC,CAAC,cAAc;GAC1C,OAAO,oBAAoB,SAAS,OAAO;EAC7C,CAAC;CACH,CAAC;AACH"}
@@ -8,13 +8,13 @@ import {
8
8
  u as LifecycleRouteAddress,
9
9
  v as LifecycleJobOutcome,
10
10
  x as Connection
11
- } from "./capability-runner-O5VbQzqg.js";
11
+ } from "./capability-runner-BiVUtjqC.js";
12
12
  import { t as RetryOptions } from "./retries-CV6AkXmQ.js";
13
13
  import {
14
14
  r as LifecycleRouteEnvelope,
15
15
  t as Lifecycle
16
- } from "./durable-object-lifecycle-DRqp475_.js";
17
- import { n as CurrentAgentContext } from "./current-agent-C07C5o5Y.js";
16
+ } from "./durable-object-lifecycle-DOI_bzCH.js";
17
+ import { n as CurrentAgentContext } from "./current-agent-CKgT5d1O.js";
18
18
  import { t as AgentEmail } from "./internal_context-BlxFEWfn.js";
19
19
  import { r as EmailResolver, s as SendEmailOptions } from "./email-7TatiTnl.js";
20
20
  import {
@@ -41,10 +41,10 @@ import {
41
41
  i as Schedule,
42
42
  o as ScheduleOptions,
43
43
  t as Scheduler
44
- } from "./scheduler-CrFCnv_J.js";
44
+ } from "./scheduler-BCLESHSC.js";
45
45
  import { i as QueueItem } from "./types-BA4anrjI.js";
46
- import { l as TaskHandlers, r as Tasks } from "./tasks-PtlB4Uyn.js";
47
- import { t as State } from "./index-D0A5tbWu.js";
46
+ import { l as TaskHandlers, r as Tasks } from "./tasks-E89KdwkS.js";
47
+ import { t as State } from "./index-BEL3ZV-s.js";
48
48
  import { t as CallableMetadata } from "./callable-decorator-DP__HhBA.js";
49
49
  import { AsyncLocalStorage } from "node:async_hooks";
50
50
  import {
@@ -1320,6 +1320,17 @@ declare abstract class McpAgent<
1320
1320
  abstract init(): Promise<void>;
1321
1321
  setInitializeRequest(initializeRequest: JSONRPCMessage$1): Promise<void>;
1322
1322
  getInitializeRequest(): Promise<JSONRPCMessage$1 | undefined>;
1323
+ /**
1324
+ * End a streamable HTTP session (`DELETE`). Teardown is deferred to the
1325
+ * agent's alarm (#1625), so the stored initialize request is cleared too:
1326
+ * every route treats a session without one as unknown, which makes requests
1327
+ * carrying the terminated session ID get 404 as the spec requires. Teardown
1328
+ * is scheduled first, so a failure part-way leaves a session the client can
1329
+ * `DELETE` again rather than one that is never cleaned up.
1330
+ *
1331
+ * @internal
1332
+ */
1333
+ _cf_terminateSession(): Promise<void>;
1323
1334
  /**
1324
1335
  * Storage key prefix for the `streamId -> requestIds` mapping used
1325
1336
  * to support POST stream resumption across WebSocket reconnects.
@@ -2763,8 +2774,7 @@ type MCPServerFilter = {
2763
2774
  };
2764
2775
  /**
2765
2776
  * A Durable Object capability that persists and aggregates MCP client
2766
- * connections. Installing it directly on a Lifecycle (outside `agent.mcp`)
2767
- * is experimental: that capability surface may change before stabilizing.
2777
+ * connections. Install it on any Lifecycle, or use `agent.mcp` on an Agent.
2768
2778
  */
2769
2779
  declare class MCPClientManager extends LifecycleCapability {
2770
2780
  private readonly _name;
@@ -4521,8 +4531,6 @@ declare class Agent<
4521
4531
  > extends DurableObject<Env> {
4522
4532
  /**
4523
4533
  * Runtime lifecycle and reusable durable capabilities for this Agent.
4524
- *
4525
- * @experimental The API surface may change before stabilizing.
4526
4534
  */
4527
4535
  readonly lifecycle: Lifecycle<Env, Props>;
4528
4536
  /**
@@ -4664,10 +4672,8 @@ declare class Agent<
4664
4672
  private _ParentClass;
4665
4673
  /**
4666
4674
  * Durable scheduling capability installed into this Agent's Lifecycle.
4667
- *
4668
- * @experimental The API surface may change before stabilizing. Agent's
4669
- * schedule()/scheduleEvery()/getScheduleById()/listSchedules()/
4670
- * cancelSchedule() methods are the stable surface.
4675
+ * Agent's schedule()/scheduleEvery()/getScheduleById()/listSchedules()/
4676
+ * cancelSchedule() methods delegate to it.
4671
4677
  */
4672
4678
  readonly scheduler: Scheduler;
4673
4679
  /**
@@ -7040,4 +7046,4 @@ export {
7040
7046
  AgentToolEventState as z,
7041
7047
  MCPClientOAuthResult as zt
7042
7048
  };
7043
- //# sourceMappingURL=agent-routing-Bhdbvf7s.d.ts.map
7049
+ //# sourceMappingURL=agent-routing-BMvWTFEp.d.ts.map
@@ -4,7 +4,7 @@ import {
4
4
  n as AgentOptions,
5
5
  r as RoutingRetryOptions,
6
6
  t as AgentGetOptions
7
- } from "./agent-routing-Bhdbvf7s.js";
7
+ } from "./agent-routing-BMvWTFEp.js";
8
8
  export {
9
9
  AgentGetOptions,
10
10
  AgentOptions,
@@ -27,7 +27,7 @@ import {
27
27
  rt as RunAgentToolResult,
28
28
  tt as DetachedRunAgentToolResult,
29
29
  z as AgentToolEventState
30
- } from "./agent-routing-Bhdbvf7s.js";
30
+ } from "./agent-routing-BMvWTFEp.js";
31
31
  export {
32
32
  AGENT_TOOL_MILESTONE_PART,
33
33
  AGENT_TOOL_PROGRESS_PART,
@@ -4,7 +4,7 @@ import {
4
4
  W as AgentToolProgress,
5
5
  Z as AgentToolStoredChunk,
6
6
  z as AgentToolEventState
7
- } from "./agent-routing-Bhdbvf7s.js";
7
+ } from "./agent-routing-BMvWTFEp.js";
8
8
 
9
9
  //#region src/chat/agent-tools.d.ts
10
10
  type AgentToolProgressEmitResult = "emitted" | "coalesced" | "inactive";
@@ -144,4 +144,4 @@ export {
144
144
  interceptAgentToolBroadcast as s,
145
145
  AgentToolBroadcastHooks as t
146
146
  };
147
- //# sourceMappingURL=agent-tools-bJZwBMfq.d.ts.map
147
+ //# sourceMappingURL=agent-tools-ohoewW-B.d.ts.map
@@ -20,7 +20,7 @@ import {
20
20
  rt as RunAgentToolResult,
21
21
  tt as DetachedRunAgentToolResult,
22
22
  z as AgentToolEventState
23
- } from "./agent-routing-Bhdbvf7s.js";
23
+ } from "./agent-routing-BMvWTFEp.js";
24
24
  import { FlexibleSchema, InferSchema, Tool } from "ai";
25
25
 
26
26
  //#region src/agent-tools.d.ts
@@ -0,0 +1,239 @@
1
+ import {
2
+ d as BrowserBinding,
3
+ n as BrowserSessionStore
4
+ } from "./session-store-DoPY12xM.js";
5
+ import {
6
+ l as QuickActionBinding,
7
+ r as BrowserConnectorSessionOptions,
8
+ t as BrowserConnector,
9
+ u as QuickActionCommonOptions
10
+ } from "./connector-DEXzVoaY.js";
11
+ import { ToolSet } from "ai";
12
+ import { CodemodeRuntimeHandle } from "@cloudflare/codemode";
13
+
14
+ //#region src/browser/ai.d.ts
15
+ interface CreateBrowserToolsOptions {
16
+ /**
17
+ * Durable Object state. The codemode runtime that backs the browser tool
18
+ * lives in a facet of this DO, and browser session ids are stored in its
19
+ * storage — so the tool must be created from inside a Durable Object
20
+ * (e.g. an Agent).
21
+ *
22
+ * Optional: when omitted, it is resolved from the current Agent via
23
+ * `getCurrentAgent()`, so inside an Agent method you can just pass `browser`
24
+ * and `loader`. Pass it explicitly outside an Agent context.
25
+ *
26
+ * The worker must export the `CodemodeRuntime` class (the
27
+ * `@cloudflare/codemode/vite` plugin does this automatically, or add
28
+ * `export { CodemodeRuntime } from "@cloudflare/codemode"` to your entry).
29
+ */
30
+ ctx?: DurableObjectState;
31
+ /**
32
+ * WorkerLoader binding for sandboxed code execution.
33
+ *
34
+ * Requires `"worker_loaders": [{ "binding": "LOADER" }]` in wrangler.jsonc.
35
+ */
36
+ loader: WorkerLoader;
37
+ /**
38
+ * Browser Rendering binding (Fetcher).
39
+ *
40
+ * This is the primary way to connect — works both locally in
41
+ * `wrangler dev` and when deployed to Cloudflare Workers.
42
+ *
43
+ * Requires `"browser": { "binding": "BROWSER" }` in wrangler.jsonc.
44
+ */
45
+ browser?: BrowserBinding;
46
+ /**
47
+ * Optional CDP base URL override (e.g. `http://localhost:9222`).
48
+ *
49
+ * Use when connecting to a manually managed Chrome instance or
50
+ * a remote CDP endpoint behind a tunnel.
51
+ */
52
+ cdpUrl?: string;
53
+ /**
54
+ * Headers to send with CDP URL discovery requests.
55
+ * Useful when the CDP endpoint requires authentication
56
+ * (e.g. Cloudflare Access headers).
57
+ */
58
+ cdpHeaders?: Record<string, string>;
59
+ /**
60
+ * Browser session lifecycle (binding-backed only). Defaults to one fresh
61
+ * session per codemode execution (`one-shot`).
62
+ */
63
+ session?: BrowserConnectorSessionOptions;
64
+ /**
65
+ * Durable store for Browser Run session ids. Defaults to a
66
+ * {@link DurableBrowserSessionStore} over `ctx.storage`.
67
+ */
68
+ store?: BrowserSessionStore;
69
+ /**
70
+ * Sandbox execution timeout in milliseconds. Defaults to 30000 (30s).
71
+ * Also used as the per-CDP-command timeout.
72
+ */
73
+ timeout?: number;
74
+ /**
75
+ * Codemode runtime name — the durable identity of the tool's executions
76
+ * and snippets. Defaults to `"browser"`.
77
+ */
78
+ name?: string;
79
+ /**
80
+ * Also expose stateless {@link createQuickActionTools | Quick Action} tools
81
+ * (`browser_markdown`, `browser_extract`, …) alongside the durable
82
+ * `browser_execute` tool.
83
+ *
84
+ * Enabled by default whenever a Browser Run `browser` binding is available
85
+ * (they share it), except when `session.browser` selects Kitesurf because
86
+ * the binding RPC cannot select that engine. Pass `true` or an object to
87
+ * explicitly add Chromium Quick Actions alongside Kitesurf, or `false` to
88
+ * disable them. The Quick Action binding defaults to `browser`; override it via
89
+ * `quickActions.browser`. When only `cdpUrl` is set (no binding), the
90
+ * defaults are skipped silently — pass `quickActions: { browser }` to force
91
+ * them.
92
+ */
93
+ quickActions?:
94
+ | boolean
95
+ | {
96
+ browser?: QuickActionBinding;
97
+ actions?: QuickActionToolName[];
98
+ maxChars?: number;
99
+ options?: QuickActionCommonOptions;
100
+ };
101
+ }
102
+ /**
103
+ * The browser tool's moving parts, for hosts that need more than the tools:
104
+ *
105
+ * - `runtime` — the codemode runtime handle (approve/reject paused runs,
106
+ * `expirePaused`, audit via `executions()`, snippets).
107
+ * - `connector` — host-side session helpers: `sessionInfo()`,
108
+ * `closeSession()`, and `sweep()` for a recurring cleanup task.
109
+ * - `tools` — what `createBrowserTools` returns.
110
+ */
111
+ interface BrowserRuntime {
112
+ runtime: CodemodeRuntimeHandle;
113
+ connector: BrowserConnector;
114
+ tools: ToolSet;
115
+ }
116
+ /**
117
+ * Create the browser codemode runtime: the `browser_execute` tool plus the
118
+ * runtime handle and connector for host-side wiring (approvals, session info,
119
+ * sweeps).
120
+ *
121
+ * @example
122
+ * ```ts
123
+ * export class MyAgent extends Agent<Env> {
124
+ * get browser() {
125
+ * return createBrowserRuntime({
126
+ * ctx: this.ctx,
127
+ * browser: this.env.BROWSER,
128
+ * loader: this.env.LOADER,
129
+ * session: { mode: "dynamic" }
130
+ * });
131
+ * }
132
+ *
133
+ * @callable()
134
+ * async closeBrowserSession() {
135
+ * await this.browser.connector.closeSession();
136
+ * }
137
+ * }
138
+ * ```
139
+ */
140
+ declare function createBrowserRuntime(
141
+ options: CreateBrowserToolsOptions
142
+ ): BrowserRuntime;
143
+ /**
144
+ * Create AI SDK tools for browser automation via CDP code mode.
145
+ *
146
+ * Returns a `ToolSet` with a single durable `browser_execute` tool backed by
147
+ * a codemode runtime: the model writes TypeScript against the `cdp` connector
148
+ * (`cdp.send`, `cdp.attachToTarget`, `cdp.spec`, …), executions are recorded
149
+ * for abort-and-replay, and browser sessions survive pauses.
150
+ *
151
+ * @example
152
+ * ```ts
153
+ * import { createBrowserTools } from "agents/browser/ai";
154
+ * import { generateText } from "ai";
155
+ *
156
+ * // inside a Durable Object / Agent:
157
+ * const browserTools = createBrowserTools({
158
+ * ctx: this.ctx,
159
+ * browser: this.env.BROWSER,
160
+ * loader: this.env.LOADER,
161
+ * });
162
+ *
163
+ * const result = await generateText({
164
+ * model,
165
+ * tools: { ...browserTools, ...otherTools },
166
+ * messages,
167
+ * });
168
+ * ```
169
+ */
170
+ declare function createBrowserTools(
171
+ options: CreateBrowserToolsOptions
172
+ ): ToolSet;
173
+ /** A Quick Action exposed as an AI SDK tool. */
174
+ type QuickActionToolName =
175
+ | "markdown"
176
+ | "extract"
177
+ | "links"
178
+ | "scrape"
179
+ | "content";
180
+ interface CreateQuickActionToolsOptions {
181
+ /**
182
+ * Browser Run binding with Quick Actions support (`env.BROWSER`). Requires a
183
+ * Worker `compatibility_date` of `2026-03-24`+ and `remote: true` for local
184
+ * `wrangler dev`.
185
+ */
186
+ browser: QuickActionBinding;
187
+ /**
188
+ * Which tools to expose. Defaults to the text-returning, model-friendly set
189
+ * (`markdown`, `extract`, `links`, `scrape`). `content` (raw HTML) is opt-in
190
+ * since it is large and rarely what a model wants.
191
+ */
192
+ actions?: QuickActionToolName[];
193
+ /**
194
+ * Bound every result to roughly this many characters before returning it to
195
+ * the model, to protect the context window, preserving each result's shape:
196
+ * text (markdown/content) is truncated to a string, oversized arrays
197
+ * (links/scrape) are trimmed but stay arrays, and only an opaque oversized
198
+ * object degrades to a truncated-preview summary. Set to `0` to disable.
199
+ * Defaults to 50000.
200
+ */
201
+ maxChars?: number;
202
+ /**
203
+ * Common Browser Run options merged into every request — e.g. `cookies`,
204
+ * `authenticate`, or `setExtraHTTPHeaders` for authenticated pages, and
205
+ * `gotoOptions` / `viewport` for JavaScript-heavy pages. The model only ever
206
+ * supplies the page (`url`/`html`) and action-specific fields; these
207
+ * host-supplied options are never exposed to it.
208
+ */
209
+ options?: QuickActionCommonOptions;
210
+ }
211
+ /**
212
+ * Create AI SDK tools for Browser Run [Quick Actions](https://developers.cloudflare.com/browser-run/quick-actions/):
213
+ * stateless one-shot browsing (read a page as Markdown, extract structured
214
+ * data with AI, list links, scrape elements). Unlike `createBrowserTools`,
215
+ * these need only the `browser` binding — no Durable Object, loader, or
216
+ * sandbox — so they work from any Worker.
217
+ *
218
+ * @example
219
+ * ```ts
220
+ * import { createQuickActionTools } from "agents/browser/ai";
221
+ *
222
+ * const tools = createQuickActionTools({ browser: this.env.BROWSER });
223
+ * const result = await generateText({ model, tools, messages });
224
+ * ```
225
+ */
226
+ declare function createQuickActionTools(
227
+ options: CreateQuickActionToolsOptions
228
+ ): ToolSet;
229
+ //#endregion
230
+ export {
231
+ createBrowserRuntime as a,
232
+ QuickActionToolName as i,
233
+ CreateBrowserToolsOptions as n,
234
+ createBrowserTools as o,
235
+ CreateQuickActionToolsOptions as r,
236
+ createQuickActionTools as s,
237
+ BrowserRuntime as t
238
+ };
239
+ //# sourceMappingURL=ai-ahruGw7e.d.ts.map
@@ -1,7 +1,7 @@
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 { a as parseModelOptions, i as mergeModelOptions, n as PROVIDER_OPTIONS_KEY, o as resolveOptions, r as gatewayLayerOf } from "./settings-C45hDliX.js";
4
- import { S as isRetryableStatus, _ as isGatewayErrorEnvelope, a as normalizeChatCompletion, b as classifyStatus, f as createTransport$1, g as headersToObject, h as errorFromResponse$1, i as normalizeChatCompletionsStream, m as errorFromGatewayEnvelope$1, n as imageMediaTypeOf, o as prepareChatCompletionsRequest, p as definedHeaders, r as sseDataStream, t as buildImageInput, u as requireGatewayProvider, v as unwrapEnvelope$1, x as isAbortError, y as CloudflareAIError$1 } from "./images-Ce9SCu3X.js";
3
+ import { C as isDynamicRouteId, S as isRetryableStatus, _ as isGatewayErrorEnvelope, a as normalizeChatCompletion, b as classifyStatus, f as createTransport$1, g as headersToObject, h as errorFromResponse$1, i as normalizeChatCompletionsStream, m as errorFromGatewayEnvelope$1, n as imageMediaTypeOf, o as prepareChatCompletionsRequest, p as definedHeaders, r as sseDataStream, t as buildImageInput, u as requireGatewayProvider, v as unwrapEnvelope$1, w as isRunPathLanguageModelId, x as isAbortError, y as CloudflareAIError$1 } from "./images-C4hiIexM.js";
4
+ import { a as parseModelOptions, i as mergeModelOptions, n as PROVIDER_OPTIONS_KEY, o as resolveOptions, r as gatewayLayerOf } from "./settings-BjAiPd6Z.js";
5
5
  import { APICallError, TooManyEmbeddingValuesForCallError } from "@ai-sdk/provider";
6
6
  //#region src/models/ai-sdk/errors.ts
7
7
  /** The provider packages worth naming when someone passes a vendor id. */
@@ -24,10 +24,10 @@ const VENDOR_PACKAGES = {
24
24
  * this provider knows; a third-party model is a model object built by that
25
25
  * vendor's own provider package.
26
26
  */
27
- function notAWorkersAIId(modelId) {
27
+ function notAWorkersAIId(modelId, accepts = "workers-ai") {
28
28
  const vendor = VENDOR_PACKAGES[modelId.split("/")[0] ?? ""];
29
29
  const advice = vendor === void 0 ? "install its AI SDK provider package and pass the model object, e.g. ai(anthropic(\"claude-opus-4-8\"))" : `install ${vendor.package} and pass the model object: ai(${vendor.call})`;
30
- return /* @__PURE__ */ new TypeError(`"${modelId}" is not a Workers AI model id. Workers AI ids start with "@cf/", and they are the only ids this provider takes: a third-party model goes through its own provider and is only routed by AI Gateway — ${advice}.`);
30
+ return /* @__PURE__ */ new TypeError(`"${modelId}" is not a Workers AI model id. Workers AI ids start with "@cf/"${accepts === "workers-ai-or-route" ? " (and AI Gateway dynamic routes with \"dynamic/\")" : ""}, and they are the only ids this provider takes: a third-party model goes through its own provider and is only routed by AI Gateway — ${advice}.`);
31
31
  }
32
32
  /**
33
33
  * The gate every string that names a model passes through, wherever it enters
@@ -36,10 +36,20 @@ function notAWorkersAIId(modelId) {
36
36
  * the line that supplied the id rather than at the request it would have made.
37
37
  */
38
38
  function requireWorkersAIId(modelId) {
39
+ if (isDynamicRouteId(modelId)) throw new TypeError(`"${modelId}" is an AI Gateway dynamic route, and a dynamic route is a chat model: it answers in the chat-completions shape. Use it as ai("${modelId}"); the embedding, image, speech, transcription and reranking methods take "@cf/" ids.`);
39
40
  if (!modelId.startsWith("@cf/")) throw notAWorkersAIId(modelId);
40
41
  return modelId;
41
42
  }
42
43
  /**
44
+ * The gate for ids that name a language model: a Workers AI id, or an AI
45
+ * Gateway dynamic route. Both run on `env.AI.run`; any other string is a
46
+ * vendor id, which is never a string here.
47
+ */
48
+ function requireLanguageModelId(modelId) {
49
+ if (!isRunPathLanguageModelId(modelId)) throw notAWorkersAIId(modelId, "workers-ai-or-route");
50
+ return modelId;
51
+ }
52
+ /**
43
53
  * Error thrown for every failed Cloudflare AI call, whether it came back as a
44
54
  * non-2xx `Response` or as a thrown Workers AI binding error.
45
55
  *
@@ -117,6 +127,19 @@ function fallbackLegs(model, call) {
117
127
  * @experimental This surface is experimental and may change.
118
128
  */
119
129
  function parseCallOptions(providerOptions) {
130
+ const options = parseModelOptions(providerOptions?.[PROVIDER_OPTIONS_KEY]);
131
+ for (const leg of options?.fallback ?? []) requireLanguageModelId(leg);
132
+ return options;
133
+ }
134
+ /**
135
+ * Per-call options for the modality models — embedding, image, speech,
136
+ * transcription, reranking. The same bag as {@link parseCallOptions}, but a
137
+ * fallback leg must be a Workers AI id: a dynamic route answers in the
138
+ * chat-completions shape, which none of those models can read.
139
+ *
140
+ * @experimental This surface is experimental and may change.
141
+ */
142
+ function parseModalityCallOptions(providerOptions) {
120
143
  const options = parseModelOptions(providerOptions?.[PROVIDER_OPTIONS_KEY]);
121
144
  for (const leg of options?.fallback ?? []) requireWorkersAIId(leg);
122
145
  return options;
@@ -489,7 +512,7 @@ var CloudflareEmbeddingModel = class {
489
512
  provider: this.provider,
490
513
  values: options.values
491
514
  });
492
- const resolved = resolveOptions(_classPrivateFieldGet2(_config$3, this).providerGateway, _classPrivateFieldGet2(_options$3, this), parseCallOptions(options.providerOptions));
515
+ const resolved = resolveOptions(_classPrivateFieldGet2(_config$3, this).providerGateway, _classPrivateFieldGet2(_options$3, this), parseModalityCallOptions(options.providerOptions));
493
516
  const input = { text: options.values };
494
517
  const transport = _classPrivateFieldGet2(_config$3, this).transport;
495
518
  return withFallback(this.modelId, resolved.fallback, transport.url, async (modelId) => {
@@ -1394,7 +1417,7 @@ function _withFallback$1(call, runLeg, runSelf, mode = "generate") {
1394
1417
  model: this.modelId,
1395
1418
  run: () => runSelf(this.modelId)
1396
1419
  }, ...legs.map((leg) => typeof leg === "string" ? {
1397
- model: requireWorkersAIId(leg),
1420
+ model: requireLanguageModelId(leg),
1398
1421
  run: () => runSelf(leg)
1399
1422
  } : {
1400
1423
  model: leg.modelId,
@@ -1465,12 +1488,13 @@ function universalQuery(body) {
1465
1488
  }
1466
1489
  }
1467
1490
  /**
1468
- * The vendor's own request headers, minus the credential the gateway supplies
1469
- * itself and the length of a body we are about to re-serialize.
1491
+ * The vendor's own request headers, minus the length of a body we are about
1492
+ * to re-serialize, and minus the vendor's credential unless the model asked
1493
+ * for it to be forwarded.
1470
1494
  */
1471
- function forwardedHeaders(init, input, route) {
1495
+ function forwardedHeaders(init, input, route, vendorKey) {
1472
1496
  const source = init?.headers ?? (input instanceof Request ? input.headers : void 0);
1473
- const dropped = /* @__PURE__ */ new Set([...route.authHeaders, "content-length"]);
1497
+ const dropped = /* @__PURE__ */ new Set([...vendorKey === "request" ? [] : route.authHeaders, "content-length"]);
1474
1498
  const headers = {};
1475
1499
  new Headers(source).forEach((value, key) => {
1476
1500
  if (!dropped.has(key.toLowerCase())) headers[key] = value;
@@ -1504,7 +1528,7 @@ function routedFetch(context) {
1504
1528
  endpoint: route.endpoint,
1505
1529
  ...Object.keys(extraHeaders).length > 0 ? { extraHeaders } : {},
1506
1530
  gateway: resolved.gateway,
1507
- headers: forwardedHeaders(init, input, route),
1531
+ headers: forwardedHeaders(init, input, route, context.vendorKey),
1508
1532
  provider: route.provider,
1509
1533
  query,
1510
1534
  signal: init?.signal ?? (input instanceof Request ? input.signal : void 0) ?? context.signal
@@ -1709,7 +1733,8 @@ function _route(resolved, capture, signal) {
1709
1733
  capture,
1710
1734
  config: _classPrivateFieldGet2(_config$1, this),
1711
1735
  resolved,
1712
- signal
1736
+ signal,
1737
+ vendorKey: _classPrivateFieldGet2(_options$1, this)?.vendorKey ?? "gateway"
1713
1738
  }));
1714
1739
  }
1715
1740
  function _resolve(call) {
@@ -1752,7 +1777,7 @@ function _withFallback(call, runLeg, run, mode = "generate") {
1752
1777
  }
1753
1778
  /** A Workers AI leg, carrying this model's gateway options but no chain. */
1754
1779
  function _workersAI(modelId) {
1755
- return new CloudflareLanguageModel(requireWorkersAIId(modelId), {
1780
+ return new CloudflareLanguageModel(requireLanguageModelId(modelId), {
1756
1781
  ..._classPrivateFieldGet2(_options$1, this),
1757
1782
  fallback: void 0
1758
1783
  }, _classPrivateFieldGet2(_config$1, this));
@@ -1779,7 +1804,8 @@ function routed(model, options, config) {
1779
1804
  capture,
1780
1805
  config,
1781
1806
  resolved,
1782
- signal: call?.abortSignal
1807
+ signal: call?.abortSignal,
1808
+ vendorKey: options?.vendorKey ?? "gateway"
1783
1809
  }));
1784
1810
  const result = await Reflect.get(clone, property).call(clone, upstream);
1785
1811
  if (result === null || typeof result !== "object") return result;
@@ -1843,7 +1869,7 @@ var CloudflareModalityModel = class {
1843
1869
  * as JSON or as raw bytes depending on what the model sent back.
1844
1870
  */
1845
1871
  async send(call) {
1846
- const resolved = resolveOptions(_classPrivateFieldGet2(_config, this).providerGateway, _classPrivateFieldGet2(_options, this), parseCallOptions(call.providerOptions));
1872
+ const resolved = resolveOptions(_classPrivateFieldGet2(_config, this).providerGateway, _classPrivateFieldGet2(_options, this), parseModalityCallOptions(call.providerOptions));
1847
1873
  const transport = _classPrivateFieldGet2(_config, this).transport;
1848
1874
  return withFallback(this.modelId, resolved.fallback, transport.url, async (modelId) => {
1849
1875
  const request = call.build(modelId);
@@ -2397,7 +2423,7 @@ function createAI(settings) {
2397
2423
  const inherited = gatewayLayerOf(options);
2398
2424
  return {
2399
2425
  ...options,
2400
- fallback: options.fallback.map((leg) => typeof leg === "string" ? requireWorkersAIId(leg) : languageModel(leg, inherited))
2426
+ fallback: options.fallback.map((leg) => typeof leg === "string" ? requireLanguageModelId(leg) : languageModel(leg, inherited))
2401
2427
  };
2402
2428
  };
2403
2429
  function languageModel(model, options) {
@@ -2413,7 +2439,7 @@ function createAI(settings) {
2413
2439
  }
2414
2440
  return new GatewayLanguageModel(model, resolved, config);
2415
2441
  }
2416
- return new CloudflareLanguageModel(requireWorkersAIId(model), resolved, config);
2442
+ return new CloudflareLanguageModel(requireLanguageModelId(model), resolved, config);
2417
2443
  }
2418
2444
  const embedding = (modelId, options) => new CloudflareEmbeddingModel(modelId, options, config);
2419
2445
  const image = (modelId, options) => new CloudflareImageModel(modelId, options, config);
@@ -2441,4 +2467,4 @@ function createAI(settings) {
2441
2467
  //#endregion
2442
2468
  export { GatewayLanguageModel as n, CloudflareAIError as r, createAI as t };
2443
2469
 
2444
- //# sourceMappingURL=ai-sdk-OoGkFy3s.js.map
2470
+ //# sourceMappingURL=ai-sdk-C2iTAwUd.js.map