@kitn.ai/ui 0.21.0 → 0.22.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 (243) hide show
  1. package/dist/components/chat-thread.d.ts +9 -0
  2. package/dist/{create-tween-D3Y5qiij.js → create-tween-COnPwAQN.js} +1 -1
  3. package/dist/{create-tween-DGKY1FDY.js → create-tween-DmTUaXWE.js} +1 -1
  4. package/dist/{create-tween-paho5Rh-.js → create-tween-qs-jjvNA.js} +1 -1
  5. package/dist/custom-elements.json +43 -7
  6. package/dist/elements/agent-card.js +1 -1
  7. package/dist/elements/artifact.js +1 -1
  8. package/dist/elements/attachments.js +1 -1
  9. package/dist/elements/audio-visualizer.js +1 -1
  10. package/dist/elements/avatar.js +1 -1
  11. package/dist/elements/badge.js +1 -1
  12. package/dist/elements/button.js +1 -1
  13. package/dist/elements/card.js +1 -1
  14. package/dist/elements/cards.js +1 -1
  15. package/dist/elements/chain-of-thought.js +1 -1
  16. package/dist/elements/chat-scope-picker.js +1 -1
  17. package/dist/elements/chat-workspace.js +1 -1
  18. package/dist/elements/chat.js +1 -1
  19. package/dist/elements/checkpoint.js +1 -1
  20. package/dist/elements/choice.js +1 -1
  21. package/dist/elements/chunks/{Icon-C-2LvGDG.js → Icon-CHG5z5L7.js} +1 -1
  22. package/dist/elements/chunks/{action-icons-CaYoImEk.js → action-icons-BAtCEEgg.js} +1 -1
  23. package/dist/elements/chunks/arrow-left-CFPTeL1Y.js +1 -0
  24. package/dist/elements/chunks/{artifact-BBIscOxJ.js → artifact-fBZOE4SO.js} +1 -1
  25. package/dist/elements/chunks/{attachments-BB56zoji.js → attachments-DpYMe5VQ.js} +1 -1
  26. package/dist/elements/chunks/{audio-visualizer-BxOx4THz.js → audio-visualizer-DFwzAcuL.js} +1 -1
  27. package/dist/elements/chunks/{badge-SxLSZ19R.js → badge-D6zodm6E.js} +1 -1
  28. package/dist/elements/chunks/{button-CmkUkz6c.js → button-C42vrGvO.js} +1 -1
  29. package/dist/elements/chunks/{card-renderer-Db4ffkWv.js → card-renderer-DMZsSuvU.js} +1 -1
  30. package/dist/elements/chunks/{chat-thread-B3Ks-cKr.js → chat-thread-CNNEhol-.js} +1 -1
  31. package/dist/elements/chunks/check-7Q3K-iXE.js +1 -0
  32. package/dist/elements/chunks/chevron-down-CpNYLn7E.js +1 -0
  33. package/dist/elements/chunks/chevron-right-DrH85Fha.js +1 -0
  34. package/dist/elements/chunks/{choice-card-Q9cYYDyM.js → choice-card-YoWjpsFV.js} +1 -1
  35. package/dist/elements/chunks/circle-C9KRjKYv.js +1 -0
  36. package/dist/elements/chunks/circle-check-Dmi7Y4zw.js +1 -0
  37. package/dist/elements/chunks/{circle-x-D0MEfxOM.js → circle-x-QIxXda6k.js} +1 -1
  38. package/dist/elements/chunks/{code-block-C8VzAraE.js → code-block-CqeugReY.js} +1 -1
  39. package/dist/elements/chunks/{collapsible-Cvj61obE.js → collapsible-sTv-_5lF.js} +1 -1
  40. package/dist/elements/chunks/{composer-D86ztyL0.js → composer-ldQyeVEB.js} +1 -1
  41. package/dist/elements/chunks/{confirm-card-BdyDAGLw.js → confirm-card-C0RNOwfn.js} +1 -1
  42. package/dist/elements/chunks/context-5qgypNHC.js +1 -0
  43. package/dist/elements/chunks/conversation-list-DLzOacXz.js +1 -0
  44. package/dist/elements/chunks/{create-tween-C_A_B638.js → create-tween-V4TXZ93X.js} +1 -1
  45. package/dist/elements/chunks/default-input-DeeRSDHc.js +1 -0
  46. package/dist/elements/chunks/{define-BzPnNsXg.js → define-lE-QvQFn.js} +1 -1
  47. package/dist/elements/chunks/{disclosure-DVKsoc1F.js → disclosure-DZSa9jog.js} +1 -1
  48. package/dist/elements/chunks/{download-BjA54IMJ.js → download-B2ZmnGqW.js} +1 -1
  49. package/dist/elements/chunks/{dropdown-BjVVHWXH.js → dropdown-R3B7cSRE.js} +1 -1
  50. package/dist/elements/chunks/{ellipsis-BNedmqfi.js → ellipsis-BmxceY4l.js} +1 -1
  51. package/dist/elements/chunks/{embed-DQsl4XEq.js → embed-BVrtTZPo.js} +1 -1
  52. package/dist/elements/chunks/{external-link-Di-dw2CU.js → external-link-BbdR7YO7.js} +1 -1
  53. package/dist/elements/chunks/{file-text-B3sAODCV.js → file-text-D7dijo1A.js} +1 -1
  54. package/dist/elements/chunks/{file-tree-Dgto-bMn.js → file-tree-0upJ5jeb.js} +1 -1
  55. package/dist/elements/chunks/{folder-D6rMadFV.js → folder-D8z58t7B.js} +1 -1
  56. package/dist/elements/chunks/{form-CILxvhQ7.js → form-p5BKJNw5.js} +1 -1
  57. package/dist/elements/chunks/{hover-card-BtiF4XiU.js → hover-card-CN9s2md5.js} +1 -1
  58. package/dist/elements/chunks/{icon-DKkmze3y.js → icon-CNiKP37E.js} +1 -1
  59. package/dist/elements/chunks/{info-CWRjZkuy.js → info-BSnuJiHI.js} +1 -1
  60. package/dist/elements/chunks/{input--QJBK6BA.js → input-BauDmzxX.js} +1 -1
  61. package/dist/elements/chunks/{kbd-C3zuKh8R.js → kbd-BlHJaP9b.js} +1 -1
  62. package/dist/elements/chunks/{link-BL5JA7Q0.js → link-DEi5iUWC.js} +1 -1
  63. package/dist/elements/chunks/{link-preview-CU37bbXh.js → link-preview-BaHyM6W4.js} +1 -1
  64. package/dist/elements/chunks/{loader-XmpyxyRH.js → loader-CmJG_Fkq.js} +1 -1
  65. package/dist/elements/chunks/{markdown-3Gv5UZ_o.js → markdown-D2jaMpCN.js} +1 -1
  66. package/dist/elements/chunks/{message-X5NZbq-W.js → message-C5UfXZ2Z.js} +1 -1
  67. package/dist/elements/chunks/{message-CnBA2OUt.js → message-CXWLmmLn.js} +1 -1
  68. package/dist/elements/chunks/message-square-hXylwsy0.js +1 -0
  69. package/dist/elements/chunks/{minimize-2-DwyrUTcM.js → minimize-2-C9ytZFMU.js} +1 -1
  70. package/dist/elements/chunks/model-switcher-CivGfD7-.js +1 -0
  71. package/dist/elements/chunks/{overlay-Cepd-KcS.js → overlay-DJL_sbOm.js} +1 -1
  72. package/dist/elements/chunks/{paperclip-CdwKjrlu.js → paperclip-CFaB8naM.js} +1 -1
  73. package/dist/elements/chunks/{progress-bar-DMVXBD3b.js → progress-bar-Br5SksfR.js} +1 -1
  74. package/dist/elements/chunks/{prompt-suggestion-Di_WZE_5.js → prompt-suggestion-CMIvtAhU.js} +1 -1
  75. package/dist/elements/chunks/{reasoning-D0jMch5u.js → reasoning-DpZcNzLq.js} +1 -1
  76. package/dist/elements/chunks/{resizable-1znbL1Gv.js → resizable-Q8i3T9a_.js} +1 -1
  77. package/dist/elements/chunks/{rotate-cw-DVhhgx8n.js → rotate-cw-B5IHCBFV.js} +1 -1
  78. package/dist/elements/chunks/{scroll-area-Bs4bFS1P.js → scroll-area-eLeydBje.js} +1 -1
  79. package/dist/elements/chunks/{scroll-button-Bet5NLc4.js → scroll-button-DWbz0yA1.js} +1 -1
  80. package/dist/elements/chunks/{separator-C5Gh8qGC.js → separator-Xic78AD_.js} +1 -1
  81. package/dist/elements/chunks/{settings-5vmEFg0K.js → settings-B8H51pAx.js} +1 -1
  82. package/dist/elements/chunks/{settings-group-BWLB38kz.js → settings-group-CsG9eYLe.js} +1 -1
  83. package/dist/elements/chunks/{share-BZ3G_DaB.js → share-CNTx0z__.js} +1 -1
  84. package/dist/elements/chunks/{skeleton-DafPJQTp.js → skeleton-CLlHTcMI.js} +1 -1
  85. package/dist/elements/chunks/{source-D_qj_6uJ.js → source-BoVcU5ok.js} +1 -1
  86. package/dist/elements/chunks/{star-Cuv7j2IE.js → star-CxQVTVhI.js} +1 -1
  87. package/dist/elements/chunks/{store-C1StPHfW.js → store-CLtS5CUG.js} +1 -1
  88. package/dist/elements/chunks/{tasks-card-EyoBZfpA.js → tasks-card-CzlkLmUt.js} +1 -1
  89. package/dist/elements/chunks/{text-shimmer-D9gRSh34.js → text-shimmer-D5NhpIQ1.js} +1 -1
  90. package/dist/elements/chunks/{textarea-DuhtHfcm.js → textarea-x5Uxsmtm.js} +1 -1
  91. package/dist/elements/chunks/{thumbs-up-B9hwv43w.js → thumbs-up-UobcJnx9.js} +1 -1
  92. package/dist/elements/chunks/{toast-store-Bm3DUEDe.js → toast-store-BOfs9eXq.js} +1 -1
  93. package/dist/elements/chunks/{tool-CDtW7L0z.js → tool-Be6Dh_dt.js} +1 -1
  94. package/dist/elements/chunks/{tooltip-eB226mGK.js → tooltip-RxMxyCLF.js} +1 -1
  95. package/dist/elements/chunks/{triangle-alert-C1SNzTqK.js → triangle-alert-C4yxH2XN.js} +1 -1
  96. package/dist/elements/chunks/{use-card-resolution-YZh2MvI5.js → use-card-resolution-jva9ehH6.js} +1 -1
  97. package/dist/elements/chunks/{variant-aurora-Cj1F7D0l.js → variant-aurora-Dx4VRcjS.js} +1 -1
  98. package/dist/elements/chunks/{variant-custom-T9gpt7QE.js → variant-custom-Y1ZTWgEa.js} +1 -1
  99. package/dist/elements/chunks/{variant-wave-CxU9z-TE.js → variant-wave-B9gml9Cg.js} +1 -1
  100. package/dist/elements/chunks/{video-CK4R7Rus.js → video-CrPHsytT.js} +1 -1
  101. package/dist/elements/chunks/x-_-OPHept.js +1 -0
  102. package/dist/elements/coachmark.js +1 -1
  103. package/dist/elements/code-block.js +1 -1
  104. package/dist/elements/command.js +1 -1
  105. package/dist/elements/compare.js +1 -1
  106. package/dist/elements/composer.js +1 -1
  107. package/dist/elements/confirm-card.js +1 -1
  108. package/dist/elements/context-meter.js +1 -1
  109. package/dist/elements/conversation-list.js +1 -1
  110. package/dist/elements/default-input.d.ts +27 -0
  111. package/dist/elements/dialog.js +1 -1
  112. package/dist/elements/editable-label.js +1 -1
  113. package/dist/elements/embed.js +1 -1
  114. package/dist/elements/empty.js +1 -1
  115. package/dist/elements/feedback-bar.js +1 -1
  116. package/dist/elements/file-tree.js +1 -1
  117. package/dist/elements/file-upload.js +1 -1
  118. package/dist/elements/form.js +1 -1
  119. package/dist/elements/hover-card.js +1 -1
  120. package/dist/elements/icon.js +1 -1
  121. package/dist/elements/image.js +1 -1
  122. package/dist/elements/input.js +1 -1
  123. package/dist/elements/kbd.js +1 -1
  124. package/dist/elements/link-preview.js +1 -1
  125. package/dist/elements/loader.js +1 -1
  126. package/dist/elements/markdown.js +1 -1
  127. package/dist/elements/menu.js +1 -1
  128. package/dist/elements/message-skills.js +1 -1
  129. package/dist/elements/message.js +1 -1
  130. package/dist/elements/model-switcher.js +1 -1
  131. package/dist/elements/nav.js +1 -1
  132. package/dist/elements/notice.js +1 -1
  133. package/dist/elements/pane-group.js +1 -1
  134. package/dist/elements/pane.js +1 -1
  135. package/dist/elements/popover.js +1 -1
  136. package/dist/elements/progress-bar.js +1 -1
  137. package/dist/elements/prompt-dock.js +1 -1
  138. package/dist/elements/prompt-input.js +1 -1
  139. package/dist/elements/prompt-suggestions.js +1 -1
  140. package/dist/elements/reasoning.js +1 -1
  141. package/dist/elements/remote.js +1 -1
  142. package/dist/elements/resizable.js +1 -1
  143. package/dist/elements/response-stream.js +2 -2
  144. package/dist/elements/screen.js +1 -1
  145. package/dist/elements/scroll-area.js +1 -1
  146. package/dist/elements/scroll-button.js +1 -1
  147. package/dist/elements/search.js +1 -1
  148. package/dist/elements/segmented.js +1 -1
  149. package/dist/elements/separator.js +1 -1
  150. package/dist/elements/setting-item.js +1 -1
  151. package/dist/elements/settings-group.js +1 -1
  152. package/dist/elements/skeleton.js +1 -1
  153. package/dist/elements/slot-text.d.ts +51 -0
  154. package/dist/elements/slots.d.ts +5 -0
  155. package/dist/elements/source.js +1 -1
  156. package/dist/elements/status.js +1 -1
  157. package/dist/elements/switch.js +1 -1
  158. package/dist/elements/tabs.js +1 -1
  159. package/dist/elements/tasks.js +1 -1
  160. package/dist/elements/text-shimmer.js +1 -1
  161. package/dist/elements/thinking-bar.js +1 -1
  162. package/dist/elements/thread.js +1 -1
  163. package/dist/elements/toast.js +1 -1
  164. package/dist/elements/tool.js +1 -1
  165. package/dist/elements/tooltip.js +1 -1
  166. package/dist/elements/voice-input.js +1 -1
  167. package/dist/elements/voice-output.js +1 -1
  168. package/dist/elements.d.ts +12 -6
  169. package/dist/index.js +1535 -1487
  170. package/dist/index.server.js +2330 -2296
  171. package/dist/kai.es.js +1 -1
  172. package/dist/llms/llms-full.txt +12 -3
  173. package/dist/mcp.es.js +890 -78
  174. package/dist/react/index.d.ts +13 -3
  175. package/dist/react.js +14 -14
  176. package/dist/register-impl-AxIlqjo7.js +145 -0
  177. package/dist/{solid-BCJUQqwS.js → solid-BGYSJyHG.js} +4901 -4691
  178. package/dist/{solid-BdENBcEq.js → solid-Dt2nEwfl.js} +4406 -4320
  179. package/dist/solid.js +1 -1
  180. package/dist/solid.server.js +1 -1
  181. package/dist/{variant-aurora-DOb_o4pC.js → variant-aurora-B44X69AG.js} +1 -1
  182. package/dist/{variant-aurora-BKHHiOgL.js → variant-aurora-BRhV8Flk.js} +2 -2
  183. package/dist/{variant-aurora-1wMcXRUS.js → variant-aurora-Ds5ou9BH.js} +2 -2
  184. package/dist/{variant-custom-DWSSgmd2.js → variant-custom-B20FhtYj.js} +2 -2
  185. package/dist/{variant-custom-CJGB0Kbw.js → variant-custom-BvA1Schl.js} +1 -1
  186. package/dist/{variant-custom-Co0CkXJF.js → variant-custom-D6Rtvneb.js} +2 -2
  187. package/dist/{variant-wave-CEODq-9q.js → variant-wave-BUQtkryq.js} +1 -1
  188. package/dist/{variant-wave-C3-45cL6.js → variant-wave-BVYnqy9L.js} +2 -2
  189. package/dist/{variant-wave-jdXBnCUZ.js → variant-wave-DXC6_LcH.js} +2 -2
  190. package/dist/wire/encode.d.ts +79 -6
  191. package/dist/wire/files.d.ts +116 -0
  192. package/dist/wire/index.d.ts +3 -1
  193. package/dist/wire/media-types.d.ts +106 -0
  194. package/dist/wire.js +596 -368
  195. package/frameworks/react/index.tsx +9 -5
  196. package/llms-full.txt +12 -3
  197. package/package.json +4 -1
  198. package/src/agent-tooling/archetypes.ts +43 -12
  199. package/src/agent-tooling/integrations/anthropic.ts +29 -5
  200. package/src/agent-tooling/integrations/cloudflare.ts +5 -0
  201. package/src/agent-tooling/integrations/langgraph.ts +13 -0
  202. package/src/agent-tooling/integrations/mastra.ts +46 -5
  203. package/src/agent-tooling/integrations/mock.ts +4 -0
  204. package/src/agent-tooling/integrations/ollama.ts +7 -0
  205. package/src/agent-tooling/integrations/openai.ts +2 -0
  206. package/src/agent-tooling/integrations/openrouter.ts +2 -0
  207. package/src/agent-tooling/integrations/pi.ts +26 -1
  208. package/src/agent-tooling/integrations/pydantic-ai.ts +37 -3
  209. package/src/agent-tooling/integrations/vercel-ai-sdk.ts +42 -6
  210. package/src/agent-tooling/mcp/tools/scaffold.ts +913 -32
  211. package/src/agent-tooling/registry.ts +57 -0
  212. package/src/agent-tooling/types.ts +132 -0
  213. package/src/components/chat-thread.tsx +10 -1
  214. package/src/components/context.tsx +18 -12
  215. package/src/components/conversation-item.tsx +6 -0
  216. package/src/components/model-switcher.tsx +38 -8
  217. package/src/components/toast.tsx +6 -1
  218. package/src/elements/button.tsx +26 -3
  219. package/src/elements/chat.tsx +28 -2
  220. package/src/elements/default-input.tsx +128 -5
  221. package/src/elements/element-meta.json +30 -4
  222. package/src/elements/element-types.d.ts +12 -6
  223. package/src/elements/menu.tsx +30 -3
  224. package/src/elements/slot-text.ts +73 -0
  225. package/src/elements/slots.ts +10 -0
  226. package/src/index.ts +9 -5
  227. package/src/wire/encode.ts +234 -14
  228. package/src/wire/files.ts +342 -0
  229. package/src/wire/index.ts +21 -0
  230. package/src/wire/media-types.ts +344 -0
  231. package/dist/elements/chunks/arrow-left-Bb46H7w9.js +0 -1
  232. package/dist/elements/chunks/check-C8desc_h.js +0 -1
  233. package/dist/elements/chunks/chevron-down-DKtc2HNB.js +0 -1
  234. package/dist/elements/chunks/chevron-right-Dw4GPhwL.js +0 -1
  235. package/dist/elements/chunks/circle-BeokBsvB.js +0 -1
  236. package/dist/elements/chunks/circle-check-wJSqt859.js +0 -1
  237. package/dist/elements/chunks/context-WHDl-xSx.js +0 -1
  238. package/dist/elements/chunks/conversation-list-CdR14_Y4.js +0 -1
  239. package/dist/elements/chunks/default-input-CSZqUM81.js +0 -1
  240. package/dist/elements/chunks/message-square-CnpAm_P0.js +0 -1
  241. package/dist/elements/chunks/model-switcher-CclaJEHt.js +0 -1
  242. package/dist/elements/chunks/x-D1qx0aLd.js +0 -1
  243. package/dist/register-impl-bzrZ44ft.js +0 -145
