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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.js","names":["getContextManagement","getMaxOutputTokens","getThinkingConfig","isRetryableError","addPromptCaching","getProvider","MAX_RETRIES","RETRY_BASE_DELAY_MS","buildAPIRequest","opts","model","contextProfile","thinkingEnabled","maxOutputTokens","contextOverrides","provider","isAnthropicModel","betas","edits","ctxMgmt","config","type","keep","value","trigger","supportsCompaction","includes","push","pause_after_compaction","instructions","thinkingCfg","beta","maxTokens","thinking","budget_tokens","Math","min","filter","e","contextManagement","callServerProxy","proxyUrl","signal","timeoutMs","tokenRefreshed","attempt","body","mode","messages","system","tools","max_tokens","apiConfig","stream","length","context_management","temperature","storeId","store_id","Array","isArray","msgs","keepFrom","max","i","msg","content","block","source","text","sub","serialized","JSON","stringify","fetchOpts","method","headers","token","String","Buffer","byteLength","controller","timeout","AbortController","setTimeout","abort","response","fetch","clearTimeout","ok","errorBody","status","onTokenRefresh","newToken","Object","assign","Error","err","aborted","errMsg","message","onRetry","delay","pow","Promise","resolve","reject","reason","timer","onAbort","addEventListener","once","fallbackModel","fromModel","onFallback","buildSystemBlocks","systemPrompt","costContext","enableCaching","cache_control","prepareWithCaching","trimGeminiContext","estimatedTokens","threshold","keepRecent","toolResultCount","trimCount","trimmed","map","callTranscribe","audioBase64","mediaType","Authorization","audio_base64","media_type","errText","data","json","success","transcript","error","trimOpenAIContext","COMPACTION_TIMEOUT_MS","requestProviderCompaction","system_prompt","compaction_content"],"sources":["../../src/shared/api-client.ts"],"sourcesContent":["/**\n * Unified API Client — ONE server proxy caller with retry and config builder.\n *\n * Replaces proxy+direct call paths in agent-loop, subagent, teammate.\n * CLI-only: always calls through server proxy (no direct Anthropic SDK usage).\n */\n\nimport {\n getContextManagement,\n getMaxOutputTokens,\n getThinkingConfig,\n isRetryableError,\n addPromptCaching,\n} from \"./agent-core.js\";\nimport type { CompactableMessage } from \"./compaction.js\";\nimport { getProvider } from \"./constants.js\";\nimport type { ContextProfile, APIRequestConfig } from \"./types.js\";\n\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n\nconst MAX_RETRIES = 3;\nconst RETRY_BASE_DELAY_MS = 1000;\n\n// ============================================================================\n// API REQUEST CONFIG BUILDER\n// ============================================================================\n\n/**\n * Build all Anthropic API config from a simple profile.\n *\n * Profiles:\n * - 'main': clear at 80K/keep 3, compact at 120K (Opus only)\n * - 'subagent': clear at 60K/keep 2, no compaction, 8192 max tokens\n * - 'teammate': clear at 80K/keep 3, no compaction\n */\nexport function buildAPIRequest(opts: {\n model: string;\n contextProfile: ContextProfile;\n thinkingEnabled?: boolean;\n maxOutputTokens?: number;\n contextOverrides?: import(\"./agent-core.js\").ContextManagementOverrides;\n}): APIRequestConfig {\n const { model, contextProfile, thinkingEnabled = false, maxOutputTokens, contextOverrides } = opts;\n\n // Context management config per profile\n // Non-Anthropic models (Gemini, OpenAI, etc.) don't support Anthropic betas or context management\n const provider = getProvider(model);\n const isAnthropicModel = provider === \"anthropic\" || provider === \"bedrock\";\n let betas: string[] = isAnthropicModel ? [\"context-management-2025-06-27\"] : [];\n let edits: Array<Record<string, unknown>> = [];\n\n switch (contextProfile) {\n case \"main\": {\n const ctxMgmt = getContextManagement(model, contextOverrides);\n betas = [...ctxMgmt.betas];\n edits = ctxMgmt.config.edits;\n break;\n }\n case \"subagent\":\n if (isAnthropicModel) {\n edits = [\n {\n type: \"clear_thinking_20251015\",\n keep: { type: \"thinking_turns\", value: 1 },\n },\n {\n type: \"clear_tool_uses_20250919\",\n trigger: { type: \"input_tokens\", value: 60_000 },\n keep: { type: \"tool_uses\", value: 2 },\n },\n ];\n // Compaction for sub-agents on models that support it (lower threshold than main agent).\n // Trigger at 80K — above the 60K clear_tool_uses threshold so clearing fires first.\n const supportsCompaction = model.includes(\"opus-4-6\") || model.includes(\"sonnet-4-6\");\n if (supportsCompaction) {\n edits.push({\n type: \"compact_20260112\",\n trigger: { type: \"input_tokens\", value: 80_000 },\n pause_after_compaction: true,\n instructions: \"Summarize preserving: task goal, files found/modified, key findings, next steps.\",\n });\n betas.push(\"compact-2026-01-12\");\n }\n }\n break;\n case \"teammate\": {\n const ctxMgmt = getContextManagement(model);\n betas = [...ctxMgmt.betas];\n edits = ctxMgmt.config.edits;\n break;\n }\n }\n\n // Thinking config\n const thinkingCfg = getThinkingConfig(model, thinkingEnabled);\n if (thinkingCfg.beta) betas.push(thinkingCfg.beta);\n\n // Max tokens — caller is responsible for setting appropriate limits per context\n const maxTokens = getMaxOutputTokens(model, maxOutputTokens);\n\n // Build thinking param (ensure budget < maxTokens)\n // Only include for Anthropic/Bedrock — Gemini/OpenAI handle thinking internally\n let thinking: { type: string; budget_tokens?: number } | undefined;\n if (isAnthropicModel && thinkingCfg.thinking.type !== \"disabled\") {\n thinking = thinkingCfg.thinking.budget_tokens\n ? { ...thinkingCfg.thinking, budget_tokens: Math.min(thinkingCfg.thinking.budget_tokens, maxTokens - 1) }\n : thinkingCfg.thinking;\n }\n\n // Strip clear_thinking edits when thinking is disabled — API requires thinking\n // to be enabled or adaptive for clear_thinking_20251015 to be accepted\n if (!thinking) {\n edits = edits.filter(e => e.type !== \"clear_thinking_20251015\");\n }\n\n return {\n betas,\n contextManagement: { edits },\n thinking,\n maxTokens,\n };\n}\n\n// ============================================================================\n// SERVER PROXY CALLER\n// ============================================================================\n\nexport interface CallServerProxyConfig {\n proxyUrl: string;\n token: string;\n model: string;\n system: object[];\n messages: object[];\n tools: object[];\n apiConfig: APIRequestConfig;\n signal?: AbortSignal;\n timeoutMs?: number;\n fallbackModel?: string;\n storeId?: string; // Required for non-Anthropic providers (credential resolution)\n onFallback?: (fromModel: string, toModel: string) => void;\n onRetry?: (attempt: number, maxRetries: number, error: string) => void;\n /** Called on 401 to refresh the auth token. Returns new token or null. */\n onTokenRefresh?: () => Promise<string | null>;\n}\n\n/**\n * Call server proxy endpoint and return raw SSE stream.\n * Retries with exponential backoff on 429/500/529.\n */\nexport async function callServerProxy(\n config: CallServerProxyConfig,\n): Promise<ReadableStream<Uint8Array>> {\n const { proxyUrl, signal, timeoutMs } = config;\n let tokenRefreshed = false;\n\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {\n try {\n const body: Record<string, unknown> = {\n mode: \"proxy\",\n messages: config.messages,\n system: config.system,\n tools: config.tools,\n model: config.model,\n max_tokens: config.apiConfig.maxTokens,\n stream: true,\n betas: config.apiConfig.betas,\n ...(config.apiConfig.contextManagement?.edits?.length\n ? { context_management: config.apiConfig.contextManagement }\n : {}),\n };\n if (config.apiConfig.thinking) {\n body.thinking = config.apiConfig.thinking;\n // Anthropic requires temperature=1.0 when thinking is enabled — enforce client-side\n if (config.apiConfig.thinking.type !== \"disabled\") {\n body.temperature = 1.0;\n }\n }\n if (config.storeId) {\n body.store_id = config.storeId;\n }\n\n // Prune old base64 images from conversation history before serializing.\n // Keep images only in the last 2 messages to avoid multi-MB request bodies\n // that can cause \"Invalid JSON\" errors from body truncation on the proxy.\n if (Array.isArray(body.messages) && (body.messages as any[]).length > 4) {\n const msgs = body.messages as any[];\n const keepFrom = Math.max(0, msgs.length - 2);\n for (let i = 0; i < keepFrom; i++) {\n const msg = msgs[i];\n if (!Array.isArray(msg?.content)) continue;\n for (const block of msg.content) {\n if (block.type === \"image\" && block.source?.type === \"base64\") {\n block.type = \"text\";\n block.text = \"[image]\";\n delete block.source;\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\") {\n sub.type = \"text\";\n sub.text = \"[image]\";\n delete sub.source;\n }\n }\n }\n }\n }\n }\n\n const serialized = JSON.stringify(body);\n\n const fetchOpts: RequestInit = {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Authorization\": `Bearer ${config.token}`,\n \"Content-Length\": String(Buffer.byteLength(serialized)),\n },\n body: serialized,\n signal,\n };\n\n // Apply timeout only when the caller did NOT already supply a signal\n let controller: AbortController | undefined;\n let timeout: ReturnType<typeof setTimeout> | undefined;\n if (timeoutMs && !signal) {\n controller = new AbortController();\n timeout = setTimeout(() => controller!.abort(), timeoutMs);\n fetchOpts.signal = controller.signal;\n }\n\n try {\n const response = await fetch(proxyUrl, fetchOpts);\n if (timeout) clearTimeout(timeout);\n\n if (response.ok && response.body) {\n return response.body;\n }\n\n const errorBody = await response.text();\n\n // Auto-refresh on 401 (token invalidated server-side before local expiry)\n if (response.status === 401 && config.onTokenRefresh && !tokenRefreshed) {\n const newToken = await config.onTokenRefresh();\n if (newToken) {\n tokenRefreshed = true;\n config.token = newToken;\n continue; // retry with new token\n }\n }\n\n throw Object.assign(\n new Error(`Proxy error (${response.status}): ${errorBody}`),\n { status: response.status },\n );\n } catch (err) {\n if (timeout) clearTimeout(timeout);\n throw err;\n }\n } catch (err: unknown) {\n if (signal?.aborted) throw err;\n\n if (attempt < MAX_RETRIES && isRetryableError(err)) {\n const errMsg = err instanceof Error ? err.message : String(err);\n config.onRetry?.(attempt + 1, MAX_RETRIES, errMsg);\n const delay = RETRY_BASE_DELAY_MS * Math.pow(2, attempt);\n\n // Abort-aware backoff — ESC can interrupt the wait immediately\n await new Promise<void>((resolve, reject) => {\n if (signal?.aborted) { reject(signal.reason ?? new Error(\"Aborted\")); return; }\n const timer = setTimeout(resolve, delay);\n const onAbort = () => { clearTimeout(timer); reject(signal!.reason ?? new Error(\"Aborted\")); };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n\n // Fallback model on last retry\n if (attempt === MAX_RETRIES - 1 && config.fallbackModel) {\n const fromModel = config.model;\n config.model = config.fallbackModel;\n config.onFallback?.(fromModel, config.model);\n }\n continue;\n }\n throw err;\n }\n }\n\n throw new Error(\"Failed to get response after retries\");\n}\n\n// ============================================================================\n// HELPERS — system prompt + caching setup\n// ============================================================================\n\n/**\n * Build system blocks with prompt caching.\n * Cached system prompt + optional dynamic cost context (after cache breakpoint).\n */\nexport function buildSystemBlocks(\n systemPrompt: string,\n costContext?: string,\n enableCaching = true,\n): Array<Record<string, unknown>> {\n const system: Array<Record<string, unknown>> = [];\n\n if (enableCaching) {\n system.push({\n type: \"text\",\n text: systemPrompt,\n cache_control: { type: \"ephemeral\" },\n });\n } else {\n system.push({ type: \"text\", text: systemPrompt });\n }\n\n if (costContext) {\n system.push({ type: \"text\", text: costContext });\n }\n\n return system;\n}\n\n/**\n * Prepare messages and tools with prompt caching.\n * Skips cache_control injection for Gemini (uses implicit caching).\n */\nexport function prepareWithCaching<\n T extends object = object,\n M extends { role: string; content: unknown } = { role: string; content: unknown },\n>(\n tools: T[],\n messages: M[],\n model?: string,\n): { tools: T[]; messages: M[] } {\n if (model) {\n const provider = getProvider(model);\n if (provider === \"gemini\" || provider === \"openai\") {\n return { tools, messages };\n }\n }\n return addPromptCaching(tools, messages);\n}\n\n// ============================================================================\n// GEMINI CONTEXT TRIMMING\n// ============================================================================\n\n/**\n * Client-side context trimming for Gemini (no server-side context management).\n * When estimated input tokens exceed threshold, replaces old tool result contents\n * with \"[trimmed]\" to stay within Gemini's 1M context window.\n */\nexport function trimGeminiContext<T extends CompactableMessage>(\n messages: T[],\n estimatedTokens: number,\n threshold = 950_000,\n keepRecent = 5,\n): T[] {\n if (estimatedTokens < threshold) return messages;\n\n type Block = { type?: string; content?: unknown };\n let toolResultCount = 0;\n for (const msg of messages) {\n if (Array.isArray(msg.content)) {\n for (const block of msg.content as Block[]) {\n if (block.type === \"tool_result\") toolResultCount++;\n }\n }\n }\n\n if (toolResultCount <= keepRecent) return messages;\n\n const trimCount = toolResultCount - keepRecent;\n let trimmed = 0;\n\n return messages.map((msg) => {\n if (!Array.isArray(msg.content)) return msg;\n const content = (msg.content as Block[]).map((block) => {\n if (block.type === \"tool_result\" && trimmed < trimCount) {\n trimmed++;\n if (typeof block.content === \"string\") {\n return { ...block, content: \"[trimmed]\" };\n } else if (Array.isArray(block.content)) {\n return { ...block, content: [{ type: \"text\", text: \"[trimmed]\" }] };\n }\n }\n return block;\n });\n return { ...msg, content } as T;\n });\n}\n\n// ============================================================================\n// OPENAI CONTEXT TRIMMING\n// ============================================================================\n\n/**\n * Client-side context trimming for OpenAI (no server-side context management).\n * When estimated input tokens exceed threshold, replaces old tool result contents\n * with \"[trimmed]\" to stay within OpenAI's 200K context window.\n */\n// ============================================================================\n// AUDIO TRANSCRIPTION CLIENT\n// ============================================================================\n\n/**\n * Call server transcription endpoint (OpenAI Whisper via our Fly.io proxy).\n * Used by tool-dispatch when __AUDIO__ marker is detected in tool results.\n */\nexport async function callTranscribe(opts: {\n proxyUrl: string;\n token: string;\n storeId: string;\n audioBase64: string;\n mediaType: string;\n}): Promise<string> {\n const { proxyUrl, token, storeId, audioBase64, mediaType } = opts;\n\n // Use same server URL as proxy, just different mode\n const response = await fetch(proxyUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify({\n mode: \"transcribe\",\n audio_base64: audioBase64,\n media_type: mediaType,\n store_id: storeId,\n }),\n });\n\n if (!response.ok) {\n const errText = await response.text();\n throw new Error(`Transcription failed (${response.status}): ${errText}`);\n }\n\n const data = (await response.json()) as { success: boolean; transcript?: string; error?: string };\n if (!data.success || !data.transcript) {\n throw new Error(data.error || \"Transcription returned no transcript\");\n }\n\n return data.transcript;\n}\n\n// ============================================================================\n// OPENAI CONTEXT TRIMMING\n// ============================================================================\n\nexport function trimOpenAIContext<T extends CompactableMessage>(\n messages: T[],\n estimatedTokens: number,\n threshold = 190_000,\n keepRecent = 5,\n): T[] {\n if (estimatedTokens < threshold) return messages;\n\n type Block = { type?: string; content?: unknown };\n let toolResultCount = 0;\n for (const msg of messages) {\n if (Array.isArray(msg.content)) {\n for (const block of msg.content as Block[]) {\n if (block.type === \"tool_result\") toolResultCount++;\n }\n }\n }\n\n if (toolResultCount <= keepRecent) return messages;\n\n const trimCount = toolResultCount - keepRecent;\n let trimmed = 0;\n\n return messages.map((msg) => {\n if (!Array.isArray(msg.content)) return msg;\n const content = (msg.content as Block[]).map((block) => {\n if (block.type === \"tool_result\" && trimmed < trimCount) {\n trimmed++;\n if (typeof block.content === \"string\") {\n return { ...block, content: \"[trimmed]\" };\n } else if (Array.isArray(block.content)) {\n return { ...block, content: [{ type: \"text\", text: \"[trimmed]\" }] };\n }\n }\n return block;\n });\n return { ...msg, content } as T;\n });\n}\n\n// ============================================================================\n// PROVIDER COMPACTION CLIENT\n// ============================================================================\n\nconst COMPACTION_TIMEOUT_MS = 30_000;\n\n/**\n * Request conversation compaction from the server (Haiku summarization).\n * Used by non-Anthropic providers (OpenAI, Gemini) that lack native compaction.\n * Returns summary string or null on failure (caller keeps unsummarized history).\n */\nexport async function requestProviderCompaction(opts: {\n proxyUrl: string;\n token: string;\n messages: object[];\n systemPrompt: string;\n}): Promise<string | null> {\n const { proxyUrl, token, messages, systemPrompt } = opts;\n\n try {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), COMPACTION_TIMEOUT_MS);\n\n try {\n const response = await fetch(proxyUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify({\n mode: \"compact\",\n messages,\n system_prompt: systemPrompt,\n }),\n signal: controller.signal,\n });\n\n clearTimeout(timeout);\n\n if (!response.ok) return null;\n\n const data = (await response.json()) as {\n success: boolean;\n compaction_content?: string;\n error?: string;\n };\n\n return data.success && data.compaction_content ? data.compaction_content : null;\n } finally {\n clearTimeout(timeout);\n }\n } catch {\n return null; // Graceful failure — caller keeps unsummarized history\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Shared Compaction Utilities — pre-compaction pass for context management.
3
+ *
4
+ * Pure TypeScript, no runtime-specific APIs. Used by:
5
+ * - CLI subagent.ts (trim context after each tool turn)
6
+ * - Server compaction-service.ts (pre-process before LLM summarization)
7
+ */
8
+ /**
9
+ * Minimal structural interface for messages passed to preCompact/addPromptCaching.
10
+ * Anthropic.MessageParam satisfies this via structural subtyping — no casts needed.
11
+ */
12
+ export interface CompactableMessage {
13
+ role: string;
14
+ content: unknown;
15
+ }
16
+ export interface PreCompactOptions {
17
+ /** Max chars for a tool result before it gets replaced with a summary.
18
+ * Default: 2048 (matches Anthropic's pattern of stripping consumed results). */
19
+ maxToolResultChars?: number;
20
+ /** Strip thinking blocks older than N turns from the end. Default: true (3 turns). */
21
+ stripThinking?: boolean;
22
+ }
23
+ export interface PreCompactResult<T = CompactableMessage> {
24
+ messages: T[];
25
+ bytesRemoved: number;
26
+ }
27
+ /**
28
+ * Pre-compaction pass: strip redundant data from message history.
29
+ * Mechanically removes large tool results already processed by the agent
30
+ * and thinking blocks from older turns. Returns modified messages array
31
+ * with reduced content.
32
+ *
33
+ * Generic over the message type so callers (e.g. Anthropic.MessageParam[])
34
+ * don't need double type assertions.
35
+ */
36
+ export declare function preCompact<T extends CompactableMessage>(messages: T[], options?: PreCompactOptions): PreCompactResult<T>;
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Shared Compaction Utilities — pre-compaction pass for context management.
3
+ *
4
+ * Pure TypeScript, no runtime-specific APIs. Used by:
5
+ * - CLI subagent.ts (trim context after each tool turn)
6
+ * - Server compaction-service.ts (pre-process before LLM summarization)
7
+ */
8
+
9
+ import { djb2Hash } from "./agent-core.js";
10
+
11
+ /**
12
+ * Minimal structural interface for messages passed to preCompact/addPromptCaching.
13
+ * Anthropic.MessageParam satisfies this via structural subtyping — no casts needed.
14
+ */
15
+
16
+ /** Structural interface for content blocks inside messages */
17
+
18
+ /**
19
+ * Pre-compaction pass: strip redundant data from message history.
20
+ * Mechanically removes large tool results already processed by the agent
21
+ * and thinking blocks from older turns. Returns modified messages array
22
+ * with reduced content.
23
+ *
24
+ * Generic over the message type so callers (e.g. Anthropic.MessageParam[])
25
+ * don't need double type assertions.
26
+ */
27
+ export function preCompact(messages, options) {
28
+ const maxChars = options?.maxToolResultChars ?? 2048;
29
+ const stripThinking = options?.stripThinking ?? true;
30
+ let bytesRemoved = 0;
31
+ const compacted = messages.map((msg, idx) => {
32
+ if (msg.role !== "user") return msg;
33
+ const content = msg.content;
34
+ if (!Array.isArray(content)) return msg;
35
+ const newContent = content.map(block => {
36
+ // 1. Replace large tool results that the agent already acted on
37
+ if (block.type === "tool_result") {
38
+ const rc = typeof block.content === "string" ? block.content : JSON.stringify(block.content);
39
+ if (rc.length > maxChars) {
40
+ // Check if there's a subsequent assistant message (meaning agent processed this)
41
+ const hasFollowup = messages.slice(idx + 1).some(m => m.role === "assistant");
42
+ if (hasFollowup) {
43
+ const originalSize = rc.length;
44
+ bytesRemoved += originalSize - 100;
45
+ return {
46
+ ...block,
47
+ content: `[Tool result: ${block.tool_use_id || "unknown"} returned ${Math.round(originalSize / 1024)}KB — agent processed and continued]`
48
+ };
49
+ }
50
+ }
51
+ }
52
+ return block;
53
+ });
54
+ return {
55
+ ...msg,
56
+ content: newContent
57
+ };
58
+ });
59
+
60
+ // 2. Deduplicate tool results — detect identical content (e.g. same file read multiple times)
61
+ // and replace duplicates with a pointer to the first occurrence.
62
+ const contentHashes = new Map();
63
+ for (let i = 0; i < compacted.length; i++) {
64
+ const msg = compacted[i];
65
+ if (msg.role !== "user" || !Array.isArray(msg.content)) continue;
66
+ for (const block of msg.content) {
67
+ if (block.type !== "tool_result") continue;
68
+ const rc = typeof block.content === "string" ? block.content : JSON.stringify(block.content);
69
+ if (rc.length < 200) continue; // Skip small results — not worth deduping
70
+ const hashKey = djb2Hash(rc);
71
+ const existing = contentHashes.get(hashKey);
72
+ if (existing) {
73
+ existing.count++;
74
+ } else {
75
+ contentHashes.set(hashKey, {
76
+ count: 1,
77
+ firstIdx: i
78
+ });
79
+ }
80
+ }
81
+ }
82
+ // Second pass: replace duplicates (not the first occurrence) with pointer
83
+ for (let i = 0; i < compacted.length; i++) {
84
+ const msg = compacted[i];
85
+ if (msg.role !== "user" || !Array.isArray(msg.content)) continue;
86
+ const newContent = msg.content.map(block => {
87
+ if (block.type !== "tool_result") return block;
88
+ const rc = typeof block.content === "string" ? block.content : JSON.stringify(block.content);
89
+ if (rc.length < 200) return block;
90
+ const hashKey = djb2Hash(rc);
91
+ const entry = contentHashes.get(hashKey);
92
+ if (entry && entry.count >= 2 && i !== entry.firstIdx) {
93
+ bytesRemoved += rc.length - 50;
94
+ return {
95
+ ...block,
96
+ content: "[Duplicate — same content as earlier read]"
97
+ };
98
+ }
99
+ return block;
100
+ });
101
+ compacted[i] = {
102
+ ...msg,
103
+ content: newContent
104
+ };
105
+ }
106
+
107
+ // 3. Remove thinking blocks older than 3 turns from the end
108
+ if (stripThinking) {
109
+ const thinkingCutoff = Math.max(0, compacted.length - 6); // 3 turns = ~6 messages
110
+ const result = compacted.map((msg, idx) => {
111
+ if (idx >= thinkingCutoff) return msg;
112
+ if (msg.role !== "assistant") return msg;
113
+ const content = msg.content;
114
+ if (!Array.isArray(content)) return msg;
115
+ const filtered = content.filter(block => {
116
+ if (block.type === "thinking") {
117
+ bytesRemoved += String(block.thinking || "").length;
118
+ return false;
119
+ }
120
+ return true;
121
+ });
122
+ if (filtered.length === 0) return msg; // Keep at least something
123
+ return {
124
+ ...msg,
125
+ content: filtered
126
+ };
127
+ });
128
+ return {
129
+ messages: result,
130
+ bytesRemoved
131
+ };
132
+ }
133
+ return {
134
+ messages: compacted,
135
+ bytesRemoved
136
+ };
137
+ }
138
+ //# sourceMappingURL=compaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compaction.js","names":["djb2Hash","preCompact","messages","options","maxChars","maxToolResultChars","stripThinking","bytesRemoved","compacted","map","msg","idx","role","content","Array","isArray","newContent","block","type","rc","JSON","stringify","length","hasFollowup","slice","some","m","originalSize","tool_use_id","Math","round","contentHashes","Map","i","hashKey","existing","get","count","set","firstIdx","entry","thinkingCutoff","max","result","filtered","filter","String","thinking"],"sources":["../../src/shared/compaction.ts"],"sourcesContent":["/**\n * Shared Compaction Utilities — pre-compaction pass for context management.\n *\n * Pure TypeScript, no runtime-specific APIs. Used by:\n * - CLI subagent.ts (trim context after each tool turn)\n * - Server compaction-service.ts (pre-process before LLM summarization)\n */\n\nimport { djb2Hash } from \"./agent-core.js\";\n\n/**\n * Minimal structural interface for messages passed to preCompact/addPromptCaching.\n * Anthropic.MessageParam satisfies this via structural subtyping — no casts needed.\n */\nexport interface CompactableMessage {\n role: string;\n content: unknown;\n}\n\n/** Structural interface for content blocks inside messages */\ninterface CompactableBlock {\n type?: string;\n content?: unknown;\n tool_use_id?: string;\n thinking?: string;\n}\n\nexport interface PreCompactOptions {\n /** Max chars for a tool result before it gets replaced with a summary.\n * Default: 2048 (matches Anthropic's pattern of stripping consumed results). */\n maxToolResultChars?: number;\n /** Strip thinking blocks older than N turns from the end. Default: true (3 turns). */\n stripThinking?: boolean;\n}\n\nexport interface PreCompactResult<T = CompactableMessage> {\n messages: T[];\n bytesRemoved: number;\n}\n\n/**\n * Pre-compaction pass: strip redundant data from message history.\n * Mechanically removes large tool results already processed by the agent\n * and thinking blocks from older turns. Returns modified messages array\n * with reduced content.\n *\n * Generic over the message type so callers (e.g. Anthropic.MessageParam[])\n * don't need double type assertions.\n */\nexport function preCompact<T extends CompactableMessage>(\n messages: T[],\n options?: PreCompactOptions,\n): PreCompactResult<T> {\n const maxChars = options?.maxToolResultChars ?? 2048;\n const stripThinking = options?.stripThinking ?? true;\n let bytesRemoved = 0;\n\n const compacted = messages.map((msg, idx) => {\n if (msg.role !== \"user\") return msg;\n\n const content = msg.content;\n if (!Array.isArray(content)) return msg;\n\n const newContent = (content as CompactableBlock[]).map((block) => {\n // 1. Replace large tool results that the agent already acted on\n if (block.type === \"tool_result\") {\n const rc =\n typeof block.content === \"string\"\n ? block.content\n : JSON.stringify(block.content);\n if (rc.length > maxChars) {\n // Check if there's a subsequent assistant message (meaning agent processed this)\n const hasFollowup = messages\n .slice(idx + 1)\n .some((m) => m.role === \"assistant\");\n if (hasFollowup) {\n const originalSize = rc.length;\n bytesRemoved += originalSize - 100;\n return {\n ...block,\n content: `[Tool result: ${block.tool_use_id || \"unknown\"} returned ${Math.round(originalSize / 1024)}KB — agent processed and continued]`,\n };\n }\n }\n }\n return block;\n });\n\n return { ...msg, content: newContent };\n });\n\n // 2. Deduplicate tool results — detect identical content (e.g. same file read multiple times)\n // and replace duplicates with a pointer to the first occurrence.\n const contentHashes = new Map<string, { count: number; firstIdx: number }>();\n for (let i = 0; i < compacted.length; i++) {\n const msg = compacted[i];\n if (msg.role !== \"user\" || !Array.isArray(msg.content)) continue;\n for (const block of msg.content as CompactableBlock[]) {\n if (block.type !== \"tool_result\") continue;\n const rc = typeof block.content === \"string\" ? block.content : JSON.stringify(block.content);\n if (rc.length < 200) continue; // Skip small results — not worth deduping\n const hashKey = djb2Hash(rc);\n const existing = contentHashes.get(hashKey);\n if (existing) {\n existing.count++;\n } else {\n contentHashes.set(hashKey, { count: 1, firstIdx: i });\n }\n }\n }\n // Second pass: replace duplicates (not the first occurrence) with pointer\n for (let i = 0; i < compacted.length; i++) {\n const msg = compacted[i];\n if (msg.role !== \"user\" || !Array.isArray(msg.content)) continue;\n const newContent = (msg.content as CompactableBlock[]).map((block) => {\n if (block.type !== \"tool_result\") return block;\n const rc = typeof block.content === \"string\" ? block.content : JSON.stringify(block.content);\n if (rc.length < 200) return block;\n const hashKey = djb2Hash(rc);\n const entry = contentHashes.get(hashKey);\n if (entry && entry.count >= 2 && i !== entry.firstIdx) {\n bytesRemoved += rc.length - 50;\n return { ...block, content: \"[Duplicate — same content as earlier read]\" };\n }\n return block;\n });\n compacted[i] = { ...msg, content: newContent };\n }\n\n // 3. Remove thinking blocks older than 3 turns from the end\n if (stripThinking) {\n const thinkingCutoff = Math.max(0, compacted.length - 6); // 3 turns = ~6 messages\n const result = compacted.map((msg, idx) => {\n if (idx >= thinkingCutoff) return msg;\n if (msg.role !== \"assistant\") return msg;\n\n const content = msg.content;\n if (!Array.isArray(content)) return msg;\n\n const filtered = (content as CompactableBlock[]).filter(\n (block) => {\n if (block.type === \"thinking\") {\n bytesRemoved += String(block.thinking || \"\").length;\n return false;\n }\n return true;\n },\n );\n\n if (filtered.length === 0) return msg; // Keep at least something\n return { ...msg, content: filtered };\n });\n\n return { messages: result, bytesRemoved };\n }\n\n return { messages: compacted, bytesRemoved };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,80 +1,83 @@
1
1
  /**
2
2
  * Shared constants — single source of truth for model IDs, thresholds, and limits.
3
3
  */
