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":"teammate.js","names":["fork","fileURLToPath","loadTeam","claimTask","completeTask","failTask","getAvailableTasks","sendMessage","getUnreadMessages","markMessagesRead","updateTeammate","LoopDetector","estimateCostUsd","AGENT_DEFAULTS","resolveAgentLoopConfig","preCompact","loadCLIAgentConfig","MODEL_MAP","LOCAL_TOOL_DEFINITIONS","loadServerToolDefinitions","getValidToken","logSpan","generateSpanId","generateTraceId","getConversationId","initializeTelemetryClient","flushCliSpans","PKG_VERSION","callAgentAPI","executeToolBlocks","extractTextBlocks","extractToolUseBlocks","deduplicateTools","assertUniqueToolNames","TEAMMATE_MAX_TURNS_PER_TASK","subagentMaxTurns","TEAMMATE_MAX_OUTPUT_TOKENS","subagentMaxTokens","TEAMMATE_MAX_TOTAL_TURNS","teammateMaxTotalTurns","TEAMMATE_MAX_DURATION_MS","maxDurationMs","API_TIMEOUT_MS","apiTimeoutMs","TOOL_TIMEOUT_MS","toolTimeoutMs","resolvedTeammateConfig","resolveTeammateConfig","dbAgent","context_config","cc","subagent_max_turns","subagent_max_tokens","max_duration_ms","teammate_max_total_turns","api_timeout_ms","tool_timeout_ms","buildTeammatePrompt","teammateName","team","currentTask","cwd","taskList","tasks","map","t","status","assignedTo","teammates","find","tm","id","name","description","join","files","length","dependencies","TEAM_TOOLS","input_schema","type","properties","to","message","required","task_id","result","executeTeamTool","toolName","input","teamId","teammateId","currentTaskId","success","output","taskId","task","messages","msgList","m","from","content","callAPI","modelId","systemPrompt","tools","thinkingEnabled","onHeartbeat","contextProfile","maxOutputTokens","timeoutMs","runTeammateLoop","data","model","parentConversationId","teamName","authToken","preloadedConfig","preloadedServerTools","opus","startTime","Date","now","teammateConversationId","teammateTraceId","teammateSpanId","action","durationMs","context","traceId","spanId","conversationId","source","serviceName","serviceVersion","details","is_team","is_teammate","team_id","teammate_id","teammate_name","team_name","parent_conversation_id","display_name","display_icon","display_color","report","msg","process","send","localTools","serverTools","allTools","loopDetector","fromResolved","totalIn","totalOut","currentTaskModelId","currentTaskThinking","tasksCompleted","logTeammateComplete","reason","teammateCost","parentSpanId","inputTokens","outputTokens","totalCost","tasks_completed","completion_reason","outerTurn","tokensUsed","Math","round","available","inProgress","filter","Promise","r","setTimeout","claimed","taskModel","role","freshTeam","freshTask","apiError","lastTurn","taskTurnLimit","Number","MAX_SAFE_INTEGER","turn","apiStart","response","err","String","slice","severity","error","undefined","turn_number","apiDuration","usage","input_tokens","output_tokens","turnCostUsd","cache_read_tokens","cache_creation_tokens","cacheReadTokens","cacheCreationTokens","stop_reason","textBlocks","toolBlocks","text","compactionBlock","b","taskCompleted","toolResults","customExecutor","some","task_result","callbacks","onToolEnd","toolCategory","tool_category","push","maxToolResultChars","compactedMessages","stripThinking","hitTurnLimit","lastText","partialResult","Array","isArray","txt","argv","includes","on","exit","Error","catch","finally","spawnTeammate","__filename","import","meta","url","child","stdio","env"],"sources":["../../../src/cli/services/teammate.ts"],"sourcesContent":["/**\n * Teammate — Independent agent instance in a Team\n *\n * Following Anthropic's official patterns:\n * - Runs in separate context window (worker thread)\n * - Works on tasks from shared task list\n * - Can message other teammates directly\n * - Full tool access (not restricted like subagents)\n */\n\nimport type Anthropic from \"@anthropic-ai/sdk\";\nimport { fork, type ChildProcess } from \"child_process\";\nimport { fileURLToPath } from \"url\";\nimport {\n TeamState,\n TeamTask,\n loadTeam,\n claimTask,\n completeTask,\n failTask,\n getAvailableTasks,\n sendMessage,\n getUnreadMessages,\n markMessagesRead,\n updateTeammate,\n} from \"./team-state.js\";\nimport { LoopDetector, estimateCostUsd, AGENT_DEFAULTS, resolveAgentLoopConfig } from \"../../shared/agent-core.js\";\nimport { preCompact } from \"../../shared/compaction.js\";\nimport { loadCLIAgentConfig, type CLIAgentConfig } from \"./agent-config.js\";\nimport { MODEL_MAP } from \"../../shared/constants.js\";\nimport {\n LOCAL_TOOL_DEFINITIONS,\n} from \"./local-tools.js\";\nimport {\n loadServerToolDefinitions,\n} from \"./server-tools.js\";\nimport { getValidToken } from \"./auth-service.js\";\nimport { logSpan, generateSpanId, generateTraceId, getConversationId, initializeTelemetryClient, flushCliSpans, PKG_VERSION } from \"./telemetry.js\";\nimport {\n callAgentAPI,\n executeToolBlocks,\n extractTextBlocks,\n extractToolUseBlocks,\n deduplicateTools,\n assertUniqueToolNames,\n} from \"./agent-worker-base.js\";\nimport type { AgentAPIResponse, ToolExecResult } from \"./agent-worker-base.js\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface TeammateWorkerData {\n teamId: string;\n teammateId: string;\n teammateName: string;\n model: string;\n cwd: string;\n parentConversationId: string; // Link to parent trace for hierarchy\n teamName: string; // For display in telemetry\n authToken?: string; // User's access token for telemetry\n /** Pre-loaded config from parent — avoids each child making redundant DB calls */\n preloadedConfig?: CLIAgentConfig | null;\n /** Pre-loaded server tool definitions — avoids each child making redundant API calls */\n preloadedServerTools?: Anthropic.Tool[];\n}\n\nexport interface TeammateMessage {\n type: \"progress\" | \"task_started\" | \"task_completed\" | \"message_sent\" | \"done\" | \"error\";\n teammateId: string;\n taskId?: string;\n content: string;\n tokensUsed?: { input: number; output: number };\n}\n\n// ============================================================================\n// CONSTANTS\n// ============================================================================\n\n// Teammate constants — ALL from DB via AGENT_DEFAULTS, nothing hardcoded\nlet TEAMMATE_MAX_TURNS_PER_TASK: number = AGENT_DEFAULTS.subagentMaxTurns; // DB overridable\nlet TEAMMATE_MAX_OUTPUT_TOKENS: number = AGENT_DEFAULTS.subagentMaxTokens; // DB overridable\nlet TEAMMATE_MAX_TOTAL_TURNS: number = AGENT_DEFAULTS.teammateMaxTotalTurns;\nlet TEAMMATE_MAX_DURATION_MS: number = AGENT_DEFAULTS.maxDurationMs;\nlet API_TIMEOUT_MS: number = AGENT_DEFAULTS.apiTimeoutMs; // DB overridable\nlet TOOL_TIMEOUT_MS: number = AGENT_DEFAULTS.toolTimeoutMs; // DB overridable\n\n// Cached resolved config for LoopDetector creation\nlet resolvedTeammateConfig: import(\"../../shared/agent-core.js\").ResolvedAgentLoopConfig | null = null;\n\n// Lazy init from DB — called once per teammate spawn. ALL knobs from DB, nothing hardcoded.\nasync function resolveTeammateConfig(): Promise<void> {\n const dbAgent = await loadCLIAgentConfig();\n if (!dbAgent?.context_config) return;\n const cc = dbAgent.context_config;\n TEAMMATE_MAX_TURNS_PER_TASK = cc.subagent_max_turns ?? TEAMMATE_MAX_TURNS_PER_TASK;\n TEAMMATE_MAX_OUTPUT_TOKENS = cc.subagent_max_tokens ?? TEAMMATE_MAX_OUTPUT_TOKENS;\n TEAMMATE_MAX_DURATION_MS = cc.max_duration_ms ?? TEAMMATE_MAX_DURATION_MS;\n TEAMMATE_MAX_TOTAL_TURNS = cc.teammate_max_total_turns ?? TEAMMATE_MAX_TOTAL_TURNS;\n API_TIMEOUT_MS = cc.api_timeout_ms ?? API_TIMEOUT_MS;\n TOOL_TIMEOUT_MS = cc.tool_timeout_ms ?? TOOL_TIMEOUT_MS;\n // Cache resolved config for LoopDetector\n resolvedTeammateConfig = resolveAgentLoopConfig(dbAgent, \"sse\");\n}\n\n// ============================================================================\n// TEAMMATE SYSTEM PROMPT\n// ============================================================================\n\nfunction buildTeammatePrompt(\n teammateName: string,\n team: TeamState,\n currentTask: TeamTask | null,\n cwd: string\n): string {\n const taskList = team.tasks.map(t => {\n const status = t.status === \"in_progress\" && t.assignedTo\n ? `in_progress (${team.teammates.find(tm => tm.id === t.assignedTo)?.name || \"unknown\"})`\n : t.status;\n return `- [${status}] ${t.description}${t.id === currentTask?.id ? \" (YOUR TASK)\" : \"\"}`;\n }).join(\"\\n\");\n\n const teammates = team.teammates.map(t =>\n `- ${t.name} (${t.id}): ${t.status}${t.currentTask ? ` - working on task` : \"\"}`\n ).join(\"\\n\");\n\n return `You are ${teammateName}, a teammate in the \"${team.name}\" team.\n\n## Working Directory\n${cwd}\n\n## Your Current Task\n${currentTask ? `\n**Task ID**: ${currentTask.id}\n**Description**: ${currentTask.description}\n${currentTask.files?.length ? `**Files to modify**: ${currentTask.files.join(\", \")}` : \"\"}\n${currentTask.dependencies?.length ? `**Dependencies**: ${currentTask.dependencies.join(\", \")} (all completed)` : \"\"}\n` : \"No task assigned yet. Use team_claim_task to claim an available task.\"}\n\n## Team Task List\n${taskList}\n\n## Teammates\n${teammates}\n\n## Team Communication Tools\nYou have special tools to communicate with your team:\n- **team_message**: Send a message to another teammate or the team lead\n- **team_broadcast**: Send a message to all teammates\n- **team_claim_task**: Claim an available task to work on\n- **team_complete_task**: Mark your current task as complete with results\n- **team_check_messages**: Check for messages from teammates\n\n## Subagent Delegation (task tool)\nYou can delegate sub-tasks to specialized subagents using the 'task' tool:\n- Use subagent_type=\"explore\" for quick file/code searches\n- Use subagent_type=\"general-purpose\" for autonomous sub-tasks\n- Use model=\"haiku\" for simple lookups (cheapest/fastest)\n- This lets you work on multiple things in parallel while staying focused on your main task\n\n## CRITICAL: Task Completion Protocol\nYou MUST call team_complete_task when your work is done. This is NOT optional.\n- Your task is NOT considered complete until you call team_complete_task\n- Include a structured summary: what files were changed, what was done, any issues found\n- If you cannot complete the task, still call team_complete_task with what you accomplished and what remains\n\n## Guidelines\n1. Focus on YOUR assigned task — don't work on others' tasks\n2. Communicate blockers or discoveries that affect other tasks via team_message\n3. Check messages periodically for updates from teammates\n4. Avoid modifying files assigned to other teammates' tasks\n5. Delegate research or exploration to subagents when your task requires checking multiple areas\n\n## Self-Monitoring\nIf a tool fails, use audit_trail (action=\"errors\") to check patterns before retrying.\nUse audit_trail (action=\"tool_stats\") to see your tool success rates.\nIf a tool fails repeatedly, try a different approach instead of retrying the same call.\n\n## Output\nBe concise. Report progress and results clearly. Use tools to do the work.`;\n}\n\n// ============================================================================\n// TEAM-SPECIFIC TOOLS\n// ============================================================================\n\nconst TEAM_TOOLS: Anthropic.Tool[] = [\n {\n name: \"team_message\",\n description: \"Send a message to a specific teammate or the team lead\",\n input_schema: {\n type: \"object\",\n properties: {\n to: {\n type: \"string\",\n description: \"Teammate ID or 'lead' for team lead\",\n },\n message: {\n type: \"string\",\n description: \"Message content\",\n },\n },\n required: [\"to\", \"message\"],\n },\n },\n {\n name: \"team_broadcast\",\n description: \"Send a message to all teammates\",\n input_schema: {\n type: \"object\",\n properties: {\n message: {\n type: \"string\",\n description: \"Message to broadcast\",\n },\n },\n required: [\"message\"],\n },\n },\n {\n name: \"team_claim_task\",\n description: \"Claim an available task to work on\",\n input_schema: {\n type: \"object\",\n properties: {\n task_id: {\n type: \"string\",\n description: \"ID of the task to claim\",\n },\n },\n required: [\"task_id\"],\n },\n },\n {\n name: \"team_complete_task\",\n description: \"REQUIRED: Mark your current task as complete. You MUST call this tool when done — your task is not considered complete without it. Include a summary of files changed and work done.\",\n input_schema: {\n type: \"object\",\n properties: {\n result: {\n type: \"string\",\n description: \"Summary of what was accomplished\",\n },\n },\n required: [\"result\"],\n },\n },\n {\n name: \"team_check_messages\",\n description: \"Check for unread messages from teammates\",\n input_schema: {\n type: \"object\",\n properties: {},\n },\n },\n];\n\n// ============================================================================\n// TOOL EXECUTION\n// ============================================================================\n\nasync function executeTeamTool(\n toolName: string,\n input: Record<string, unknown>,\n teamId: string,\n teammateId: string,\n currentTaskId: string | null\n): Promise<{ success: boolean; output: string }> {\n switch (toolName) {\n case \"team_message\": {\n const to = input.to as string;\n const message = input.message as string;\n const result = await sendMessage(teamId, teammateId, to, message);\n return result\n ? { success: true, output: `Message sent to ${to}` }\n : { success: false, output: \"Failed to send message\" };\n }\n\n case \"team_broadcast\": {\n const message = input.message as string;\n const result = await sendMessage(teamId, teammateId, \"all\", message);\n return result\n ? { success: true, output: \"Message broadcast to all teammates\" }\n : { success: false, output: \"Failed to broadcast message\" };\n }\n\n case \"team_claim_task\": {\n const taskId = input.task_id as string;\n const task = await claimTask(teamId, taskId, teammateId);\n return task\n ? { success: true, output: `Claimed task: ${task.description}` }\n : { success: false, output: \"Failed to claim task (may be unavailable or have unmet dependencies)\" };\n }\n\n case \"team_complete_task\": {\n if (!currentTaskId) {\n return { success: false, output: \"No task currently assigned\" };\n }\n const result = input.result as string;\n const success = await completeTask(teamId, currentTaskId, result);\n return success\n ? { success: true, output: `Task completed: ${result}` }\n : { success: false, output: \"Failed to complete task\" };\n }\n\n case \"team_check_messages\": {\n const messages = await getUnreadMessages(teamId, teammateId);\n if (messages.length === 0) {\n return { success: true, output: \"No unread messages\" };\n }\n const msgList = messages.map(m => `From ${m.from}: ${m.content}`).join(\"\\n\");\n await markMessagesRead(teamId, messages.map(m => m.id));\n return { success: true, output: `${messages.length} messages:\\n${msgList}` };\n }\n\n default:\n return { success: false, output: `Unknown team tool: ${toolName}` };\n }\n}\n\n// ============================================================================\n// API CLIENT — uses shared callAgentAPI from agent-worker-base\n// ============================================================================\n\nasync function callAPI(\n modelId: string,\n systemPrompt: string,\n messages: Anthropic.MessageParam[],\n tools: Anthropic.Tool[],\n thinkingEnabled: boolean = false,\n onHeartbeat?: () => void,\n): Promise<AgentAPIResponse> {\n return callAgentAPI({\n modelId,\n contextProfile: \"teammate\",\n systemPrompt,\n messages,\n tools,\n thinkingEnabled,\n maxOutputTokens: TEAMMATE_MAX_OUTPUT_TOKENS,\n timeoutMs: API_TIMEOUT_MS,\n onHeartbeat,\n });\n}\n\n// ============================================================================\n// TEAMMATE WORKER LOOP\n// ============================================================================\n\nasync function runTeammateLoop(data: TeammateWorkerData): Promise<void> {\n const { teamId, teammateId, teammateName, model, cwd, parentConversationId, teamName, authToken, preloadedConfig, preloadedServerTools } = data;\n const modelId = MODEL_MAP[model] || MODEL_MAP.opus; // Inherit parent default\n const startTime = Date.now();\n\n // Initialize telemetry client with auth token if provided (do first for early spans)\n if (authToken) {\n initializeTelemetryClient(authToken);\n }\n\n // Use pre-loaded config from parent if available (avoids redundant DB call per child).\n // Falls back to direct DB load if parent didn't pre-load.\n if (preloadedConfig?.context_config) {\n const cc = preloadedConfig.context_config;\n TEAMMATE_MAX_TURNS_PER_TASK = cc.subagent_max_turns ?? TEAMMATE_MAX_TURNS_PER_TASK;\n TEAMMATE_MAX_OUTPUT_TOKENS = cc.subagent_max_tokens ?? TEAMMATE_MAX_OUTPUT_TOKENS;\n TEAMMATE_MAX_DURATION_MS = cc.max_duration_ms ?? TEAMMATE_MAX_DURATION_MS;\n TEAMMATE_MAX_TOTAL_TURNS = cc.teammate_max_total_turns ?? TEAMMATE_MAX_TOTAL_TURNS;\n API_TIMEOUT_MS = cc.api_timeout_ms ?? API_TIMEOUT_MS;\n TOOL_TIMEOUT_MS = cc.tool_timeout_ms ?? TOOL_TIMEOUT_MS;\n resolvedTeammateConfig = resolveAgentLoopConfig(preloadedConfig, \"sse\");\n } else {\n await resolveTeammateConfig();\n }\n\n // Each teammate gets its own conversation_id (separate trace)\n // but links to parent via parent_conversation_id\n const teammateConversationId = getConversationId(); // Worker's own ID\n\n // Create trace context for this teammate\n const teammateTraceId = generateTraceId();\n const teammateSpanId = generateSpanId();\n\n // Log teammate start - links to parent for tree hierarchy\n logSpan({\n action: \"team.teammate_start\",\n durationMs: 0,\n context: {\n traceId: teammateTraceId,\n spanId: teammateSpanId,\n conversationId: teammateConversationId,\n source: \"claude_code\",\n serviceName: \"whale-cli\",\n serviceVersion: PKG_VERSION,\n model: modelId,\n },\n details: {\n is_team: true,\n is_teammate: true,\n team_id: teamId,\n teammate_id: teammateId,\n teammate_name: teammateName,\n team_name: teamName,\n parent_conversation_id: parentConversationId, // Link to parent trace\n model: model,\n display_name: teammateName,\n display_icon: \"person.fill\",\n display_color: \"#3B82F6\",\n },\n });\n\n const report = (msg: TeammateMessage) => {\n if (process.send) {\n process.send(msg);\n }\n };\n\n // Report early — let parent know we're alive before async init\n report({ type: \"progress\", teammateId, content: `${teammateName} initializing...` });\n\n // Get all tools (local + server + team)\n const localTools: Anthropic.Tool[] = LOCAL_TOOL_DEFINITIONS.map(t => ({\n name: t.name,\n description: t.description,\n input_schema: t.input_schema as Anthropic.Tool[\"input_schema\"],\n }));\n\n // Use pre-loaded server tools from parent if available (avoids redundant API call per child)\n let serverTools: Anthropic.Tool[] = preloadedServerTools || [];\n if (!preloadedServerTools) {\n try {\n serverTools = await loadServerToolDefinitions();\n } catch { /* server tools unavailable — continue with local tools only */ }\n }\n\n // Deduplicate: local tools take priority, then server tools, then team tools\n const allTools = deduplicateTools([...localTools, ...serverTools, ...TEAM_TOOLS]);\n assertUniqueToolNames(allTools);\n\n const loopDetector = resolvedTeammateConfig\n ? LoopDetector.fromResolved(resolvedTeammateConfig)\n : new LoopDetector();\n\n let totalIn = 0;\n let totalOut = 0;\n let currentTaskId: string | null = null;\n let currentTaskModelId: string = modelId; // Per-task model (defaults to team model)\n let currentTaskThinking: boolean = false; // Per-task thinking toggle\n let messages: Anthropic.MessageParam[] = [];\n let tasksCompleted = 0;\n\n report({ type: \"progress\", teammateId, content: `${teammateName} ready (${allTools.length} tools)` });\n\n // Helper to log teammate completion\n const logTeammateComplete = (reason: string) => {\n const teammateCost = estimateCostUsd(totalIn, totalOut, modelId);\n logSpan({\n action: \"team.teammate_done\",\n durationMs: Date.now() - startTime,\n context: {\n traceId: teammateTraceId,\n spanId: generateSpanId(),\n parentSpanId: teammateSpanId,\n conversationId: teammateConversationId,\n source: \"claude_code\",\n serviceName: \"whale-cli\",\n serviceVersion: PKG_VERSION,\n model: modelId,\n inputTokens: totalIn,\n outputTokens: totalOut,\n totalCost: teammateCost,\n },\n details: {\n is_team: true,\n is_teammate: true,\n team_id: teamId,\n teammate_id: teammateId,\n teammate_name: teammateName,\n team_name: teamName,\n parent_conversation_id: parentConversationId,\n tasks_completed: tasksCompleted,\n completion_reason: reason,\n \"gen_ai.request.model\": modelId,\n \"gen_ai.usage.input_tokens\": totalIn,\n \"gen_ai.usage.output_tokens\": totalOut,\n \"gen_ai.usage.cost\": teammateCost,\n display_name: `${teammateName} done`,\n display_icon: \"checkmark.circle.fill\",\n display_color: \"#10B981\",\n },\n });\n };\n\n // Main work loop - keep working until no more tasks\n let outerTurn = 0;\n while (true) {\n // Safety: max turns guard (0 = no limit, Claude Code parity)\n if (TEAMMATE_MAX_TOTAL_TURNS > 0 && ++outerTurn > TEAMMATE_MAX_TOTAL_TURNS) {\n logTeammateComplete(\"max_turns_reached\");\n report({ type: \"done\", teammateId, content: `${teammateName} reached max turns (${TEAMMATE_MAX_TOTAL_TURNS})`, tokensUsed: { input: totalIn, output: totalOut } });\n break;\n }\n // Safety: elapsed time guard\n if (Date.now() - startTime > TEAMMATE_MAX_DURATION_MS) {\n logTeammateComplete(\"timeout\");\n report({ type: \"done\", teammateId, content: `${teammateName} timed out after ${Math.round(TEAMMATE_MAX_DURATION_MS / 60_000)}min`, tokensUsed: { input: totalIn, output: totalOut } });\n break;\n }\n\n const team = loadTeam(teamId);\n if (!team || team.status !== \"active\") {\n logTeammateComplete(\"team_inactive\");\n report({ type: \"done\", teammateId, content: \"Team completed or inactive\", tokensUsed: { input: totalIn, output: totalOut } });\n break;\n }\n\n // Find current task or claim a new one\n const currentTask = currentTaskId\n ? team.tasks.find(t => t.id === currentTaskId)\n : null;\n\n // If no current task, try to claim one\n if (!currentTask || currentTask.status === \"completed\") {\n const available = getAvailableTasks(team);\n if (available.length === 0) {\n // No tasks available, check if all done or waiting\n const inProgress = team.tasks.filter(t => t.status === \"in_progress\").length;\n if (inProgress === 0) {\n logTeammateComplete(\"all_tasks_done\");\n report({ type: \"done\", teammateId, content: \"All tasks completed\", tokensUsed: { input: totalIn, output: totalOut } });\n break;\n }\n // Wait and retry\n await new Promise(r => setTimeout(r, 2000));\n continue;\n }\n\n // Claim first available task\n const claimed = await claimTask(teamId, available[0].id, teammateId);\n if (!claimed) {\n await new Promise(r => setTimeout(r, 1000));\n continue;\n }\n\n currentTaskId = claimed.id;\n\n // Resolve per-task model: task-level → team default\n const taskModel = claimed.model || model;\n currentTaskModelId = MODEL_MAP[taskModel] || MODEL_MAP[model] || MODEL_MAP.opus;\n\n // Enable thinking for teammates — with 32K output tokens (matching Claude Code),\n // adaptive thinking has room to reason without starving code output.\n currentTaskThinking = true;\n\n await updateTeammate(teamId, teammateId, { status: \"working\", currentTask: currentTaskId });\n report({ type: \"task_started\", teammateId, taskId: currentTaskId, content: claimed.description });\n\n // Start fresh conversation for new task\n messages = [{\n role: \"user\",\n content: `Your task: ${claimed.description}\\n\\nBegin working on this task. When finished, you MUST call team_complete_task with a summary of changes made. Do not stop without calling team_complete_task.`,\n }];\n }\n\n // Build system prompt with current state\n const freshTeam = loadTeam(teamId)!;\n const freshTask = freshTeam.tasks.find(t => t.id === currentTaskId) || null;\n const systemPrompt = buildTeammatePrompt(teammateName, freshTeam, freshTask, cwd);\n\n // Agent loop for current task\n let apiError: string | null = null;\n let lastTurn = 0;\n // 0 = no limit (agent self-regulates via end_turn, Claude Code parity)\n const taskTurnLimit = TEAMMATE_MAX_TURNS_PER_TASK === 0 ? Number.MAX_SAFE_INTEGER : TEAMMATE_MAX_TURNS_PER_TASK;\n for (let turn = 0; turn < taskTurnLimit; turn++) {\n lastTurn = turn;\n const apiStart = Date.now();\n let response!: Awaited<ReturnType<typeof callAPI>>;\n try {\n response = await callAPI(currentTaskModelId, systemPrompt, messages, allTools, currentTaskThinking, () => {\n // Heartbeat during long API calls (thinking/streaming) — keeps parent stall detector alive.\n // Without this, a 90s API call = 90s silence → parent kills worker at WORKER_STALL_MS.\n report({ type: \"progress\", teammateId, content: \"streaming...\" });\n });\n } catch (err: any) {\n apiError = err.message || String(err);\n report({ type: \"progress\", teammateId, content: `API error: ${apiError!.slice(0, 80)}` });\n logSpan({\n action: \"claude_api_request\",\n durationMs: Date.now() - apiStart,\n severity: \"error\",\n error: apiError || undefined,\n context: {\n traceId: teammateTraceId,\n spanId: generateSpanId(),\n parentSpanId: teammateSpanId,\n conversationId: teammateConversationId,\n source: \"claude_code\",\n serviceName: \"whale-cli\",\n serviceVersion: PKG_VERSION,\n model: currentTaskModelId,\n },\n details: {\n is_team: true,\n is_teammate: true,\n team_id: teamId,\n teammate_id: teammateId,\n teammate_name: teammateName,\n parent_conversation_id: parentConversationId,\n turn_number: turn + 1,\n task_id: currentTaskId,\n },\n });\n break; // Exit inner loop — force-complete handler below will deal with the task\n }\n const apiDuration = Date.now() - apiStart;\n totalIn += response.usage.input_tokens;\n totalOut += response.usage.output_tokens;\n\n // Log Claude API request telemetry — include cache tokens for accurate cost\n const turnCostUsd = estimateCostUsd(\n response.usage.input_tokens,\n response.usage.output_tokens,\n currentTaskModelId,\n 0, // thinkingTokens (disabled for teammates)\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 traceId: teammateTraceId,\n spanId: generateSpanId(),\n parentSpanId: teammateSpanId,\n conversationId: teammateConversationId,\n source: \"claude_code\",\n serviceName: \"whale-cli\",\n serviceVersion: PKG_VERSION,\n model: currentTaskModelId,\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: turnCostUsd,\n },\n details: {\n is_team: true,\n is_teammate: true,\n team_id: teamId,\n teammate_id: teammateId,\n teammate_name: teammateName,\n parent_conversation_id: parentConversationId,\n turn_number: turn + 1,\n task_id: currentTaskId,\n stop_reason: response.stop_reason,\n \"gen_ai.request.model\": currentTaskModelId,\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\": turnCostUsd,\n },\n });\n\n const textBlocks = extractTextBlocks(response.content);\n const toolBlocks = extractToolUseBlocks(response.content);\n\n // Report progress\n if (textBlocks.length) {\n report({ type: \"progress\", teammateId, taskId: currentTaskId || undefined, content: textBlocks[0].text.slice(0, 200) });\n }\n\n // Compaction handling — API paused after generating context summary.\n // Replace entire message history with the compaction block (per Anthropic docs).\n if (response.stop_reason === \"compaction\") {\n const compactionBlock = response.content.find((b: any) => b.type === \"compaction\") as any;\n if (compactionBlock) {\n report({ type: \"progress\", teammateId, taskId: currentTaskId || undefined, content: \"context compacted\" });\n 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 tools = done with this turn\n if (toolBlocks.length === 0) break;\n\n // Execute tools using shared executeToolBlocks with team-specific custom executor\n let taskCompleted = false;\n\n const { toolResults } = await executeToolBlocks({\n toolBlocks,\n loopDetector,\n toolTimeoutMs: TOOL_TIMEOUT_MS,\n customExecutor: async (toolName, input): Promise<ToolExecResult | null> => {\n // Only handle team tools; return null to fall through to standard routing\n if (!TEAM_TOOLS.some(t => t.name === toolName)) return null;\n\n const result = await executeTeamTool(toolName, input, teamId, teammateId, currentTaskId);\n\n // Check if task was completed\n if (toolName === \"team_complete_task\" && result.success) {\n taskCompleted = true;\n tasksCompleted++;\n report({ type: \"task_completed\", teammateId, taskId: currentTaskId || undefined, content: result.output });\n\n // Log task completion to telemetry\n logSpan({\n action: \"team.task_complete\",\n durationMs: 0,\n context: {\n traceId: teammateTraceId,\n spanId: generateSpanId(),\n parentSpanId: teammateSpanId,\n conversationId: teammateConversationId,\n source: \"claude_code\",\n serviceName: \"whale-cli\",\n serviceVersion: PKG_VERSION,\n },\n details: {\n is_team: true,\n is_teammate: true,\n team_id: teamId,\n teammate_id: teammateId,\n teammate_name: teammateName,\n parent_conversation_id: parentConversationId,\n task_id: currentTaskId,\n task_result: result.output.slice(0, 500),\n display_name: \"Task completed\",\n display_icon: \"checkmark.square.fill\",\n display_color: \"#10B981\",\n },\n });\n }\n\n return result;\n },\n callbacks: {\n onToolEnd: (toolName, success, durationMs) => {\n // Heartbeat: report tool activity to parent so stall detector knows we're alive.\n // Without this, tool-only responses (no text blocks) never update lastMessageTime\n // and the worker gets false-positive killed after WORKER_STALL_MS.\n report({ type: \"progress\", teammateId, taskId: currentTaskId || undefined, content: `${toolName} (${durationMs}ms)` });\n\n // Determine tool category for telemetry\n const toolCategory = TEAM_TOOLS.some(t => t.name === toolName) ? \"team\" : \"standard\";\n\n logSpan({\n action: `tool.${toolName}`,\n durationMs,\n severity: success ? \"info\" : \"error\",\n context: {\n traceId: teammateTraceId,\n spanId: generateSpanId(),\n parentSpanId: teammateSpanId,\n conversationId: teammateConversationId,\n source: \"claude_code\",\n serviceName: \"whale-cli\",\n serviceVersion: PKG_VERSION,\n },\n error: success ? undefined : \"(see tool result)\",\n details: {\n is_team: true,\n is_teammate: true,\n team_id: teamId,\n teammate_id: teammateId,\n teammate_name: teammateName,\n parent_conversation_id: parentConversationId,\n tool_category: toolCategory,\n },\n });\n },\n },\n });\n\n // Append to messages\n messages.push({ role: \"assistant\", content: response.content });\n messages.push({ role: \"user\", content: toolResults });\n\n // Pre-compact: trim large tool results and thinking blocks to prevent context bloat.\n // Without this, teammate context grows unbounded (same issue as subagent pre-fix).\n const maxToolResultChars = resolvedTeammateConfig?.maxToolResultChars ?? AGENT_DEFAULTS.maxToolResultChars;\n const { messages: compactedMessages } = preCompact(\n messages,\n { maxToolResultChars, stripThinking: true },\n );\n messages = compactedMessages;\n\n // If task was completed, break out to get next task\n if (taskCompleted) {\n currentTaskId = null;\n await updateTeammate(teamId, teammateId, { status: \"idle\", currentTask: undefined });\n break;\n }\n }\n\n // If inner loop ended without the model calling team_complete_task (exhausted turns, API error, or model end_turn)\n if (currentTaskId) {\n const team = loadTeam(teamId);\n const task = team?.tasks.find(t => t.id === currentTaskId);\n if (task && task.status === \"in_progress\") {\n if (apiError) {\n // API failed — mark task as failed, not completed\n await failTask(teamId, currentTaskId, apiError);\n // Report as progress (not error) — error type causes red flash in UI via handleTeammateFailure double-handling\n report({ type: \"progress\", teammateId, taskId: currentTaskId, content: `Task failed: ${apiError.slice(0, 80)}` });\n } else if (totalIn === 0 && totalOut === 0) {\n // Zero tokens used means no real work was done — fail the task\n await failTask(teamId, currentTaskId, \"No API response received (0 tokens)\");\n report({ type: \"progress\", teammateId, taskId: currentTaskId, content: \"Task failed: no API response\" });\n } else {\n // Model stopped (end_turn) or exhausted turns — auto-complete with result\n const hitTurnLimit = lastTurn >= taskTurnLimit - 1;\n const lastText = messages.length > 0 ? messages[messages.length - 1] : null;\n let partialResult = hitTurnLimit\n ? `Task auto-completed after reaching turn limit (${taskTurnLimit} turns).`\n : \"Task completed (model finished).\";\n if (lastText && typeof lastText === \"object\" && \"content\" in lastText) {\n const content = lastText.content;\n if (typeof content === \"string\") partialResult = content.slice(0, 500);\n else if (Array.isArray(content)) {\n const txt = content.find((b: any) => b.type === \"text\");\n if (txt && \"text\" in txt) partialResult = (txt as any).text.slice(0, 500);\n }\n }\n await completeTask(teamId, currentTaskId, partialResult);\n tasksCompleted++;\n report({ type: \"task_completed\", teammateId, taskId: currentTaskId, content: partialResult });\n }\n }\n currentTaskId = null;\n await updateTeammate(teamId, teammateId, { status: \"idle\", currentTask: undefined });\n }\n }\n\n // Final update\n await updateTeammate(teamId, teammateId, {\n status: \"done\",\n currentTask: undefined,\n tokensUsed: { input: totalIn, output: totalOut },\n });\n}\n\n// ============================================================================\n// CHILD PROCESS ENTRY POINT\n// ============================================================================\n\n// Detect if we were forked as a child process (process.send exists when IPC channel is open)\nif (process.send && process.argv.includes(\"--teammate-child\")) {\n // Wait for startup data from parent via IPC\n process.on(\"message\", (msg: any) => {\n if (msg?.type === \"__teammate_start\") {\n const data = msg.data as TeammateWorkerData;\n\n // Catch ALL errors including module-level and unhandled rejections\n process.on(\"uncaughtException\", (err) => {\n try {\n process.send!({\n type: \"error\",\n teammateId: data.teammateId,\n content: `Uncaught exception: ${err.message || String(err)}`,\n });\n } catch { /* last resort — nothing we can do */ }\n process.exit(1);\n });\n process.on(\"unhandledRejection\", (reason) => {\n try {\n process.send!({\n type: \"error\",\n teammateId: data.teammateId,\n content: `Unhandled rejection: ${reason instanceof Error ? reason.message : String(reason)}`,\n });\n } catch { /* last resort */ }\n });\n\n runTeammateLoop(data)\n .catch(err => {\n process.send!({\n type: \"error\",\n teammateId: data.teammateId,\n content: err.message || String(err),\n });\n })\n .finally(() => {\n // Flush telemetry spans before exiting\n flushCliSpans();\n // Brief delay for final IPC messages and telemetry to flush,\n // then exit cleanly. With process isolation, OS reclaims all resources.\n setTimeout(() => process.exit(0), 300);\n });\n }\n });\n}\n\n// ============================================================================\n// SPAWN TEAMMATE (from main thread)\n// ============================================================================\n\nexport async function spawnTeammate(\n teamId: string,\n teammateId: string,\n teammateName: string,\n model: string,\n cwd: string,\n parentConversationId: string,\n teamName: string,\n preloadedConfig?: CLIAgentConfig | null,\n preloadedServerTools?: Anthropic.Tool[],\n): Promise<ChildProcess> {\n const __filename = fileURLToPath(import.meta.url);\n\n // Get auth token to pass to child for telemetry\n const authToken = await getValidToken();\n\n // Fork a child process running this same file with --teammate-child flag\n const child = fork(__filename, [\"--teammate-child\"], {\n cwd,\n stdio: [\"pipe\", \"pipe\", \"pipe\", \"ipc\"],\n // Inherit parent's env so NODE_PATH, API keys etc. are available\n env: { ...process.env },\n });\n\n // Send startup data via IPC (replaces workerData)\n // Pre-loaded config and tools avoid each child making redundant DB/API calls\n child.send({\n type: \"__teammate_start\",\n data: {\n teamId,\n teammateId,\n teammateName,\n model,\n cwd,\n parentConversationId,\n teamName,\n authToken: authToken || undefined,\n preloadedConfig: preloadedConfig ?? undefined,\n preloadedServerTools: preloadedServerTools ?? undefined,\n } as TeammateWorkerData,\n });\n\n return child;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -6,6 +6,7 @@
6
6
  * Uses same column schema as server-side telemetry (trace_id, span_id, etc).
