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
@@ -9,22 +9,47 @@
9
9
  * Both subagent and teammate keep their own types, system prompts, and lifecycle logic.
10
10
  * This module provides composable functions, NOT a class hierarchy.
11
11
  */
12
+
13
+ import { AGENT_DEFAULTS } from "../../shared/agent-core.js";
12
14
  import { getProxyUrl, resolveConfig } from "./config-store.js";
13
15
  import { getValidToken, refreshSession } from "./auth-service.js";
14
16
  import { parseSSEStream, collectStreamResult } from "../../shared/sse-parser.js";
15
- import { callServerProxy, buildAPIRequest, buildSystemBlocks, } from "../../shared/api-client.js";
17
+ import { callServerProxy, buildAPIRequest, buildSystemBlocks } from "../../shared/api-client.js";
16
18
  import { addPromptCaching } from "../../shared/agent-core.js";
17
- import { isLocalTool, executeLocalTool, } from "./local-tools.js";
18
- import { isServerTool, executeServerTool, } from "./server-tools.js";
19
+ import { isLocalTool, executeLocalTool } from "./local-tools.js";
20
+ import { isServerTool, executeServerTool } from "./server-tools.js";
19
21
  // ============================================================================
20
22
  // LONG-RUNNING TOOL TIMEOUT (mirrors tool-dispatch.ts)
21
23
  // ============================================================================
24
+
22
25
  /** Tools that spawn workers/subprocesses and need much longer than 2 min */
23
26
  const LONG_RUNNING_TOOL_TIMEOUT_MS = 10 * 60 * 1000; // 10 minutes
24
- const LONG_RUNNING_TOOLS = new Set(["team_create", "task", "delegate_task", "exit_plan_mode", "ask_user_question"]);
27
+ const LONG_RUNNING_TOOLS = new Set(["team_create", "task", "task_output", "kali", "delegate_task", "exit_plan_mode", "ask_user_question"]);
28
+
29
+ // ============================================================================
30
+ // TYPES
31
+ // ============================================================================
32
+
33
+ /** Thinking blocks aren't part of Anthropic.ContentBlock but are returned by the API */
34
+
35
+ /** Content block including thinking (extends SDK's ContentBlock union) */
36
+
37
+ /** Unified response from an API call — used by both subagent and teammate */
38
+
39
+ /** Options for callAgentAPI */
40
+
41
+ /** Result of executing a single tool */
42
+
43
+ /** Callbacks for tool execution progress */
44
+
45
+ /** Options for executeToolBlocks */
46
+
47
+ /** Result of executing all tool blocks in a turn */
48
+
25
49
  // ============================================================================
26
50
  // API CLIENT — unified proxy caller
27
51
  // ============================================================================
52
+
28
53
  /**
29
54
  * Convert a StreamResult (from SSE collector) to the AgentAPIResponse format
30
55
  * that both subagent and teammate expect.
@@ -32,86 +57,116 @@ const LONG_RUNNING_TOOLS = new Set(["team_create", "task", "delegate_task", "exi
32
57
  * Subagent includes thinking blocks; teammate does not (thinkingEnabled=false).
33
58
  */