4
+
4
5
  export const MODELS = {
5
- // Anthropic (direct API)
6
- OPUS: "claude-opus-4-6",
7
- SONNET: "claude-sonnet-4-6",
8
- SONNET_4: "claude-sonnet-4-20250514",
9
- HAIKU: "claude-haiku-4-5-20251001",
10
- // Bedrock (Claude on AWS)
11
- BEDROCK_SONNET: "anthropic.claude-sonnet-4-6",
12
- BEDROCK_SONNET_4: "us.anthropic.claude-sonnet-4-20250514-v1:0",
13
- BEDROCK_SONNET_45: "us.anthropic.claude-sonnet-4-5-20250929-v1:0",
14
- BEDROCK_HAIKU: "us.anthropic.claude-haiku-4-5-20251001-v1:0",
15
- // Google Gemini
16
- GEMINI_3_PRO: "gemini-3-pro-preview",
17
- GEMINI_3_FLASH: "gemini-3-flash-preview",
18
- GEMINI_25_PRO: "gemini-2.5-pro",
19
- GEMINI_25_FLASH: "gemini-2.5-flash",
20
- GEMINI_25_FLASH_LITE: "gemini-2.5-flash-lite",
21
- // OpenAI
22
- GPT_5: "gpt-5",
23
- GPT_5_MINI: "gpt-5-mini",
24
- GPT_5_NANO: "gpt-5-nano",
25
- O3: "o3",
26
- O4_MINI: "o4-mini",
27
- GPT_4O: "gpt-4o",
6
+ // Anthropic (direct API)
7
+ OPUS: "claude-opus-4-6",
8
+ SONNET: "claude-sonnet-4-6",
9
+ SONNET_4: "claude-sonnet-4-20250514",
10
+ HAIKU: "claude-haiku-4-5-20251001",
11
+ // Bedrock (Claude on AWS)
12
+ BEDROCK_SONNET: "anthropic.claude-sonnet-4-6",
13
+ BEDROCK_SONNET_4: "us.anthropic.claude-sonnet-4-20250514-v1:0",
14
+ BEDROCK_SONNET_45: "us.anthropic.claude-sonnet-4-5-20250929-v1:0",
15
+ BEDROCK_HAIKU: "us.anthropic.claude-haiku-4-5-20251001-v1:0",
16
+ // Google Gemini
17
+ GEMINI_3_PRO: "gemini-3-pro-preview",
18
+ GEMINI_3_FLASH: "gemini-3-flash-preview",
19
+ GEMINI_25_PRO: "gemini-2.5-pro",
20
+ GEMINI_25_FLASH: "gemini-2.5-flash",
21
+ GEMINI_25_FLASH_LITE: "gemini-2.5-flash-lite",
22
+ // OpenAI
23
+ GPT_5: "gpt-5",
24
+ GPT_5_MINI: "gpt-5-mini",
25
+ GPT_5_NANO: "gpt-5-nano",
26
+ O3: "o3",
27
+ O4_MINI: "o4-mini",
28
+ GPT_4O: "gpt-4o"
28
29
  };
