whale-code 6.5.5 → 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 (847) 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 +5 -1
  73. package/dist/cli/services/agent-config.js +66 -36
  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 +976 -688
  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.js +187 -169
  107. package/dist/cli/services/error-logger.js.map +1 -0
  108. package/dist/cli/services/file-history.d.ts +1 -1
  109. package/dist/cli/services/file-history.js +50 -54
  110. package/dist/cli/services/file-history.js.map +1 -0
  111. package/dist/cli/services/format-server-response.js +332 -372
  112. package/dist/cli/services/format-server-response.js.map +1 -0
  113. package/dist/cli/services/git-context.js +61 -45
  114. package/dist/cli/services/git-context.js.map +1 -0
  115. package/dist/cli/services/hooks.d.ts +2 -2
  116. package/dist/cli/services/hooks.js +195 -180
  117. package/dist/cli/services/hooks.js.map +1 -0
  118. package/dist/cli/services/ink-incremental.d.ts +19 -0
  119. package/dist/cli/services/ink-incremental.js +59 -0
  120. package/dist/cli/services/ink-incremental.js.map +1 -0
  121. package/dist/cli/services/ink-resize-fix.js +54 -44
  122. package/dist/cli/services/ink-resize-fix.js.map +1 -0
  123. package/dist/cli/services/ink-sync-output.d.ts +12 -0
  124. package/dist/cli/services/ink-sync-output.js +16 -0
  125. package/dist/cli/services/ink-sync-output.js.map +1 -0
  126. package/dist/cli/services/interactive-tools.js +268 -212
  127. package/dist/cli/services/interactive-tools.js.map +1 -0
  128. package/dist/cli/services/keybinding-manager.d.ts +11 -1
  129. package/dist/cli/services/keybinding-manager.js +126 -63
  130. package/dist/cli/services/keybinding-manager.js.map +1 -0
  131. package/dist/cli/services/local-tools.d.ts +1 -1
  132. package/dist/cli/services/local-tools.js +939 -656
  133. package/dist/cli/services/local-tools.js.map +1 -0
  134. package/dist/cli/services/lsp-manager.js +757 -594
  135. package/dist/cli/services/lsp-manager.js.map +1 -0
  136. package/dist/cli/services/mcp-client.d.ts +1 -1
  137. package/dist/cli/services/mcp-client.js +173 -134
  138. package/dist/cli/services/mcp-client.js.map +1 -0
  139. package/dist/cli/services/memory-manager.js +53 -40
  140. package/dist/cli/services/memory-manager.js.map +1 -0
  141. package/dist/cli/services/model-manager.js +55 -40
  142. package/dist/cli/services/model-manager.js.map +1 -0
  143. package/dist/cli/services/model-router.js +115 -85
  144. package/dist/cli/services/model-router.js.map +1 -0
  145. package/dist/cli/services/paths.d.ts +30 -0
  146. package/dist/cli/services/paths.js +81 -0
  147. package/dist/cli/services/paths.js.map +1 -0
  148. package/dist/cli/services/permission-modes.js +32 -25
  149. package/dist/cli/services/permission-modes.js.map +1 -0
  150. package/dist/cli/services/rewind.js +182 -168
  151. package/dist/cli/services/rewind.js.map +1 -0
  152. package/dist/cli/services/ripgrep.js +115 -115
  153. package/dist/cli/services/ripgrep.js.map +1 -0
  154. package/dist/cli/services/sandbox.d.ts +1 -1
  155. package/dist/cli/services/sandbox.js +58 -37
  156. package/dist/cli/services/sandbox.js.map +1 -0
  157. package/dist/cli/services/server-tools.js +738 -565
  158. package/dist/cli/services/server-tools.js.map +1 -0
  159. package/dist/cli/services/session-persistence.js +69 -74
  160. package/dist/cli/services/session-persistence.js.map +1 -0
  161. package/dist/cli/services/subagent-worker.js +42 -27
  162. package/dist/cli/services/subagent-worker.js.map +1 -0
  163. package/dist/cli/services/subagent.d.ts +2 -0
  164. package/dist/cli/services/subagent.js +605 -433
  165. package/dist/cli/services/subagent.js.map +1 -0
  166. package/dist/cli/services/system-prompt.js +86 -78
  167. package/dist/cli/services/system-prompt.js.map +1 -0
  168. package/dist/cli/services/task-decomposer.d.ts +1 -1
  169. package/dist/cli/services/task-decomposer.js +172 -139
  170. package/dist/cli/services/task-decomposer.js.map +1 -0
  171. package/dist/cli/services/team-lead.d.ts +2 -2
  172. package/dist/cli/services/team-lead.js +727 -529
  173. package/dist/cli/services/team-lead.js.map +1 -0
  174. package/dist/cli/services/team-state.js +319 -319
  175. package/dist/cli/services/team-state.js.map +1 -0
  176. package/dist/cli/services/teammate.d.ts +8 -2
  177. package/dist/cli/services/teammate.js +857 -569
  178. package/dist/cli/services/teammate.js.map +1 -0
  179. package/dist/cli/services/telemetry.d.ts +6 -1
  180. package/dist/cli/services/telemetry.js +180 -157
  181. package/dist/cli/services/telemetry.js.map +1 -0
  182. package/dist/cli/services/tools/agent-tools.d.ts +3 -3
  183. package/dist/cli/services/tools/agent-tools.js +480 -322
  184. package/dist/cli/services/tools/agent-tools.js.map +1 -0
  185. package/dist/cli/services/tools/file-ops.js +563 -450
  186. package/dist/cli/services/tools/file-ops.js.map +1 -0
  187. package/dist/cli/services/tools/search-tools.js +231 -162
  188. package/dist/cli/services/tools/search-tools.js.map +1 -0
  189. package/dist/cli/services/tools/shell-exec.js +197 -151
  190. package/dist/cli/services/tools/shell-exec.js.map +1 -0
  191. package/dist/cli/services/tools/task-manager.js +206 -173
  192. package/dist/cli/services/tools/task-manager.js.map +1 -0
  193. package/dist/cli/services/tools/web-tools.js +388 -341
  194. package/dist/cli/services/tools/web-tools.js.map +1 -0
  195. package/dist/cli/setup/SetupApp.d.ts +2 -2
  196. package/dist/cli/setup/SetupApp.js +608 -160
  197. package/dist/cli/setup/SetupApp.js.map +1 -0
  198. package/dist/cli/shared/ErrorBoundary.d.ts +22 -0
  199. package/dist/cli/shared/ErrorBoundary.js +73 -0
  200. package/dist/cli/shared/ErrorBoundary.js.map +1 -0
  201. package/dist/cli/shared/MatrixIntro.js +66 -69
  202. package/dist/cli/shared/MatrixIntro.js.map +1 -0
  203. package/dist/cli/shared/SpinnerSlot.d.ts +14 -0
  204. package/dist/cli/shared/SpinnerSlot.js +63 -0
  205. package/dist/cli/shared/SpinnerSlot.js.map +1 -0
  206. package/dist/cli/shared/Theme.d.ts +1 -1
  207. package/dist/cli/shared/Theme.js +136 -92
  208. package/dist/cli/shared/Theme.js.map +1 -0
  209. package/dist/cli/shared/WhaleBanner.js +99 -11
  210. package/dist/cli/shared/WhaleBanner.js.map +1 -0
  211. package/dist/cli/shared/markdown.d.ts +3 -1
  212. package/dist/cli/shared/markdown.js +736 -674
  213. package/dist/cli/shared/markdown.js.map +1 -0
  214. package/dist/cli/shared/marked-terminal.d.js +2 -0
  215. package/dist/cli/shared/marked-terminal.d.js.map +1 -0
  216. package/dist/cli/shared/theme-manager.js +99 -90
  217. package/dist/cli/shared/theme-manager.js.map +1 -0
  218. package/dist/cli/shared/theme-presets.js +256 -254
  219. package/dist/cli/shared/theme-presets.js.map +1 -0
  220. package/dist/cli/status/StatusApp.js +235 -86
  221. package/dist/cli/status/StatusApp.js.map +1 -0
  222. package/dist/cli/stores/StoreApp.js +275 -65
  223. package/dist/cli/stores/StoreApp.js.map +1 -0
  224. package/dist/index.d.ts +2 -2
  225. package/dist/index.js +509 -396
  226. package/dist/index.js.map +1 -0
  227. package/dist/local-agent/connection.d.ts +2 -2
  228. package/dist/local-agent/connection.js +352 -293
  229. package/dist/local-agent/connection.js.map +1 -0
  230. package/dist/local-agent/discovery.js +259 -122
  231. package/dist/local-agent/discovery.js.map +1 -0
  232. package/dist/local-agent/executor.js +216 -193
  233. package/dist/local-agent/executor.js.map +1 -0
  234. package/dist/local-agent/index.d.ts +2 -2
  235. package/dist/local-agent/index.js +156 -156
  236. package/dist/local-agent/index.js.map +1 -0
  237. package/dist/node/adapters/base.js +18 -8
  238. package/dist/node/adapters/base.js.map +1 -0
  239. package/dist/node/adapters/discord.js +286 -275
  240. package/dist/node/adapters/discord.js.map +1 -0
  241. package/dist/node/adapters/email.js +189 -202
  242. package/dist/node/adapters/email.js.map +1 -0
  243. package/dist/node/adapters/imessage.js +145 -142
  244. package/dist/node/adapters/imessage.js.map +1 -0
  245. package/dist/node/adapters/slack.js +237 -236
  246. package/dist/node/adapters/slack.js.map +1 -0
  247. package/dist/node/adapters/sms.js +149 -151
  248. package/dist/node/adapters/sms.js.map +1 -0
  249. package/dist/node/adapters/telegram.js +88 -92
  250. package/dist/node/adapters/telegram.js.map +1 -0
  251. package/dist/node/adapters/webchat.js +160 -136
  252. package/dist/node/adapters/webchat.js.map +1 -0
  253. package/dist/node/adapters/whatsapp.js +212 -215
  254. package/dist/node/adapters/whatsapp.js.map +1 -0
  255. package/dist/node/cli.js +884 -653
  256. package/dist/node/cli.js.map +1 -0
  257. package/dist/node/config.js +20 -18
  258. package/dist/node/config.js.map +1 -0
  259. package/dist/node/gateway-client.js +191 -181
  260. package/dist/node/gateway-client.js.map +1 -0
  261. package/dist/node/portal/clipboard.js +161 -130
  262. package/dist/node/portal/clipboard.js.map +1 -0
  263. package/dist/node/portal/discovery.js +51 -45
  264. package/dist/node/portal/discovery.js.map +1 -0
  265. package/dist/node/portal/forward.js +64 -58
  266. package/dist/node/portal/forward.js.map +1 -0
  267. package/dist/node/portal/index.js +246 -221
  268. package/dist/node/portal/index.js.map +1 -0
  269. package/dist/node/portal/multiplexer.js +192 -182
  270. package/dist/node/portal/multiplexer.js.map +1 -0
  271. package/dist/node/portal/permissions.js +102 -70
  272. package/dist/node/portal/permissions.js.map +1 -0
  273. package/dist/node/portal/protocol.js +153 -116
  274. package/dist/node/portal/protocol.js.map +1 -0
  275. package/dist/node/portal/screen.js +80 -69
  276. package/dist/node/portal/screen.js.map +1 -0
  277. package/dist/node/portal/session.js +124 -117
  278. package/dist/node/portal/session.js.map +1 -0
  279. package/dist/node/portal/shell.js +140 -113
  280. package/dist/node/portal/shell.js.map +1 -0
  281. package/dist/node/portal/stream.js +77 -75
  282. package/dist/node/portal/stream.js.map +1 -0
  283. package/dist/node/portal/transfer.js +190 -167
  284. package/dist/node/portal/transfer.js.map +1 -0
  285. package/dist/node/portal/ui.js +124 -99
  286. package/dist/node/portal/ui.js.map +1 -0
  287. package/dist/node/remote-desktop/compile-helper.js +50 -45
  288. package/dist/node/remote-desktop/compile-helper.js.map +1 -0
  289. package/dist/node/remote-desktop/index.js +215 -187
  290. package/dist/node/remote-desktop/index.js.map +1 -0
  291. package/dist/node/remote-desktop/protocol.js +45 -29
  292. package/dist/node/remote-desktop/protocol.js.map +1 -0
  293. package/dist/node/runtime.js +493 -410
  294. package/dist/node/runtime.js.map +1 -0
  295. package/dist/server/handlers/__test-utils__/test-db.js +39 -89
  296. package/dist/server/handlers/__test-utils__/test-db.js.map +1 -0
  297. package/dist/server/handlers/analytics.js +467 -261
  298. package/dist/server/handlers/analytics.js.map +1 -0
  299. package/dist/server/handlers/api-docs.js +1030 -895
  300. package/dist/server/handlers/api-docs.js.map +1 -0
  301. package/dist/server/handlers/api-keys.js +291 -242
  302. package/dist/server/handlers/api-keys.js.map +1 -0
  303. package/dist/server/handlers/billing.js +330 -239
  304. package/dist/server/handlers/billing.js.map +1 -0
  305. package/dist/server/handlers/browser.js +468 -395
  306. package/dist/server/handlers/browser.js.map +1 -0
  307. package/dist/server/handlers/catalog.js +1377 -978
  308. package/dist/server/handlers/catalog.js.map +1 -0
  309. package/dist/server/handlers/clickhouse.js +157 -109
  310. package/dist/server/handlers/clickhouse.js.map +1 -0
  311. package/dist/server/handlers/comms.js +1439 -984
  312. package/dist/server/handlers/comms.js.map +1 -0
  313. package/dist/server/handlers/creations.js +461 -394
  314. package/dist/server/handlers/creations.js.map +1 -0
  315. package/dist/server/handlers/crm.js +1082 -791
  316. package/dist/server/handlers/crm.js.map +1 -0
  317. package/dist/server/handlers/discovery.js +251 -232
  318. package/dist/server/handlers/discovery.js.map +1 -0
  319. package/dist/server/handlers/embeddings.js +241 -164
  320. package/dist/server/handlers/embeddings.js.map +1 -0
  321. package/dist/server/handlers/enrichment.js +887 -718
  322. package/dist/server/handlers/enrichment.js.map +1 -0
  323. package/dist/server/handlers/image-gen.js +467 -376
  324. package/dist/server/handlers/image-gen.js.map +1 -0
  325. package/dist/server/handlers/inventory.js +797 -424
  326. package/dist/server/handlers/inventory.js.map +1 -0
  327. package/dist/server/handlers/kali.js +272 -230
  328. package/dist/server/handlers/kali.js.map +1 -0
  329. package/dist/server/handlers/llm-providers.js +803 -580
  330. package/dist/server/handlers/llm-providers.js.map +1 -0
  331. package/dist/server/handlers/local-agent.js +133 -105
  332. package/dist/server/handlers/local-agent.js.map +1 -0
  333. package/dist/server/handlers/media.js +1179 -857
  334. package/dist/server/handlers/media.js.map +1 -0
  335. package/dist/server/handlers/meta-ads.js +2669 -2093
  336. package/dist/server/handlers/meta-ads.js.map +1 -0
  337. package/dist/server/handlers/nodes.js +1321 -913
  338. package/dist/server/handlers/nodes.js.map +1 -0
  339. package/dist/server/handlers/operations.js +183 -157
  340. package/dist/server/handlers/operations.js.map +1 -0
  341. package/dist/server/handlers/platform.js +346 -210
  342. package/dist/server/handlers/platform.js.map +1 -0
  343. package/dist/server/handlers/remove-bg.js +118 -86
  344. package/dist/server/handlers/remove-bg.js.map +1 -0
  345. package/dist/server/handlers/storefront.js +586 -446
  346. package/dist/server/handlers/storefront.js.map +1 -0
  347. package/dist/server/handlers/supply-chain.js +546 -326
  348. package/dist/server/handlers/supply-chain.js.map +1 -0
  349. package/dist/server/handlers/transcription.js +106 -97
  350. package/dist/server/handlers/transcription.js.map +1 -0
  351. package/dist/server/handlers/video-gen.js +593 -424
  352. package/dist/server/handlers/video-gen.js.map +1 -0
  353. package/dist/server/handlers/voice.js +1458 -1039
  354. package/dist/server/handlers/voice.js.map +1 -0
  355. package/dist/server/handlers/workflow-steps.js +2837 -2116
  356. package/dist/server/handlers/workflow-steps.js.map +1 -0
  357. package/dist/server/handlers/workflows.js +1630 -933
  358. package/dist/server/handlers/workflows.js.map +1 -0
  359. package/dist/server/index.js +3167 -2422
  360. package/dist/server/index.js.map +1 -0
  361. package/dist/server/lib/batch-client.js +471 -409
  362. package/dist/server/lib/batch-client.js.map +1 -0
  363. package/dist/server/lib/clickhouse-buffer.js +118 -104
  364. package/dist/server/lib/clickhouse-buffer.js.map +1 -0
  365. package/dist/server/lib/clickhouse-client.js +107 -107
  366. package/dist/server/lib/clickhouse-client.js.map +1 -0
  367. package/dist/server/lib/coa-renderer.js +1786 -356
  368. package/dist/server/lib/coa-renderer.js.map +1 -0
  369. package/dist/server/lib/code-worker-pool.js +227 -177
  370. package/dist/server/lib/code-worker-pool.js.map +1 -0
  371. package/dist/server/lib/code-worker.js +174 -164
  372. package/dist/server/lib/code-worker.js.map +1 -0
  373. package/dist/server/lib/compaction-service.d.ts +2 -12
  374. package/dist/server/lib/compaction-service.js +74 -184
  375. package/dist/server/lib/compaction-service.js.map +1 -0
  376. package/dist/server/lib/logger.js +36 -24
  377. package/dist/server/lib/logger.js.map +1 -0
  378. package/dist/server/lib/otel.js +101 -80
  379. package/dist/server/lib/otel.js.map +1 -0
  380. package/dist/server/lib/pdf-renderer.js +952 -788
  381. package/dist/server/lib/pdf-renderer.js.map +1 -0
  382. package/dist/server/lib/prompt-sanitizer.js +188 -108
  383. package/dist/server/lib/prompt-sanitizer.js.map +1 -0
  384. package/dist/server/lib/provider-capabilities.js +136 -138
  385. package/dist/server/lib/provider-capabilities.js.map +1 -0
  386. package/dist/server/lib/provider-failover.js +190 -168
  387. package/dist/server/lib/provider-failover.js.map +1 -0
  388. package/dist/server/lib/rate-limiter.js +186 -117
  389. package/dist/server/lib/rate-limiter.js.map +1 -0
  390. package/dist/server/lib/react-pdf-layout.js +551 -382
  391. package/dist/server/lib/react-pdf-layout.js.map +1 -0
  392. package/dist/server/lib/server-agent-loop.d.ts +4 -1
  393. package/dist/server/lib/server-agent-loop.js +906 -634
  394. package/dist/server/lib/server-agent-loop.js.map +1 -0
  395. package/dist/server/lib/server-subagent.js +260 -164
  396. package/dist/server/lib/server-subagent.js.map +1 -0
  397. package/dist/server/lib/session-checkpoint.js +105 -96
  398. package/dist/server/lib/session-checkpoint.js.map +1 -0
  399. package/dist/server/lib/ssrf-guard.js +193 -184
  400. package/dist/server/lib/ssrf-guard.js.map +1 -0
  401. package/dist/server/lib/supabase-client.js +94 -82
  402. package/dist/server/lib/supabase-client.js.map +1 -0
  403. package/dist/server/lib/template-resolver.js +154 -176
  404. package/dist/server/lib/template-resolver.js.map +1 -0
  405. package/dist/server/lib/utils.js +242 -133
  406. package/dist/server/lib/utils.js.map +1 -0
  407. package/dist/server/local-agent-gateway.d.ts +2 -2
  408. package/dist/server/local-agent-gateway.js +785 -627
  409. package/dist/server/local-agent-gateway.js.map +1 -0
  410. package/dist/server/providers/anthropic.js +250 -172
  411. package/dist/server/providers/anthropic.js.map +1 -0
  412. package/dist/server/providers/bedrock.js +217 -158
  413. package/dist/server/providers/bedrock.js.map +1 -0
  414. package/dist/server/providers/gemini.js +548 -418
  415. package/dist/server/providers/gemini.js.map +1 -0
  416. package/dist/server/providers/openai.js +571 -437
  417. package/dist/server/providers/openai.js.map +1 -0
  418. package/dist/server/providers/registry.js +23 -18
  419. package/dist/server/providers/registry.js.map +1 -0
  420. package/dist/server/providers/shared.js +123 -95
  421. package/dist/server/providers/shared.js.map +1 -0
  422. package/dist/server/providers/types.js +1 -11
  423. package/dist/server/providers/types.js.map +1 -0
  424. package/dist/server/proxy-handlers.js +209 -165
  425. package/dist/server/proxy-handlers.js.map +1 -0
  426. package/dist/server/tool-router.js +959 -599
  427. package/dist/server/tool-router.js.map +1 -0
  428. package/dist/server/validation.js +248 -188
  429. package/dist/server/validation.js.map +1 -0
  430. package/dist/server/worker.js +202 -133
  431. package/dist/server/worker.js.map +1 -0
  432. package/dist/setup.d.ts +2 -2
  433. package/dist/setup.js +151 -147
  434. package/dist/setup.js.map +1 -0
  435. package/dist/shared/agent-core.d.ts +115 -26
  436. package/dist/shared/agent-core.js +956 -522
  437. package/dist/shared/agent-core.js.map +1 -0
  438. package/dist/shared/anthropic-types.js +1 -6
  439. package/dist/shared/anthropic-types.js.map +1 -0
  440. package/dist/shared/api-client.d.ts +16 -9
  441. package/dist/shared/api-client.js +419 -327
  442. package/dist/shared/api-client.js.map +1 -0
  443. package/dist/shared/compaction.d.ts +36 -0
  444. package/dist/shared/compaction.js +138 -0
  445. package/dist/shared/compaction.js.map +1 -0
  446. package/dist/shared/constants.js +67 -64
  447. package/dist/shared/constants.js.map +1 -0
  448. package/dist/shared/sse-parser.js +221 -219
  449. package/dist/shared/sse-parser.js.map +1 -0
  450. package/dist/shared/tool-dispatch.d.ts +4 -0
  451. package/dist/shared/tool-dispatch.js +226 -165
  452. package/dist/shared/tool-dispatch.js.map +1 -0
  453. package/dist/shared/types.js +1 -6
  454. package/dist/shared/types.js.map +1 -0
  455. package/dist/types/cli-highlight.d.js +2 -0
  456. package/dist/types/cli-highlight.d.js.map +1 -0
  457. package/dist/types/diff.d.js +2 -0
  458. package/dist/types/diff.d.js.map +1 -0
  459. package/dist/types/pdf-parse.d.js +2 -0
  460. package/dist/types/pdf-parse.d.js.map +1 -0
  461. package/dist/updater.d.ts +1 -1
  462. package/dist/updater.js +118 -92
  463. package/dist/updater.js.map +1 -0
  464. package/dist/webchat/widget.js +227 -380
  465. package/dist/webchat/widget.js.map +1 -0
  466. package/package.json +22 -10
  467. package/vendor/ink/build/ansi-tokenizer.d.ts +38 -0
  468. package/vendor/ink/build/ansi-tokenizer.js +316 -0
  469. package/vendor/ink/build/ansi-tokenizer.js.map +1 -0
  470. package/vendor/ink/build/apply-styles.js +175 -0
  471. package/vendor/ink/build/build-layout.js +77 -0
  472. package/vendor/ink/build/calculate-wrapped-text.js +53 -0
  473. package/vendor/ink/build/colorize.d.ts +3 -0
  474. package/vendor/ink/build/colorize.js +48 -0
  475. package/vendor/ink/build/colorize.js.map +1 -0
  476. package/vendor/ink/build/components/AccessibilityContext.d.ts +3 -0
  477. package/vendor/ink/build/components/AccessibilityContext.js +5 -0
  478. package/vendor/ink/build/components/AccessibilityContext.js.map +1 -0
  479. package/vendor/ink/build/components/App.d.ts +18 -0
  480. package/vendor/ink/build/components/App.js +351 -0
  481. package/vendor/ink/build/components/App.js.map +1 -0
  482. package/vendor/ink/build/components/AppContext.d.ts +15 -0
  483. package/vendor/ink/build/components/AppContext.js +11 -0
  484. package/vendor/ink/build/components/AppContext.js.map +1 -0
  485. package/vendor/ink/build/components/BackgroundContext.d.ts +4 -0
  486. package/vendor/ink/build/components/BackgroundContext.js +3 -0
  487. package/vendor/ink/build/components/BackgroundContext.js.map +1 -0
  488. package/vendor/ink/build/components/Box.d.ts +117 -0
  489. package/vendor/ink/build/components/Box.js +34 -0
  490. package/vendor/ink/build/components/Box.js.map +1 -0
  491. package/vendor/ink/build/components/Color.js +62 -0
  492. package/vendor/ink/build/components/Cursor.d.ts +83 -0
  493. package/vendor/ink/build/components/Cursor.js +53 -0
  494. package/vendor/ink/build/components/Cursor.js.map +1 -0
  495. package/vendor/ink/build/components/CursorContext.d.ts +11 -0
  496. package/vendor/ink/build/components/CursorContext.js +8 -0
  497. package/vendor/ink/build/components/CursorContext.js.map +1 -0
  498. package/vendor/ink/build/components/ErrorBoundary.d.ts +18 -0
  499. package/vendor/ink/build/components/ErrorBoundary.js +23 -0
  500. package/vendor/ink/build/components/ErrorBoundary.js.map +1 -0
  501. package/vendor/ink/build/components/ErrorOverview.d.ts +6 -0
  502. package/vendor/ink/build/components/ErrorOverview.js +84 -0
  503. package/vendor/ink/build/components/ErrorOverview.js.map +1 -0
  504. package/vendor/ink/build/components/FocusContext.d.ts +16 -0
  505. package/vendor/ink/build/components/FocusContext.js +17 -0
  506. package/vendor/ink/build/components/FocusContext.js.map +1 -0
  507. package/vendor/ink/build/components/Newline.d.ts +13 -0
  508. package/vendor/ink/build/components/Newline.js +8 -0
  509. package/vendor/ink/build/components/Newline.js.map +1 -0
  510. package/vendor/ink/build/components/Spacer.d.ts +7 -0
  511. package/vendor/ink/build/components/Spacer.js +11 -0
  512. package/vendor/ink/build/components/Spacer.js.map +1 -0
  513. package/vendor/ink/build/components/Static.d.ts +24 -0
  514. package/vendor/ink/build/components/Static.js +28 -0
  515. package/vendor/ink/build/components/Static.js.map +1 -0
  516. package/vendor/ink/build/components/StderrContext.d.ts +15 -0
  517. package/vendor/ink/build/components/StderrContext.js +13 -0
  518. package/vendor/ink/build/components/StderrContext.js.map +1 -0
  519. package/vendor/ink/build/components/StdinContext.d.ts +22 -0
  520. package/vendor/ink/build/components/StdinContext.js +19 -0
  521. package/vendor/ink/build/components/StdinContext.js.map +1 -0
  522. package/vendor/ink/build/components/StdoutContext.d.ts +15 -0
  523. package/vendor/ink/build/components/StdoutContext.js +13 -0
  524. package/vendor/ink/build/components/StdoutContext.js.map +1 -0
  525. package/vendor/ink/build/components/Text.d.ts +55 -0
  526. package/vendor/ink/build/components/Text.js +50 -0
  527. package/vendor/ink/build/components/Text.js.map +1 -0
  528. package/vendor/ink/build/components/Transform.d.ts +16 -0
  529. package/vendor/ink/build/components/Transform.js +15 -0
  530. package/vendor/ink/build/components/Transform.js.map +1 -0
  531. package/vendor/ink/build/cursor-helpers.d.ts +38 -0
  532. package/vendor/ink/build/cursor-helpers.js +56 -0
  533. package/vendor/ink/build/cursor-helpers.js.map +1 -0
  534. package/vendor/ink/build/devtools-window-polyfill.d.ts +1 -0
  535. package/vendor/ink/build/devtools-window-polyfill.js +65 -0
  536. package/vendor/ink/build/devtools-window-polyfill.js.map +1 -0
  537. package/vendor/ink/build/devtools.d.ts +1 -0
  538. package/vendor/ink/build/devtools.js +11 -0
  539. package/vendor/ink/build/devtools.js.map +1 -0
  540. package/vendor/ink/build/dom.d.ts +56 -0
  541. package/vendor/ink/build/dom.js +124 -0
  542. package/vendor/ink/build/dom.js.map +1 -0
  543. package/vendor/ink/build/experimental/apply-style.js +140 -0
  544. package/vendor/ink/build/experimental/dom.js +123 -0
  545. package/vendor/ink/build/experimental/output.js +91 -0
  546. package/vendor/ink/build/experimental/reconciler.js +141 -0
  547. package/vendor/ink/build/experimental/renderer.js +81 -0
  548. package/vendor/ink/build/get-max-width.d.ts +3 -0
  549. package/vendor/ink/build/get-max-width.js +10 -0
  550. package/vendor/ink/build/get-max-width.js.map +1 -0
  551. package/vendor/ink/build/hooks/use-app.d.ts +5 -0
  552. package/vendor/ink/build/hooks/use-app.js +8 -0
  553. package/vendor/ink/build/hooks/use-app.js.map +1 -0
  554. package/vendor/ink/build/hooks/use-cursor.d.ts +12 -0
  555. package/vendor/ink/build/hooks/use-cursor.js +29 -0
  556. package/vendor/ink/build/hooks/use-cursor.js.map +1 -0
  557. package/vendor/ink/build/hooks/use-focus-manager.d.ts +28 -0
  558. package/vendor/ink/build/hooks/use-focus-manager.js +17 -0
  559. package/vendor/ink/build/hooks/use-focus-manager.js.map +1 -0
  560. package/vendor/ink/build/hooks/use-focus.d.ts +29 -0
  561. package/vendor/ink/build/hooks/use-focus.js +42 -0
  562. package/vendor/ink/build/hooks/use-focus.js.map +1 -0
  563. package/vendor/ink/build/hooks/use-input.d.ts +131 -0
  564. package/vendor/ink/build/hooks/use-input.js +124 -0
  565. package/vendor/ink/build/hooks/use-input.js.map +1 -0
  566. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.d.ts +5 -0
  567. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js +11 -0
  568. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
  569. package/vendor/ink/build/hooks/use-stderr.d.ts +5 -0
  570. package/vendor/ink/build/hooks/use-stderr.js +8 -0
  571. package/vendor/ink/build/hooks/use-stderr.js.map +1 -0
  572. package/vendor/ink/build/hooks/use-stdin.d.ts +5 -0
  573. package/vendor/ink/build/hooks/use-stdin.js +8 -0
  574. package/vendor/ink/build/hooks/use-stdin.js.map +1 -0
  575. package/vendor/ink/build/hooks/use-stdout.d.ts +5 -0
  576. package/vendor/ink/build/hooks/use-stdout.js +8 -0
  577. package/vendor/ink/build/hooks/use-stdout.js.map +1 -0
  578. package/vendor/ink/build/hooks/useInput.js +38 -0
  579. package/vendor/ink/build/index.d.ts +34 -0
  580. package/vendor/ink/build/index.js +20 -0
  581. package/vendor/ink/build/index.js.map +1 -0
  582. package/vendor/ink/build/ink.d.ts +90 -0
  583. package/vendor/ink/build/ink.js +654 -0
  584. package/vendor/ink/build/ink.js.map +1 -0
  585. package/vendor/ink/build/input-parser.d.ts +7 -0
  586. package/vendor/ink/build/input-parser.js +154 -0
  587. package/vendor/ink/build/input-parser.js.map +1 -0
  588. package/vendor/ink/build/instance.js +205 -0
  589. package/vendor/ink/build/instances.d.ts +3 -0
  590. package/vendor/ink/build/instances.js +8 -0
  591. package/vendor/ink/build/instances.js.map +1 -0
  592. package/vendor/ink/build/kitty-keyboard.d.ts +23 -0
  593. package/vendor/ink/build/kitty-keyboard.js +32 -0
  594. package/vendor/ink/build/kitty-keyboard.js.map +1 -0
  595. package/vendor/ink/build/layout.d.ts +7 -0
  596. package/vendor/ink/build/layout.js +33 -0
  597. package/vendor/ink/build/layout.js.map +1 -0
  598. package/vendor/ink/build/log-update.d.ts +19 -0
  599. package/vendor/ink/build/log-update.js +243 -0
  600. package/vendor/ink/build/log-update.js.map +1 -0
  601. package/vendor/ink/build/measure-element.d.ts +16 -0
  602. package/vendor/ink/build/measure-element.js +9 -0
  603. package/vendor/ink/build/measure-element.js.map +1 -0
  604. package/vendor/ink/build/measure-text.d.ts +6 -0
  605. package/vendor/ink/build/measure-text.js +21 -0
  606. package/vendor/ink/build/measure-text.js.map +1 -0
  607. package/vendor/ink/build/options.d.ts +52 -0
  608. package/vendor/ink/build/options.js +2 -0
  609. package/vendor/ink/build/options.js.map +1 -0
  610. package/vendor/ink/build/output.d.ts +35 -0
  611. package/vendor/ink/build/output.js +183 -0
  612. package/vendor/ink/build/output.js.map +1 -0
  613. package/vendor/ink/build/parse-keypress.d.ts +22 -0
  614. package/vendor/ink/build/parse-keypress.js +493 -0
  615. package/vendor/ink/build/parse-keypress.js.map +1 -0
  616. package/vendor/ink/build/reconciler.d.ts +4 -0
  617. package/vendor/ink/build/reconciler.js +274 -0
  618. package/vendor/ink/build/reconciler.js.map +1 -0
  619. package/vendor/ink/build/render-background.d.ts +4 -0
  620. package/vendor/ink/build/render-background.js +25 -0
  621. package/vendor/ink/build/render-background.js.map +1 -0
  622. package/vendor/ink/build/render-border.d.ts +4 -0
  623. package/vendor/ink/build/render-border.js +73 -0
  624. package/vendor/ink/build/render-border.js.map +1 -0
  625. package/vendor/ink/build/render-node-to-output.d.ts +14 -0
  626. package/vendor/ink/build/render-node-to-output.js +147 -0
  627. package/vendor/ink/build/render-node-to-output.js.map +1 -0
  628. package/vendor/ink/build/render-to-string.d.ts +38 -0
  629. package/vendor/ink/build/render-to-string.js +115 -0
  630. package/vendor/ink/build/render-to-string.js.map +1 -0
  631. package/vendor/ink/build/render.d.ts +121 -0
  632. package/vendor/ink/build/render.js +55 -0
  633. package/vendor/ink/build/render.js.map +1 -0
  634. package/vendor/ink/build/renderer.d.ts +8 -0
  635. package/vendor/ink/build/renderer.js +55 -0
  636. package/vendor/ink/build/renderer.js.map +1 -0
  637. package/vendor/ink/build/sanitize-ansi.d.ts +2 -0
  638. package/vendor/ink/build/sanitize-ansi.js +27 -0
  639. package/vendor/ink/build/sanitize-ansi.js.map +1 -0
  640. package/vendor/ink/build/screen-reader-update.d.ts +13 -0
  641. package/vendor/ink/build/screen-reader-update.js +38 -0
  642. package/vendor/ink/build/screen-reader-update.js.map +1 -0
  643. package/vendor/ink/build/squash-text-nodes.d.ts +3 -0
  644. package/vendor/ink/build/squash-text-nodes.js +36 -0
  645. package/vendor/ink/build/squash-text-nodes.js.map +1 -0
  646. package/vendor/ink/build/styles.d.ts +240 -0
  647. package/vendor/ink/build/styles.js +232 -0
  648. package/vendor/ink/build/styles.js.map +1 -0
  649. package/vendor/ink/build/utils.d.ts +2 -0
  650. package/vendor/ink/build/utils.js +4 -0
  651. package/vendor/ink/build/utils.js.map +1 -0
  652. package/vendor/ink/build/wrap-text.d.ts +3 -0
  653. package/vendor/ink/build/wrap-text.js +31 -0
  654. package/vendor/ink/build/wrap-text.js.map +1 -0
  655. package/vendor/ink/build/write-synchronized.d.ts +4 -0
  656. package/vendor/ink/build/write-synchronized.js +7 -0
  657. package/vendor/ink/build/write-synchronized.js.map +1 -0
  658. package/vendor/ink/license +10 -0
  659. package/vendor/ink/node_modules/@types/node/LICENSE +21 -0
  660. package/vendor/ink/node_modules/@types/node/README.md +15 -0
  661. package/vendor/ink/node_modules/@types/node/assert/strict.d.ts +105 -0
  662. package/vendor/ink/node_modules/@types/node/assert.d.ts +955 -0
  663. package/vendor/ink/node_modules/@types/node/async_hooks.d.ts +623 -0
  664. package/vendor/ink/node_modules/@types/node/buffer.buffer.d.ts +466 -0
  665. package/vendor/ink/node_modules/@types/node/buffer.d.ts +1810 -0
  666. package/vendor/ink/node_modules/@types/node/child_process.d.ts +1428 -0
  667. package/vendor/ink/node_modules/@types/node/cluster.d.ts +486 -0
  668. package/vendor/ink/node_modules/@types/node/compatibility/iterators.d.ts +21 -0
  669. package/vendor/ink/node_modules/@types/node/console.d.ts +151 -0
  670. package/vendor/ink/node_modules/@types/node/constants.d.ts +20 -0
  671. package/vendor/ink/node_modules/@types/node/crypto.d.ts +4065 -0
  672. package/vendor/ink/node_modules/@types/node/dgram.d.ts +564 -0
  673. package/vendor/ink/node_modules/@types/node/diagnostics_channel.d.ts +576 -0
  674. package/vendor/ink/node_modules/@types/node/dns/promises.d.ts +503 -0
  675. package/vendor/ink/node_modules/@types/node/dns.d.ts +922 -0
  676. package/vendor/ink/node_modules/@types/node/domain.d.ts +166 -0
  677. package/vendor/ink/node_modules/@types/node/events.d.ts +1054 -0
  678. package/vendor/ink/node_modules/@types/node/fs/promises.d.ts +1329 -0
  679. package/vendor/ink/node_modules/@types/node/fs.d.ts +4676 -0
  680. package/vendor/ink/node_modules/@types/node/globals.d.ts +150 -0
  681. package/vendor/ink/node_modules/@types/node/globals.typedarray.d.ts +101 -0
  682. package/vendor/ink/node_modules/@types/node/http.d.ts +2167 -0
  683. package/vendor/ink/node_modules/@types/node/http2.d.ts +2480 -0
  684. package/vendor/ink/node_modules/@types/node/https.d.ts +405 -0
  685. package/vendor/ink/node_modules/@types/node/index.d.ts +115 -0
  686. package/vendor/ink/node_modules/@types/node/inspector/promises.d.ts +41 -0
  687. package/vendor/ink/node_modules/@types/node/inspector.d.ts +224 -0
  688. package/vendor/ink/node_modules/@types/node/inspector.generated.d.ts +4226 -0
  689. package/vendor/ink/node_modules/@types/node/module.d.ts +819 -0
  690. package/vendor/ink/node_modules/@types/node/net.d.ts +933 -0
  691. package/vendor/ink/node_modules/@types/node/os.d.ts +507 -0
  692. package/vendor/ink/node_modules/@types/node/package.json +155 -0
  693. package/vendor/ink/node_modules/@types/node/path/posix.d.ts +8 -0
  694. package/vendor/ink/node_modules/@types/node/path/win32.d.ts +8 -0
  695. package/vendor/ink/node_modules/@types/node/path.d.ts +187 -0
  696. package/vendor/ink/node_modules/@types/node/perf_hooks.d.ts +643 -0
  697. package/vendor/ink/node_modules/@types/node/process.d.ts +2156 -0
  698. package/vendor/ink/node_modules/@types/node/punycode.d.ts +117 -0
  699. package/vendor/ink/node_modules/@types/node/querystring.d.ts +152 -0
  700. package/vendor/ink/node_modules/@types/node/quic.d.ts +910 -0
  701. package/vendor/ink/node_modules/@types/node/readline/promises.d.ts +161 -0
  702. package/vendor/ink/node_modules/@types/node/readline.d.ts +541 -0
  703. package/vendor/ink/node_modules/@types/node/repl.d.ts +415 -0
  704. package/vendor/ink/node_modules/@types/node/sea.d.ts +162 -0
  705. package/vendor/ink/node_modules/@types/node/sqlite.d.ts +955 -0
  706. package/vendor/ink/node_modules/@types/node/stream/consumers.d.ts +38 -0
  707. package/vendor/ink/node_modules/@types/node/stream/promises.d.ts +211 -0
  708. package/vendor/ink/node_modules/@types/node/stream/web.d.ts +296 -0
  709. package/vendor/ink/node_modules/@types/node/stream.d.ts +1760 -0
  710. package/vendor/ink/node_modules/@types/node/string_decoder.d.ts +67 -0
  711. package/vendor/ink/node_modules/@types/node/test/reporters.d.ts +96 -0
  712. package/vendor/ink/node_modules/@types/node/test.d.ts +2240 -0
  713. package/vendor/ink/node_modules/@types/node/timers/promises.d.ts +108 -0
  714. package/vendor/ink/node_modules/@types/node/timers.d.ts +159 -0
  715. package/vendor/ink/node_modules/@types/node/tls.d.ts +1198 -0
  716. package/vendor/ink/node_modules/@types/node/trace_events.d.ts +197 -0
  717. package/vendor/ink/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +462 -0
  718. package/vendor/ink/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +71 -0
  719. package/vendor/ink/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +36 -0
  720. package/vendor/ink/node_modules/@types/node/ts5.6/index.d.ts +117 -0
  721. package/vendor/ink/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +72 -0
  722. package/vendor/ink/node_modules/@types/node/ts5.7/index.d.ts +117 -0
  723. package/vendor/ink/node_modules/@types/node/tty.d.ts +250 -0
  724. package/vendor/ink/node_modules/@types/node/url.d.ts +519 -0
  725. package/vendor/ink/node_modules/@types/node/util/types.d.ts +558 -0
  726. package/vendor/ink/node_modules/@types/node/util.d.ts +1662 -0
  727. package/vendor/ink/node_modules/@types/node/v8.d.ts +983 -0
  728. package/vendor/ink/node_modules/@types/node/vm.d.ts +1208 -0
  729. package/vendor/ink/node_modules/@types/node/wasi.d.ts +202 -0
  730. package/vendor/ink/node_modules/@types/node/web-globals/abortcontroller.d.ts +59 -0
  731. package/vendor/ink/node_modules/@types/node/web-globals/blob.d.ts +23 -0
  732. package/vendor/ink/node_modules/@types/node/web-globals/console.d.ts +9 -0
  733. package/vendor/ink/node_modules/@types/node/web-globals/crypto.d.ts +39 -0
  734. package/vendor/ink/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  735. package/vendor/ink/node_modules/@types/node/web-globals/encoding.d.ts +11 -0
  736. package/vendor/ink/node_modules/@types/node/web-globals/events.d.ts +106 -0
  737. package/vendor/ink/node_modules/@types/node/web-globals/fetch.d.ts +69 -0
  738. package/vendor/ink/node_modules/@types/node/web-globals/importmeta.d.ts +13 -0
  739. package/vendor/ink/node_modules/@types/node/web-globals/messaging.d.ts +23 -0
  740. package/vendor/ink/node_modules/@types/node/web-globals/navigator.d.ts +25 -0
  741. package/vendor/ink/node_modules/@types/node/web-globals/performance.d.ts +45 -0
  742. package/vendor/ink/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  743. package/vendor/ink/node_modules/@types/node/web-globals/streams.d.ts +115 -0
  744. package/vendor/ink/node_modules/@types/node/web-globals/timers.d.ts +44 -0
  745. package/vendor/ink/node_modules/@types/node/web-globals/url.d.ts +24 -0
  746. package/vendor/ink/node_modules/@types/node/worker_threads.d.ts +717 -0
  747. package/vendor/ink/node_modules/@types/node/zlib.d.ts +618 -0
  748. package/vendor/ink/node_modules/node-pty/LICENSE +69 -0
  749. package/vendor/ink/node_modules/node-pty/README.md +164 -0
  750. package/vendor/ink/node_modules/node-pty/binding.gyp +150 -0
  751. package/vendor/ink/node_modules/node-pty/lib/conpty_console_list_agent.js +25 -0
  752. package/vendor/ink/node_modules/node-pty/lib/eventEmitter2.js +47 -0
  753. package/vendor/ink/node_modules/node-pty/lib/index.js +52 -0
  754. package/vendor/ink/node_modules/node-pty/lib/interfaces.js +7 -0
  755. package/vendor/ink/node_modules/node-pty/lib/shared/conout.js +11 -0
  756. package/vendor/ink/node_modules/node-pty/lib/terminal.js +190 -0
  757. package/vendor/ink/node_modules/node-pty/lib/types.js +7 -0
  758. package/vendor/ink/node_modules/node-pty/lib/unixTerminal.js +349 -0
  759. package/vendor/ink/node_modules/node-pty/lib/utils.js +39 -0
  760. package/vendor/ink/node_modules/node-pty/lib/windowsConoutConnection.js +125 -0
  761. package/vendor/ink/node_modules/node-pty/lib/windowsPtyAgent.js +287 -0
  762. package/vendor/ink/node_modules/node-pty/lib/windowsTerminal.js +201 -0
  763. package/vendor/ink/node_modules/node-pty/lib/worker/conoutSocketWorker.js +22 -0
  764. package/vendor/ink/node_modules/node-pty/package.json +65 -0
  765. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/pty.node +0 -0
  766. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/spawn-helper +0 -0
  767. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/pty.node +0 -0
  768. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/spawn-helper +0 -0
  769. package/vendor/ink/node_modules/node-pty/prebuilds/linux-arm64/pty.node +0 -0
  770. package/vendor/ink/node_modules/node-pty/prebuilds/linux-x64/pty.node +0 -0
  771. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
  772. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
  773. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
  774. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.pdb +0 -0
  775. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
  776. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.pdb +0 -0
  777. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
  778. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
  779. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.node +0 -0
  780. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.pdb +0 -0
  781. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
  782. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.pdb +0 -0
  783. package/vendor/ink/node_modules/node-pty/scripts/post-install.js +76 -0
  784. package/vendor/ink/node_modules/node-pty/scripts/prebuild.js +34 -0
  785. package/vendor/ink/node_modules/node-pty/src/unix/pty.cc +875 -0
  786. package/vendor/ink/node_modules/node-pty/src/unix/spawn-helper.cc +23 -0
  787. package/vendor/ink/node_modules/node-pty/src/win/conpty.cc +582 -0
  788. package/vendor/ink/node_modules/node-pty/src/win/conpty.h +41 -0
  789. package/vendor/ink/node_modules/node-pty/src/win/conpty_console_list.cc +44 -0
  790. package/vendor/ink/node_modules/node-pty/src/win/path_util.cc +95 -0
  791. package/vendor/ink/node_modules/node-pty/src/win/path_util.h +26 -0
  792. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/OpenConsole.exe +0 -0
  793. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/conpty.dll +0 -0
  794. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/OpenConsole.exe +0 -0
  795. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/conpty.dll +0 -0
  796. package/vendor/ink/node_modules/node-pty/typings/node-pty.d.ts +215 -0
  797. package/vendor/ink/node_modules/undici-types/LICENSE +21 -0
  798. package/vendor/ink/node_modules/undici-types/README.md +6 -0
  799. package/vendor/ink/node_modules/undici-types/agent.d.ts +32 -0
  800. package/vendor/ink/node_modules/undici-types/api.d.ts +43 -0
  801. package/vendor/ink/node_modules/undici-types/balanced-pool.d.ts +30 -0
  802. package/vendor/ink/node_modules/undici-types/cache-interceptor.d.ts +173 -0
  803. package/vendor/ink/node_modules/undici-types/cache.d.ts +36 -0
  804. package/vendor/ink/node_modules/undici-types/client-stats.d.ts +15 -0
  805. package/vendor/ink/node_modules/undici-types/client.d.ts +108 -0
  806. package/vendor/ink/node_modules/undici-types/connector.d.ts +34 -0
  807. package/vendor/ink/node_modules/undici-types/content-type.d.ts +21 -0
  808. package/vendor/ink/node_modules/undici-types/cookies.d.ts +30 -0
  809. package/vendor/ink/node_modules/undici-types/diagnostics-channel.d.ts +74 -0
  810. package/vendor/ink/node_modules/undici-types/dispatcher.d.ts +276 -0
  811. package/vendor/ink/node_modules/undici-types/env-http-proxy-agent.d.ts +22 -0
  812. package/vendor/ink/node_modules/undici-types/errors.d.ts +161 -0
  813. package/vendor/ink/node_modules/undici-types/eventsource.d.ts +66 -0
  814. package/vendor/ink/node_modules/undici-types/fetch.d.ts +211 -0
  815. package/vendor/ink/node_modules/undici-types/formdata.d.ts +108 -0
  816. package/vendor/ink/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  817. package/vendor/ink/node_modules/undici-types/global-origin.d.ts +7 -0
  818. package/vendor/ink/node_modules/undici-types/h2c-client.d.ts +73 -0
  819. package/vendor/ink/node_modules/undici-types/handlers.d.ts +15 -0
  820. package/vendor/ink/node_modules/undici-types/header.d.ts +160 -0
  821. package/vendor/ink/node_modules/undici-types/index.d.ts +88 -0
  822. package/vendor/ink/node_modules/undici-types/interceptors.d.ts +73 -0
  823. package/vendor/ink/node_modules/undici-types/mock-agent.d.ts +68 -0
  824. package/vendor/ink/node_modules/undici-types/mock-call-history.d.ts +111 -0
  825. package/vendor/ink/node_modules/undici-types/mock-client.d.ts +27 -0
  826. package/vendor/ink/node_modules/undici-types/mock-errors.d.ts +12 -0
  827. package/vendor/ink/node_modules/undici-types/mock-interceptor.d.ts +94 -0
  828. package/vendor/ink/node_modules/undici-types/mock-pool.d.ts +27 -0
  829. package/vendor/ink/node_modules/undici-types/package.json +55 -0
  830. package/vendor/ink/node_modules/undici-types/patch.d.ts +29 -0
  831. package/vendor/ink/node_modules/undici-types/pool-stats.d.ts +19 -0
  832. package/vendor/ink/node_modules/undici-types/pool.d.ts +41 -0
  833. package/vendor/ink/node_modules/undici-types/proxy-agent.d.ts +29 -0
  834. package/vendor/ink/node_modules/undici-types/readable.d.ts +68 -0
  835. package/vendor/ink/node_modules/undici-types/retry-agent.d.ts +8 -0
  836. package/vendor/ink/node_modules/undici-types/retry-handler.d.ts +125 -0
  837. package/vendor/ink/node_modules/undici-types/round-robin-pool.d.ts +41 -0
  838. package/vendor/ink/node_modules/undici-types/snapshot-agent.d.ts +109 -0
  839. package/vendor/ink/node_modules/undici-types/util.d.ts +18 -0
  840. package/vendor/ink/node_modules/undici-types/utility.d.ts +7 -0
  841. package/vendor/ink/node_modules/undici-types/webidl.d.ts +341 -0
  842. package/vendor/ink/node_modules/undici-types/websocket.d.ts +186 -0
  843. package/vendor/ink/package.json +201 -0
  844. package/vendor/ink/readme.md +2636 -0
  845. package/bin/swag-agent.js +0 -9
  846. package/dist/server/lib/pg-rate-limiter.d.ts +0 -21
  847. 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":[]}