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
@@ -3,22 +3,27 @@
3
3
  //
4
4
  // Phase 7.1: Uses getProviderAdapter() from the registry instead of
5
5
  // maintaining its own adapter map. Provider adapters self-register on import.
6
+
6
7
  import { ALLOWED_MODELS, MODELS, MODEL_MAP, getProvider, isOpenAIReasoningModel } from "../shared/constants.js";
7
8
  import { getProviderAdapter } from "./providers/registry.js";
8
9
  import { jsonResponse } from "./providers/shared.js";
9
10
  import { canProviderHandleRequest, getBestProviderForRequest } from "./lib/provider-capabilities.js";
11
+
10
12
  // Import adapters to trigger self-registration via registerProvider()
11
13
  import "./providers/anthropic.js";
12
14
  import "./providers/bedrock.js";
13
15
  import "./providers/gemini.js";
14
16
  import "./providers/openai.js";
17
+
15
18
  // ============================================================================
16
19
  // MAX TOKEN LIMITS (per provider — used for proxy request clamping)
17
20
  // ============================================================================
21
+
18
22
  const ANTHROPIC_MAX_TOKENS = 128000;
19
23
  const GEMINI_MAX_TOKENS = 65536;
20
24
  const OPENAI_MAX_TOKENS = 128000;
21
25
  const OPENAI_REASONING_MAX_TOKENS = 100000;
26
+
22
27
  // ============================================================================
23
28
  // IMAGE MIME TYPE CORRECTION
24
29
  // ============================================================================
@@ -26,65 +31,70 @@ const OPENAI_REASONING_MAX_TOKENS = 100000;
26
31
  // mismatches. Prevents Anthropic API 400 errors that permanently poison the
27
32
  // conversation when a file extension doesn't match the actual image content
28
33
  // (e.g. a .webp file that's actually PNG).
