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,267 @@
1
+ /**
2
+ * Proxy stream function for apps that route LLM calls through a server.
3
+ * The server manages auth and proxies requests to LLM providers.
4
+ */
5
+ // Internal import for JSON parsing utility
6
+ import { EventStream, parseStreamingJson, } from "../ai/index.js";
7
+ // Create stream class matching ProxyMessageEventStream
8
+ class ProxyMessageEventStream extends EventStream {
9
+ constructor() {
10
+ super((event) => event.type === "done" || event.type === "error", (event) => {
11
+ if (event.type === "done")
12
+ return event.message;
13
+ if (event.type === "error")
14
+ return event.error;
15
+ throw new Error("Unexpected event type");
16
+ });
17
+ }
18
+ }
19
+ /**
20
+ * Stream function that proxies through a server instead of calling LLM providers directly.
21
+ * The server strips the partial field from delta events to reduce bandwidth.
22
+ * We reconstruct the partial message client-side.
23
+ *
24
+ * Use this as the `streamFn` option when creating an Agent that needs to go through a proxy.
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * const agent = new Agent({
29
+ * streamFn: (model, context, options) =>
30
+ * streamProxy(model, context, {
31
+ * ...options,
32
+ * authToken: await getAuthToken(),
33
+ * proxyUrl: "https://genai.example.com",
34
+ * }),
35
+ * });
36
+ * ```
37
+ */
38
+ export function streamProxy(model, context, options) {
39
+ const stream = new ProxyMessageEventStream();
40
+ (async () => {
41
+ // Initialize the partial message that we'll build up from events
42
+ const partial = {
43
+ role: "assistant",
44
+ stopReason: "stop",
45
+ content: [],
46
+ api: model.api,
47
+ provider: model.provider,
48
+ model: model.id,
49
+ usage: {
50
+ input: 0,
51
+ output: 0,
52
+ cacheRead: 0,
53
+ cacheWrite: 0,
54
+ totalTokens: 0,
55
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },
56
+ },
57
+ timestamp: Date.now(),
58
+ };
59
+ let reader;
60
+ const abortHandler = () => {
61
+ if (reader) {
62
+ reader.cancel("Request aborted by user").catch(() => { });
63
+ }
64
+ };
65
+ if (options.signal) {
66
+ options.signal.addEventListener("abort", abortHandler);
67
+ }
68
+ try {
69
+ const response = await fetch(`${options.proxyUrl}/api/stream`, {
70
+ method: "POST",
71
+ headers: {
72
+ Authorization: `Bearer ${options.authToken}`,
73
+ "Content-Type": "application/json",
74
+ },
75
+ body: JSON.stringify({
76
+ model,
77
+ context,
78
+ options: {
79
+ temperature: options.temperature,
80
+ maxTokens: options.maxTokens,
81
+ reasoning: options.reasoning,
82
+ },
83
+ }),
84
+ signal: options.signal,
85
+ });
86
+ if (!response.ok) {
87
+ let errorMessage = `Proxy error: ${response.status} ${response.statusText}`;
88
+ try {
89
+ const errorData = (await response.json());
90
+ if (errorData.error) {
91
+ errorMessage = `Proxy error: ${errorData.error}`;
92
+ }
93
+ }
94
+ catch {
95
+ // Couldn't parse error response
96
+ }
97
+ throw new Error(errorMessage);
98
+ }
99
+ reader = response.body.getReader();
100
+ const decoder = new TextDecoder();
101
+ let buffer = "";
102
+ while (true) {
103
+ const { done, value } = await reader.read();
104
+ if (done)
105
+ break;
106
+ if (options.signal?.aborted) {
107
+ throw new Error("Request aborted by user");
108
+ }
109
+ buffer += decoder.decode(value, { stream: true });
110
+ const lines = buffer.split("\n");
111
+ buffer = lines.pop() || "";
112
+ for (const line of lines) {
113
+ if (line.startsWith("data: ")) {
114
+ const data = line.slice(6).trim();
115
+ if (data) {
116
+ const proxyEvent = JSON.parse(data);
117
+ const event = processProxyEvent(proxyEvent, partial);
118
+ if (event) {
119
+ stream.push(event);
120
+ }
121
+ }
122
+ }
123
+ }
124
+ }
125
+ if (options.signal?.aborted) {
126
+ throw new Error("Request aborted by user");
127
+ }
128
+ stream.end();
129
+ }
130
+ catch (error) {
131
+ const errorMessage = error instanceof Error ? error.message : String(error);
132
+ const reason = options.signal?.aborted ? "aborted" : "error";
133
+ partial.stopReason = reason;
134
+ partial.errorMessage = errorMessage;
135
+ stream.push({
136
+ type: "error",
137
+ reason,
138
+ error: partial,
139
+ });
140
+ stream.end();
141
+ }
142
+ finally {
143
+ if (options.signal) {
144
+ options.signal.removeEventListener("abort", abortHandler);
145
+ }
146
+ }
147
+ })();
148
+ return stream;
149
+ }
150
+ /**
151
+ * Process a proxy event and update the partial message.
152
+ */
153
+ function processProxyEvent(proxyEvent, partial) {
154
+ switch (proxyEvent.type) {
155
+ case "start":
156
+ return { type: "start", partial };
157
+ case "text_start":
158
+ partial.content[proxyEvent.contentIndex] = { type: "text", text: "" };
159
+ return { type: "text_start", contentIndex: proxyEvent.contentIndex, partial };
160
+ case "text_delta": {
161
+ const content = partial.content[proxyEvent.contentIndex];
162
+ if (content?.type === "text") {
163
+ content.text += proxyEvent.delta;
164
+ return {
165
+ type: "text_delta",
166
+ contentIndex: proxyEvent.contentIndex,
167
+ delta: proxyEvent.delta,
168
+ partial,
169
+ };
170
+ }
171
+ throw new Error("Received text_delta for non-text content");
172
+ }
173
+ case "text_end": {
174
+ const content = partial.content[proxyEvent.contentIndex];
175
+ if (content?.type === "text") {
176
+ content.textSignature = proxyEvent.contentSignature;
177
+ return {
178
+ type: "text_end",
179
+ contentIndex: proxyEvent.contentIndex,
180
+ content: content.text,
181
+ partial,
182
+ };
183
+ }
184
+ throw new Error("Received text_end for non-text content");
185
+ }
186
+ case "thinking_start":
187
+ partial.content[proxyEvent.contentIndex] = { type: "thinking", thinking: "" };
188
+ return { type: "thinking_start", contentIndex: proxyEvent.contentIndex, partial };
189
+ case "thinking_delta": {
190
+ const content = partial.content[proxyEvent.contentIndex];
191
+ if (content?.type === "thinking") {
192
+ content.thinking += proxyEvent.delta;
193
+ return {
194
+ type: "thinking_delta",
195
+ contentIndex: proxyEvent.contentIndex,
196
+ delta: proxyEvent.delta,
197
+ partial,
198
+ };
199
+ }
200
+ throw new Error("Received thinking_delta for non-thinking content");
201
+ }
202
+ case "thinking_end": {
203
+ const content = partial.content[proxyEvent.contentIndex];
204
+ if (content?.type === "thinking") {
205
+ content.thinkingSignature = proxyEvent.contentSignature;
206
+ return {
207
+ type: "thinking_end",
208
+ contentIndex: proxyEvent.contentIndex,
209
+ content: content.thinking,
210
+ partial,
211
+ };
212
+ }
213
+ throw new Error("Received thinking_end for non-thinking content");
214
+ }
215
+ case "toolcall_start":
216
+ partial.content[proxyEvent.contentIndex] = {
217
+ type: "toolCall",
218
+ id: proxyEvent.id,
219
+ name: proxyEvent.toolName,
220
+ arguments: {},
221
+ partialJson: "",
222
+ };
223
+ return { type: "toolcall_start", contentIndex: proxyEvent.contentIndex, partial };
224
+ case "toolcall_delta": {
225
+ const content = partial.content[proxyEvent.contentIndex];
226
+ if (content?.type === "toolCall") {
227
+ content.partialJson += proxyEvent.delta;
228
+ content.arguments = parseStreamingJson(content.partialJson) || {};
229
+ partial.content[proxyEvent.contentIndex] = { ...content }; // Trigger reactivity
230
+ return {
231
+ type: "toolcall_delta",
232
+ contentIndex: proxyEvent.contentIndex,
233
+ delta: proxyEvent.delta,
234
+ partial,
235
+ };
236
+ }
237
+ throw new Error("Received toolcall_delta for non-toolCall content");
238
+ }
239
+ case "toolcall_end": {
240
+ const content = partial.content[proxyEvent.contentIndex];
241
+ if (content?.type === "toolCall") {
242
+ delete content.partialJson;
243
+ return {
244
+ type: "toolcall_end",
245
+ contentIndex: proxyEvent.contentIndex,
246
+ toolCall: content,
247
+ partial,
248
+ };
249
+ }
250
+ return undefined;
251
+ }
252
+ case "done":
253
+ partial.stopReason = proxyEvent.reason;
254
+ partial.usage = proxyEvent.usage;
255
+ return { type: "done", reason: proxyEvent.reason, message: partial };
256
+ case "error":
257
+ partial.stopReason = proxyEvent.reason;
258
+ partial.errorMessage = proxyEvent.errorMessage;
259
+ partial.usage = proxyEvent.usage;
260
+ return { type: "error", reason: proxyEvent.reason, error: partial };
261
+ default: {
262
+ const _exhaustiveCheck = proxyEvent;
263
+ console.warn(`Unhandled proxy event type: ${proxyEvent.type}`);
264
+ return undefined;
265
+ }
266
+ }
267
+ }
@@ -0,0 +1,178 @@
1
+ import type { AssistantMessageEvent, ImageContent, Message, Model, SimpleStreamOptions, streamSimple, TextContent, Tool, ToolResultMessage } from "../ai/index.js";
2
+ import type { Static, TSchema } from "@sinclair/typebox";
3
+ /** Stream function - can return sync or Promise for async config lookup */
4
+ export type StreamFn = (...args: Parameters<typeof streamSimple>) => ReturnType<typeof streamSimple> | Promise<ReturnType<typeof streamSimple>>;
5
+ /**
6
+ * Configuration for the agent loop.
7
+ */
8
+ export interface AgentLoopConfig extends SimpleStreamOptions {
9
+ model: Model<any>;
10
+ /**
11
+ * Converts AgentMessage[] to LLM-compatible Message[] before each LLM call.
12
+ *
13
+ * Each AgentMessage must be converted to a UserMessage, AssistantMessage, or ToolResultMessage
14
+ * that the LLM can understand. AgentMessages that cannot be converted (e.g., UI-only notifications,
15
+ * status messages) should be filtered out.
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * convertToLlm: (messages) => messages.flatMap(m => {
20
+ * if (m.role === "custom") {
21
+ * // Convert custom message to user message
22
+ * return [{ role: "user", content: m.content, timestamp: m.timestamp }];
23
+ * }
24
+ * if (m.role === "notification") {
25
+ * // Filter out UI-only messages
26
+ * return [];
27
+ * }
28
+ * // Pass through standard LLM messages
29
+ * return [m];
30
+ * })
31
+ * ```
32
+ */
33
+ convertToLlm: (messages: AgentMessage[]) => Message[] | Promise<Message[]>;
34
+ /**
35
+ * Optional transform applied to the context before `convertToLlm`.
36
+ *
37
+ * Use this for operations that work at the AgentMessage level:
38
+ * - Context window management (pruning old messages)
39
+ * - Injecting context from external sources
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * transformContext: async (messages) => {
44
+ * if (estimateTokens(messages) > MAX_TOKENS) {
45
+ * return pruneOldMessages(messages);
46
+ * }
47
+ * return messages;
48
+ * }
49
+ * ```
50
+ */
51
+ transformContext?: (messages: AgentMessage[], signal?: AbortSignal) => Promise<AgentMessage[]>;
52
+ /**
53
+ * Resolves an API key dynamically for each LLM call.
54
+ *
55
+ * Useful for short-lived OAuth tokens (e.g., GitHub Copilot) that may expire
56
+ * during long-running tool execution phases.
57
+ */
58
+ getApiKey?: (provider: string) => Promise<string | undefined> | string | undefined;
59
+ /**
60
+ * Returns steering messages to inject into the conversation mid-run.
61
+ *
62
+ * Called after each tool execution to check for user interruptions.
63
+ * If messages are returned, remaining tool calls are skipped and
64
+ * these messages are added to the context before the next LLM call.
65
+ *
66
+ * Use this for "steering" the agent while it's working.
67
+ */
68
+ getSteeringMessages?: () => Promise<AgentMessage[]>;
69
+ /**
70
+ * Returns follow-up messages to process after the agent would otherwise stop.
71
+ *
72
+ * Called when the agent has no more tool calls and no steering messages.
73
+ * If messages are returned, they're added to the context and the agent
74
+ * continues with another turn.
75
+ *
76
+ * Use this for follow-up messages that should wait until the agent finishes.
77
+ */
78
+ getFollowUpMessages?: () => Promise<AgentMessage[]>;
79
+ }
80
+ /**
81
+ * Thinking/reasoning level for models that support it.
82
+ * Note: "xhigh" is only supported by OpenAI gpt-5.1-codex-max, gpt-5.2, and gpt-5.2-codex models.
83
+ */
84
+ export type ThinkingLevel = "off" | "minimal" | "low" | "medium" | "high" | "xhigh";
85
+ /**
86
+ * Extensible interface for custom app messages.
87
+ * Apps can extend via declaration merging:
88
+ *
89
+ * @example
90
+ * ```typescript
91
+ * declare module "@mariozechner/agent" {
92
+ * interface CustomAgentMessages {
93
+ * artifact: ArtifactMessage;
94
+ * notification: NotificationMessage;
95
+ * }
96
+ * }
97
+ * ```
98
+ */
99
+ export interface CustomAgentMessages {
100
+ }
101
+ /**
102
+ * AgentMessage: Union of LLM messages + custom messages.
103
+ * This abstraction allows apps to add custom message types while maintaining
104
+ * type safety and compatibility with the base LLM messages.
105
+ */
106
+ export type AgentMessage = Message | CustomAgentMessages[keyof CustomAgentMessages];
107
+ /**
108
+ * Agent state containing all configuration and conversation data.
109
+ */
110
+ export interface AgentState {
111
+ systemPrompt: string;
112
+ model: Model<any>;
113
+ thinkingLevel: ThinkingLevel;
114
+ tools: AgentTool<any>[];
115
+ messages: AgentMessage[];
116
+ isStreaming: boolean;
117
+ streamMessage: AgentMessage | null;
118
+ pendingToolCalls: Set<string>;
119
+ error?: string;
120
+ }
121
+ export interface AgentToolResult<T> {
122
+ content: (TextContent | ImageContent)[];
123
+ details: T;
124
+ }
125
+ export type AgentToolUpdateCallback<T = any> = (partialResult: AgentToolResult<T>) => void;
126
+ export interface AgentTool<TParameters extends TSchema = TSchema, TDetails = any> extends Tool<TParameters> {
127
+ label: string;
128
+ execute: (toolCallId: string, params: Static<TParameters>, signal?: AbortSignal, onUpdate?: AgentToolUpdateCallback<TDetails>) => Promise<AgentToolResult<TDetails>>;
129
+ }
130
+ export interface AgentContext {
131
+ systemPrompt: string;
132
+ messages: AgentMessage[];
133
+ tools?: AgentTool<any>[];
134
+ }
135
+ /**
136
+ * Events emitted by the Agent for UI updates.
137
+ * These events provide fine-grained lifecycle information for messages, turns, and tool executions.
138
+ */
139
+ export type AgentEvent = {
140
+ type: "agent_start";
141
+ } | {
142
+ type: "agent_end";
143
+ messages: AgentMessage[];
144
+ } | {
145
+ type: "turn_start";
146
+ } | {
147
+ type: "turn_end";
148
+ message: AgentMessage;
149
+ toolResults: ToolResultMessage[];
150
+ } | {
151
+ type: "message_start";
152
+ message: AgentMessage;
153
+ } | {
154
+ type: "message_update";
155
+ message: AgentMessage;
156
+ assistantMessageEvent: AssistantMessageEvent;
157
+ } | {
158
+ type: "message_end";
159
+ message: AgentMessage;
160
+ } | {
161
+ type: "tool_execution_start";
162
+ toolCallId: string;
163
+ toolName: string;
164
+ args: any;
165
+ } | {
166
+ type: "tool_execution_update";
167
+ toolCallId: string;
168
+ toolName: string;
169
+ args: any;
170
+ partialResult: any;
171
+ } | {
172
+ type: "tool_execution_end";
173
+ toolCallId: string;
174
+ toolName: string;
175
+ result: any;
176
+ isError: boolean;
177
+ };
178
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agent/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ export * from "./agent/index.js";
2
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
package/dist/agent.js ADDED
@@ -0,0 +1 @@
1
+ export * from "./agent/index.js";
@@ -0,0 +1,20 @@
1
+ import type { Api, AssistantMessageEventStream, Context, Model, SimpleStreamOptions, StreamFunction, StreamOptions } from "./types.js";
2
+ export type ApiStreamFunction = (model: Model<Api>, context: Context, options?: StreamOptions) => AssistantMessageEventStream;
3
+ export type ApiStreamSimpleFunction = (model: Model<Api>, context: Context, options?: SimpleStreamOptions) => AssistantMessageEventStream;
4
+ export interface ApiProvider<TApi extends Api = Api, TOptions extends StreamOptions = StreamOptions> {
5
+ api: TApi;
6
+ stream: StreamFunction<TApi, TOptions>;
7
+ streamSimple: StreamFunction<TApi, SimpleStreamOptions>;
8
+ }
9
+ interface ApiProviderInternal {
10
+ api: Api;
11
+ stream: ApiStreamFunction;
12
+ streamSimple: ApiStreamSimpleFunction;
13
+ }
14
+ export declare function registerApiProvider<TApi extends Api, TOptions extends StreamOptions>(provider: ApiProvider<TApi, TOptions>, sourceId?: string): void;
15
+ export declare function getApiProvider(api: Api): ApiProviderInternal | undefined;
16
+ export declare function getApiProviders(): ApiProviderInternal[];
17
+ export declare function unregisterApiProviders(sourceId: string): void;
18
+ export declare function clearApiProviders(): void;
19
+ export {};
20
+ //# sourceMappingURL=api-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-registry.d.ts","sourceRoot":"","sources":["../../src/ai/api-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,GAAG,EACH,2BAA2B,EAC3B,OAAO,EACP,KAAK,EACL,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,iBAAiB,GAAG,CAC/B,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EACjB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,aAAa,KACnB,2BAA2B,CAAC;AAEjC,MAAM,MAAM,uBAAuB,GAAG,CACrC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EACjB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,mBAAmB,KACzB,2BAA2B,CAAC;AAEjC,MAAM,WAAW,WAAW,CAAC,IAAI,SAAS,GAAG,GAAG,GAAG,EAAE,QAAQ,SAAS,aAAa,GAAG,aAAa;IAClG,GAAG,EAAE,IAAI,CAAC;IACV,MAAM,EAAE,cAAc,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACvC,YAAY,EAAE,cAAc,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;CACxD;AAED,UAAU,mBAAmB;IAC5B,GAAG,EAAE,GAAG,CAAC;IACT,MAAM,EAAE,iBAAiB,CAAC;IAC1B,YAAY,EAAE,uBAAuB,CAAC;CACtC;AAiCD,wBAAgB,mBAAmB,CAAC,IAAI,SAAS,GAAG,EAAE,QAAQ,SAAS,aAAa,EACnF,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,EACrC,QAAQ,CAAC,EAAE,MAAM,GACf,IAAI,CASN;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,mBAAmB,GAAG,SAAS,CAExE;AAED,wBAAgB,eAAe,IAAI,mBAAmB,EAAE,CAEvD;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAM7D;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
@@ -0,0 +1,43 @@
1
+ const apiProviderRegistry = new Map();
2
+ function wrapStream(api, stream) {
3
+ return (model, context, options) => {
4
+ if (model.api !== api) {
5
+ throw new Error(`Mismatched api: ${model.api} expected ${api}`);
6
+ }
7
+ return stream(model, context, options);
8
+ };
9
+ }
10
+ function wrapStreamSimple(api, streamSimple) {
11
+ return (model, context, options) => {
12
+ if (model.api !== api) {
13
+ throw new Error(`Mismatched api: ${model.api} expected ${api}`);
14
+ }
15
+ return streamSimple(model, context, options);
16
+ };
17
+ }
18
+ export function registerApiProvider(provider, sourceId) {
19
+ apiProviderRegistry.set(provider.api, {
20
+ provider: {
21
+ api: provider.api,
22
+ stream: wrapStream(provider.api, provider.stream),
23
+ streamSimple: wrapStreamSimple(provider.api, provider.streamSimple),
24
+ },
25
+ sourceId,
26
+ });
27
+ }
28
+ export function getApiProvider(api) {
29
+ return apiProviderRegistry.get(api)?.provider;
30
+ }
31
+ export function getApiProviders() {
32
+ return Array.from(apiProviderRegistry.values(), (entry) => entry.provider);
33
+ }
34
+ export function unregisterApiProviders(sourceId) {
35
+ for (const [api, entry] of apiProviderRegistry.entries()) {
36
+ if (entry.sourceId === sourceId) {
37
+ apiProviderRegistry.delete(api);
38
+ }
39
+ }
40
+ }
41
+ export function clearApiProviders() {
42
+ apiProviderRegistry.clear();
43
+ }
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/ai/cli.ts"],"names":[],"mappings":""}
package/dist/ai/cli.js ADDED
@@ -0,0 +1,115 @@
1
+ #!/usr/bin/env node
2
+ import { existsSync, readFileSync, writeFileSync } from "fs";
3
+ import { createInterface } from "readline";
4
+ import { getOAuthProvider, getOAuthProviders } from "./utils/oauth/index.js";
5
+ const AUTH_FILE = "auth.json";
6
+ const PROVIDERS = getOAuthProviders();
7
+ function prompt(rl, question) {
8
+ return new Promise((resolve) => rl.question(question, resolve));
9
+ }
10
+ function loadAuth() {
11
+ if (!existsSync(AUTH_FILE))
12
+ return {};
13
+ try {
14
+ return JSON.parse(readFileSync(AUTH_FILE, "utf-8"));
15
+ }
16
+ catch {
17
+ return {};
18
+ }
19
+ }
20
+ function saveAuth(auth) {
21
+ writeFileSync(AUTH_FILE, JSON.stringify(auth, null, 2), "utf-8");
22
+ }
23
+ async function login(providerId) {
24
+ const provider = getOAuthProvider(providerId);
25
+ if (!provider) {
26
+ console.error(`Unknown provider: ${providerId}`);
27
+ process.exit(1);
28
+ }
29
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
30
+ const promptFn = (msg) => prompt(rl, `${msg} `);
31
+ try {
32
+ const credentials = await provider.login({
33
+ onAuth: (info) => {
34
+ console.log(`\nOpen this URL in your browser:\n${info.url}`);
35
+ if (info.instructions)
36
+ console.log(info.instructions);
37
+ console.log();
38
+ },
39
+ onPrompt: async (p) => {
40
+ return await promptFn(`${p.message}${p.placeholder ? ` (${p.placeholder})` : ""}:`);
41
+ },
42
+ onProgress: (msg) => console.log(msg),
43
+ });
44
+ const auth = loadAuth();
45
+ auth[providerId] = { type: "oauth", ...credentials };
46
+ saveAuth(auth);
47
+ console.log(`\nCredentials saved to ${AUTH_FILE}`);
48
+ }
49
+ finally {
50
+ rl.close();
51
+ }
52
+ }
53
+ async function main() {
54
+ const args = process.argv.slice(2);
55
+ const command = args[0];
56
+ if (!command || command === "help" || command === "--help" || command === "-h") {
57
+ const providerList = PROVIDERS.map((p) => ` ${p.id.padEnd(20)} ${p.name}`).join("\n");
58
+ console.log(`Usage: npx indusagi-ai <command> [provider]
59
+
60
+ Commands:
61
+ login [provider] Login to an OAuth provider
62
+ list List available providers
63
+
64
+ Providers:
65
+ ${providerList}
66
+
67
+ Examples:
68
+ npx indusagi-ai login # interactive provider selection
69
+ npx indusagi-ai login anthropic # login to specific provider
70
+ npx indusagi-ai list # list providers
71
+ `);
72
+ return;
73
+ }
74
+ if (command === "list") {
75
+ console.log("Available OAuth providers:\n");
76
+ for (const p of PROVIDERS) {
77
+ console.log(` ${p.id.padEnd(20)} ${p.name}`);
78
+ }
79
+ return;
80
+ }
81
+ if (command === "login") {
82
+ let provider = args[1];
83
+ if (!provider) {
84
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
85
+ console.log("Select a provider:\n");
86
+ for (let i = 0; i < PROVIDERS.length; i++) {
87
+ console.log(` ${i + 1}. ${PROVIDERS[i].name}`);
88
+ }
89
+ console.log();
90
+ const choice = await prompt(rl, `Enter number (1-${PROVIDERS.length}): `);
91
+ rl.close();
92
+ const index = parseInt(choice, 10) - 1;
93
+ if (index < 0 || index >= PROVIDERS.length) {
94
+ console.error("Invalid selection");
95
+ process.exit(1);
96
+ }
97
+ provider = PROVIDERS[index].id;
98
+ }
99
+ if (!PROVIDERS.some((p) => p.id === provider)) {
100
+ console.error(`Unknown provider: ${provider}`);
101
+ console.error(`Use 'npx indusagi-ai list' to see available providers`);
102
+ process.exit(1);
103
+ }
104
+ console.log(`Logging in to ${provider}...`);
105
+ await login(provider);
106
+ return;
107
+ }
108
+ console.error(`Unknown command: ${command}`);
109
+ console.error(`Use 'npx indusagi-ai --help' for usage`);
110
+ process.exit(1);
111
+ }
112
+ main().catch((err) => {
113
+ console.error("Error:", err.message);
114
+ process.exit(1);
115
+ });
@@ -0,0 +1,9 @@
1
+ import type { KnownProvider } from "./types.js";
2
+ /**
3
+ * Get API key for provider from known environment variables, e.g. OPENAI_API_KEY.
4
+ *
5
+ * Will not return API keys for providers that require OAuth tokens.
6
+ */
7
+ export declare function getEnvApiKey(provider: KnownProvider): string | undefined;
8
+ export declare function getEnvApiKey(provider: string): string | undefined;
9
+ //# sourceMappingURL=env-api-keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-api-keys.d.ts","sourceRoot":"","sources":["../../src/ai/env-api-keys.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AA0BhD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAAC;AAC1E,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC"}