30
+
29
31
  /** Maps short model aliases to full model IDs */
30
32
  export const MODEL_MAP = {
31
- // Auto-routing (resolved at runtime by model-router)
32
- auto: "auto",
33
- // Anthropic
34
- "whale/agent": MODELS.OPUS, // OpenClaw bridge sends this model ID
35
- opus: MODELS.OPUS,
36
- sonnet: MODELS.SONNET,
37
- "sonnet-4.6": MODELS.SONNET,
38
- "sonnet-4": MODELS.SONNET_4,
39
- haiku: MODELS.HAIKU,
40
- // Bedrock
41
- "bedrock-sonnet": MODELS.BEDROCK_SONNET,
42
- "bedrock-sonnet-4": MODELS.BEDROCK_SONNET_4,
43
- "bedrock-sonnet-4.5": MODELS.BEDROCK_SONNET_45,
44
- "bedrock-haiku": MODELS.BEDROCK_HAIKU,
45
- // Gemini
46
- "gemini-3-pro": MODELS.GEMINI_3_PRO,
47
- "gemini-3-flash": MODELS.GEMINI_3_FLASH,
48
- "gemini-pro": MODELS.GEMINI_25_PRO,
49
- "gemini-flash": MODELS.GEMINI_25_FLASH,
50
- "gemini-flash-lite": MODELS.GEMINI_25_FLASH_LITE,
51
- // OpenAI
52
- "gpt-5": MODELS.GPT_5,
53
- "5": MODELS.GPT_5,
54
- "gpt-5-mini": MODELS.GPT_5_MINI,
55
- "5-mini": MODELS.GPT_5_MINI,
56
- "gpt-5-nano": MODELS.GPT_5_NANO,
57
- "5-nano": MODELS.GPT_5_NANO,
58
- "o3": MODELS.O3,
59
- "o4-mini": MODELS.O4_MINI,
60
- "gpt-4o": MODELS.GPT_4O,
61
- "4o": MODELS.GPT_4O,
33
+ // Auto-routing (resolved at runtime by model-router)
34
+ auto: "auto",
35
+ // Anthropic
36
+ "whale/agent": MODELS.OPUS,
37
+ // OpenClaw bridge sends this model ID
38
+ opus: MODELS.OPUS,
39
+ sonnet: MODELS.SONNET,
40
+ "sonnet-4.6": MODELS.SONNET,
41
+ "sonnet-4": MODELS.SONNET_4,
42
+ haiku: MODELS.HAIKU,
43
+ // Bedrock
44
+ "bedrock-sonnet": MODELS.BEDROCK_SONNET,
45
+ "bedrock-sonnet-4": MODELS.BEDROCK_SONNET_4,
46
+ "bedrock-sonnet-4.5": MODELS.BEDROCK_SONNET_45,
47
+ "bedrock-haiku": MODELS.BEDROCK_HAIKU,
48
+ // Gemini
49
+ "gemini-3-pro": MODELS.GEMINI_3_PRO,
50
+ "gemini-3-flash": MODELS.GEMINI_3_FLASH,
51
+ "gemini-pro": MODELS.GEMINI_25_PRO,
52
+ "gemini-flash": MODELS.GEMINI_25_FLASH,
53
+ "gemini-flash-lite": MODELS.GEMINI_25_FLASH_LITE,
54
+ // OpenAI
55
+ "gpt-5": MODELS.GPT_5,
56
+ "5": MODELS.GPT_5,
57
+ "gpt-5-mini": MODELS.GPT_5_MINI,
58
+ "5-mini": MODELS.GPT_5_MINI,
59
+ "gpt-5-nano": MODELS.GPT_5_NANO,
60
+ "5-nano": MODELS.GPT_5_NANO,
61
+ "o3": MODELS.O3,
62
+ "o4-mini": MODELS.O4_MINI,
63
+ "gpt-4o": MODELS.GPT_4O,
64
+ "4o": MODELS.GPT_4O
62
65
  };
