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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent.js","names":["readFileSync","existsSync","writeFileSync","mkdirSync","appendFileSync","join","homedir","tmpdir","LOCAL_TOOL_DEFINITIONS","LoopDetector","estimateCostUsd","demoteSubagentModel","AGENT_DEFAULTS","resolveAgentLoopConfig","preCompact","loadCLIAgentConfig","MODEL_MAP","loadServerToolDefinitions","logSpan","generateSpanId","generateTraceId","PKG_VERSION","loadClaudeMd","getGlobalEmitter","getAgentDefinition","callAgentAPI","executeToolBlocks","extractTextBlocks","extractToolUseBlocks","getResponseText","yieldToEventLoop","yieldForRender","deduplicateTools","assertUniqueToolNames","AGENTS_DIR","buildAgentPrompt","type","cwd","cwdContext","custom","prompt","prompts","explore","plan","research","ensureAgentsDir","recursive","saveAgentState","state","path","id","JSON","stringify","loadAgentState","agentId","parse","generateAgentId","Date","now","Math","random","toString","slice","getToolsForAgent","tools","length","getFilteredTools","allowedNames","Set","localTools","filter","t","has","name","map","description","input_schema","serverTools","allowedServerTools","push","getAgentIcon","icons","getAgentColor","colors","emitSubagentProgress","agentType","message","turn","toolName","emitter","runSubagent","options","subagent_type","model","resume","max_turns","parentContext","parentTraceContext","taskContext","signal","process","systemPrompt","startTime","customDef","effectiveModelAlias","modelId","dbAgent","resolved","dbMaxTurns","subagentMaxTurns","dbMaxTokens","max_tokens","subagentMaxTokens","rawMaxTurns","max","effectiveMaxTurns","Number","MAX_SAFE_INTEGER","maxToolResultChars","maxRetries","subagentMaxRetries","maxContinuations","subagentMaxContinuations","descMatch","match","shortDescription","emitSubagentStart","messages","toolsUsed","createdAt","toISOString","updatedAt","loopDetector","fromResolved","fullSystemPrompt","claudeMd","content","role","totalIn","totalOut","totalCacheRead","totalCacheCreate","finalText","subagentSpanId","turnCtx","source","serviceName","serviceVersion","agentName","traceId","spanId","parentSpanId","conversationId","turnNumber","userId","userEmail","traceFlags","aborted","emitSubagentDone","input","output","success","tokensUsed","apiStart","response","lastError","attempt","contextProfile","thinkingEnabled","maxOutputTokens","cacheLastTool","abortSignal","err","status","Promise","r","setTimeout","pow","apiDuration","usage","input_tokens","output_tokens","cache_read_tokens","cache_creation_tokens","apiCostUsd","action","durationMs","context","inputTokens","outputTokens","cacheReadTokens","cacheCreationTokens","totalCost","details","agent_id","agent_type","stop_reason","is_subagent_api","textBlocks","toolBlocks","compactionBlock","find","b","compactionCount","text","continuations","contCount","contText","toolNames","toolResults","turnToolsUsed","callbacks","onToolStart","emitSubagentToolStart","onToolEnd","emitSubagentToolEnd","tu","error","undefined","tool_type","tool_input","is_subagent_tool","iteration","tn","includes","turnsRemaining","nudgeThreshold","ceil","editTools","hasEdited","some","compactedMessages","stripThinking","subagentTotalCost","getTime","turns","tools_used","tool_count","is_subagent","parent_trace_id","parent_span_id","display_name","charAt","toUpperCase","display_icon","display_color","summary","prompt_preview","runSubagentBackground","outputFile","bgModule","registerBackgroundAgent","then","result","m","markAgentDone","catch","TASK_TOOL_DEFINITION","properties","enum","required"],"sources":["../../../src/cli/services/subagent.ts"],"sourcesContent":["/**\n * Subagent System — Claude Code-style Task tool for spawning specialized agents\n *\n * Subagents run in isolated context, enabling:\n * - Parallel exploration without polluting main context\n * - Specialized prompts per agent type\n * - Cost optimization (Haiku for simple tasks)\n * - Resume capability for long-running tasks\n */\n\nimport type Anthropic from \"@anthropic-ai/sdk\";\nimport { readFileSync, existsSync, writeFileSync, mkdirSync, appendFileSync } from \"fs\";\nimport { join } from \"path\";\nimport { homedir, tmpdir } from \"os\";\nimport {\n LOCAL_TOOL_DEFINITIONS,\n} from \"./local-tools.js\";\nimport { LoopDetector, estimateCostUsd, demoteSubagentModel, AGENT_DEFAULTS, resolveAgentLoopConfig } from \"../../shared/agent-core.js\";\nimport { preCompact } from \"../../shared/compaction.js\";\nimport { loadCLIAgentConfig } from \"./agent-config.js\";\nimport { MODEL_MAP } from \"../../shared/constants.js\";\nimport {\n loadServerToolDefinitions,\n} from \"./server-tools.js\";\nimport { logSpan, generateSpanId, generateTraceId, PKG_VERSION } from \"./telemetry.js\";\nimport { loadClaudeMd } from \"./agent-loop.js\";\nimport { getGlobalEmitter } from \"./agent-events.js\";\nimport { getAgentDefinition } from \"./agent-definitions.js\";\nimport {\n callAgentAPI,\n executeToolBlocks,\n extractTextBlocks,\n extractToolUseBlocks,\n getResponseText,\n yieldToEventLoop,\n yieldForRender,\n deduplicateTools,\n assertUniqueToolNames,\n} from \"./agent-worker-base.js\";\nimport type { AgentAPIResponse } from \"./agent-worker-base.js\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport type BuiltinSubagentType =\n | \"explore\" // Fast codebase exploration\n | \"plan\" // Planning complex implementations\n | \"general-purpose\" // Multi-step autonomous tasks\n | \"research\"; // Documentation lookups, web research\n\n// Accepts built-in types + custom agent names from .whale/agents/\nexport type SubagentType = BuiltinSubagentType | (string & {});\n\nexport interface ParentTraceContext {\n traceId: string; // 32 hex chars - inherited from parent\n spanId: string; // 16 hex chars - becomes our parentSpanId\n conversationId?: string;\n turnNumber: number; // Required - subagent inherits parent turn number\n userId?: string;\n userEmail?: string;\n}\n\nexport interface SubagentOptions {\n prompt: string;\n subagent_type: SubagentType;\n model?: \"sonnet\" | \"opus\" | \"haiku\";\n resume?: string; // Agent ID to resume from\n run_in_background?: boolean; // Write output to file, return immediately\n max_turns?: number; // Override default MAX_TURNS (clamped 1-50)\n name?: string; // Display name for agent\n parentContext?: string; // Summary of parent conversation for context\n parentTraceContext?: ParentTraceContext; // W3C trace context for hierarchical spans\n taskContext?: string; // Context about other parallel agents to avoid work duplication\n signal?: AbortSignal; // AbortSignal for cancellation (ESC)\n}\n\nexport interface SubagentResult {\n success: boolean;\n output: string;\n agentId: string;\n tokensUsed: { input: number; output: number };\n toolsUsed: string[];\n}\n\ninterface AgentState {\n id: string;\n type: SubagentType;\n model: string;\n messages: Anthropic.MessageParam[];\n toolsUsed: string[];\n continuations?: number; // max_tokens continuation count (capped by DB config)\n compactionCount?: number; // server-side compaction count\n createdAt: string;\n updatedAt: string;\n}\n\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n\nconst AGENTS_DIR = join(homedir(), \".whale\", \"agents\");\n\n// No hard cap on subagent turns — agent self-regulates via end_turn (Claude Code parity).\n// DB config (subagent_max_turns) controls the default. Callers can override via max_turns param.\n\n// ============================================================================\n// AGENT PROMPTS — specialized per type\n// ============================================================================\n\n// Build agent prompt with working directory context\nfunction buildAgentPrompt(type: SubagentType | string, cwd: string): string {\n const cwdContext = `\n## Working Directory\nYou are working in: ${cwd}\nAll file paths should be relative to or absolute from this directory.\nIMPORTANT: Focus ONLY on files within this directory. Do not get confused by other projects.\n`;\n\n // Check for custom agent definition first\n const custom = getAgentDefinition(type);\n if (custom) return custom.prompt + cwdContext;\n\n const prompts: Record<SubagentType, string> = {\n explore: `You are an exploration agent. Your ONLY job is to quickly find specific information in the codebase, then STOP.\n\nTools available:\n- glob: Find files by pattern (e.g., \"**/*.ts\")\n- grep: Search file contents with regex\n- read_file: Read file contents\n- list_directory: List directory contents\n${cwdContext}\n## STOP CONDITIONS — You MUST stop when ANY of these are met:\n1. You found the specific information requested\n2. You've searched 3+ patterns without finding anything new\n3. You've read the key files that answer the question\n4. You've exhausted reasonable search patterns\n\n## Guidelines:\n- Call multiple tools per turn — batch glob + grep + read_file in a single response\n- Read only the necessary files to answer the question\n- DO NOT continue exploring after you have the answer\n- DO NOT read files that aren't directly relevant\n\n## Output Format:\nReturn a concise summary with:\n- File paths and line numbers for relevant code\n- Key code snippets (brief)\n- Direct answer to the question asked\n\nIMPORTANT: Complete in 2-4 turns. If you haven't found it by turn 4, summarize what you found and STOP.`,\n\n plan: `You are a planning agent. Your ONLY job is to analyze the codebase and create an implementation plan, then STOP.\n\nTools available:\n- glob: Find files by pattern\n- grep: Search file contents\n- read_file: Read file contents\n- list_directory: List directory contents\n${cwdContext}\n## STOP CONDITIONS — You MUST stop when:\n1. You've identified the files that need changes\n2. You've understood the existing patterns/architecture\n3. You've created a concrete plan with specific steps\n\n## Guidelines:\n- FIRST: Quick search to find relevant files\n- Read only files needed to understand the architecture\n- DO NOT read every file — focus on entry points and key modules\n- Create the plan as soon as you understand the structure\n\n## Output Format — Return EXACTLY this structure:\n### Summary\n[1-2 sentences on the approach]\n\n### Files to Modify\n- path/to/file.ts: [what changes]\n\n### Implementation Steps\n1. [Specific step]\n2. [Specific step]\n\n### Risks\n- [Any considerations]\n\nIMPORTANT: Complete in 3-5 turns. If you haven't finished by turn 5, output your best plan and STOP.`,\n\n \"general-purpose\": `You are an autonomous agent for discrete tasks. Complete the task, then STOP.\n\nTools available:\n- File operations: read_file, write_file, edit_file, glob, grep\n- Shell: run_command\n- Search: search_files, search_content\n- Web: web_fetch\n${cwdContext}\n## STOP CONDITIONS — You MUST stop when:\n1. The specific task is complete\n2. You've verified the changes work (if applicable)\n3. You encounter a blocker you cannot resolve\n\n## Guidelines:\n- Understand what exists before making changes\n- Make targeted changes — don't over-engineer\n- Verify your changes if possible (run tests, check syntax)\n- If blocked, explain the blocker and STOP\n\n## Output Format:\n### What I Did\n[Brief summary of actions taken]\n\n### Files Modified\n- path/to/file.ts: [change description]\n\n### Verification\n[How you verified it works, or N/A]\n\n### Issues (if any)\n[Any problems encountered]\n\nIMPORTANT: This is a discrete task. Complete it in 4-6 turns maximum. Do not loop.`,\n\n research: `You are a research agent. Find the specific information requested, then STOP.\n\nTools available:\n- web_fetch: Fetch and parse web content\n- web_search: Search the web\n- read_file: Read local files\n- grep: Search local file contents\n${cwdContext}\n## STOP CONDITIONS — You MUST stop when:\n1. You found the answer to the question\n2. You've checked 2-3 authoritative sources\n3. You've gathered enough information to answer\n\n## Guidelines:\n- Search for official documentation first\n- Check 2-3 sources, not 10\n- DO NOT keep searching after you have the answer\n- Summarize findings immediately when you have enough\n\n## Output Format:\n### Answer\n[Direct answer to the question]\n\n### Key Points\n- [Important detail 1]\n- [Important detail 2]\n\n### Sources\n- [URL 1]: [what it says]\n- [URL 2]: [what it says]\n\n### Caveats\n[Any version requirements or limitations]\n\nIMPORTANT: Complete in 2-4 turns. Stop as soon as you have a good answer.`,\n };\n\n return prompts[type] || prompts[\"general-purpose\"];\n}\n\n// ============================================================================\n// AGENT STATE PERSISTENCE\n// ============================================================================\n\nfunction ensureAgentsDir(): void {\n if (!existsSync(AGENTS_DIR)) mkdirSync(AGENTS_DIR, { recursive: true });\n}\n\nfunction saveAgentState(state: AgentState): void {\n ensureAgentsDir();\n const path = join(AGENTS_DIR, `${state.id}.json`);\n writeFileSync(path, JSON.stringify(state, null, 2), \"utf-8\");\n}\n\nfunction loadAgentState(agentId: string): AgentState | null {\n const path = join(AGENTS_DIR, `${agentId}.json`);\n if (!existsSync(path)) return null;\n try {\n return JSON.parse(readFileSync(path, \"utf-8\"));\n } catch {\n return null;\n }\n}\n\nfunction generateAgentId(): string {\n return `agent-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n}\n\n// ============================================================================\n// TOOL FILTERING — restrict tools per agent type\n// ============================================================================\n\nfunction getToolsForAgent(type: SubagentType | string): string[] {\n // Check for custom agent definition with explicit tools\n const custom = getAgentDefinition(type);\n if (custom?.tools && custom.tools.length > 0) return custom.tools;\n\n switch (type) {\n case \"explore\":\n return [\"glob\", \"grep\", \"read_file\", \"list_directory\", \"search_files\", \"search_content\"];\n case \"plan\":\n return [\"glob\", \"grep\", \"read_file\", \"list_directory\", \"search_files\", \"search_content\"];\n case \"research\":\n return [\"web_fetch\", \"web_search\", \"read_file\", \"grep\", \"glob\"];\n case \"general-purpose\":\n // All tools EXCEPT delegation — \"Subagents cannot spawn other subagents\" (Claude Code parity)\n return [\n \"read_file\", \"write_file\", \"edit_file\", \"list_directory\",\n \"search_files\", \"search_content\", \"run_command\",\n \"glob\", \"grep\", \"notebook_edit\", \"web_fetch\",\n ];\n default:\n return [\"read_file\", \"glob\", \"grep\"];\n }\n}\n\nasync function getFilteredTools(type: SubagentType): Promise<Anthropic.Tool[]> {\n const allowedNames = new Set(getToolsForAgent(type));\n\n // Local tools\n const localTools: Anthropic.Tool[] = LOCAL_TOOL_DEFINITIONS\n .filter((t) => allowedNames.has(t.name))\n .map((t) => ({\n name: t.name,\n description: t.description,\n input_schema: t.input_schema as Anthropic.Tool[\"input_schema\"],\n }));\n\n // Add server tools if available, filtering by allowed names\n try {\n const serverTools = await loadServerToolDefinitions();\n const allowedServerTools = serverTools.filter(t => allowedNames.has(t.name));\n localTools.push(...allowedServerTools);\n } catch { /* server tools unavailable */ }\n\n // Deduplicate: local tools take priority over server tools with same name\n return deduplicateTools(localTools);\n}\n\n// ============================================================================\n// DISPLAY HELPERS — icons and colors for trace visualization\n// ============================================================================\n\nfunction getAgentIcon(type: SubagentType): string {\n const icons: Record<SubagentType, string> = {\n explore: \"🔍\", // Magnifying glass for exploration\n plan: \"📋\", // Clipboard for planning\n \"general-purpose\": \"🤖\", // Robot for autonomous work\n research: \"📚\", // Books for research\n };\n return icons[type] || \"⚙️\";\n}\n\nfunction getAgentColor(type: SubagentType): string {\n const colors: Record<SubagentType, string> = {\n explore: \"#3B82F6\", // Blue for exploration\n plan: \"#8B5CF6\", // Purple for planning\n \"general-purpose\": \"#10B981\", // Green for general work\n research: \"#F59E0B\", // Amber for research\n };\n return colors[type] || \"#6B7280\";\n}\n\n// ============================================================================\n// SUBAGENT EXECUTION\n// ============================================================================\n\n// Progress emitter — uses event system instead of stderr to avoid UI conflicts\n// The global emitter batches and routes these to ChatApp without causing re-renders\n// NOTE: No module-level mutable state — agentId/turn passed through function params for parallel safety\n\nfunction emitSubagentProgress(agentType: SubagentType, agentId: string, message: string, turn?: number, toolName?: string): void {\n const emitter = getGlobalEmitter();\n emitter.emitSubagentProgress(agentId, agentType, message, turn, toolName);\n}\n\nexport async function runSubagent(options: SubagentOptions): Promise<SubagentResult> {\n const { prompt, subagent_type, model, resume, max_turns, name, parentContext, parentTraceContext, taskContext, signal } = options;\n\n const agentId = resume || generateAgentId();\n const cwd = process.cwd();\n const systemPrompt = buildAgentPrompt(subagent_type, cwd);\n const startTime = Date.now();\n\n // Check for custom agent definition with per-agent config\n const customDef = getAgentDefinition(subagent_type);\n\n // Model resolution: caller override → agent definition → demotion logic → haiku\n const effectiveModelAlias = model || customDef?.model || demoteSubagentModel(model, subagent_type);\n const modelId = MODEL_MAP[effectiveModelAlias] || MODEL_MAP[\"haiku\"];\n\n // Resolve all config from DB → AGENT_DEFAULTS fallback (single source of truth)\n const dbAgent = await loadCLIAgentConfig();\n const resolved = dbAgent ? resolveAgentLoopConfig(dbAgent, \"sse\") : null;\n const dbMaxTurns = resolved?.subagentMaxTurns ?? AGENT_DEFAULTS.subagentMaxTurns;\n const dbMaxTokens = customDef?.max_tokens ?? resolved?.subagentMaxTokens ?? AGENT_DEFAULTS.subagentMaxTokens;\n // 0 = no limit (agent self-regulates via end_turn, Claude Code parity)\n // Safety: LoopDetector + cost budget + stall detection are the real guards.\n const rawMaxTurns = max_turns ? Math.max(1, max_turns) : dbMaxTurns;\n const effectiveMaxTurns = rawMaxTurns === 0 ? Number.MAX_SAFE_INTEGER : rawMaxTurns;\n const maxToolResultChars = resolved?.maxToolResultChars ?? AGENT_DEFAULTS.maxToolResultChars;\n const maxRetries = resolved?.subagentMaxRetries ?? AGENT_DEFAULTS.subagentMaxRetries;\n const maxContinuations = resolved?.subagentMaxContinuations ?? AGENT_DEFAULTS.subagentMaxContinuations;\n\n // Extract short description from prompt (first sentence or 60 chars)\n const descMatch = prompt.match(/^[^.!?\\n]+/);\n const shortDescription = name || (descMatch\n ? descMatch[0].slice(0, 60) + (descMatch[0].length > 60 ? \"…\" : \"\")\n : prompt.slice(0, 60) + (prompt.length > 60 ? \"…\" : \"\"));\n\n // Emit subagent start event\n const emitter = getGlobalEmitter();\n emitter.emitSubagentStart(agentId, subagent_type, model || \"inherited\", shortDescription);\n\n // Load or create agent state\n let state = resume ? loadAgentState(resume) : null;\n if (!state) {\n state = {\n id: agentId,\n type: subagent_type,\n model: modelId,\n messages: [],\n toolsUsed: [],\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString(),\n };\n }\n\n const loopDetector = resolved\n ? LoopDetector.fromResolved(resolved)\n : new LoopDetector();\n\n // Get filtered tools for this agent type (deduped)\n const tools = await getFilteredTools(subagent_type);\n assertUniqueToolNames(tools);\n\n // Build full system prompt with optional parent context and task dedup context\n let fullSystemPrompt = systemPrompt;\n if (parentContext) {\n fullSystemPrompt += `\\n\\n## Parent Conversation Context\\n${parentContext}`;\n }\n if (taskContext) {\n fullSystemPrompt += `\\n\\n## Other Agents\\n${taskContext}\\nDo NOT duplicate research or work that other agents are handling. Focus only on your assigned task.`;\n }\n\n // Add CLAUDE.md if available\n const claudeMd = loadClaudeMd();\n if (claudeMd) {\n fullSystemPrompt += `\\n\\n## Project Instructions\\n${claudeMd.content}`;\n }\n\n // Add user prompt to messages\n state.messages.push({ role: \"user\", content: prompt });\n\n let totalIn = 0;\n let totalOut = 0;\n let totalCacheRead = 0;\n let totalCacheCreate = 0;\n let finalText = \"\";\n\n // Create subagent span context — inherit parent's trace context for hierarchy\n // IMPORTANT: Don't increment global turn number — subagent is part of parent turn\n const subagentSpanId = generateSpanId();\n const turnCtx = {\n source: \"claude_code\" as const,\n serviceName: \"whale-cli\",\n serviceVersion: PKG_VERSION,\n model: modelId,\n agentId,\n agentName: name || `subagent-${subagent_type}`,\n // Inherit parent's trace to keep hierarchy intact\n traceId: parentTraceContext?.traceId || generateTraceId(),\n spanId: subagentSpanId,\n parentSpanId: parentTraceContext?.spanId, // Parent's spanId becomes our parentSpanId\n conversationId: parentTraceContext?.conversationId,\n turnNumber: parentTraceContext?.turnNumber, // Inherit parent turn, don't increment\n userId: parentTraceContext?.userId,\n userEmail: parentTraceContext?.userEmail,\n traceFlags: 1,\n };\n\n try {\n for (let turn = 0; turn < effectiveMaxTurns; turn++) {\n // Check for cancellation at start of each turn\n if (signal?.aborted) {\n emitSubagentProgress(subagent_type, agentId, \"cancelled\", turn + 1);\n emitter.emitSubagentDone(agentId, subagent_type, false, \"Cancelled\", { input: totalIn, output: totalOut }, state.toolsUsed, Date.now() - startTime);\n return { success: false, output: \"Cancelled\", agentId, tokensUsed: { input: totalIn, output: totalOut }, toolsUsed: state.toolsUsed };\n }\n\n // Emit progress and yield before API call to keep UI responsive\n emitSubagentProgress(subagent_type, agentId, `turn ${turn + 1}: calling API...`, turn + 1);\n await yieldForRender(); // Give Ink time to render the progress update\n\n // Adaptive thinking enabled — model decides when to think (Claude Code parity).\n // Opus 4.6 uses adaptive thinking by default; no separate enable/disable needed.\n const apiStart = Date.now();\n let response!: AgentAPIResponse;\n let lastError: Error | null = null;\n for (let attempt = 0; attempt < maxRetries; attempt++) {\n try {\n response = await callAgentAPI({\n modelId,\n contextProfile: \"subagent\",\n systemPrompt: fullSystemPrompt,\n messages: state.messages,\n tools,\n thinkingEnabled: true,\n maxOutputTokens: dbMaxTokens,\n cacheLastTool: true,\n abortSignal: signal,\n });\n lastError = null;\n break;\n } catch (err: any) {\n lastError = err;\n if (attempt < maxRetries - 1 && (err.status === 429 || err.status === 500 || err.status === 529)) {\n await new Promise(r => setTimeout(r, 1000 * Math.pow(2, attempt)));\n continue;\n }\n throw err;\n }\n }\n if (lastError) throw lastError;\n const apiDuration = Date.now() - apiStart;\n\n // Yield after API call\n await yieldToEventLoop();\n\n totalIn += response.usage.input_tokens;\n totalOut += response.usage.output_tokens;\n totalCacheRead += response.usage.cache_read_tokens;\n totalCacheCreate += response.usage.cache_creation_tokens;\n\n // Log API call as child span — include cache tokens for accurate cost\n const apiCostUsd = estimateCostUsd(\n response.usage.input_tokens,\n response.usage.output_tokens,\n modelId,\n 0, // thinkingTokens (disabled for subagents)\n response.usage.cache_read_tokens,\n response.usage.cache_creation_tokens,\n );\n logSpan({\n action: \"claude_api_request\",\n durationMs: apiDuration,\n context: {\n ...turnCtx,\n spanId: generateSpanId(), // New span for this API call\n parentSpanId: turnCtx.spanId, // Parent is the subagent\n inputTokens: response.usage.input_tokens,\n outputTokens: response.usage.output_tokens,\n cacheReadTokens: response.usage.cache_read_tokens,\n cacheCreationTokens: response.usage.cache_creation_tokens,\n totalCost: apiCostUsd,\n model: modelId,\n },\n details: {\n \"gen_ai.request.model\": modelId,\n \"gen_ai.usage.input_tokens\": response.usage.input_tokens,\n \"gen_ai.usage.output_tokens\": response.usage.output_tokens,\n \"gen_ai.usage.cache_read_tokens\": response.usage.cache_read_tokens,\n \"gen_ai.usage.cache_creation_tokens\": response.usage.cache_creation_tokens,\n \"gen_ai.usage.cost\": apiCostUsd,\n agent_id: agentId,\n agent_type: subagent_type,\n turn: turn + 1,\n stop_reason: response.stop_reason,\n is_subagent_api: true,\n },\n });\n\n // Yield to event loop to keep UI responsive\n await yieldToEventLoop();\n\n // Extract text and tool use using shared helpers\n const textBlocks = extractTextBlocks(response.content);\n const toolBlocks = extractToolUseBlocks(response.content);\n\n if (textBlocks.length) {\n finalText = getResponseText(response.content);\n }\n\n // Compaction handling — API paused after generating summary.\n // Per Anthropic docs: just use the compaction block, don't preserve old messages.\n if (response.stop_reason === \"compaction\") {\n const compactionBlock = response.content.find((b: any) => b.type === \"compaction\") as any;\n if (compactionBlock) {\n state.compactionCount = (state.compactionCount ?? 0) + 1;\n state.messages = [\n { role: \"assistant\", content: [{ type: \"compaction\", content: compactionBlock.content }] },\n { role: \"user\", content: [{ type: \"text\", text: \"Continue with your task.\" }] },\n ] as any;\n turn--; // Don't count compaction as a turn\n continue;\n }\n }\n\n // No tool calls — check stop reason\n if (toolBlocks.length === 0 || response.stop_reason === \"end_turn\") {\n // max_tokens: response was truncated mid-generation — give the model a chance to finish\n // Cap at 2 continuations to prevent infinite loops on very large outputs\n if (response.stop_reason === \"max_tokens\" && (state.continuations ?? 0) < maxContinuations) {\n state.continuations = (state.continuations ?? 0) + 1;\n state.messages.push({\n role: \"assistant\",\n content: response.content,\n });\n const contCount = state.continuations ?? 1;\n const contText = contCount === 1\n ? \"[Your response was truncated due to the output token limit. If writing a large file, split into multiple smaller write_file calls (~200 lines each). Continue concisely.]\"\n : `[Truncated again (${contCount}/${maxContinuations}). You MUST reduce output size — use multiple small write_file calls, not one large one.]`;\n state.messages.push({\n role: \"user\",\n content: [{ type: \"text\", text: contText }],\n });\n continue;\n }\n emitSubagentProgress(subagent_type, agentId, `done (${turn + 1} turn${turn > 0 ? \"s\" : \"\"})`, turn + 1);\n break;\n }\n\n // Emit tool usage progress\n const toolNames = toolBlocks.map(b => b.name).join(\", \");\n emitSubagentProgress(subagent_type, agentId, `using: ${toolNames}`, turn + 1);\n\n // Execute tools using shared executeToolBlocks\n const { toolResults, toolsUsed: turnToolsUsed } = await executeToolBlocks({\n toolBlocks,\n loopDetector,\n signal,\n callbacks: {\n onToolStart: (toolName, input) => {\n emitSubagentProgress(subagent_type, agentId, `running ${toolName}`, turn + 1, toolName);\n emitter.emitSubagentToolStart(agentId, toolName, input);\n },\n onToolEnd: (toolName, success, durationMs) => {\n emitter.emitSubagentToolEnd(agentId, toolName, success, durationMs);\n\n // Log tool call as child span of the subagent\n const tu = toolBlocks.find(b => b.name === toolName);\n logSpan({\n action: `tool.${toolName}`,\n durationMs,\n context: {\n ...turnCtx,\n spanId: generateSpanId(),\n parentSpanId: turnCtx.spanId,\n },\n error: success ? undefined : \"(see tool result)\",\n details: {\n tool_type: \"subagent_tool\",\n tool_input: tu?.input,\n agent_id: agentId,\n agent_type: subagent_type,\n is_subagent_tool: true,\n iteration: turn,\n },\n });\n },\n },\n });\n\n // Track tool usage\n for (const tn of turnToolsUsed) {\n if (!state.toolsUsed.includes(tn)) {\n state.toolsUsed.push(tn);\n }\n }\n\n // Append assistant response + tool results\n state.messages.push({\n role: \"assistant\",\n content: response.content,\n });\n state.messages.push({\n role: \"user\",\n content: toolResults,\n });\n\n // Progress nudge: when approaching turn limit without any edits, warn the agent\n const turnsRemaining = effectiveMaxTurns - turn - 1;\n const nudgeThreshold = Math.ceil(effectiveMaxTurns * 0.25); // Last 25% of turns\n if (turnsRemaining === nudgeThreshold && turnsRemaining > 0) {\n const editTools = [\"write_file\", \"edit_file\", \"create_file\", \"notebook_edit\"];\n const hasEdited = state.toolsUsed.some(t => editTools.includes(t));\n if (!hasEdited) {\n state.messages.push({\n role: \"user\",\n content: [{\n type: \"text\",\n text: `⚠️ TURN LIMIT WARNING: You have ${turnsRemaining} turns remaining out of ${effectiveMaxTurns} and have NOT made any file edits yet. Stop exploring and start producing your output NOW. If you need to write or edit files, do it immediately. Prioritize delivering results over gathering more information.`,\n }],\n });\n }\n }\n\n // Pre-compact: trim large tool results and thinking blocks to prevent context bloat.\n // Without this, context grows unbounded (4K→28K→73K tokens per turn).\n const { messages: compactedMessages } = preCompact(\n state.messages,\n { maxToolResultChars, stripThinking: true },\n );\n state.messages = compactedMessages;\n\n // Yield to event loop after tool execution\n await yieldToEventLoop();\n }\n\n // Save state for potential resume\n state.updatedAt = new Date().toISOString();\n saveAgentState(state);\n\n // Log single subagent span with all metadata for trace visualization\n const subagentTotalCost = estimateCostUsd(totalIn, totalOut, modelId, 0, totalCacheRead, totalCacheCreate);\n logSpan({\n action: `subagent.${subagent_type}`,\n durationMs: Date.now() - new Date(state.createdAt).getTime(),\n context: {\n ...turnCtx,\n inputTokens: totalIn,\n outputTokens: totalOut,\n totalCost: subagentTotalCost,\n },\n details: {\n agent_id: agentId,\n agent_type: subagent_type,\n model: modelId,\n\n // OpenTelemetry gen_ai semantic conventions\n \"gen_ai.request.model\": modelId,\n \"gen_ai.usage.input_tokens\": totalIn,\n \"gen_ai.usage.output_tokens\": totalOut,\n \"gen_ai.usage.cache_read_tokens\": totalCacheRead,\n \"gen_ai.usage.cache_creation_tokens\": totalCacheCreate,\n \"gen_ai.usage.cost\": subagentTotalCost,\n\n // Execution metrics\n turns: state.messages.length / 2,\n tools_used: state.toolsUsed,\n tool_count: state.toolsUsed.length,\n\n // Hierarchy\n is_subagent: true,\n parent_trace_id: parentTraceContext?.traceId,\n parent_span_id: parentTraceContext?.spanId,\n\n // Display metadata\n display_name: `${subagent_type.charAt(0).toUpperCase() + subagent_type.slice(1)} Agent`,\n display_icon: getAgentIcon(subagent_type),\n display_color: getAgentColor(subagent_type),\n\n // Content previews\n summary: finalText.slice(0, 2000) + (finalText.length > 2000 ? \"...\" : \"\"),\n prompt_preview: prompt.slice(0, 200) + (prompt.length > 200 ? \"...\" : \"\"),\n },\n });\n\n // Emit subagent done event\n emitter.emitSubagentDone(\n agentId,\n subagent_type,\n true,\n finalText || \"(No output from agent)\",\n { input: totalIn, output: totalOut },\n state.toolsUsed,\n Date.now() - startTime\n );\n\n return {\n success: true,\n output: finalText || \"(No output from agent)\",\n agentId,\n tokensUsed: { input: totalIn, output: totalOut },\n toolsUsed: state.toolsUsed,\n };\n } catch (err: any) {\n // Emit subagent error event\n emitter.emitSubagentDone(\n agentId,\n subagent_type,\n false,\n `Agent error: ${err.message || err}`,\n { input: totalIn, output: totalOut },\n state.toolsUsed,\n Date.now() - startTime\n );\n\n return {\n success: false,\n output: `Agent error: ${err.message || err}`,\n agentId,\n tokensUsed: { input: totalIn, output: totalOut },\n toolsUsed: state.toolsUsed,\n };\n }\n}\n\n// ============================================================================\n// BACKGROUND AGENT EXECUTION\n// ============================================================================\n\nexport async function runSubagentBackground(options: SubagentOptions): Promise<{ agentId: string; outputFile: string }> {\n const agentId = options.resume || generateAgentId();\n const outputFile = join(tmpdir(), `whale-agent-${agentId}.output`);\n\n // Write initial status\n writeFileSync(outputFile, `Agent ${agentId} started (${options.subagent_type})\\n`, \"utf-8\");\n\n // Import background process tracker (dynamic to avoid circular deps)\n const bgModule = await import(\"./background-processes.js\");\n bgModule.registerBackgroundAgent(agentId, options.subagent_type, outputFile);\n\n // Start agent in detached async — don't await\n runSubagent({ ...options, resume: undefined }).then(result => {\n appendFileSync(outputFile, `\\n---DONE---\\n${JSON.stringify({ success: result.success, agentId: result.agentId, output: result.output })}\\n`, \"utf-8\");\n import(\"./background-processes.js\").then(m => m.markAgentDone(agentId, result.success));\n }).catch(err => {\n appendFileSync(outputFile, `\\n---ERROR---\\n${err.message}\\n`, \"utf-8\");\n import(\"./background-processes.js\").then(m => m.markAgentDone(agentId, false));\n });\n\n return { agentId, outputFile };\n}\n\n// ============================================================================\n// TOOL DEFINITION — for integration with main agent loop\n// ============================================================================\n\n// Following Claude Code pattern: discrete, focused tasks with clear completion criteria\nexport const TASK_TOOL_DEFINITION: Anthropic.Tool = {\n name: \"task\",\n description: `Launch a subagent in isolated context. Subagents have full tool access and batch multiple tool calls per turn (glob + grep + read_file in parallel). Launch multiple task calls in one response for parallel execution.\n\nUse for any work requiring 3+ tool calls or touching multiple parts of the codebase.\n\nAgent types:\n- explore: Find specific files/code (2-4 turns, uses batch glob+grep)\n- plan: Create implementation plan (3-5 turns)\n- general-purpose: Complete a specific task (4-8 turns, full tool access)\n- research: Look up specific info (2-4 turns)\n\nEach agent completes autonomously and returns results.`,\n input_schema: {\n type: \"object\",\n properties: {\n prompt: {\n type: \"string\",\n description: \"Specific task with clear completion criteria. Include: what to find/do, where to look, what to return.\",\n },\n subagent_type: {\n type: \"string\",\n enum: [\"explore\", \"plan\", \"general-purpose\", \"research\"],\n description: \"Agent type: explore=find, plan=design, general-purpose=do, research=lookup.\",\n },\n model: {\n type: \"string\",\n enum: [\"sonnet\", \"haiku\"],\n description: \"Optional model. haiku (default) for fast tasks, sonnet for complex reasoning.\",\n },\n resume: {\n type: \"string\",\n description: \"Agent ID to resume (rarely needed).\",\n },\n },\n required: [\"prompt\", \"subagent_type\"],\n },\n};\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,YAAY,EAAEC,UAAU,EAAEC,aAAa,EAAEC,SAAS,EAAEC,cAAc,QAAQ,IAAI;AACvF,SAASC,IAAI,QAAQ,MAAM;AAC3B,SAASC,OAAO,EAAEC,MAAM,QAAQ,IAAI;AACpC,SACEC,sBAAsB,QACjB,kBAAkB;AACzB,SAASC,YAAY,EAAEC,eAAe,EAAEC,mBAAmB,EAAEC,cAAc,EAAEC,sBAAsB,QAAQ,4BAA4B;AACvI,SAASC,UAAU,QAAQ,4BAA4B;AACvD,SAASC,kBAAkB,QAAQ,mBAAmB;AACtD,SAASC,SAAS,QAAQ,2BAA2B;AACrD,SACEC,yBAAyB,QACpB,mBAAmB;AAC1B,SAASC,OAAO,EAAEC,cAAc,EAAEC,eAAe,EAAEC,WAAW,QAAQ,gBAAgB;AACtF,SAASC,YAAY,QAAQ,iBAAiB;AAC9C,SAASC,gBAAgB,QAAQ,mBAAmB;AACpD,SAASC,kBAAkB,QAAQ,wBAAwB;AAC3D,SACEC,YAAY,EACZC,iBAAiB,EACjBC,iBAAiB,EACjBC,oBAAoB,EACpBC,eAAe,EACfC,gBAAgB,EAChBC,cAAc,EACdC,gBAAgB,EAChBC,qBAAqB,QAChB,wBAAwB;;AAG/B;AACA;AACA;;AAMwB;;AAExB;;AA8CA;AACA;AACA;;AAEA,MAAMC,UAAU,GAAG7B,IAAI,CAACC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC;;AAEtD;AACA;;AAEA;AACA;AACA;;AAEA;AACA,SAAS6B,gBAAgBA,CAACC,IAA2B,EAAEC,GAAW,EAAU;EAC1E,MAAMC,UAAU,GAAG;AACrB;AACA,sBAAsBD,GAAG;AACzB;AACA;AACA,CAAC;;EAEC;EACA,MAAME,MAAM,GAAGf,kBAAkB,CAACY,IAAI,CAAC;EACvC,IAAIG,MAAM,EAAE,OAAOA,MAAM,CAACC,MAAM,GAAGF,UAAU;EAE7C,MAAMG,OAAqC,GAAG;IAC5CC,OAAO,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA,EAAEJ,UAAU;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wGAAwG;IAEpGK,IAAI,EAAE;AACV;AACA;AACA;AACA;AACA;AACA;AACA,EAAEL,UAAU;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qGAAqG;IAEjG,iBAAiB,EAAE;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,EAAEA,UAAU;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mFAAmF;IAE/EM,QAAQ,EAAE;AACd;AACA;AACA;AACA;AACA;AACA;AACA,EAAEN,UAAU;AACZ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,CAAC;EAED,OAAOG,OAAO,CAACL,IAAI,CAAC,IAAIK,OAAO,CAAC,iBAAiB,CAAC;AACpD;;AAEA;AACA;AACA;;AAEA,SAASI,eAAeA,CAAA,EAAS;EAC/B,IAAI,CAAC5C,UAAU,CAACiC,UAAU,CAAC,EAAE/B,SAAS,CAAC+B,UAAU,EAAE;IAAEY,SAAS,EAAE;EAAK,CAAC,CAAC;AACzE;AAEA,SAASC,cAAcA,CAACC,KAAiB,EAAQ;EAC/CH,eAAe,CAAC,CAAC;EACjB,MAAMI,IAAI,GAAG5C,IAAI,CAAC6B,UAAU,EAAE,GAAGc,KAAK,CAACE,EAAE,OAAO,CAAC;EACjDhD,aAAa,CAAC+C,IAAI,EAAEE,IAAI,CAACC,SAAS,CAACJ,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC;AAC9D;AAEA,SAASK,cAAcA,CAACC,OAAe,EAAqB;EAC1D,MAAML,IAAI,GAAG5C,IAAI,CAAC6B,UAAU,E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","ignoreList":[]}
@@ -4,6 +4,7 @@
4
4
  * Extracted from agent-loop.ts for single-responsibility.