34
59
  export function streamResultToResponse(result, includeThinking) {
35
- const content = [];
36
- if (includeThinking) {
37
- for (const tb of result.thinkingBlocks) {
38
- content.push({
39
- type: "thinking",
40
- thinking: tb.thinking,
41
- signature: tb.signature,
42
- });
43
- }
44
- }
45
- if (result.text) {
46
- content.push({ type: "text", text: result.text });
47
- }
48
- for (const tu of result.toolUseBlocks) {
49
- content.push({
50
- type: "tool_use",
51
- id: tu.id,
52
- name: tu.name,
53
- input: tu.input,
54
- });
60
+ const content = [];
61
+ if (includeThinking) {
62
+ for (const tb of result.thinkingBlocks) {
63
+ content.push({
64
+ type: "thinking",
65
+ thinking: tb.thinking,
66
+ signature: tb.signature
67
+ });
55
68
  }
56
- return {
57
- content,
58
- usage: {
59
- input_tokens: result.usage.inputTokens,
60
- output_tokens: result.usage.outputTokens,
61
- },
62
- stop_reason: result.stopReason,
63
- };
69
+ }
70
+ if (result.text) {
71
+ content.push({
72
+ type: "text",
73
+ text: result.text
74
+ });
75
+ }
76
+ for (const tu of result.toolUseBlocks) {
77
+ content.push({
78
+ type: "tool_use",
79
+ id: tu.id,
80
+ name: tu.name,
81
+ input: tu.input
82
+ });
83
+ }
84
+ return {
85
+ content,
86
+ usage: {
87
+ input_tokens: result.usage.inputTokens,
88
+ output_tokens: result.usage.outputTokens,
89
+ cache_read_tokens: result.usage.cacheReadTokens ?? 0,
90
+ cache_creation_tokens: result.usage.cacheCreationTokens ?? 0
91
+ },
92
+ stop_reason: result.stopReason
93
+ };
64
94
  }
95
+
65
96
  /**
66
97
  * Call the server proxy API, collect the SSE stream, and return a typed response.
67
98
  * Handles auth, request building, caching setup, and stream collection.
68
99
  */
69
100
  export async function callAgentAPI(opts) {
70
- const token = await getValidToken();
71
- if (!token)
72
- throw new Error("No API key available. Run `whale login`.");
73
- const apiConfig = buildAPIRequest({
74
- model: opts.modelId,
75
- contextProfile: opts.contextProfile,
76
- thinkingEnabled: opts.thinkingEnabled ?? false,
77
- maxOutputTokens: opts.maxOutputTokens,
78
- });
79
- // Optionally add cache_control to last tool
80
- let tools;
81
- if (opts.cacheLastTool && opts.tools.length > 0) {
82
- tools = [
83
- ...opts.tools.slice(0, -1),
84
- { ...opts.tools[opts.tools.length - 1], cache_control: { type: "ephemeral" } },
85
- ];
86
- }
87
- else {
88
- tools = [...opts.tools];
89
- }
90
- const system = buildSystemBlocks(opts.systemPrompt);
91
- // Apply prompt caching to messages (tools already cached above)
92
- const { messages: cachedMessages } = addPromptCaching([], opts.messages);
93
- const { storeId } = resolveConfig();
101
+ const token = await getValidToken();
102
+ if (!token) throw new Error("No API key available. Run `whale login`.");
103
+ const apiConfig = buildAPIRequest({
104
+ model: opts.modelId,
105
+ contextProfile: opts.contextProfile,
106
+ thinkingEnabled: opts.thinkingEnabled ?? false,
107
+ maxOutputTokens: opts.maxOutputTokens
108
+ });
109
+
110
+ // Optionally add cache_control to last tool
111
+ let tools;
112
+ if (opts.cacheLastTool && opts.tools.length > 0) {
113
+ tools = [...opts.tools.slice(0, -1), {
114
+ ...opts.tools[opts.tools.length - 1],
115
+ cache_control: {
116
+ type: "ephemeral"
117
+ }
118
+ }];
119
+ } else {
120
+ tools = opts.tools;
121
+ }
122
+ const system = buildSystemBlocks(opts.systemPrompt);
123
+
124
+ // Apply prompt caching to messages (tools already cached above)
125
+ const {
126
+ messages: cachedMessages
127
+ } = addPromptCaching([], opts.messages);
128
+ const {
129
+ storeId
130
+ } = resolveConfig();
131
+
132
+ // Heartbeat timer — keeps parent stall detector alive during long API calls
133
+ // (thinking + streaming can take 60-90s with no other IPC messages)
134
+ let heartbeatTimer;
135
+ if (opts.onHeartbeat) {
136
+ heartbeatTimer = setInterval(opts.onHeartbeat, 10_000);
137
+ }
138
+ try {
94
139
  const stream = await callServerProxy({
95
- proxyUrl: getProxyUrl(),
96
- token,
97
- model: opts.modelId,
98
- system,
99
- messages: cachedMessages,
100
- tools,
101
- apiConfig,
102
- storeId: storeId || undefined,
103
- ...(opts.timeoutMs ? { timeoutMs: opts.timeoutMs } : {}),
104
- onTokenRefresh: async () => {
105
- const result = await refreshSession();
106
- return result.success ? result.config.access_token : null;
107
- },
140
+ proxyUrl: getProxyUrl(),
141
+ token,
142
+ model: opts.modelId,
143
+ system,
144
+ messages: cachedMessages,
145
+ tools,
146
+ apiConfig,
147
+ storeId: storeId || undefined,
148
+ ...(opts.timeoutMs ? {
149
+ timeoutMs: opts.timeoutMs
150
+ } : {}),
151
+ ...(opts.abortSignal ? {
152
+ signal: opts.abortSignal
153
+ } : {}),
154
+ onTokenRefresh: async () => {
155
+ const result = await refreshSession();
156
+ return result.success ? result.config.access_token : null;
157
+ }
108
158
  });
109
159
  const result = await collectStreamResult(parseSSEStream(stream));
110
160
  return streamResultToResponse(result, opts.thinkingEnabled ?? false);
161
+ } finally {
162
+ if (heartbeatTimer) clearInterval(heartbeatTimer);
163
+ }
111
164
  }
165
+
112
166
  // ============================================================================
113
167
  // TOOL EXECUTION — shared loop with detection, routing, and truncation
114
168
  // ============================================================================
169
+
115
170
  /**
116
171
  * Execute an array of tool use blocks, handling:
117
172
  * - Loop detection (via LoopDetector)
@@ -122,114 +177,243 @@ export async function callAgentAPI(opts) {
122
177
  * Returns tool results ready to append to messages, plus metadata.
123
178
  */
124
179
  export async function executeToolBlocks(opts) {
125
- const { toolBlocks, loopDetector, callbacks, customExecutor, maxToolResultChars = 500_000, toolTimeoutMs, } = opts;
126
- const toolResults = [];
127
- const toolsUsed = [];
128
- const customSignals = {};
129
- async function executeSingle(tu) {
130
- // Circuit breaker check
131
- const loopCheck = loopDetector.recordCall(tu.name, tu.input);
132
- if (loopCheck.blocked) {
133
- return {
134
- type: "tool_result",
135
- tool_use_id: tu.id,
136
- content: JSON.stringify({ error: loopCheck.reason }),
137
- };
138
- }
139
- callbacks?.onToolStart?.(tu.name, tu.input);
140
- const toolStart = Date.now();
141
- let result;
142
- try {
143
- const executeOne = async () => {
144
- if (customExecutor) {
145
- const customResult = await customExecutor(tu.name, tu.input);
146
- if (customResult !== null)
147
- return customResult;
148
- }
149
- if (isLocalTool(tu.name)) {
150
- return await executeLocalTool(tu.name, tu.input);
151
- }
152
- else if (isServerTool(tu.name)) {
153
- return await executeServerTool(tu.name, tu.input);
154
- }
155
- else {
156
- return { success: false, output: `Unknown tool: ${tu.name}` };
157
- }
158
- };
159
- if (toolTimeoutMs) {
160
- const effectiveTimeout = LONG_RUNNING_TOOLS.has(tu.name)
161
- ? Math.max(toolTimeoutMs, LONG_RUNNING_TOOL_TIMEOUT_MS)
162
- : toolTimeoutMs;
163
- result = await Promise.race([
164
- executeOne(),
165
- new Promise((_, reject) => setTimeout(() => reject(new Error(`Tool ${tu.name} timed out after ${effectiveTimeout / 1000}s`)), effectiveTimeout)),
166
- ]);
167
- }
168
- else {
169
- result = await executeOne();
170
- }
171
- }
172
- catch (toolErr) {
173
- result = { success: false, output: `Tool execution error: ${toolErr.message || String(toolErr)}` };
174
- }
175
- const toolDuration = Date.now() - toolStart;
176
- loopDetector.recordResult(tu.name, result.success, tu.input);
177
- callbacks?.onToolEnd?.(tu.name, result.success, toolDuration);
178
- if (!toolsUsed.includes(tu.name)) {
179
- toolsUsed.push(tu.name);
180
- }
181
- let contentStr = JSON.stringify(result.success ? result.output : { error: result.output });
182
- if (contentStr.length > maxToolResultChars) {
183
- contentStr =
184
- contentStr.slice(0, maxToolResultChars) +
185
- `\n\n... (truncated — ${contentStr.length.toLocaleString()} chars total)`;
186
- }
180
+ const {
181
+ toolBlocks,
182
+ loopDetector,
183
+ callbacks,
184
+ customExecutor,
185
+ maxToolResultChars = AGENT_DEFAULTS.toolResultTruncateChars,
186
+ toolTimeoutMs,
187
+ batchErrorLimit = AGENT_DEFAULTS.loopBatchErrorLimit,
188
+ signal
189
+ } = opts;
190
+ const toolResults = [];
191
+ const toolsUsed = [];
192
+ const customSignals = {};
193
+
194
+ /** Shared state for each parallel batch — tracks errors to abort remaining calls.
195
+ * JavaScript is single-threaded, so between `await` yields this is atomic. */
196
+
197
+ async function executeSingle(tu, batch) {
198
+ // Early exit if cancelled
199
+ if (signal?.aborted) {
200
+ return {
201
+ type: "tool_result",
202
+ tool_use_id: tu.id,
203
+ content: "Cancelled"
204
+ };
205
+ }
206
+
207
+ // Early exit if batch already aborted
208
+ if (batch.aborted) {
209
+ return {
210
+ type: "tool_result",
211
+ tool_use_id: tu.id,
212
+ content: JSON.stringify({
213
+ error: "Batch aborted — too many sibling tool calls failed. Re-assess your approach."
214
+ })
215
+ };
216
+ }
217
+
218
+ // Circuit breaker check
219
+ const loopCheck = loopDetector.recordCall(tu.name, tu.input);
220
+ if (loopCheck.blocked) {
221
+ return {
222
+ type: "tool_result",
223
+ tool_use_id: tu.id,
224
+ content: JSON.stringify({
225
+ error: loopCheck.reason
226
+ })
227
+ };
228
+ }
229
+
230
+ // File read frequency tracking — mirrors tool-dispatch.ts behavior.
231
+ // Without this, subagents/teammates can read the same file unlimited times.
232
+ if (tu.name === "read_file" && typeof tu.input.path === "string") {
233
+ const readCheck = loopDetector.trackRead(tu.input.path);
234
+ if (readCheck.blocked) {
187
235
  return {
188
- type: "tool_result",
189
- tool_use_id: tu.id,
190
- content: contentStr,
236
+ type: "tool_result",
237
+ tool_use_id: tu.id,
238
+ content: JSON.stringify({
239
+ error: readCheck.reason
240
+ })
191
241
  };
242
+ }
192
243
  }
193
- // Split into file-mutating (sequential) and read-only/server (parallel) batches.
194
- // File writes/edits must be sequential to prevent race conditions on the same file.
195
- const FILE_MUTATING_TOOLS = new Set(["write_file", "edit_file", "multi_edit", "notebook_edit", "run_command"]);
196
- const sequential = toolBlocks.filter(tu => FILE_MUTATING_TOOLS.has(tu.name));
197
- const parallel = toolBlocks.filter(tu => !FILE_MUTATING_TOOLS.has(tu.name));
198
- // Run read-only/server tools in parallel
199
- if (parallel.length > 0) {
200
- const parallelResults = await Promise.all(parallel.map(tu => executeSingle(tu)));
201
- toolResults.push(...parallelResults);
244
+ callbacks?.onToolStart?.(tu.name, tu.input);
245
+ const toolStart = Date.now();
246
+ let result;
247
+ let isTransient = false;
248
+ try {
249
+ const executeOne = async () => {
250
+ if (customExecutor) {
251
+ const customResult = await customExecutor(tu.name, tu.input);
252
+ if (customResult !== null) return customResult;
253
+ }
254
+ if (isLocalTool(tu.name)) {
255
+ return await executeLocalTool(tu.name, tu.input, signal);
256
+ } else if (isServerTool(tu.name)) {
257
+ return await executeServerTool(tu.name, tu.input);
258
+ } else {
259
+ return {
260
+ success: false,
261
+ output: `Unknown tool: ${tu.name}`
262
+ };
263
+ }
264
+ };
265
+ if (toolTimeoutMs) {
266
+ const effectiveTimeout = LONG_RUNNING_TOOLS.has(tu.name) ? Math.max(toolTimeoutMs, LONG_RUNNING_TOOL_TIMEOUT_MS) : toolTimeoutMs;
267
+ result = await Promise.race([executeOne(), new Promise((_, reject) => setTimeout(() => reject(new Error(`Tool ${tu.name} timed out after ${effectiveTimeout / 1000}s`)), effectiveTimeout))]);
268
+ } else {
269
+ result = await executeOne();
270
+ }
271
+ } catch (toolErr) {
272
+ const msg = toolErr.message || String(toolErr);
273
+ isTransient = /timed?\s*out/i.test(msg) || /rate.?limit/i.test(msg) || /429/i.test(msg);
274
+ result = {
275
+ success: false,
276
+ output: `Tool execution error: ${msg}`
277
+ };
278
+ }
279
+ const toolDuration = Date.now() - toolStart;
280
+
281
+ // If batch was aborted while executing, skip recording to avoid inflating
282
+ // LoopDetector counts from a single bad parallel batch (TOCTOU race fix).
283
+ if (!result.success && batch.aborted) {
284
+ callbacks?.onToolEnd?.(tu.name, false, toolDuration);
285
+ return {
286
+ type: "tool_result",
287
+ tool_use_id: tu.id,
288
+ content: JSON.stringify({
289
+ error: "Batch aborted — too many sibling tool calls failed. Re-assess your approach."
290
+ })
291
+ };
292
+ }
293
+ loopDetector.recordResult(tu.name, result.success, tu.input, isTransient);
294
+
295
+ // Track batch-level failures
296
+ if (!result.success) {
297
+ batch.errors++;
298
+ if (batch.errors >= batchErrorLimit) {
299
+ batch.aborted = true;
300
+ }
301
+ }
302
+ callbacks?.onToolEnd?.(tu.name, result.success, toolDuration);
303
+ if (!toolsUsed.includes(tu.name)) {
304
+ toolsUsed.push(tu.name);
202
305
  }
203
- // Run file-mutating tools sequentially
204
- for (const tu of sequential) {
205
- const result = await executeSingle(tu);
206
- toolResults.push(result);
306
+ let contentStr = JSON.stringify(result.success ? result.output : {
307
+ error: result.output
308
+ });
309
+ if (contentStr.length > maxToolResultChars) {
310
+ contentStr = contentStr.slice(0, maxToolResultChars) + `\n\n... (truncated — ${contentStr.length.toLocaleString()} chars total)`;
207
311
  }
208
- return { toolResults, toolsUsed, customSignals };
312
+ return {
313
+ type: "tool_result",
314
+ tool_use_id: tu.id,
315
+ content: contentStr
316
+ };
317
+ }
318
+
319
+ // Split into file-mutating (sequential) and everything else (parallel).
320
+ // File writes/edits must be sequential to prevent race conditions on the same file.
321
+ // run_command runs in parallel — like tool-dispatch.ts, bash calls can be concurrent
322
+ // (tests, searches, etc.). The model decides ordering via tool_use blocks.
323
+ const FILE_MUTATING_TOOLS = new Set(["write_file", "edit_file", "multi_edit", "notebook_edit"]);
324
+ const sequential = toolBlocks.filter(tu => FILE_MUTATING_TOOLS.has(tu.name));
325
+ const parallel = toolBlocks.filter(tu => !FILE_MUTATING_TOOLS.has(tu.name));
326
+
327
+ // Run parallel tools (including run_command) with batch error abort
328
+ if (parallel.length > 0) {
329
+ const batchState = {
330
+ errors: 0,
331
+ aborted: false
332
+ };
333
+ const parallelResults = await Promise.all(parallel.map(tu => executeSingle(tu, batchState)));
334
+ toolResults.push(...parallelResults);
335
+ }
336
+
337
+ // Run file-mutating tools sequentially (batch state still used for consistency)
338
+ const seqBatchState = {
339
+ errors: 0,
340
+ aborted: false
341
+ };
342
+ for (const tu of sequential) {
343
+ const result = await executeSingle(tu, seqBatchState);
344
+ toolResults.push(result);
345
+ }
346
+ return {
347
+ toolResults,
348
+ toolsUsed,
349
+ customSignals
350
+ };
209
351
  }
352
+
210
353
  // ============================================================================
211
354
  // CONTENT BLOCK HELPERS
212
355
  // ============================================================================
356
+
213
357
  /** Extract text blocks from a response */
214
358
  export function extractTextBlocks(content) {
215
- return content.filter((b) => b.type === "text");
359
+ return content.filter(b => b.type === "text");
216
360
  }
361
+
217
362
  /** Extract tool use blocks from a response */
218
363
  export function extractToolUseBlocks(content) {
219
- return content.filter((b) => b.type === "tool_use");
364
+ return content.filter(b => b.type === "tool_use");
220
365
  }
366
+
221
367
  /** Get combined text from all text blocks */
222
368
  export function getResponseText(content) {
223
- return extractTextBlocks(content).map((b) => b.text).join("\n");
369
+ return extractTextBlocks(content).map(b => b.text).join("\n");
370
+ }
371
+
372
+ // ============================================================================
373
+ // TOOL DEDUPLICATION — shared by subagent.ts and teammate.ts
374
+ // ============================================================================
375
+
376
+ /**
377
+ * Deduplicate tools by name — local tools take priority over server tools.
378
+ * Ensures the Anthropic API never receives duplicate tool names (400 error).
379
+ */
380
+ export function deduplicateTools(tools) {
381
+ const seen = new Set();
382
+ const result = [];
383
+ for (const tool of tools) {
384
+ if (!seen.has(tool.name)) {
385
+ seen.add(tool.name);
386
+ result.push(tool);
387
+ }
388
+ }
389
+ return result;
390
+ }
391
+
392
+ /**
393
+ * Assert that all tool names are unique. Call right before sending to the API
394
+ * to fail fast with a clear error instead of a cryptic Anthropic 400.
395
+ */
396
+ export function assertUniqueToolNames(tools) {
397
+ const names = new Set();
398
+ for (const tool of tools) {
399
+ if (names.has(tool.name)) {
400
+ throw new Error(`Duplicate tool name "${tool.name}" — tools must have unique names before calling the Anthropic API`);
401
+ }
402
+ names.add(tool.name);
403
+ }
224
404
  }
405
+
225
406
  // ============================================================================
226
407
  // YIELD HELPERS — prevent blocking the event loop during long agent loops
227
408
  // ============================================================================
409
+
228
410
  /** Yield to event loop to prevent blocking (microtask resolution) */
229
411
  export function yieldToEventLoop() {
230
- return new Promise((resolve) => setTimeout(resolve, 0));
412
+ return new Promise(resolve => setTimeout(resolve, 0));
231
413
  }
414
+
232
415
  /** Longer yield for UI-critical moments (before long API calls, ~1 frame at 60fps) */
233
416
  export function yieldForRender() {
234
- return new Promise((resolve) => setTimeout(resolve, 16));
417
+ return new Promise(resolve => setTimeout(resolve, 16));
235
418
  }
419
+ //# sourceMappingURL=agent-worker-base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-worker-base.js","names":["AGENT_DEFAULTS","getProxyUrl","resolveConfig","getValidToken","refreshSession","parseSSEStream","collectStreamResult","callServerProxy","buildAPIRequest","buildSystemBlocks","addPromptCaching","isLocalTool","executeLocalTool","isServerTool","executeServerTool","LONG_RUNNING_TOOL_TIMEOUT_MS","LONG_RUNNING_TOOLS","Set","streamResultToResponse","result","includeThinking","content","tb","thinkingBlocks","push","type","thinking","signature","text","tu","toolUseBlocks","id","name","input","usage","input_tokens","inputTokens","output_tokens","outputTokens","cache_read_tokens","cacheReadTokens","cache_creation_tokens","cacheCreationTokens","stop_reason","stopReason","callAgentAPI","opts","token","Error","apiConfig","model","modelId","contextProfile","thinkingEnabled","maxOutputTokens","tools","cacheLastTool","length","slice","cache_control","system","systemPrompt","messages","cachedMessages","storeId","heartbeatTimer","onHeartbeat","setInterval","stream","proxyUrl","undefined","timeoutMs","abortSignal","signal","onTokenRefresh","success","config","access_token","clearInterval","executeToolBlocks","toolBlocks","loopDetector","callbacks","customExecutor","maxToolResultChars","toolResultTruncateChars","toolTimeoutMs","batchErrorLimit","loopBatchErrorLimit","toolResults","toolsUsed","customSignals","executeSingle","batch","aborted","tool_use_id","JSON","stringify","error","loopCheck","recordCall","blocked","reason","path","readCheck","trackRead","onToolStart","toolStart","Date","now","isTransient","executeOne","customResult","output","effectiveTimeout","has","Math","max","Promise","race","_","reject","setTimeout","toolErr","msg","message","String","test","toolDuration","onToolEnd","recordResult","errors","includes","contentStr","toLocaleString","FILE_MUTATING_TOOLS","sequential","filter","parallel","batchState","parallelResults","all","map","seqBatchState","extractTextBlocks","b","extractToolUseBlocks","getResponseText","join","deduplicateTools","seen","tool","add","assertUniqueToolNames","names","yieldToEventLoop","resolve","yieldForRender"],"sources":["../../../src/cli/services/agent-worker-base.ts"],"sourcesContent":["/**\n * Agent Worker Base — shared utilities for subagent.ts and teammate.ts\n *\n * Extracts the common plumbing:\n * - API calling (auth, build request, call proxy, collect stream, convert response)\n * - Tool execution with loop detection, truncation, and result formatting\n * - Token tracking\n *\n * Both subagent and teammate keep their own types, system prompts, and lifecycle logic.\n * This module provides composable functions, NOT a class hierarchy.\n */\n\nimport type Anthropic from \"@anthropic-ai/sdk\";\nimport { LoopDetector, AGENT_DEFAULTS } from \"../../shared/agent-core.js\";\nimport { getProxyUrl, resolveConfig } from \"./config-store.js\";\nimport { getValidToken, refreshSession } from \"./auth-service.js\";\nimport { parseSSEStream, collectStreamResult } from \"../../shared/sse-parser.js\";\nimport {\n callServerProxy,\n buildAPIRequest,\n buildSystemBlocks,\n} from \"../../shared/api-client.js\";\nimport { addPromptCaching } from \"../../shared/agent-core.js\";\nimport {\n isLocalTool,\n executeLocalTool,\n} from \"./local-tools.js\";\nimport {\n isServerTool,\n executeServerTool,\n} from \"./server-tools.js\";\nimport type { ContextProfile, StreamResult } from \"../../shared/types.js\";\n\n// ============================================================================\n// LONG-RUNNING TOOL TIMEOUT (mirrors tool-dispatch.ts)\n// ============================================================================\n\n/** Tools that spawn workers/subprocesses and need much longer than 2 min */\nconst LONG_RUNNING_TOOL_TIMEOUT_MS = 10 * 60 * 1000; // 10 minutes\nconst LONG_RUNNING_TOOLS = new Set([\"team_create\", \"task\", \"task_output\", \"kali\", \"delegate_task\", \"exit_plan_mode\", \"ask_user_question\"]);\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\n/** Thinking blocks aren't part of Anthropic.ContentBlock but are returned by the API */\ninterface ThinkingBlock {\n type: \"thinking\";\n thinking: string;\n signature: string;\n}\n\n/** Content block including thinking (extends SDK's ContentBlock union) */\nexport type AgentContentBlock = Anthropic.ContentBlock | ThinkingBlock;\n\n/** Unified response from an API call — used by both subagent and teammate */\nexport interface AgentAPIResponse {\n content: AgentContentBlock[];\n usage: {\n input_tokens: number;\n output_tokens: number;\n cache_read_tokens: number;\n cache_creation_tokens: number;\n };\n stop_reason: string;\n}\n\n/** Options for callAgentAPI */\nexport interface AgentAPIOptions {\n modelId: string;\n contextProfile: ContextProfile;\n systemPrompt: string;\n messages: Anthropic.MessageParam[];\n tools: Anthropic.Tool[];\n thinkingEnabled?: boolean;\n maxOutputTokens?: number;\n timeoutMs?: number;\n /** If true, add cache_control to last tool */\n cacheLastTool?: boolean;\n /** Called periodically during long API calls (streaming/thinking) to signal liveness */\n onHeartbeat?: () => void;\n /** AbortSignal for cancellation */\n abortSignal?: AbortSignal;\n}\n\n/** Result of executing a single tool */\nexport interface ToolExecResult {\n success: boolean;\n output: string;\n}\n\n/** Callbacks for tool execution progress */\nexport interface ToolExecCallbacks {\n onToolStart?: (toolName: string, input: Record<string, unknown>) => void;\n onToolEnd?: (toolName: string, success: boolean, durationMs: number) => void;\n}\n\n/** Options for executeToolBlocks */\nexport interface ExecuteToolBlocksOptions {\n toolBlocks: Anthropic.ToolUseBlock[];\n loopDetector: LoopDetector;\n callbacks?: ToolExecCallbacks;\n /** Additional tool executor for domain-specific tools (e.g., team tools) */\n customExecutor?: (name: string, input: Record<string, unknown>) => Promise<ToolExecResult | null>;\n /** Max chars per tool result before truncation */\n maxToolResultChars?: number;\n /** Timeout per tool call in ms (no timeout if not set) */\n toolTimeoutMs?: number;\n /** Max errors from a single parallel batch before aborting remaining calls.\n * Prevents Promise.all() from cascading N failures into the LoopDetector. */\n batchErrorLimit?: number;\n /** AbortSignal for cancellation */\n signal?: AbortSignal;\n}\n\n/** Result of executing all tool blocks in a turn */\nexport interface ToolBlocksResult {\n toolResults: Anthropic.ToolResultBlockParam[];\n toolsUsed: string[];\n /** Set by custom executor if a domain event occurred (e.g., team task completed) */\n customSignals: Record<string, unknown>;\n}\n\n// ============================================================================\n// API CLIENT — unified proxy caller\n// ============================================================================\n\n/**\n * Convert a StreamResult (from SSE collector) to the AgentAPIResponse format\n * that both subagent and teammate expect.\n *\n * Subagent includes thinking blocks; teammate does not (thinkingEnabled=false).\n */\nexport function streamResultToResponse(\n result: StreamResult,\n includeThinking: boolean,\n): AgentAPIResponse {\n const content: AgentContentBlock[] = [];\n\n if (includeThinking) {\n for (const tb of result.thinkingBlocks) {\n content.push({\n type: \"thinking\",\n thinking: tb.thinking,\n signature: tb.signature,\n });\n }\n }\n\n if (result.text) {\n content.push({ type: \"text\", text: result.text } as Anthropic.TextBlock);\n }\n\n for (const tu of result.toolUseBlocks) {\n content.push({\n type: \"tool_use\",\n id: tu.id,\n name: tu.name,\n input: tu.input,\n } as Anthropic.ToolUseBlock);\n }\n\n return {\n content,\n usage: {\n input_tokens: result.usage.inputTokens,\n output_tokens: result.usage.outputTokens,\n cache_read_tokens: result.usage.cacheReadTokens ?? 0,\n cache_creation_tokens: result.usage.cacheCreationTokens ?? 0,\n },\n stop_reason: result.stopReason,\n };\n}\n\n/**\n * Call the server proxy API, collect the SSE stream, and return a typed response.\n * Handles auth, request building, caching setup, and stream collection.\n */\nexport async function callAgentAPI(opts: AgentAPIOptions): Promise<AgentAPIResponse> {\n const token = await getValidToken();\n if (!token) throw new Error(\"No API key available. Run `whale login`.\");\n\n const apiConfig = buildAPIRequest({\n model: opts.modelId,\n contextProfile: opts.contextProfile,\n thinkingEnabled: opts.thinkingEnabled ?? false,\n maxOutputTokens: opts.maxOutputTokens,\n });\n\n // Optionally add cache_control to last tool\n let tools: object[];\n if (opts.cacheLastTool && opts.tools.length > 0) {\n tools = [\n ...opts.tools.slice(0, -1),\n { ...opts.tools[opts.tools.length - 1], cache_control: { type: \"ephemeral\" } },\n ];\n } else {\n tools = opts.tools;\n }\n\n const system = buildSystemBlocks(opts.systemPrompt);\n\n // Apply prompt caching to messages (tools already cached above)\n const { messages: cachedMessages } = addPromptCaching([], opts.messages);\n\n const { storeId } = resolveConfig();\n\n // Heartbeat timer — keeps parent stall detector alive during long API calls\n // (thinking + streaming can take 60-90s with no other IPC messages)\n let heartbeatTimer: ReturnType<typeof setInterval> | undefined;\n if (opts.onHeartbeat) {\n heartbeatTimer = setInterval(opts.onHeartbeat, 10_000);\n }\n\n try {\n const stream = await callServerProxy({\n proxyUrl: getProxyUrl(),\n token,\n model: opts.modelId,\n system,\n messages: cachedMessages,\n tools,\n apiConfig,\n storeId: storeId || undefined,\n ...(opts.timeoutMs ? { timeoutMs: opts.timeoutMs } : {}),\n ...(opts.abortSignal ? { signal: opts.abortSignal } : {}),\n onTokenRefresh: async () => {\n const result = await refreshSession();\n return result.success ? result.config!.access_token! : null;\n },\n });\n\n const result = await collectStreamResult(parseSSEStream(stream));\n return streamResultToResponse(result, opts.thinkingEnabled ?? false);\n } finally {\n if (heartbeatTimer) clearInterval(heartbeatTimer);\n }\n}\n\n// ============================================================================\n// TOOL EXECUTION — shared loop with detection, routing, and truncation\n// ============================================================================\n\n/**\n * Execute an array of tool use blocks, handling:\n * - Loop detection (via LoopDetector)\n * - Routing to local, server, or custom executor\n * - Result truncation to maxToolResultChars\n * - Optional per-tool timeout\n *\n * Returns tool results ready to append to messages, plus metadata.\n */\nexport async function executeToolBlocks(\n opts: ExecuteToolBlocksOptions,\n): Promise<ToolBlocksResult> {\n const {\n toolBlocks,\n loopDetector,\n callbacks,\n customExecutor,\n maxToolResultChars = AGENT_DEFAULTS.toolResultTruncateChars,\n toolTimeoutMs,\n batchErrorLimit = AGENT_DEFAULTS.loopBatchErrorLimit,\n signal,\n } = opts;\n\n const toolResults: Anthropic.ToolResultBlockParam[] = [];\n const toolsUsed: string[] = [];\n const customSignals: Record<string, unknown> = {};\n\n /** Shared state for each parallel batch — tracks errors to abort remaining calls.\n * JavaScript is single-threaded, so between `await` yields this is atomic. */\n interface BatchState {\n errors: number;\n aborted: boolean;\n }\n\n async function executeSingle(tu: Anthropic.ToolUseBlock, batch: BatchState): Promise<Anthropic.ToolResultBlockParam> {\n // Early exit if cancelled\n if (signal?.aborted) {\n return {\n type: \"tool_result\",\n tool_use_id: tu.id,\n content: \"Cancelled\",\n };\n }\n\n // Early exit if batch already aborted\n if (batch.aborted) {\n return {\n type: \"tool_result\",\n tool_use_id: tu.id,\n content: JSON.stringify({ error: \"Batch aborted — too many sibling tool calls failed. Re-assess your approach.\" }),\n };\n }\n\n // Circuit breaker check\n const loopCheck = loopDetector.recordCall(tu.name, tu.input as Record<string, unknown>);\n if (loopCheck.blocked) {\n return {\n type: \"tool_result\",\n tool_use_id: tu.id,\n content: JSON.stringify({ error: loopCheck.reason }),\n };\n }\n\n // File read frequency tracking — mirrors tool-dispatch.ts behavior.\n // Without this, subagents/teammates can read the same file unlimited times.\n if (tu.name === \"read_file\" && typeof (tu.input as Record<string, unknown>).path === \"string\") {\n const readCheck = loopDetector.trackRead((tu.input as Record<string, unknown>).path as string);\n if (readCheck.blocked) {\n return {\n type: \"tool_result\",\n tool_use_id: tu.id,\n content: JSON.stringify({ error: readCheck.reason }),\n };\n }\n }\n\n callbacks?.onToolStart?.(tu.name, tu.input as Record<string, unknown>);\n\n const toolStart = Date.now();\n let result: ToolExecResult;\n\n let isTransient = false;\n try {\n const executeOne = async (): Promise<ToolExecResult> => {\n if (customExecutor) {\n const customResult = await customExecutor(tu.name, tu.input as Record<string, unknown>);\n if (customResult !== null) return customResult;\n }\n\n if (isLocalTool(tu.name)) {\n return await executeLocalTool(tu.name, tu.input as Record<string, unknown>, signal);\n } else if (isServerTool(tu.name)) {\n return await executeServerTool(tu.name, tu.input as Record<string, unknown>);\n } else {\n return { success: false, output: `Unknown tool: ${tu.name}` };\n }\n };\n\n if (toolTimeoutMs) {\n const effectiveTimeout = LONG_RUNNING_TOOLS.has(tu.name)\n ? Math.max(toolTimeoutMs, LONG_RUNNING_TOOL_TIMEOUT_MS)\n : toolTimeoutMs;\n result = await Promise.race([\n executeOne(),\n new Promise<ToolExecResult>((_, reject) =>\n setTimeout(\n () => reject(new Error(`Tool ${tu.name} timed out after ${effectiveTimeout / 1000}s`)),\n effectiveTimeout,\n ),\n ),\n ]);\n } else {\n result = await executeOne();\n }\n } catch (toolErr: any) {\n const msg = toolErr.message || String(toolErr);\n isTransient = /timed?\\s*out/i.test(msg) || /rate.?limit/i.test(msg) || /429/i.test(msg);\n result = { success: false, output: `Tool execution error: ${msg}` };\n }\n\n const toolDuration = Date.now() - toolStart;\n\n // If batch was aborted while executing, skip recording to avoid inflating\n // LoopDetector counts from a single bad parallel batch (TOCTOU race fix).\n if (!result.success && batch.aborted) {\n callbacks?.onToolEnd?.(tu.name, false, toolDuration);\n return {\n type: \"tool_result\",\n tool_use_id: tu.id,\n content: JSON.stringify({ error: \"Batch aborted — too many sibling tool calls failed. Re-assess your approach.\" }),\n };\n }\n\n loopDetector.recordResult(tu.name, result.success, tu.input as Record<string, unknown>, isTransient);\n\n // Track batch-level failures\n if (!result.success) {\n batch.errors++;\n if (batch.errors >= batchErrorLimit) {\n batch.aborted = true;\n }\n }\n\n callbacks?.onToolEnd?.(tu.name, result.success, toolDuration);\n\n if (!toolsUsed.includes(tu.name)) {\n toolsUsed.push(tu.name);\n }\n\n let contentStr = JSON.stringify(result.success ? result.output : { error: result.output });\n if (contentStr.length > maxToolResultChars) {\n contentStr =\n contentStr.slice(0, maxToolResultChars) +\n `\\n\\n... (truncated — ${contentStr.length.toLocaleString()} chars total)`;\n }\n return {\n type: \"tool_result\",\n tool_use_id: tu.id,\n content: contentStr,\n };\n }\n\n // Split into file-mutating (sequential) and everything else (parallel).\n // File writes/edits must be sequential to prevent race conditions on the same file.\n // run_command runs in parallel — like tool-dispatch.ts, bash calls can be concurrent\n // (tests, searches, etc.). The model decides ordering via tool_use blocks.\n const FILE_MUTATING_TOOLS = new Set([\"write_file\", \"edit_file\", \"multi_edit\", \"notebook_edit\"]);\n const sequential = toolBlocks.filter(tu => FILE_MUTATING_TOOLS.has(tu.name));\n const parallel = toolBlocks.filter(tu => !FILE_MUTATING_TOOLS.has(tu.name));\n\n // Run parallel tools (including run_command) with batch error abort\n if (parallel.length > 0) {\n const batchState: BatchState = { errors: 0, aborted: false };\n const parallelResults = await Promise.all(parallel.map(tu => executeSingle(tu, batchState)));\n toolResults.push(...parallelResults);\n }\n\n // Run file-mutating tools sequentially (batch state still used for consistency)\n const seqBatchState: BatchState = { errors: 0, aborted: false };\n for (const tu of sequential) {\n const result = await executeSingle(tu, seqBatchState);\n toolResults.push(result);\n }\n\n return { toolResults, toolsUsed, customSignals };\n}\n\n// ============================================================================\n// CONTENT BLOCK HELPERS\n// ============================================================================\n\n/** Extract text blocks from a response */\nexport function extractTextBlocks(content: AgentContentBlock[]): Anthropic.TextBlock[] {\n return content.filter((b): b is Anthropic.TextBlock => b.type === \"text\");\n}\n\n/** Extract tool use blocks from a response */\nexport function extractToolUseBlocks(content: AgentContentBlock[]): Anthropic.ToolUseBlock[] {\n return content.filter((b): b is Anthropic.ToolUseBlock => b.type === \"tool_use\");\n}\n\n/** Get combined text from all text blocks */\nexport function getResponseText(content: AgentContentBlock[]): string {\n return extractTextBlocks(content).map((b) => b.text).join(\"\\n\");\n}\n\n// ============================================================================\n// TOOL DEDUPLICATION — shared by subagent.ts and teammate.ts\n// ============================================================================\n\n/**\n * Deduplicate tools by name — local tools take priority over server tools.\n * Ensures the Anthropic API never receives duplicate tool names (400 error).\n */\nexport function deduplicateTools(tools: Anthropic.Tool[]): Anthropic.Tool[] {\n const seen = new Set<string>();\n const result: Anthropic.Tool[] = [];\n for (const tool of tools) {\n if (!seen.has(tool.name)) {\n seen.add(tool.name);\n result.push(tool);\n }\n }\n return result;\n}\n\n/**\n * Assert that all tool names are unique. Call right before sending to the API\n * to fail fast with a clear error instead of a cryptic Anthropic 400.\n */\nexport function assertUniqueToolNames(tools: Anthropic.Tool[]): void {\n const names = new Set<string>();\n for (const tool of tools) {\n if (names.has(tool.name)) {\n throw new Error(`Duplicate tool name \"${tool.name}\" — tools must have unique names before calling the Anthropic API`);\n }\n names.add(tool.name);\n }\n}\n\n// ============================================================================\n// YIELD HELPERS — prevent blocking the event loop during long agent loops\n// ============================================================================\n\n/** Yield to event loop to prevent blocking (microtask resolution) */\nexport function yieldToEventLoop(): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, 0));\n}\n\n/** Longer yield for UI-critical moments (before long API calls, ~1 frame at 60fps) */\nexport function yieldForRender(): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, 16));\n}\n"],"mappings":"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","ignoreList":[]}