66
+
63
67
  /** Allowed model IDs for server validation */
64
68
  export const ALLOWED_MODELS = [...Object.values(MODELS), "auto"];
69
+
65
70
  /** Detect provider from full model ID */
66
71
  export function getProvider(modelId) {
67
- if (modelId === "auto")
68
- return "anthropic"; // auto resolves to Claude models
69
- if (modelId.includes(".anthropic.") || modelId.startsWith("anthropic."))
70
- return "bedrock";
71
- if (modelId.startsWith("gemini-"))
72
- return "gemini";
73
- if (modelId.startsWith("gpt-") || /^o\d/.test(modelId))
74
- return "openai";
75
- return "anthropic";
72
+ if (modelId === "auto") return "anthropic"; // auto resolves to Claude models
73
+ if (modelId.includes(".anthropic.") || modelId.startsWith("anthropic.")) return "bedrock";
74
+ if (modelId.startsWith("gemini-")) return "gemini";
75
+ if (modelId.startsWith("gpt-") || /^o\d/.test(modelId)) return "openai";
76
+ return "anthropic";
76
77
  }
78
+
77
79
  /** Check if an OpenAI model is a reasoning model (o-series) */
78
80
  export function isOpenAIReasoningModel(modelId) {
79
- return /^o\d/.test(modelId);
81
+ return /^o\d/.test(modelId);
80
82
  }
