whale-code 6.5.4 → 6.5.6

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 (853) hide show
  1. package/README.md +39 -31
  2. package/bin/{swagmanager-mcp.js → whale-code.js} +17 -2
  3. package/dist/cli/app.js +148 -72
  4. package/dist/cli/app.js.map +1 -0
  5. package/dist/cli/chat/AgentSelector.js +105 -10
  6. package/dist/cli/chat/AgentSelector.js.map +1 -0
  7. package/dist/cli/chat/ChatApp.d.ts +31 -0
  8. package/dist/cli/chat/ChatApp.js +539 -286
  9. package/dist/cli/chat/ChatApp.js.map +1 -0
  10. package/dist/cli/chat/ChatInput.js +1088 -770
  11. package/dist/cli/chat/ChatInput.js.map +1 -0
  12. package/dist/cli/chat/MarkdownText.js +39 -14
  13. package/dist/cli/chat/MarkdownText.js.map +1 -0
  14. package/dist/cli/chat/MemoryManager.js +181 -46
  15. package/dist/cli/chat/MemoryManager.js.map +1 -0
  16. package/dist/cli/chat/MessageList.d.ts +2 -3
  17. package/dist/cli/chat/MessageList.js +186 -45
  18. package/dist/cli/chat/MessageList.js.map +1 -0
  19. package/dist/cli/chat/ModelSelector.js +282 -63
  20. package/dist/cli/chat/ModelSelector.js.map +1 -0
  21. package/dist/cli/chat/NodeManager.js +165 -75
  22. package/dist/cli/chat/NodeManager.js.map +1 -0
  23. package/dist/cli/chat/NodeSelector.js +171 -30
  24. package/dist/cli/chat/NodeSelector.js.map +1 -0
  25. package/dist/cli/chat/PlanApproval.js +281 -57
  26. package/dist/cli/chat/PlanApproval.js.map +1 -0
  27. package/dist/cli/chat/RewindViewer.js +559 -144
  28. package/dist/cli/chat/RewindViewer.js.map +1 -0
  29. package/dist/cli/chat/SessionManager.js +137 -30
  30. package/dist/cli/chat/SessionManager.js.map +1 -0
  31. package/dist/cli/chat/SlashMenu.js +293 -164
  32. package/dist/cli/chat/SlashMenu.js.map +1 -0
  33. package/dist/cli/chat/StatusBar.js +172 -9
  34. package/dist/cli/chat/StatusBar.js.map +1 -0
  35. package/dist/cli/chat/StoreSelector.js +147 -18
  36. package/dist/cli/chat/StoreSelector.js.map +1 -0
  37. package/dist/cli/chat/StreamingText.d.ts +1 -5
  38. package/dist/cli/chat/StreamingText.js +22 -7
  39. package/dist/cli/chat/StreamingText.js.map +1 -0
  40. package/dist/cli/chat/SubagentPanel.d.ts +1 -2
  41. package/dist/cli/chat/SubagentPanel.js +612 -72
  42. package/dist/cli/chat/SubagentPanel.js.map +1 -0
  43. package/dist/cli/chat/TeamPanel.d.ts +1 -0
  44. package/dist/cli/chat/TeamPanel.js +230 -30
  45. package/dist/cli/chat/TeamPanel.js.map +1 -0
  46. package/dist/cli/chat/ThemeSelector.js +84 -24
  47. package/dist/cli/chat/ThemeSelector.js.map +1 -0
  48. package/dist/cli/chat/ToolIndicator.js +1476 -371
  49. package/dist/cli/chat/ToolIndicator.js.map +1 -0
  50. package/dist/cli/chat/hooks/useAgentLoop.d.ts +1 -0
  51. package/dist/cli/chat/hooks/useAgentLoop.js +481 -367
  52. package/dist/cli/chat/hooks/useAgentLoop.js.map +1 -0
  53. package/dist/cli/chat/hooks/useSlashCommands.d.ts +3 -14
  54. package/dist/cli/chat/hooks/useSlashCommands.js +744 -572
  55. package/dist/cli/chat/hooks/useSlashCommands.js.map +1 -0
  56. package/dist/cli/commands/config-cmd.js +56 -57
  57. package/dist/cli/commands/config-cmd.js.map +1 -0
  58. package/dist/cli/commands/db.js +184 -169
  59. package/dist/cli/commands/db.js.map +1 -0
  60. package/dist/cli/commands/doctor.js +212 -122
  61. package/dist/cli/commands/doctor.js.map +1 -0
  62. package/dist/cli/commands/init.js +211 -244
  63. package/dist/cli/commands/init.js.map +1 -0
  64. package/dist/cli/commands/mcp.js +127 -122
  65. package/dist/cli/commands/mcp.js.map +1 -0
  66. package/dist/cli/login/LoginApp.js +355 -141
  67. package/dist/cli/login/LoginApp.js.map +1 -0
  68. package/dist/cli/print-mode.js +196 -177
  69. package/dist/cli/print-mode.js.map +1 -0
  70. package/dist/cli/serve-mode.js +615 -530
  71. package/dist/cli/serve-mode.js.map +1 -0
  72. package/dist/cli/services/agent-config.d.ts +29 -0
  73. package/dist/cli/services/agent-config.js +91 -0
  74. package/dist/cli/services/agent-config.js.map +1 -0
  75. package/dist/cli/services/agent-definitions.d.ts +4 -1
  76. package/dist/cli/services/agent-definitions.js +97 -56
  77. package/dist/cli/services/agent-definitions.js.map +1 -0
  78. package/dist/cli/services/agent-events.js +225 -162
  79. package/dist/cli/services/agent-events.js.map +1 -0
  80. package/dist/cli/services/agent-loop.js +978 -669
  81. package/dist/cli/services/agent-loop.js.map +1 -0
  82. package/dist/cli/services/agent-worker-base.d.ts +35 -5
  83. package/dist/cli/services/agent-worker-base.js +337 -153
  84. package/dist/cli/services/agent-worker-base.js.map +1 -0
  85. package/dist/cli/services/api-retry.js +69 -64
  86. package/dist/cli/services/api-retry.js.map +1 -0
  87. package/dist/cli/services/auth-service.d.ts +3 -3
  88. package/dist/cli/services/auth-service.js +209 -132
  89. package/dist/cli/services/auth-service.js.map +1 -0
  90. package/dist/cli/services/background-processes.js +343 -267
  91. package/dist/cli/services/background-processes.js.map +1 -0
  92. package/dist/cli/services/browser-auth.d.ts +2 -2
  93. package/dist/cli/services/browser-auth.js +159 -118
  94. package/dist/cli/services/browser-auth.js.map +1 -0
  95. package/dist/cli/services/claude-md-loader.js +40 -36
  96. package/dist/cli/services/claude-md-loader.js.map +1 -0
  97. package/dist/cli/services/config-store.d.ts +9 -4
  98. package/dist/cli/services/config-store.js +164 -117
  99. package/dist/cli/services/config-store.js.map +1 -0
  100. package/dist/cli/services/debug-log.d.ts +1 -1
  101. package/dist/cli/services/debug-log.js +34 -35
  102. package/dist/cli/services/debug-log.js.map +1 -0
  103. package/dist/cli/services/env-detect.d.ts +7 -0
  104. package/dist/cli/services/env-detect.js +9 -0
  105. package/dist/cli/services/env-detect.js.map +1 -0
  106. package/dist/cli/services/error-logger.d.ts +2 -3
  107. package/dist/cli/services/error-logger.js +189 -180
  108. package/dist/cli/services/error-logger.js.map +1 -0
  109. package/dist/cli/services/file-history.d.ts +1 -1
  110. package/dist/cli/services/file-history.js +50 -54
  111. package/dist/cli/services/file-history.js.map +1 -0
  112. package/dist/cli/services/format-server-response.js +332 -372
  113. package/dist/cli/services/format-server-response.js.map +1 -0
  114. package/dist/cli/services/git-context.js +61 -45
  115. package/dist/cli/services/git-context.js.map +1 -0
  116. package/dist/cli/services/hooks.d.ts +2 -2
  117. package/dist/cli/services/hooks.js +195 -180
  118. package/dist/cli/services/hooks.js.map +1 -0
  119. package/dist/cli/services/ink-incremental.d.ts +19 -0
  120. package/dist/cli/services/ink-incremental.js +59 -0
  121. package/dist/cli/services/ink-incremental.js.map +1 -0
  122. package/dist/cli/services/ink-resize-fix.js +54 -44
  123. package/dist/cli/services/ink-resize-fix.js.map +1 -0
  124. package/dist/cli/services/ink-sync-output.d.ts +12 -0
  125. package/dist/cli/services/ink-sync-output.js +16 -0
  126. package/dist/cli/services/ink-sync-output.js.map +1 -0
  127. package/dist/cli/services/interactive-tools.js +268 -212
  128. package/dist/cli/services/interactive-tools.js.map +1 -0
  129. package/dist/cli/services/keybinding-manager.d.ts +11 -1
  130. package/dist/cli/services/keybinding-manager.js +126 -63
  131. package/dist/cli/services/keybinding-manager.js.map +1 -0
  132. package/dist/cli/services/local-tools.d.ts +1 -1
  133. package/dist/cli/services/local-tools.js +939 -656
  134. package/dist/cli/services/local-tools.js.map +1 -0
  135. package/dist/cli/services/lsp-manager.js +757 -594
  136. package/dist/cli/services/lsp-manager.js.map +1 -0
  137. package/dist/cli/services/mcp-client.d.ts +1 -1
  138. package/dist/cli/services/mcp-client.js +173 -134
  139. package/dist/cli/services/mcp-client.js.map +1 -0
  140. package/dist/cli/services/memory-manager.js +53 -40
  141. package/dist/cli/services/memory-manager.js.map +1 -0
  142. package/dist/cli/services/model-manager.js +55 -40
  143. package/dist/cli/services/model-manager.js.map +1 -0
  144. package/dist/cli/services/model-router.js +115 -85
  145. package/dist/cli/services/model-router.js.map +1 -0
  146. package/dist/cli/services/paths.d.ts +30 -0
  147. package/dist/cli/services/paths.js +81 -0
  148. package/dist/cli/services/paths.js.map +1 -0
  149. package/dist/cli/services/permission-modes.js +32 -25
  150. package/dist/cli/services/permission-modes.js.map +1 -0
  151. package/dist/cli/services/rewind.js +182 -168
  152. package/dist/cli/services/rewind.js.map +1 -0
  153. package/dist/cli/services/ripgrep.js +115 -115
  154. package/dist/cli/services/ripgrep.js.map +1 -0
  155. package/dist/cli/services/sandbox.d.ts +1 -1
  156. package/dist/cli/services/sandbox.js +58 -37
  157. package/dist/cli/services/sandbox.js.map +1 -0
  158. package/dist/cli/services/server-tools.js +738 -565
  159. package/dist/cli/services/server-tools.js.map +1 -0
  160. package/dist/cli/services/session-persistence.js +69 -74
  161. package/dist/cli/services/session-persistence.js.map +1 -0
  162. package/dist/cli/services/subagent-worker.js +42 -27
  163. package/dist/cli/services/subagent-worker.js.map +1 -0
  164. package/dist/cli/services/subagent.d.ts +2 -0
  165. package/dist/cli/services/subagent.js +606 -430
  166. package/dist/cli/services/subagent.js.map +1 -0
  167. package/dist/cli/services/system-prompt.js +86 -78
  168. package/dist/cli/services/system-prompt.js.map +1 -0
  169. package/dist/cli/services/task-decomposer.d.ts +1 -1
  170. package/dist/cli/services/task-decomposer.js +172 -139
  171. package/dist/cli/services/task-decomposer.js.map +1 -0
  172. package/dist/cli/services/team-lead.d.ts +2 -2
  173. package/dist/cli/services/team-lead.js +727 -529
  174. package/dist/cli/services/team-lead.js.map +1 -0
  175. package/dist/cli/services/team-state.js +319 -319
  176. package/dist/cli/services/team-state.js.map +1 -0
  177. package/dist/cli/services/teammate.d.ts +8 -2
  178. package/dist/cli/services/teammate.js +862 -560
  179. package/dist/cli/services/teammate.js.map +1 -0
  180. package/dist/cli/services/telemetry.d.ts +6 -1
  181. package/dist/cli/services/telemetry.js +180 -157
  182. package/dist/cli/services/telemetry.js.map +1 -0
  183. package/dist/cli/services/tools/agent-tools.d.ts +3 -3
  184. package/dist/cli/services/tools/agent-tools.js +480 -322
  185. package/dist/cli/services/tools/agent-tools.js.map +1 -0
  186. package/dist/cli/services/tools/file-ops.js +563 -450
  187. package/dist/cli/services/tools/file-ops.js.map +1 -0
  188. package/dist/cli/services/tools/search-tools.js +231 -162
  189. package/dist/cli/services/tools/search-tools.js.map +1 -0
  190. package/dist/cli/services/tools/shell-exec.js +197 -151
  191. package/dist/cli/services/tools/shell-exec.js.map +1 -0
  192. package/dist/cli/services/tools/task-manager.js +206 -173
  193. package/dist/cli/services/tools/task-manager.js.map +1 -0
  194. package/dist/cli/services/tools/web-tools.js +388 -341
  195. package/dist/cli/services/tools/web-tools.js.map +1 -0
  196. package/dist/cli/setup/SetupApp.d.ts +2 -2
  197. package/dist/cli/setup/SetupApp.js +608 -160
  198. package/dist/cli/setup/SetupApp.js.map +1 -0
  199. package/dist/cli/shared/ErrorBoundary.d.ts +22 -0
  200. package/dist/cli/shared/ErrorBoundary.js +73 -0
  201. package/dist/cli/shared/ErrorBoundary.js.map +1 -0
  202. package/dist/cli/shared/MatrixIntro.js +66 -69
  203. package/dist/cli/shared/MatrixIntro.js.map +1 -0
  204. package/dist/cli/shared/SpinnerSlot.d.ts +14 -0
  205. package/dist/cli/shared/SpinnerSlot.js +63 -0
  206. package/dist/cli/shared/SpinnerSlot.js.map +1 -0
  207. package/dist/cli/shared/Theme.d.ts +1 -1
  208. package/dist/cli/shared/Theme.js +136 -92
  209. package/dist/cli/shared/Theme.js.map +1 -0
  210. package/dist/cli/shared/WhaleBanner.js +99 -11
  211. package/dist/cli/shared/WhaleBanner.js.map +1 -0
  212. package/dist/cli/shared/markdown.d.ts +3 -1
  213. package/dist/cli/shared/markdown.js +736 -674
  214. package/dist/cli/shared/markdown.js.map +1 -0
  215. package/dist/cli/shared/marked-terminal.d.js +2 -0
  216. package/dist/cli/shared/marked-terminal.d.js.map +1 -0
  217. package/dist/cli/shared/theme-manager.js +99 -90
  218. package/dist/cli/shared/theme-manager.js.map +1 -0
  219. package/dist/cli/shared/theme-presets.js +256 -254
  220. package/dist/cli/shared/theme-presets.js.map +1 -0
  221. package/dist/cli/status/StatusApp.js +235 -86
  222. package/dist/cli/status/StatusApp.js.map +1 -0
  223. package/dist/cli/stores/StoreApp.js +275 -65
  224. package/dist/cli/stores/StoreApp.js.map +1 -0
  225. package/dist/index.d.ts +2 -2
  226. package/dist/index.js +509 -396
  227. package/dist/index.js.map +1 -0
  228. package/dist/local-agent/connection.d.ts +2 -2
  229. package/dist/local-agent/connection.js +352 -293
  230. package/dist/local-agent/connection.js.map +1 -0
  231. package/dist/local-agent/discovery.js +259 -122
  232. package/dist/local-agent/discovery.js.map +1 -0
  233. package/dist/local-agent/executor.js +216 -193
  234. package/dist/local-agent/executor.js.map +1 -0
  235. package/dist/local-agent/index.d.ts +2 -2
  236. package/dist/local-agent/index.js +156 -156
  237. package/dist/local-agent/index.js.map +1 -0
  238. package/dist/node/adapters/base.js +18 -8
  239. package/dist/node/adapters/base.js.map +1 -0
  240. package/dist/node/adapters/discord.js +286 -275
  241. package/dist/node/adapters/discord.js.map +1 -0
  242. package/dist/node/adapters/email.js +189 -202
  243. package/dist/node/adapters/email.js.map +1 -0
  244. package/dist/node/adapters/imessage.js +145 -142
  245. package/dist/node/adapters/imessage.js.map +1 -0
  246. package/dist/node/adapters/slack.js +237 -236
  247. package/dist/node/adapters/slack.js.map +1 -0
  248. package/dist/node/adapters/sms.js +149 -151
  249. package/dist/node/adapters/sms.js.map +1 -0
  250. package/dist/node/adapters/telegram.js +88 -92
  251. package/dist/node/adapters/telegram.js.map +1 -0
  252. package/dist/node/adapters/webchat.js +160 -136
  253. package/dist/node/adapters/webchat.js.map +1 -0
  254. package/dist/node/adapters/whatsapp.js +212 -215
  255. package/dist/node/adapters/whatsapp.js.map +1 -0
  256. package/dist/node/cli.js +884 -653
  257. package/dist/node/cli.js.map +1 -0
  258. package/dist/node/config.js +20 -18
  259. package/dist/node/config.js.map +1 -0
  260. package/dist/node/gateway-client.js +191 -181
  261. package/dist/node/gateway-client.js.map +1 -0
  262. package/dist/node/portal/clipboard.js +161 -130
  263. package/dist/node/portal/clipboard.js.map +1 -0
  264. package/dist/node/portal/discovery.js +51 -45
  265. package/dist/node/portal/discovery.js.map +1 -0
  266. package/dist/node/portal/forward.js +64 -58
  267. package/dist/node/portal/forward.js.map +1 -0
  268. package/dist/node/portal/index.js +246 -221
  269. package/dist/node/portal/index.js.map +1 -0
  270. package/dist/node/portal/multiplexer.js +192 -182
  271. package/dist/node/portal/multiplexer.js.map +1 -0
  272. package/dist/node/portal/permissions.js +102 -70
  273. package/dist/node/portal/permissions.js.map +1 -0
  274. package/dist/node/portal/protocol.js +153 -116
  275. package/dist/node/portal/protocol.js.map +1 -0
  276. package/dist/node/portal/screen.js +80 -69
  277. package/dist/node/portal/screen.js.map +1 -0
  278. package/dist/node/portal/session.js +124 -117
  279. package/dist/node/portal/session.js.map +1 -0
  280. package/dist/node/portal/shell.js +140 -113
  281. package/dist/node/portal/shell.js.map +1 -0
  282. package/dist/node/portal/stream.js +77 -75
  283. package/dist/node/portal/stream.js.map +1 -0
  284. package/dist/node/portal/transfer.js +190 -167
  285. package/dist/node/portal/transfer.js.map +1 -0
  286. package/dist/node/portal/ui.js +124 -99
  287. package/dist/node/portal/ui.js.map +1 -0
  288. package/dist/node/remote-desktop/compile-helper.js +50 -45
  289. package/dist/node/remote-desktop/compile-helper.js.map +1 -0
  290. package/dist/node/remote-desktop/index.js +215 -187
  291. package/dist/node/remote-desktop/index.js.map +1 -0
  292. package/dist/node/remote-desktop/protocol.js +45 -29
  293. package/dist/node/remote-desktop/protocol.js.map +1 -0
  294. package/dist/node/runtime.js +493 -410
  295. package/dist/node/runtime.js.map +1 -0
  296. package/dist/server/handlers/__test-utils__/test-db.js +39 -89
  297. package/dist/server/handlers/__test-utils__/test-db.js.map +1 -0
  298. package/dist/server/handlers/analytics.js +467 -261
  299. package/dist/server/handlers/analytics.js.map +1 -0
  300. package/dist/server/handlers/api-docs.d.ts +6 -0
  301. package/dist/server/handlers/api-docs.js +1613 -0
  302. package/dist/server/handlers/api-docs.js.map +1 -0
  303. package/dist/server/handlers/api-keys.js +295 -232
  304. package/dist/server/handlers/api-keys.js.map +1 -0
  305. package/dist/server/handlers/billing.js +330 -239
  306. package/dist/server/handlers/billing.js.map +1 -0
  307. package/dist/server/handlers/browser.js +468 -395
  308. package/dist/server/handlers/browser.js.map +1 -0
  309. package/dist/server/handlers/catalog.js +1377 -978
  310. package/dist/server/handlers/catalog.js.map +1 -0
  311. package/dist/server/handlers/clickhouse.js +157 -109
  312. package/dist/server/handlers/clickhouse.js.map +1 -0
  313. package/dist/server/handlers/comms.d.ts +0 -53
  314. package/dist/server/handlers/comms.js +1443 -970
  315. package/dist/server/handlers/comms.js.map +1 -0
  316. package/dist/server/handlers/creations.js +461 -394
  317. package/dist/server/handlers/creations.js.map +1 -0
  318. package/dist/server/handlers/crm.js +1082 -791
  319. package/dist/server/handlers/crm.js.map +1 -0
  320. package/dist/server/handlers/discovery.js +251 -232
  321. package/dist/server/handlers/discovery.js.map +1 -0
  322. package/dist/server/handlers/embeddings.js +241 -164
  323. package/dist/server/handlers/embeddings.js.map +1 -0
  324. package/dist/server/handlers/enrichment.js +887 -718
  325. package/dist/server/handlers/enrichment.js.map +1 -0
  326. package/dist/server/handlers/image-gen.js +467 -376
  327. package/dist/server/handlers/image-gen.js.map +1 -0
  328. package/dist/server/handlers/inventory.js +797 -424
  329. package/dist/server/handlers/inventory.js.map +1 -0
  330. package/dist/server/handlers/kali.js +272 -230
  331. package/dist/server/handlers/kali.js.map +1 -0
  332. package/dist/server/handlers/llm-providers.js +803 -580
  333. package/dist/server/handlers/llm-providers.js.map +1 -0
  334. package/dist/server/handlers/local-agent.js +133 -105
  335. package/dist/server/handlers/local-agent.js.map +1 -0
  336. package/dist/server/handlers/media.js +1179 -857
  337. package/dist/server/handlers/media.js.map +1 -0
  338. package/dist/server/handlers/meta-ads.js +2669 -2093
  339. package/dist/server/handlers/meta-ads.js.map +1 -0
  340. package/dist/server/handlers/nodes.js +1321 -913
  341. package/dist/server/handlers/nodes.js.map +1 -0
  342. package/dist/server/handlers/operations.js +183 -157
  343. package/dist/server/handlers/operations.js.map +1 -0
  344. package/dist/server/handlers/platform.js +346 -210
  345. package/dist/server/handlers/platform.js.map +1 -0
  346. package/dist/server/handlers/remove-bg.js +118 -86
  347. package/dist/server/handlers/remove-bg.js.map +1 -0
  348. package/dist/server/handlers/storefront.js +586 -446
  349. package/dist/server/handlers/storefront.js.map +1 -0
  350. package/dist/server/handlers/supply-chain.js +546 -326
  351. package/dist/server/handlers/supply-chain.js.map +1 -0
  352. package/dist/server/handlers/transcription.js +106 -97
  353. package/dist/server/handlers/transcription.js.map +1 -0
  354. package/dist/server/handlers/video-gen.js +593 -424
  355. package/dist/server/handlers/video-gen.js.map +1 -0
  356. package/dist/server/handlers/voice.js +1458 -1017
  357. package/dist/server/handlers/voice.js.map +1 -0
  358. package/dist/server/handlers/workflow-steps.js +2837 -2116
  359. package/dist/server/handlers/workflow-steps.js.map +1 -0
  360. package/dist/server/handlers/workflows.js +1630 -933
  361. package/dist/server/handlers/workflows.js.map +1 -0
  362. package/dist/server/index.js +3166 -2390
  363. package/dist/server/index.js.map +1 -0
  364. package/dist/server/lib/batch-client.js +471 -409
  365. package/dist/server/lib/batch-client.js.map +1 -0
  366. package/dist/server/lib/clickhouse-buffer.js +118 -104
  367. package/dist/server/lib/clickhouse-buffer.js.map +1 -0
  368. package/dist/server/lib/clickhouse-client.js +107 -107
  369. package/dist/server/lib/clickhouse-client.js.map +1 -0
  370. package/dist/server/lib/coa-renderer.js +1786 -356
  371. package/dist/server/lib/coa-renderer.js.map +1 -0
  372. package/dist/server/lib/code-worker-pool.js +227 -177
  373. package/dist/server/lib/code-worker-pool.js.map +1 -0
  374. package/dist/server/lib/code-worker.js +174 -164
  375. package/dist/server/lib/code-worker.js.map +1 -0
  376. package/dist/server/lib/compaction-service.d.ts +2 -12
  377. package/dist/server/lib/compaction-service.js +74 -184
  378. package/dist/server/lib/compaction-service.js.map +1 -0
  379. package/dist/server/lib/logger.js +36 -24
  380. package/dist/server/lib/logger.js.map +1 -0
  381. package/dist/server/lib/otel.js +101 -80
  382. package/dist/server/lib/otel.js.map +1 -0
  383. package/dist/server/lib/pdf-renderer.d.ts +1 -1
  384. package/dist/server/lib/pdf-renderer.js +954 -776
  385. package/dist/server/lib/pdf-renderer.js.map +1 -0
  386. package/dist/server/lib/prompt-sanitizer.js +188 -108
  387. package/dist/server/lib/prompt-sanitizer.js.map +1 -0
  388. package/dist/server/lib/provider-capabilities.js +136 -138
  389. package/dist/server/lib/provider-capabilities.js.map +1 -0
  390. package/dist/server/lib/provider-failover.js +190 -168
  391. package/dist/server/lib/provider-failover.js.map +1 -0
  392. package/dist/server/lib/rate-limiter.js +186 -117
  393. package/dist/server/lib/rate-limiter.js.map +1 -0
  394. package/dist/server/lib/react-pdf-layout.js +551 -382
  395. package/dist/server/lib/react-pdf-layout.js.map +1 -0
  396. package/dist/server/lib/server-agent-loop.d.ts +9 -0
  397. package/dist/server/lib/server-agent-loop.js +906 -624
  398. package/dist/server/lib/server-agent-loop.js.map +1 -0
  399. package/dist/server/lib/server-subagent.d.ts +2 -0
  400. package/dist/server/lib/server-subagent.js +260 -162
  401. package/dist/server/lib/server-subagent.js.map +1 -0
  402. package/dist/server/lib/session-checkpoint.js +105 -96
  403. package/dist/server/lib/session-checkpoint.js.map +1 -0
  404. package/dist/server/lib/ssrf-guard.js +193 -184
  405. package/dist/server/lib/ssrf-guard.js.map +1 -0
  406. package/dist/server/lib/supabase-client.js +94 -82
  407. package/dist/server/lib/supabase-client.js.map +1 -0
  408. package/dist/server/lib/template-resolver.js +154 -176
  409. package/dist/server/lib/template-resolver.js.map +1 -0
  410. package/dist/server/lib/utils.js +242 -133
  411. package/dist/server/lib/utils.js.map +1 -0
  412. package/dist/server/local-agent-gateway.d.ts +2 -2
  413. package/dist/server/local-agent-gateway.js +785 -627
  414. package/dist/server/local-agent-gateway.js.map +1 -0
  415. package/dist/server/providers/anthropic.js +254 -176
  416. package/dist/server/providers/anthropic.js.map +1 -0
  417. package/dist/server/providers/bedrock.js +221 -162
  418. package/dist/server/providers/bedrock.js.map +1 -0
  419. package/dist/server/providers/gemini.js +548 -418
  420. package/dist/server/providers/gemini.js.map +1 -0
  421. package/dist/server/providers/openai.js +571 -437
  422. package/dist/server/providers/openai.js.map +1 -0
  423. package/dist/server/providers/registry.js +23 -18
  424. package/dist/server/providers/registry.js.map +1 -0
  425. package/dist/server/providers/shared.js +123 -95
  426. package/dist/server/providers/shared.js.map +1 -0
  427. package/dist/server/providers/types.js +1 -11
  428. package/dist/server/providers/types.js.map +1 -0
  429. package/dist/server/proxy-handlers.js +209 -165
  430. package/dist/server/proxy-handlers.js.map +1 -0
  431. package/dist/server/tool-router.d.ts +13 -0
  432. package/dist/server/tool-router.js +960 -598
  433. package/dist/server/tool-router.js.map +1 -0
  434. package/dist/server/validation.js +248 -188
  435. package/dist/server/validation.js.map +1 -0
  436. package/dist/server/worker.js +202 -133
  437. package/dist/server/worker.js.map +1 -0
  438. package/dist/setup.d.ts +2 -2
  439. package/dist/setup.js +151 -147
  440. package/dist/setup.js.map +1 -0
  441. package/dist/shared/agent-core.d.ts +191 -24
  442. package/dist/shared/agent-core.js +971 -462
  443. package/dist/shared/agent-core.js.map +1 -0
  444. package/dist/shared/anthropic-types.js +1 -6
  445. package/dist/shared/anthropic-types.js.map +1 -0
  446. package/dist/shared/api-client.d.ts +17 -9
  447. package/dist/shared/api-client.js +419 -327
  448. package/dist/shared/api-client.js.map +1 -0
  449. package/dist/shared/compaction.d.ts +36 -0
  450. package/dist/shared/compaction.js +138 -0
  451. package/dist/shared/compaction.js.map +1 -0
  452. package/dist/shared/constants.js +67 -64
  453. package/dist/shared/constants.js.map +1 -0
  454. package/dist/shared/sse-parser.js +221 -219
  455. package/dist/shared/sse-parser.js.map +1 -0
  456. package/dist/shared/tool-dispatch.d.ts +4 -2
  457. package/dist/shared/tool-dispatch.js +226 -165
  458. package/dist/shared/tool-dispatch.js.map +1 -0
  459. package/dist/shared/types.js +1 -6
  460. package/dist/shared/types.js.map +1 -0
  461. package/dist/types/cli-highlight.d.js +2 -0
  462. package/dist/types/cli-highlight.d.js.map +1 -0
  463. package/dist/types/diff.d.js +2 -0
  464. package/dist/types/diff.d.js.map +1 -0
  465. package/dist/types/pdf-parse.d.js +2 -0
  466. package/dist/types/pdf-parse.d.js.map +1 -0
  467. package/dist/updater.d.ts +1 -1
  468. package/dist/updater.js +118 -92
  469. package/dist/updater.js.map +1 -0
  470. package/dist/webchat/widget.js +227 -380
  471. package/dist/webchat/widget.js.map +1 -0
  472. package/package.json +22 -10
  473. package/vendor/ink/build/ansi-tokenizer.d.ts +38 -0
  474. package/vendor/ink/build/ansi-tokenizer.js +316 -0
  475. package/vendor/ink/build/ansi-tokenizer.js.map +1 -0
  476. package/vendor/ink/build/apply-styles.js +175 -0
  477. package/vendor/ink/build/build-layout.js +77 -0
  478. package/vendor/ink/build/calculate-wrapped-text.js +53 -0
  479. package/vendor/ink/build/colorize.d.ts +3 -0
  480. package/vendor/ink/build/colorize.js +48 -0
  481. package/vendor/ink/build/colorize.js.map +1 -0
  482. package/vendor/ink/build/components/AccessibilityContext.d.ts +3 -0
  483. package/vendor/ink/build/components/AccessibilityContext.js +5 -0
  484. package/vendor/ink/build/components/AccessibilityContext.js.map +1 -0
  485. package/vendor/ink/build/components/App.d.ts +18 -0
  486. package/vendor/ink/build/components/App.js +351 -0
  487. package/vendor/ink/build/components/App.js.map +1 -0
  488. package/vendor/ink/build/components/AppContext.d.ts +15 -0
  489. package/vendor/ink/build/components/AppContext.js +11 -0
  490. package/vendor/ink/build/components/AppContext.js.map +1 -0
  491. package/vendor/ink/build/components/BackgroundContext.d.ts +4 -0
  492. package/vendor/ink/build/components/BackgroundContext.js +3 -0
  493. package/vendor/ink/build/components/BackgroundContext.js.map +1 -0
  494. package/vendor/ink/build/components/Box.d.ts +117 -0
  495. package/vendor/ink/build/components/Box.js +34 -0
  496. package/vendor/ink/build/components/Box.js.map +1 -0
  497. package/vendor/ink/build/components/Color.js +62 -0
  498. package/vendor/ink/build/components/Cursor.d.ts +83 -0
  499. package/vendor/ink/build/components/Cursor.js +53 -0
  500. package/vendor/ink/build/components/Cursor.js.map +1 -0
  501. package/vendor/ink/build/components/CursorContext.d.ts +11 -0
  502. package/vendor/ink/build/components/CursorContext.js +8 -0
  503. package/vendor/ink/build/components/CursorContext.js.map +1 -0
  504. package/vendor/ink/build/components/ErrorBoundary.d.ts +18 -0
  505. package/vendor/ink/build/components/ErrorBoundary.js +23 -0
  506. package/vendor/ink/build/components/ErrorBoundary.js.map +1 -0
  507. package/vendor/ink/build/components/ErrorOverview.d.ts +6 -0
  508. package/vendor/ink/build/components/ErrorOverview.js +84 -0
  509. package/vendor/ink/build/components/ErrorOverview.js.map +1 -0
  510. package/vendor/ink/build/components/FocusContext.d.ts +16 -0
  511. package/vendor/ink/build/components/FocusContext.js +17 -0
  512. package/vendor/ink/build/components/FocusContext.js.map +1 -0
  513. package/vendor/ink/build/components/Newline.d.ts +13 -0
  514. package/vendor/ink/build/components/Newline.js +8 -0
  515. package/vendor/ink/build/components/Newline.js.map +1 -0
  516. package/vendor/ink/build/components/Spacer.d.ts +7 -0
  517. package/vendor/ink/build/components/Spacer.js +11 -0
  518. package/vendor/ink/build/components/Spacer.js.map +1 -0
  519. package/vendor/ink/build/components/Static.d.ts +24 -0
  520. package/vendor/ink/build/components/Static.js +28 -0
  521. package/vendor/ink/build/components/Static.js.map +1 -0
  522. package/vendor/ink/build/components/StderrContext.d.ts +15 -0
  523. package/vendor/ink/build/components/StderrContext.js +13 -0
  524. package/vendor/ink/build/components/StderrContext.js.map +1 -0
  525. package/vendor/ink/build/components/StdinContext.d.ts +22 -0
  526. package/vendor/ink/build/components/StdinContext.js +19 -0
  527. package/vendor/ink/build/components/StdinContext.js.map +1 -0
  528. package/vendor/ink/build/components/StdoutContext.d.ts +15 -0
  529. package/vendor/ink/build/components/StdoutContext.js +13 -0
  530. package/vendor/ink/build/components/StdoutContext.js.map +1 -0
  531. package/vendor/ink/build/components/Text.d.ts +55 -0
  532. package/vendor/ink/build/components/Text.js +50 -0
  533. package/vendor/ink/build/components/Text.js.map +1 -0
  534. package/vendor/ink/build/components/Transform.d.ts +16 -0
  535. package/vendor/ink/build/components/Transform.js +15 -0
  536. package/vendor/ink/build/components/Transform.js.map +1 -0
  537. package/vendor/ink/build/cursor-helpers.d.ts +38 -0
  538. package/vendor/ink/build/cursor-helpers.js +56 -0
  539. package/vendor/ink/build/cursor-helpers.js.map +1 -0
  540. package/vendor/ink/build/devtools-window-polyfill.d.ts +1 -0
  541. package/vendor/ink/build/devtools-window-polyfill.js +65 -0
  542. package/vendor/ink/build/devtools-window-polyfill.js.map +1 -0
  543. package/vendor/ink/build/devtools.d.ts +1 -0
  544. package/vendor/ink/build/devtools.js +11 -0
  545. package/vendor/ink/build/devtools.js.map +1 -0
  546. package/vendor/ink/build/dom.d.ts +56 -0
  547. package/vendor/ink/build/dom.js +124 -0
  548. package/vendor/ink/build/dom.js.map +1 -0
  549. package/vendor/ink/build/experimental/apply-style.js +140 -0
  550. package/vendor/ink/build/experimental/dom.js +123 -0
  551. package/vendor/ink/build/experimental/output.js +91 -0
  552. package/vendor/ink/build/experimental/reconciler.js +141 -0
  553. package/vendor/ink/build/experimental/renderer.js +81 -0
  554. package/vendor/ink/build/get-max-width.d.ts +3 -0
  555. package/vendor/ink/build/get-max-width.js +10 -0
  556. package/vendor/ink/build/get-max-width.js.map +1 -0
  557. package/vendor/ink/build/hooks/use-app.d.ts +5 -0
  558. package/vendor/ink/build/hooks/use-app.js +8 -0
  559. package/vendor/ink/build/hooks/use-app.js.map +1 -0
  560. package/vendor/ink/build/hooks/use-cursor.d.ts +12 -0
  561. package/vendor/ink/build/hooks/use-cursor.js +29 -0
  562. package/vendor/ink/build/hooks/use-cursor.js.map +1 -0
  563. package/vendor/ink/build/hooks/use-focus-manager.d.ts +28 -0
  564. package/vendor/ink/build/hooks/use-focus-manager.js +17 -0
  565. package/vendor/ink/build/hooks/use-focus-manager.js.map +1 -0
  566. package/vendor/ink/build/hooks/use-focus.d.ts +29 -0
  567. package/vendor/ink/build/hooks/use-focus.js +42 -0
  568. package/vendor/ink/build/hooks/use-focus.js.map +1 -0
  569. package/vendor/ink/build/hooks/use-input.d.ts +131 -0
  570. package/vendor/ink/build/hooks/use-input.js +124 -0
  571. package/vendor/ink/build/hooks/use-input.js.map +1 -0
  572. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.d.ts +5 -0
  573. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js +11 -0
  574. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
  575. package/vendor/ink/build/hooks/use-stderr.d.ts +5 -0
  576. package/vendor/ink/build/hooks/use-stderr.js +8 -0
  577. package/vendor/ink/build/hooks/use-stderr.js.map +1 -0
  578. package/vendor/ink/build/hooks/use-stdin.d.ts +5 -0
  579. package/vendor/ink/build/hooks/use-stdin.js +8 -0
  580. package/vendor/ink/build/hooks/use-stdin.js.map +1 -0
  581. package/vendor/ink/build/hooks/use-stdout.d.ts +5 -0
  582. package/vendor/ink/build/hooks/use-stdout.js +8 -0
  583. package/vendor/ink/build/hooks/use-stdout.js.map +1 -0
  584. package/vendor/ink/build/hooks/useInput.js +38 -0
  585. package/vendor/ink/build/index.d.ts +34 -0
  586. package/vendor/ink/build/index.js +20 -0
  587. package/vendor/ink/build/index.js.map +1 -0
  588. package/vendor/ink/build/ink.d.ts +90 -0
  589. package/vendor/ink/build/ink.js +654 -0
  590. package/vendor/ink/build/ink.js.map +1 -0
  591. package/vendor/ink/build/input-parser.d.ts +7 -0
  592. package/vendor/ink/build/input-parser.js +154 -0
  593. package/vendor/ink/build/input-parser.js.map +1 -0
  594. package/vendor/ink/build/instance.js +205 -0
  595. package/vendor/ink/build/instances.d.ts +3 -0
  596. package/vendor/ink/build/instances.js +8 -0
  597. package/vendor/ink/build/instances.js.map +1 -0
  598. package/vendor/ink/build/kitty-keyboard.d.ts +23 -0
  599. package/vendor/ink/build/kitty-keyboard.js +32 -0
  600. package/vendor/ink/build/kitty-keyboard.js.map +1 -0
  601. package/vendor/ink/build/layout.d.ts +7 -0
  602. package/vendor/ink/build/layout.js +33 -0
  603. package/vendor/ink/build/layout.js.map +1 -0
  604. package/vendor/ink/build/log-update.d.ts +19 -0
  605. package/vendor/ink/build/log-update.js +243 -0
  606. package/vendor/ink/build/log-update.js.map +1 -0
  607. package/vendor/ink/build/measure-element.d.ts +16 -0
  608. package/vendor/ink/build/measure-element.js +9 -0
  609. package/vendor/ink/build/measure-element.js.map +1 -0
  610. package/vendor/ink/build/measure-text.d.ts +6 -0
  611. package/vendor/ink/build/measure-text.js +21 -0
  612. package/vendor/ink/build/measure-text.js.map +1 -0
  613. package/vendor/ink/build/options.d.ts +52 -0
  614. package/vendor/ink/build/options.js +2 -0
  615. package/vendor/ink/build/options.js.map +1 -0
  616. package/vendor/ink/build/output.d.ts +35 -0
  617. package/vendor/ink/build/output.js +183 -0
  618. package/vendor/ink/build/output.js.map +1 -0
  619. package/vendor/ink/build/parse-keypress.d.ts +22 -0
  620. package/vendor/ink/build/parse-keypress.js +493 -0
  621. package/vendor/ink/build/parse-keypress.js.map +1 -0
  622. package/vendor/ink/build/reconciler.d.ts +4 -0
  623. package/vendor/ink/build/reconciler.js +274 -0
  624. package/vendor/ink/build/reconciler.js.map +1 -0
  625. package/vendor/ink/build/render-background.d.ts +4 -0
  626. package/vendor/ink/build/render-background.js +25 -0
  627. package/vendor/ink/build/render-background.js.map +1 -0
  628. package/vendor/ink/build/render-border.d.ts +4 -0
  629. package/vendor/ink/build/render-border.js +73 -0
  630. package/vendor/ink/build/render-border.js.map +1 -0
  631. package/vendor/ink/build/render-node-to-output.d.ts +14 -0
  632. package/vendor/ink/build/render-node-to-output.js +147 -0
  633. package/vendor/ink/build/render-node-to-output.js.map +1 -0
  634. package/vendor/ink/build/render-to-string.d.ts +38 -0
  635. package/vendor/ink/build/render-to-string.js +115 -0
  636. package/vendor/ink/build/render-to-string.js.map +1 -0
  637. package/vendor/ink/build/render.d.ts +121 -0
  638. package/vendor/ink/build/render.js +55 -0
  639. package/vendor/ink/build/render.js.map +1 -0
  640. package/vendor/ink/build/renderer.d.ts +8 -0
  641. package/vendor/ink/build/renderer.js +55 -0
  642. package/vendor/ink/build/renderer.js.map +1 -0
  643. package/vendor/ink/build/sanitize-ansi.d.ts +2 -0
  644. package/vendor/ink/build/sanitize-ansi.js +27 -0
  645. package/vendor/ink/build/sanitize-ansi.js.map +1 -0
  646. package/vendor/ink/build/screen-reader-update.d.ts +13 -0
  647. package/vendor/ink/build/screen-reader-update.js +38 -0
  648. package/vendor/ink/build/screen-reader-update.js.map +1 -0
  649. package/vendor/ink/build/squash-text-nodes.d.ts +3 -0
  650. package/vendor/ink/build/squash-text-nodes.js +36 -0
  651. package/vendor/ink/build/squash-text-nodes.js.map +1 -0
  652. package/vendor/ink/build/styles.d.ts +240 -0
  653. package/vendor/ink/build/styles.js +232 -0
  654. package/vendor/ink/build/styles.js.map +1 -0
  655. package/vendor/ink/build/utils.d.ts +2 -0
  656. package/vendor/ink/build/utils.js +4 -0
  657. package/vendor/ink/build/utils.js.map +1 -0
  658. package/vendor/ink/build/wrap-text.d.ts +3 -0
  659. package/vendor/ink/build/wrap-text.js +31 -0
  660. package/vendor/ink/build/wrap-text.js.map +1 -0
  661. package/vendor/ink/build/write-synchronized.d.ts +4 -0
  662. package/vendor/ink/build/write-synchronized.js +7 -0
  663. package/vendor/ink/build/write-synchronized.js.map +1 -0
  664. package/vendor/ink/license +10 -0
  665. package/vendor/ink/node_modules/@types/node/LICENSE +21 -0
  666. package/vendor/ink/node_modules/@types/node/README.md +15 -0
  667. package/vendor/ink/node_modules/@types/node/assert/strict.d.ts +105 -0
  668. package/vendor/ink/node_modules/@types/node/assert.d.ts +955 -0
  669. package/vendor/ink/node_modules/@types/node/async_hooks.d.ts +623 -0
  670. package/vendor/ink/node_modules/@types/node/buffer.buffer.d.ts +466 -0
  671. package/vendor/ink/node_modules/@types/node/buffer.d.ts +1810 -0
  672. package/vendor/ink/node_modules/@types/node/child_process.d.ts +1428 -0
  673. package/vendor/ink/node_modules/@types/node/cluster.d.ts +486 -0
  674. package/vendor/ink/node_modules/@types/node/compatibility/iterators.d.ts +21 -0
  675. package/vendor/ink/node_modules/@types/node/console.d.ts +151 -0
  676. package/vendor/ink/node_modules/@types/node/constants.d.ts +20 -0
  677. package/vendor/ink/node_modules/@types/node/crypto.d.ts +4065 -0
  678. package/vendor/ink/node_modules/@types/node/dgram.d.ts +564 -0
  679. package/vendor/ink/node_modules/@types/node/diagnostics_channel.d.ts +576 -0
  680. package/vendor/ink/node_modules/@types/node/dns/promises.d.ts +503 -0
  681. package/vendor/ink/node_modules/@types/node/dns.d.ts +922 -0
  682. package/vendor/ink/node_modules/@types/node/domain.d.ts +166 -0
  683. package/vendor/ink/node_modules/@types/node/events.d.ts +1054 -0
  684. package/vendor/ink/node_modules/@types/node/fs/promises.d.ts +1329 -0
  685. package/vendor/ink/node_modules/@types/node/fs.d.ts +4676 -0
  686. package/vendor/ink/node_modules/@types/node/globals.d.ts +150 -0
  687. package/vendor/ink/node_modules/@types/node/globals.typedarray.d.ts +101 -0
  688. package/vendor/ink/node_modules/@types/node/http.d.ts +2167 -0
  689. package/vendor/ink/node_modules/@types/node/http2.d.ts +2480 -0
  690. package/vendor/ink/node_modules/@types/node/https.d.ts +405 -0
  691. package/vendor/ink/node_modules/@types/node/index.d.ts +115 -0
  692. package/vendor/ink/node_modules/@types/node/inspector/promises.d.ts +41 -0
  693. package/vendor/ink/node_modules/@types/node/inspector.d.ts +224 -0
  694. package/vendor/ink/node_modules/@types/node/inspector.generated.d.ts +4226 -0
  695. package/vendor/ink/node_modules/@types/node/module.d.ts +819 -0
  696. package/vendor/ink/node_modules/@types/node/net.d.ts +933 -0
  697. package/vendor/ink/node_modules/@types/node/os.d.ts +507 -0
  698. package/vendor/ink/node_modules/@types/node/package.json +155 -0
  699. package/vendor/ink/node_modules/@types/node/path/posix.d.ts +8 -0
  700. package/vendor/ink/node_modules/@types/node/path/win32.d.ts +8 -0
  701. package/vendor/ink/node_modules/@types/node/path.d.ts +187 -0
  702. package/vendor/ink/node_modules/@types/node/perf_hooks.d.ts +643 -0
  703. package/vendor/ink/node_modules/@types/node/process.d.ts +2156 -0
  704. package/vendor/ink/node_modules/@types/node/punycode.d.ts +117 -0
  705. package/vendor/ink/node_modules/@types/node/querystring.d.ts +152 -0
  706. package/vendor/ink/node_modules/@types/node/quic.d.ts +910 -0
  707. package/vendor/ink/node_modules/@types/node/readline/promises.d.ts +161 -0
  708. package/vendor/ink/node_modules/@types/node/readline.d.ts +541 -0
  709. package/vendor/ink/node_modules/@types/node/repl.d.ts +415 -0
  710. package/vendor/ink/node_modules/@types/node/sea.d.ts +162 -0
  711. package/vendor/ink/node_modules/@types/node/sqlite.d.ts +955 -0
  712. package/vendor/ink/node_modules/@types/node/stream/consumers.d.ts +38 -0
  713. package/vendor/ink/node_modules/@types/node/stream/promises.d.ts +211 -0
  714. package/vendor/ink/node_modules/@types/node/stream/web.d.ts +296 -0
  715. package/vendor/ink/node_modules/@types/node/stream.d.ts +1760 -0
  716. package/vendor/ink/node_modules/@types/node/string_decoder.d.ts +67 -0
  717. package/vendor/ink/node_modules/@types/node/test/reporters.d.ts +96 -0
  718. package/vendor/ink/node_modules/@types/node/test.d.ts +2240 -0
  719. package/vendor/ink/node_modules/@types/node/timers/promises.d.ts +108 -0
  720. package/vendor/ink/node_modules/@types/node/timers.d.ts +159 -0
  721. package/vendor/ink/node_modules/@types/node/tls.d.ts +1198 -0
  722. package/vendor/ink/node_modules/@types/node/trace_events.d.ts +197 -0
  723. package/vendor/ink/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +462 -0
  724. package/vendor/ink/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +71 -0
  725. package/vendor/ink/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +36 -0
  726. package/vendor/ink/node_modules/@types/node/ts5.6/index.d.ts +117 -0
  727. package/vendor/ink/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +72 -0
  728. package/vendor/ink/node_modules/@types/node/ts5.7/index.d.ts +117 -0
  729. package/vendor/ink/node_modules/@types/node/tty.d.ts +250 -0
  730. package/vendor/ink/node_modules/@types/node/url.d.ts +519 -0
  731. package/vendor/ink/node_modules/@types/node/util/types.d.ts +558 -0
  732. package/vendor/ink/node_modules/@types/node/util.d.ts +1662 -0
  733. package/vendor/ink/node_modules/@types/node/v8.d.ts +983 -0
  734. package/vendor/ink/node_modules/@types/node/vm.d.ts +1208 -0
  735. package/vendor/ink/node_modules/@types/node/wasi.d.ts +202 -0
  736. package/vendor/ink/node_modules/@types/node/web-globals/abortcontroller.d.ts +59 -0
  737. package/vendor/ink/node_modules/@types/node/web-globals/blob.d.ts +23 -0
  738. package/vendor/ink/node_modules/@types/node/web-globals/console.d.ts +9 -0
  739. package/vendor/ink/node_modules/@types/node/web-globals/crypto.d.ts +39 -0
  740. package/vendor/ink/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  741. package/vendor/ink/node_modules/@types/node/web-globals/encoding.d.ts +11 -0
  742. package/vendor/ink/node_modules/@types/node/web-globals/events.d.ts +106 -0
  743. package/vendor/ink/node_modules/@types/node/web-globals/fetch.d.ts +69 -0
  744. package/vendor/ink/node_modules/@types/node/web-globals/importmeta.d.ts +13 -0
  745. package/vendor/ink/node_modules/@types/node/web-globals/messaging.d.ts +23 -0
  746. package/vendor/ink/node_modules/@types/node/web-globals/navigator.d.ts +25 -0
  747. package/vendor/ink/node_modules/@types/node/web-globals/performance.d.ts +45 -0
  748. package/vendor/ink/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  749. package/vendor/ink/node_modules/@types/node/web-globals/streams.d.ts +115 -0
  750. package/vendor/ink/node_modules/@types/node/web-globals/timers.d.ts +44 -0
  751. package/vendor/ink/node_modules/@types/node/web-globals/url.d.ts +24 -0
  752. package/vendor/ink/node_modules/@types/node/worker_threads.d.ts +717 -0
  753. package/vendor/ink/node_modules/@types/node/zlib.d.ts +618 -0
  754. package/vendor/ink/node_modules/node-pty/LICENSE +69 -0
  755. package/vendor/ink/node_modules/node-pty/README.md +164 -0
  756. package/vendor/ink/node_modules/node-pty/binding.gyp +150 -0
  757. package/vendor/ink/node_modules/node-pty/lib/conpty_console_list_agent.js +25 -0
  758. package/vendor/ink/node_modules/node-pty/lib/eventEmitter2.js +47 -0
  759. package/vendor/ink/node_modules/node-pty/lib/index.js +52 -0
  760. package/vendor/ink/node_modules/node-pty/lib/interfaces.js +7 -0
  761. package/vendor/ink/node_modules/node-pty/lib/shared/conout.js +11 -0
  762. package/vendor/ink/node_modules/node-pty/lib/terminal.js +190 -0
  763. package/vendor/ink/node_modules/node-pty/lib/types.js +7 -0
  764. package/vendor/ink/node_modules/node-pty/lib/unixTerminal.js +349 -0
  765. package/vendor/ink/node_modules/node-pty/lib/utils.js +39 -0
  766. package/vendor/ink/node_modules/node-pty/lib/windowsConoutConnection.js +125 -0
  767. package/vendor/ink/node_modules/node-pty/lib/windowsPtyAgent.js +287 -0
  768. package/vendor/ink/node_modules/node-pty/lib/windowsTerminal.js +201 -0
  769. package/vendor/ink/node_modules/node-pty/lib/worker/conoutSocketWorker.js +22 -0
  770. package/vendor/ink/node_modules/node-pty/package.json +65 -0
  771. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/pty.node +0 -0
  772. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/spawn-helper +0 -0
  773. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/pty.node +0 -0
  774. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/spawn-helper +0 -0
  775. package/vendor/ink/node_modules/node-pty/prebuilds/linux-arm64/pty.node +0 -0
  776. package/vendor/ink/node_modules/node-pty/prebuilds/linux-x64/pty.node +0 -0
  777. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
  778. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
  779. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
  780. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.pdb +0 -0
  781. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
  782. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.pdb +0 -0
  783. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
  784. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
  785. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.node +0 -0
  786. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.pdb +0 -0
  787. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
  788. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.pdb +0 -0
  789. package/vendor/ink/node_modules/node-pty/scripts/post-install.js +76 -0
  790. package/vendor/ink/node_modules/node-pty/scripts/prebuild.js +34 -0
  791. package/vendor/ink/node_modules/node-pty/src/unix/pty.cc +875 -0
  792. package/vendor/ink/node_modules/node-pty/src/unix/spawn-helper.cc +23 -0
  793. package/vendor/ink/node_modules/node-pty/src/win/conpty.cc +582 -0
  794. package/vendor/ink/node_modules/node-pty/src/win/conpty.h +41 -0
  795. package/vendor/ink/node_modules/node-pty/src/win/conpty_console_list.cc +44 -0
  796. package/vendor/ink/node_modules/node-pty/src/win/path_util.cc +95 -0
  797. package/vendor/ink/node_modules/node-pty/src/win/path_util.h +26 -0
  798. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/OpenConsole.exe +0 -0
  799. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/conpty.dll +0 -0
  800. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/OpenConsole.exe +0 -0
  801. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/conpty.dll +0 -0
  802. package/vendor/ink/node_modules/node-pty/typings/node-pty.d.ts +215 -0
  803. package/vendor/ink/node_modules/undici-types/LICENSE +21 -0
  804. package/vendor/ink/node_modules/undici-types/README.md +6 -0
  805. package/vendor/ink/node_modules/undici-types/agent.d.ts +32 -0
  806. package/vendor/ink/node_modules/undici-types/api.d.ts +43 -0
  807. package/vendor/ink/node_modules/undici-types/balanced-pool.d.ts +30 -0
  808. package/vendor/ink/node_modules/undici-types/cache-interceptor.d.ts +173 -0
  809. package/vendor/ink/node_modules/undici-types/cache.d.ts +36 -0
  810. package/vendor/ink/node_modules/undici-types/client-stats.d.ts +15 -0
  811. package/vendor/ink/node_modules/undici-types/client.d.ts +108 -0
  812. package/vendor/ink/node_modules/undici-types/connector.d.ts +34 -0
  813. package/vendor/ink/node_modules/undici-types/content-type.d.ts +21 -0
  814. package/vendor/ink/node_modules/undici-types/cookies.d.ts +30 -0
  815. package/vendor/ink/node_modules/undici-types/diagnostics-channel.d.ts +74 -0
  816. package/vendor/ink/node_modules/undici-types/dispatcher.d.ts +276 -0
  817. package/vendor/ink/node_modules/undici-types/env-http-proxy-agent.d.ts +22 -0
  818. package/vendor/ink/node_modules/undici-types/errors.d.ts +161 -0
  819. package/vendor/ink/node_modules/undici-types/eventsource.d.ts +66 -0
  820. package/vendor/ink/node_modules/undici-types/fetch.d.ts +211 -0
  821. package/vendor/ink/node_modules/undici-types/formdata.d.ts +108 -0
  822. package/vendor/ink/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  823. package/vendor/ink/node_modules/undici-types/global-origin.d.ts +7 -0
  824. package/vendor/ink/node_modules/undici-types/h2c-client.d.ts +73 -0
  825. package/vendor/ink/node_modules/undici-types/handlers.d.ts +15 -0
  826. package/vendor/ink/node_modules/undici-types/header.d.ts +160 -0
  827. package/vendor/ink/node_modules/undici-types/index.d.ts +88 -0
  828. package/vendor/ink/node_modules/undici-types/interceptors.d.ts +73 -0
  829. package/vendor/ink/node_modules/undici-types/mock-agent.d.ts +68 -0
  830. package/vendor/ink/node_modules/undici-types/mock-call-history.d.ts +111 -0
  831. package/vendor/ink/node_modules/undici-types/mock-client.d.ts +27 -0
  832. package/vendor/ink/node_modules/undici-types/mock-errors.d.ts +12 -0
  833. package/vendor/ink/node_modules/undici-types/mock-interceptor.d.ts +94 -0
  834. package/vendor/ink/node_modules/undici-types/mock-pool.d.ts +27 -0
  835. package/vendor/ink/node_modules/undici-types/package.json +55 -0
  836. package/vendor/ink/node_modules/undici-types/patch.d.ts +29 -0
  837. package/vendor/ink/node_modules/undici-types/pool-stats.d.ts +19 -0
  838. package/vendor/ink/node_modules/undici-types/pool.d.ts +41 -0
  839. package/vendor/ink/node_modules/undici-types/proxy-agent.d.ts +29 -0
  840. package/vendor/ink/node_modules/undici-types/readable.d.ts +68 -0
  841. package/vendor/ink/node_modules/undici-types/retry-agent.d.ts +8 -0
  842. package/vendor/ink/node_modules/undici-types/retry-handler.d.ts +125 -0
  843. package/vendor/ink/node_modules/undici-types/round-robin-pool.d.ts +41 -0
  844. package/vendor/ink/node_modules/undici-types/snapshot-agent.d.ts +109 -0
  845. package/vendor/ink/node_modules/undici-types/util.d.ts +18 -0
  846. package/vendor/ink/node_modules/undici-types/utility.d.ts +7 -0
  847. package/vendor/ink/node_modules/undici-types/webidl.d.ts +341 -0
  848. package/vendor/ink/node_modules/undici-types/websocket.d.ts +186 -0
  849. package/vendor/ink/package.json +201 -0
  850. package/vendor/ink/readme.md +2636 -0
  851. package/bin/swag-agent.js +0 -9
  852. package/dist/server/lib/pg-rate-limiter.d.ts +0 -21
  853. package/dist/server/lib/pg-rate-limiter.js +0 -86