7
7
  * Never blocks or crashes the chat.
8
8
  */
9
+ export declare const PKG_VERSION: string;
9
10
  export interface ExecutionContext {
10
11
  source: string;
11
12
  userId?: string;
@@ -26,6 +27,8 @@ export interface ExecutionContext {
26
27
  model?: string;
27
28
  inputTokens?: number;
28
29
  outputTokens?: number;
30
+ cacheReadTokens?: number;
31
+ cacheCreationTokens?: number;
29
32
  totalCost?: number;
30
33
  costBefore?: number;
31
34
  turnCost?: number;
@@ -43,8 +46,10 @@ export declare function getConversationId(): string;
43
46
  /**
44
47
  * Initialize the telemetry client with a specific auth token.
45
48
  * Used by worker threads that receive the token from the parent.
49
+ * Spans are now sent via HTTP (not Supabase direct), so this is a no-op
50
+ * retained for API compatibility.
46
51
  */
47
- export declare function initializeTelemetryClient(authToken: string): void;
52
+ export declare function initializeTelemetryClient(_authToken: string): void;
48
53
  export declare function generateTraceId(): string;
49
54
  export declare function generateSpanId(): string;
50
55
  export declare function nextTurn(): number;
@@ -6,228 +6,251 @@
6
6
  * Uses same column schema as server-side telemetry (trace_id, span_id, etc).
7
7
  * Never blocks or crashes the chat.
8
8
  */
9
+
9
10
  import { createRequire } from "module";
10
11
  import os from "node:os";
11
12
  import { resolveConfig, loadConfig } from "./config-store.js";
12
- import { getValidToken, createAuthenticatedClient } from "./auth-service.js";
13
+ import { getValidToken } from "./auth-service.js";
13
14
  import { captureError } from "./error-logger.js";
14
15
  const require = createRequire(import.meta.url);
15
- const PKG_VERSION = require("../../../package.json").version;
16
+ export const PKG_VERSION = require("../../../package.json").version;
17
+
18
+ // Telemetry context for tracing — formerly in executor.ts, now owned here.
19
+
16
20
  // ============================================================================
17
21
  // SESSION STATE
18
22
  // ============================================================================
23
+
19
24
  let conversationId = crypto.randomUUID();
20
25
  let turnNumber = 0;
26
+
21
27
  /**
22
28
  * Set the conversation ID (used by worker threads to share parent's conversation)
23
29
  */
24
30
  export function setConversationId(id) {
25
- conversationId = id;
31
+ conversationId = id;
26
32
  }
33
+
27
34
  /**
28
35
  * Get the current conversation ID
29
36
  */
30
37
  export function getConversationId() {
31
- return conversationId;
38
+ return conversationId;
32
39
  }
33
- let supabaseClient = null;
34
40
  /**
35
41
  * Initialize the telemetry client with a specific auth token.
36
42
  * Used by worker threads that receive the token from the parent.
43
+ * Spans are now sent via HTTP (not Supabase direct), so this is a no-op
44
+ * retained for API compatibility.
37
45
  */
38
- export function initializeTelemetryClient(authToken) {
39
- if (supabaseClient)
40
- return; // Already initialized
41
- supabaseClient = createAuthenticatedClient(authToken);
42
- if (process.env.DEBUG_TELEMETRY) {
43
- process.stderr.write(`[telemetry] initialized client with provided auth token\n`);
44
- }
46
+ export function initializeTelemetryClient(_authToken) {
47
+ // Spans flow via _sendSpans() → HTTP → server → ClickHouse.
48
+ // No Supabase client needed.
45
49
  }
50
+
46
51
  // ============================================================================
47
52
  // W3C TRACE CONTEXT GENERATORS
48
53
  // ============================================================================
54
+
49
55
  export function generateTraceId() {
50
- // Use proper UUID format so it's compatible with Postgres uuid columns
51
- return crypto.randomUUID();
56
+ // Use proper UUID format so it's compatible with Postgres uuid columns
57
+ return crypto.randomUUID();
52
58
  }
53
59
  export function generateSpanId() {
54
- const bytes = new Uint8Array(8);
55
- crypto.getRandomValues(bytes);
56
- return Array.from(bytes).map(b => b.toString(16).padStart(2, "0")).join("");
60
+ const bytes = new Uint8Array(8);
61
+ crypto.getRandomValues(bytes);
62
+ return Array.from(bytes).map(b => b.toString(16).padStart(2, "0")).join("");
57
63
  }
64
+
58
65
  // ============================================================================
59
66
  // TURN CONTEXT
60
67
  // ============================================================================
68
+
61
69
  export function nextTurn() {
62
- return ++turnNumber;
70
+ return ++turnNumber;
63
71
  }
64
72
  export function createTurnContext(overrides) {
65
- // Get user info from config
66
- const { user_id, email } = loadConfig();
67
- return {
68
- source: "whale_cli",
69
- serviceName: "whale-code",
70
- serviceVersion: PKG_VERSION,
71
- conversationId,
72
- turnNumber,
73
- traceId: generateTraceId(),
74
- spanId: generateSpanId(),
75
- traceFlags: 1,
76
- userId: user_id,
77
- userEmail: email,
78
- ...overrides,
79
- };
73
+ // Get user info from config
74
+ const {
75
+ user_id,
76
+ email
77
+ } = loadConfig();
78
+ return {
79
+ source: "whale_cli",
80
+ serviceName: "whale-code",
81
+ serviceVersion: PKG_VERSION,
82
+ conversationId,
83
+ turnNumber,
84
+ traceId: generateTraceId(),
85
+ spanId: generateSpanId(),
86
+ traceFlags: 1,
87
+ userId: user_id,
88
+ userEmail: email,
89
+ ...overrides
90
+ };
80
91
  }
81
92
  export function getTurnNumber() {
82
- return turnNumber;
93
+ return turnNumber;
83
94
  }
95
+
84
96
  // ============================================================================
85
97
  // SPAN BUFFER — batches spans for bulk POST to the Fly.io server
86
98
  // Same pattern as server's clickhouse-buffer.ts but over HTTP.
87
99
  // ============================================================================
100
+
88
101
  const FLUSH_INTERVAL = 2000; // 2s (slower than server — HTTP has more overhead)
89
102
  const FLUSH_MAX = 50; // max spans before force flush
90
103
  const spanBuffer = [];
91
104
  let flushTimer = null;
92
105
  let conversationRegistered = false;
93
106
  function queueCliSpan(span) {
94
- spanBuffer.push(span);
95
- if (spanBuffer.length >= FLUSH_MAX) {
96
- flushCliSpans();
97
- }
98
- else if (!flushTimer) {
99
- flushTimer = setTimeout(() => {
100
- flushTimer = null;
101
- flushCliSpans();
102
- }, FLUSH_INTERVAL);
103
- }
107
+ spanBuffer.push(span);
108
+ if (spanBuffer.length >= FLUSH_MAX) {
109
+ flushCliSpans();
110
+ } else if (!flushTimer) {
111
+ flushTimer = setTimeout(() => {
112
+ flushTimer = null;
113
+ flushCliSpans();
114
+ }, FLUSH_INTERVAL);
115
+ }
104
116
  }
117
+
105
118
  /**
106
119
  * Flush all buffered spans to the Fly.io server.
107
120
  * Call this on session end or at shutdown.
108
121
  */
109
122
  export function flushCliSpans() {
110
- if (flushTimer) {
111
- clearTimeout(flushTimer);
112
- flushTimer = null;
123
+ if (flushTimer) {
124
+ clearTimeout(flushTimer);
125
+ flushTimer = null;
126
+ }
127
+ if (spanBuffer.length === 0) return;
128
+ const batch = spanBuffer.splice(0, spanBuffer.length);
129
+ // Fire-and-forget — never block the chat
130
+ _sendSpans(batch).catch(err => {
131
+ if (process.env.DEBUG_TELEMETRY) {
132
+ process.stderr.write(`[telemetry] flush error: ${err.message}\n`);
113
133
  }
114
- if (spanBuffer.length === 0)
115
- return;
116
- const batch = spanBuffer.splice(0, spanBuffer.length);
117
- // Fire-and-forget — never block the chat
118
- _sendSpans(batch).catch((err) => {
119
- if (process.env.DEBUG_TELEMETRY) {
120
- process.stderr.write(`[telemetry] flush error: ${err.message}\n`);
121
- }
122
- });
134
+ });
123
135
  }
124
136
  async function _sendSpans(spans) {
125
- const config = resolveConfig();
126
- if (!config.serverUrl)
127
- return;
128
- let authToken = config.supabaseKey;
129
- if (!authToken) {
130
- authToken = await getValidToken() || "";
131
- }
132
- if (!authToken)
133
- return;
134
- const fileConfig = loadConfig();
135
- const body = {
136
- mode: "telemetry_ingest",
137
- spans,
138
- conversation_id: conversationId,
139
- store_id: config.storeId || undefined,
140
- userId: fileConfig.user_id || undefined,
141
- userEmail: fileConfig.email || undefined,
142
- source: "whale_cli",
143
- };
144
- // Include conversation metadata on first flush so server creates the row
145
- if (!conversationRegistered) {
146
- conversationRegistered = true;
147
- body.conversation_title = `CLI Session ${new Date().toISOString().split("T")[0]}`;
148
- body.hostname = os.hostname();
149
- body.version = PKG_VERSION;
150
- }
151
- try {
152
- const response = await fetch(config.serverUrl, {
153
- method: "POST",
154
- headers: {
155
- "Content-Type": "application/json",
156
- "Authorization": `Bearer ${authToken}`,
157
- },
158
- body: JSON.stringify(body),
159
- });
160
- if (!response.ok && process.env.DEBUG_TELEMETRY) {
161
- const text = await response.text().catch(() => "");
162
- process.stderr.write(`[telemetry] ingest failed (${response.status}): ${text.slice(0, 200)}\n`);
163
- }
137
+ const config = resolveConfig();
138
+ if (!config.serverUrl) return;
139
+ let authToken = config.supabaseKey;
140
+ if (!authToken) {
141
+ authToken = (await getValidToken()) || "";
142
+ }
143
+ if (!authToken) return;
144
+ const fileConfig = loadConfig();
145
+ const body = {
146
+ mode: "telemetry_ingest",
147
+ spans,
148
+ conversation_id: conversationId,
149
+ store_id: config.storeId || undefined,
150
+ userId: fileConfig.user_id || undefined,
151
+ userEmail: fileConfig.email || undefined,
152
+ source: "whale_cli"
153
+ };
154
+
155
+ // Include conversation metadata on first flush so server creates the row
156
+ if (!conversationRegistered) {
157
+ conversationRegistered = true;
158
+ body.conversation_title = `CLI Session ${new Date().toISOString().split("T")[0]}`;
159
+ body.hostname = os.hostname();
160
+ body.version = PKG_VERSION;
161
+ }
162
+ try {
163
+ const response = await fetch(config.serverUrl, {
164
+ method: "POST",
165
+ headers: {
166
+ "Content-Type": "application/json",
167
+ "Authorization": `Bearer ${authToken}`
168
+ },
169
+ body: JSON.stringify(body)
170
+ });
171
+ if (!response.ok && process.env.DEBUG_TELEMETRY) {
172
+ const text = await response.text().catch(() => "");
173
+ process.stderr.write(`[telemetry] ingest failed (${response.status}): ${text.slice(0, 200)}\n`);
164
174
  }
165
- catch (err) {
166
- if (process.env.DEBUG_TELEMETRY) {
167
- process.stderr.write(`[telemetry] ingest error: ${err.message}\n`);
168
- }
175
+ } catch (err) {
176
+ if (process.env.DEBUG_TELEMETRY) {
177
+ process.stderr.write(`[telemetry] ingest error: ${err.message}\n`);
169
178
  }
179
+ }
170
180
  }
181
+
182
+ // ============================================================================
183
+ // LOG SPAN (fire-and-forget)
184
+ // ============================================================================
185
+
171
186
  export function logSpan(opts) {
172
- // Fire-and-forget — don't await, log errors in debug mode
173
- _logSpan(opts).catch((err) => {
174
- if (process.env.DEBUG_TELEMETRY) {
175
- process.stderr.write(`[telemetry error] ${opts.action}: ${err.message}\n`);
176
- }
177
- });
178
- }
179
- async function _logSpan(opts) {
187
+ // Fire-and-forget — don't await, log errors in debug mode
188
+ _logSpan(opts).catch(err => {
180
189
  if (process.env.DEBUG_TELEMETRY) {
181
- process.stderr.write(`[telemetry] _logSpan called for ${opts.action}\n`);
190
+ process.stderr.write(`[telemetry error] ${opts.action}: ${err.message}\n`);
182
191
  }
183
- const ctx = opts.context;
184
- const now = new Date();
185
- const startedAt = new Date(now.getTime() - opts.durationMs).toISOString();
186
- const endedAt = now.toISOString();
187
- // Build span in same shape as server's auditRowToSpan input
188
- const span = {
189
- action: opts.action,
190
- severity: opts.severity || (opts.error ? "error" : "info"),
191
- store_id: opts.storeId || resolveConfig().storeId || null,
192
- source: ctx.source || "whale_cli",
193
- service_name: ctx.serviceName || "whale-code",
194
- span_kind: "INTERNAL",
195
- status_code: opts.error ? "ERROR" : "OK",
196
- trace_id: ctx.traceId || null,
197
- span_id: ctx.spanId || generateSpanId(),
198
- conversation_id: ctx.conversationId || conversationId,
199
- user_id: ctx.userId || null,
200
- user_email: ctx.userEmail || null,
201
- start_time: startedAt,
202
- end_time: endedAt,
203
- duration_ms: opts.durationMs,
204
- error_message: opts.error || null,
205
- details: {
206
- ...opts.details,
207
- input_tokens: ctx.inputTokens,
208
- output_tokens: ctx.outputTokens,
209
- total_cost: ctx.totalCost,
210
- model: ctx.model,
211
- turn_number: ctx.turnNumber,
212
- agent_id: ctx.agentId,
213
- agent_name: ctx.agentName,
214
- tool_type: ctx.toolType,
215
- },
216
- };
217
- // Queue for batch send to server → ClickHouse
218
- queueCliSpan(span);
219
- // Also bridge errors to the error logging system (Postgres)
220
- if (opts.error) {
221
- captureError({
222
- errorType: opts.action,
223
- errorMessage: opts.error,
224
- severity: "error",
225
- traceId: ctx.traceId,
226
- spanId: ctx.spanId,
227
- storeId: opts.storeId || resolveConfig().storeId,
228
- userId: ctx.userId,
229
- userEmail: ctx.userEmail,
230
- tags: { action: opts.action },
231
- });
192
+ });
193
+ }
194
+ async function _logSpan(opts) {
195
+ if (process.env.DEBUG_TELEMETRY) {
196
+ process.stderr.write(`[telemetry] _logSpan called for ${opts.action}\n`);
197
+ }
198
+ const ctx = opts.context;
199
+ const now = new Date();
200
+ const startedAt = new Date(now.getTime() - opts.durationMs).toISOString();
201
+ const endedAt = now.toISOString();
202
+
203
+ // Build span in same shape as server's auditRowToSpan input
204
+ const span = {
205
+ action: opts.action,
206
+ severity: opts.severity || (opts.error ? "error" : "info"),
207
+ store_id: opts.storeId || resolveConfig().storeId || null,
208
+ source: ctx.source || "whale_cli",
209
+ service_name: ctx.serviceName || "whale-code",
210
+ span_kind: "INTERNAL",
211
+ status_code: opts.error ? "ERROR" : "OK",
212
+ trace_id: ctx.traceId || null,
213
+ span_id: ctx.spanId || generateSpanId(),
214
+ conversation_id: ctx.conversationId || conversationId,
215
+ user_id: ctx.userId || null,
216
+ user_email: ctx.userEmail || null,
217
+ start_time: startedAt,
218
+ end_time: endedAt,
219
+ duration_ms: opts.durationMs,
220
+ error_message: opts.error || null,
221
+ details: {
222
+ ...opts.details,
223
+ input_tokens: ctx.inputTokens,
224
+ output_tokens: ctx.outputTokens,
225
+ cache_read_tokens: ctx.cacheReadTokens,
226
+ cache_creation_tokens: ctx.cacheCreationTokens,
227
+ total_cost: ctx.totalCost,
228
+ model: ctx.model,
229
+ turn_number: ctx.turnNumber,
230
+ agent_id: ctx.agentId,
231
+ agent_name: ctx.agentName,
232
+ tool_type: ctx.toolType
232
233
  }
234
+ };
235
+
236
+ // Queue for batch send to server → ClickHouse
237
+ queueCliSpan(span);
238
+
239
+ // Also bridge errors to the error logging system (Postgres)
240
+ if (opts.error) {
241
+ captureError({
242
+ errorType: opts.action,
243
+ errorMessage: opts.error,
244
+ severity: "error",
245
+ traceId: ctx.traceId,
246
+ spanId: ctx.spanId,
247
+ storeId: opts.storeId || resolveConfig().storeId,
248
+ userId: ctx.userId,
249
+ userEmail: ctx.userEmail,
250
+ tags: {
251
+ action: opts.action
252
+ }
253
+ });
254
+ }
233
255
  }
256
+ //# sourceMappingURL=telemetry.js.map