indusagi 0.1.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 (422) hide show
  1. package/README.md +27 -0
  2. package/dist/agent/agent-loop.d.ts +21 -0
  3. package/dist/agent/agent-loop.d.ts.map +1 -0
  4. package/dist/agent/agent-loop.js +307 -0
  5. package/dist/agent/agent.d.ts +122 -0
  6. package/dist/agent/agent.d.ts.map +1 -0
  7. package/dist/agent/agent.js +347 -0
  8. package/dist/agent/index.d.ts +5 -0
  9. package/dist/agent/index.d.ts.map +1 -0
  10. package/dist/agent/index.js +8 -0
  11. package/dist/agent/proxy.d.ts +85 -0
  12. package/dist/agent/proxy.d.ts.map +1 -0
  13. package/dist/agent/proxy.js +267 -0
  14. package/dist/agent/types.d.ts +178 -0
  15. package/dist/agent/types.d.ts.map +1 -0
  16. package/dist/agent/types.js +1 -0
  17. package/dist/agent.d.ts +2 -0
  18. package/dist/agent.d.ts.map +1 -0
  19. package/dist/agent.js +1 -0
  20. package/dist/ai/api-registry.d.ts +20 -0
  21. package/dist/ai/api-registry.d.ts.map +1 -0
  22. package/dist/ai/api-registry.js +43 -0
  23. package/dist/ai/cli.d.ts +3 -0
  24. package/dist/ai/cli.d.ts.map +1 -0
  25. package/dist/ai/cli.js +115 -0
  26. package/dist/ai/env-api-keys.d.ts +9 -0
  27. package/dist/ai/env-api-keys.d.ts.map +1 -0
  28. package/dist/ai/env-api-keys.js +90 -0
  29. package/dist/ai/index.d.ts +20 -0
  30. package/dist/ai/index.d.ts.map +1 -0
  31. package/dist/ai/index.js +19 -0
  32. package/dist/ai/models.d.ts +21 -0
  33. package/dist/ai/models.d.ts.map +1 -0
  34. package/dist/ai/models.generated.d.ts +11500 -0
  35. package/dist/ai/models.generated.d.ts.map +1 -0
  36. package/dist/ai/models.generated.js +11350 -0
  37. package/dist/ai/models.js +47 -0
  38. package/dist/ai/providers/amazon-bedrock.d.ts +15 -0
  39. package/dist/ai/providers/amazon-bedrock.d.ts.map +1 -0
  40. package/dist/ai/providers/amazon-bedrock.js +510 -0
  41. package/dist/ai/providers/anthropic.d.ts +13 -0
  42. package/dist/ai/providers/anthropic.d.ts.map +1 -0
  43. package/dist/ai/providers/anthropic.js +584 -0
  44. package/dist/ai/providers/azure-openai-responses.d.ts +15 -0
  45. package/dist/ai/providers/azure-openai-responses.d.ts.map +1 -0
  46. package/dist/ai/providers/azure-openai-responses.js +183 -0
  47. package/dist/ai/providers/google-gemini-cli.d.ts +74 -0
  48. package/dist/ai/providers/google-gemini-cli.d.ts.map +1 -0
  49. package/dist/ai/providers/google-gemini-cli.js +807 -0
  50. package/dist/ai/providers/google-shared.d.ts +64 -0
  51. package/dist/ai/providers/google-shared.d.ts.map +1 -0
  52. package/dist/ai/providers/google-shared.js +300 -0
  53. package/dist/ai/providers/google-vertex.d.ts +15 -0
  54. package/dist/ai/providers/google-vertex.d.ts.map +1 -0
  55. package/dist/ai/providers/google-vertex.js +370 -0
  56. package/dist/ai/providers/google.d.ts +13 -0
  57. package/dist/ai/providers/google.d.ts.map +1 -0
  58. package/dist/ai/providers/google.js +351 -0
  59. package/dist/ai/providers/openai-codex-responses.d.ts +9 -0
  60. package/dist/ai/providers/openai-codex-responses.d.ts.map +1 -0
  61. package/dist/ai/providers/openai-codex-responses.js +341 -0
  62. package/dist/ai/providers/openai-completions.d.ts +15 -0
  63. package/dist/ai/providers/openai-completions.d.ts.map +1 -0
  64. package/dist/ai/providers/openai-completions.js +701 -0
  65. package/dist/ai/providers/openai-responses-shared.d.ts +17 -0
  66. package/dist/ai/providers/openai-responses-shared.d.ts.map +1 -0
  67. package/dist/ai/providers/openai-responses-shared.js +423 -0
  68. package/dist/ai/providers/openai-responses.d.ts +13 -0
  69. package/dist/ai/providers/openai-responses.d.ts.map +1 -0
  70. package/dist/ai/providers/openai-responses.js +182 -0
  71. package/dist/ai/providers/register-builtins.d.ts +3 -0
  72. package/dist/ai/providers/register-builtins.d.ts.map +1 -0
  73. package/dist/ai/providers/register-builtins.js +62 -0
  74. package/dist/ai/providers/simple-options.d.ts +8 -0
  75. package/dist/ai/providers/simple-options.d.ts.map +1 -0
  76. package/dist/ai/providers/simple-options.js +31 -0
  77. package/dist/ai/providers/transform-messages.d.ts +8 -0
  78. package/dist/ai/providers/transform-messages.d.ts.map +1 -0
  79. package/dist/ai/providers/transform-messages.js +149 -0
  80. package/dist/ai/stream.d.ts +8 -0
  81. package/dist/ai/stream.d.ts.map +1 -0
  82. package/dist/ai/stream.js +34 -0
  83. package/dist/ai/types.d.ts +234 -0
  84. package/dist/ai/types.d.ts.map +1 -0
  85. package/dist/ai/types.js +1 -0
  86. package/dist/ai/utils/event-stream.d.ts +21 -0
  87. package/dist/ai/utils/event-stream.d.ts.map +1 -0
  88. package/dist/ai/utils/event-stream.js +76 -0
  89. package/dist/ai/utils/json-parse.d.ts +9 -0
  90. package/dist/ai/utils/json-parse.d.ts.map +1 -0
  91. package/dist/ai/utils/json-parse.js +28 -0
  92. package/dist/ai/utils/oauth/anthropic.d.ts +17 -0
  93. package/dist/ai/utils/oauth/anthropic.d.ts.map +1 -0
  94. package/dist/ai/utils/oauth/anthropic.js +103 -0
  95. package/dist/ai/utils/oauth/github-copilot.d.ts +30 -0
  96. package/dist/ai/utils/oauth/github-copilot.d.ts.map +1 -0
  97. package/dist/ai/utils/oauth/github-copilot.js +280 -0
  98. package/dist/ai/utils/oauth/google-antigravity.d.ts +26 -0
  99. package/dist/ai/utils/oauth/google-antigravity.d.ts.map +1 -0
  100. package/dist/ai/utils/oauth/google-antigravity.js +355 -0
  101. package/dist/ai/utils/oauth/google-gemini-cli.d.ts +26 -0
  102. package/dist/ai/utils/oauth/google-gemini-cli.d.ts.map +1 -0
  103. package/dist/ai/utils/oauth/google-gemini-cli.js +461 -0
  104. package/dist/ai/utils/oauth/index.d.ts +50 -0
  105. package/dist/ai/utils/oauth/index.d.ts.map +1 -0
  106. package/dist/ai/utils/oauth/index.js +106 -0
  107. package/dist/ai/utils/oauth/openai-codex.d.ts +34 -0
  108. package/dist/ai/utils/oauth/openai-codex.d.ts.map +1 -0
  109. package/dist/ai/utils/oauth/openai-codex.js +379 -0
  110. package/dist/ai/utils/oauth/pkce.d.ts +13 -0
  111. package/dist/ai/utils/oauth/pkce.d.ts.map +1 -0
  112. package/dist/ai/utils/oauth/pkce.js +30 -0
  113. package/dist/ai/utils/oauth/types.d.ts +47 -0
  114. package/dist/ai/utils/oauth/types.d.ts.map +1 -0
  115. package/dist/ai/utils/oauth/types.js +1 -0
  116. package/dist/ai/utils/overflow.d.ts +51 -0
  117. package/dist/ai/utils/overflow.d.ts.map +1 -0
  118. package/dist/ai/utils/overflow.js +111 -0
  119. package/dist/ai/utils/sanitize-unicode.d.ts +22 -0
  120. package/dist/ai/utils/sanitize-unicode.d.ts.map +1 -0
  121. package/dist/ai/utils/sanitize-unicode.js +25 -0
  122. package/dist/ai/utils/typebox-helpers.d.ts +17 -0
  123. package/dist/ai/utils/typebox-helpers.d.ts.map +1 -0
  124. package/dist/ai/utils/typebox-helpers.js +20 -0
  125. package/dist/ai/utils/validation.d.ts +18 -0
  126. package/dist/ai/utils/validation.d.ts.map +1 -0
  127. package/dist/ai/utils/validation.js +71 -0
  128. package/dist/ai.d.ts +2 -0
  129. package/dist/ai.d.ts.map +1 -0
  130. package/dist/ai.js +1 -0
  131. package/dist/index.d.ts +5 -0
  132. package/dist/index.d.ts.map +1 -0
  133. package/dist/index.js +4 -0
  134. package/dist/tui/autocomplete.d.ts +47 -0
  135. package/dist/tui/autocomplete.d.ts.map +1 -0
  136. package/dist/tui/autocomplete.js +474 -0
  137. package/dist/tui/components/box.d.ts +24 -0
  138. package/dist/tui/components/box.d.ts.map +1 -0
  139. package/dist/tui/components/box.js +100 -0
  140. package/dist/tui/components/cancellable-loader.d.ts +22 -0
  141. package/dist/tui/components/cancellable-loader.d.ts.map +1 -0
  142. package/dist/tui/components/cancellable-loader.js +35 -0
  143. package/dist/tui/components/editor.d.ts +171 -0
  144. package/dist/tui/components/editor.d.ts.map +1 -0
  145. package/dist/tui/components/editor.js +1540 -0
  146. package/dist/tui/components/image.d.ts +28 -0
  147. package/dist/tui/components/image.d.ts.map +1 -0
  148. package/dist/tui/components/image.js +60 -0
  149. package/dist/tui/components/input.d.ts +25 -0
  150. package/dist/tui/components/input.d.ts.map +1 -0
  151. package/dist/tui/components/input.js +297 -0
  152. package/dist/tui/components/loader.d.ts +21 -0
  153. package/dist/tui/components/loader.d.ts.map +1 -0
  154. package/dist/tui/components/loader.js +45 -0
  155. package/dist/tui/components/markdown.d.ts +89 -0
  156. package/dist/tui/components/markdown.d.ts.map +1 -0
  157. package/dist/tui/components/markdown.js +525 -0
  158. package/dist/tui/components/select-list.d.ts +32 -0
  159. package/dist/tui/components/select-list.d.ts.map +1 -0
  160. package/dist/tui/components/select-list.js +147 -0
  161. package/dist/tui/components/settings-list.d.ts +50 -0
  162. package/dist/tui/components/settings-list.d.ts.map +1 -0
  163. package/dist/tui/components/settings-list.js +176 -0
  164. package/dist/tui/components/spacer.d.ts +12 -0
  165. package/dist/tui/components/spacer.d.ts.map +1 -0
  166. package/dist/tui/components/spacer.js +21 -0
  167. package/dist/tui/components/text.d.ts +19 -0
  168. package/dist/tui/components/text.d.ts.map +1 -0
  169. package/dist/tui/components/text.js +80 -0
  170. package/dist/tui/components/truncated-text.d.ts +13 -0
  171. package/dist/tui/components/truncated-text.d.ts.map +1 -0
  172. package/dist/tui/components/truncated-text.js +47 -0
  173. package/dist/tui/editor-component.d.ts +35 -0
  174. package/dist/tui/editor-component.d.ts.map +1 -0
  175. package/dist/tui/editor-component.js +1 -0
  176. package/dist/tui/fuzzy.d.ts +16 -0
  177. package/dist/tui/fuzzy.d.ts.map +1 -0
  178. package/dist/tui/fuzzy.js +106 -0
  179. package/dist/tui/index.d.ts +23 -0
  180. package/dist/tui/index.d.ts.map +1 -0
  181. package/dist/tui/index.js +31 -0
  182. package/dist/tui/keybindings.d.ts +39 -0
  183. package/dist/tui/keybindings.d.ts.map +1 -0
  184. package/dist/tui/keybindings.js +110 -0
  185. package/dist/tui/keys.d.ts +160 -0
  186. package/dist/tui/keys.d.ts.map +1 -0
  187. package/dist/tui/keys.js +939 -0
  188. package/dist/tui/stdin-buffer.d.ts +48 -0
  189. package/dist/tui/stdin-buffer.d.ts.map +1 -0
  190. package/dist/tui/stdin-buffer.js +315 -0
  191. package/dist/tui/terminal-image.d.ts +67 -0
  192. package/dist/tui/terminal-image.d.ts.map +1 -0
  193. package/dist/tui/terminal-image.js +277 -0
  194. package/dist/tui/terminal.d.ts +63 -0
  195. package/dist/tui/terminal.d.ts.map +1 -0
  196. package/dist/tui/terminal.js +174 -0
  197. package/dist/tui/tui.d.ts +191 -0
  198. package/dist/tui/tui.d.ts.map +1 -0
  199. package/dist/tui/tui.js +881 -0
  200. package/dist/tui/utils.d.ts +78 -0
  201. package/dist/tui/utils.d.ts.map +1 -0
  202. package/dist/tui/utils.js +801 -0
  203. package/dist/tui.d.ts +2 -0
  204. package/dist/tui.d.ts.map +1 -0
  205. package/dist/tui.js +1 -0
  206. package/dist/webui/ChatPanel.d.ts +28 -0
  207. package/dist/webui/ChatPanel.d.ts.map +1 -0
  208. package/dist/webui/ChatPanel.js +192 -0
  209. package/dist/webui/components/AgentInterface.d.ts +39 -0
  210. package/dist/webui/components/AgentInterface.d.ts.map +1 -0
  211. package/dist/webui/components/AgentInterface.js +370 -0
  212. package/dist/webui/components/AttachmentTile.d.ts +12 -0
  213. package/dist/webui/components/AttachmentTile.d.ts.map +1 -0
  214. package/dist/webui/components/AttachmentTile.js +110 -0
  215. package/dist/webui/components/ConsoleBlock.d.ts +12 -0
  216. package/dist/webui/components/ConsoleBlock.d.ts.map +1 -0
  217. package/dist/webui/components/ConsoleBlock.js +83 -0
  218. package/dist/webui/components/CustomProviderCard.d.ts +17 -0
  219. package/dist/webui/components/CustomProviderCard.d.ts.map +1 -0
  220. package/dist/webui/components/CustomProviderCard.js +109 -0
  221. package/dist/webui/components/ExpandableSection.d.ts +15 -0
  222. package/dist/webui/components/ExpandableSection.d.ts.map +1 -0
  223. package/dist/webui/components/ExpandableSection.js +62 -0
  224. package/dist/webui/components/Input.d.ts +26 -0
  225. package/dist/webui/components/Input.d.ts.map +1 -0
  226. package/dist/webui/components/Input.js +56 -0
  227. package/dist/webui/components/MessageEditor.d.ts +44 -0
  228. package/dist/webui/components/MessageEditor.d.ts.map +1 -0
  229. package/dist/webui/components/MessageEditor.js +413 -0
  230. package/dist/webui/components/MessageList.d.ts +14 -0
  231. package/dist/webui/components/MessageList.d.ts.map +1 -0
  232. package/dist/webui/components/MessageList.js +103 -0
  233. package/dist/webui/components/Messages.d.ts +94 -0
  234. package/dist/webui/components/Messages.d.ts.map +1 -0
  235. package/dist/webui/components/Messages.js +351 -0
  236. package/dist/webui/components/ProviderKeyInput.d.ts +16 -0
  237. package/dist/webui/components/ProviderKeyInput.d.ts.map +1 -0
  238. package/dist/webui/components/ProviderKeyInput.js +170 -0
  239. package/dist/webui/components/SandboxedIframe.d.ts +85 -0
  240. package/dist/webui/components/SandboxedIframe.d.ts.map +1 -0
  241. package/dist/webui/components/SandboxedIframe.js +510 -0
  242. package/dist/webui/components/StreamingMessageContainer.d.ts +19 -0
  243. package/dist/webui/components/StreamingMessageContainer.d.ts.map +1 -0
  244. package/dist/webui/components/StreamingMessageContainer.js +116 -0
  245. package/dist/webui/components/ThinkingBlock.d.ts +11 -0
  246. package/dist/webui/components/ThinkingBlock.d.ts.map +1 -0
  247. package/dist/webui/components/ThinkingBlock.js +57 -0
  248. package/dist/webui/components/message-renderer-registry.d.ts +12 -0
  249. package/dist/webui/components/message-renderer-registry.d.ts.map +1 -0
  250. package/dist/webui/components/message-renderer-registry.js +11 -0
  251. package/dist/webui/components/sandbox/ArtifactsRuntimeProvider.d.ts +35 -0
  252. package/dist/webui/components/sandbox/ArtifactsRuntimeProvider.d.ts.map +1 -0
  253. package/dist/webui/components/sandbox/ArtifactsRuntimeProvider.js +188 -0
  254. package/dist/webui/components/sandbox/AttachmentsRuntimeProvider.d.ts +17 -0
  255. package/dist/webui/components/sandbox/AttachmentsRuntimeProvider.d.ts.map +1 -0
  256. package/dist/webui/components/sandbox/AttachmentsRuntimeProvider.js +63 -0
  257. package/dist/webui/components/sandbox/ConsoleRuntimeProvider.d.ts +42 -0
  258. package/dist/webui/components/sandbox/ConsoleRuntimeProvider.d.ts.map +1 -0
  259. package/dist/webui/components/sandbox/ConsoleRuntimeProvider.js +160 -0
  260. package/dist/webui/components/sandbox/FileDownloadRuntimeProvider.d.ts +30 -0
  261. package/dist/webui/components/sandbox/FileDownloadRuntimeProvider.d.ts.map +1 -0
  262. package/dist/webui/components/sandbox/FileDownloadRuntimeProvider.js +96 -0
  263. package/dist/webui/components/sandbox/RuntimeMessageBridge.d.ts +19 -0
  264. package/dist/webui/components/sandbox/RuntimeMessageBridge.d.ts.map +1 -0
  265. package/dist/webui/components/sandbox/RuntimeMessageBridge.js +73 -0
  266. package/dist/webui/components/sandbox/RuntimeMessageRouter.d.ts +65 -0
  267. package/dist/webui/components/sandbox/RuntimeMessageRouter.d.ts.map +1 -0
  268. package/dist/webui/components/sandbox/RuntimeMessageRouter.js +167 -0
  269. package/dist/webui/components/sandbox/SandboxRuntimeProvider.d.ts +48 -0
  270. package/dist/webui/components/sandbox/SandboxRuntimeProvider.d.ts.map +1 -0
  271. package/dist/webui/components/sandbox/SandboxRuntimeProvider.js +1 -0
  272. package/dist/webui/dialogs/ApiKeyPromptDialog.d.ts +15 -0
  273. package/dist/webui/dialogs/ApiKeyPromptDialog.d.ts.map +1 -0
  274. package/dist/webui/dialogs/ApiKeyPromptDialog.js +78 -0
  275. package/dist/webui/dialogs/AttachmentOverlay.d.ts +32 -0
  276. package/dist/webui/dialogs/AttachmentOverlay.d.ts.map +1 -0
  277. package/dist/webui/dialogs/AttachmentOverlay.js +575 -0
  278. package/dist/webui/dialogs/CustomProviderDialog.d.ts +25 -0
  279. package/dist/webui/dialogs/CustomProviderDialog.d.ts.map +1 -0
  280. package/dist/webui/dialogs/CustomProviderDialog.js +269 -0
  281. package/dist/webui/dialogs/ModelSelector.d.ts +27 -0
  282. package/dist/webui/dialogs/ModelSelector.d.ts.map +1 -0
  283. package/dist/webui/dialogs/ModelSelector.js +319 -0
  284. package/dist/webui/dialogs/PersistentStorageDialog.d.ts +17 -0
  285. package/dist/webui/dialogs/PersistentStorageDialog.d.ts.map +1 -0
  286. package/dist/webui/dialogs/PersistentStorageDialog.js +146 -0
  287. package/dist/webui/dialogs/ProvidersModelsTab.d.ts +20 -0
  288. package/dist/webui/dialogs/ProvidersModelsTab.d.ts.map +1 -0
  289. package/dist/webui/dialogs/ProvidersModelsTab.js +190 -0
  290. package/dist/webui/dialogs/SessionListDialog.d.ts +19 -0
  291. package/dist/webui/dialogs/SessionListDialog.d.ts.map +1 -0
  292. package/dist/webui/dialogs/SessionListDialog.js +153 -0
  293. package/dist/webui/dialogs/SettingsDialog.d.ts +30 -0
  294. package/dist/webui/dialogs/SettingsDialog.d.ts.map +1 -0
  295. package/dist/webui/dialogs/SettingsDialog.js +228 -0
  296. package/dist/webui/index.d.ts +65 -0
  297. package/dist/webui/index.d.ts.map +1 -0
  298. package/dist/webui/index.js +67 -0
  299. package/dist/webui/prompts/prompts.d.ts +11 -0
  300. package/dist/webui/prompts/prompts.d.ts.map +1 -0
  301. package/dist/webui/prompts/prompts.js +271 -0
  302. package/dist/webui/storage/app-storage.d.ts +33 -0
  303. package/dist/webui/storage/app-storage.d.ts.map +1 -0
  304. package/dist/webui/storage/app-storage.js +37 -0
  305. package/dist/webui/storage/backends/indexeddb-storage-backend.d.ts +27 -0
  306. package/dist/webui/storage/backends/indexeddb-storage-backend.d.ts.map +1 -0
  307. package/dist/webui/storage/backends/indexeddb-storage-backend.js +165 -0
  308. package/dist/webui/storage/store.d.ts +23 -0
  309. package/dist/webui/storage/store.d.ts.map +1 -0
  310. package/dist/webui/storage/store.js +25 -0
  311. package/dist/webui/storage/stores/custom-providers-store.d.ts +25 -0
  312. package/dist/webui/storage/stores/custom-providers-store.d.ts.map +1 -0
  313. package/dist/webui/storage/stores/custom-providers-store.js +34 -0
  314. package/dist/webui/storage/stores/provider-keys-store.d.ts +14 -0
  315. package/dist/webui/storage/stores/provider-keys-store.d.ts.map +1 -0
  316. package/dist/webui/storage/stores/provider-keys-store.js +26 -0
  317. package/dist/webui/storage/stores/sessions-store.d.ts +32 -0
  318. package/dist/webui/storage/stores/sessions-store.d.ts.map +1 -0
  319. package/dist/webui/storage/stores/sessions-store.js +112 -0
  320. package/dist/webui/storage/stores/settings-store.d.ts +14 -0
  321. package/dist/webui/storage/stores/settings-store.d.ts.map +1 -0
  322. package/dist/webui/storage/stores/settings-store.js +27 -0
  323. package/dist/webui/storage/types.d.ts +176 -0
  324. package/dist/webui/storage/types.d.ts.map +1 -0
  325. package/dist/webui/storage/types.js +1 -0
  326. package/dist/webui/tools/artifacts/ArtifactElement.d.ts +9 -0
  327. package/dist/webui/tools/artifacts/ArtifactElement.d.ts.map +1 -0
  328. package/dist/webui/tools/artifacts/ArtifactElement.js +10 -0
  329. package/dist/webui/tools/artifacts/ArtifactPill.d.ts +4 -0
  330. package/dist/webui/tools/artifacts/ArtifactPill.d.ts.map +1 -0
  331. package/dist/webui/tools/artifacts/ArtifactPill.js +22 -0
  332. package/dist/webui/tools/artifacts/Console.d.ts +18 -0
  333. package/dist/webui/tools/artifacts/Console.d.ts.map +1 -0
  334. package/dist/webui/tools/artifacts/Console.js +94 -0
  335. package/dist/webui/tools/artifacts/DocxArtifact.d.ts +22 -0
  336. package/dist/webui/tools/artifacts/DocxArtifact.d.ts.map +1 -0
  337. package/dist/webui/tools/artifacts/DocxArtifact.js +207 -0
  338. package/dist/webui/tools/artifacts/ExcelArtifact.d.ts +24 -0
  339. package/dist/webui/tools/artifacts/ExcelArtifact.d.ts.map +1 -0
  340. package/dist/webui/tools/artifacts/ExcelArtifact.js +215 -0
  341. package/dist/webui/tools/artifacts/GenericArtifact.d.ts +19 -0
  342. package/dist/webui/tools/artifacts/GenericArtifact.d.ts.map +1 -0
  343. package/dist/webui/tools/artifacts/GenericArtifact.js +116 -0
  344. package/dist/webui/tools/artifacts/HtmlArtifact.d.ts +27 -0
  345. package/dist/webui/tools/artifacts/HtmlArtifact.d.ts.map +1 -0
  346. package/dist/webui/tools/artifacts/HtmlArtifact.js +188 -0
  347. package/dist/webui/tools/artifacts/ImageArtifact.d.ts +20 -0
  348. package/dist/webui/tools/artifacts/ImageArtifact.d.ts.map +1 -0
  349. package/dist/webui/tools/artifacts/ImageArtifact.js +119 -0
  350. package/dist/webui/tools/artifacts/MarkdownArtifact.d.ts +19 -0
  351. package/dist/webui/tools/artifacts/MarkdownArtifact.d.ts.map +1 -0
  352. package/dist/webui/tools/artifacts/MarkdownArtifact.js +81 -0
  353. package/dist/webui/tools/artifacts/PdfArtifact.d.ts +25 -0
  354. package/dist/webui/tools/artifacts/PdfArtifact.d.ts.map +1 -0
  355. package/dist/webui/tools/artifacts/PdfArtifact.js +183 -0
  356. package/dist/webui/tools/artifacts/SvgArtifact.d.ts +18 -0
  357. package/dist/webui/tools/artifacts/SvgArtifact.d.ts.map +1 -0
  358. package/dist/webui/tools/artifacts/SvgArtifact.js +77 -0
  359. package/dist/webui/tools/artifacts/TextArtifact.d.ts +19 -0
  360. package/dist/webui/tools/artifacts/TextArtifact.d.ts.map +1 -0
  361. package/dist/webui/tools/artifacts/TextArtifact.js +143 -0
  362. package/dist/webui/tools/artifacts/artifacts-tool-renderer.d.ts +11 -0
  363. package/dist/webui/tools/artifacts/artifacts-tool-renderer.d.ts.map +1 -0
  364. package/dist/webui/tools/artifacts/artifacts-tool-renderer.js +271 -0
  365. package/dist/webui/tools/artifacts/artifacts.d.ts +63 -0
  366. package/dist/webui/tools/artifacts/artifacts.d.ts.map +1 -0
  367. package/dist/webui/tools/artifacts/artifacts.js +658 -0
  368. package/dist/webui/tools/artifacts/index.d.ts +8 -0
  369. package/dist/webui/tools/artifacts/index.d.ts.map +1 -0
  370. package/dist/webui/tools/artifacts/index.js +7 -0
  371. package/dist/webui/tools/extract-document.d.ts +24 -0
  372. package/dist/webui/tools/extract-document.d.ts.map +1 -0
  373. package/dist/webui/tools/extract-document.js +215 -0
  374. package/dist/webui/tools/index.d.ts +16 -0
  375. package/dist/webui/tools/index.d.ts.map +1 -0
  376. package/dist/webui/tools/index.js +32 -0
  377. package/dist/webui/tools/javascript-repl.d.ts +44 -0
  378. package/dist/webui/tools/javascript-repl.d.ts.map +1 -0
  379. package/dist/webui/tools/javascript-repl.js +223 -0
  380. package/dist/webui/tools/renderer-registry.d.ts +23 -0
  381. package/dist/webui/tools/renderer-registry.d.ts.map +1 -0
  382. package/dist/webui/tools/renderer-registry.js +106 -0
  383. package/dist/webui/tools/renderers/BashRenderer.d.ts +10 -0
  384. package/dist/webui/tools/renderers/BashRenderer.d.ts.map +1 -0
  385. package/dist/webui/tools/renderers/BashRenderer.js +41 -0
  386. package/dist/webui/tools/renderers/CalculateRenderer.d.ts +10 -0
  387. package/dist/webui/tools/renderers/CalculateRenderer.d.ts.map +1 -0
  388. package/dist/webui/tools/renderers/CalculateRenderer.js +44 -0
  389. package/dist/webui/tools/renderers/DefaultRenderer.d.ts +6 -0
  390. package/dist/webui/tools/renderers/DefaultRenderer.d.ts.map +1 -0
  391. package/dist/webui/tools/renderers/DefaultRenderer.js +93 -0
  392. package/dist/webui/tools/renderers/GetCurrentTimeRenderer.d.ts +10 -0
  393. package/dist/webui/tools/renderers/GetCurrentTimeRenderer.d.ts.map +1 -0
  394. package/dist/webui/tools/renderers/GetCurrentTimeRenderer.js +71 -0
  395. package/dist/webui/tools/types.d.ts +10 -0
  396. package/dist/webui/tools/types.d.ts.map +1 -0
  397. package/dist/webui/tools/types.js +1 -0
  398. package/dist/webui/utils/attachment-utils.d.ts +19 -0
  399. package/dist/webui/utils/attachment-utils.d.ts.map +1 -0
  400. package/dist/webui/utils/attachment-utils.js +414 -0
  401. package/dist/webui/utils/auth-token.d.ts +3 -0
  402. package/dist/webui/utils/auth-token.d.ts.map +1 -0
  403. package/dist/webui/utils/auth-token.js +18 -0
  404. package/dist/webui/utils/format.d.ts +6 -0
  405. package/dist/webui/utils/format.d.ts.map +1 -0
  406. package/dist/webui/utils/format.js +46 -0
  407. package/dist/webui/utils/i18n.d.ts +636 -0
  408. package/dist/webui/utils/i18n.d.ts.map +1 -0
  409. package/dist/webui/utils/i18n.js +417 -0
  410. package/dist/webui/utils/model-discovery.d.ts +38 -0
  411. package/dist/webui/utils/model-discovery.d.ts.map +1 -0
  412. package/dist/webui/utils/model-discovery.js +242 -0
  413. package/dist/webui/utils/proxy-utils.d.ts +45 -0
  414. package/dist/webui/utils/proxy-utils.d.ts.map +1 -0
  415. package/dist/webui/utils/proxy-utils.js +115 -0
  416. package/dist/webui/utils/test-sessions.d.ts +359 -0
  417. package/dist/webui/utils/test-sessions.d.ts.map +1 -0
  418. package/dist/webui/utils/test-sessions.js +2324 -0
  419. package/dist/webui.d.ts +2 -0
  420. package/dist/webui.d.ts.map +1 -0
  421. package/dist/webui.js +1 -0
  422. package/package.json +105 -0