5
5
  * All consumers should import from agent-loop.ts (re-export facade).
6
6
  */
7
+
7
8
  import { readdirSync } from "fs";
8
9
  import { loadConfig } from "./config-store.js";
9
10
  import { loadMemory } from "./memory-manager.js";
@@ -11,38 +12,37 @@ import { loadClaudeMd } from "./claude-md-loader.js";
11
12
  import { gatherGitContext } from "./git-context.js";
12
13
  import { getPermissionMode } from "./permission-modes.js";
13
14
  export async function buildSystemPrompt(hasServerTools, effort) {
14
- const sections = [];
15
- // ── Identity ──
16
- sections.push(`You are whale code, an interactive CLI agent for software engineering and business operations.
15
+ const sections = [];
16
+
17
+ // ── Identity ──
18
+ sections.push(`You are whale code, an interactive CLI agent for software engineering and business operations.
17
19
  You help users with coding tasks, debugging, refactoring, and managing business data through tools.`);
18
- // ── Environment ──
19
- const envLines = [
20
- `Working directory: ${process.cwd()}`,
21
- `Platform: ${process.platform}`,
22
- `Date: ${new Date().toISOString().split("T")[0]}`,
23
- ];
24
- // Store context critical for server tools to operate on the right data
25
- const storeConfig = loadConfig();
26
- if (storeConfig.store_name || storeConfig.store_id) {
27
- envLines.push(`Active store: ${storeConfig.store_name || storeConfig.store_id}`);
28
- }
29
- const gitContext = await gatherGitContext();
30
- if (gitContext)
31
- envLines.push(`\n${gitContext}`);
32
- // Directory listing — top-level files/folders for spatial awareness
33
- try {
34
- const entries = readdirSync(process.cwd(), { withFileTypes: true });
35
- const dirs = entries.filter(e => e.isDirectory() && !e.name.startsWith(".")).map(e => e.name + "/").sort();
36
- const fileNames = entries.filter(e => e.isFile()).map(e => e.name).sort();
37
- const listing = [...dirs, ...fileNames].slice(0, 30);
38
- if (listing.length > 0) {
39
- envLines.push(`\nDirectory contents:\n${listing.join("\n")}`);
40
- }
20
+
21
+ // ── Environment ──
22
+ const envLines = [`Working directory: ${process.cwd()}`, `Platform: ${process.platform}`, `Date: ${new Date().toISOString().split("T")[0]}`];
23
+ // Store context — critical for server tools to operate on the right data
24
+ const storeConfig = loadConfig();
25
+ if (storeConfig.store_name || storeConfig.store_id) {
26
+ envLines.push(`Active store: ${storeConfig.store_name || storeConfig.store_id}`);
27
+ }
28
+ const gitContext = await gatherGitContext();
29
+ if (gitContext) envLines.push(`\n${gitContext}`);
30
+ // Directory listing — top-level files/folders for spatial awareness
31
+ try {
32
+ const entries = readdirSync(process.cwd(), {
33
+ withFileTypes: true
34
+ });
35
+ const dirs = entries.filter(e => e.isDirectory() && !e.name.startsWith(".")).map(e => e.name + "/").sort();
36
+ const fileNames = entries.filter(e => e.isFile()).map(e => e.name).sort();
37
+ const listing = [...dirs, ...fileNames].slice(0, 30);
38
+ if (listing.length > 0) {
39
+ envLines.push(`\nDirectory contents:\n${listing.join("\n")}`);
41
40
  }
42
- catch { /* cwd not readable */ }
43
- sections.push(`# Environment\n${envLines.join("\n")}`);
44
- // ── Doing tasks ──
45
- sections.push(`# Doing tasks
41
+ } catch {/* cwd not readable */}
42
+ sections.push(`# Environment\n${envLines.join("\n")}`);
43
+
44
+ // ── Doing tasks ──
45
+ sections.push(`# Doing tasks
46
46
  - The user will primarily request software engineering tasks: solving bugs, adding features, refactoring, explaining code, and more.
47
47
  - You are highly capable and can complete ambitious, multi-step tasks autonomously. Defer to user judgement about scope.
48
48
  - ALWAYS read relevant code before proposing changes. Do not modify files you haven't read. Understand existing patterns before editing.
@@ -53,8 +53,9 @@ You help users with coding tasks, debugging, refactoring, and managing business
53
53
  - Don't create abstractions for one-time operations.
54
54
  - Be careful not to introduce security vulnerabilities (command injection, XSS, SQL injection, etc.). If you notice insecure code you wrote, fix it immediately.
55
55
  - If your approach is blocked, do not brute force. Consider alternative approaches or ask the user.`);
56
- // ── Coding workflow ──
57
- sections.push(`# Mandatory coding workflow
56
+
57
+ // ── Coding workflow ──
58
+ sections.push(`# Mandatory coding workflow
58
59
  When making code changes, ALWAYS follow this sequence:
59
60
 
60
61
  1. **Read** — Read the files you intend to modify. Understand the existing code, imports, types, and patterns.
@@ -69,15 +70,17 @@ CRITICAL RULES:
69
70
  - If a build or test fails, read the error output carefully before attempting a fix. Do not guess.
70
71
  - If the same fix approach fails twice, STOP. Re-read the relevant code and try a fundamentally different approach.
71
72
  - If you are stuck after 3 failed attempts, explain what you've tried and ask the user for guidance.`);
72
- // ── Actions with care ──
73
- sections.push(`# Executing actions with care
73
+
74
+ // ── Actions with care ──
75
+ sections.push(`# Executing actions with care
74
76
  Consider the reversibility and blast radius of your actions:
75
77
  - Freely take local, reversible actions like editing files or running tests.
76
78
  - For hard-to-reverse or shared-state actions (deleting files, force-pushing, modifying CI, sending messages), check with the user first.
77
79
  - Do not use destructive actions as shortcuts. Identify root causes rather than bypassing safety checks.
78
80
  - If you encounter unexpected state (unfamiliar files, branches, config), investigate before overwriting — it may be the user's in-progress work.`);
79
- // ── Tool use ──
80
- let toolSection = `# Using tools
81
+
82
+ // ── Tool use ──
83
+ let toolSection = `# Using tools
81
84
  - Use the RIGHT tool for the job. Do NOT use run_command when a dedicated tool exists:
82
85
  - read_file to read files (not \`cat\` or \`head\`)
83
86
  - edit_file or multi_edit to edit files (not \`sed\` or \`awk\`)
@@ -90,27 +93,28 @@ Consider the reversibility and blast radius of your actions:
90
93
  - If a tool fails, read the error. If it fails 3 times, try a different tool or approach entirely.
91
94
  - All file paths in tool calls should be relative to the working directory when possible (e.g. "src/foo.ts" not "/Users/name/project/src/foo.ts").
92
95
  - When the user drops a file path, read it with read_file before responding.
96
+ - For large files (>200 lines): split across multiple write_file calls. Write the first ~200 lines, then use edit_file to append the rest in chunks. NEVER try to write an entire large file in a single tool call — it will be truncated.
93
97
 
94
- ## Subagents (task tool)
95
- - Subagents run in isolated context use them freely for parallel work without polluting your main conversation.
96
- - Use subagents when a task requires 3+ tool calls or touches multiple parts of the codebase.
97
- - Launch multiple subagents in parallel for independent research (e.g., searching different directories simultaneously).
98
+ ## Subagents (task tool) — DELEGATE AGGRESSIVELY
99
+ - Your input tokens are expensive. Delegate ALL multi-step research to subagents instead of using tools directly.
100
+ - ALWAYS delegate: grep/glob searches, reading multiple files, codebase exploration, test runs, linting.
101
+ - Only use tools directly when: (1) a single read_file answers the question, or (2) you need the result in THIS turn for a decision.
102
+ - Launch multiple subagents in parallel for independent work — this is faster AND cheaper than serial tool calls.
98
103
  - Use task with run_in_background:true for long-running tasks; check with task_output, stop with task_stop.
99
- - Skip subagents only when a single glob or read_file gives you the answer directly.
100
104
  - Prefer "explore" type for quick codebase searches (2-4 turns). Prefer "general-purpose" for autonomous multi-step tasks.
101
- - Cost-aware model routing:
102
- - model:"haiku" — file searches, schema lookups, simple reads, pattern matching ($1/$5 per 1M tokens)
103
- - model:"sonnet" — code analysis, multi-step research, plan design ($3/$15 per 1M tokens)
104
- - model:"opus" — complex reasoning, judgment calls ($5/$25 per 1M tokens, use sparingly)
105
+ - Cost-aware model routing (delegate to cheapest model that can handle the task):
106
+ - model:"haiku" — file searches, schema lookups, simple reads, pattern matching ($1/$5 per 1M tokens). DEFAULT for most delegation.
107
+ - model:"sonnet" — code analysis, multi-step research, plan design, code writing ($3/$15 per 1M tokens)
108
+ - model:"opus" — never delegate to opus subagents (you are opus, defeats the purpose)
105
109
 
106
110
  ## Teams (team_create / team_auto)
107
111
  - Do NOT use teams for bug fixes or single-file changes — work directly. Teams are for large features with 3+ independent workstreams.
108
112
  - **team_auto**: Give it a single task string — it auto-decomposes into parallel sub-tasks with file ownership, runs them, and reviews results. Best for refactoring, audits, and multi-file features.
109
113
  - **team_create**: Use when you want explicit control over task breakdown, file assignments, and models.
110
114
  - When creating teams manually, assign per-task models based on complexity. Most tasks should use haiku or sonnet.`;
111
- if (hasServerTools) {
112
- const storeCtx = storeConfig.store_name ? ` All operations are scoped to the active store: **${storeConfig.store_name}**.` : "";
113
- toolSection += `
115
+ if (hasServerTools) {
116
+ const storeCtx = storeConfig.store_name ? ` All operations are scoped to the active store: **${storeConfig.store_name}**.` : "";
117
+ toolSection += `
114
118
 
115
119
  ## Server tools (business operations)
116
120
  - Server tools (analytics, products, inventory, customers, orders, email, workflows, etc.) operate on the active store's data.${storeCtx}
@@ -152,29 +156,30 @@ Consider the reversibility and blast radius of your actions:
152
156
  - If given a directory of clips, use glob to find all MP3s, then pass all paths at once.
153
157
  - **Voice settings**: Cloned voices auto-use optimized settings (higher similarity, lower stability). Override with explicit stability/similarity_boost params if needed.
154
158
  - **Voice tool**: Accepts voice names (e.g. "Daniel", "Sarah") — no need to look up voice IDs. Use search_voices to find voices by style/accent/gender.`;
155
- }
156
- sections.push(toolSection);
157
- // ── Permission mode ──
158
- const permissionMode = getPermissionMode();
159
- if (permissionMode === "plan") {
160
- sections.push(`# Mode: Plan (read-only)
159
+ }
160
+ sections.push(toolSection);
161
+
162
+ // ── Permission mode ──
163
+ const permissionMode = getPermissionMode();
164
+ if (permissionMode === "plan") {
165
+ sections.push(`# Mode: Plan (read-only)
161
166
  You are in plan mode. Only read and search tools are available. No file writes or commands.`);
162
- }
163
- else if (permissionMode === "yolo") {
164
- sections.push(`# Mode: Yolo
167
+ } else if (permissionMode === "yolo") {
168
+ sections.push(`# Mode: Yolo
165
169
  All tools available without confirmation prompts.`);
166
- }
167
- // ── Effort ──
168
- if (effort === "low") {
169
- sections.push(`# Effort: Low
170
+ }
171
+
172
+ // ── Effort ──
173
+ if (effort === "low") {
174
+ sections.push(`# Effort: Low
170
175
  Be concise and direct. Minimize exploration. Give brief answers. Skip verification for trivial changes.`);
171
- }
172
- else if (effort === "high") {
173
- sections.push(`# Effort: High
176
+ } else if (effort === "high") {
177
+ sections.push(`# Effort: High
174
178
  Be thorough and exhaustive. Explore deeply. Verify all changes. Consider edge cases.`);
175
- }
176
- // ── Tone and style ──
177
- sections.push(`# Tone and style
179
+ }
180
+
181
+ // ── Tone and style ──
182
+ sections.push(`# Tone and style
178
183
  - Be concise. Use tools to do work — don't just explain what you would do.
179
184
  - NEVER use emojis — terminal renders them as broken glyphs.
180
185
  - Include $ on monetary values, % on percentages.
@@ -186,15 +191,18 @@ Be thorough and exhaustive. Explore deeply. Verify all changes. Consider edge ca
186
191
  Title
187
192
  Label: $value
188
193
  \`\`\``);
189
- // ── Persistent memory ──
190
- const memory = loadMemory();
191
- if (memory) {
192
- sections.push(`# Memory (persistent across sessions)\n${memory}`);
193
- }
194
- // ── Project instructions ──
195
- const claudeMd = loadClaudeMd();
196
- if (claudeMd) {
197
- sections.push(`# Project Instructions (${claudeMd.path})\n${claudeMd.content}`);
198
- }
199
- return sections.join("\n\n");
194
+
195
+ // ── Persistent memory ──
196
+ const memory = loadMemory();
197
+ if (memory) {
198
+ sections.push(`# Memory (persistent across sessions)\n${memory}`);
199
+ }
200
+
201
+ // ── Project instructions ──
202
+ const claudeMd = loadClaudeMd();
203
+ if (claudeMd) {
204
+ sections.push(`# Project Instructions (${claudeMd.path})\n${claudeMd.content}`);
205
+ }
206
+ return sections.join("\n\n");
200
207
  }
208
+ //# sourceMappingURL=system-prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-prompt.js","names":["readdirSync","loadConfig","loadMemory","loadClaudeMd","gatherGitContext","getPermissionMode","buildSystemPrompt","hasServerTools","effort","sections","push","envLines","process","cwd","platform","Date","toISOString","split","storeConfig","store_name","store_id","gitContext","entries","withFileTypes","dirs","filter","e","isDirectory","name","startsWith","map","sort","fileNames","isFile","listing","slice","length","join","toolSection","storeCtx","permissionMode","memory","claudeMd","path","content"],"sources":["../../../src/cli/services/system-prompt.ts"],"sourcesContent":["/**\n * System Prompt Builder — assembles the full system prompt for the agent loop\n *\n * Extracted from agent-loop.ts for single-responsibility.\n * All consumers should import from agent-loop.ts (re-export facade).\n */\n\nimport { readdirSync } from \"fs\";\nimport { loadConfig } from \"./config-store.js\";\nimport { loadMemory } from \"./memory-manager.js\";\nimport { loadClaudeMd } from \"./claude-md-loader.js\";\nimport { gatherGitContext } from \"./git-context.js\";\nimport { getPermissionMode } from \"./permission-modes.js\";\n\nexport async function buildSystemPrompt(hasServerTools: boolean, effort?: \"low\" | \"medium\" | \"high\"): Promise<string> {\n const sections: string[] = [];\n\n // ── Identity ──\n sections.push(`You are whale code, an interactive CLI agent for software engineering and business operations.\nYou help users with coding tasks, debugging, refactoring, and managing business data through tools.`);\n\n // ── Environment ──\n const envLines = [\n `Working directory: ${process.cwd()}`,\n `Platform: ${process.platform}`,\n `Date: ${new Date().toISOString().split(\"T\")[0]}`,\n ];\n // Store context — critical for server tools to operate on the right data\n const storeConfig = loadConfig();\n if (storeConfig.store_name || storeConfig.store_id) {\n envLines.push(`Active store: ${storeConfig.store_name || storeConfig.store_id}`);\n }\n const gitContext = await gatherGitContext();\n if (gitContext) envLines.push(`\\n${gitContext}`);\n // Directory listing — top-level files/folders for spatial awareness\n try {\n const entries = readdirSync(process.cwd(), { withFileTypes: true });\n const dirs = entries.filter(e => e.isDirectory() && !e.name.startsWith(\".\")).map(e => e.name + \"/\").sort();\n const fileNames = entries.filter(e => e.isFile()).map(e => e.name).sort();\n const listing = [...dirs, ...fileNames].slice(0, 30);\n if (listing.length > 0) {\n envLines.push(`\\nDirectory contents:\\n${listing.join(\"\\n\")}`);\n }\n } catch { /* cwd not readable */ }\n sections.push(`# Environment\\n${envLines.join(\"\\n\")}`);\n\n // ── Doing tasks ──\n sections.push(`# Doing tasks\n- The user will primarily request software engineering tasks: solving bugs, adding features, refactoring, explaining code, and more.\n- You are highly capable and can complete ambitious, multi-step tasks autonomously. Defer to user judgement about scope.\n- ALWAYS read relevant code before proposing changes. Do not modify files you haven't read. Understand existing patterns before editing.\n- Prefer editing existing files over creating new ones. Do not create files unless absolutely necessary.\n- Avoid over-engineering. Only make changes that are directly requested or clearly necessary. Keep solutions simple and focused.\n - Don't add features, refactor code, or make \"improvements\" beyond what was asked.\n - Don't add error handling or validation for scenarios that can't happen.\n - Don't create abstractions for one-time operations.\n- Be careful not to introduce security vulnerabilities (command injection, XSS, SQL injection, etc.). If you notice insecure code you wrote, fix it immediately.\n- If your approach is blocked, do not brute force. Consider alternative approaches or ask the user.`);\n\n // ── Coding workflow ──\n sections.push(`# Mandatory coding workflow\nWhen making code changes, ALWAYS follow this sequence:\n\n1. **Read** — Read the files you intend to modify. Understand the existing code, imports, types, and patterns.\n2. **Plan** — For non-trivial changes, briefly state what you'll change and why BEFORE editing. For multi-file changes, list the files and the change for each.\n3. **Edit** — Make targeted, minimal changes. Keep edit batches small (5 or fewer edits before verifying).\n4. **Verify** — After each batch of edits, run the build or tests (e.g. \\`npm run build\\`, \\`tsc --noEmit\\`, \\`pytest\\`). Read the output. Fix errors before making more edits.\n5. **Report** — Summarize what you changed and the verification results.\n\nCRITICAL RULES:\n- NEVER skip step 1. Do not edit files you haven't read in this session.\n- NEVER make more than 5-8 edits without running a verification step.\n- If a build or test fails, read the error output carefully before attempting a fix. Do not guess.\n- If the same fix approach fails twice, STOP. Re-read the relevant code and try a fundamentally different approach.\n- If you are stuck after 3 failed attempts, explain what you've tried and ask the user for guidance.`);\n\n // ── Actions with care ──\n sections.push(`# Executing actions with care\nConsider the reversibility and blast radius of your actions:\n- Freely take local, reversible actions like editing files or running tests.\n- For hard-to-reverse or shared-state actions (deleting files, force-pushing, modifying CI, sending messages), check with the user first.\n- Do not use destructive actions as shortcuts. Identify root causes rather than bypassing safety checks.\n- If you encounter unexpected state (unfamiliar files, branches, config), investigate before overwriting — it may be the user's in-progress work.`);\n\n // ── Tool use ──\n let toolSection = `# Using tools\n- Use the RIGHT tool for the job. Do NOT use run_command when a dedicated tool exists:\n - read_file to read files (not \\`cat\\` or \\`head\\`)\n - edit_file or multi_edit to edit files (not \\`sed\\` or \\`awk\\`)\n - write_file to create files (not \\`echo >\\` or heredocs)\n - glob to find files by pattern (not \\`find\\` or \\`ls\\`)\n - grep to search content (not \\`grep\\` or \\`rg\\` via run_command)\n - run_command ONLY for shell operations: build, test, git, install, etc.\n- Call multiple INDEPENDENT tools in a single response for parallel execution. Do not chain when results are independent.\n- Only chain across turns when a result is needed for the next call.\n- If a tool fails, read the error. If it fails 3 times, try a different tool or approach entirely.\n- All file paths in tool calls should be relative to the working directory when possible (e.g. \"src/foo.ts\" not \"/Users/name/project/src/foo.ts\").\n- When the user drops a file path, read it with read_file before responding.\n- For large files (>200 lines): split across multiple write_file calls. Write the first ~200 lines, then use edit_file to append the rest in chunks. NEVER try to write an entire large file in a single tool call — it will be truncated.\n\n## Subagents (task tool) — DELEGATE AGGRESSIVELY\n- Your input tokens are expensive. Delegate ALL multi-step research to subagents instead of using tools directly.\n- ALWAYS delegate: grep/glob searches, reading multiple files, codebase exploration, test runs, linting.\n- Only use tools directly when: (1) a single read_file answers the question, or (2) you need the result in THIS turn for a decision.\n- Launch multiple subagents in parallel for independent work — this is faster AND cheaper than serial tool calls.\n- Use task with run_in_background:true for long-running tasks; check with task_output, stop with task_stop.\n- Prefer \"explore\" type for quick codebase searches (2-4 turns). Prefer \"general-purpose\" for autonomous multi-step tasks.\n- Cost-aware model routing (delegate to cheapest model that can handle the task):\n - model:\"haiku\" — file searches, schema lookups, simple reads, pattern matching ($1/$5 per 1M tokens). DEFAULT for most delegation.\n - model:\"sonnet\" — code analysis, multi-step research, plan design, code writing ($3/$15 per 1M tokens)\n - model:\"opus\" — never delegate to opus subagents (you are opus, defeats the purpose)\n\n## Teams (team_create / team_auto)\n- Do NOT use teams for bug fixes or single-file changes — work directly. Teams are for large features with 3+ independent workstreams.\n- **team_auto**: Give it a single task string — it auto-decomposes into parallel sub-tasks with file ownership, runs them, and reviews results. Best for refactoring, audits, and multi-file features.\n- **team_create**: Use when you want explicit control over task breakdown, file assignments, and models.\n- When creating teams manually, assign per-task models based on complexity. Most tasks should use haiku or sonnet.`;\n\n if (hasServerTools) {\n const storeCtx = storeConfig.store_name ? ` All operations are scoped to the active store: **${storeConfig.store_name}**.` : \"\";\n toolSection += `\n\n## Server tools (business operations)\n- Server tools (analytics, products, inventory, customers, orders, email, workflows, etc.) operate on the active store's data.${storeCtx}\n- These tools require UUIDs for mutations. ALWAYS look up IDs first: use find/list actions to resolve names to UUIDs before calling create/update/delete.\n- The store_id is automatically included in every server tool call — you do NOT need to pass it manually.\n- Use analytics for sales, revenue, and performance data. Use inventory for stock levels. Use products for the catalog.\n- Use audit_trail for store activity history (inventory changes, orders, transfers).\n- Use telemetry for AI system metrics (conversations, tool performance, errors).\n- **Inventory workflow**: (1) Find product with products tool (action=find), (2) Look up location with inventory tool (action=summary or by_location) to get location_id, (3) Use inventory tool with adjust/set and the resolved UUIDs. Always provide a reason for adjustments.\n- **Purchase Order workflow**: (1) Find supplier with supply_chain (action=find_suppliers), (2) Find products with products (action=find), (3) supply_chain action=po_create with supplier_id, location_id, items array, (4) supply_chain action=po_approve, (5) supply_chain action=po_receive to add inventory.\n- **Transfer workflow**: supply_chain action=transfer_create with from_location_id, to_location_id, items → supply_chain action=transfer_receive.\n- The inventory tool has a quick one-step transfer (action=transfer) for simple moves. Use supply_chain transfers for formal tracked transfers with approval flow.\n- Media tools (voice, image_gen, video_gen) auto-download generated files to the current working directory. The result contains a local_file path — report that path to the user. NEVER construct, guess, or curl URLs yourself.\n- **Music generation workflow** (use this for ALL song requests):\n 1. For best vocal clarity, call music_plan first to get a structured composition_plan with proper sections, lyrics per line, and timing\n 2. Review/tweak the plan (edit lyrics, adjust section durations, add style cues)\n 3. Pass the composition_plan to music_compose to generate the final song\n 4. music_compose auto-injects vocal clarity styles (clear vocals, crisp pronunciation) and uses 192kbps quality\n - For quick/simple songs, music_compose with a prompt still works but may have less clear vocals\n - For complex songs with multiple sections, use music_compose_detailed — supports section-by-section control with with_timestamps for precise timing\n - Set force_instrumental:false (default) for vocals. NEVER use speak (TTS) for song vocals — TTS speaks, it doesn't sing\n - Only set force_instrumental:true when the user explicitly wants a karaoke/backing track\n - For clear lyrics: use [Verse], [Chorus], [Bridge] markers, include BPM and key (e.g. \"120 BPM, key of C major\")\n - For vocal style: add descriptors like \"clear female vocals\", \"male rapper\", \"a cappella chorus\"\n - Exclude bad qualities: composition_plan supports negative_global_styles like \"distorted vocals\", \"mumbled lyrics\"\n- **Batch TTS**: For generating multiple audio clips at once (up to 10), use voice tool with action=batch and items=[{text, voice_name?, voice_id?}, ...]. More efficient than sequential speak calls.\n- **Voice cloning** (two tiers):\n - **Instant (IVC)**: action=clone_voice — quick, ~70% accuracy. Good for casual use. Pass file_paths=[...], CLI reads files automatically.\n - **Professional (PVC)**: Near-perfect accuracy, multi-step workflow:\n 1. pvc_create(voice_name=\"Name\") — creates PVC voice slot\n 2. pvc_upload(voice_id=..., file_paths=[...]) — upload 30+ min audio for best results\n 3. pvc_separate_speakers(voice_id=..., sample_id=...) — if audio has multiple speakers\n 4. pvc_status(voice_id=..., sample_id=...) — check separation progress\n 5. pvc_select_speaker(voice_id=..., sample_id=..., speaker_ids=[...]) — pick the right speaker\n 6. pvc_verify(voice_id=...) — submit for manual verification (required by ElevenLabs)\n 7. pvc_train(voice_id=...) — start training (5-30 min). Check with pvc_status(voice_id=...).\n - Use IVC for quick tests, PVC for production-quality voice clones.\n - file_path (single) or file_paths (array) works for clone_voice, pvc_upload, pvc_verify, voice_design, speech_to_text, voice_changer, audio_isolation, stem_separation, forced_alignment — pass file paths directly, NEVER base64-encode via bash.\n - If given a directory of clips, use glob to find all MP3s, then pass all paths at once.\n- **Voice settings**: Cloned voices auto-use optimized settings (higher similarity, lower stability). Override with explicit stability/similarity_boost params if needed.\n- **Voice tool**: Accepts voice names (e.g. \"Daniel\", \"Sarah\") — no need to look up voice IDs. Use search_voices to find voices by style/accent/gender.`;\n }\n sections.push(toolSection);\n\n // ── Permission mode ──\n const permissionMode = getPermissionMode();\n if (permissionMode === \"plan\") {\n sections.push(`# Mode: Plan (read-only)\nYou are in plan mode. Only read and search tools are available. No file writes or commands.`);\n } else if (permissionMode === \"yolo\") {\n sections.push(`# Mode: Yolo\nAll tools available without confirmation prompts.`);\n }\n\n // ── Effort ──\n if (effort === \"low\") {\n sections.push(`# Effort: Low\nBe concise and direct. Minimize exploration. Give brief answers. Skip verification for trivial changes.`);\n } else if (effort === \"high\") {\n sections.push(`# Effort: High\nBe thorough and exhaustive. Explore deeply. Verify all changes. Consider edge cases.`);\n }\n\n // ── Tone and style ──\n sections.push(`# Tone and style\n- Be concise. Use tools to do work — don't just explain what you would do.\n- NEVER use emojis — terminal renders them as broken glyphs.\n- Include $ on monetary values, % on percentages.\n- When referencing code, include file_path:line_number for easy navigation.\n- Keep output clean and monospace-aligned.\n- Use markdown tables for multi-column data.\n- Use \\`\\`\\`chart code blocks for bar charts:\n\\`\\`\\`chart\nTitle\nLabel: $value\n\\`\\`\\``);\n\n // ── Persistent memory ──\n const memory = loadMemory();\n if (memory) {\n sections.push(`# Memory (persistent across sessions)\\n${memory}`);\n }\n\n // ── Project instructions ──\n const claudeMd = loadClaudeMd();\n if (claudeMd) {\n sections.push(`# Project Instructions (${claudeMd.path})\\n${claudeMd.content}`);\n }\n\n return sections.join(\"\\n\\n\");\n}\n"],"mappings":"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","ignoreList":[]}
@@ -4,6 +4,7 @@
4
4
  * Scans the working directory to give the decomposer real filesystem context,
5
5
  * so it can assign specific files/directories to each agent instead of duplicating tasks.
6
6
  *
7
+ * Uses the server proxy (same auth as the main agent loop) — no direct API key needed.
7
8
  * Used by the Team system to auto-decompose tasks before assigning to teammates.
8
9
  */
9
10
  export interface SubTask {
@@ -20,7 +21,6 @@ export interface DecompositionResult {
20
21
  export declare function decomposeTask(task: string, opts?: {
21
22
  maxCells?: number;
22
23
  context?: string;
23
- apiKey?: string;
24
24
  model?: string;
25
25
  workingDirectory?: string;
26
26
  }): Promise<DecompositionResult>;