package/dist/wire.js CHANGED
@@ -1,7 +1,7 @@
1
- var J = Object.defineProperty;
2
- var F = (t, e, n) => e in t ? J(t, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : t[e] = n;
3
- var w = (t, e, n) => F(t, typeof e != "symbol" ? e + "" : e, n);
4
- async function* D(t) {
1
+ var z = Object.defineProperty;
2
+ var G = (t, e, n) => e in t ? z(t, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : t[e] = n;
3
+ var A = (t, e, n) => G(t, typeof e != "symbol" ? e + "" : e, n);
4
+ async function* X(t) {
5
5
  const e = t.getReader();
6
6
  let n = !1;
7
7
  try {
@@ -18,19 +18,19 @@ async function* D(t) {
18
18
  }), e.releaseLock();
19
19
  }
20
20
  }
21
- function W(t) {
22
- return typeof t.getReader == "function" ? D(t) : t;
21
+ function Q(t) {
22
+ return typeof t.getReader == "function" ? X(t) : t;
23
23
  }
24
- async function* q(t) {
24
+ async function* V(t) {
25
25
  const e = new TextDecoder();
26
26
  let n = "", o = [];
27
27
  const r = () => {
28
28
  if (o.length === 0) return;
29
- const i = o.join(`
29
+ const a = o.join(`
30
30
  `);
31
- return o = [], i;
32
- }, s = (i) => {
33
- const c = i.endsWith("\r") ? i.slice(0, -1) : i;
31
+ return o = [], a;
32
+ }, s = (a) => {
33
+ const c = a.endsWith("\r") ? a.slice(0, -1) : a;
34
34
  if (c === "") return "boundary";
35
35
  if (c.startsWith(":")) return "skip";
36
36
  if (c.startsWith("data:")) {
@@ -39,27 +39,27 @@ async function* q(t) {
39
39
  }
40
40
  return "skip";
41
41
  };
42
- for await (const i of W(t)) {
43
- n += typeof i == "string" ? i : e.decode(i, { stream: !0 });
42
+ for await (const a of Q(t)) {
43
+ n += typeof a == "string" ? a : e.decode(a, { stream: !0 });
44
44
  let c = n.indexOf(`
45
45
  `);
46
46
  for (; c !== -1; ) {
47
47
  const u = n.slice(0, c);
48
48
  if (n = n.slice(c + 1), s(u) === "boundary") {
49
- const l = r();
50
- l !== void 0 && (yield l);
49
+ const d = r();
50
+ d !== void 0 && (yield d);
51
51
  }
52
52
  c = n.indexOf(`
53
53
  `);
54
54
  }
55
55
  }
56
56
  n += e.decode(), n && s(n);
57
- const a = r();
58
- a !== void 0 && (yield a);
57
+ const i = r();
58
+ i !== void 0 && (yield i);
59
59
  }
60
- async function* L(t) {
60
+ async function* Z(t) {
61
61
  let e = !1;
62
- for await (const n of q(t))
62
+ for await (const n of V(t))
63
63
  if (!e) {
64
64
  if (n === "[DONE]") {
65
65
  e = !0;
@@ -71,40 +71,40 @@ async function* L(t) {
71
71
  }
72
72
  }
73
73
  }
74
- function C(t) {
74
+ function E(t) {
75
75
  const e = t.toLowerCase();
76
76
  return e ? e.includes("bash") || e.includes("command") || e.includes("shell") || e.includes("terminal") || e.includes("exec") ? "command" : e.includes("edit") || e.includes("write") || e.includes("patch") || e.includes("replace") || e.includes("delete") ? "file-change" : e.includes("search") || e.includes("grep") || e.includes("glob") || e.includes("find") ? "search" : e.includes("fetch") || e.includes("http") || e.includes("browse") || e.includes("crawl") ? "fetch" : e.includes("mcp") ? "mcp" : e.includes("image") || e.includes("screenshot") || e.includes("vision") ? "image" : "generic" : "generic";
77
77
  }
78
- function A(t) {
78
+ function O(t) {
79
79
  const e = /* @__PURE__ */ new WeakSet(), n = (o) => {
80
80
  if (o === null || typeof o != "object") return o;
81
81
  if (e.has(o)) return "[circular]";
82
82
  e.add(o);
83
- const r = o, s = Array.isArray(o) ? o.map(n) : Object.fromEntries(Object.keys(r).sort().map((a) => [a, n(r[a])]));
83
+ const r = o, s = Array.isArray(o) ? o.map(n) : Object.fromEntries(Object.keys(r).sort().map((i) => [i, n(r[i])]));
84
84
  return e.delete(o), s;
85
85
  };
86
86
  return JSON.stringify(n(t)) ?? "";
87
87
  }
88
- function K(t, e) {
88
+ function tt(t, e) {
89
89
  const n = t[t.length - 1];
90
90
  return (n == null ? void 0 : n.type) === "text" ? [...t.slice(0, -1), { ...n, text: n.text + e }] : [...t, { type: "text", text: e }];
91
91
  }
92
- function U(t, e, n = {}) {
92
+ function et(t, e, n = {}) {
93
93
  const o = n.index ?? 0, r = n.streamId, s = t.findIndex(
94
94
  (c) => c.type === "reasoning" && (c.index ?? 0) === o && c.streamId === r
95
95
  );
96
96
  if (s < 0)
97
97
  return [...t, { type: "reasoning", text: e, index: o, streamId: r, label: n.label, signature: n.signature, raw: n.raw }];
98
- const a = t[s], i = {
99
- ...a,
100
- text: a.text + e,
101
- label: n.label ?? a.label,
102
- signature: n.signature ?? a.signature,
103
- raw: n.raw ?? a.raw
98
+ const i = t[s], a = {
99
+ ...i,
100
+ text: i.text + e,
101
+ label: n.label ?? i.label,
102
+ signature: n.signature ?? i.signature,
103
+ raw: n.raw ?? i.raw
104
104
  };
105
- return Y(a, i) ? t : [...t.slice(0, s), i, ...t.slice(s + 1)];
105
+ return rt(i, a) ? t : [...t.slice(0, s), a, ...t.slice(s + 1)];
106
106
  }
107
- const B = [
107
+ const nt = [
108
108
  "type",
109
109
  "text",
110
110
  "index",
@@ -112,7 +112,7 @@ const B = [
112
112
  "label",
113
113
  "signature",
114
114
  "raw"
115
- ], G = {
115
+ ], ot = {
116
116
  type: (t, e) => t.type === e.type,
117
117
  text: (t, e) => t.text === e.text,
118
118
  index: (t, e) => t.index === e.index,
@@ -121,27 +121,27 @@ const B = [
121
121
  signature: (t, e) => t.signature === e.signature,
122
122
  raw: (t, e) => t.raw === e.raw
123
123
  };
124
- function Y(t, e) {
125
- return B.every((n) => G[n](t, e));
124
+ function rt(t, e) {
125
+ return nt.every((n) => ot[n](t, e));
126
126
  }
127
- function z(t, e, n) {
128
- const o = t.findIndex((a) => a.type === "tool" && a.tool.toolCallId === e);
127
+ function it(t, e, n) {
128
+ const o = t.findIndex((i) => i.type === "tool" && i.tool.toolCallId === e);
129
129
  if (o < 0) {
130
- const a = {
130
+ const i = {
131
131
  type: n.type ?? "unknown",
132
132
  state: n.state ?? "input-streaming",
133
133
  ...n,
134
134
  toolCallId: e
135
135
  };
136
- return a.kind = a.kind ?? C(a.type), [...t, { type: "tool", tool: a }];
136
+ return i.kind = i.kind ?? E(i.type), [...t, { type: "tool", tool: i }];
137
137
  }
138
138
  const r = t[o].tool, s = { ...r, ...n, toolCallId: e };
139
- return s.kind = H(r, n, s.type), s.raw === void 0 && r.raw !== void 0 && (s.raw = r.raw), X(r, s) ? t : [...t.slice(0, o), { type: "tool", tool: s }, ...t.slice(o + 1)];
139
+ return s.kind = st(r, n, s.type), s.raw === void 0 && r.raw !== void 0 && (s.raw = r.raw), ct(r, s) ? t : [...t.slice(0, o), { type: "tool", tool: s }, ...t.slice(o + 1)];
140
140
  }
141
- function H(t, e, n) {
142
- return e.kind !== void 0 ? e.kind : t.kind === void 0 || t.kind === C(t.type) ? C(n) : t.kind;
141
+ function st(t, e, n) {
142
+ return e.kind !== void 0 ? e.kind : t.kind === void 0 || t.kind === E(t.type) ? E(n) : t.kind;
143
143
  }
144
- const Q = [
144
+ const at = [
145
145
  "type",
146
146
  "state",
147
147
  "kind",
@@ -151,7 +151,7 @@ const Q = [
151
151
  "raw",
152
152
  "input",
153
153
  "output"
154
- ], V = {
154
+ ], ut = {
155
155
  type: (t, e) => t.type === e.type,
156
156
  state: (t, e) => t.state === e.state,
157
157
  kind: (t, e) => t.kind === e.kind,
@@ -159,13 +159,13 @@ const Q = [
159
159
  errorText: (t, e) => t.errorText === e.errorText,
160
160
  rawInput: (t, e) => t.rawInput === e.rawInput,
161
161
  raw: (t, e) => t.raw === e.raw,
162
- input: (t, e) => t.input === e.input || A(t.input) === A(e.input),
163
- output: (t, e) => t.output === e.output || A(t.output) === A(e.output)
162
+ input: (t, e) => t.input === e.input || O(t.input) === O(e.input),
163
+ output: (t, e) => t.output === e.output || O(t.output) === O(e.output)
164
164
  };
165
- function X(t, e) {
166
- return Q.every((n) => V[n](t, e));
165
+ function ct(t, e) {
166
+ return at.every((n) => ut[n](t, e));
167
167
  }
168
- const Z = {
168
+ const dt = {
169
169
  // OpenAI chat completions
170
170
  stop: "stop",
171
171
  length: "length",
@@ -181,23 +181,23 @@ const Z = {
181
181
  refusal: "content-filter",
182
182
  pause_turn: "other"
183
183
  };
184
- function tt(t) {
184
+ function lt(t) {
185
185
  if (t)
186
- return Z[t] ?? "other";
186
+ return dt[t] ?? "other";
187
187
  }
188
- const et = (t) => ({
188
+ const pt = (t) => ({
189
189
  index: t.index,
190
190
  id: t.id ?? `call_${t.index}`,
191
191
  name: t.name,
192
192
  argumentsText: t.argumentsText
193
- }), nt = (t) => ({
193
+ }), ft = (t) => ({
194
194
  source: "custom.wire.tool_call",
195
195
  payload: { id: t.id ?? `call_${t.index}`, name: t.name, arguments: t.argumentsText }
196
196
  });
197
- function ot(t, e) {
197
+ function gt(t, e) {
198
198
  return t.length <= e ? t : `${t.slice(0, e)}...`;
199
199
  }
200
- function rt(t) {
200
+ function ht(t) {
201
201
  const e = t.trim();
202
202
  if (e !== "")
203
203
  try {
@@ -207,22 +207,22 @@ function rt(t) {
207
207
  return;
208
208
  }
209
209
  }
210
- function it(t, e = {}) {
211
- const n = /* @__PURE__ */ new Map(), o = (i) => {
212
- const c = i.id, u = i.argumentsText, l = rt(u);
213
- if (l) {
214
- const p = A(l);
215
- if (p !== i.lastInputFp) {
216
- i.lastInputFp = p, t.upsertTool(c, { rawInput: u, input: l, state: "input-available" });
210
+ function yt(t, e = {}) {
211
+ const n = /* @__PURE__ */ new Map(), o = (a) => {
212
+ const c = a.id, u = a.argumentsText, d = ht(u);
213
+ if (d) {
214
+ const l = O(d);
215
+ if (l !== a.lastInputFp) {
216
+ a.lastInputFp = l, t.upsertTool(c, { rawInput: u, input: d, state: "input-available" });
217
217
  return;
218
218
  }
219
219
  }
220
220
  t.upsertTool(c, { rawInput: u });
221
- }, r = (i) => {
222
- i.announced || (i.id ?? (i.id = `call_${i.index}`), i.announced = !0, t.upsertTool(i.id, { type: i.name || "unknown_tool", state: "input-streaming" }), i.argumentsText && o(i));
221
+ }, r = (a) => {
222
+ a.announced || (a.id ?? (a.id = `call_${a.index}`), a.announced = !0, t.upsertTool(a.id, { type: a.name || "unknown_tool", state: "input-streaming" }), a.argumentsText && o(a));
223
223
  };
224
- return { apply: (i) => {
225
- const c = typeof i.index == "number" ? i.index : 0;
224
+ return { apply: (a) => {
225
+ const c = typeof a.index == "number" ? a.index : 0;
226
226
  let u = n.get(c);
227
227
  u || (u = {
228
228
  index: c,
@@ -232,71 +232,71 @@ function it(t, e = {}) {
232
232
  announced: !1,
233
233
  lastInputFp: null,
234
234
  providerExecuted: !1
235
- }, n.set(c, u)), i.id && !u.id && (u.id = i.id), i.name && (u.name += i.name), u.id && u.name && r(u), typeof i.arguments == "string" && i.arguments !== "" && (u.argumentsText += i.arguments, u.announced && o(u)), (i.output !== void 0 || i.outputError !== void 0) && (r(u), u.providerExecuted = !0, i.outputError !== void 0 ? (u.outputError = i.outputError, t.upsertTool(u.id, { state: "output-error", errorText: i.outputError })) : (u.output = i.output, t.upsertTool(u.id, { state: "output-available", output: i.output })));
236
- }, settle: (i, c) => [...n.values()].sort((u, l) => u.index - l.index).map((u) => {
237
- var O;
235
+ }, n.set(c, u)), a.id && !u.id && (u.id = a.id), a.name && (u.name += a.name), u.id && u.name && r(u), typeof a.arguments == "string" && a.arguments !== "" && (u.argumentsText += a.arguments, u.announced && o(u)), (a.output !== void 0 || a.outputError !== void 0) && (r(u), u.providerExecuted = !0, a.outputError !== void 0 ? (u.outputError = a.outputError, t.upsertTool(u.id, { state: "output-error", errorText: a.outputError })) : (u.output = a.output, t.upsertTool(u.id, { state: "output-available", output: a.output })));
236
+ }, settle: (a, c) => [...n.values()].sort((u, d) => u.index - d.index).map((u) => {
237
+ var m;
238
238
  r(u);
239
- const l = u.id, p = et(u);
239
+ const d = u.id, l = pt(u);
240
240
  if (u.providerExecuted)
241
241
  return {
242
- ...p,
242
+ ...l,
243
243
  providerExecuted: !0,
244
244
  ...u.output !== void 0 ? { output: u.output } : {},
245
245
  ...u.outputError !== void 0 ? { error: u.outputError } : {}
246
246
  };
247
- const x = nt(u), h = u.name || "unknown_tool";
247
+ const p = ft(u), h = u.name || "unknown_tool";
248
248
  if (c) {
249
- const g = `Stream failed before the tool call completed: ${c}`;
250
- return t.upsertTool(l, {
249
+ const y = `Stream failed before the tool call completed: ${c}`;
250
+ return t.upsertTool(d, {
251
251
  type: h,
252
252
  state: "output-error",
253
- errorText: g,
253
+ errorText: y,
254
254
  rawInput: u.argumentsText,
255
- raw: x
256
- }), { ...p, error: g };
255
+ raw: p
256
+ }), { ...l, error: y };
257
257
  }
258
258
  if (!u.name) {
259
- const g = "Tool call arrived with no function name; cannot dispatch it.";
260
- return t.upsertTool(l, { state: "output-error", errorText: g, raw: x }), { ...p, error: g };
259
+ const y = "Tool call arrived with no function name; cannot dispatch it.";
260
+ return t.upsertTool(d, { state: "output-error", errorText: y, raw: p }), { ...l, error: y };
261
261
  }
262
- const _ = u.argumentsText.trim();
262
+ const k = u.argumentsText.trim();
263
263
  try {
264
- const g = _ === "" ? {} : JSON.parse(_);
265
- if (g === null || typeof g != "object" || Array.isArray(g))
264
+ const y = k === "" ? {} : JSON.parse(k);
265
+ if (y === null || typeof y != "object" || Array.isArray(y))
266
266
  throw new Error("arguments must be a JSON object");
267
- const S = g;
268
- t.upsertTool(l, {
267
+ const T = y;
268
+ t.upsertTool(d, {
269
269
  type: h,
270
270
  state: "input-available",
271
- input: S,
271
+ input: T,
272
272
  rawInput: u.argumentsText,
273
- raw: x
273
+ raw: p
274
274
  });
275
- const v = { ...p, input: S };
276
- return (O = e.onToolCallReady) == null || O.call(e, v), v;
277
- } catch (g) {
278
- const v = `Malformed tool arguments${i === "length" ? " (the stream hit the token limit mid-call)" : ""}: ${g.message}. Received ${_.length} chars: ${ot(_, 160)}`;
279
- return t.upsertTool(l, {
275
+ const v = { ...l, input: T };
276
+ return (m = e.onToolCallReady) == null || m.call(e, v), v;
277
+ } catch (y) {
278
+ const v = `Malformed tool arguments${a === "length" ? " (the stream hit the token limit mid-call)" : ""}: ${y.message}. Received ${k.length} chars: ${gt(k, 160)}`;
279
+ return t.upsertTool(d, {
280
280
  type: h,
281
281
  state: "output-error",
282
282
  errorText: v,
283
283
  rawInput: u.argumentsText,
284
- raw: x
285
- }), { ...p, error: v };
284
+ raw: p
285
+ }), { ...l, error: v };
286
286
  }
287
287
  }) };
288
288
  }
289
- function st() {
289
+ function mt() {
290
290
  let t = [];
291
291
  return {
292
292
  appendText(e) {
293
- t = K(t, e);
293
+ t = tt(t, e);
294
294
  },
295
295
  appendReasoning(e, n) {
296
- t = U(t, e, { ...n, streamId: void 0 });
296
+ t = et(t, e, { ...n, streamId: void 0 });
297
297
  },
298
298
  upsertTool(e, n) {
299
- t = z(t, e, n);
299
+ t = it(t, e, n);
300
300
  },
301
301
  addSource(e) {
302
302
  t = [...t, { type: "source", source: e }];
@@ -304,7 +304,7 @@ function st() {
304
304
  parts: () => t
305
305
  };
306
306
  }
307
- function at(t, e) {
307
+ function xt(t, e) {
308
308
  return {
309
309
  appendText(n) {
310
310
  t.appendText(n), e.appendText(n);
@@ -321,195 +321,195 @@ function at(t, e) {
321
321
  }
322
322
  };
323
323
  }
324
- let ut = 0;
325
- const ct = () => `wire-${++ut}`;
326
- async function dt(t, e, n = {}) {
324
+ let bt = 0;
325
+ const kt = () => `wire-${++bt}`;
326
+ async function wt(t, e, n = {}) {
327
327
  var v;
328
- const o = n.reasoningLabel ?? "Thinking", r = ct(), s = st(), a = at(e, s), i = it(a, n);
329
- let c = "", u = "", l = 0, p = 0, x = null, h, _;
330
- const O = [];
331
- for await (const d of t) {
332
- if (p++, d.usage && (_ = { ..._, ...d.usage }), d.error) {
333
- h = d.error, d.finishReason && (x = d.finishReason);
328
+ const o = n.reasoningLabel ?? "Thinking", r = kt(), s = mt(), i = xt(e, s), a = yt(i, n);
329
+ let c = "", u = "", d = 0, l = 0, p = null, h, k;
330
+ const m = [];
331
+ for await (const f of t) {
332
+ if (l++, f.usage && (k = { ...k, ...f.usage }), f.error) {
333
+ h = f.error, f.finishReason && (p = f.finishReason);
334
334
  break;
335
335
  }
336
- if (d.text && (c += d.text, a.appendText(d.text)), d.reasoning !== void 0 || d.reasoningRaw !== void 0 || d.reasoningSignature !== void 0) {
337
- const T = d.reasoning ?? "";
338
- u += T, T !== "" && l++, a.appendReasoning(T, {
339
- index: d.reasoningIndex ?? 0,
336
+ if (f.text && (c += f.text, i.appendText(f.text)), f.reasoning !== void 0 || f.reasoningRaw !== void 0 || f.reasoningSignature !== void 0) {
337
+ const _ = f.reasoning ?? "";
338
+ u += _, _ !== "" && d++, i.appendReasoning(_, {
339
+ index: f.reasoningIndex ?? 0,
340
340
  // Namespaces the index to THIS stream, so a later round reading into the
341
341
  // same sink opens its own part instead of overwriting this one's `raw`.
342
342
  streamId: r,
343
343
  label: o,
344
- ...d.reasoningRaw ? { raw: d.reasoningRaw } : {},
345
- ...d.reasoningSignature ? { signature: d.reasoningSignature } : {}
344
+ ...f.reasoningRaw ? { raw: f.reasoningRaw } : {},
345
+ ...f.reasoningSignature ? { signature: f.reasoningSignature } : {}
346
346
  });
347
347
  }
348
- if (d.toolCalls) for (const T of d.toolCalls) i.apply(T);
349
- if (d.sources)
350
- for (const T of d.sources)
351
- O.push(T), (v = a.addSource) == null || v.call(a, T);
352
- d.finishReason && (x = d.finishReason);
348
+ if (f.toolCalls) for (const _ of f.toolCalls) a.apply(_);
349
+ if (f.sources)
350
+ for (const _ of f.sources)
351
+ m.push(_), (v = i.addSource) == null || v.call(i, _);
352
+ f.finishReason && (p = f.finishReason);
353
353
  }
354
- p === 0 && !h && (h = {
354
+ l === 0 && !h && (h = {
355
355
  code: "empty-stream",
356
356
  message: "The model stream produced no chunks. The response was 200 but nothing in its body parsed as a stream frame — check the endpoint really sent Content-Type: text/event-stream and that the request set stream: true. A route that forwards a provider error without its status lands here: the body is a JSON error, not SSE."
357
357
  });
358
- const g = tt(x) ?? (h ? "error" : void 0), S = i.settle(g, h == null ? void 0 : h.message);
358
+ const y = lt(p) ?? (h ? "error" : void 0), T = a.settle(y, h == null ? void 0 : h.message);
359
359
  return {
360
360
  parts: s.parts(),
361
361
  text: c,
362
362
  reasoning: u,
363
- toolCalls: S,
364
- sources: O,
365
- finishReason: x,
366
- reasoningChunks: l,
367
- chunks: p,
368
- ...g ? { stopReason: g } : {},
363
+ toolCalls: T,
364
+ sources: m,
365
+ finishReason: p,
366
+ reasoningChunks: d,
367
+ chunks: l,
368
+ ...y ? { stopReason: y } : {},
369
369
  ...h ? { error: h } : {},
370
- ..._ ? { usage: _ } : {}
370
+ ...k ? { usage: k } : {}
371
371
  };
372
372
  }
373
- function y(t) {
373
+ function x(t) {
374
374
  return typeof t == "object" && t !== null && !Array.isArray(t);
375
375
  }
376
- function m(t) {
376
+ function b(t) {
377
377
  return typeof t == "string" ? t : void 0;
378
378
  }
379
- function b(t) {
379
+ function I(t) {
380
380
  return typeof t == "number" ? t : void 0;
381
381
  }
382
- function lt(t) {
383
- if (!y(t)) return;
384
- const e = {}, n = b(t.prompt_tokens);
382
+ function Tt(t) {
383
+ if (!x(t)) return;
384
+ const e = {}, n = I(t.prompt_tokens);
385
385
  n !== void 0 && (e.inputTokens = n);
386
- const o = b(t.completion_tokens);
386
+ const o = I(t.completion_tokens);
387
387
  o !== void 0 && (e.outputTokens = o);
388
- const r = b(t.total_tokens);
388
+ const r = I(t.total_tokens);
389
389
  r !== void 0 && (e.totalTokens = r);
390
390
  const s = t.completion_tokens_details;
391
- if (y(s)) {
392
- const c = b(s.reasoning_tokens);
391
+ if (x(s)) {
392
+ const c = I(s.reasoning_tokens);
393
393
  c !== void 0 && (e.reasoningTokens = c);
394
394
  }
395
- const a = t.prompt_tokens_details;
396
- if (y(a)) {
397
- const c = b(a.cached_tokens);
395
+ const i = t.prompt_tokens_details;
396
+ if (x(i)) {
397
+ const c = I(i.cached_tokens);
398
398
  c !== void 0 && (e.cachedInputTokens = c);
399
399
  }
400
- const i = b(t.cost);
401
- return i !== void 0 && (e.costUsd = i), Object.keys(e).length > 0 ? e : void 0;
400
+ const a = I(t.cost);
401
+ return a !== void 0 && (e.costUsd = a), Object.keys(e).length > 0 ? e : void 0;
402
402
  }
403
- function ft(t, e) {
404
- if (!y(t)) return;
405
- const n = y(t.function) ? t.function : void 0, o = { index: b(t.index) ?? e }, r = m(t.id);
403
+ function vt(t, e) {
404
+ if (!x(t)) return;
405
+ const n = x(t.function) ? t.function : void 0, o = { index: I(t.index) ?? e }, r = b(t.id);
406
406
  r && (o.id = r);
407
- const s = m(n == null ? void 0 : n.name);
407
+ const s = b(n == null ? void 0 : n.name);
408
408
  s && (o.name = s);
409
- const a = m(n == null ? void 0 : n.arguments);
410
- return a !== void 0 && (o.arguments = a), o;
409
+ const i = b(n == null ? void 0 : n.arguments);
410
+ return i !== void 0 && (o.arguments = i), o;
411
411
  }
412
- function pt(t) {
412
+ function _t(t) {
413
413
  let e = "";
414
414
  for (const n of t) {
415
- if (!y(n)) continue;
416
- const o = m(n.text) ?? m(n.summary);
415
+ if (!x(n)) continue;
416
+ const o = b(n.text) ?? b(n.summary);
417
417
  o && (e += o);
418
418
  }
419
419
  return e;
420
420
  }
421
- function $(t, e) {
421
+ function j(t, e) {
422
422
  for (const n of t)
423
- if (y(n) && n[e] !== void 0) return n[e];
423
+ if (x(n) && n[e] !== void 0) return n[e];
424
424
  }
425
- function gt(t, e) {
426
- const n = Array.isArray(t.reasoning_details) ? t.reasoning_details : void 0, o = m(t.reasoning), r = o !== void 0 && o !== "" ? o : void 0, s = n ? pt(n) : void 0, a = n !== void 0 && n.length > 0, i = r ?? s;
427
- if (i === void 0 && !a || (e.reasoning = i ?? "", !a)) return;
425
+ function It(t, e) {
426
+ const n = Array.isArray(t.reasoning_details) ? t.reasoning_details : void 0, o = b(t.reasoning), r = o !== void 0 && o !== "" ? o : void 0, s = n ? _t(n) : void 0, i = n !== void 0 && n.length > 0, a = r ?? s;
427
+ if (a === void 0 && !i || (e.reasoning = a ?? "", !i)) return;
428
428
  e.reasoningRaw = { source: "openai.reasoning_details", payload: n };
429
- const c = b($(n, "index"));
429
+ const c = I(j(n, "index"));
430
430
  c !== void 0 && (e.reasoningIndex = c);
431
- const u = m($(n, "signature"));
431
+ const u = b(j(n, "signature"));
432
432
  u !== void 0 && (e.reasoningSignature = u);
433
433
  }
434
- function ht(t) {
434
+ function At(t) {
435
435
  if (!Array.isArray(t.annotations)) return [];
436
436
  const e = [];
437
437
  for (const n of t.annotations) {
438
- if (!y(n)) continue;
439
- const o = y(n.url_citation) ? n.url_citation : void 0, r = m(o == null ? void 0 : o.url);
438
+ if (!x(n)) continue;
439
+ const o = x(n.url_citation) ? n.url_citation : void 0, r = b(o == null ? void 0 : o.url);
440
440
  if (!r) continue;
441
- const s = { url: r }, a = m(o == null ? void 0 : o.title);
442
- a && (s.title = a);
443
- const i = m(o == null ? void 0 : o.content);
444
- i && (s.snippet = i), e.push(s);
441
+ const s = { url: r }, i = b(o == null ? void 0 : o.title);
442
+ i && (s.title = i);
443
+ const a = b(o == null ? void 0 : o.content);
444
+ a && (s.snippet = a), e.push(s);
445
445
  }
446
446
  return e;
447
447
  }
448
- function yt(t) {
449
- if (!y(t)) return [];
448
+ function Rt(t) {
449
+ if (!x(t)) return [];
450
450
  const e = {}, n = t.error;
451
- if (y(n)) {
452
- const a = m(n.message);
453
- if (a) {
454
- e.error = { message: a };
455
- const i = n.code;
456
- (typeof i == "string" || typeof i == "number") && (e.error.code = i);
451
+ if (x(n)) {
452
+ const i = b(n.message);
453
+ if (i) {
454
+ e.error = { message: i };
455
+ const a = n.code;
456
+ (typeof a == "string" || typeof a == "number") && (e.error.code = a);
457
457
  }
458
458
  }
459
- const o = lt(t.usage);
459
+ const o = Tt(t.usage);
460
460
  o && (e.usage = o);
461
- const r = Array.isArray(t.choices) ? t.choices : [], s = y(r[0]) ? r[0] : void 0;
461
+ const r = Array.isArray(t.choices) ? t.choices : [], s = x(r[0]) ? r[0] : void 0;
462
462
  if (s) {
463
- const a = y(s.delta) ? s.delta : void 0;
464
- if (a) {
465
- const c = m(a.content);
466
- if (c && (e.text = c), gt(a, e), Array.isArray(a.tool_calls) && a.tool_calls.length > 0) {
467
- const l = a.tool_calls.map((p, x) => ft(p, x)).filter((p) => p !== void 0);
468
- l.length > 0 && (e.toolCalls = l);
463
+ const i = x(s.delta) ? s.delta : void 0;
464
+ if (i) {
465
+ const c = b(i.content);
466
+ if (c && (e.text = c), It(i, e), Array.isArray(i.tool_calls) && i.tool_calls.length > 0) {
467
+ const d = i.tool_calls.map((l, p) => vt(l, p)).filter((l) => l !== void 0);
468
+ d.length > 0 && (e.toolCalls = d);
469
469
  }
470
- const u = ht(a);
470
+ const u = At(i);
471
471
  u.length > 0 && (e.sources = u);
472
472
  }
473
- const i = m(s.finish_reason);
474
- i && (e.finishReason = i);
473
+ const a = b(s.finish_reason);
474
+ a && (e.finishReason = a);
475
475
  }
476
476
  return Object.keys(e).length > 0 ? [e] : [];
477
477
  }
478
- const mt = {
478
+ const Ot = {
479
479
  id: "openai.chat-completions",
480
480
  open() {
481
- return { push: yt };
481
+ return { push: Rt };
482
482
  }
483
483
  };
484
- function k(t) {
484
+ function w(t) {
485
485
  return typeof t == "object" && t !== null && !Array.isArray(t);
486
486
  }
487
- function f(t) {
487
+ function g(t) {
488
488
  return typeof t == "string" ? t : void 0;
489
489
  }
490
- function I(t) {
490
+ function R(t) {
491
491
  return typeof t == "number" ? t : void 0;
492
492
  }
493
- function j(t) {
494
- if (!k(t)) return;
495
- const e = {}, n = I(t.input_tokens);
493
+ function W(t) {
494
+ if (!w(t)) return;
495
+ const e = {}, n = R(t.input_tokens);
496
496
  n !== void 0 && (e.inputTokens = n);
497
- const o = I(t.output_tokens);
497
+ const o = R(t.output_tokens);
498
498
  o !== void 0 && (e.outputTokens = o);
499
- const r = I(t.cache_read_input_tokens);
499
+ const r = R(t.cache_read_input_tokens);
500
500
  return r !== void 0 && (e.cachedInputTokens = r), Object.keys(e).length > 0 ? e : void 0;
501
501
  }
502
- function xt(t, e, n) {
503
- const o = I(t.index) ?? 0, r = t.content_block;
504
- if (!k(r)) return [];
505
- switch (f(r.type)) {
502
+ function St(t, e, n) {
503
+ const o = R(t.index) ?? 0, r = t.content_block;
504
+ if (!w(r)) return [];
505
+ switch (g(r.type)) {
506
506
  case "text": {
507
507
  e.set(o, { kind: "text", thinking: "" });
508
- const s = f(r.text);
508
+ const s = g(r.text);
509
509
  return s ? [{ text: s }] : [];
510
510
  }
511
511
  case "thinking": {
512
- const s = f(r.thinking) ?? "";
512
+ const s = g(r.thinking) ?? "";
513
513
  return e.set(o, { kind: "thinking", thinking: s }), [{ reasoning: s, reasoningIndex: o }];
514
514
  }
515
515
  case "redacted_thinking":
@@ -522,28 +522,28 @@ function xt(t, e, n) {
522
522
  ];
523
523
  case "tool_use":
524
524
  case "server_tool_use": {
525
- const s = f(r.id), a = f(r.name);
526
- return e.set(o, { kind: "tool_use", thinking: "" }), s && n.set(s, o), [{ toolCalls: [{ index: o, ...s ? { id: s } : {}, ...a ? { name: a } : {} }] }];
525
+ const s = g(r.id), i = g(r.name);
526
+ return e.set(o, { kind: "tool_use", thinking: "" }), s && n.set(s, o), [{ toolCalls: [{ index: o, ...s ? { id: s } : {}, ...i ? { name: i } : {} }] }];
527
527
  }
528
528
  case "web_search_tool_result": {
529
529
  e.set(o, { kind: "other", thinking: "" });
530
- const s = f(r.tool_use_id), a = s !== void 0 ? n.get(s) : void 0;
531
- if (a === void 0) return [];
532
- const i = r.content;
533
- return k(i) && (f(i.type) ?? "").endsWith("_error") ? [
530
+ const s = g(r.tool_use_id), i = s !== void 0 ? n.get(s) : void 0;
531
+ if (i === void 0) return [];
532
+ const a = r.content;
533
+ return w(a) && (g(a.type) ?? "").endsWith("_error") ? [
534
534
  {
535
535
  toolCalls: [
536
536
  {
537
- index: a,
537
+ index: i,
538
538
  ...s ? { id: s } : {},
539
- outputError: f(i.error_code) ?? "web_search_tool_result_error"
539
+ outputError: g(a.error_code) ?? "web_search_tool_result_error"
540
540
  }
541
541
  ]
542
542
  }
543
543
  ] : [
544
544
  {
545
545
  toolCalls: [
546
- { index: a, ...s ? { id: s } : {}, output: { content: i } }
546
+ { index: i, ...s ? { id: s } : {}, output: { content: a } }
547
547
  ]
548
548
  }
549
549
  ];
@@ -552,40 +552,40 @@ function xt(t, e, n) {
552
552
  return e.set(o, { kind: "other", thinking: "" }), [];
553
553
  }
554
554
  }
555
- function kt(t, e) {
556
- const n = I(t.index) ?? 0, o = t.delta;
557
- if (!k(o)) return [];
558
- switch (f(o.type)) {
555
+ function $t(t, e) {
556
+ const n = R(t.index) ?? 0, o = t.delta;
557
+ if (!w(o)) return [];
558
+ switch (g(o.type)) {
559
559
  case "text_delta": {
560
- const r = f(o.text);
560
+ const r = g(o.text);
561
561
  return r ? [{ text: r }] : [];
562
562
  }
563
563
  case "thinking_delta": {
564
- const r = f(o.thinking) ?? "", s = e.get(n);
564
+ const r = g(o.thinking) ?? "", s = e.get(n);
565
565
  return s && (s.thinking += r), [{ reasoning: r, reasoningIndex: n }];
566
566
  }
567
567
  case "signature_delta": {
568
- const r = f(o.signature) ?? "", s = e.get(n);
568
+ const r = g(o.signature) ?? "", s = e.get(n);
569
569
  return s && (s.signature = (s.signature ?? "") + r), [{ reasoning: "", reasoningIndex: n, reasoningSignature: r }];
570
570
  }
571
571
  case "input_json_delta":
572
- return [{ toolCalls: [{ index: n, arguments: f(o.partial_json) ?? "" }] }];
572
+ return [{ toolCalls: [{ index: n, arguments: g(o.partial_json) ?? "" }] }];
573
573
  case "citations_delta": {
574
574
  const r = o.citation;
575
- if (!k(r)) return [];
576
- const s = {}, a = f(r.url);
577
- a && (s.url = a);
578
- const i = f(r.title);
579
- i && (s.title = i);
580
- const c = f(r.cited_text);
575
+ if (!w(r)) return [];
576
+ const s = {}, i = g(r.url);
577
+ i && (s.url = i);
578
+ const a = g(r.title);
579
+ a && (s.title = a);
580
+ const c = g(r.cited_text);
581
581
  return c && (s.snippet = c), Object.keys(s).length > 0 ? [{ sources: [s] }] : [];
582
582
  }
583
583
  default:
584
584
  return [];
585
585
  }
586
586
  }
587
- function _t(t, e) {
588
- const n = I(t.index) ?? 0, o = e.get(n);
587
+ function Et(t, e) {
588
+ const n = R(t.index) ?? 0, o = e.get(n);
589
589
  if (!o || o.kind !== "thinking") return [];
590
590
  const r = { type: "thinking", thinking: o.thinking };
591
591
  return o.signature !== void 0 && (r.signature = o.signature), [
@@ -596,17 +596,17 @@ function _t(t, e) {
596
596
  }
597
597
  ];
598
598
  }
599
- function vt(t) {
599
+ function Ct(t) {
600
600
  const e = {}, n = t.delta;
601
- if (k(n)) {
602
- const r = f(n.stop_reason);
601
+ if (w(n)) {
602
+ const r = g(n.stop_reason);
603
603
  r && (e.finishReason = r);
604
604
  }
605
- const o = j(t.usage);
605
+ const o = W(t.usage);
606
606
  return o && (e.usage = o), Object.keys(e).length > 0 ? [e] : [];
607
607
  }
608
- function Tt(t) {
609
- const e = t.error, n = k(e) ? f(e.message) : void 0, o = k(e) ? f(e.type) : void 0;
608
+ function Ut(t) {
609
+ const e = t.error, n = w(e) ? g(e.message) : void 0, o = w(e) ? g(e.type) : void 0;
610
610
  return [
611
611
  {
612
612
  error: {
@@ -616,30 +616,30 @@ function Tt(t) {
616
616
  }
617
617
  ];
618
618
  }
619
- const bt = {
619
+ const Ft = {
620
620
  id: "anthropic.messages",
621
621
  open() {
622
622
  const t = /* @__PURE__ */ new Map(), e = /* @__PURE__ */ new Map();
623
623
  return {
624
624
  push(n) {
625
- if (!k(n)) return [];
626
- switch (f(n.type)) {
625
+ if (!w(n)) return [];
626
+ switch (g(n.type)) {
627
627
  case "message_start": {
628
628
  const o = n.message;
629
- if (!k(o)) return [];
630
- const r = j(o.usage);
629
+ if (!w(o)) return [];
630
+ const r = W(o.usage);
631
631
  return r ? [{ usage: r }] : [];
632
632
  }
633
633
  case "content_block_start":
634
- return xt(n, t, e);
634
+ return St(n, t, e);
635
635
  case "content_block_delta":
636
- return kt(n, t);
636
+ return $t(n, t);
637
637
  case "content_block_stop":
638
- return _t(n, t);
638
+ return Et(n, t);
639
639
  case "message_delta":
640
- return vt(n);
640
+ return Ct(n);
641
641
  case "error":
642
- return Tt(n);
642
+ return Ut(n);
643
643
  default:
644
644
  return [];
645
645
  }
@@ -647,20 +647,20 @@ const bt = {
647
647
  };
648
648
  }
649
649
  };
650
- class E extends Error {
650
+ class U extends Error {
651
651
  constructor(n, o, r, s) {
652
- super(It(n, o, r, s));
653
- w(this, "status");
654
- w(this, "statusText");
652
+ super(jt(n, o, r, s));
653
+ A(this, "status");
654
+ A(this, "statusText");
655
655
  /** The response body parsed as JSON, or undefined when it was not JSON (an
656
656
  * HTML error page from a proxy, most often). */
657
- w(this, "body");
657
+ A(this, "body");
658
658
  /** The raw response body, always. */
659
- w(this, "bodyText");
660
- Object.setPrototypeOf(this, E.prototype), this.name = "WireError", this.status = n, this.statusText = o, this.bodyText = r, this.body = s;
659
+ A(this, "bodyText");
660
+ Object.setPrototypeOf(this, U.prototype), this.name = "WireError", this.status = n, this.statusText = o, this.bodyText = r, this.body = s;
661
661
  }
662
662
  }
663
- function wt(t) {
663
+ function Lt(t) {
664
664
  if (typeof t != "object" || t === null) return;
665
665
  const e = t.error;
666
666
  if (typeof e == "string") return e;
@@ -671,16 +671,16 @@ function wt(t) {
671
671
  const n = t.message;
672
672
  return typeof n == "string" ? n : void 0;
673
673
  }
674
- function It(t, e, n, o) {
675
- const r = `Model request failed: HTTP ${t}${e ? ` ${e}` : ""}`, s = wt(o);
674
+ function jt(t, e, n, o) {
675
+ const r = `Model request failed: HTTP ${t}${e ? ` ${e}` : ""}`, s = Lt(o);
676
676
  if (s) return `${r}: ${s}`;
677
- const a = n.trim().slice(0, 200);
678
- return a ? `${r}: ${a}` : r;
677
+ const i = n.trim().slice(0, 200);
678
+ return i ? `${r}: ${i}` : r;
679
679
  }
680
- function Ot(t) {
680
+ function Mt(t) {
681
681
  return typeof t == "object" && t !== null && "ok" in t && "status" in t && "body" in t;
682
682
  }
683
- async function St(t) {
683
+ async function Nt(t) {
684
684
  const e = await t.text().catch(() => "");
685
685
  let n;
686
686
  try {
@@ -688,38 +688,38 @@ async function St(t) {
688
688
  } catch {
689
689
  n = void 0;
690
690
  }
691
- return new E(t.status, t.statusText, e, n);
691
+ return new U(t.status, t.statusText, e, n);
692
692
  }
693
- async function At(t) {
694
- if (!Ot(t)) return t;
695
- if (!t.ok) throw await St(t);
693
+ async function Pt(t) {
694
+ if (!Mt(t)) return t;
695
+ if (!t.ok) throw await Nt(t);
696
696
  if (!t.body)
697
697
  throw new Error(
698
698
  "The model response has no body to stream. Check that the request set stream: true and that nothing between you and the provider buffered it."
699
699
  );
700
700
  return t.body;
701
701
  }
702
- async function M(t, e, n) {
703
- const o = await At(t), r = n.format.open();
702
+ async function q(t, e, n) {
703
+ const o = await Pt(t), r = n.format.open();
704
704
  async function* s() {
705
- for await (const a of L(o))
706
- for (const i of r.push(a)) yield i;
705
+ for await (const i of Z(o))
706
+ for (const a of r.push(i)) yield a;
707
707
  }
708
- return dt(s(), e, n);
708
+ return wt(s(), e, n);
709
709
  }
710
- function Jt(t, e, n = {}) {
711
- return M(t, e, { ...n, format: mt });
710
+ function se(t, e, n = {}) {
711
+ return q(t, e, { ...n, format: Ot });
712
712
  }
713
- function Ft(t, e, n = {}) {
714
- return M(t, e, { ...n, format: bt });
713
+ function ae(t, e, n = {}) {
714
+ return q(t, e, { ...n, format: Ft });
715
715
  }
716
- function Dt(t, e, n) {
716
+ function ue(t, e, n) {
717
717
  t.upsertTool(e, { state: "output-available", output: n });
718
718
  }
719
- function Wt(t, e, n) {
719
+ function ce(t, e, n) {
720
720
  t.upsertTool(e, { state: "output-error", errorText: n });
721
721
  }
722
- function qt(t) {
722
+ function de(t) {
723
723
  let e = "";
724
724
  return {
725
725
  appendText(n) {
@@ -734,165 +734,393 @@ function qt(t) {
734
734
  buffered: () => e
735
735
  };
736
736
  }
737
- class R extends Error {
737
+ const C = [
738
+ { pattern: "image/jpeg", kind: "image" },
739
+ { pattern: "image/png", kind: "image" },
740
+ { pattern: "image/gif", kind: "image" },
741
+ { pattern: "image/webp", kind: "image" },
742
+ { pattern: "application/pdf", kind: "document" },
743
+ { pattern: "text/*", kind: "text" },
744
+ { pattern: "application/json", kind: "text" },
745
+ { pattern: "application/xml", kind: "text" },
746
+ { pattern: "application/x-yaml", kind: "text" },
747
+ { pattern: "application/yaml", kind: "text" }
748
+ ], J = "text/plain", Dt = ["", "application/octet-stream"], F = (t) => t.trim().toLowerCase(), B = (t) => Dt.includes(t === void 0 ? "" : F(t)), Wt = (t) => {
749
+ if (!t.startsWith(".")) return t;
750
+ throw new Error(
751
+ `\`accept\` entry "${t}" is a file extension, and this kit takes media types only. HTML's own accept attribute does take extensions, which is exactly why this throws rather than quietly matching nothing. Use a media type instead -- "text/*" covers source files, "image/*" images, "application/pdf" PDFs, and \`encodableMediaTypes()\` is the full set. You lose nothing by dropping the extension: a file the browser cannot name is decided by decoding its bytes, which is stronger than matching its name.`
752
+ );
753
+ }, qt = (t) => (typeof t == "string" ? t.split(",") : t).map(F).filter((e) => e !== "").map(Wt), M = (t) => {
754
+ const e = t.indexOf("/");
755
+ return e === -1 ? [t, ""] : [t.slice(0, e), t.slice(e + 1)];
756
+ }, S = (t, e) => {
757
+ const [n, o] = M(t), [r, s] = M(e);
758
+ return n !== "*" && n !== r ? !1 : o === "*" || o === s;
759
+ }, Jt = (t, e) => {
760
+ if (S(t, e)) return e;
761
+ if (S(e, t)) return t;
762
+ };
763
+ function le() {
764
+ return C.map((t) => t.pattern);
765
+ }
766
+ function L(t = {}) {
767
+ const e = t.accept === void 0 ? void 0 : qt(t.accept), n = [];
768
+ for (const o of C) {
769
+ if (e === void 0) {
770
+ n.push({ ...o });
771
+ continue;
772
+ }
773
+ for (const r of e) {
774
+ const s = Jt(o.pattern, r);
775
+ s !== void 0 && !n.some((i) => i.pattern === s) && n.push({ pattern: s, kind: o.kind });
776
+ }
777
+ }
778
+ return {
779
+ types: n.map((o) => o.pattern),
780
+ accept: n.map((o) => o.pattern).join(","),
781
+ decide(o) {
782
+ const r = o === void 0 ? "" : F(o);
783
+ if (B(r))
784
+ return n.some((i) => S(i.pattern, J)) ? { status: "undetermined" } : (
785
+ // `unsupported` rather than `filtered`, deliberately: `filtered`
786
+ // claims the kit COULD have encoded this file, and nobody has
787
+ // established what it is. Unread and unnamed, it is not a text
788
+ // file the filter excluded -- it is a file with no known type.
789
+ { status: "unsupported" }
790
+ );
791
+ const s = n.find((i) => S(i.pattern, r));
792
+ return s ? { status: "allowed", kind: s.kind } : C.some((i) => S(i.pattern, r)) ? { status: "filtered" } : { status: "unsupported" };
793
+ }
794
+ };
795
+ }
796
+ const Bt = L(), Ht = /^data:([^;,]*);base64,([\s\S]*)$/, Kt = /^([a-z][a-z0-9+.-]*):/i, N = (t) => t.map((e) => `"${e}"`).join(", ");
797
+ function P(t) {
798
+ try {
799
+ const e = atob(t), n = new Uint8Array(e.length);
800
+ for (let o = 0; o < e.length; o++) n[o] = e.charCodeAt(o);
801
+ return { ok: !0, text: new TextDecoder("utf-8", { fatal: !0 }).decode(n), bytes: e.length };
802
+ } catch {
803
+ return { ok: !1 };
804
+ }
805
+ }
806
+ const D = (t) => t.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/\r/g, "&#13;").replace(/\n/g, "&#10;"), Yt = /<(\/file\s*)>/gi;
807
+ function H(t) {
808
+ const e = D(t.filename ?? "attachment"), n = D(t.mediaType), o = t.text.replace(Yt, "&lt;$1&gt;");
809
+ return `<file name="${e}" type="${n}">
810
+ ${o}
811
+ </file>`;
812
+ }
813
+ function zt(t, e = Bt) {
814
+ var a, c, u;
815
+ if (t.type === "source-document") return { status: "kit-side" };
816
+ const n = t.url;
817
+ if (n === void 0 || n === "")
818
+ return {
819
+ status: "unencodable",
820
+ reason: "it has no `url`, so there are no bytes and no address to send. Set `url` to a `data:` URI (read the File with FileReader.readAsDataURL before you stage it) or to an https URL the provider can fetch."
821
+ };
822
+ let o, r;
823
+ const s = Ht.exec(n);
824
+ if (s) {
825
+ const d = s[1].toLowerCase();
826
+ r = B(d) ? ((a = t.mediaType) == null ? void 0 : a.toLowerCase()) ?? d : d, o = { type: "base64", mediaType: r, data: s[2], dataUri: n };
827
+ } else if (/^https?:\/\//i.test(n)) {
828
+ const d = (c = t.mediaType) == null ? void 0 : c.toLowerCase();
829
+ if (d === void 0 || d === "")
830
+ return {
831
+ status: "unencodable",
832
+ reason: `its \`url\` is remote ("${n}") but it has no \`mediaType\`, so there is no way to tell an image from a document without fetching it -- and this layer does no I/O. Set \`mediaType\` when you stage the attachment.`
833
+ };
834
+ r = d, o = { type: "remote", url: n };
835
+ } else {
836
+ if (n.startsWith("data:"))
837
+ return {
838
+ status: "unencodable",
839
+ reason: "its `url` is a `data:` URI that is not base64-encoded with an explicit media type. Both APIs need `data:<media type>;base64,<data>`."
840
+ };
841
+ {
842
+ const d = (u = Kt.exec(n)) == null ? void 0 : u[1].toLowerCase(), l = d === "blob" ? "a `blob:` URL resolves only inside the browser tab that created it, so a model can never fetch it. Read the File with FileReader.readAsDataURL and stage the `data:` URI instead, or upload it and stage the resulting https URL" : `a "${d ?? n}" URL is not something a provider can fetch. Use a \`data:\` URI or an https URL`;
843
+ return { status: "unencodable", reason: `its \`url\` is "${n}": ${l}.` };
844
+ }
845
+ }
846
+ const i = e.decide(r);
847
+ if (i.status === "undetermined") {
848
+ if (o.type !== "base64")
849
+ return {
850
+ status: "unencodable",
851
+ reason: `it is at a remote URL ("${o.url}") and its media type "${r}" says nothing about the bytes -- that is the label for "arbitrary binary", so it separates an image from a document not at all. Settling it by reading the bytes would need a fetch, and this layer does no I/O. Set \`mediaType\` to what the file actually is when you stage it.`
852
+ };
853
+ const d = P(o.data);
854
+ return d.ok ? {
855
+ status: "encodable",
856
+ file: {
857
+ kind: "text",
858
+ mediaType: J,
859
+ source: o,
860
+ filename: t.filename,
861
+ text: d.text
862
+ }
863
+ } : {
864
+ status: "unencodable",
865
+ reason: `nothing names it -- ${r === "" ? "it carries no media type" : `its media type is "${r}"`}, so the only way to tell what it is was to read it -- and its bytes are not valid UTF-8, so it is binary of some unidentified kind. Neither API has an arbitrary-file block to carry that. Set \`mediaType\` if you know what it is, or hand the file to the model through a tool.`
866
+ };
867
+ }
868
+ if (i.status === "filtered")
869
+ return {
870
+ status: "unencodable",
871
+ reason: `its media type "${r}" is one this kit can encode, but your \`accept\` filter excludes it. The types you allowed are: ${N(e.types)}. Widen \`accept\` to include it, or stop staging it.`
872
+ };
873
+ if (i.status === "unsupported")
874
+ return {
875
+ status: "unencodable",
876
+ reason: `its media type "${r}" is not one either API accepts as message content. Supported: ${N(e.types)}. Extract the content yourself and send it as text, or hand it to the model through a tool.`
877
+ };
878
+ if (i.kind === "text") {
879
+ if (o.type !== "base64")
880
+ return {
881
+ status: "unencodable",
882
+ reason: `it is a text file at a remote URL ("${o.url}"), and text has to ride as text CONTENT -- neither API has an arbitrary-file block to point at a URL with. Reading it here would put I/O in the encoder. Fetch it yourself and stage the \`data:\` URI, or paste the contents as a text part.`
883
+ };
884
+ const d = P(o.data);
885
+ return d.ok ? {
886
+ status: "encodable",
887
+ file: {
888
+ kind: "text",
889
+ mediaType: r,
890
+ source: o,
891
+ filename: t.filename,
892
+ text: d.text
893
+ }
894
+ } : {
895
+ status: "unencodable",
896
+ reason: `its media type "${r}" says text, but its bytes are not valid UTF-8 -- so it is binary wearing a text label, and inlining it would send the model garbage. Send it under its real media type, or extract the text yourself.`
897
+ };
898
+ }
899
+ return {
900
+ status: "encodable",
901
+ file: { kind: i.kind, mediaType: r, source: o, filename: t.filename }
902
+ };
903
+ }
904
+ class $ extends Error {
738
905
  constructor(n, o, r) {
739
906
  super(n);
740
- w(this, "messageId");
741
- w(this, "partIndex");
742
- Object.setPrototypeOf(this, R.prototype), this.name = "WireEncodeError", this.messageId = o, this.partIndex = r;
907
+ A(this, "messageId");
908
+ A(this, "partIndex");
909
+ Object.setPrototypeOf(this, $.prototype), this.name = "WireEncodeError", this.messageId = o, this.partIndex = r;
743
910
  }
744
911
  }
745
- const N = (t) => t.type === "text", Rt = (t) => t.filter(N).map((e) => e.text).join(""), P = (t) => typeof t.toolCallId == "string" && t.toolCallId !== "" && (t.output !== void 0 || t.errorText !== void 0);
746
- function Ct(t) {
912
+ const Gt = (t) => t.type === "text", Xt = (t) => t.filter(Gt).map((e) => e.text).join("");
913
+ function K(t, e, n, o, r, s) {
914
+ const i = zt(t.attachment, r);
915
+ if (i.status === "kit-side") return null;
916
+ const a = (u) => {
917
+ if (o === "skip") return null;
918
+ throw new $(
919
+ `Cannot encode file part ${n} of message "${e}": ${u} Pass { onUnencodableFile: 'skip' } to drop it instead of failing.`,
920
+ e,
921
+ n
922
+ );
923
+ };
924
+ if (i.status === "unencodable") return a(i.reason);
925
+ const c = s(i.file);
926
+ return c.ok ? c.block : a(c.reason);
927
+ }
928
+ const Qt = (t) => t.kind === "text" ? { ok: !0, block: { type: "text", text: H(t) } } : t.kind === "image" ? { ok: !0, block: { type: "image_url", image_url: { url: t.source.type === "base64" ? t.source.dataUri : t.source.url } } } : t.source.type === "remote" ? {
929
+ ok: !1,
930
+ reason: `it is a PDF at a remote URL ("${t.source.url}"), and a chat-completions \`file\` content part carries only \`file_id\` or \`file_data\` -- this wire has no URL form for a document. Fetch it and stage it as a \`data:\` URI, or upload it through the Files API and send \`file_id\` yourself; fetching it HERE would put I/O in the encoder. The Anthropic wire does take a remote PDF, so toAnthropicMessages accepts this same message.`
931
+ } : {
932
+ ok: !0,
933
+ block: {
934
+ type: "file",
935
+ file: {
936
+ ...t.filename !== void 0 ? { filename: t.filename } : {},
937
+ file_data: t.source.dataUri
938
+ }
939
+ }
940
+ }, Vt = (t) => t.kind === "text" ? { ok: !0, block: { type: "text", text: H(t) } } : {
941
+ ok: !0,
942
+ block: {
943
+ type: t.kind === "image" ? "image" : "document",
944
+ source: t.source.type === "base64" ? { type: "base64", media_type: t.source.mediaType, data: t.source.data } : { type: "url", url: t.source.url }
945
+ }
946
+ }, Y = (t) => typeof t.toolCallId == "string" && t.toolCallId !== "" && (t.output !== void 0 || t.errorText !== void 0);
947
+ function Zt(t) {
747
948
  return t.rawInput !== void 0 && t.rawInput !== "" ? t.rawInput : t.input !== void 0 ? JSON.stringify(t.input) : "{}";
748
949
  }
749
- const Et = (t) => ({
950
+ const te = (t) => ({
750
951
  id: t.toolCallId,
751
952
  type: "function",
752
- function: { name: t.type, arguments: Ct(t) }
753
- }), $t = (t) => ({
953
+ function: { name: t.type, arguments: Zt(t) }
954
+ }), ee = (t) => ({
754
955
  role: "tool",
755
956
  tool_call_id: t.toolCallId,
756
957
  name: t.type,
757
958
  content: t.errorText ?? JSON.stringify(t.output)
758
- }), jt = (t) => typeof t == "object" && t !== null && !Array.isArray(t);
759
- function Mt(t) {
959
+ }), ne = (t) => typeof t == "object" && t !== null && !Array.isArray(t);
960
+ function oe(t) {
760
961
  var s;
761
962
  if (((s = t.raw) == null ? void 0 : s.source) !== "openai.reasoning_details") return;
762
963
  const e = t.raw.payload;
763
964
  if (!Array.isArray(e)) return;
764
- const n = e.filter(jt), o = n.filter((a) => a.index === t.index), r = o.length > 0 ? o : n;
965
+ const n = e.filter(ne), o = n.filter((i) => i.index === t.index), r = o.length > 0 ? o : n;
765
966
  return r[r.length - 1];
766
967
  }
767
- function Nt(t) {
768
- const e = Mt(t);
968
+ function re(t) {
969
+ const e = oe(t);
769
970
  if (!e) return;
770
971
  if (e.type === "reasoning.encrypted" || typeof e.data == "string") return e;
771
972
  if (typeof t.signature != "string" || t.signature === "") return;
772
973
  const n = typeof e.type == "string" ? e.type : "reasoning.text", r = { type: n, [n === "reasoning.summary" ? "summary" : "text"]: t.text, signature: t.signature };
773
974
  return typeof e.format == "string" && (r.format = e.format), typeof e.id == "string" && (r.id = e.id), e.index !== void 0 && (r.index = e.index), r;
774
975
  }
775
- function Lt(t, e = {}) {
776
- const n = e.reasoning === "include", o = [];
777
- for (const r of t) {
778
- if (r.role === "user") {
779
- const u = Rt(r.parts);
780
- u !== "" && o.push({ role: "user", content: u });
976
+ function pe(t, e = {}) {
977
+ const n = e.reasoning === "include", o = e.onUnencodableFile ?? "throw", r = L({ accept: e.accept }), s = [];
978
+ for (const i of t) {
979
+ if (i.role === "user") {
980
+ const l = [];
981
+ let p = "", h = !1;
982
+ const k = () => {
983
+ p !== "" && (l.push({ type: "text", text: p }), p = "");
984
+ };
985
+ if (i.parts.forEach((m, y) => {
986
+ if (m.type === "text") {
987
+ p += m.text;
988
+ return;
989
+ }
990
+ if (m.type !== "file") return;
991
+ const T = K(m, i.id, y, o, r, Qt);
992
+ T && (k(), l.push(T), h = !0);
993
+ }), k(), !h) {
994
+ const m = Xt(i.parts);
995
+ m !== "" && s.push({ role: "user", content: m });
996
+ continue;
997
+ }
998
+ s.push({ role: "user", content: l });
781
999
  continue;
782
1000
  }
783
- let s = "", a = [], i = [];
784
- const c = () => {
785
- if (!(s === "" && a.length === 0)) {
786
- o.push({
1001
+ let a = "", c = [], u = [];
1002
+ const d = () => {
1003
+ if (!(a === "" && c.length === 0)) {
1004
+ s.push({
787
1005
  role: "assistant",
788
- content: s === "" ? null : s,
789
- ...i.length > 0 ? { reasoning_details: i } : {},
790
- ...a.length > 0 ? { tool_calls: a.map(Et) } : {}
1006
+ content: a === "" ? null : a,
1007
+ ...u.length > 0 ? { reasoning_details: u } : {},
1008
+ ...c.length > 0 ? { tool_calls: c.map(te) } : {}
791
1009
  });
792
- for (const u of a) o.push($t(u));
793
- s = "", a = [], i = [];
1010
+ for (const l of c) s.push(ee(l));
1011
+ a = "", c = [], u = [];
794
1012
  }
795
1013
  };
796
- for (const u of r.parts) {
797
- if (u.type === "text") {
798
- a.length > 0 && c(), s += u.text;
1014
+ for (const l of i.parts) {
1015
+ if (l.type === "text") {
1016
+ c.length > 0 && d(), a += l.text;
799
1017
  continue;
800
1018
  }
801
- if (u.type === "reasoning") {
1019
+ if (l.type === "reasoning") {
802
1020
  if (!n) continue;
803
- a.length > 0 && c();
804
- const l = Nt(u);
805
- l && i.push(l);
1021
+ c.length > 0 && d();
1022
+ const p = re(l);
1023
+ p && u.push(p);
806
1024
  continue;
807
1025
  }
808
- u.type === "tool" && P(u.tool) && a.push(u.tool);
1026
+ l.type === "tool" && Y(l.tool) && c.push(l.tool);
809
1027
  }
810
- c();
1028
+ d();
811
1029
  }
812
- return o;
1030
+ return s;
813
1031
  }
814
- function Kt(t) {
815
- const e = [], n = (o) => {
816
- const r = e[e.length - 1];
817
- (r == null ? void 0 : r.role) === "user" ? r.content = [...r.content, ...o] : e.push({ role: "user", content: o });
1032
+ function fe(t, e = {}) {
1033
+ const n = e.onUnencodableFile ?? "throw", o = L({ accept: e.accept }), r = [], s = (i) => {
1034
+ const a = r[r.length - 1];
1035
+ (a == null ? void 0 : a.role) === "user" ? a.content = [...a.content, ...i] : r.push({ role: "user", content: i });
818
1036
  };
819
- for (const o of t) {
820
- if (o.role === "user") {
821
- const i = o.parts.filter(N).filter((c) => c.text !== "").map((c) => ({ type: "text", text: c.text }));
822
- i.length > 0 && n(i);
1037
+ for (const i of t) {
1038
+ if (i.role === "user") {
1039
+ const d = [];
1040
+ i.parts.forEach((l, p) => {
1041
+ if (l.type === "text") {
1042
+ l.text !== "" && d.push({ type: "text", text: l.text });
1043
+ return;
1044
+ }
1045
+ if (l.type !== "file") return;
1046
+ const h = K(l, i.id, p, n, o, Vt);
1047
+ h && d.push(h);
1048
+ }), d.length > 0 && s(d);
823
1049
  continue;
824
1050
  }
825
- let r = [], s = [];
826
- const a = () => {
827
- r.length > 0 && e.push({ role: "assistant", content: r }), s.length > 0 && n(s), r = [], s = [];
1051
+ let a = [], c = [];
1052
+ const u = () => {
1053
+ a.length > 0 && r.push({ role: "assistant", content: a }), c.length > 0 && s(c), a = [], c = [];
828
1054
  };
829
- o.parts.forEach((i, c) => {
830
- switch (i.type) {
1055
+ i.parts.forEach((d, l) => {
1056
+ switch (d.type) {
831
1057
  case "reasoning": {
832
- if (!i.raw)
833
- throw new R(
834
- `Cannot encode reasoning part ${c} of message "${o.id}": it has no \`raw\` payload, and Anthropic requires a thinking block to be echoed back verbatim. Rebuilding one from text plus signature is the documented 400. Produce reasoning parts with readAnthropicStream, which attaches the provider's own block, and keep \`raw\` when you persist a message.`,
835
- o.id,
836
- c
1058
+ if (!d.raw)
1059
+ throw new $(
1060
+ `Cannot encode reasoning part ${l} of message "${i.id}": it has no \`raw\` payload, and Anthropic requires a thinking block to be echoed back verbatim. Rebuilding one from text plus signature is the documented 400. Produce reasoning parts with readAnthropicStream, which attaches the provider's own block, and keep \`raw\` when you persist a message.`,
1061
+ i.id,
1062
+ l
837
1063
  );
838
- if (!i.raw.source.startsWith("anthropic."))
839
- throw new R(
840
- `Cannot encode reasoning part ${c} of message "${o.id}": its \`raw\` came from "${i.raw.source}", not from the Anthropic Messages format. Only a payload tagged \`anthropic.\` can be echoed back verbatim. If you are talking to an Anthropic model through an OpenAI-compatible endpoint, use toOpenAIMessages.`,
841
- o.id,
842
- c
1064
+ if (!d.raw.source.startsWith("anthropic."))
1065
+ throw new $(
1066
+ `Cannot encode reasoning part ${l} of message "${i.id}": its \`raw\` came from "${d.raw.source}", not from the Anthropic Messages format. Only a payload tagged \`anthropic.\` can be echoed back verbatim. If you are talking to an Anthropic model through an OpenAI-compatible endpoint, use toOpenAIMessages.`,
1067
+ i.id,
1068
+ l
843
1069
  );
844
- s.length > 0 && a(), r.push(i.raw.payload);
1070
+ c.length > 0 && u(), a.push(d.raw.payload);
845
1071
  break;
846
1072
  }
847
1073
  case "text": {
848
- if (i.text === "") break;
849
- s.length > 0 && a(), r.push({ type: "text", text: i.text });
1074
+ if (d.text === "") break;
1075
+ c.length > 0 && u(), a.push({ type: "text", text: d.text });
850
1076
  break;
851
1077
  }
852
1078
  case "tool": {
853
- const u = i.tool;
854
- if (!P(u)) break;
855
- r.push({
1079
+ const p = d.tool;
1080
+ if (!Y(p)) break;
1081
+ a.push({
856
1082
  type: "tool_use",
857
- id: u.toolCallId,
858
- name: u.type,
859
- input: u.input ?? {}
860
- }), s.push(
861
- u.errorText !== void 0 ? {
1083
+ id: p.toolCallId,
1084
+ name: p.type,
1085
+ input: p.input ?? {}
1086
+ }), c.push(
1087
+ p.errorText !== void 0 ? {
862
1088
  type: "tool_result",
863
- tool_use_id: u.toolCallId,
1089
+ tool_use_id: p.toolCallId,
864
1090
  is_error: !0,
865
- content: u.errorText
1091
+ content: p.errorText
866
1092
  } : {
867
1093
  type: "tool_result",
868
- tool_use_id: u.toolCallId,
869
- content: JSON.stringify(u.output)
1094
+ tool_use_id: p.toolCallId,
1095
+ content: JSON.stringify(p.output)
870
1096
  }
871
1097
  );
872
1098
  break;
873
1099
  }
874
1100
  }
875
- }), a();
1101
+ }), u();
876
1102
  }
877
- return e;
1103
+ return r;
878
1104
  }
879
1105
  export {
880
- R as WireEncodeError,
881
- E as WireError,
882
- bt as anthropicMessagesFormat,
883
- Wt as applyToolFailure,
884
- Dt as applyToolOutput,
885
- qt as bufferText,
886
- dt as consumeModelStream,
887
- it as createToolCallAccumulator,
888
- tt as normalizeStopReason,
889
- mt as openaiChatFormat,
890
- Ft as readAnthropicStream,
891
- M as readModelStream,
892
- Jt as readOpenAIStream,
893
- D as readableToAsyncIterable,
894
- q as sseDataFrames,
895
- L as sseJson,
896
- Kt as toAnthropicMessages,
897
- Lt as toOpenAIMessages
1106
+ $ as WireEncodeError,
1107
+ U as WireError,
1108
+ Ft as anthropicMessagesFormat,
1109
+ ce as applyToolFailure,
1110
+ ue as applyToolOutput,
1111
+ de as bufferText,
1112
+ wt as consumeModelStream,
1113
+ yt as createToolCallAccumulator,
1114
+ le as encodableMediaTypes,
1115
+ lt as normalizeStopReason,
1116
+ Ot as openaiChatFormat,
1117
+ ae as readAnthropicStream,
1118
+ q as readModelStream,
1119
+ se as readOpenAIStream,
1120
+ X as readableToAsyncIterable,
1121
+ L as resolveMediaPolicy,
1122
+ V as sseDataFrames,
1123
+ Z as sseJson,
1124
+ fe as toAnthropicMessages,
1125
+ pe as toOpenAIMessages
898
1126
  };