agents 0.26.0 → 0.27.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 (233) hide show
  1. package/README.md +8 -9
  2. package/dist/{agent-routing-0DR0Tk2v.d.ts → agent-routing-Bhdbvf7s.d.ts} +13 -8
  3. package/dist/agent-routing.d.ts +1 -1
  4. package/dist/agent-tool-types.d.ts +1 -1
  5. package/dist/{agent-tools-YrATZJu2.d.ts → agent-tools-bJZwBMfq.d.ts} +2 -2
  6. package/dist/agent-tools.d.ts +1 -1
  7. package/dist/ai-sdk-OoGkFy3s.js +2444 -0
  8. package/dist/ai-sdk-OoGkFy3s.js.map +1 -0
  9. package/dist/apply-chunks-1FheRb9W.js +99 -0
  10. package/dist/apply-chunks-1FheRb9W.js.map +1 -0
  11. package/dist/broadcast-state-CEyI4uAK.js +69 -0
  12. package/dist/broadcast-state-CEyI4uAK.js.map +1 -0
  13. package/dist/browser/ai-sdk.d.ts +1 -1
  14. package/dist/browser/ai-sdk.js +2 -2
  15. package/dist/browser/ai-sdk.js.map +1 -1
  16. package/dist/browser/index.d.ts +1 -1
  17. package/dist/browser/tanstack-ai.d.ts +1 -1
  18. package/dist/browser/tanstack-ai.js +1 -1
  19. package/dist/{browser-DE3d-RLk.d.ts → browser-tmkcAAI3.d.ts} +2 -2
  20. package/dist/{browser-tool-DuNdlwZ9.d.ts → browser-tool-Bn-nzJQI.d.ts} +3 -3
  21. package/dist/{browser-tool-CQ10e6Kj.js → browser-tool-CBqs6hqa.js} +58 -18
  22. package/dist/browser-tool-CBqs6hqa.js.map +1 -0
  23. package/dist/capability-B4WbF81e.js.map +1 -1
  24. package/dist/{capability-runner-DBAnGr6L.d.ts → capability-runner-O5VbQzqg.d.ts} +9 -1
  25. package/dist/channel-Bak_6zDP.d.ts +333 -0
  26. package/dist/chat/index.d.ts +11 -9
  27. package/dist/chat/index.js +5 -194
  28. package/dist/chat/index.js.map +1 -1
  29. package/dist/chat/react.d.ts +2 -4
  30. package/dist/chat/react.js +3 -1
  31. package/dist/chat/react.js.map +1 -1
  32. package/dist/chat-sdk/index.d.ts +1 -1
  33. package/dist/chat-sdk/index.js +1 -1
  34. package/dist/cli.js +144 -0
  35. package/dist/{client-fyQrLGkD.js → client-1tEQ1Oqz.js} +27 -2
  36. package/dist/{client-fyQrLGkD.js.map → client-1tEQ1Oqz.js.map} +1 -1
  37. package/dist/{client-je3koD9Z.d.ts → client-DS3Dz9l0.d.ts} +2 -2
  38. package/dist/client-tools-aIBO0Fk7.d.ts +53 -0
  39. package/dist/client.d.ts +1 -1
  40. package/dist/conversations-DH0ut_8n.d.ts +192 -0
  41. package/dist/{current-agent-vAk_5JMt.d.ts → current-agent-C07C5o5Y.d.ts} +3 -3
  42. package/dist/daemon-core-Buubj-y1.js +481 -0
  43. package/dist/daemon-core-Buubj-y1.js.map +1 -0
  44. package/dist/daemon-core-CbohVPAu.d.ts +132 -0
  45. package/dist/{do-oauth-client-provider-Tmf1vgKz.d.ts → do-oauth-client-provider-DfsUcpc3.d.ts} +7 -1
  46. package/dist/{durable-object-lifecycle-HhgOMWq9.d.ts → durable-object-lifecycle-DRqp475_.d.ts} +2 -2
  47. package/dist/{channels/email.d.ts → experimental/channels/email/index.d.ts} +25 -12
  48. package/dist/{channels/email.js → experimental/channels/email/index.js} +13 -35
  49. package/dist/experimental/channels/email/index.js.map +1 -0
  50. package/dist/experimental/channels/index.d.ts +270 -0
  51. package/dist/experimental/channels/index.js +1186 -0
  52. package/dist/experimental/channels/index.js.map +1 -0
  53. package/dist/{channels/slack.d.ts → experimental/channels/slack/index.d.ts} +19 -9
  54. package/dist/experimental/channels/slack/index.js +267 -0
  55. package/dist/experimental/channels/slack/index.js.map +1 -0
  56. package/dist/{channels/telegram.d.ts → experimental/channels/telegram/index.d.ts} +19 -9
  57. package/dist/experimental/channels/telegram/index.js +198 -0
  58. package/dist/experimental/channels/telegram/index.js.map +1 -0
  59. package/dist/experimental/channels/web/ai-sdk.d.ts +55 -0
  60. package/dist/experimental/channels/web/ai-sdk.js +266 -0
  61. package/dist/experimental/channels/web/ai-sdk.js.map +1 -0
  62. package/dist/experimental/channels/web/client.d.ts +97 -0
  63. package/dist/experimental/channels/web/client.js +349 -0
  64. package/dist/experimental/channels/web/client.js.map +1 -0
  65. package/dist/experimental/channels/web/index.d.ts +189 -0
  66. package/dist/experimental/channels/web/index.js +332 -0
  67. package/dist/experimental/channels/web/index.js.map +1 -0
  68. package/dist/gateway-BDC07gYO.d.ts +100 -0
  69. package/dist/handle-zAzh0UW2.d.ts +460 -0
  70. package/dist/harness/ai-sdk/index.d.ts +175 -0
  71. package/dist/harness/ai-sdk/index.js +605 -0
  72. package/dist/harness/ai-sdk/index.js.map +1 -0
  73. package/dist/harness/container/daemon/index.d.ts +76 -0
  74. package/dist/harness/container/daemon/index.js +3 -0
  75. package/dist/harness/container/index.d.ts +740 -0
  76. package/dist/harness/container/index.js +2152 -0
  77. package/dist/harness/container/index.js.map +1 -0
  78. package/dist/harness/container/runtime/index.d.ts +144 -0
  79. package/dist/harness/container/runtime/index.js +1082 -0
  80. package/dist/harness/container/runtime/index.js.map +1 -0
  81. package/dist/harness/opencode/index.d.ts +369 -0
  82. package/dist/harness/opencode/index.js +1072 -0
  83. package/dist/harness/opencode/index.js.map +1 -0
  84. package/dist/harness/pi/index.d.ts +2 -1
  85. package/dist/harness/store/index.d.ts +24 -0
  86. package/dist/harness/store/index.js +2 -0
  87. package/dist/harness/think/index.d.ts +821 -0
  88. package/dist/harness/think/index.js +2529 -0
  89. package/dist/harness/think/index.js.map +1 -0
  90. package/dist/harness-B6B9S3rb.d.ts +203 -0
  91. package/dist/{images-iiTDSyRu.js → images-Ce9SCu3X.js} +2 -248
  92. package/dist/images-Ce9SCu3X.js.map +1 -0
  93. package/dist/{index-BreL0YrQ.d.ts → index-D0A5tbWu.d.ts} +2 -2
  94. package/dist/index-Ib_4dwOo.d.ts +200 -0
  95. package/dist/index.d.ts +5 -5
  96. package/dist/index.js +2 -2
  97. package/dist/ingress-EFbrS547.js +9 -0
  98. package/dist/ingress-EFbrS547.js.map +1 -0
  99. package/dist/input-schema-DNrpTu49.js +23 -0
  100. package/dist/input-schema-DNrpTu49.js.map +1 -0
  101. package/dist/internal-kmw70xwR.js +46 -0
  102. package/dist/internal-kmw70xwR.js.map +1 -0
  103. package/dist/internal_context.d.ts +1 -1
  104. package/dist/lifecycle/index.d.ts +3 -3
  105. package/dist/mcp/client/do-oauth-client-provider.d.ts +1 -1
  106. package/dist/mcp/client/do-oauth-client-provider.js +9 -0
  107. package/dist/mcp/client/do-oauth-client-provider.js.map +1 -1
  108. package/dist/mcp/client/index.d.ts +1 -1
  109. package/dist/mcp/client/index.js +1 -1
  110. package/dist/mcp/client/x402.d.ts +35 -4
  111. package/dist/mcp/client/x402.js +24 -3
  112. package/dist/mcp/client/x402.js.map +1 -1
  113. package/dist/mcp/index.d.ts +1 -1
  114. package/dist/mcp/index.js +2 -2
  115. package/dist/models/ai-sdk/index.d.ts +16 -14
  116. package/dist/models/ai-sdk/index.js +1 -2442
  117. package/dist/models/opencode/index.d.ts +65 -0
  118. package/dist/models/opencode/index.js +285 -0
  119. package/dist/models/opencode/index.js.map +1 -0
  120. package/dist/models/pi-ai/index.d.ts +9 -7
  121. package/dist/models/pi-ai/index.js +2 -1
  122. package/dist/models/pi-ai/index.js.map +1 -1
  123. package/dist/options-pwTNq9z6.d.ts +134 -0
  124. package/dist/protocol-BEgrJYC5.d.ts +331 -0
  125. package/dist/protocol-CukuI73M.d.ts +386 -0
  126. package/dist/protocol-cOklVBBD.js +227 -0
  127. package/dist/protocol-cOklVBBD.js.map +1 -0
  128. package/dist/{protocol-kHsr-f0X.js → protocol-eXeJxhgu.js} +2 -67
  129. package/dist/protocol-eXeJxhgu.js.map +1 -0
  130. package/dist/protocol-y2sSY584.js +148 -0
  131. package/dist/protocol-y2sSY584.js.map +1 -0
  132. package/dist/queue/index.d.ts +1 -1
  133. package/dist/react.d.ts +2 -2
  134. package/dist/routing/index.d.ts +2 -2
  135. package/dist/{scheduler-RdACNXDP.d.ts → scheduler-CrFCnv_J.d.ts} +2 -2
  136. package/dist/schedules/index.d.ts +1 -1
  137. package/dist/serializable.d.ts +1 -1
  138. package/dist/sessions/index.d.ts +11 -434
  139. package/dist/sessions/index.js +1 -2271
  140. package/dist/sessions-B9pNuxdT.js +2272 -0
  141. package/dist/sessions-B9pNuxdT.js.map +1 -0
  142. package/dist/settings-C45hDliX.js +253 -0
  143. package/dist/settings-C45hDliX.js.map +1 -0
  144. package/dist/{transport-PfFnt-Ld.d.ts → settings-NgGwF7Qt.d.ts} +14 -208
  145. package/dist/{src-BZeu-SCD.js → src-DgCbZtIR.js} +4 -4
  146. package/dist/{src-BZeu-SCD.js.map → src-DgCbZtIR.js.map} +1 -1
  147. package/dist/stall-watchdog-BpRF2uwG.js +195 -0
  148. package/dist/stall-watchdog-BpRF2uwG.js.map +1 -0
  149. package/dist/state/index.d.ts +1 -1
  150. package/dist/store-DLeqKuj3.d.ts +310 -0
  151. package/dist/store-vgcPYo8K.js +432 -0
  152. package/dist/store-vgcPYo8K.js.map +1 -0
  153. package/dist/streams/index.d.ts +1 -1
  154. package/dist/streams/index.js +1 -1
  155. package/dist/{streams-DW-UCOUc.js → streams-CITClVer.js} +16 -3
  156. package/dist/streams-CITClVer.js.map +1 -0
  157. package/dist/{streams-Cmkj9QfW.d.ts → streams-fbG61qM8.d.ts} +2 -2
  158. package/dist/sub-routing.d.ts +1 -1
  159. package/dist/tasks/index.d.ts +1 -1
  160. package/dist/tasks/index.js +1 -1
  161. package/dist/{tasks-68DESxf0.js → tasks-CkTZNaV1.js} +2 -1
  162. package/dist/tasks-CkTZNaV1.js.map +1 -0
  163. package/dist/{tasks-9YxYtByh.d.ts → tasks-PtlB4Uyn.d.ts} +2 -2
  164. package/dist/tool-3PA8xjB_.js +421 -0
  165. package/dist/tool-3PA8xjB_.js.map +1 -0
  166. package/dist/tool-BPJEbwaX.d.ts +278 -0
  167. package/dist/transport-k2mFrtL8.d.ts +200 -0
  168. package/dist/turns-DCV3ycDl.js +317 -0
  169. package/dist/turns-DCV3ycDl.js.map +1 -0
  170. package/dist/voice/client.js +1 -1
  171. package/dist/voice/index.d.ts +2 -2
  172. package/dist/voice/index.js +1 -1
  173. package/dist/websearch/index.d.ts +58 -0
  174. package/dist/websearch/index.js +2 -0
  175. package/dist/websearch/tools/ai-sdk.d.ts +77 -0
  176. package/dist/websearch/tools/ai-sdk.js +46 -0
  177. package/dist/websearch/tools/ai-sdk.js.map +1 -0
  178. package/dist/websearch/tools/pi.d.ts +82 -0
  179. package/dist/websearch/tools/pi.js +89 -0
  180. package/dist/websearch/tools/pi.js.map +1 -0
  181. package/dist/websearch/tools/tanstack-ai.d.ts +71 -0
  182. package/dist/websearch/tools/tanstack-ai.js +46 -0
  183. package/dist/websearch/tools/tanstack-ai.js.map +1 -0
  184. package/dist/websockets/index.d.ts +12 -296
  185. package/dist/websockets/index.js +1 -1
  186. package/dist/{websockets-Ci-LZFHH.js → websockets-CmENGb-Z.js} +18 -4
  187. package/dist/websockets-CmENGb-Z.js.map +1 -0
  188. package/dist/{wire-types-CrjKvDyi.d.ts → wire-types-Cv0iwjk5.d.ts} +3 -51
  189. package/dist/workflow-types.d.ts +1 -1
  190. package/dist/workflows.d.ts +1 -1
  191. package/dist/workflows.js +1 -1
  192. package/docs/browse-the-web.md +3 -0
  193. package/docs/harnesses/think.md +215 -0
  194. package/docs/index.md +2 -1
  195. package/docs/lifecycle.md +40 -0
  196. package/docs/search-the-web.md +133 -0
  197. package/package.json +117 -38
  198. package/dist/browser-tool-CQ10e6Kj.js.map +0 -1
  199. package/dist/channel-Bnm4S7T2.d.ts +0 -491
  200. package/dist/channels/ai-sdk.d.ts +0 -46
  201. package/dist/channels/ai-sdk.js +0 -120
  202. package/dist/channels/ai-sdk.js.map +0 -1
  203. package/dist/channels/email.js.map +0 -1
  204. package/dist/channels/index.d.ts +0 -233
  205. package/dist/channels/index.js +0 -608
  206. package/dist/channels/index.js.map +0 -1
  207. package/dist/channels/slack.js +0 -614
  208. package/dist/channels/slack.js.map +0 -1
  209. package/dist/channels/tanstack-ai.d.ts +0 -39
  210. package/dist/channels/tanstack-ai.js +0 -17
  211. package/dist/channels/tanstack-ai.js.map +0 -1
  212. package/dist/channels/telegram.js +0 -427
  213. package/dist/channels/telegram.js.map +0 -1
  214. package/dist/channels/voice.d.ts +0 -45
  215. package/dist/channels/voice.js +0 -122
  216. package/dist/channels/voice.js.map +0 -1
  217. package/dist/images-iiTDSyRu.js.map +0 -1
  218. package/dist/index-BB0kqhIz.d.ts +0 -101
  219. package/dist/ingress-BfetZbMO.js +0 -83
  220. package/dist/ingress-BfetZbMO.js.map +0 -1
  221. package/dist/internal-CYlgHl1l.js +0 -59
  222. package/dist/internal-CYlgHl1l.js.map +0 -1
  223. package/dist/models/ai-sdk/index.js.map +0 -1
  224. package/dist/protocol-kHsr-f0X.js.map +0 -1
  225. package/dist/sessions/index.js.map +0 -1
  226. package/dist/streams-DW-UCOUc.js.map +0 -1
  227. package/dist/surface-bZZJqBka.js +0 -17
  228. package/dist/surface-bZZJqBka.js.map +0 -1
  229. package/dist/tasks-68DESxf0.js.map +0 -1
  230. package/dist/tool-schema-CBjGPrsQ.js +0 -31
  231. package/dist/tool-schema-CBjGPrsQ.js.map +0 -1
  232. package/dist/websockets-Ci-LZFHH.js.map +0 -1
  233. package/docs/channels.md +0 -323