83
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","names":["MODELS","OPUS","SONNET","SONNET_4","HAIKU","BEDROCK_SONNET","BEDROCK_SONNET_4","BEDROCK_SONNET_45","BEDROCK_HAIKU","GEMINI_3_PRO","GEMINI_3_FLASH","GEMINI_25_PRO","GEMINI_25_FLASH","GEMINI_25_FLASH_LITE","GPT_5","GPT_5_MINI","GPT_5_NANO","O3","O4_MINI","GPT_4O","MODEL_MAP","auto","opus","sonnet","haiku","ALLOWED_MODELS","Object","values","getProvider","modelId","includes","startsWith","test","isOpenAIReasoningModel"],"sources":["../../src/shared/constants.ts"],"sourcesContent":["/**\n * Shared constants — single source of truth for model IDs, thresholds, and limits.\n */\n\nexport type ModelProvider = \"anthropic\" | \"bedrock\" | \"gemini\" | \"openai\";\n\nexport const MODELS = {\n // Anthropic (direct API)\n OPUS: \"claude-opus-4-6\",\n SONNET: \"claude-sonnet-4-6\",\n SONNET_4: \"claude-sonnet-4-20250514\",\n HAIKU: \"claude-haiku-4-5-20251001\",\n\n // Bedrock (Claude on AWS)\n BEDROCK_SONNET: \"anthropic.claude-sonnet-4-6\",\n BEDROCK_SONNET_4: \"us.anthropic.claude-sonnet-4-20250514-v1:0\",\n BEDROCK_SONNET_45: \"us.anthropic.claude-sonnet-4-5-20250929-v1:0\",\n BEDROCK_HAIKU: \"us.anthropic.claude-haiku-4-5-20251001-v1:0\",\n\n // Google Gemini\n GEMINI_3_PRO: \"gemini-3-pro-preview\",\n GEMINI_3_FLASH: \"gemini-3-flash-preview\",\n GEMINI_25_PRO: \"gemini-2.5-pro\",\n GEMINI_25_FLASH: \"gemini-2.5-flash\",\n GEMINI_25_FLASH_LITE: \"gemini-2.5-flash-lite\",\n\n // OpenAI\n GPT_5: \"gpt-5\",\n GPT_5_MINI: \"gpt-5-mini\",\n GPT_5_NANO: \"gpt-5-nano\",\n O3: \"o3\",\n O4_MINI: \"o4-mini\",\n GPT_4O: \"gpt-4o\",\n} as const;\n\n/** Maps short model aliases to full model IDs */\nexport const MODEL_MAP: Record<string, string> = {\n // Auto-routing (resolved at runtime by model-router)\n auto: \"auto\",\n\n // Anthropic\n \"whale/agent\": MODELS.OPUS, // OpenClaw bridge sends this model ID\n opus: MODELS.OPUS,\n sonnet: MODELS.SONNET,\n \"sonnet-4.6\": MODELS.SONNET,\n \"sonnet-4\": MODELS.SONNET_4,\n haiku: MODELS.HAIKU,\n\n // Bedrock\n \"bedrock-sonnet\": MODELS.BEDROCK_SONNET,\n \"bedrock-sonnet-4\": MODELS.BEDROCK_SONNET_4,\n \"bedrock-sonnet-4.5\": MODELS.BEDROCK_SONNET_45,\n \"bedrock-haiku\": MODELS.BEDROCK_HAIKU,\n\n // Gemini\n \"gemini-3-pro\": MODELS.GEMINI_3_PRO,\n \"gemini-3-flash\": MODELS.GEMINI_3_FLASH,\n \"gemini-pro\": MODELS.GEMINI_25_PRO,\n \"gemini-flash\": MODELS.GEMINI_25_FLASH,\n \"gemini-flash-lite\": MODELS.GEMINI_25_FLASH_LITE,\n\n // OpenAI\n \"gpt-5\": MODELS.GPT_5,\n \"5\": MODELS.GPT_5,\n \"gpt-5-mini\": MODELS.GPT_5_MINI,\n \"5-mini\": MODELS.GPT_5_MINI,\n \"gpt-5-nano\": MODELS.GPT_5_NANO,\n \"5-nano\": MODELS.GPT_5_NANO,\n \"o3\": MODELS.O3,\n \"o4-mini\": MODELS.O4_MINI,\n \"gpt-4o\": MODELS.GPT_4O,\n \"4o\": MODELS.GPT_4O,\n};\n\n/** Allowed model IDs for server validation */\nexport const ALLOWED_MODELS = [...Object.values(MODELS), \"auto\"] as string[];\n\n/** Detect provider from full model ID */\nexport function getProvider(modelId: string): ModelProvider {\n if (modelId === \"auto\") return \"anthropic\"; // auto resolves to Claude models\n if (modelId.includes(\".anthropic.\") || modelId.startsWith(\"anthropic.\")) return \"bedrock\";\n if (modelId.startsWith(\"gemini-\")) return \"gemini\";\n if (modelId.startsWith(\"gpt-\") || /^o\\d/.test(modelId)) return \"openai\";\n return \"anthropic\";\n}\n\n/** Check if an OpenAI model is a reasoning model (o-series) */\nexport function isOpenAIReasoningModel(modelId: string): boolean {\n return /^o\\d/.test(modelId);\n}\n"],"mappings":"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","ignoreList":[]}