29
- const IMAGE_SIGNATURES = [
30
- { prefix: "iVBORw0KGgo", type: "image/png" },
31
- { prefix: "/9j/", type: "image/jpeg" },
32
- { prefix: "R0lGOD", type: "image/gif" },
33
- { prefix: "UklGR", type: "image/webp" },
34
- ];
34
+
35
+ const IMAGE_SIGNATURES = [{
36
+ prefix: "iVBORw0KGgo",
37
+ type: "image/png"
38
+ }, {
39
+ prefix: "/9j/",
40
+ type: "image/jpeg"
41
+ }, {
42
+ prefix: "R0lGOD",
43
+ type: "image/gif"
44
+ }, {
45
+ prefix: "UklGR",
46
+ type: "image/webp"
47
+ }];
35
48
  function detectImageType(base64Data) {
36
- for (const sig of IMAGE_SIGNATURES) {
37
- if (base64Data.startsWith(sig.prefix)) {
38
- // RIFF header could be WebP or other formats — verify WEBP marker at offset 8
39
- if (sig.prefix === "UklGR") {
40
- try {
41
- const buf = Buffer.from(base64Data.slice(0, 24), "base64");
42
- if (buf.length >= 12 && buf.toString("ascii", 8, 12) === "WEBP") {
43
- return "image/webp";
44
- }
45
- }
46
- catch {
47
- return null;
48
- }
49
- return null;
50
- }
51
- return sig.type;
49
+ for (const sig of IMAGE_SIGNATURES) {
50
+ if (base64Data.startsWith(sig.prefix)) {
51
+ // RIFF header could be WebP or other formats — verify WEBP marker at offset 8
52
+ if (sig.prefix === "UklGR") {
53
+ try {
54
+ const buf = Buffer.from(base64Data.slice(0, 24), "base64");
55
+ if (buf.length >= 12 && buf.toString("ascii", 8, 12) === "WEBP") {
56
+ return "image/webp";
57
+ }
58
+ } catch {
59
+ return null;
52
60
  }
61
+ return null;
62
+ }
63
+ return sig.type;
53
64
  }
54
- return null;
65
+ }
66
+ return null;
55
67
  }
56
68
  function fixImageBlock(block) {
57
- if (block.type === "image" && block.source?.type === "base64" && block.source?.data) {
58
- const actual = detectImageType(block.source.data);
59
- if (actual && actual !== block.source.media_type) {
60
- console.log(`[proxy] Fixed image MIME: declared=${block.source.media_type} actual=${actual}`);
61
- block.source.media_type = actual;
62
- return true;
63
- }
69
+ if (block.type === "image" && block.source?.type === "base64" && block.source?.data) {
70
+ const actual = detectImageType(block.source.data);
71
+ if (actual && actual !== block.source.media_type) {
72
+ console.log(`[proxy] Fixed image MIME: declared=${block.source.media_type} actual=${actual}`);
73
+ block.source.media_type = actual;
74
+ return true;
64
75
  }
65
- return false;
76
+ }
77
+ return false;
66
78
  }
67
79
  function fixImageMimeTypes(messages) {
68
- let fixes = 0;
69
- for (const msg of messages) {
70
- if (!Array.isArray(msg.content))
71
- continue;
72
- for (const block of msg.content) {
73
- if (fixImageBlock(block))
74
- fixes++;
75
- // Also check tool_result blocks — images from Read tool end up here
76
- if (block.type === "tool_result" && Array.isArray(block.content)) {
77
- for (const sub of block.content) {
78
- if (fixImageBlock(sub))
79
- fixes++;
80
- }
81
- }
80
+ let fixes = 0;
81
+ for (const msg of messages) {
82
+ if (!Array.isArray(msg.content)) continue;
83
+ for (const block of msg.content) {
84
+ if (fixImageBlock(block)) fixes++;
85
+ // Also check tool_result blocks — images from Read tool end up here
86
+ if (block.type === "tool_result" && Array.isArray(block.content)) {
87
+ for (const sub of block.content) {
88
+ if (fixImageBlock(sub)) fixes++;
82
89
  }
90
+ }
83
91
  }
84
- if (fixes > 0) {
85
- console.log(`[proxy] Corrected ${fixes} image MIME type(s)`);
86
- }
92
+ }
93
+ if (fixes > 0) {
94
+ console.log(`[proxy] Corrected ${fixes} image MIME type(s)`);
95
+ }
87
96
  }
97
+
88
98
  // ============================================================================
89
99
  // IMAGE PRUNING — strip base64 from old turns to keep conversation size bounded
90
100
  // ============================================================================
@@ -92,149 +102,183 @@ function fixImageMimeTypes(messages) {
92
102
  // data only in the most recent user turn; older turns get their base64 replaced
93
103
  // with a lightweight "[image]" text placeholder. The model already processed
94
104
  // those images — it doesn't need the raw bytes again.
105
+
95
106
  function replaceImageBlock(block) {
96
- // Replace a base64 image block with a text placeholder.
97
- // Matches both full-data blocks AND blocks whose data was zeroed by the raw pruner.
98
- if (block.type === "image" && block.source?.type === "base64") {
99
- block.type = "text";
100
- block.text = "[image]";
101
- delete block.source;
102
- return true;
103
- }
104
- return false;
107
+ // Replace a base64 image block with a text placeholder.
108
+ // Matches both full-data blocks AND blocks whose data was zeroed by the raw pruner.
109
+ if (block.type === "image" && block.source?.type === "base64") {
110
+ block.type = "text";
111
+ block.text = "[image]";
112
+ delete block.source;
113
+ return true;
114
+ }
115
+ return false;
105
116
  }
106
117
  function pruneOldImages(messages) {
107
- // Find index of last user message — that turn keeps full image data
108
- let lastUserIdx = -1;
109
- for (let i = messages.length - 1; i >= 0; i--) {
110
- if (messages[i].role === "user") {
111
- lastUserIdx = i;
112
- break;
113
- }
118
+ // Find index of last user message — that turn keeps full image data
119
+ let lastUserIdx = -1;
120
+ for (let i = messages.length - 1; i >= 0; i--) {
121
+ if (messages[i].role === "user") {
122
+ lastUserIdx = i;
123
+ break;
114
124
  }
115
- let pruned = 0;
116
- for (let i = 0; i < messages.length; i++) {
117
- if (i === lastUserIdx)
118
- continue; // keep latest user turn intact
119
- const msg = messages[i];
120
- if (!Array.isArray(msg.content))
121
- continue;
122
- for (const block of msg.content) {
123
- if (replaceImageBlock(block)) {
124
- pruned++;
125
- continue;
126
- }
127
- if (block.type === "tool_result" && Array.isArray(block.content)) {
128
- for (const sub of block.content) {
129
- if (replaceImageBlock(sub))
130
- pruned++;
131
- }
132
- }
125
+ }
126
+ let pruned = 0;
127
+ for (let i = 0; i < messages.length; i++) {
128
+ if (i === lastUserIdx) continue; // keep latest user turn intact
129
+ const msg = messages[i];
130
+ if (!Array.isArray(msg.content)) continue;
131
+ for (const block of msg.content) {
132
+ if (replaceImageBlock(block)) {
133
+ pruned++;
134
+ continue;
135
+ }
136
+ if (block.type === "tool_result" && Array.isArray(block.content)) {
137
+ for (const sub of block.content) {
138
+ if (replaceImageBlock(sub)) pruned++;
133
139
  }
140
+ }
134
141
  }
135
- if (pruned > 0)
136
- console.log(`[proxy] Pruned ${pruned} base64 image(s) from old conversation turns`);
142
+ }
143
+ if (pruned > 0) console.log(`[proxy] Pruned ${pruned} base64 image(s) from old conversation turns`);
137
144
  }
145
+
138
146
  /** Remove any image blocks with empty/missing data — left by the raw body pruner.
139
147
  * These would cause a 400 from Anthropic regardless of which turn they're in. */
140
148
  function removeEmptyImageBlocks(messages) {
141
- let removed = 0;
142
- for (const msg of messages) {
143
- if (!Array.isArray(msg.content))
144
- continue;
145
- for (const block of msg.content) {
146
- if (block.type === "image" && block.source?.type === "base64" && !block.source?.data) {
147
- block.type = "text";
148
- block.text = "[image]";
149
- delete block.source;
150
- removed++;
151
- }
152
- if (block.type === "tool_result" && Array.isArray(block.content)) {
153
- for (const sub of block.content) {
154
- if (sub.type === "image" && sub.source?.type === "base64" && !sub.source?.data) {
155
- sub.type = "text";
156
- sub.text = "[image]";
157
- delete sub.source;
158
- removed++;
159
- }
160
- }
161
- }
149
+ let removed = 0;
150
+ for (const msg of messages) {
151
+ if (!Array.isArray(msg.content)) continue;
152
+ for (const block of msg.content) {
153
+ if (block.type === "image" && block.source?.type === "base64" && !block.source?.data) {
154
+ block.type = "text";
155
+ block.text = "[image]";
156
+ delete block.source;
157
+ removed++;
158
+ }
159
+ if (block.type === "tool_result" && Array.isArray(block.content)) {
160
+ for (const sub of block.content) {
161
+ if (sub.type === "image" && sub.source?.type === "base64" && !sub.source?.data) {
162
+ sub.type = "text";
163
+ sub.text = "[image]";
164
+ delete sub.source;
165
+ removed++;
166
+ }
162
167
  }
168
+ }
163
169
  }
164
- if (removed > 0)
165
- console.log(`[proxy] Removed ${removed} empty image block(s) from messages`);
170
+ }
171
+ if (removed > 0) console.log(`[proxy] Removed ${removed} empty image block(s) from messages`);
166
172
  }
173
+
167
174
  // ============================================================================
168
175
  // MAIN PROXY DISPATCHER
169
176
  // ============================================================================
177
+
170
178
  export async function handleProxy(res, body, corsHeaders) {
171
- const { messages, system, tools, model: requestedModel = MODELS.SONNET, max_tokens: requestedMaxTokens = 4096, temperature, stream = true, betas, context_management, thinking, store_id: storeId, tool_choice: rawToolChoice, documents, } = body;
172
- if (!messages || !Array.isArray(messages)) {
173
- jsonResponse(res, 400, { error: "messages array required" }, corsHeaders);
174
- return;
175
- }
176
- // Fix mismatched image MIME types before they hit the API
177
- fixImageMimeTypes(messages);
178
- // Strip base64 data from old turns — keeps request size bounded across long conversations
179
- pruneOldImages(messages);
180
- // Remove empty image blocks left by the raw body pruner (data:"") — would cause Anthropic 400
181
- removeEmptyImageBlocks(messages);
182
- // Resolve aliases (e.g. "whale/agent" → "claude-opus-4-6", "opus" → "claude-opus-4-6")
183
- const resolved = MODEL_MAP[requestedModel] || requestedModel;
184
- const model = ALLOWED_MODELS.includes(resolved) ? resolved : MODELS.SONNET;
185
- let provider = getProvider(model);
186
- // Detect request capabilities from message content
187
- const requirements = detectRequestCapabilities(messages, { hasCitations: !!documents?.length });
188
- // If the selected provider can't handle the request, re-route to a capable one
189
- if (!canProviderHandleRequest(provider, requirements)) {
190
- const betterProvider = getBestProviderForRequest(requirements);
191
- console.log(`[proxy] ${provider} lacks capabilities for this request, re-routing to ${betterProvider}`);
192
- provider = betterProvider;
193
- }
194
- const maxTokensLimit = provider === "gemini" ? GEMINI_MAX_TOKENS
195
- : provider === "openai" ? (isOpenAIReasoningModel(model) ? OPENAI_REASONING_MAX_TOKENS : OPENAI_MAX_TOKENS)
196
- : ANTHROPIC_MAX_TOKENS;
197
- const max_tokens = Math.min(Math.max(1, Number(requestedMaxTokens) || 4096), maxTokensLimit);
198
- // Delegate to provider adapter via registry
199
- const adapter = getProviderAdapter(provider);
200
- // Normalize tool_choice: accept string or object from client
201
- const tool_choice = rawToolChoice;
202
- await adapter.handleStream(res, {
203
- model, messages, system, tools, max_tokens,
204
- temperature, stream, betas, context_management, thinking, tool_choice, storeId, documents,
179
+ const {
180
+ messages,
181
+ system,
182
+ tools,
183
+ model: requestedModel = MODELS.SONNET,
184
+ max_tokens: requestedMaxTokens = 4096,
185
+ temperature,
186
+ stream = true,
187
+ betas,
188
+ context_management,
189
+ thinking,
190
+ store_id: storeId,
191
+ tool_choice: rawToolChoice,
192
+ documents
193
+ } = body;
194
+ if (!messages || !Array.isArray(messages)) {
195
+ jsonResponse(res, 400, {
196
+ error: "messages array required"
205
197
  }, corsHeaders);
198
+ return;
199
+ }
200
+
201
+ // Fix mismatched image MIME types before they hit the API
202
+ fixImageMimeTypes(messages);
203
+
204
+ // Strip base64 data from old turns — keeps request size bounded across long conversations
205
+ pruneOldImages(messages);
206
+
207
+ // Remove empty image blocks left by the raw body pruner (data:"") — would cause Anthropic 400
208
+ removeEmptyImageBlocks(messages);
209
+
210
+ // Resolve aliases (e.g. "whale/agent" → "claude-opus-4-6", "opus" → "claude-opus-4-6")
211
+ const resolved = MODEL_MAP[requestedModel] || requestedModel;
212
+ const model = ALLOWED_MODELS.includes(resolved) ? resolved : MODELS.SONNET;
213
+ let provider = getProvider(model);
214
+
215
+ // Detect request capabilities from message content
216
+ const requirements = detectRequestCapabilities(messages, {
217
+ hasCitations: !!documents?.length
218
+ });
219
+
220
+ // If the selected provider can't handle the request, re-route to a capable one
221
+ if (!canProviderHandleRequest(provider, requirements)) {
222
+ const betterProvider = getBestProviderForRequest(requirements);
223
+ console.log(`[proxy] ${provider} lacks capabilities for this request, re-routing to ${betterProvider}`);
224
+ provider = betterProvider;
225
+ }
226
+ const maxTokensLimit = provider === "gemini" ? GEMINI_MAX_TOKENS : provider === "openai" ? isOpenAIReasoningModel(model) ? OPENAI_REASONING_MAX_TOKENS : OPENAI_MAX_TOKENS : ANTHROPIC_MAX_TOKENS;
227
+ const max_tokens = Math.min(Math.max(1, Number(requestedMaxTokens) || 4096), maxTokensLimit);
228
+
229
+ // Delegate to provider adapter via registry
230
+ const adapter = getProviderAdapter(provider);
231
+ // Normalize tool_choice: accept string or object from client
232
+ const tool_choice = rawToolChoice;
233
+ await adapter.handleStream(res, {
234
+ model,
235
+ messages,
236
+ system,
237
+ tools,
238
+ max_tokens,
239
+ temperature,
240
+ stream,
241
+ betas,
242
+ context_management,
243
+ thinking,
244
+ tool_choice,
245
+ storeId,
246
+ documents
247
+ }, corsHeaders);
206
248
  }
249
+
207
250
  // ============================================================================
208
251
  // REQUEST CAPABILITY DETECTION
209
252
  // ============================================================================
253
+
210
254
  /**
211
255
  * Scan messages to detect what capabilities the request requires.
212
256
  * Looks for image blocks, PDF content types, computer_use tools, etc.
213
257
  */
214
258
  function detectRequestCapabilities(messages, hints) {
215
- const requirements = {};
216
- if (hints?.hasCitations) {
217
- requirements.needsCitations = true;
218
- }
219
- for (const msg of messages) {
220
- if (!Array.isArray(msg.content))
221
- continue;
222
- for (const block of msg.content) {
223
- // Image detection: Anthropic image blocks
224
- if (block.type === "image" && block.source) {
225
- requirements.hasImages = true;
226
- }
227
- // PDF detection: document blocks with PDF media type
228
- if (block.type === "document" ||
229
- (block.source?.media_type && block.source.media_type === "application/pdf")) {
230
- requirements.hasPdf = true;
231
- }
232
- // Computer use detection: tool_use with computer_use-related tools
233
- if (block.type === "tool_use" &&
234
- (block.name === "computer" || block.name === "computer_use")) {
235
- requirements.needsComputerUse = true;
236
- }
237
- }
259
+ const requirements = {};
260
+ if (hints?.hasCitations) {
261
+ requirements.needsCitations = true;
262
+ }
263
+ for (const msg of messages) {
264
+ if (!Array.isArray(msg.content)) continue;
265
+ for (const block of msg.content) {
266
+ // Image detection: Anthropic image blocks
267
+ if (block.type === "image" && block.source) {
268
+ requirements.hasImages = true;
269
+ }
270
+
271
+ // PDF detection: document blocks with PDF media type
272
+ if (block.type === "document" || block.source?.media_type && block.source.media_type === "application/pdf") {
273
+ requirements.hasPdf = true;
274
+ }
275
+
276
+ // Computer use detection: tool_use with computer_use-related tools
277
+ if (block.type === "tool_use" && (block.name === "computer" || block.name === "computer_use")) {
278
+ requirements.needsComputerUse = true;
279
+ }
238
280
  }
239
- return requirements;
281
+ }
282
+ return requirements;
240
283
  }
284
+ //# sourceMappingURL=proxy-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-handlers.js","names":["ALLOWED_MODELS","MODELS","MODEL_MAP","getProvider","isOpenAIReasoningModel","getProviderAdapter","jsonResponse","canProviderHandleRequest","getBestProviderForRequest","ANTHROPIC_MAX_TOKENS","GEMINI_MAX_TOKENS","OPENAI_MAX_TOKENS","OPENAI_REASONING_MAX_TOKENS","IMAGE_SIGNATURES","prefix","type","detectImageType","base64Data","sig","startsWith","buf","Buffer","from","slice","length","toString","fixImageBlock","block","source","data","actual","media_type","console","log","fixImageMimeTypes","messages","fixes","msg","Array","isArray","content","sub","replaceImageBlock","text","pruneOldImages","lastUserIdx","i","role","pruned","removeEmptyImageBlocks","removed","handleProxy","res","body","corsHeaders","system","tools","model","requestedModel","SONNET","max_tokens","requestedMaxTokens","temperature","stream","betas","context_management","thinking","store_id","storeId","tool_choice","rawToolChoice","documents","error","resolved","includes","provider","requirements","detectRequestCapabilities","hasCitations","betterProvider","maxTokensLimit","Math","min","max","Number","adapter","handleStream","hints","needsCitations","hasImages","hasPdf","name","needsComputerUse"],"sources":["../../src/server/proxy-handlers.ts"],"sourcesContent":["// server/proxy-handlers.ts — Multi-provider API proxy router\n// Thin dispatcher that delegates to provider adapters via the registry.\n//\n// Phase 7.1: Uses getProviderAdapter() from the registry instead of\n// maintaining its own adapter map. Provider adapters self-register on import.\n\nimport type http from \"node:http\";\nimport { ALLOWED_MODELS, MODELS, MODEL_MAP, getProvider, isOpenAIReasoningModel } from \"../shared/constants.js\";\nimport type { ModelProvider } from \"../shared/constants.js\";\nimport { getProviderAdapter } from \"./providers/registry.js\";\nimport { jsonResponse } from \"./providers/shared.js\";\nimport { canProviderHandleRequest, getBestProviderForRequest, type RequestCapabilityRequirements } from \"./lib/provider-capabilities.js\";\n\n// Import adapters to trigger self-registration via registerProvider()\nimport \"./providers/anthropic.js\";\nimport \"./providers/bedrock.js\";\nimport \"./providers/gemini.js\";\nimport \"./providers/openai.js\";\n\n// ============================================================================\n// MAX TOKEN LIMITS (per provider — used for proxy request clamping)\n// ============================================================================\n\nconst ANTHROPIC_MAX_TOKENS = 128000;\nconst GEMINI_MAX_TOKENS = 65536;\nconst OPENAI_MAX_TOKENS = 128000;\nconst OPENAI_REASONING_MAX_TOKENS = 100000;\n\n// ============================================================================\n// IMAGE MIME TYPE CORRECTION\n// ============================================================================\n// Detects actual image format from base64 magic bytes and corrects media_type\n// mismatches. Prevents Anthropic API 400 errors that permanently poison the\n// conversation when a file extension doesn't match the actual image content\n// (e.g. a .webp file that's actually PNG).\n\nconst IMAGE_SIGNATURES = [\n { prefix: \"iVBORw0KGgo\", type: \"image/png\" },\n { prefix: \"/9j/\", type: \"image/jpeg\" },\n { prefix: \"R0lGOD\", type: \"image/gif\" },\n { prefix: \"UklGR\", type: \"image/webp\" },\n] as const;\n\ntype ImageMediaType = \"image/png\" | \"image/jpeg\" | \"image/gif\" | \"image/webp\";\n\nfunction detectImageType(base64Data: string): ImageMediaType | null {\n for (const sig of IMAGE_SIGNATURES) {\n if (base64Data.startsWith(sig.prefix)) {\n // RIFF header could be WebP or other formats — verify WEBP marker at offset 8\n if (sig.prefix === \"UklGR\") {\n try {\n const buf = Buffer.from(base64Data.slice(0, 24), \"base64\");\n if (buf.length >= 12 && buf.toString(\"ascii\", 8, 12) === \"WEBP\") {\n return \"image/webp\";\n }\n } catch { return null; }\n return null;\n }\n return sig.type;\n }\n }\n return null;\n}\n\nfunction fixImageBlock(block: any): boolean {\n if (block.type === \"image\" && block.source?.type === \"base64\" && block.source?.data) {\n const actual = detectImageType(block.source.data);\n if (actual && actual !== block.source.media_type) {\n console.log(`[proxy] Fixed image MIME: declared=${block.source.media_type} actual=${actual}`);\n block.source.media_type = actual;\n return true;\n }\n }\n return false;\n}\n\nfunction fixImageMimeTypes(messages: any[]): void {\n let fixes = 0;\n for (const msg of messages) {\n if (!Array.isArray(msg.content)) continue;\n for (const block of msg.content) {\n if (fixImageBlock(block)) fixes++;\n // Also check tool_result blocks — images from Read tool end up here\n if (block.type === \"tool_result\" && Array.isArray(block.content)) {\n for (const sub of block.content) {\n if (fixImageBlock(sub)) fixes++;\n }\n }\n }\n }\n if (fixes > 0) {\n console.log(`[proxy] Corrected ${fixes} image MIME type(s)`);\n }\n}\n\n// ============================================================================\n// IMAGE PRUNING — strip base64 from old turns to keep conversation size bounded\n// ============================================================================\n// Conversation history with many images grows unboundedly. We keep full image\n// data only in the most recent user turn; older turns get their base64 replaced\n// with a lightweight \"[image]\" text placeholder. The model already processed\n// those images — it doesn't need the raw bytes again.\n\nfunction replaceImageBlock(block: any): boolean {\n // Replace a base64 image block with a text placeholder.\n // Matches both full-data blocks AND blocks whose data was zeroed by the raw pruner.\n if (block.type === \"image\" && block.source?.type === \"base64\") {\n block.type = \"text\";\n block.text = \"[image]\";\n delete block.source;\n return true;\n }\n return false;\n}\n\nfunction pruneOldImages(messages: any[]): void {\n // Find index of last user message — that turn keeps full image data\n let lastUserIdx = -1;\n for (let i = messages.length - 1; i >= 0; i--) {\n if (messages[i].role === \"user\") { lastUserIdx = i; break; }\n }\n\n let pruned = 0;\n for (let i = 0; i < messages.length; i++) {\n if (i === lastUserIdx) continue; // keep latest user turn intact\n const msg = messages[i];\n if (!Array.isArray(msg.content)) continue;\n for (const block of msg.content) {\n if (replaceImageBlock(block)) { pruned++; continue; }\n if (block.type === \"tool_result\" && Array.isArray(block.content)) {\n for (const sub of block.content) {\n if (replaceImageBlock(sub)) pruned++;\n }\n }\n }\n }\n if (pruned > 0) console.log(`[proxy] Pruned ${pruned} base64 image(s) from old conversation turns`);\n}\n\n/** Remove any image blocks with empty/missing data — left by the raw body pruner.\n * These would cause a 400 from Anthropic regardless of which turn they're in. */\nfunction removeEmptyImageBlocks(messages: any[]): void {\n let removed = 0;\n for (const msg of messages) {\n if (!Array.isArray(msg.content)) continue;\n for (const block of msg.content) {\n if (block.type === \"image\" && block.source?.type === \"base64\" && !block.source?.data) {\n block.type = \"text\";\n block.text = \"[image]\";\n delete block.source;\n removed++;\n }\n if (block.type === \"tool_result\" && Array.isArray(block.content)) {\n for (const sub of block.content) {\n if (sub.type === \"image\" && sub.source?.type === \"base64\" && !sub.source?.data) {\n sub.type = \"text\";\n sub.text = \"[image]\";\n delete sub.source;\n removed++;\n }\n }\n }\n }\n }\n if (removed > 0) console.log(`[proxy] Removed ${removed} empty image block(s) from messages`);\n}\n\n// ============================================================================\n// MAIN PROXY DISPATCHER\n// ============================================================================\n\nexport async function handleProxy(\n res: http.ServerResponse,\n body: any,\n corsHeaders: Record<string, string>,\n): Promise<void> {\n const {\n messages,\n system,\n tools,\n model: requestedModel = MODELS.SONNET,\n max_tokens: requestedMaxTokens = 4096,\n temperature,\n stream = true,\n betas,\n context_management,\n thinking,\n store_id: storeId,\n tool_choice: rawToolChoice,\n documents,\n } = body;\n\n if (!messages || !Array.isArray(messages)) {\n jsonResponse(res, 400, { error: \"messages array required\" }, corsHeaders);\n return;\n }\n\n // Fix mismatched image MIME types before they hit the API\n fixImageMimeTypes(messages);\n\n // Strip base64 data from old turns — keeps request size bounded across long conversations\n pruneOldImages(messages);\n\n // Remove empty image blocks left by the raw body pruner (data:\"\") — would cause Anthropic 400\n removeEmptyImageBlocks(messages);\n\n // Resolve aliases (e.g. \"whale/agent\" → \"claude-opus-4-6\", \"opus\" → \"claude-opus-4-6\")\n const resolved = MODEL_MAP[requestedModel] || requestedModel;\n const model = ALLOWED_MODELS.includes(resolved) ? resolved : MODELS.SONNET;\n let provider = getProvider(model) as ModelProvider;\n\n // Detect request capabilities from message content\n const requirements = detectRequestCapabilities(messages, { hasCitations: !!documents?.length });\n\n // If the selected provider can't handle the request, re-route to a capable one\n if (!canProviderHandleRequest(provider, requirements)) {\n const betterProvider = getBestProviderForRequest(requirements);\n console.log(`[proxy] ${provider} lacks capabilities for this request, re-routing to ${betterProvider}`);\n provider = betterProvider;\n }\n\n const maxTokensLimit = provider === \"gemini\" ? GEMINI_MAX_TOKENS\n : provider === \"openai\" ? (isOpenAIReasoningModel(model) ? OPENAI_REASONING_MAX_TOKENS : OPENAI_MAX_TOKENS)\n : ANTHROPIC_MAX_TOKENS;\n const max_tokens = Math.min(Math.max(1, Number(requestedMaxTokens) || 4096), maxTokensLimit);\n\n // Delegate to provider adapter via registry\n const adapter = getProviderAdapter(provider);\n // Normalize tool_choice: accept string or object from client\n const tool_choice = rawToolChoice as import(\"../shared/agent-core.js\").ToolChoice | undefined;\n\n await adapter.handleStream(res, {\n model, messages, system, tools, max_tokens,\n temperature, stream, betas, context_management, thinking, tool_choice, storeId, documents,\n }, corsHeaders);\n}\n\n// ============================================================================\n// REQUEST CAPABILITY DETECTION\n// ============================================================================\n\n/**\n * Scan messages to detect what capabilities the request requires.\n * Looks for image blocks, PDF content types, computer_use tools, etc.\n */\nfunction detectRequestCapabilities(\n messages: any[],\n hints?: { hasCitations?: boolean },\n): RequestCapabilityRequirements {\n const requirements: RequestCapabilityRequirements = {};\n\n if (hints?.hasCitations) {\n requirements.needsCitations = true;\n }\n\n for (const msg of messages) {\n if (!Array.isArray(msg.content)) continue;\n\n for (const block of msg.content) {\n // Image detection: Anthropic image blocks\n if (block.type === \"image\" && block.source) {\n requirements.hasImages = true;\n }\n\n // PDF detection: document blocks with PDF media type\n if (\n block.type === \"document\" ||\n (block.source?.media_type && block.source.media_type === \"application/pdf\")\n ) {\n requirements.hasPdf = true;\n }\n\n // Computer use detection: tool_use with computer_use-related tools\n if (\n block.type === \"tool_use\" &&\n (block.name === \"computer\" || block.name === \"computer_use\")\n ) {\n requirements.needsComputerUse = true;\n }\n }\n }\n\n return requirements;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -70,6 +70,19 @@ export interface AgentConfig {
70
70
  max_history_chars?: number;
71
71
  max_tool_result_chars?: number;
72
72
  max_message_chars?: number;
73
+ compaction_trigger_tokens?: number;
74
+ compaction_total_budget?: number;
75
+ clear_thinking_keep?: number;
76
+ clear_tool_uses_trigger?: number;
77
+ clear_tool_uses_keep?: number;
78
+ session_cost_budget_usd?: number;
79
+ max_concurrent_tools?: number;
80
+ enable_delegation?: boolean;
81
+ max_duration_ms?: number;
82
+ enable_model_routing?: boolean;
83
+ subagent_max_tokens?: number;
84
+ subagent_max_turns?: number;
85
+ subagent_temperature?: number;
73
86
  } | null;
74
87
  }
75
88
  export interface ToolLoadResult {