@@ -0,0 +1,65 @@
1
+ import {
2
+ n as GatewayOptions,
3
+ p as WorkersAIModelId,
4
+ r as ModelOptions,
5
+ t as AISettings
6
+ } from "../../settings-NgGwF7Qt.js";
7
+ import { Plugin } from "@opencode/plugin";
8
+
9
+ //#region src/models/opencode/index.d.ts
10
+ /** The OpenCode provider id `createAI`'s plugin registers. */
11
+ declare const CLOUDFLARE_PROVIDER_ID = "cloudflare";
12
+ /**
13
+ * A model as OpenCode references one: pass it to `OpenCodeHarness`'s
14
+ * `defaults.model`, `session.setModel`, or OpenCode's `sessions.switchModel`.
15
+ */
16
+ type OpenCodeModel = {
17
+ readonly providerID: string;
18
+ readonly id: string;
19
+ };
20
+ /** How OpenCode budgets a model's context. */
21
+ type OpenCodeModelLimit = {
22
+ /** Context window, in tokens. Default 128_000. */ readonly context: number /** Most tokens OpenCode asks the model to generate. Default 8_192. */;
23
+ readonly output: number;
24
+ };
25
+ /** Options for one model: `agents/models/ai-sdk`'s, plus OpenCode's limit. */
26
+ type OpenCodeModelOptions = ModelOptions & {
27
+ readonly limit?: OpenCodeModelLimit;
28
+ };
29
+ /**
30
+ * The provider `createAI` returns. Call it with a Workers AI id to register
31
+ * the model with the plugin and get OpenCode's reference to it.
32
+ */
33
+ interface AI {
34
+ /** A Workers AI model, registered with the plugin. */
35
+ (modelId: WorkersAIModelId, options?: OpenCodeModelOptions): OpenCodeModel;
36
+ /** Same as calling the provider directly. */
37
+ model(
38
+ modelId: WorkersAIModelId,
39
+ options?: OpenCodeModelOptions
40
+ ): OpenCodeModel;
41
+ /** The OpenCode plugin. Pass it in `OpenCodeWorkerd.create({ plugins })`. */
42
+ readonly plugin: Plugin.Plugin;
43
+ }
44
+ /**
45
+ * Create the Workers AI provider for OpenCode.
46
+ *
47
+ * @param settings - The `AI` binding and gateway defaults, as for
48
+ * `agents/models/ai-sdk`.
49
+ * @returns The provider: call it with model ids; register `plugin`.
50
+ */
51
+ declare function createAI(settings: AISettings): AI;
52
+ //#endregion
53
+ export {
54
+ AI,
55
+ type AISettings,
56
+ CLOUDFLARE_PROVIDER_ID,
57
+ type GatewayOptions,
58
+ type ModelOptions,
59
+ OpenCodeModel,
60
+ OpenCodeModelLimit,
61
+ OpenCodeModelOptions,
62
+ type WorkersAIModelId,
63
+ createAI
64
+ };
65
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,285 @@
1
+ import { t as createAI$1 } from "../../ai-sdk-OoGkFy3s.js";
2
+ import { Model, Provider } from "@opencode/plugin";
3
+ //#region src/models/opencode/language-v3.ts
4
+ /**
5
+ * OpenCode loads AI SDK models through the `LanguageModelV3` contract;
6
+ * `agents/models/ai-sdk` implements `LanguageModelV4`. The two differ only in
7
+ * how files are carried (V4 wraps file data in a tagged union and folds the
8
+ * image variants into one `file` part) and in the parts V4 added (`custom`,
9
+ * `reasoning-file`), which V3 has no slot for and are dropped. Text,
10
+ * reasoning, tool calls, usage and finish reasons are the same shape.
11
+ */
12
+ function asLanguageModelV3(model) {
13
+ return {
14
+ specificationVersion: "v3",
15
+ provider: model.provider,
16
+ modelId: model.modelId,
17
+ supportedUrls: model.supportedUrls,
18
+ async doGenerate(options) {
19
+ const result = await model.doGenerate(callOptions(options));
20
+ return {
21
+ ...result,
22
+ warnings: result.warnings.map(warning),
23
+ content: result.content.flatMap((part) => {
24
+ const converted = content(part);
25
+ return converted === void 0 ? [] : [converted];
26
+ })
27
+ };
28
+ },
29
+ async doStream(options) {
30
+ const result = await model.doStream(callOptions(options));
31
+ return {
32
+ ...result,
33
+ stream: result.stream.pipeThrough(new TransformStream({ transform(part, controller) {
34
+ const converted = streamPart(part);
35
+ if (converted !== void 0) controller.enqueue(converted);
36
+ } }))
37
+ };
38
+ }
39
+ };
40
+ }
41
+ function callOptions(options) {
42
+ return {
43
+ ...options,
44
+ prompt: options.prompt.map(message)
45
+ };
46
+ }
47
+ function message(input) {
48
+ switch (input.role) {
49
+ case "system": return input;
50
+ case "user": return {
51
+ ...input,
52
+ content: input.content.map((part) => part.type === "file" ? filePart(part) : part)
53
+ };
54
+ case "assistant": return {
55
+ ...input,
56
+ content: input.content.map((part) => {
57
+ if (part.type === "file") return filePart(part);
58
+ if (part.type === "tool-result") return {
59
+ ...part,
60
+ output: toolOutput(part.output)
61
+ };
62
+ return part;
63
+ })
64
+ };
65
+ case "tool": return {
66
+ ...input,
67
+ content: input.content.map((part) => part.type === "tool-result" ? {
68
+ ...part,
69
+ output: toolOutput(part.output)
70
+ } : part)
71
+ };
72
+ }
73
+ }
74
+ function filePart(part) {
75
+ return {
76
+ ...part,
77
+ data: fileData(part.data)
78
+ };
79
+ }
80
+ function fileData(data) {
81
+ return data instanceof URL ? {
82
+ type: "url",
83
+ url: data
84
+ } : {
85
+ type: "data",
86
+ data
87
+ };
88
+ }
89
+ function toolOutput(output) {
90
+ if (output.type !== "content") return output;
91
+ return {
92
+ ...output,
93
+ value: output.value.map((item) => {
94
+ switch (item.type) {
95
+ case "text": return item;
96
+ case "file-data":
97
+ case "image-data": return {
98
+ type: "file",
99
+ data: {
100
+ type: "data",
101
+ data: item.data
102
+ },
103
+ mediaType: item.mediaType,
104
+ ..."filename" in item && item.filename !== void 0 ? { filename: item.filename } : {},
105
+ providerOptions: item.providerOptions
106
+ };
107
+ case "file-url":
108
+ case "image-url": return {
109
+ type: "file",
110
+ data: {
111
+ type: "url",
112
+ url: new URL(item.url)
113
+ },
114
+ mediaType: item.type === "image-url" ? "image/*" : "application/octet-stream",
115
+ providerOptions: item.providerOptions
116
+ };
117
+ case "file-id":
118
+ case "image-file-id": return {
119
+ type: "file",
120
+ data: {
121
+ type: "reference",
122
+ reference: typeof item.fileId === "string" ? { id: item.fileId } : item.fileId
123
+ },
124
+ mediaType: item.type === "image-file-id" ? "image/*" : "application/octet-stream",
125
+ providerOptions: item.providerOptions
126
+ };
127
+ case "custom": return {
128
+ type: "custom",
129
+ providerOptions: item.providerOptions
130
+ };
131
+ }
132
+ })
133
+ };
134
+ }
135
+ function content(part) {
136
+ switch (part.type) {
137
+ case "custom":
138
+ case "reasoning-file": return;
139
+ case "file": return generatedFile(part);
140
+ default: return part;
141
+ }
142
+ }
143
+ function streamPart(part) {
144
+ switch (part.type) {
145
+ case "custom":
146
+ case "reasoning-file": return;
147
+ case "file": return generatedFile(part);
148
+ case "stream-start": return {
149
+ ...part,
150
+ warnings: part.warnings.map(warning)
151
+ };
152
+ default: return part;
153
+ }
154
+ }
155
+ /** V4 added `deprecated` warnings; V3 reports them as `other`. */
156
+ function warning(input) {
157
+ return input.type === "deprecated" ? {
158
+ type: "other",
159
+ message: `${input.setting}: ${input.message}`
160
+ } : input;
161
+ }
162
+ function generatedFile(part) {
163
+ if (part.data.type !== "data") return void 0;
164
+ return {
165
+ type: "file",
166
+ mediaType: part.mediaType,
167
+ data: part.data.data,
168
+ ...part.providerMetadata === void 0 ? {} : { providerMetadata: part.providerMetadata }
169
+ };
170
+ }
171
+ //#endregion
172
+ //#region src/models/opencode/index.ts
173
+ /**
174
+ * `agents/models/opencode` — Workers AI as an OpenCode provider, with the
175
+ * same shape as `agents/models/ai-sdk` and `agents/models/pi-ai`.
176
+ *
177
+ * ```ts
178
+ * import { createAI } from "agents/models/opencode";
179
+ * import { OpenCodeWorkerd } from "@opencode/sdk/workerd";
180
+ *
181
+ * const ai = createAI({ binding: env.AI });
182
+ *
183
+ * const model = ai("@cf/moonshotai/kimi-k2.7-code"); // { providerID, id }
184
+ * await OpenCodeWorkerd.create({ storage, plugins: [ai.plugin] });
185
+ * ```
186
+ *
187
+ * `ai.plugin` is an OpenCode plugin. It adds a `cloudflare` provider whose
188
+ * models are the ids you have called `ai(id)` with, and answers OpenCode's
189
+ * AI SDK hook with `agents/models/ai-sdk`'s models, so requests go through
190
+ * the `AI` binding: no account id, API token, or HTTP route to Workers AI in
191
+ * your Worker, and nothing patched globally.
192
+ *
193
+ * @experimental The surface may change in any release.
194
+ *
195
+ * @module
196
+ */
197
+ /** The OpenCode provider id `createAI`'s plugin registers. */
198
+ const CLOUDFLARE_PROVIDER_ID = "cloudflare";
199
+ /**
200
+ * The AI SDK package OpenCode is told the provider uses. OpenCode builds an
201
+ * AI SDK model in two hook steps: `sdk` (load the package) and `language`
202
+ * (make the model). Its `sdk` step can only load packages it bundles; any
203
+ * other is handed to an npm installer that cannot run in workerd, and an
204
+ * external plugin's `sdk` hook runs after that installer. So the provider
205
+ * names `@ai-sdk/vercel`, which OpenCode bundles and loads in-process, and
206
+ * this plugin's `language` hook replaces the model it would make. The
207
+ * Vercel client is built but never called: its base URL does not resolve.
208
+ */
209
+ const CARRIER_PACKAGE = "aisdk:@ai-sdk/vercel";
210
+ const UNREACHABLE_BASE_URL = "https://workers-ai.binding.invalid/v1";
211
+ const DEFAULT_LIMIT = {
212
+ context: 128e3,
213
+ output: 8192
214
+ };
215
+ /**
216
+ * Create the Workers AI provider for OpenCode.
217
+ *
218
+ * @param settings - The `AI` binding and gateway defaults, as for
219
+ * `agents/models/ai-sdk`.
220
+ * @returns The provider: call it with model ids; register `plugin`.
221
+ */
222
+ function createAI(settings) {
223
+ const aiSdk = createAI$1(settings);
224
+ const models = /* @__PURE__ */ new Map();
225
+ /** One reload per OpenCode instance the plugin is set up in. */
226
+ const reloads = /* @__PURE__ */ new Set();
227
+ const providerID = Provider.ID.make(CLOUDFLARE_PROVIDER_ID);
228
+ const info = (id, options) => {
229
+ return {
230
+ ...Model.Info.default(providerID, Model.ID.make(id)),
231
+ package: CARRIER_PACKAGE,
232
+ limit: options?.limit ?? DEFAULT_LIMIT
233
+ };
234
+ };
235
+ const plugin = {
236
+ id: "agents.models.opencode",
237
+ async setup(ctx) {
238
+ const transform = await ctx.provider.transform((editor) => {
239
+ editor.add({
240
+ info: {
241
+ id: providerID,
242
+ name: "Cloudflare Workers AI",
243
+ activation: "enabled",
244
+ package: CARRIER_PACKAGE,
245
+ settings: {
246
+ baseURL: UNREACHABLE_BASE_URL,
247
+ apiKey: "binding"
248
+ }
249
+ },
250
+ models: [...models].map(([id, options]) => info(id, options))
251
+ });
252
+ });
253
+ const hook = await ctx.aisdk.hook("language", (event) => {
254
+ const id = event.model.modelID ?? event.model.id;
255
+ event.language = asLanguageModelV3(aiSdk.languageModel(id, models.get(id)));
256
+ }, { providerID });
257
+ const reload = () => ctx.provider.reload();
258
+ reloads.add(reload);
259
+ return async () => {
260
+ reloads.delete(reload);
261
+ await hook.dispose();
262
+ await transform.dispose();
263
+ };
264
+ }
265
+ };
266
+ const model = (modelId, options) => {
267
+ const changed = !models.has(modelId) || JSON.stringify(models.get(modelId)?.limit) !== JSON.stringify(options?.limit);
268
+ models.set(modelId, options);
269
+ if (changed) for (const reload of reloads) reload().catch((error) => {
270
+ console.warn("agents/models/opencode: provider reload failed", error);
271
+ });
272
+ return {
273
+ providerID: CLOUDFLARE_PROVIDER_ID,
274
+ id: modelId
275
+ };
276
+ };
277
+ return Object.assign(model, {
278
+ model,
279
+ plugin
280
+ });
281
+ }
282
+ //#endregion
283
+ export { CLOUDFLARE_PROVIDER_ID, createAI };
284
+
285
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["createAISDK"],"sources":["../../../src/models/opencode/language-v3.ts","../../../src/models/opencode/index.ts"],"sourcesContent":["import type {\n LanguageModelV3,\n LanguageModelV3CallOptions,\n LanguageModelV3Content,\n LanguageModelV3FilePart,\n LanguageModelV3Message,\n LanguageModelV3StreamPart,\n LanguageModelV3ToolResultOutput,\n LanguageModelV4,\n LanguageModelV4CallOptions,\n LanguageModelV4Content,\n LanguageModelV4FilePart,\n LanguageModelV4Message,\n LanguageModelV4StreamPart,\n LanguageModelV4ToolResultOutput,\n SharedV3Warning,\n SharedV4FileData,\n SharedV4Warning\n} from \"@ai-sdk/provider\";\n\n/**\n * OpenCode loads AI SDK models through the `LanguageModelV3` contract;\n * `agents/models/ai-sdk` implements `LanguageModelV4`. The two differ only in\n * how files are carried (V4 wraps file data in a tagged union and folds the\n * image variants into one `file` part) and in the parts V4 added (`custom`,\n * `reasoning-file`), which V3 has no slot for and are dropped. Text,\n * reasoning, tool calls, usage and finish reasons are the same shape.\n */\nexport function asLanguageModelV3(model: LanguageModelV4): LanguageModelV3 {\n return {\n specificationVersion: \"v3\",\n provider: model.provider,\n modelId: model.modelId,\n supportedUrls: model.supportedUrls,\n async doGenerate(options) {\n const result = await model.doGenerate(callOptions(options));\n return {\n ...result,\n warnings: result.warnings.map(warning),\n content: result.content.flatMap((part) => {\n const converted = content(part);\n return converted === undefined ? [] : [converted];\n })\n };\n },\n async doStream(options) {\n const result = await model.doStream(callOptions(options));\n return {\n ...result,\n stream: result.stream.pipeThrough(\n new TransformStream<\n LanguageModelV4StreamPart,\n LanguageModelV3StreamPart\n >({\n transform(part, controller) {\n const converted = streamPart(part);\n if (converted !== undefined) controller.enqueue(converted);\n }\n })\n )\n };\n }\n };\n}\n\nfunction callOptions(\n options: LanguageModelV3CallOptions\n): LanguageModelV4CallOptions {\n return { ...options, prompt: options.prompt.map(message) };\n}\n\nfunction message(input: LanguageModelV3Message): LanguageModelV4Message {\n switch (input.role) {\n case \"system\":\n return input;\n case \"user\":\n return {\n ...input,\n content: input.content.map((part) =>\n part.type === \"file\" ? filePart(part) : part\n )\n };\n case \"assistant\":\n return {\n ...input,\n content: input.content.map((part) => {\n if (part.type === \"file\") return filePart(part);\n if (part.type === \"tool-result\") {\n return { ...part, output: toolOutput(part.output) };\n }\n return part;\n })\n };\n case \"tool\":\n return {\n ...input,\n content: input.content.map((part) =>\n part.type === \"tool-result\"\n ? { ...part, output: toolOutput(part.output) }\n : part\n )\n };\n }\n}\n\nfunction filePart(part: LanguageModelV3FilePart): LanguageModelV4FilePart {\n return { ...part, data: fileData(part.data) };\n}\n\nfunction fileData(data: LanguageModelV3FilePart[\"data\"]): SharedV4FileData {\n return data instanceof URL\n ? { type: \"url\", url: data }\n : { type: \"data\", data };\n}\n\nfunction toolOutput(\n output: LanguageModelV3ToolResultOutput\n): LanguageModelV4ToolResultOutput {\n if (output.type !== \"content\") return output;\n return {\n ...output,\n value: output.value.map((item) => {\n switch (item.type) {\n case \"text\":\n return item;\n case \"file-data\":\n case \"image-data\":\n return {\n type: \"file\" as const,\n data: { type: \"data\" as const, data: item.data },\n mediaType: item.mediaType,\n ...(\"filename\" in item && item.filename !== undefined\n ? { filename: item.filename }\n : {}),\n providerOptions: item.providerOptions\n };\n case \"file-url\":\n case \"image-url\":\n return {\n type: \"file\" as const,\n data: { type: \"url\" as const, url: new URL(item.url) },\n mediaType:\n item.type === \"image-url\"\n ? \"image/*\"\n : \"application/octet-stream\",\n providerOptions: item.providerOptions\n };\n case \"file-id\":\n case \"image-file-id\":\n return {\n type: \"file\" as const,\n data: {\n type: \"reference\" as const,\n reference:\n typeof item.fileId === \"string\"\n ? { id: item.fileId }\n : item.fileId\n },\n mediaType:\n item.type === \"image-file-id\"\n ? \"image/*\"\n : \"application/octet-stream\",\n providerOptions: item.providerOptions\n };\n case \"custom\":\n return {\n type: \"custom\" as const,\n providerOptions: item.providerOptions\n };\n }\n })\n };\n}\n\nfunction content(\n part: LanguageModelV4Content\n): LanguageModelV3Content | undefined {\n switch (part.type) {\n case \"custom\":\n case \"reasoning-file\":\n return undefined;\n case \"file\":\n return generatedFile(part);\n default:\n return part;\n }\n}\n\nfunction streamPart(\n part: LanguageModelV4StreamPart\n): LanguageModelV3StreamPart | undefined {\n switch (part.type) {\n case \"custom\":\n case \"reasoning-file\":\n return undefined;\n case \"file\":\n return generatedFile(part);\n case \"stream-start\":\n return { ...part, warnings: part.warnings.map(warning) };\n default:\n return part;\n }\n}\n\n/** V4 added `deprecated` warnings; V3 reports them as `other`. */\nfunction warning(input: SharedV4Warning): SharedV3Warning {\n return input.type === \"deprecated\"\n ? { type: \"other\", message: `${input.setting}: ${input.message}` }\n : input;\n}\n\nfunction generatedFile(\n part: Extract<LanguageModelV4Content, { type: \"file\" }>\n): Extract<LanguageModelV3Content, { type: \"file\" }> | undefined {\n // V3 carries generated files inline only; a URL file has no V3 form.\n if (part.data.type !== \"data\") return undefined;\n return {\n type: \"file\",\n mediaType: part.mediaType,\n data: part.data.data,\n ...(part.providerMetadata === undefined\n ? {}\n : { providerMetadata: part.providerMetadata })\n };\n}\n","/**\n * `agents/models/opencode` — Workers AI as an OpenCode provider, with the\n * same shape as `agents/models/ai-sdk` and `agents/models/pi-ai`.\n *\n * ```ts\n * import { createAI } from \"agents/models/opencode\";\n * import { OpenCodeWorkerd } from \"@opencode/sdk/workerd\";\n *\n * const ai = createAI({ binding: env.AI });\n *\n * const model = ai(\"@cf/moonshotai/kimi-k2.7-code\"); // { providerID, id }\n * await OpenCodeWorkerd.create({ storage, plugins: [ai.plugin] });\n * ```\n *\n * `ai.plugin` is an OpenCode plugin. It adds a `cloudflare` provider whose\n * models are the ids you have called `ai(id)` with, and answers OpenCode's\n * AI SDK hook with `agents/models/ai-sdk`'s models, so requests go through\n * the `AI` binding: no account id, API token, or HTTP route to Workers AI in\n * your Worker, and nothing patched globally.\n *\n * @experimental The surface may change in any release.\n *\n * @module\n */\n\nimport { Model, Provider, type Plugin } from \"@opencode/plugin\";\nimport type { WorkersAIModelId } from \"../core/catalog\";\nimport type { AISettings, ModelOptions } from \"../core/settings\";\nimport { createAI as createAISDK } from \"../ai-sdk\";\nimport { asLanguageModelV3 } from \"./language-v3\";\n\nexport type { WorkersAIModelId } from \"../core/catalog\";\nexport type {\n AISettings,\n GatewayOptions,\n ModelOptions\n} from \"../core/settings\";\n\n/** The OpenCode provider id `createAI`'s plugin registers. */\nexport const CLOUDFLARE_PROVIDER_ID = \"cloudflare\";\n\n/**\n * The AI SDK package OpenCode is told the provider uses. OpenCode builds an\n * AI SDK model in two hook steps: `sdk` (load the package) and `language`\n * (make the model). Its `sdk` step can only load packages it bundles; any\n * other is handed to an npm installer that cannot run in workerd, and an\n * external plugin's `sdk` hook runs after that installer. So the provider\n * names `@ai-sdk/vercel`, which OpenCode bundles and loads in-process, and\n * this plugin's `language` hook replaces the model it would make. The\n * Vercel client is built but never called: its base URL does not resolve.\n */\nconst CARRIER_PACKAGE = \"aisdk:@ai-sdk/vercel\";\nconst UNREACHABLE_BASE_URL = \"https://workers-ai.binding.invalid/v1\";\n\n/**\n * A model as OpenCode references one: pass it to `OpenCodeHarness`'s\n * `defaults.model`, `session.setModel`, or OpenCode's `sessions.switchModel`.\n */\nexport type OpenCodeModel = {\n readonly providerID: string;\n readonly id: string;\n};\n\n/** How OpenCode budgets a model's context. */\nexport type OpenCodeModelLimit = {\n /** Context window, in tokens. Default 128_000. */\n readonly context: number;\n /** Most tokens OpenCode asks the model to generate. Default 8_192. */\n readonly output: number;\n};\n\n/** Options for one model: `agents/models/ai-sdk`'s, plus OpenCode's limit. */\nexport type OpenCodeModelOptions = ModelOptions & {\n readonly limit?: OpenCodeModelLimit;\n};\n\nconst DEFAULT_LIMIT: OpenCodeModelLimit = { context: 128_000, output: 8_192 };\n\n/**\n * The provider `createAI` returns. Call it with a Workers AI id to register\n * the model with the plugin and get OpenCode's reference to it.\n */\nexport interface AI {\n /** A Workers AI model, registered with the plugin. */\n (modelId: WorkersAIModelId, options?: OpenCodeModelOptions): OpenCodeModel;\n /** Same as calling the provider directly. */\n model(\n modelId: WorkersAIModelId,\n options?: OpenCodeModelOptions\n ): OpenCodeModel;\n /** The OpenCode plugin. Pass it in `OpenCodeWorkerd.create({ plugins })`. */\n readonly plugin: Plugin.Plugin;\n}\n\n/**\n * Create the Workers AI provider for OpenCode.\n *\n * @param settings - The `AI` binding and gateway defaults, as for\n * `agents/models/ai-sdk`.\n * @returns The provider: call it with model ids; register `plugin`.\n */\nexport function createAI(settings: AISettings): AI {\n const aiSdk = createAISDK(settings);\n const models = new Map<string, OpenCodeModelOptions | undefined>();\n /** One reload per OpenCode instance the plugin is set up in. */\n const reloads = new Set<() => Promise<void>>();\n const providerID = Provider.ID.make(CLOUDFLARE_PROVIDER_ID);\n\n const info = (id: string, options: OpenCodeModelOptions | undefined) => {\n const defaults = Model.Info.default(providerID, Model.ID.make(id));\n return {\n ...defaults,\n package: CARRIER_PACKAGE,\n limit: options?.limit ?? DEFAULT_LIMIT\n };\n };\n\n const plugin: Plugin.Plugin = {\n id: \"agents.models.opencode\",\n async setup(ctx) {\n const transform = await ctx.provider.transform((editor) => {\n editor.add({\n info: {\n id: providerID,\n name: \"Cloudflare Workers AI\",\n activation: \"enabled\",\n package: CARRIER_PACKAGE,\n settings: { baseURL: UNREACHABLE_BASE_URL, apiKey: \"binding\" }\n },\n models: [...models].map(([id, options]) => info(id, options))\n });\n });\n const hook = await ctx.aisdk.hook(\n \"language\",\n (event) => {\n const id = event.model.modelID ?? event.model.id;\n event.language = asLanguageModelV3(\n aiSdk.languageModel(id, models.get(id))\n );\n },\n { providerID }\n );\n const reload = () => ctx.provider.reload();\n reloads.add(reload);\n return async () => {\n reloads.delete(reload);\n await hook.dispose();\n await transform.dispose();\n };\n }\n };\n\n const model = (\n modelId: WorkersAIModelId,\n options?: OpenCodeModelOptions\n ): OpenCodeModel => {\n const changed =\n !models.has(modelId) ||\n JSON.stringify(models.get(modelId)?.limit) !==\n JSON.stringify(options?.limit);\n models.set(modelId, options);\n // A model named, or its limit changed, after OpenCode started: rebuild\n // the provider's model list.\n if (changed) {\n for (const reload of reloads) {\n reload().catch((error: unknown) => {\n console.warn(\"agents/models/opencode: provider reload failed\", error);\n });\n }\n }\n return { providerID: CLOUDFLARE_PROVIDER_ID, id: modelId };\n };\n\n return Object.assign(model, { model, plugin });\n}\n"],"mappings":"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"}
@@ -1,15 +1,17 @@
1
+ import {
2
+ n as GatewayOptions,
3
+ o as CloudflareEmbeddingModelId,
4
+ p as WorkersAIModelId,
5
+ r as ModelOptions,
6
+ t as AISettings
7
+ } from "../../settings-NgGwF7Qt.js";
1
8
  import {
2
9
  a as CloudflareAIError,
3
- c as GatewayOptions,
4
- d as CloudflareEmbeddingModelId,
5
10
  i as CloudflareAIAttempt,
6
- l as ModelOptions,
7
11
  n as GATEWAY_PROVIDER_NAMES,
8
12
  o as CloudflareAIErrorCode,
9
- r as GatewayProviderName,
10
- s as AISettings,
11
- v as WorkersAIModelId
12
- } from "../../transport-PfFnt-Ld.js";
13
+ r as GatewayProviderName
14
+ } from "../../transport-k2mFrtL8.js";
13
15
  import {
14
16
  Api,
15
17
  AssistantImages,
@@ -1,4 +1,5 @@
1
- import { C as resolveOptions, E as isAbortError, _ as isGatewayErrorEnvelope, a as normalizeChatCompletion, b as gatewayLayerOf, 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 CloudflareAIError, x as mergeModelOptions } from "../../images-iiTDSyRu.js";
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";
2
3
  import { calculateCost, clampThinkingLevel, createAssistantMessageEventStream, createProvider, getCurrentTools, normalizeContext, parseStreamingJson } from "@earendil-works/pi-ai";
3
4
  import { CLOUDFLARE_AI_GATEWAY_MODELS } from "@earendil-works/pi-ai/providers/cloudflare-ai-gateway.models";
4
5
  import { CLOUDFLARE_WORKERS_AI_MODELS } from "@earendil-works/pi-ai/providers/cloudflare-workers-ai.models";