@@ -0,0 +1,47 @@
1
+ import { MODELS } from "./models.generated.js";
2
+ const modelRegistry = new Map();
3
+ // Initialize registry from MODELS on module load
4
+ for (const [provider, models] of Object.entries(MODELS)) {
5
+ const providerModels = new Map();
6
+ for (const [id, model] of Object.entries(models)) {
7
+ providerModels.set(id, model);
8
+ }
9
+ modelRegistry.set(provider, providerModels);
10
+ }
11
+ export function getModel(provider, modelId) {
12
+ const providerModels = modelRegistry.get(provider);
13
+ return providerModels?.get(modelId);
14
+ }
15
+ export function getProviders() {
16
+ return Array.from(modelRegistry.keys());
17
+ }
18
+ export function getModels(provider) {
19
+ const models = modelRegistry.get(provider);
20
+ return models ? Array.from(models.values()) : [];
21
+ }
22
+ export function calculateCost(model, usage) {
23
+ usage.cost.input = (model.cost.input / 1000000) * usage.input;
24
+ usage.cost.output = (model.cost.output / 1000000) * usage.output;
25
+ usage.cost.cacheRead = (model.cost.cacheRead / 1000000) * usage.cacheRead;
26
+ usage.cost.cacheWrite = (model.cost.cacheWrite / 1000000) * usage.cacheWrite;
27
+ usage.cost.total = usage.cost.input + usage.cost.output + usage.cost.cacheRead + usage.cost.cacheWrite;
28
+ return usage.cost;
29
+ }
30
+ /** Models that support xhigh thinking level */
31
+ const XHIGH_MODELS = new Set(["gpt-5.1-codex-max", "gpt-5.2", "gpt-5.2-codex"]);
32
+ /**
33
+ * Check if a model supports xhigh thinking level.
34
+ * Currently only certain OpenAI Codex models support this.
35
+ */
36
+ export function supportsXhigh(model) {
37
+ return XHIGH_MODELS.has(model.id);
38
+ }
39
+ /**
40
+ * Check if two models are equal by comparing both their id and provider.
41
+ * Returns false if either model is null or undefined.
42
+ */
43
+ export function modelsAreEqual(a, b) {
44
+ if (!a || !b)
45
+ return false;
46
+ return a.id === b.id && a.provider === b.provider;
47
+ }
@@ -0,0 +1,15 @@
1
+ import type { SimpleStreamOptions, StreamFunction, StreamOptions, ThinkingBudgets, ThinkingLevel } from "../types.js";
2
+ export interface BedrockOptions extends StreamOptions {
3
+ region?: string;
4
+ profile?: string;
5
+ toolChoice?: "auto" | "any" | "none" | {
6
+ type: "tool";
7
+ name: string;
8
+ };
9
+ reasoning?: ThinkingLevel;
10
+ thinkingBudgets?: ThinkingBudgets;
11
+ interleavedThinking?: boolean;
12
+ }
13
+ export declare const streamBedrock: StreamFunction<"bedrock-converse-stream", BedrockOptions>;
14
+ export declare const streamSimpleBedrock: StreamFunction<"bedrock-converse-stream", SimpleStreamOptions>;
15
+ //# sourceMappingURL=amazon-bedrock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"amazon-bedrock.d.ts","sourceRoot":"","sources":["../../../src/ai/providers/amazon-bedrock.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAKX,mBAAmB,EAEnB,cAAc,EACd,aAAa,EAEb,eAAe,EAEf,aAAa,EAIb,MAAM,aAAa,CAAC;AAOrB,MAAM,WAAW,cAAe,SAAQ,aAAa;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAEtE,SAAS,CAAC,EAAE,aAAa,CAAC;IAE1B,eAAe,CAAC,EAAE,eAAe,CAAC;IAElC,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAID,eAAO,MAAM,aAAa,EAAE,cAAc,CAAC,yBAAyB,EAAE,cAAc,CAkInF,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,cAAc,CAAC,yBAAyB,EAAE,mBAAmB,CAkC9F,CAAC"}
@@ -0,0 +1,510 @@
1
+ import { BedrockRuntimeClient, StopReason as BedrockStopReason, CachePointType, ConversationRole, ConverseStreamCommand, ImageFormat, ToolResultStatus, } from "@aws-sdk/client-bedrock-runtime";
2
+ import { calculateCost } from "../models.js";
3
+ import { AssistantMessageEventStream } from "../utils/event-stream.js";
4
+ import { parseStreamingJson } from "../utils/json-parse.js";
5
+ import { sanitizeSurrogates } from "../utils/sanitize-unicode.js";
6
+ import { adjustMaxTokensForThinking, buildBaseOptions, clampReasoning } from "./simple-options.js";
7
+ import { transformMessages } from "./transform-messages.js";
8
+ export const streamBedrock = (model, context, options = {}) => {
9
+ const stream = new AssistantMessageEventStream();
10
+ (async () => {
11
+ const output = {
12
+ role: "assistant",
13
+ content: [],
14
+ api: "bedrock-converse-stream",
15
+ provider: model.provider,
16
+ model: model.id,
17
+ usage: {
18
+ input: 0,
19
+ output: 0,
20
+ cacheRead: 0,
21
+ cacheWrite: 0,
22
+ totalTokens: 0,
23
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
24
+ },
25
+ stopReason: "stop",
26
+ timestamp: Date.now(),
27
+ };
28
+ const blocks = output.content;
29
+ const config = {
30
+ region: options.region,
31
+ profile: options.profile,
32
+ };
33
+ // in Node.js/Bun environment only
34
+ if (typeof process !== "undefined" && (process.versions?.node || process.versions?.bun)) {
35
+ config.region = config.region || process.env.AWS_REGION || process.env.AWS_DEFAULT_REGION;
36
+ if (process.env.HTTP_PROXY ||
37
+ process.env.HTTPS_PROXY ||
38
+ process.env.NO_PROXY ||
39
+ process.env.http_proxy ||
40
+ process.env.https_proxy ||
41
+ process.env.no_proxy) {
42
+ const nodeHttpHandler = await import("@smithy/node-http-handler");
43
+ const proxyAgent = await import("proxy-agent");
44
+ const agent = new proxyAgent.ProxyAgent();
45
+ // Bedrock runtime uses NodeHttp2Handler by default since v3.798.0, which is based
46
+ // on `http2` module and has no support for http agent.
47
+ // Use NodeHttpHandler to support http agent.
48
+ config.requestHandler = new nodeHttpHandler.NodeHttpHandler({
49
+ httpAgent: agent,
50
+ httpsAgent: agent,
51
+ });
52
+ }
53
+ }
54
+ config.region = config.region || "us-east-1";
55
+ try {
56
+ const client = new BedrockRuntimeClient(config);
57
+ const commandInput = {
58
+ modelId: model.id,
59
+ messages: convertMessages(context, model),
60
+ system: buildSystemPrompt(context.systemPrompt, model),
61
+ inferenceConfig: { maxTokens: options.maxTokens, temperature: options.temperature },
62
+ toolConfig: convertToolConfig(context.tools, options.toolChoice),
63
+ additionalModelRequestFields: buildAdditionalModelRequestFields(model, options),
64
+ };
65
+ options?.onPayload?.(commandInput);
66
+ const command = new ConverseStreamCommand(commandInput);
67
+ const response = await client.send(command, { abortSignal: options.signal });
68
+ for await (const item of response.stream) {
69
+ if (item.messageStart) {
70
+ if (item.messageStart.role !== ConversationRole.ASSISTANT) {
71
+ throw new Error("Unexpected assistant message start but got user message start instead");
72
+ }
73
+ stream.push({ type: "start", partial: output });
74
+ }
75
+ else if (item.contentBlockStart) {
76
+ handleContentBlockStart(item.contentBlockStart, blocks, output, stream);
77
+ }
78
+ else if (item.contentBlockDelta) {
79
+ handleContentBlockDelta(item.contentBlockDelta, blocks, output, stream);
80
+ }
81
+ else if (item.contentBlockStop) {
82
+ handleContentBlockStop(item.contentBlockStop, blocks, output, stream);
83
+ }
84
+ else if (item.messageStop) {
85
+ output.stopReason = mapStopReason(item.messageStop.stopReason);
86
+ }
87
+ else if (item.metadata) {
88
+ handleMetadata(item.metadata, model, output);
89
+ }
90
+ else if (item.internalServerException) {
91
+ throw new Error(`Internal server error: ${item.internalServerException.message}`);
92
+ }
93
+ else if (item.modelStreamErrorException) {
94
+ throw new Error(`Model stream error: ${item.modelStreamErrorException.message}`);
95
+ }
96
+ else if (item.validationException) {
97
+ throw new Error(`Validation error: ${item.validationException.message}`);
98
+ }
99
+ else if (item.throttlingException) {
100
+ throw new Error(`Throttling error: ${item.throttlingException.message}`);
101
+ }
102
+ else if (item.serviceUnavailableException) {
103
+ throw new Error(`Service unavailable: ${item.serviceUnavailableException.message}`);
104
+ }
105
+ }
106
+ if (options.signal?.aborted) {
107
+ throw new Error("Request was aborted");
108
+ }
109
+ if (output.stopReason === "error" || output.stopReason === "aborted") {
110
+ throw new Error("An unknown error occurred");
111
+ }
112
+ stream.push({ type: "done", reason: output.stopReason, message: output });
113
+ stream.end();
114
+ }
115
+ catch (error) {
116
+ for (const block of output.content) {
117
+ delete block.index;
118
+ delete block.partialJson;
119
+ }
120
+ output.stopReason = options.signal?.aborted ? "aborted" : "error";
121
+ output.errorMessage = error instanceof Error ? error.message : JSON.stringify(error);
122
+ stream.push({ type: "error", reason: output.stopReason, error: output });
123
+ stream.end();
124
+ }
125
+ })();
126
+ return stream;
127
+ };
128
+ export const streamSimpleBedrock = (model, context, options) => {
129
+ const base = buildBaseOptions(model, options, undefined);
130
+ if (!options?.reasoning) {
131
+ return streamBedrock(model, context, { ...base, reasoning: undefined });
132
+ }
133
+ if (model.id.includes("anthropic.claude") || model.id.includes("anthropic/claude")) {
134
+ const adjusted = adjustMaxTokensForThinking(base.maxTokens || 0, model.maxTokens, options.reasoning, options.thinkingBudgets);
135
+ return streamBedrock(model, context, {
136
+ ...base,
137
+ maxTokens: adjusted.maxTokens,
138
+ reasoning: options.reasoning,
139
+ thinkingBudgets: {
140
+ ...(options.thinkingBudgets || {}),
141
+ [clampReasoning(options.reasoning)]: adjusted.thinkingBudget,
142
+ },
143
+ });
144
+ }
145
+ return streamBedrock(model, context, {
146
+ ...base,
147
+ reasoning: options.reasoning,
148
+ thinkingBudgets: options.thinkingBudgets,
149
+ });
150
+ };
151
+ function handleContentBlockStart(event, blocks, output, stream) {
152
+ const index = event.contentBlockIndex;
153
+ const start = event.start;
154
+ if (start?.toolUse) {
155
+ const block = {
156
+ type: "toolCall",
157
+ id: start.toolUse.toolUseId || "",
158
+ name: start.toolUse.name || "",
159
+ arguments: {},
160
+ partialJson: "",
161
+ index,
162
+ };
163
+ output.content.push(block);
164
+ stream.push({ type: "toolcall_start", contentIndex: blocks.length - 1, partial: output });
165
+ }
166
+ }
167
+ function handleContentBlockDelta(event, blocks, output, stream) {
168
+ const contentBlockIndex = event.contentBlockIndex;
169
+ const delta = event.delta;
170
+ let index = blocks.findIndex((b) => b.index === contentBlockIndex);
171
+ let block = blocks[index];
172
+ if (delta?.text !== undefined) {
173
+ // If no text block exists yet, create one, as `handleContentBlockStart` is not sent for text blocks
174
+ if (!block) {
175
+ const newBlock = { type: "text", text: "", index: contentBlockIndex };
176
+ output.content.push(newBlock);
177
+ index = blocks.length - 1;
178
+ block = blocks[index];
179
+ stream.push({ type: "text_start", contentIndex: index, partial: output });
180
+ }
181
+ if (block.type === "text") {
182
+ block.text += delta.text;
183
+ stream.push({ type: "text_delta", contentIndex: index, delta: delta.text, partial: output });
184
+ }
185
+ }
186
+ else if (delta?.toolUse && block?.type === "toolCall") {
187
+ block.partialJson = (block.partialJson || "") + (delta.toolUse.input || "");
188
+ block.arguments = parseStreamingJson(block.partialJson);
189
+ stream.push({ type: "toolcall_delta", contentIndex: index, delta: delta.toolUse.input || "", partial: output });
190
+ }
191
+ else if (delta?.reasoningContent) {
192
+ let thinkingBlock = block;
193
+ let thinkingIndex = index;
194
+ if (!thinkingBlock) {
195
+ const newBlock = { type: "thinking", thinking: "", thinkingSignature: "", index: contentBlockIndex };
196
+ output.content.push(newBlock);
197
+ thinkingIndex = blocks.length - 1;
198
+ thinkingBlock = blocks[thinkingIndex];
199
+ stream.push({ type: "thinking_start", contentIndex: thinkingIndex, partial: output });
200
+ }
201
+ if (thinkingBlock?.type === "thinking") {
202
+ if (delta.reasoningContent.text) {
203
+ thinkingBlock.thinking += delta.reasoningContent.text;
204
+ stream.push({
205
+ type: "thinking_delta",
206
+ contentIndex: thinkingIndex,
207
+ delta: delta.reasoningContent.text,
208
+ partial: output,
209
+ });
210
+ }
211
+ if (delta.reasoningContent.signature) {
212
+ thinkingBlock.thinkingSignature =
213
+ (thinkingBlock.thinkingSignature || "") + delta.reasoningContent.signature;
214
+ }
215
+ }
216
+ }
217
+ }
218
+ function handleMetadata(event, model, output) {
219
+ if (event.usage) {
220
+ output.usage.input = event.usage.inputTokens || 0;
221
+ output.usage.output = event.usage.outputTokens || 0;
222
+ output.usage.cacheRead = event.usage.cacheReadInputTokens || 0;
223
+ output.usage.cacheWrite = event.usage.cacheWriteInputTokens || 0;
224
+ output.usage.totalTokens = event.usage.totalTokens || output.usage.input + output.usage.output;
225
+ calculateCost(model, output.usage);
226
+ }
227
+ }
228
+ function handleContentBlockStop(event, blocks, output, stream) {
229
+ const index = blocks.findIndex((b) => b.index === event.contentBlockIndex);
230
+ const block = blocks[index];
231
+ if (!block)
232
+ return;
233
+ delete block.index;
234
+ switch (block.type) {
235
+ case "text":
236
+ stream.push({ type: "text_end", contentIndex: index, content: block.text, partial: output });
237
+ break;
238
+ case "thinking":
239
+ stream.push({ type: "thinking_end", contentIndex: index, content: block.thinking, partial: output });
240
+ break;
241
+ case "toolCall":
242
+ block.arguments = parseStreamingJson(block.partialJson);
243
+ delete block.partialJson;
244
+ stream.push({ type: "toolcall_end", contentIndex: index, toolCall: block, partial: output });
245
+ break;
246
+ }
247
+ }
248
+ /**
249
+ * Check if the model supports prompt caching.
250
+ * Supported: Claude 3.5 Haiku, Claude 3.7 Sonnet, Claude 4.x models
251
+ */
252
+ function supportsPromptCaching(model) {
253
+ const id = model.id.toLowerCase();
254
+ // Claude 4.x models (opus-4, sonnet-4, haiku-4)
255
+ if (id.includes("claude") && (id.includes("-4-") || id.includes("-4.")))
256
+ return true;
257
+ // Claude 3.7 Sonnet
258
+ if (id.includes("claude-3-7-sonnet"))
259
+ return true;
260
+ // Claude 3.5 Haiku
261
+ if (id.includes("claude-3-5-haiku"))
262
+ return true;
263
+ return false;
264
+ }
265
+ /**
266
+ * Check if the model supports thinking signatures in reasoningContent.
267
+ * Only Anthropic Claude models support the signature field.
268
+ * Other models (OpenAI, Qwen, Minimax, Moonshot, etc.) reject it with:
269
+ * "This model doesn't support the reasoningContent.reasoningText.signature field"
270
+ */
271
+ function supportsThinkingSignature(model) {
272
+ const id = model.id.toLowerCase();
273
+ return id.includes("anthropic.claude") || id.includes("anthropic/claude");
274
+ }
275
+ function buildSystemPrompt(systemPrompt, model) {
276
+ if (!systemPrompt)
277
+ return undefined;
278
+ const blocks = [{ text: sanitizeSurrogates(systemPrompt) }];
279
+ // Add cache point for supported Claude models
280
+ if (supportsPromptCaching(model)) {
281
+ blocks.push({ cachePoint: { type: CachePointType.DEFAULT } });
282
+ }
283
+ return blocks;
284
+ }
285
+ function normalizeToolCallId(id) {
286
+ const sanitized = id.replace(/[^a-zA-Z0-9_-]/g, "_");
287
+ return sanitized.length > 64 ? sanitized.slice(0, 64) : sanitized;
288
+ }
289
+ function convertMessages(context, model) {
290
+ const result = [];
291
+ const transformedMessages = transformMessages(context.messages, model, normalizeToolCallId);
292
+ for (let i = 0; i < transformedMessages.length; i++) {
293
+ const m = transformedMessages[i];
294
+ switch (m.role) {
295
+ case "user":
296
+ result.push({
297
+ role: ConversationRole.USER,
298
+ content: typeof m.content === "string"
299
+ ? [{ text: sanitizeSurrogates(m.content) }]
300
+ : m.content.map((c) => {
301
+ switch (c.type) {
302
+ case "text":
303
+ return { text: sanitizeSurrogates(c.text) };
304
+ case "image":
305
+ return { image: createImageBlock(c.mimeType, c.data) };
306
+ default:
307
+ throw new Error("Unknown user content type");
308
+ }
309
+ }),
310
+ });
311
+ break;
312
+ case "assistant": {
313
+ // Skip assistant messages with empty content (e.g., from aborted requests)
314
+ // Bedrock rejects messages with empty content arrays
315
+ if (m.content.length === 0) {
316
+ continue;
317
+ }
318
+ const contentBlocks = [];
319
+ for (const c of m.content) {
320
+ switch (c.type) {
321
+ case "text":
322
+ // Skip empty text blocks
323
+ if (c.text.trim().length === 0)
324
+ continue;
325
+ contentBlocks.push({ text: sanitizeSurrogates(c.text) });
326
+ break;
327
+ case "toolCall":
328
+ contentBlocks.push({
329
+ toolUse: { toolUseId: c.id, name: c.name, input: c.arguments },
330
+ });
331
+ break;
332
+ case "thinking":
333
+ // Skip empty thinking blocks
334
+ if (c.thinking.trim().length === 0)
335
+ continue;
336
+ // Only Anthropic models support the signature field in reasoningText.
337
+ // For other models, we omit the signature to avoid errors like:
338
+ // "This model doesn't support the reasoningContent.reasoningText.signature field"
339
+ if (supportsThinkingSignature(model)) {
340
+ contentBlocks.push({
341
+ reasoningContent: {
342
+ reasoningText: { text: sanitizeSurrogates(c.thinking), signature: c.thinkingSignature },
343
+ },
344
+ });
345
+ }
346
+ else {
347
+ contentBlocks.push({
348
+ reasoningContent: {
349
+ reasoningText: { text: sanitizeSurrogates(c.thinking) },
350
+ },
351
+ });
352
+ }
353
+ break;
354
+ default:
355
+ throw new Error("Unknown assistant content type");
356
+ }
357
+ }
358
+ // Skip if all content blocks were filtered out
359
+ if (contentBlocks.length === 0) {
360
+ continue;
361
+ }
362
+ result.push({
363
+ role: ConversationRole.ASSISTANT,
364
+ content: contentBlocks,
365
+ });
366
+ break;
367
+ }
368
+ case "toolResult": {
369
+ // Collect all consecutive toolResult messages into a single user message
370
+ // Bedrock requires all tool results to be in one message
371
+ const toolResults = [];
372
+ // Add current tool result with all content blocks combined
373
+ toolResults.push({
374
+ toolResult: {
375
+ toolUseId: m.toolCallId,
376
+ content: m.content.map((c) => c.type === "image"
377
+ ? { image: createImageBlock(c.mimeType, c.data) }
378
+ : { text: sanitizeSurrogates(c.text) }),
379
+ status: m.isError ? ToolResultStatus.ERROR : ToolResultStatus.SUCCESS,
380
+ },
381
+ });
382
+ // Look ahead for consecutive toolResult messages
383
+ let j = i + 1;
384
+ while (j < transformedMessages.length && transformedMessages[j].role === "toolResult") {
385
+ const nextMsg = transformedMessages[j];
386
+ toolResults.push({
387
+ toolResult: {
388
+ toolUseId: nextMsg.toolCallId,
389
+ content: nextMsg.content.map((c) => c.type === "image"
390
+ ? { image: createImageBlock(c.mimeType, c.data) }
391
+ : { text: sanitizeSurrogates(c.text) }),
392
+ status: nextMsg.isError ? ToolResultStatus.ERROR : ToolResultStatus.SUCCESS,
393
+ },
394
+ });
395
+ j++;
396
+ }
397
+ // Skip the messages we've already processed
398
+ i = j - 1;
399
+ result.push({
400
+ role: ConversationRole.USER,
401
+ content: toolResults,
402
+ });
403
+ break;
404
+ }
405
+ default:
406
+ throw new Error("Unknown message role");
407
+ }
408
+ }
409
+ // Add cache point to the last user message for supported Claude models
410
+ if (supportsPromptCaching(model) && result.length > 0) {
411
+ const lastMessage = result[result.length - 1];
412
+ if (lastMessage.role === ConversationRole.USER && lastMessage.content) {
413
+ lastMessage.content.push({ cachePoint: { type: CachePointType.DEFAULT } });
414
+ }
415
+ }
416
+ return result;
417
+ }
418
+ function convertToolConfig(tools, toolChoice) {
419
+ if (!tools?.length || toolChoice === "none")
420
+ return undefined;
421
+ const bedrockTools = tools.map((tool) => ({
422
+ toolSpec: {
423
+ name: tool.name,
424
+ description: tool.description,
425
+ inputSchema: { json: tool.parameters },
426
+ },
427
+ }));
428
+ let bedrockToolChoice;
429
+ switch (toolChoice) {
430
+ case "auto":
431
+ bedrockToolChoice = { auto: {} };
432
+ break;
433
+ case "any":
434
+ bedrockToolChoice = { any: {} };
435
+ break;
436
+ default:
437
+ if (toolChoice?.type === "tool") {
438
+ bedrockToolChoice = { tool: { name: toolChoice.name } };
439
+ }
440
+ }
441
+ return { tools: bedrockTools, toolChoice: bedrockToolChoice };
442
+ }
443
+ function mapStopReason(reason) {
444
+ switch (reason) {
445
+ case BedrockStopReason.END_TURN:
446
+ case BedrockStopReason.STOP_SEQUENCE:
447
+ return "stop";
448
+ case BedrockStopReason.MAX_TOKENS:
449
+ case BedrockStopReason.MODEL_CONTEXT_WINDOW_EXCEEDED:
450
+ return "length";
451
+ case BedrockStopReason.TOOL_USE:
452
+ return "toolUse";
453
+ default:
454
+ return "error";
455
+ }
456
+ }
457
+ function buildAdditionalModelRequestFields(model, options) {
458
+ if (!options.reasoning || !model.reasoning) {
459
+ return undefined;
460
+ }
461
+ if (model.id.includes("anthropic.claude")) {
462
+ const defaultBudgets = {
463
+ minimal: 1024,
464
+ low: 2048,
465
+ medium: 8192,
466
+ high: 16384,
467
+ xhigh: 16384, // Claude doesn't support xhigh, clamp to high
468
+ };
469
+ // Custom budgets override defaults (xhigh not in ThinkingBudgets, use high)
470
+ const level = options.reasoning === "xhigh" ? "high" : options.reasoning;
471
+ const budget = options.thinkingBudgets?.[level] ?? defaultBudgets[options.reasoning];
472
+ const result = {
473
+ thinking: {
474
+ type: "enabled",
475
+ budget_tokens: budget,
476
+ },
477
+ };
478
+ if (options.interleavedThinking) {
479
+ result.anthropic_beta = ["interleaved-thinking-2025-05-14"];
480
+ }
481
+ return result;
482
+ }
483
+ return undefined;
484
+ }
485
+ function createImageBlock(mimeType, data) {
486
+ let format;
487
+ switch (mimeType) {
488
+ case "image/jpeg":
489
+ case "image/jpg":
490
+ format = ImageFormat.JPEG;
491
+ break;
492
+ case "image/png":
493
+ format = ImageFormat.PNG;
494
+ break;
495
+ case "image/gif":
496
+ format = ImageFormat.GIF;
497
+ break;
498
+ case "image/webp":
499
+ format = ImageFormat.WEBP;
500
+ break;
501
+ default:
502
+ throw new Error(`Unknown image type: ${mimeType}`);
503
+ }
504
+ const binaryString = atob(data);
505
+ const bytes = new Uint8Array(binaryString.length);
506
+ for (let i = 0; i < binaryString.length; i++) {
507
+ bytes[i] = binaryString.charCodeAt(i);
508
+ }
509
+ return { source: { bytes }, format };
510
+ }
@@ -0,0 +1,13 @@
1
+ import type { SimpleStreamOptions, StreamFunction, StreamOptions } from "../types.js";
2
+ export interface AnthropicOptions extends StreamOptions {
3
+ thinkingEnabled?: boolean;
4
+ thinkingBudgetTokens?: number;
5
+ interleavedThinking?: boolean;
6
+ toolChoice?: "auto" | "any" | "none" | {
7
+ type: "tool";
8
+ name: string;
9
+ };
10
+ }
11
+ export declare const streamAnthropic: StreamFunction<"anthropic-messages", AnthropicOptions>;
12
+ export declare const streamSimpleAnthropic: StreamFunction<"anthropic-messages", SimpleStreamOptions>;
13
+ //# sourceMappingURL=anthropic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/ai/providers/anthropic.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAOX,mBAAmB,EAEnB,cAAc,EACd,aAAa,EAMb,MAAM,aAAa,CAAC;AAmGrB,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACtD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACtE;AAYD,eAAO,MAAM,eAAe,EAAE,cAAc,CAAC,oBAAoB,EAAE,gBAAgB,CAqMlF,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,cAAc,CAAC,oBAAoB,EAAE,mBAAmB,CA4B3F,CAAC"}