@@ -4,16 +4,20 @@
4
4
  * Replaces proxy+direct call paths in agent-loop, subagent, teammate.
5
5
  * CLI-only: always calls through server proxy (no direct Anthropic SDK usage).
6
6
  */
7
- import { getContextManagement, getMaxOutputTokens, getThinkingConfig, isRetryableError, addPromptCaching, } from "./agent-core.js";
7
+
8
+ import { getContextManagement, getMaxOutputTokens, getThinkingConfig, isRetryableError, addPromptCaching } from "./agent-core.js";
8
9
  import { getProvider } from "./constants.js";
9
10
  // ============================================================================
10
11
  // CONSTANTS
11
12
  // ============================================================================
13
+
12
14
  const MAX_RETRIES = 3;
13
15
  const RETRY_BASE_DELAY_MS = 1000;
16
+
14
17
  // ============================================================================
15
18
  // API REQUEST CONFIG BUILDER
16
19
  // ============================================================================
20
+
17
21
  /**
18
22
  * Build all Anthropic API config from a simple profile.
19
23
  *
@@ -23,293 +27,359 @@ const RETRY_BASE_DELAY_MS = 1000;
23
27
  * - 'teammate': clear at 80K/keep 3, no compaction
24
28
  */
25
29
  export function buildAPIRequest(opts) {
26
- const { model, contextProfile, thinkingEnabled = false, maxOutputTokens } = opts;
27
- // Context management config per profile
28
- // Non-Anthropic models (Gemini, OpenAI, etc.) don't support Anthropic betas or context management
29
- const provider = getProvider(model);
30
- const isAnthropicModel = provider === "anthropic" || provider === "bedrock";
31
- let betas = isAnthropicModel ? ["context-management-2025-06-27"] : [];
32
- let edits = [];
33
- switch (contextProfile) {
34
- case "main": {
35
- const ctxMgmt = getContextManagement(model);
36
- betas = [...ctxMgmt.betas];
37
- edits = ctxMgmt.config.edits;
38
- break;
30
+ const {
31
+ model,
32
+ contextProfile,
33
+ thinkingEnabled = false,
34
+ maxOutputTokens,
35
+ contextOverrides
36
+ } = opts;
37
+
38
+ // Context management config per profile
39
+ // Non-Anthropic models (Gemini, OpenAI, etc.) don't support Anthropic betas or context management
40
+ const provider = getProvider(model);
41
+ const isAnthropicModel = provider === "anthropic" || provider === "bedrock";
42
+ let betas = isAnthropicModel ? ["context-management-2025-06-27"] : [];
43
+ let edits = [];
44
+ switch (contextProfile) {
45
+ case "main":
46
+ {
47
+ const ctxMgmt = getContextManagement(model, contextOverrides);
48
+ betas = [...ctxMgmt.betas];
49
+ edits = ctxMgmt.config.edits;
50
+ break;
51
+ }
52
+ case "subagent":
53
+ if (isAnthropicModel) {
54
+ edits = [{
55
+ type: "clear_thinking_20251015",
56
+ keep: {
57
+ type: "thinking_turns",
58
+ value: 1
59
+ }
60
+ }, {
61
+ type: "clear_tool_uses_20250919",
62
+ trigger: {
63
+ type: "input_tokens",
64
+ value: 60_000
65
+ },
66
+ keep: {
67
+ type: "tool_uses",
68
+ value: 2
69
+ }
70
+ }];
71
+ // Compaction for sub-agents on models that support it (lower threshold than main agent).
72
+ // Trigger at 80K — above the 60K clear_tool_uses threshold so clearing fires first.
73
+ const supportsCompaction = model.includes("opus-4-6") || model.includes("sonnet-4-6");
74
+ if (supportsCompaction) {
75
+ edits.push({
76
+ type: "compact_20260112",
77
+ trigger: {
78
+ type: "input_tokens",
79
+ value: 80_000
80
+ },
81
+ pause_after_compaction: true,
82
+ instructions: "Summarize preserving: task goal, files found/modified, key findings, next steps."
83
+ });
84
+ betas.push("compact-2026-01-12");
39
85
  }
40
- case "subagent":
41
- if (isAnthropicModel) {
42
- edits = [
43
- {
44
- type: "clear_thinking_20251015",
45
- keep: { type: "thinking_turns", value: 1 },
46
- },
47
- {
48
- type: "clear_tool_uses_20250919",
49
- trigger: { type: "input_tokens", value: 60_000 },
50
- keep: { type: "tool_uses", value: 2 },
51
- },
52
- ];
53
- // Compaction for sub-agents on models that support it (lower threshold than main agent).
54
- // Trigger at 80K — above the 60K clear_tool_uses threshold so clearing fires first.
55
- const supportsCompaction = model.includes("opus-4-6") || model.includes("sonnet-4-6");
56
- if (supportsCompaction) {
57
- edits.push({
58
- type: "compact_20260112",
59
- trigger: { type: "input_tokens", value: 80_000 },
60
- pause_after_compaction: true,
61
- instructions: "Summarize preserving: task goal, files found/modified, key findings, next steps.",
62
- });
63
- betas.push("compact-2026-01-12");
64
- }
65
- }
66
- break;
67
- case "teammate": {
68
- const ctxMgmt = getContextManagement(model);
69
- betas = [...ctxMgmt.betas];
70
- edits = ctxMgmt.config.edits;
71
- break;
72
- }
73
- }
74
- // Thinking config
75
- const thinkingCfg = getThinkingConfig(model, thinkingEnabled);
76
- if (thinkingCfg.beta)
77
- betas.push(thinkingCfg.beta);
78
- // Max tokens — caller is responsible for setting appropriate limits per context
79
- const maxTokens = getMaxOutputTokens(model, maxOutputTokens);
80
- // Build thinking param (ensure budget < maxTokens)
81
- // Only include for Anthropic/Bedrock — Gemini/OpenAI handle thinking internally
82
- let thinking;
83
- if (isAnthropicModel && thinkingCfg.thinking.type !== "disabled") {
84
- thinking = thinkingCfg.thinking.budget_tokens
85
- ? { ...thinkingCfg.thinking, budget_tokens: Math.min(thinkingCfg.thinking.budget_tokens, maxTokens - 1) }
86
- : thinkingCfg.thinking;
87
- }
88
- // Strip clear_thinking edits when thinking is disabled — API requires thinking
89
- // to be enabled or adaptive for clear_thinking_20251015 to be accepted
90
- if (!thinking) {
91
- edits = edits.filter(e => e.type !== "clear_thinking_20251015");
92
- }
93
- return {
94
- betas,
95
- contextManagement: { edits },
96
- thinking,
97
- maxTokens,
98
- };
86
+ }
87
+ break;
88
+ case "teammate":
89
+ {
90
+ const ctxMgmt = getContextManagement(model);
91
+ betas = [...ctxMgmt.betas];
92
+ edits = ctxMgmt.config.edits;
93
+ break;
94
+ }
95
+ }
96
+
97
+ // Thinking config
98
+ const thinkingCfg = getThinkingConfig(model, thinkingEnabled);
99
+ if (thinkingCfg.beta) betas.push(thinkingCfg.beta);
100
+
101
+ // Max tokens caller is responsible for setting appropriate limits per context
102
+ const maxTokens = getMaxOutputTokens(model, maxOutputTokens);
103
+
104
+ // Build thinking param (ensure budget < maxTokens)
105
+ // Only include for Anthropic/Bedrock Gemini/OpenAI handle thinking internally
106
+ let thinking;
107
+ if (isAnthropicModel && thinkingCfg.thinking.type !== "disabled") {
108
+ thinking = thinkingCfg.thinking.budget_tokens ? {
109
+ ...thinkingCfg.thinking,
110
+ budget_tokens: Math.min(thinkingCfg.thinking.budget_tokens, maxTokens - 1)
111
+ } : thinkingCfg.thinking;
112
+ }
113
+
114
+ // Strip clear_thinking edits when thinking is disabled — API requires thinking
115
+ // to be enabled or adaptive for clear_thinking_20251015 to be accepted
116
+ if (!thinking) {
117
+ edits = edits.filter(e => e.type !== "clear_thinking_20251015");
118
+ }
119
+ return {
120
+ betas,
121
+ contextManagement: {
122
+ edits
123
+ },
124
+ thinking,
125
+ maxTokens
126
+ };
99
127
  }
128
+
129
+ // ============================================================================
130
+ // SERVER PROXY CALLER
131
+ // ============================================================================
132
+
100
133
  /**
101
134
  * Call server proxy endpoint and return raw SSE stream.
102
135
  * Retries with exponential backoff on 429/500/529.
103
136
  */
104
137
  export async function callServerProxy(config) {
105
- const { proxyUrl, signal, timeoutMs } = config;
106
- let tokenRefreshed = false;
107
- for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
108
- try {
109
- const body = {
110
- mode: "proxy",
111
- messages: config.messages,
112
- system: config.system,
113
- tools: config.tools,
114
- model: config.model,
115
- max_tokens: config.apiConfig.maxTokens,
116
- stream: true,
117
- betas: config.apiConfig.betas,
118
- ...(config.apiConfig.contextManagement?.edits?.length
119
- ? { context_management: config.apiConfig.contextManagement }
120
- : {}),
121
- };
122
- if (config.apiConfig.thinking) {
123
- body.thinking = config.apiConfig.thinking;
124
- }
125
- if (config.storeId) {
126
- body.store_id = config.storeId;
127
- }
128
- // Prune old base64 images from conversation history before serializing.
129
- // Keep images only in the last 2 messages to avoid multi-MB request bodies
130
- // that can cause "Invalid JSON" errors from body truncation on the proxy.
131
- if (Array.isArray(body.messages) && body.messages.length > 4) {
132
- const msgs = body.messages;
133
- const keepFrom = Math.max(0, msgs.length - 2);
134
- for (let i = 0; i < keepFrom; i++) {
135
- const msg = msgs[i];
136
- if (!Array.isArray(msg?.content))
137
- continue;
138
- for (const block of msg.content) {
139
- if (block.type === "image" && block.source?.type === "base64") {
140
- block.type = "text";
141
- block.text = "[image]";
142
- delete block.source;
143
- }
144
- if (block.type === "tool_result" && Array.isArray(block.content)) {
145
- for (const sub of block.content) {
146
- if (sub.type === "image" && sub.source?.type === "base64") {
147
- sub.type = "text";
148
- sub.text = "[image]";
149
- delete sub.source;
150
- }
151
- }
152
- }
153
- }
154
- }
155
- }
156
- const serialized = JSON.stringify(body);
157
- const fetchOpts = {
158
- method: "POST",
159
- headers: {
160
- "Content-Type": "application/json",
161
- "Authorization": `Bearer ${config.token}`,
162
- "Content-Length": String(Buffer.byteLength(serialized)),
163
- },
164
- body: serialized,
165
- signal,
166
- };
167
- // Apply timeout only when the caller did NOT already supply a signal
168
- let controller;
169
- let timeout;
170
- if (timeoutMs && !signal) {
171
- controller = new AbortController();
172
- timeout = setTimeout(() => controller.abort(), timeoutMs);
173
- fetchOpts.signal = controller.signal;
138
+ const {
139
+ proxyUrl,
140
+ signal,
141
+ timeoutMs
142
+ } = config;
143
+ let tokenRefreshed = false;
144
+ for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {
145
+ try {
146
+ const body = {
147
+ mode: "proxy",
148
+ messages: config.messages,
149
+ system: config.system,
150
+ tools: config.tools,
151
+ model: config.model,
152
+ max_tokens: config.apiConfig.maxTokens,
153
+ stream: true,
154
+ betas: config.apiConfig.betas,
155
+ ...(config.apiConfig.contextManagement?.edits?.length ? {
156
+ context_management: config.apiConfig.contextManagement
157
+ } : {})
158
+ };
159
+ if (config.apiConfig.thinking) {
160
+ body.thinking = config.apiConfig.thinking;
161
+ // Anthropic requires temperature=1.0 when thinking is enabled enforce client-side
162
+ if (config.apiConfig.thinking.type !== "disabled") {
163
+ body.temperature = 1.0;
164
+ }
165
+ }
166
+ if (config.storeId) {
167
+ body.store_id = config.storeId;
168
+ }
169
+
170
+ // Prune old base64 images from conversation history before serializing.
171
+ // Keep images only in the last 2 messages to avoid multi-MB request bodies
172
+ // that can cause "Invalid JSON" errors from body truncation on the proxy.
173
+ if (Array.isArray(body.messages) && body.messages.length > 4) {
174
+ const msgs = body.messages;
175
+ const keepFrom = Math.max(0, msgs.length - 2);
176
+ for (let i = 0; i < keepFrom; i++) {
177
+ const msg = msgs[i];
178
+ if (!Array.isArray(msg?.content)) continue;
179
+ for (const block of msg.content) {
180
+ if (block.type === "image" && block.source?.type === "base64") {
181
+ block.type = "text";
182
+ block.text = "[image]";
183
+ delete block.source;
174
184
  }
175
- try {
176
- const response = await fetch(proxyUrl, fetchOpts);
177
- if (timeout)
178
- clearTimeout(timeout);
179
- if (response.ok && response.body) {
180
- return response.body;
181
- }
182
- const errorBody = await response.text();
183
- // Auto-refresh on 401 (token invalidated server-side before local expiry)
184
- if (response.status === 401 && config.onTokenRefresh && !tokenRefreshed) {
185
- const newToken = await config.onTokenRefresh();
186
- if (newToken) {
187
- tokenRefreshed = true;
188
- config.token = newToken;
189
- continue; // retry with new token
190
- }
185
+ if (block.type === "tool_result" && Array.isArray(block.content)) {
186
+ for (const sub of block.content) {
187
+ if (sub.type === "image" && sub.source?.type === "base64") {
188
+ sub.type = "text";
189
+ sub.text = "[image]";
190
+ delete sub.source;
191
191
  }
192
- throw Object.assign(new Error(`Proxy error (${response.status}): ${errorBody}`), { status: response.status });
193
- }
194
- catch (err) {
195
- if (timeout)
196
- clearTimeout(timeout);
197
- throw err;
192
+ }
198
193
  }
194
+ }
199
195
  }
200
- catch (err) {
201
- if (signal?.aborted)
202
- throw err;
203
- if (attempt < MAX_RETRIES && isRetryableError(err)) {
204
- const errMsg = err instanceof Error ? err.message : String(err);
205
- config.onRetry?.(attempt + 1, MAX_RETRIES, errMsg);
206
- const delay = RETRY_BASE_DELAY_MS * Math.pow(2, attempt);
207
- // Abort-aware backoff — ESC can interrupt the wait immediately
208
- await new Promise((resolve, reject) => {
209
- if (signal?.aborted) {
210
- reject(signal.reason ?? new Error("Aborted"));
211
- return;
212
- }
213
- const timer = setTimeout(resolve, delay);
214
- const onAbort = () => { clearTimeout(timer); reject(signal.reason ?? new Error("Aborted")); };
215
- signal?.addEventListener("abort", onAbort, { once: true });
216
- });
217
- // Fallback model on last retry
218
- if (attempt === MAX_RETRIES - 1 && config.fallbackModel) {
219
- const fromModel = config.model;
220
- config.model = config.fallbackModel;
221
- config.onFallback?.(fromModel, config.model);
222
- }
223
- continue;
224
- }
225
- throw err;
196
+ }
197
+ const serialized = JSON.stringify(body);
198
+ const fetchOpts = {
199
+ method: "POST",
200
+ headers: {
201
+ "Content-Type": "application/json",
202
+ "Authorization": `Bearer ${config.token}`,
203
+ "Content-Length": String(Buffer.byteLength(serialized))
204
+ },
205
+ body: serialized,
206
+ signal
207
+ };
208
+
209
+ // Apply timeout only when the caller did NOT already supply a signal
210
+ let controller;
211
+ let timeout;
212
+ if (timeoutMs && !signal) {
213
+ controller = new AbortController();
214
+ timeout = setTimeout(() => controller.abort(), timeoutMs);
215
+ fetchOpts.signal = controller.signal;
216
+ }
217
+ try {
218
+ const response = await fetch(proxyUrl, fetchOpts);
219
+ if (timeout) clearTimeout(timeout);
220
+ if (response.ok && response.body) {
221
+ return response.body;
222
+ }
223
+ const errorBody = await response.text();
224
+
225
+ // Auto-refresh on 401 (token invalidated server-side before local expiry)
226
+ if (response.status === 401 && config.onTokenRefresh && !tokenRefreshed) {
227
+ const newToken = await config.onTokenRefresh();
228
+ if (newToken) {
229
+ tokenRefreshed = true;
230
+ config.token = newToken;
231
+ continue; // retry with new token
232
+ }
233
+ }
234
+ throw Object.assign(new Error(`Proxy error (${response.status}): ${errorBody}`), {
235
+ status: response.status
236
+ });
237
+ } catch (err) {
238
+ if (timeout) clearTimeout(timeout);
239
+ throw err;
240
+ }
241
+ } catch (err) {
242
+ if (signal?.aborted) throw err;
243
+ if (attempt < MAX_RETRIES && isRetryableError(err)) {
244
+ const errMsg = err instanceof Error ? err.message : String(err);
245
+ config.onRetry?.(attempt + 1, MAX_RETRIES, errMsg);
246
+ const delay = RETRY_BASE_DELAY_MS * Math.pow(2, attempt);
247
+
248
+ // Abort-aware backoff — ESC can interrupt the wait immediately
249
+ await new Promise((resolve, reject) => {
250
+ if (signal?.aborted) {
251
+ reject(signal.reason ?? new Error("Aborted"));
252
+ return;
253
+ }
254
+ const timer = setTimeout(resolve, delay);
255
+ const onAbort = () => {
256
+ clearTimeout(timer);
257
+ reject(signal.reason ?? new Error("Aborted"));
258
+ };
259
+ signal?.addEventListener("abort", onAbort, {
260
+ once: true
261
+ });
262
+ });
263
+
264
+ // Fallback model on last retry
265
+ if (attempt === MAX_RETRIES - 1 && config.fallbackModel) {
266
+ const fromModel = config.model;
267
+ config.model = config.fallbackModel;
268
+ config.onFallback?.(fromModel, config.model);
226
269
  }
270
+ continue;
271
+ }
272
+ throw err;
227
273
  }
228
- throw new Error("Failed to get response after retries");
274
+ }
275
+ throw new Error("Failed to get response after retries");
229
276
  }
277
+
230
278
  // ============================================================================
231
279
  // HELPERS — system prompt + caching setup
232
280
  // ============================================================================
281
+
233
282
  /**
234
283
  * Build system blocks with prompt caching.
235
284
  * Cached system prompt + optional dynamic cost context (after cache breakpoint).
236
285
  */
237
286
  export function buildSystemBlocks(systemPrompt, costContext, enableCaching = true) {
238
- const system = [];
239
- if (enableCaching) {
240
- system.push({
241
- type: "text",
242
- text: systemPrompt,
243
- cache_control: { type: "ephemeral" },
244
- });
245
- }
246
- else {
247
- system.push({ type: "text", text: systemPrompt });
248
- }
249
- if (costContext) {
250
- system.push({ type: "text", text: costContext });
251
- }
252
- return system;
287
+ const system = [];
288
+ if (enableCaching) {
289
+ system.push({
290
+ type: "text",
291
+ text: systemPrompt,
292
+ cache_control: {
293
+ type: "ephemeral"
294
+ }
295
+ });
296
+ } else {
297
+ system.push({
298
+ type: "text",
299
+ text: systemPrompt
300
+ });
301
+ }
302
+ if (costContext) {
303
+ system.push({
304
+ type: "text",
305
+ text: costContext
306
+ });
307
+ }
308
+ return system;
253
309
  }
310
+
254
311
  /**
255
312
  * Prepare messages and tools with prompt caching.
256
313
  * Skips cache_control injection for Gemini (uses implicit caching).
257
314
  */
258
315
  export function prepareWithCaching(tools, messages, model) {
259
- if (model) {
260
- const provider = getProvider(model);
261
- if (provider === "gemini" || provider === "openai") {
262
- return { tools, messages };
263
- }
316
+ if (model) {
317
+ const provider = getProvider(model);
318
+ if (provider === "gemini" || provider === "openai") {
319
+ return {
320
+ tools,
321
+ messages
322
+ };
264
323
  }
265
- return addPromptCaching(tools, messages);
324
+ }
325
+ return addPromptCaching(tools, messages);
266
326
  }
327
+
267
328
  // ============================================================================
268
329
  // GEMINI CONTEXT TRIMMING
269
330
  // ============================================================================
331
+
270
332
  /**
271
333
  * Client-side context trimming for Gemini (no server-side context management).
272
334
  * When estimated input tokens exceed threshold, replaces old tool result contents
273
335
  * with "[trimmed]" to stay within Gemini's 1M context window.
274
336
  */
275
337
  export function trimGeminiContext(messages, estimatedTokens, threshold = 950_000, keepRecent = 5) {
276
- if (estimatedTokens < threshold)
277
- return messages;
278
- // Find all tool_result blocks and trim oldest ones
279
- let toolResultCount = 0;
280
- for (const msg of messages) {
281
- if (Array.isArray(msg.content)) {
282
- for (const block of msg.content) {
283
- if (block.type === "tool_result")
284
- toolResultCount++;
285
- }
286
- }
338
+ if (estimatedTokens < threshold) return messages;
339
+ let toolResultCount = 0;
340
+ for (const msg of messages) {
341
+ if (Array.isArray(msg.content)) {
342
+ for (const block of msg.content) {
343
+ if (block.type === "tool_result") toolResultCount++;
344
+ }
287
345
  }
288
- if (toolResultCount <= keepRecent)
289
- return messages;
290
- const trimCount = toolResultCount - keepRecent;
291
- let trimmed = 0;
292
- return messages.map((msg) => {
293
- if (!Array.isArray(msg.content))
294
- return msg;
295
- const content = msg.content.map((block) => {
296
- if (block.type === "tool_result" && trimmed < trimCount) {
297
- trimmed++;
298
- if (typeof block.content === "string") {
299
- return { ...block, content: "[trimmed]" };
300
- }
301
- else if (Array.isArray(block.content)) {
302
- return { ...block, content: [{ type: "text", text: "[trimmed]" }] };
303
- }
304
- }
305
- return block;
306
- });
307
- return { ...msg, content };
346
+ }
347
+ if (toolResultCount <= keepRecent) return messages;
348
+ const trimCount = toolResultCount - keepRecent;
349
+ let trimmed = 0;
350
+ return messages.map(msg => {
351
+ if (!Array.isArray(msg.content)) return msg;
352
+ const content = msg.content.map(block => {
353
+ if (block.type === "tool_result" && trimmed < trimCount) {
354
+ trimmed++;
355
+ if (typeof block.content === "string") {
356
+ return {
357
+ ...block,
358
+ content: "[trimmed]"
359
+ };
360
+ } else if (Array.isArray(block.content)) {
361
+ return {
362
+ ...block,
363
+ content: [{
364
+ type: "text",
365
+ text: "[trimmed]"
366
+ }]
367
+ };
368
+ }
369
+ }
370
+ return block;
308
371
  });
372
+ return {
373
+ ...msg,
374
+ content
375
+ };
376
+ });
309
377
  }
378
+
310
379
  // ============================================================================
311
380
  // OPENAI CONTEXT TRIMMING
312
381
  // ============================================================================
382
+
313
383
  /**
314
384
  * Client-side context trimming for OpenAI (no server-side context management).
315
385
  * When estimated input tokens exceed threshold, replaces old tool result contents
@@ -318,113 +388,135 @@ export function trimGeminiContext(messages, estimatedTokens, threshold = 950_000
318
388
  // ============================================================================
319
389
  // AUDIO TRANSCRIPTION CLIENT
320
390
  // ============================================================================
391
+
321
392
  /**
322
393
  * Call server transcription endpoint (OpenAI Whisper via our Fly.io proxy).
323
394
  * Used by tool-dispatch when __AUDIO__ marker is detected in tool results.
324
395
  */
325
396
  export async function callTranscribe(opts) {
326
- const { proxyUrl, token, storeId, audioBase64, mediaType } = opts;
327
- // Use same server URL as proxy, just different mode
328
- const response = await fetch(proxyUrl, {
329
- method: "POST",
330
- headers: {
331
- "Content-Type": "application/json",
332
- Authorization: `Bearer ${token}`,
333
- },
334
- body: JSON.stringify({
335
- mode: "transcribe",
336
- audio_base64: audioBase64,
337
- media_type: mediaType,
338
- store_id: storeId,
339
- }),
340
- });
341
- if (!response.ok) {
342
- const errText = await response.text();
343
- throw new Error(`Transcription failed (${response.status}): ${errText}`);
344
- }
345
- const data = (await response.json());
346
- if (!data.success || !data.transcript) {
347
- throw new Error(data.error || "Transcription returned no transcript");
348
- }
349
- return data.transcript;
397
+ const {
398
+ proxyUrl,
399
+ token,
400
+ storeId,
401
+ audioBase64,
402
+ mediaType
403
+ } = opts;
404
+
405
+ // Use same server URL as proxy, just different mode
406
+ const response = await fetch(proxyUrl, {
407
+ method: "POST",
408
+ headers: {
409
+ "Content-Type": "application/json",
410
+ Authorization: `Bearer ${token}`
411
+ },
412
+ body: JSON.stringify({
413
+ mode: "transcribe",
414
+ audio_base64: audioBase64,
415
+ media_type: mediaType,
416
+ store_id: storeId
417
+ })
418
+ });
419
+ if (!response.ok) {
420
+ const errText = await response.text();
421
+ throw new Error(`Transcription failed (${response.status}): ${errText}`);
422
+ }
423
+ const data = await response.json();
424
+ if (!data.success || !data.transcript) {
425
+ throw new Error(data.error || "Transcription returned no transcript");
426
+ }
427
+ return data.transcript;
350
428
  }
429
+
351
430
  // ============================================================================
352
431
  // OPENAI CONTEXT TRIMMING
353
432
  // ============================================================================
433
+
354
434
  export function trimOpenAIContext(messages, estimatedTokens, threshold = 190_000, keepRecent = 5) {
355
- if (estimatedTokens < threshold)
356
- return messages;
357
- // Find all tool_result blocks and trim oldest ones
358
- let toolResultCount = 0;
359
- for (const msg of messages) {
360
- if (Array.isArray(msg.content)) {
361
- for (const block of msg.content) {
362
- if (block.type === "tool_result")
363
- toolResultCount++;
364
- }
365
- }
435
+ if (estimatedTokens < threshold) return messages;
436
+ let toolResultCount = 0;
437
+ for (const msg of messages) {
438
+ if (Array.isArray(msg.content)) {
439
+ for (const block of msg.content) {
440
+ if (block.type === "tool_result") toolResultCount++;
441
+ }
366
442
  }
367
- if (toolResultCount <= keepRecent)
368
- return messages;
369
- const trimCount = toolResultCount - keepRecent;
370
- let trimmed = 0;
371
- return messages.map((msg) => {
372
- if (!Array.isArray(msg.content))
373
- return msg;
374
- const content = msg.content.map((block) => {
375
- if (block.type === "tool_result" && trimmed < trimCount) {
376
- trimmed++;
377
- if (typeof block.content === "string") {
378
- return { ...block, content: "[trimmed]" };
379
- }
380
- else if (Array.isArray(block.content)) {
381
- return { ...block, content: [{ type: "text", text: "[trimmed]" }] };
382
- }
383
- }
384
- return block;
385
- });
386
- return { ...msg, content };
443
+ }
444
+ if (toolResultCount <= keepRecent) return messages;
445
+ const trimCount = toolResultCount - keepRecent;
446
+ let trimmed = 0;
447
+ return messages.map(msg => {
448
+ if (!Array.isArray(msg.content)) return msg;
449
+ const content = msg.content.map(block => {
450
+ if (block.type === "tool_result" && trimmed < trimCount) {
451
+ trimmed++;
452
+ if (typeof block.content === "string") {
453
+ return {
454
+ ...block,
455
+ content: "[trimmed]"
456
+ };
457
+ } else if (Array.isArray(block.content)) {
458
+ return {
459
+ ...block,
460
+ content: [{
461
+ type: "text",
462
+ text: "[trimmed]"
463
+ }]
464
+ };
465
+ }
466
+ }
467
+ return block;
387
468
  });
469
+ return {
470
+ ...msg,
471
+ content
472
+ };
473
+ });
388
474
  }
475
+
389
476
  // ============================================================================
390
477
  // PROVIDER COMPACTION CLIENT
391
478
  // ============================================================================
479
+
392
480
  const COMPACTION_TIMEOUT_MS = 30_000;
481
+
393
482
  /**
394
483
  * Request conversation compaction from the server (Haiku summarization).
395
484
  * Used by non-Anthropic providers (OpenAI, Gemini) that lack native compaction.
396
485
  * Returns summary string or null on failure (caller keeps unsummarized history).
397
486
  */
398
487
  export async function requestProviderCompaction(opts) {
399
- const { proxyUrl, token, messages, systemPrompt } = opts;
488
+ const {
489
+ proxyUrl,
490
+ token,
491
+ messages,
492
+ systemPrompt
493
+ } = opts;
494
+ try {
495
+ const controller = new AbortController();
496
+ const timeout = setTimeout(() => controller.abort(), COMPACTION_TIMEOUT_MS);
400
497
  try {
401
- const controller = new AbortController();
402
- const timeout = setTimeout(() => controller.abort(), COMPACTION_TIMEOUT_MS);
403
- try {
404
- const response = await fetch(proxyUrl, {
405
- method: "POST",
406
- headers: {
407
- "Content-Type": "application/json",
408
- Authorization: `Bearer ${token}`,
409
- },
410
- body: JSON.stringify({
411
- mode: "compact",
412
- messages,
413
- system_prompt: systemPrompt,
414
- }),
415
- signal: controller.signal,
416
- });
417
- clearTimeout(timeout);
418
- if (!response.ok)
419
- return null;
420
- const data = (await response.json());
421
- return data.success && data.compaction_content ? data.compaction_content : null;
422
- }
423
- finally {
424
- clearTimeout(timeout);
425
- }
426
- }
427
- catch {
428
- return null; // Graceful failure — caller keeps unsummarized history
498
+ const response = await fetch(proxyUrl, {
499
+ method: "POST",
500
+ headers: {
501
+ "Content-Type": "application/json",
502
+ Authorization: `Bearer ${token}`
503
+ },
504
+ body: JSON.stringify({
505
+ mode: "compact",
506
+ messages,
507
+ system_prompt: systemPrompt
508
+ }),
509
+ signal: controller.signal
510
+ });
511
+ clearTimeout(timeout);
512
+ if (!response.ok) return null;
513
+ const data = await response.json();
514
+ return data.success && data.compaction_content ? data.compaction_content : null;
515
+ } finally {
516
+ clearTimeout(timeout);
429
517
  }
518
+ } catch {
519
+ return null; // Graceful failure — caller keeps unsummarized history
520
+ }
430
521
  }
522
+ //# sourceMappingURL=api-client.js.map