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
@@ -1,2 +1,2 @@
1
- import { n as getMcpAuthContext, t as createStatelessMcpHandler } from "../../handler-stateless-VvrWSAVA.js";
1
+ import { n as getMcpAuthContext, t as createStatelessMcpHandler } from "../../handler-stateless-Bly_nSH3.js";
2
2
  export { createStatelessMcpHandler as createMcpHandler, getMcpAuthContext };
@@ -1,23 +1,24 @@
1
1
  import {
2
2
  c as CloudflareRerankingModelId,
3
- d as KnownImageModelId,
4
- f as KnownSpeechModelId,
3
+ d as DynamicRouteId,
4
+ f as KnownImageModelId,
5
5
  i as ProviderGatewaySettings,
6
6
  l as CloudflareSpeechModelId,
7
+ m as WorkersAIModelId,
7
8
  n as GatewayOptions,
8
9
  o as CloudflareEmbeddingModelId,
9
- p as WorkersAIModelId,
10
+ p as KnownSpeechModelId,
10
11
  r as ModelOptions$1,
11
12
  s as CloudflareImageModelId,
12
13
  t as AISettings,
13
14
  u as CloudflareTranscriptionModelId
14
- } from "../../settings-NgGwF7Qt.js";
15
+ } from "../../settings-DnD__xuE.js";
15
16
  import {
16
17
  a as CloudflareAIError$1,
17
18
  i as CloudflareAIAttempt,
18
19
  o as CloudflareAIErrorCode,
19
20
  t as Transport
20
- } from "../../transport-k2mFrtL8.js";
21
+ } from "../../transport-DCyarnwm.js";
21
22
  import {
22
23
  APICallError,
23
24
  EmbeddingModelV4,
@@ -33,12 +34,13 @@ import {
33
34
 
34
35
  //#region src/models/ai-sdk/settings.d.ts
35
36
  /**
36
- * One leg of a fallback chain: a Workers AI id, or any AI SDK language model
37
- * — including one this provider has already wrapped for the gateway.
37
+ * One leg of a fallback chain: a Workers AI id, an AI Gateway dynamic route,
38
+ * or any AI SDK language model — including one this provider has already
39
+ * wrapped for the gateway.
38
40
  *
39
41
  * @experimental This surface is experimental and may change.
40
42
  */
41
- type FallbackLeg = WorkersAIModelId | LanguageModelV4;
43
+ type FallbackLeg = WorkersAIModelId | DynamicRouteId | LanguageModelV4;
42
44
  /**
43
45
  * Per-model and per-call options.
44
46
  *
@@ -50,17 +52,34 @@ type FallbackLeg = WorkersAIModelId | LanguageModelV4;
50
52
  * @experimental This surface is experimental and may change.
51
53
  */
52
54
  type ModelOptions = ModelOptions$1<FallbackLeg>;
55
+ /**
56
+ * Which key authenticates a vendor model routed through AI Gateway.
57
+ *
58
+ * @experimental This surface is experimental and may change.
59
+ */
60
+ interface VendorKeyOptions {
61
+ /**
62
+ * `"gateway"` (the default) strips the key the vendor's provider put on the
63
+ * request, so the gateway supplies one: unified billing, or a BYOK key
64
+ * stored on the gateway. `"request"` forwards that key to the vendor, for a
65
+ * key you hold yourself, e.g. `createAnthropic({ apiKey: env.ANTHROPIC_KEY })`.
66
+ *
67
+ * It belongs to the model it is set on, so a fallback leg keeps its own.
68
+ */
69
+ vendorKey?: "gateway" | "request";
70
+ }
53
71
  /**
54
72
  * The options accepted next to a model object — `ai(anthropic("…"), { … })`.
55
- * The same shape as {@link ModelOptions}; the Workers-AI-only knobs
56
- * (`reasoningEffort`, `chatTemplateKwargs`) are ignored with a warning.
73
+ * {@link ModelOptions} plus {@link VendorKeyOptions.vendorKey}; the
74
+ * Workers-AI-only knobs (`reasoningEffort`, `chatTemplateKwargs`) are ignored
75
+ * with a warning.
57
76
  *
58
77
  * @experimental This surface is experimental and may change.
59
78
  */
60
- type GatewayModelOptions = ModelOptions;
79
+ type GatewayModelOptions = ModelOptions & VendorKeyOptions;
61
80
  /**
62
- * The options `ai.routed()` takes: the gateway options, `headers` and
63
- * `sessionAffinity`.
81
+ * The options `ai.routed()` takes: the gateway options, `headers`,
82
+ * `sessionAffinity` and `vendorKey`.
64
83
  *
65
84
  * A routed embedding, image, speech or transcription model is the vendor's
66
85
  * own, and only its transport is ours — there is no chain to fall back through
@@ -74,7 +93,8 @@ type GatewayModelOptions = ModelOptions;
74
93
  type RoutedModelOptions = Omit<
75
94
  ModelOptions,
76
95
  "fallback" | "reasoningEffort" | "chatTemplateKwargs"
77
- >;
96
+ > &
97
+ VendorKeyOptions;
78
98
  /**
79
99
  * The options the Workers-AI-only methods take — `ai.embedding`, `ai.image`,
80
100
  * `ai.speech`, `ai.transcription`, `ai.reranking`.
@@ -184,7 +204,7 @@ declare class GatewayLanguageModel implements LanguageModelV4 {
184
204
  readonly specificationVersion: "v4";
185
205
  constructor(
186
206
  model: LanguageModelV4,
187
- options: ModelOptions | undefined,
207
+ options: GatewayModelOptions | undefined,
188
208
  config: LanguageModelConfig
189
209
  );
190
210
  /** The vendor's own provider name — `anthropic.messages`, `openai.responses`. */
@@ -219,8 +239,13 @@ declare class GatewayLanguageModel implements LanguageModelV4 {
219
239
  interface AI {
220
240
  /** A Workers AI model. Third-party ids are not ids here — pass the model. */
221
241
  (modelId: WorkersAIModelId, options?: ModelOptions): LanguageModelV4;
242
+ /**
243
+ * An AI Gateway dynamic route, `dynamic/<route>`: the route configured on
244
+ * the gateway picks the model, and it answers like a chat model.
245
+ */
246
+ (route: DynamicRouteId, options?: ModelOptions): LanguageModelV4;
222
247
  /** Any AI SDK v4 language model, routed through AI Gateway. */
223
- (model: LanguageModelV4, options?: ModelOptions): LanguageModelV4;
248
+ (model: LanguageModelV4, options?: GatewayModelOptions): LanguageModelV4;
224
249
  /** The AI SDK provider specification this implements. */
225
250
  readonly specificationVersion: "v4";
226
251
  /** Same as calling the provider directly. */
@@ -228,9 +253,10 @@ interface AI {
228
253
  modelId: WorkersAIModelId,
229
254
  options?: ModelOptions
230
255
  ): LanguageModelV4;
256
+ languageModel(route: DynamicRouteId, options?: ModelOptions): LanguageModelV4;
231
257
  languageModel(
232
258
  model: LanguageModelV4,
233
- options?: ModelOptions
259
+ options?: GatewayModelOptions
234
260
  ): LanguageModelV4;
235
261
  /** The `ProviderV4` shape: a registry resolves models by string alone. */
236
262
  languageModel(modelId: string, options?: ModelOptions): LanguageModelV4;
@@ -339,6 +365,7 @@ export {
339
365
  type CloudflareRerankingModelId,
340
366
  type CloudflareSpeechModelId,
341
367
  type CloudflareTranscriptionModelId,
368
+ type DynamicRouteId,
342
369
  type FallbackLeg,
343
370
  GatewayLanguageModel,
344
371
  type GatewayModelOptions,
@@ -349,6 +376,7 @@ export {
349
376
  type ModelOptions,
350
377
  type ProviderGatewaySettings,
351
378
  type RoutedModelOptions,
379
+ type VendorKeyOptions,
352
380
  type WorkersAIModelId,
353
381
  createAI
354
382
  };
@@ -1,2 +1,2 @@
1
- import { n as GatewayLanguageModel, r as CloudflareAIError, t as createAI } from "../../ai-sdk-OoGkFy3s.js";
1
+ import { n as GatewayLanguageModel, r as CloudflareAIError, t as createAI } from "../../ai-sdk-C2iTAwUd.js";
2
2
  export { CloudflareAIError, GatewayLanguageModel, createAI };
@@ -1,9 +1,9 @@
1
1
  import {
2
+ m as WorkersAIModelId,
2
3
  n as GatewayOptions,
3
- p as WorkersAIModelId,
4
4
  r as ModelOptions,
5
5
  t as AISettings
6
- } from "../../settings-NgGwF7Qt.js";
6
+ } from "../../settings-DnD__xuE.js";
7
7
  import { Plugin } from "@opencode/plugin";
8
8
 
9
9
  //#region src/models/opencode/index.d.ts
@@ -1,4 +1,4 @@
1
- import { t as createAI$1 } from "../../ai-sdk-OoGkFy3s.js";
1
+ import { t as createAI$1 } from "../../ai-sdk-C2iTAwUd.js";
2
2
  import { Model, Provider } from "@opencode/plugin";
3
3
  //#region src/models/opencode/language-v3.ts
4
4
  /**
@@ -1,17 +1,18 @@
1
1
  import {
2
+ d as DynamicRouteId,
3
+ m as WorkersAIModelId,
2
4
  n as GatewayOptions,
3
5
  o as CloudflareEmbeddingModelId,
4
- p as WorkersAIModelId,
5
6
  r as ModelOptions,
6
7
  t as AISettings
7
- } from "../../settings-NgGwF7Qt.js";
8
+ } from "../../settings-DnD__xuE.js";
8
9
  import {
9
10
  a as CloudflareAIError,
10
11
  i as CloudflareAIAttempt,
11
12
  n as GATEWAY_PROVIDER_NAMES,
12
13
  o as CloudflareAIErrorCode,
13
14
  r as GatewayProviderName
14
- } from "../../transport-k2mFrtL8.js";
15
+ } from "../../transport-DCyarnwm.js";
15
16
  import {
16
17
  Api,
17
18
  AssistantImages,
@@ -201,6 +202,8 @@ type StreamFn = (
201
202
  interface AI {
202
203
  /** A Workers AI model: Cloudflare's own catalog, on the run path. */
203
204
  (modelId: WorkersAIModelId, options?: PiModelOptions): CloudflareModel;
205
+ /** An AI Gateway dynamic route, `dynamic/<route>`, on the Workers AI wire. */
206
+ (route: DynamicRouteId, options?: PiModelOptions): CloudflareModel;
204
207
  /** Any pi-ai model, routed through AI Gateway with its metadata intact. */
205
208
  <TApi extends Api>(model: Model<TApi>, options?: PiModelOptions): Model<TApi>;
206
209
  /**
@@ -210,6 +213,7 @@ interface AI {
210
213
  (target: string | Model<Api>, options?: PiModelOptions): RoutedModel;
211
214
  /** Same as calling the provider directly. */
212
215
  model(modelId: WorkersAIModelId, options?: PiModelOptions): CloudflareModel;
216
+ model(route: DynamicRouteId, options?: PiModelOptions): CloudflareModel;
213
217
  model<TApi extends Api>(
214
218
  model: Model<TApi>,
215
219
  options?: PiModelOptions
@@ -297,6 +301,7 @@ export {
297
301
  type CloudflareEmbeddingModelId,
298
302
  type CloudflareImagesModel,
299
303
  type CloudflareModel,
304
+ type DynamicRouteId,
300
305
  FALLBACK_DIAGNOSTIC,
301
306
  type FallbackAttempt,
302
307
  GATEWAY_PROVIDER_NAMES,
@@ -1,5 +1,5 @@
1
- import { i as mergeModelOptions, o as resolveOptions, r as gatewayLayerOf } from "../../settings-C45hDliX.js";
2
- import { _ as isGatewayErrorEnvelope, a as normalizeChatCompletion, c as gatewaySlugForBaseUrl, d as resolveGatewayProvider, f as createTransport, g as headersToObject, h as errorFromResponse, i as normalizeChatCompletionsStream, l as isGatewayShapedUrl, m as errorFromGatewayEnvelope, n as imageMediaTypeOf, o as prepareChatCompletionsRequest, r as sseDataStream, s as GATEWAY_PROVIDER_NAMES, t as buildImageInput, v as unwrapEnvelope, x as isAbortError, y as CloudflareAIError } from "../../images-Ce9SCu3X.js";
1
+ import { _ as isGatewayErrorEnvelope, a as normalizeChatCompletion, c as gatewaySlugForBaseUrl, d as resolveGatewayProvider, f as createTransport, g as headersToObject, h as errorFromResponse, i as normalizeChatCompletionsStream, l as isGatewayShapedUrl, m as errorFromGatewayEnvelope, n as imageMediaTypeOf, o as prepareChatCompletionsRequest, r as sseDataStream, s as GATEWAY_PROVIDER_NAMES, t as buildImageInput, v as unwrapEnvelope, w as isRunPathLanguageModelId, x as isAbortError, y as CloudflareAIError } from "../../images-C4hiIexM.js";
2
+ import { i as mergeModelOptions, o as resolveOptions, r as gatewayLayerOf } from "../../settings-BjAiPd6Z.js";
3
3
  import { calculateCost, clampThinkingLevel, createAssistantMessageEventStream, createProvider, getCurrentTools, normalizeContext, parseStreamingJson } from "@earendil-works/pi-ai";
4
4
  import { CLOUDFLARE_AI_GATEWAY_MODELS } from "@earendil-works/pi-ai/providers/cloudflare-ai-gateway.models";
5
5
  import { CLOUDFLARE_WORKERS_AI_MODELS } from "@earendil-works/pi-ai/providers/cloudflare-workers-ai.models";
@@ -1646,7 +1646,7 @@ function legOptions(options) {
1646
1646
  }
1647
1647
  /** A leg may be given as a Workers AI id or as a model of any kind. */
1648
1648
  function legModel(leg, options) {
1649
- if (typeof leg === "string") return leg.startsWith("@cf/") ? buildWorkersAIModel(leg, options) : buildGatewayModel(leg, options);
1649
+ if (typeof leg === "string") return isRunPathLanguageModelId(leg) ? buildWorkersAIModel(leg, options) : buildGatewayModel(leg, options);
1650
1650
  const own = optionsOf(leg);
1651
1651
  const inherited = gatewayLayerOf(options);
1652
1652
  return withOptions(leg, mergeModelOptions(own, Object.keys(inherited).length > 0 ? inherited : void 0));
@@ -1724,16 +1724,16 @@ const VENDOR_HINTS = {
1724
1724
  */
1725
1725
  function unroutableString(specifier) {
1726
1726
  const hint = VENDOR_HINTS[specifier.split("/")[0] ?? ""];
1727
- return /* @__PURE__ */ new TypeError(`ai("${specifier}") is not a model this provider knows. Workers AI ids start with "@cf/". A third-party model comes from its own pi-ai registry: ai(getBuiltinModel(${hint === void 0 ? "\"<provider>\"" : `"${hint}"`}, "<model id>")) from "@earendil-works/pi-ai/providers/all", or any Model object you built yourself.`);
1727
+ return /* @__PURE__ */ new TypeError(`ai("${specifier}") is not a model this provider knows. Workers AI ids start with "@cf/", AI Gateway dynamic routes with "dynamic/". A third-party model comes from its own pi-ai registry: ai(getBuiltinModel(${hint === void 0 ? "\"<provider>\"" : `"${hint}"`}, "<model id>")) from "@earendil-works/pi-ai/providers/all", or any Model object you built yourself.`);
1728
1728
  }
1729
1729
  function buildModel(target, options) {
1730
1730
  for (const leg of options?.fallback ?? []) {
1731
- if (typeof leg !== "string" || leg.startsWith("@cf/")) continue;
1731
+ if (typeof leg !== "string" || isRunPathLanguageModelId(leg)) continue;
1732
1732
  if (!leg.includes("/")) throw unroutableString(leg);
1733
1733
  buildGatewayModel(leg, void 0);
1734
1734
  }
1735
1735
  if (typeof target !== "string") return withOptions(target, options);
1736
- if (target.startsWith("@cf/")) return buildWorkersAIModel(target, options);
1736
+ if (isRunPathLanguageModelId(target)) return buildWorkersAIModel(target, options);
1737
1737
  if (!target.includes("/")) throw unroutableString(target);
1738
1738
  return buildGatewayModel(target, options);
1739
1739
  }