whale-code 6.5.4 → 6.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (853) hide show
  1. package/README.md +39 -31
  2. package/bin/{swagmanager-mcp.js → whale-code.js} +17 -2
  3. package/dist/cli/app.js +148 -72
  4. package/dist/cli/app.js.map +1 -0
  5. package/dist/cli/chat/AgentSelector.js +105 -10
  6. package/dist/cli/chat/AgentSelector.js.map +1 -0
  7. package/dist/cli/chat/ChatApp.d.ts +31 -0
  8. package/dist/cli/chat/ChatApp.js +539 -286
  9. package/dist/cli/chat/ChatApp.js.map +1 -0
  10. package/dist/cli/chat/ChatInput.js +1088 -770
  11. package/dist/cli/chat/ChatInput.js.map +1 -0
  12. package/dist/cli/chat/MarkdownText.js +39 -14
  13. package/dist/cli/chat/MarkdownText.js.map +1 -0
  14. package/dist/cli/chat/MemoryManager.js +181 -46
  15. package/dist/cli/chat/MemoryManager.js.map +1 -0
  16. package/dist/cli/chat/MessageList.d.ts +2 -3
  17. package/dist/cli/chat/MessageList.js +186 -45
  18. package/dist/cli/chat/MessageList.js.map +1 -0
  19. package/dist/cli/chat/ModelSelector.js +282 -63
  20. package/dist/cli/chat/ModelSelector.js.map +1 -0
  21. package/dist/cli/chat/NodeManager.js +165 -75
  22. package/dist/cli/chat/NodeManager.js.map +1 -0
  23. package/dist/cli/chat/NodeSelector.js +171 -30
  24. package/dist/cli/chat/NodeSelector.js.map +1 -0
  25. package/dist/cli/chat/PlanApproval.js +281 -57
  26. package/dist/cli/chat/PlanApproval.js.map +1 -0
  27. package/dist/cli/chat/RewindViewer.js +559 -144
  28. package/dist/cli/chat/RewindViewer.js.map +1 -0
  29. package/dist/cli/chat/SessionManager.js +137 -30
  30. package/dist/cli/chat/SessionManager.js.map +1 -0
  31. package/dist/cli/chat/SlashMenu.js +293 -164
  32. package/dist/cli/chat/SlashMenu.js.map +1 -0
  33. package/dist/cli/chat/StatusBar.js +172 -9
  34. package/dist/cli/chat/StatusBar.js.map +1 -0
  35. package/dist/cli/chat/StoreSelector.js +147 -18
  36. package/dist/cli/chat/StoreSelector.js.map +1 -0
  37. package/dist/cli/chat/StreamingText.d.ts +1 -5
  38. package/dist/cli/chat/StreamingText.js +22 -7
  39. package/dist/cli/chat/StreamingText.js.map +1 -0
  40. package/dist/cli/chat/SubagentPanel.d.ts +1 -2
  41. package/dist/cli/chat/SubagentPanel.js +612 -72
  42. package/dist/cli/chat/SubagentPanel.js.map +1 -0
  43. package/dist/cli/chat/TeamPanel.d.ts +1 -0
  44. package/dist/cli/chat/TeamPanel.js +230 -30
  45. package/dist/cli/chat/TeamPanel.js.map +1 -0
  46. package/dist/cli/chat/ThemeSelector.js +84 -24
  47. package/dist/cli/chat/ThemeSelector.js.map +1 -0
  48. package/dist/cli/chat/ToolIndicator.js +1476 -371
  49. package/dist/cli/chat/ToolIndicator.js.map +1 -0
  50. package/dist/cli/chat/hooks/useAgentLoop.d.ts +1 -0
  51. package/dist/cli/chat/hooks/useAgentLoop.js +481 -367
  52. package/dist/cli/chat/hooks/useAgentLoop.js.map +1 -0
  53. package/dist/cli/chat/hooks/useSlashCommands.d.ts +3 -14
  54. package/dist/cli/chat/hooks/useSlashCommands.js +744 -572
  55. package/dist/cli/chat/hooks/useSlashCommands.js.map +1 -0
  56. package/dist/cli/commands/config-cmd.js +56 -57
  57. package/dist/cli/commands/config-cmd.js.map +1 -0
  58. package/dist/cli/commands/db.js +184 -169
  59. package/dist/cli/commands/db.js.map +1 -0
  60. package/dist/cli/commands/doctor.js +212 -122
  61. package/dist/cli/commands/doctor.js.map +1 -0
  62. package/dist/cli/commands/init.js +211 -244
  63. package/dist/cli/commands/init.js.map +1 -0
  64. package/dist/cli/commands/mcp.js +127 -122
  65. package/dist/cli/commands/mcp.js.map +1 -0
  66. package/dist/cli/login/LoginApp.js +355 -141
  67. package/dist/cli/login/LoginApp.js.map +1 -0
  68. package/dist/cli/print-mode.js +196 -177
  69. package/dist/cli/print-mode.js.map +1 -0
  70. package/dist/cli/serve-mode.js +615 -530
  71. package/dist/cli/serve-mode.js.map +1 -0
  72. package/dist/cli/services/agent-config.d.ts +29 -0
  73. package/dist/cli/services/agent-config.js +91 -0
  74. package/dist/cli/services/agent-config.js.map +1 -0
  75. package/dist/cli/services/agent-definitions.d.ts +4 -1
  76. package/dist/cli/services/agent-definitions.js +97 -56
  77. package/dist/cli/services/agent-definitions.js.map +1 -0
  78. package/dist/cli/services/agent-events.js +225 -162
  79. package/dist/cli/services/agent-events.js.map +1 -0
  80. package/dist/cli/services/agent-loop.js +978 -669
  81. package/dist/cli/services/agent-loop.js.map +1 -0
  82. package/dist/cli/services/agent-worker-base.d.ts +35 -5
  83. package/dist/cli/services/agent-worker-base.js +337 -153
  84. package/dist/cli/services/agent-worker-base.js.map +1 -0
  85. package/dist/cli/services/api-retry.js +69 -64
  86. package/dist/cli/services/api-retry.js.map +1 -0
  87. package/dist/cli/services/auth-service.d.ts +3 -3
  88. package/dist/cli/services/auth-service.js +209 -132
  89. package/dist/cli/services/auth-service.js.map +1 -0
  90. package/dist/cli/services/background-processes.js +343 -267
  91. package/dist/cli/services/background-processes.js.map +1 -0
  92. package/dist/cli/services/browser-auth.d.ts +2 -2
  93. package/dist/cli/services/browser-auth.js +159 -118
  94. package/dist/cli/services/browser-auth.js.map +1 -0
  95. package/dist/cli/services/claude-md-loader.js +40 -36
  96. package/dist/cli/services/claude-md-loader.js.map +1 -0
  97. package/dist/cli/services/config-store.d.ts +9 -4
  98. package/dist/cli/services/config-store.js +164 -117
  99. package/dist/cli/services/config-store.js.map +1 -0
  100. package/dist/cli/services/debug-log.d.ts +1 -1
  101. package/dist/cli/services/debug-log.js +34 -35
  102. package/dist/cli/services/debug-log.js.map +1 -0
  103. package/dist/cli/services/env-detect.d.ts +7 -0
  104. package/dist/cli/services/env-detect.js +9 -0
  105. package/dist/cli/services/env-detect.js.map +1 -0
  106. package/dist/cli/services/error-logger.d.ts +2 -3
  107. package/dist/cli/services/error-logger.js +189 -180
  108. package/dist/cli/services/error-logger.js.map +1 -0
  109. package/dist/cli/services/file-history.d.ts +1 -1
  110. package/dist/cli/services/file-history.js +50 -54
  111. package/dist/cli/services/file-history.js.map +1 -0
  112. package/dist/cli/services/format-server-response.js +332 -372
  113. package/dist/cli/services/format-server-response.js.map +1 -0
  114. package/dist/cli/services/git-context.js +61 -45
  115. package/dist/cli/services/git-context.js.map +1 -0
  116. package/dist/cli/services/hooks.d.ts +2 -2
  117. package/dist/cli/services/hooks.js +195 -180
  118. package/dist/cli/services/hooks.js.map +1 -0
  119. package/dist/cli/services/ink-incremental.d.ts +19 -0
  120. package/dist/cli/services/ink-incremental.js +59 -0
  121. package/dist/cli/services/ink-incremental.js.map +1 -0
  122. package/dist/cli/services/ink-resize-fix.js +54 -44
  123. package/dist/cli/services/ink-resize-fix.js.map +1 -0
  124. package/dist/cli/services/ink-sync-output.d.ts +12 -0
  125. package/dist/cli/services/ink-sync-output.js +16 -0
  126. package/dist/cli/services/ink-sync-output.js.map +1 -0
  127. package/dist/cli/services/interactive-tools.js +268 -212
  128. package/dist/cli/services/interactive-tools.js.map +1 -0
  129. package/dist/cli/services/keybinding-manager.d.ts +11 -1
  130. package/dist/cli/services/keybinding-manager.js +126 -63
  131. package/dist/cli/services/keybinding-manager.js.map +1 -0
  132. package/dist/cli/services/local-tools.d.ts +1 -1
  133. package/dist/cli/services/local-tools.js +939 -656
  134. package/dist/cli/services/local-tools.js.map +1 -0
  135. package/dist/cli/services/lsp-manager.js +757 -594
  136. package/dist/cli/services/lsp-manager.js.map +1 -0
  137. package/dist/cli/services/mcp-client.d.ts +1 -1
  138. package/dist/cli/services/mcp-client.js +173 -134
  139. package/dist/cli/services/mcp-client.js.map +1 -0
  140. package/dist/cli/services/memory-manager.js +53 -40
  141. package/dist/cli/services/memory-manager.js.map +1 -0
  142. package/dist/cli/services/model-manager.js +55 -40
  143. package/dist/cli/services/model-manager.js.map +1 -0
  144. package/dist/cli/services/model-router.js +115 -85
  145. package/dist/cli/services/model-router.js.map +1 -0
  146. package/dist/cli/services/paths.d.ts +30 -0
  147. package/dist/cli/services/paths.js +81 -0
  148. package/dist/cli/services/paths.js.map +1 -0
  149. package/dist/cli/services/permission-modes.js +32 -25
  150. package/dist/cli/services/permission-modes.js.map +1 -0
  151. package/dist/cli/services/rewind.js +182 -168
  152. package/dist/cli/services/rewind.js.map +1 -0
  153. package/dist/cli/services/ripgrep.js +115 -115
  154. package/dist/cli/services/ripgrep.js.map +1 -0
  155. package/dist/cli/services/sandbox.d.ts +1 -1
  156. package/dist/cli/services/sandbox.js +58 -37
  157. package/dist/cli/services/sandbox.js.map +1 -0
  158. package/dist/cli/services/server-tools.js +738 -565
  159. package/dist/cli/services/server-tools.js.map +1 -0
  160. package/dist/cli/services/session-persistence.js +69 -74
  161. package/dist/cli/services/session-persistence.js.map +1 -0
  162. package/dist/cli/services/subagent-worker.js +42 -27
  163. package/dist/cli/services/subagent-worker.js.map +1 -0
  164. package/dist/cli/services/subagent.d.ts +2 -0
  165. package/dist/cli/services/subagent.js +606 -430
  166. package/dist/cli/services/subagent.js.map +1 -0
  167. package/dist/cli/services/system-prompt.js +86 -78
  168. package/dist/cli/services/system-prompt.js.map +1 -0
  169. package/dist/cli/services/task-decomposer.d.ts +1 -1
  170. package/dist/cli/services/task-decomposer.js +172 -139
  171. package/dist/cli/services/task-decomposer.js.map +1 -0
  172. package/dist/cli/services/team-lead.d.ts +2 -2
  173. package/dist/cli/services/team-lead.js +727 -529
  174. package/dist/cli/services/team-lead.js.map +1 -0
  175. package/dist/cli/services/team-state.js +319 -319
  176. package/dist/cli/services/team-state.js.map +1 -0
  177. package/dist/cli/services/teammate.d.ts +8 -2
  178. package/dist/cli/services/teammate.js +862 -560
  179. package/dist/cli/services/teammate.js.map +1 -0
  180. package/dist/cli/services/telemetry.d.ts +6 -1
  181. package/dist/cli/services/telemetry.js +180 -157
  182. package/dist/cli/services/telemetry.js.map +1 -0
  183. package/dist/cli/services/tools/agent-tools.d.ts +3 -3
  184. package/dist/cli/services/tools/agent-tools.js +480 -322
  185. package/dist/cli/services/tools/agent-tools.js.map +1 -0
  186. package/dist/cli/services/tools/file-ops.js +563 -450
  187. package/dist/cli/services/tools/file-ops.js.map +1 -0
  188. package/dist/cli/services/tools/search-tools.js +231 -162
  189. package/dist/cli/services/tools/search-tools.js.map +1 -0
  190. package/dist/cli/services/tools/shell-exec.js +197 -151
  191. package/dist/cli/services/tools/shell-exec.js.map +1 -0
  192. package/dist/cli/services/tools/task-manager.js +206 -173
  193. package/dist/cli/services/tools/task-manager.js.map +1 -0
  194. package/dist/cli/services/tools/web-tools.js +388 -341
  195. package/dist/cli/services/tools/web-tools.js.map +1 -0
  196. package/dist/cli/setup/SetupApp.d.ts +2 -2
  197. package/dist/cli/setup/SetupApp.js +608 -160
  198. package/dist/cli/setup/SetupApp.js.map +1 -0
  199. package/dist/cli/shared/ErrorBoundary.d.ts +22 -0
  200. package/dist/cli/shared/ErrorBoundary.js +73 -0
  201. package/dist/cli/shared/ErrorBoundary.js.map +1 -0
  202. package/dist/cli/shared/MatrixIntro.js +66 -69
  203. package/dist/cli/shared/MatrixIntro.js.map +1 -0
  204. package/dist/cli/shared/SpinnerSlot.d.ts +14 -0
  205. package/dist/cli/shared/SpinnerSlot.js +63 -0
  206. package/dist/cli/shared/SpinnerSlot.js.map +1 -0
  207. package/dist/cli/shared/Theme.d.ts +1 -1
  208. package/dist/cli/shared/Theme.js +136 -92
  209. package/dist/cli/shared/Theme.js.map +1 -0
  210. package/dist/cli/shared/WhaleBanner.js +99 -11
  211. package/dist/cli/shared/WhaleBanner.js.map +1 -0
  212. package/dist/cli/shared/markdown.d.ts +3 -1
  213. package/dist/cli/shared/markdown.js +736 -674
  214. package/dist/cli/shared/markdown.js.map +1 -0
  215. package/dist/cli/shared/marked-terminal.d.js +2 -0
  216. package/dist/cli/shared/marked-terminal.d.js.map +1 -0
  217. package/dist/cli/shared/theme-manager.js +99 -90
  218. package/dist/cli/shared/theme-manager.js.map +1 -0
  219. package/dist/cli/shared/theme-presets.js +256 -254
  220. package/dist/cli/shared/theme-presets.js.map +1 -0
  221. package/dist/cli/status/StatusApp.js +235 -86
  222. package/dist/cli/status/StatusApp.js.map +1 -0
  223. package/dist/cli/stores/StoreApp.js +275 -65
  224. package/dist/cli/stores/StoreApp.js.map +1 -0
  225. package/dist/index.d.ts +2 -2
  226. package/dist/index.js +509 -396
  227. package/dist/index.js.map +1 -0
  228. package/dist/local-agent/connection.d.ts +2 -2
  229. package/dist/local-agent/connection.js +352 -293
  230. package/dist/local-agent/connection.js.map +1 -0
  231. package/dist/local-agent/discovery.js +259 -122
  232. package/dist/local-agent/discovery.js.map +1 -0
  233. package/dist/local-agent/executor.js +216 -193
  234. package/dist/local-agent/executor.js.map +1 -0
  235. package/dist/local-agent/index.d.ts +2 -2
  236. package/dist/local-agent/index.js +156 -156
  237. package/dist/local-agent/index.js.map +1 -0
  238. package/dist/node/adapters/base.js +18 -8
  239. package/dist/node/adapters/base.js.map +1 -0
  240. package/dist/node/adapters/discord.js +286 -275
  241. package/dist/node/adapters/discord.js.map +1 -0
  242. package/dist/node/adapters/email.js +189 -202
  243. package/dist/node/adapters/email.js.map +1 -0
  244. package/dist/node/adapters/imessage.js +145 -142
  245. package/dist/node/adapters/imessage.js.map +1 -0
  246. package/dist/node/adapters/slack.js +237 -236
  247. package/dist/node/adapters/slack.js.map +1 -0
  248. package/dist/node/adapters/sms.js +149 -151
  249. package/dist/node/adapters/sms.js.map +1 -0
  250. package/dist/node/adapters/telegram.js +88 -92
  251. package/dist/node/adapters/telegram.js.map +1 -0
  252. package/dist/node/adapters/webchat.js +160 -136
  253. package/dist/node/adapters/webchat.js.map +1 -0
  254. package/dist/node/adapters/whatsapp.js +212 -215
  255. package/dist/node/adapters/whatsapp.js.map +1 -0
  256. package/dist/node/cli.js +884 -653
  257. package/dist/node/cli.js.map +1 -0
  258. package/dist/node/config.js +20 -18
  259. package/dist/node/config.js.map +1 -0
  260. package/dist/node/gateway-client.js +191 -181
  261. package/dist/node/gateway-client.js.map +1 -0
  262. package/dist/node/portal/clipboard.js +161 -130
  263. package/dist/node/portal/clipboard.js.map +1 -0
  264. package/dist/node/portal/discovery.js +51 -45
  265. package/dist/node/portal/discovery.js.map +1 -0
  266. package/dist/node/portal/forward.js +64 -58
  267. package/dist/node/portal/forward.js.map +1 -0
  268. package/dist/node/portal/index.js +246 -221
  269. package/dist/node/portal/index.js.map +1 -0
  270. package/dist/node/portal/multiplexer.js +192 -182
  271. package/dist/node/portal/multiplexer.js.map +1 -0
  272. package/dist/node/portal/permissions.js +102 -70
  273. package/dist/node/portal/permissions.js.map +1 -0
  274. package/dist/node/portal/protocol.js +153 -116
  275. package/dist/node/portal/protocol.js.map +1 -0
  276. package/dist/node/portal/screen.js +80 -69
  277. package/dist/node/portal/screen.js.map +1 -0
  278. package/dist/node/portal/session.js +124 -117
  279. package/dist/node/portal/session.js.map +1 -0
  280. package/dist/node/portal/shell.js +140 -113
  281. package/dist/node/portal/shell.js.map +1 -0
  282. package/dist/node/portal/stream.js +77 -75
  283. package/dist/node/portal/stream.js.map +1 -0
  284. package/dist/node/portal/transfer.js +190 -167
  285. package/dist/node/portal/transfer.js.map +1 -0
  286. package/dist/node/portal/ui.js +124 -99
  287. package/dist/node/portal/ui.js.map +1 -0
  288. package/dist/node/remote-desktop/compile-helper.js +50 -45
  289. package/dist/node/remote-desktop/compile-helper.js.map +1 -0
  290. package/dist/node/remote-desktop/index.js +215 -187
  291. package/dist/node/remote-desktop/index.js.map +1 -0
  292. package/dist/node/remote-desktop/protocol.js +45 -29
  293. package/dist/node/remote-desktop/protocol.js.map +1 -0
  294. package/dist/node/runtime.js +493 -410
  295. package/dist/node/runtime.js.map +1 -0
  296. package/dist/server/handlers/__test-utils__/test-db.js +39 -89
  297. package/dist/server/handlers/__test-utils__/test-db.js.map +1 -0
  298. package/dist/server/handlers/analytics.js +467 -261
  299. package/dist/server/handlers/analytics.js.map +1 -0
  300. package/dist/server/handlers/api-docs.d.ts +6 -0
  301. package/dist/server/handlers/api-docs.js +1613 -0
  302. package/dist/server/handlers/api-docs.js.map +1 -0
  303. package/dist/server/handlers/api-keys.js +295 -232
  304. package/dist/server/handlers/api-keys.js.map +1 -0
  305. package/dist/server/handlers/billing.js +330 -239
  306. package/dist/server/handlers/billing.js.map +1 -0
  307. package/dist/server/handlers/browser.js +468 -395
  308. package/dist/server/handlers/browser.js.map +1 -0
  309. package/dist/server/handlers/catalog.js +1377 -978
  310. package/dist/server/handlers/catalog.js.map +1 -0
  311. package/dist/server/handlers/clickhouse.js +157 -109
  312. package/dist/server/handlers/clickhouse.js.map +1 -0
  313. package/dist/server/handlers/comms.d.ts +0 -53
  314. package/dist/server/handlers/comms.js +1443 -970
  315. package/dist/server/handlers/comms.js.map +1 -0
  316. package/dist/server/handlers/creations.js +461 -394
  317. package/dist/server/handlers/creations.js.map +1 -0
  318. package/dist/server/handlers/crm.js +1082 -791
  319. package/dist/server/handlers/crm.js.map +1 -0
  320. package/dist/server/handlers/discovery.js +251 -232
  321. package/dist/server/handlers/discovery.js.map +1 -0
  322. package/dist/server/handlers/embeddings.js +241 -164
  323. package/dist/server/handlers/embeddings.js.map +1 -0
  324. package/dist/server/handlers/enrichment.js +887 -718
  325. package/dist/server/handlers/enrichment.js.map +1 -0
  326. package/dist/server/handlers/image-gen.js +467 -376
  327. package/dist/server/handlers/image-gen.js.map +1 -0
  328. package/dist/server/handlers/inventory.js +797 -424
  329. package/dist/server/handlers/inventory.js.map +1 -0
  330. package/dist/server/handlers/kali.js +272 -230
  331. package/dist/server/handlers/kali.js.map +1 -0
  332. package/dist/server/handlers/llm-providers.js +803 -580
  333. package/dist/server/handlers/llm-providers.js.map +1 -0
  334. package/dist/server/handlers/local-agent.js +133 -105
  335. package/dist/server/handlers/local-agent.js.map +1 -0
  336. package/dist/server/handlers/media.js +1179 -857
  337. package/dist/server/handlers/media.js.map +1 -0
  338. package/dist/server/handlers/meta-ads.js +2669 -2093
  339. package/dist/server/handlers/meta-ads.js.map +1 -0
  340. package/dist/server/handlers/nodes.js +1321 -913
  341. package/dist/server/handlers/nodes.js.map +1 -0
  342. package/dist/server/handlers/operations.js +183 -157
  343. package/dist/server/handlers/operations.js.map +1 -0
  344. package/dist/server/handlers/platform.js +346 -210
  345. package/dist/server/handlers/platform.js.map +1 -0
  346. package/dist/server/handlers/remove-bg.js +118 -86
  347. package/dist/server/handlers/remove-bg.js.map +1 -0
  348. package/dist/server/handlers/storefront.js +586 -446
  349. package/dist/server/handlers/storefront.js.map +1 -0
  350. package/dist/server/handlers/supply-chain.js +546 -326
  351. package/dist/server/handlers/supply-chain.js.map +1 -0
  352. package/dist/server/handlers/transcription.js +106 -97
  353. package/dist/server/handlers/transcription.js.map +1 -0
  354. package/dist/server/handlers/video-gen.js +593 -424
  355. package/dist/server/handlers/video-gen.js.map +1 -0
  356. package/dist/server/handlers/voice.js +1458 -1017
  357. package/dist/server/handlers/voice.js.map +1 -0
  358. package/dist/server/handlers/workflow-steps.js +2837 -2116
  359. package/dist/server/handlers/workflow-steps.js.map +1 -0
  360. package/dist/server/handlers/workflows.js +1630 -933
  361. package/dist/server/handlers/workflows.js.map +1 -0
  362. package/dist/server/index.js +3166 -2390
  363. package/dist/server/index.js.map +1 -0
  364. package/dist/server/lib/batch-client.js +471 -409
  365. package/dist/server/lib/batch-client.js.map +1 -0
  366. package/dist/server/lib/clickhouse-buffer.js +118 -104
  367. package/dist/server/lib/clickhouse-buffer.js.map +1 -0
  368. package/dist/server/lib/clickhouse-client.js +107 -107
  369. package/dist/server/lib/clickhouse-client.js.map +1 -0
  370. package/dist/server/lib/coa-renderer.js +1786 -356
  371. package/dist/server/lib/coa-renderer.js.map +1 -0
  372. package/dist/server/lib/code-worker-pool.js +227 -177
  373. package/dist/server/lib/code-worker-pool.js.map +1 -0
  374. package/dist/server/lib/code-worker.js +174 -164
  375. package/dist/server/lib/code-worker.js.map +1 -0
  376. package/dist/server/lib/compaction-service.d.ts +2 -12
  377. package/dist/server/lib/compaction-service.js +74 -184
  378. package/dist/server/lib/compaction-service.js.map +1 -0
  379. package/dist/server/lib/logger.js +36 -24
  380. package/dist/server/lib/logger.js.map +1 -0
  381. package/dist/server/lib/otel.js +101 -80
  382. package/dist/server/lib/otel.js.map +1 -0
  383. package/dist/server/lib/pdf-renderer.d.ts +1 -1
  384. package/dist/server/lib/pdf-renderer.js +954 -776
  385. package/dist/server/lib/pdf-renderer.js.map +1 -0
  386. package/dist/server/lib/prompt-sanitizer.js +188 -108
  387. package/dist/server/lib/prompt-sanitizer.js.map +1 -0
  388. package/dist/server/lib/provider-capabilities.js +136 -138
  389. package/dist/server/lib/provider-capabilities.js.map +1 -0
  390. package/dist/server/lib/provider-failover.js +190 -168
  391. package/dist/server/lib/provider-failover.js.map +1 -0
  392. package/dist/server/lib/rate-limiter.js +186 -117
  393. package/dist/server/lib/rate-limiter.js.map +1 -0
  394. package/dist/server/lib/react-pdf-layout.js +551 -382
  395. package/dist/server/lib/react-pdf-layout.js.map +1 -0
  396. package/dist/server/lib/server-agent-loop.d.ts +9 -0
  397. package/dist/server/lib/server-agent-loop.js +906 -624
  398. package/dist/server/lib/server-agent-loop.js.map +1 -0
  399. package/dist/server/lib/server-subagent.d.ts +2 -0
  400. package/dist/server/lib/server-subagent.js +260 -162
  401. package/dist/server/lib/server-subagent.js.map +1 -0
  402. package/dist/server/lib/session-checkpoint.js +105 -96
  403. package/dist/server/lib/session-checkpoint.js.map +1 -0
  404. package/dist/server/lib/ssrf-guard.js +193 -184
  405. package/dist/server/lib/ssrf-guard.js.map +1 -0
  406. package/dist/server/lib/supabase-client.js +94 -82
  407. package/dist/server/lib/supabase-client.js.map +1 -0
  408. package/dist/server/lib/template-resolver.js +154 -176
  409. package/dist/server/lib/template-resolver.js.map +1 -0
  410. package/dist/server/lib/utils.js +242 -133
  411. package/dist/server/lib/utils.js.map +1 -0
  412. package/dist/server/local-agent-gateway.d.ts +2 -2
  413. package/dist/server/local-agent-gateway.js +785 -627
  414. package/dist/server/local-agent-gateway.js.map +1 -0
  415. package/dist/server/providers/anthropic.js +254 -176
  416. package/dist/server/providers/anthropic.js.map +1 -0
  417. package/dist/server/providers/bedrock.js +221 -162
  418. package/dist/server/providers/bedrock.js.map +1 -0
  419. package/dist/server/providers/gemini.js +548 -418
  420. package/dist/server/providers/gemini.js.map +1 -0
  421. package/dist/server/providers/openai.js +571 -437
  422. package/dist/server/providers/openai.js.map +1 -0
  423. package/dist/server/providers/registry.js +23 -18
  424. package/dist/server/providers/registry.js.map +1 -0
  425. package/dist/server/providers/shared.js +123 -95
  426. package/dist/server/providers/shared.js.map +1 -0
  427. package/dist/server/providers/types.js +1 -11
  428. package/dist/server/providers/types.js.map +1 -0
  429. package/dist/server/proxy-handlers.js +209 -165
  430. package/dist/server/proxy-handlers.js.map +1 -0
  431. package/dist/server/tool-router.d.ts +13 -0
  432. package/dist/server/tool-router.js +960 -598
  433. package/dist/server/tool-router.js.map +1 -0
  434. package/dist/server/validation.js +248 -188
  435. package/dist/server/validation.js.map +1 -0
  436. package/dist/server/worker.js +202 -133
  437. package/dist/server/worker.js.map +1 -0
  438. package/dist/setup.d.ts +2 -2
  439. package/dist/setup.js +151 -147
  440. package/dist/setup.js.map +1 -0
  441. package/dist/shared/agent-core.d.ts +191 -24
  442. package/dist/shared/agent-core.js +971 -462
  443. package/dist/shared/agent-core.js.map +1 -0
  444. package/dist/shared/anthropic-types.js +1 -6
  445. package/dist/shared/anthropic-types.js.map +1 -0
  446. package/dist/shared/api-client.d.ts +17 -9
  447. package/dist/shared/api-client.js +419 -327
  448. package/dist/shared/api-client.js.map +1 -0
  449. package/dist/shared/compaction.d.ts +36 -0
  450. package/dist/shared/compaction.js +138 -0
  451. package/dist/shared/compaction.js.map +1 -0
  452. package/dist/shared/constants.js +67 -64
  453. package/dist/shared/constants.js.map +1 -0
  454. package/dist/shared/sse-parser.js +221 -219
  455. package/dist/shared/sse-parser.js.map +1 -0
  456. package/dist/shared/tool-dispatch.d.ts +4 -2
  457. package/dist/shared/tool-dispatch.js +226 -165
  458. package/dist/shared/tool-dispatch.js.map +1 -0
  459. package/dist/shared/types.js +1 -6
  460. package/dist/shared/types.js.map +1 -0
  461. package/dist/types/cli-highlight.d.js +2 -0
  462. package/dist/types/cli-highlight.d.js.map +1 -0
  463. package/dist/types/diff.d.js +2 -0
  464. package/dist/types/diff.d.js.map +1 -0
  465. package/dist/types/pdf-parse.d.js +2 -0
  466. package/dist/types/pdf-parse.d.js.map +1 -0
  467. package/dist/updater.d.ts +1 -1
  468. package/dist/updater.js +118 -92
  469. package/dist/updater.js.map +1 -0
  470. package/dist/webchat/widget.js +227 -380
  471. package/dist/webchat/widget.js.map +1 -0
  472. package/package.json +22 -10
  473. package/vendor/ink/build/ansi-tokenizer.d.ts +38 -0
  474. package/vendor/ink/build/ansi-tokenizer.js +316 -0
  475. package/vendor/ink/build/ansi-tokenizer.js.map +1 -0
  476. package/vendor/ink/build/apply-styles.js +175 -0
  477. package/vendor/ink/build/build-layout.js +77 -0
  478. package/vendor/ink/build/calculate-wrapped-text.js +53 -0
  479. package/vendor/ink/build/colorize.d.ts +3 -0
  480. package/vendor/ink/build/colorize.js +48 -0
  481. package/vendor/ink/build/colorize.js.map +1 -0
  482. package/vendor/ink/build/components/AccessibilityContext.d.ts +3 -0
  483. package/vendor/ink/build/components/AccessibilityContext.js +5 -0
  484. package/vendor/ink/build/components/AccessibilityContext.js.map +1 -0
  485. package/vendor/ink/build/components/App.d.ts +18 -0
  486. package/vendor/ink/build/components/App.js +351 -0
  487. package/vendor/ink/build/components/App.js.map +1 -0
  488. package/vendor/ink/build/components/AppContext.d.ts +15 -0
  489. package/vendor/ink/build/components/AppContext.js +11 -0
  490. package/vendor/ink/build/components/AppContext.js.map +1 -0
  491. package/vendor/ink/build/components/BackgroundContext.d.ts +4 -0
  492. package/vendor/ink/build/components/BackgroundContext.js +3 -0
  493. package/vendor/ink/build/components/BackgroundContext.js.map +1 -0
  494. package/vendor/ink/build/components/Box.d.ts +117 -0
  495. package/vendor/ink/build/components/Box.js +34 -0
  496. package/vendor/ink/build/components/Box.js.map +1 -0
  497. package/vendor/ink/build/components/Color.js +62 -0
  498. package/vendor/ink/build/components/Cursor.d.ts +83 -0
  499. package/vendor/ink/build/components/Cursor.js +53 -0
  500. package/vendor/ink/build/components/Cursor.js.map +1 -0
  501. package/vendor/ink/build/components/CursorContext.d.ts +11 -0
  502. package/vendor/ink/build/components/CursorContext.js +8 -0
  503. package/vendor/ink/build/components/CursorContext.js.map +1 -0
  504. package/vendor/ink/build/components/ErrorBoundary.d.ts +18 -0
  505. package/vendor/ink/build/components/ErrorBoundary.js +23 -0
  506. package/vendor/ink/build/components/ErrorBoundary.js.map +1 -0
  507. package/vendor/ink/build/components/ErrorOverview.d.ts +6 -0
  508. package/vendor/ink/build/components/ErrorOverview.js +84 -0
  509. package/vendor/ink/build/components/ErrorOverview.js.map +1 -0
  510. package/vendor/ink/build/components/FocusContext.d.ts +16 -0
  511. package/vendor/ink/build/components/FocusContext.js +17 -0
  512. package/vendor/ink/build/components/FocusContext.js.map +1 -0
  513. package/vendor/ink/build/components/Newline.d.ts +13 -0
  514. package/vendor/ink/build/components/Newline.js +8 -0
  515. package/vendor/ink/build/components/Newline.js.map +1 -0
  516. package/vendor/ink/build/components/Spacer.d.ts +7 -0
  517. package/vendor/ink/build/components/Spacer.js +11 -0
  518. package/vendor/ink/build/components/Spacer.js.map +1 -0
  519. package/vendor/ink/build/components/Static.d.ts +24 -0
  520. package/vendor/ink/build/components/Static.js +28 -0
  521. package/vendor/ink/build/components/Static.js.map +1 -0
  522. package/vendor/ink/build/components/StderrContext.d.ts +15 -0
  523. package/vendor/ink/build/components/StderrContext.js +13 -0
  524. package/vendor/ink/build/components/StderrContext.js.map +1 -0
  525. package/vendor/ink/build/components/StdinContext.d.ts +22 -0
  526. package/vendor/ink/build/components/StdinContext.js +19 -0
  527. package/vendor/ink/build/components/StdinContext.js.map +1 -0
  528. package/vendor/ink/build/components/StdoutContext.d.ts +15 -0
  529. package/vendor/ink/build/components/StdoutContext.js +13 -0
  530. package/vendor/ink/build/components/StdoutContext.js.map +1 -0
  531. package/vendor/ink/build/components/Text.d.ts +55 -0
  532. package/vendor/ink/build/components/Text.js +50 -0
  533. package/vendor/ink/build/components/Text.js.map +1 -0
  534. package/vendor/ink/build/components/Transform.d.ts +16 -0
  535. package/vendor/ink/build/components/Transform.js +15 -0
  536. package/vendor/ink/build/components/Transform.js.map +1 -0
  537. package/vendor/ink/build/cursor-helpers.d.ts +38 -0
  538. package/vendor/ink/build/cursor-helpers.js +56 -0
  539. package/vendor/ink/build/cursor-helpers.js.map +1 -0
  540. package/vendor/ink/build/devtools-window-polyfill.d.ts +1 -0
  541. package/vendor/ink/build/devtools-window-polyfill.js +65 -0
  542. package/vendor/ink/build/devtools-window-polyfill.js.map +1 -0
  543. package/vendor/ink/build/devtools.d.ts +1 -0
  544. package/vendor/ink/build/devtools.js +11 -0
  545. package/vendor/ink/build/devtools.js.map +1 -0
  546. package/vendor/ink/build/dom.d.ts +56 -0
  547. package/vendor/ink/build/dom.js +124 -0
  548. package/vendor/ink/build/dom.js.map +1 -0
  549. package/vendor/ink/build/experimental/apply-style.js +140 -0
  550. package/vendor/ink/build/experimental/dom.js +123 -0
  551. package/vendor/ink/build/experimental/output.js +91 -0
  552. package/vendor/ink/build/experimental/reconciler.js +141 -0
  553. package/vendor/ink/build/experimental/renderer.js +81 -0
  554. package/vendor/ink/build/get-max-width.d.ts +3 -0
  555. package/vendor/ink/build/get-max-width.js +10 -0
  556. package/vendor/ink/build/get-max-width.js.map +1 -0
  557. package/vendor/ink/build/hooks/use-app.d.ts +5 -0
  558. package/vendor/ink/build/hooks/use-app.js +8 -0
  559. package/vendor/ink/build/hooks/use-app.js.map +1 -0
  560. package/vendor/ink/build/hooks/use-cursor.d.ts +12 -0
  561. package/vendor/ink/build/hooks/use-cursor.js +29 -0
  562. package/vendor/ink/build/hooks/use-cursor.js.map +1 -0
  563. package/vendor/ink/build/hooks/use-focus-manager.d.ts +28 -0
  564. package/vendor/ink/build/hooks/use-focus-manager.js +17 -0
  565. package/vendor/ink/build/hooks/use-focus-manager.js.map +1 -0
  566. package/vendor/ink/build/hooks/use-focus.d.ts +29 -0
  567. package/vendor/ink/build/hooks/use-focus.js +42 -0
  568. package/vendor/ink/build/hooks/use-focus.js.map +1 -0
  569. package/vendor/ink/build/hooks/use-input.d.ts +131 -0
  570. package/vendor/ink/build/hooks/use-input.js +124 -0
  571. package/vendor/ink/build/hooks/use-input.js.map +1 -0
  572. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.d.ts +5 -0
  573. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js +11 -0
  574. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
  575. package/vendor/ink/build/hooks/use-stderr.d.ts +5 -0
  576. package/vendor/ink/build/hooks/use-stderr.js +8 -0
  577. package/vendor/ink/build/hooks/use-stderr.js.map +1 -0
  578. package/vendor/ink/build/hooks/use-stdin.d.ts +5 -0
  579. package/vendor/ink/build/hooks/use-stdin.js +8 -0
  580. package/vendor/ink/build/hooks/use-stdin.js.map +1 -0
  581. package/vendor/ink/build/hooks/use-stdout.d.ts +5 -0
  582. package/vendor/ink/build/hooks/use-stdout.js +8 -0
  583. package/vendor/ink/build/hooks/use-stdout.js.map +1 -0
  584. package/vendor/ink/build/hooks/useInput.js +38 -0
  585. package/vendor/ink/build/index.d.ts +34 -0
  586. package/vendor/ink/build/index.js +20 -0
  587. package/vendor/ink/build/index.js.map +1 -0
  588. package/vendor/ink/build/ink.d.ts +90 -0
  589. package/vendor/ink/build/ink.js +654 -0
  590. package/vendor/ink/build/ink.js.map +1 -0
  591. package/vendor/ink/build/input-parser.d.ts +7 -0
  592. package/vendor/ink/build/input-parser.js +154 -0
  593. package/vendor/ink/build/input-parser.js.map +1 -0
  594. package/vendor/ink/build/instance.js +205 -0
  595. package/vendor/ink/build/instances.d.ts +3 -0
  596. package/vendor/ink/build/instances.js +8 -0
  597. package/vendor/ink/build/instances.js.map +1 -0
  598. package/vendor/ink/build/kitty-keyboard.d.ts +23 -0
  599. package/vendor/ink/build/kitty-keyboard.js +32 -0
  600. package/vendor/ink/build/kitty-keyboard.js.map +1 -0
  601. package/vendor/ink/build/layout.d.ts +7 -0
  602. package/vendor/ink/build/layout.js +33 -0
  603. package/vendor/ink/build/layout.js.map +1 -0
  604. package/vendor/ink/build/log-update.d.ts +19 -0
  605. package/vendor/ink/build/log-update.js +243 -0
  606. package/vendor/ink/build/log-update.js.map +1 -0
  607. package/vendor/ink/build/measure-element.d.ts +16 -0
  608. package/vendor/ink/build/measure-element.js +9 -0
  609. package/vendor/ink/build/measure-element.js.map +1 -0
  610. package/vendor/ink/build/measure-text.d.ts +6 -0
  611. package/vendor/ink/build/measure-text.js +21 -0
  612. package/vendor/ink/build/measure-text.js.map +1 -0
  613. package/vendor/ink/build/options.d.ts +52 -0
  614. package/vendor/ink/build/options.js +2 -0
  615. package/vendor/ink/build/options.js.map +1 -0
  616. package/vendor/ink/build/output.d.ts +35 -0
  617. package/vendor/ink/build/output.js +183 -0
  618. package/vendor/ink/build/output.js.map +1 -0
  619. package/vendor/ink/build/parse-keypress.d.ts +22 -0
  620. package/vendor/ink/build/parse-keypress.js +493 -0
  621. package/vendor/ink/build/parse-keypress.js.map +1 -0
  622. package/vendor/ink/build/reconciler.d.ts +4 -0
  623. package/vendor/ink/build/reconciler.js +274 -0
  624. package/vendor/ink/build/reconciler.js.map +1 -0
  625. package/vendor/ink/build/render-background.d.ts +4 -0
  626. package/vendor/ink/build/render-background.js +25 -0
  627. package/vendor/ink/build/render-background.js.map +1 -0
  628. package/vendor/ink/build/render-border.d.ts +4 -0
  629. package/vendor/ink/build/render-border.js +73 -0
  630. package/vendor/ink/build/render-border.js.map +1 -0
  631. package/vendor/ink/build/render-node-to-output.d.ts +14 -0
  632. package/vendor/ink/build/render-node-to-output.js +147 -0
  633. package/vendor/ink/build/render-node-to-output.js.map +1 -0
  634. package/vendor/ink/build/render-to-string.d.ts +38 -0
  635. package/vendor/ink/build/render-to-string.js +115 -0
  636. package/vendor/ink/build/render-to-string.js.map +1 -0
  637. package/vendor/ink/build/render.d.ts +121 -0
  638. package/vendor/ink/build/render.js +55 -0
  639. package/vendor/ink/build/render.js.map +1 -0
  640. package/vendor/ink/build/renderer.d.ts +8 -0
  641. package/vendor/ink/build/renderer.js +55 -0
  642. package/vendor/ink/build/renderer.js.map +1 -0
  643. package/vendor/ink/build/sanitize-ansi.d.ts +2 -0
  644. package/vendor/ink/build/sanitize-ansi.js +27 -0
  645. package/vendor/ink/build/sanitize-ansi.js.map +1 -0
  646. package/vendor/ink/build/screen-reader-update.d.ts +13 -0
  647. package/vendor/ink/build/screen-reader-update.js +38 -0
  648. package/vendor/ink/build/screen-reader-update.js.map +1 -0
  649. package/vendor/ink/build/squash-text-nodes.d.ts +3 -0
  650. package/vendor/ink/build/squash-text-nodes.js +36 -0
  651. package/vendor/ink/build/squash-text-nodes.js.map +1 -0
  652. package/vendor/ink/build/styles.d.ts +240 -0
  653. package/vendor/ink/build/styles.js +232 -0
  654. package/vendor/ink/build/styles.js.map +1 -0
  655. package/vendor/ink/build/utils.d.ts +2 -0
  656. package/vendor/ink/build/utils.js +4 -0
  657. package/vendor/ink/build/utils.js.map +1 -0
  658. package/vendor/ink/build/wrap-text.d.ts +3 -0
  659. package/vendor/ink/build/wrap-text.js +31 -0
  660. package/vendor/ink/build/wrap-text.js.map +1 -0
  661. package/vendor/ink/build/write-synchronized.d.ts +4 -0
  662. package/vendor/ink/build/write-synchronized.js +7 -0
  663. package/vendor/ink/build/write-synchronized.js.map +1 -0
  664. package/vendor/ink/license +10 -0
  665. package/vendor/ink/node_modules/@types/node/LICENSE +21 -0
  666. package/vendor/ink/node_modules/@types/node/README.md +15 -0
  667. package/vendor/ink/node_modules/@types/node/assert/strict.d.ts +105 -0
  668. package/vendor/ink/node_modules/@types/node/assert.d.ts +955 -0
  669. package/vendor/ink/node_modules/@types/node/async_hooks.d.ts +623 -0
  670. package/vendor/ink/node_modules/@types/node/buffer.buffer.d.ts +466 -0
  671. package/vendor/ink/node_modules/@types/node/buffer.d.ts +1810 -0
  672. package/vendor/ink/node_modules/@types/node/child_process.d.ts +1428 -0
  673. package/vendor/ink/node_modules/@types/node/cluster.d.ts +486 -0
  674. package/vendor/ink/node_modules/@types/node/compatibility/iterators.d.ts +21 -0
  675. package/vendor/ink/node_modules/@types/node/console.d.ts +151 -0
  676. package/vendor/ink/node_modules/@types/node/constants.d.ts +20 -0
  677. package/vendor/ink/node_modules/@types/node/crypto.d.ts +4065 -0
  678. package/vendor/ink/node_modules/@types/node/dgram.d.ts +564 -0
  679. package/vendor/ink/node_modules/@types/node/diagnostics_channel.d.ts +576 -0
  680. package/vendor/ink/node_modules/@types/node/dns/promises.d.ts +503 -0
  681. package/vendor/ink/node_modules/@types/node/dns.d.ts +922 -0
  682. package/vendor/ink/node_modules/@types/node/domain.d.ts +166 -0
  683. package/vendor/ink/node_modules/@types/node/events.d.ts +1054 -0
  684. package/vendor/ink/node_modules/@types/node/fs/promises.d.ts +1329 -0
  685. package/vendor/ink/node_modules/@types/node/fs.d.ts +4676 -0
  686. package/vendor/ink/node_modules/@types/node/globals.d.ts +150 -0
  687. package/vendor/ink/node_modules/@types/node/globals.typedarray.d.ts +101 -0
  688. package/vendor/ink/node_modules/@types/node/http.d.ts +2167 -0
  689. package/vendor/ink/node_modules/@types/node/http2.d.ts +2480 -0
  690. package/vendor/ink/node_modules/@types/node/https.d.ts +405 -0
  691. package/vendor/ink/node_modules/@types/node/index.d.ts +115 -0
  692. package/vendor/ink/node_modules/@types/node/inspector/promises.d.ts +41 -0
  693. package/vendor/ink/node_modules/@types/node/inspector.d.ts +224 -0
  694. package/vendor/ink/node_modules/@types/node/inspector.generated.d.ts +4226 -0
  695. package/vendor/ink/node_modules/@types/node/module.d.ts +819 -0
  696. package/vendor/ink/node_modules/@types/node/net.d.ts +933 -0
  697. package/vendor/ink/node_modules/@types/node/os.d.ts +507 -0
  698. package/vendor/ink/node_modules/@types/node/package.json +155 -0
  699. package/vendor/ink/node_modules/@types/node/path/posix.d.ts +8 -0
  700. package/vendor/ink/node_modules/@types/node/path/win32.d.ts +8 -0
  701. package/vendor/ink/node_modules/@types/node/path.d.ts +187 -0
  702. package/vendor/ink/node_modules/@types/node/perf_hooks.d.ts +643 -0
  703. package/vendor/ink/node_modules/@types/node/process.d.ts +2156 -0
  704. package/vendor/ink/node_modules/@types/node/punycode.d.ts +117 -0
  705. package/vendor/ink/node_modules/@types/node/querystring.d.ts +152 -0
  706. package/vendor/ink/node_modules/@types/node/quic.d.ts +910 -0
  707. package/vendor/ink/node_modules/@types/node/readline/promises.d.ts +161 -0
  708. package/vendor/ink/node_modules/@types/node/readline.d.ts +541 -0
  709. package/vendor/ink/node_modules/@types/node/repl.d.ts +415 -0
  710. package/vendor/ink/node_modules/@types/node/sea.d.ts +162 -0
  711. package/vendor/ink/node_modules/@types/node/sqlite.d.ts +955 -0
  712. package/vendor/ink/node_modules/@types/node/stream/consumers.d.ts +38 -0
  713. package/vendor/ink/node_modules/@types/node/stream/promises.d.ts +211 -0
  714. package/vendor/ink/node_modules/@types/node/stream/web.d.ts +296 -0
  715. package/vendor/ink/node_modules/@types/node/stream.d.ts +1760 -0
  716. package/vendor/ink/node_modules/@types/node/string_decoder.d.ts +67 -0
  717. package/vendor/ink/node_modules/@types/node/test/reporters.d.ts +96 -0
  718. package/vendor/ink/node_modules/@types/node/test.d.ts +2240 -0
  719. package/vendor/ink/node_modules/@types/node/timers/promises.d.ts +108 -0
  720. package/vendor/ink/node_modules/@types/node/timers.d.ts +159 -0
  721. package/vendor/ink/node_modules/@types/node/tls.d.ts +1198 -0
  722. package/vendor/ink/node_modules/@types/node/trace_events.d.ts +197 -0
  723. package/vendor/ink/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +462 -0
  724. package/vendor/ink/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +71 -0
  725. package/vendor/ink/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +36 -0
  726. package/vendor/ink/node_modules/@types/node/ts5.6/index.d.ts +117 -0
  727. package/vendor/ink/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +72 -0
  728. package/vendor/ink/node_modules/@types/node/ts5.7/index.d.ts +117 -0
  729. package/vendor/ink/node_modules/@types/node/tty.d.ts +250 -0
  730. package/vendor/ink/node_modules/@types/node/url.d.ts +519 -0
  731. package/vendor/ink/node_modules/@types/node/util/types.d.ts +558 -0
  732. package/vendor/ink/node_modules/@types/node/util.d.ts +1662 -0
  733. package/vendor/ink/node_modules/@types/node/v8.d.ts +983 -0
  734. package/vendor/ink/node_modules/@types/node/vm.d.ts +1208 -0
  735. package/vendor/ink/node_modules/@types/node/wasi.d.ts +202 -0
  736. package/vendor/ink/node_modules/@types/node/web-globals/abortcontroller.d.ts +59 -0
  737. package/vendor/ink/node_modules/@types/node/web-globals/blob.d.ts +23 -0
  738. package/vendor/ink/node_modules/@types/node/web-globals/console.d.ts +9 -0
  739. package/vendor/ink/node_modules/@types/node/web-globals/crypto.d.ts +39 -0
  740. package/vendor/ink/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  741. package/vendor/ink/node_modules/@types/node/web-globals/encoding.d.ts +11 -0
  742. package/vendor/ink/node_modules/@types/node/web-globals/events.d.ts +106 -0
  743. package/vendor/ink/node_modules/@types/node/web-globals/fetch.d.ts +69 -0
  744. package/vendor/ink/node_modules/@types/node/web-globals/importmeta.d.ts +13 -0
  745. package/vendor/ink/node_modules/@types/node/web-globals/messaging.d.ts +23 -0
  746. package/vendor/ink/node_modules/@types/node/web-globals/navigator.d.ts +25 -0
  747. package/vendor/ink/node_modules/@types/node/web-globals/performance.d.ts +45 -0
  748. package/vendor/ink/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  749. package/vendor/ink/node_modules/@types/node/web-globals/streams.d.ts +115 -0
  750. package/vendor/ink/node_modules/@types/node/web-globals/timers.d.ts +44 -0
  751. package/vendor/ink/node_modules/@types/node/web-globals/url.d.ts +24 -0
  752. package/vendor/ink/node_modules/@types/node/worker_threads.d.ts +717 -0
  753. package/vendor/ink/node_modules/@types/node/zlib.d.ts +618 -0
  754. package/vendor/ink/node_modules/node-pty/LICENSE +69 -0
  755. package/vendor/ink/node_modules/node-pty/README.md +164 -0
  756. package/vendor/ink/node_modules/node-pty/binding.gyp +150 -0
  757. package/vendor/ink/node_modules/node-pty/lib/conpty_console_list_agent.js +25 -0
  758. package/vendor/ink/node_modules/node-pty/lib/eventEmitter2.js +47 -0
  759. package/vendor/ink/node_modules/node-pty/lib/index.js +52 -0
  760. package/vendor/ink/node_modules/node-pty/lib/interfaces.js +7 -0
  761. package/vendor/ink/node_modules/node-pty/lib/shared/conout.js +11 -0
  762. package/vendor/ink/node_modules/node-pty/lib/terminal.js +190 -0
  763. package/vendor/ink/node_modules/node-pty/lib/types.js +7 -0
  764. package/vendor/ink/node_modules/node-pty/lib/unixTerminal.js +349 -0
  765. package/vendor/ink/node_modules/node-pty/lib/utils.js +39 -0
  766. package/vendor/ink/node_modules/node-pty/lib/windowsConoutConnection.js +125 -0
  767. package/vendor/ink/node_modules/node-pty/lib/windowsPtyAgent.js +287 -0
  768. package/vendor/ink/node_modules/node-pty/lib/windowsTerminal.js +201 -0
  769. package/vendor/ink/node_modules/node-pty/lib/worker/conoutSocketWorker.js +22 -0
  770. package/vendor/ink/node_modules/node-pty/package.json +65 -0
  771. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/pty.node +0 -0
  772. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/spawn-helper +0 -0
  773. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/pty.node +0 -0
  774. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/spawn-helper +0 -0
  775. package/vendor/ink/node_modules/node-pty/prebuilds/linux-arm64/pty.node +0 -0
  776. package/vendor/ink/node_modules/node-pty/prebuilds/linux-x64/pty.node +0 -0
  777. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
  778. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
  779. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
  780. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.pdb +0 -0
  781. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
  782. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.pdb +0 -0
  783. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
  784. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
  785. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.node +0 -0
  786. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.pdb +0 -0
  787. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
  788. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.pdb +0 -0
  789. package/vendor/ink/node_modules/node-pty/scripts/post-install.js +76 -0
  790. package/vendor/ink/node_modules/node-pty/scripts/prebuild.js +34 -0
  791. package/vendor/ink/node_modules/node-pty/src/unix/pty.cc +875 -0
  792. package/vendor/ink/node_modules/node-pty/src/unix/spawn-helper.cc +23 -0
  793. package/vendor/ink/node_modules/node-pty/src/win/conpty.cc +582 -0
  794. package/vendor/ink/node_modules/node-pty/src/win/conpty.h +41 -0
  795. package/vendor/ink/node_modules/node-pty/src/win/conpty_console_list.cc +44 -0
  796. package/vendor/ink/node_modules/node-pty/src/win/path_util.cc +95 -0
  797. package/vendor/ink/node_modules/node-pty/src/win/path_util.h +26 -0
  798. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/OpenConsole.exe +0 -0
  799. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/conpty.dll +0 -0
  800. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/OpenConsole.exe +0 -0
  801. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/conpty.dll +0 -0
  802. package/vendor/ink/node_modules/node-pty/typings/node-pty.d.ts +215 -0
  803. package/vendor/ink/node_modules/undici-types/LICENSE +21 -0
  804. package/vendor/ink/node_modules/undici-types/README.md +6 -0
  805. package/vendor/ink/node_modules/undici-types/agent.d.ts +32 -0
  806. package/vendor/ink/node_modules/undici-types/api.d.ts +43 -0
  807. package/vendor/ink/node_modules/undici-types/balanced-pool.d.ts +30 -0
  808. package/vendor/ink/node_modules/undici-types/cache-interceptor.d.ts +173 -0
  809. package/vendor/ink/node_modules/undici-types/cache.d.ts +36 -0
  810. package/vendor/ink/node_modules/undici-types/client-stats.d.ts +15 -0
  811. package/vendor/ink/node_modules/undici-types/client.d.ts +108 -0
  812. package/vendor/ink/node_modules/undici-types/connector.d.ts +34 -0
  813. package/vendor/ink/node_modules/undici-types/content-type.d.ts +21 -0
  814. package/vendor/ink/node_modules/undici-types/cookies.d.ts +30 -0
  815. package/vendor/ink/node_modules/undici-types/diagnostics-channel.d.ts +74 -0
  816. package/vendor/ink/node_modules/undici-types/dispatcher.d.ts +276 -0
  817. package/vendor/ink/node_modules/undici-types/env-http-proxy-agent.d.ts +22 -0
  818. package/vendor/ink/node_modules/undici-types/errors.d.ts +161 -0
  819. package/vendor/ink/node_modules/undici-types/eventsource.d.ts +66 -0
  820. package/vendor/ink/node_modules/undici-types/fetch.d.ts +211 -0
  821. package/vendor/ink/node_modules/undici-types/formdata.d.ts +108 -0
  822. package/vendor/ink/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  823. package/vendor/ink/node_modules/undici-types/global-origin.d.ts +7 -0
  824. package/vendor/ink/node_modules/undici-types/h2c-client.d.ts +73 -0
  825. package/vendor/ink/node_modules/undici-types/handlers.d.ts +15 -0
  826. package/vendor/ink/node_modules/undici-types/header.d.ts +160 -0
  827. package/vendor/ink/node_modules/undici-types/index.d.ts +88 -0
  828. package/vendor/ink/node_modules/undici-types/interceptors.d.ts +73 -0
  829. package/vendor/ink/node_modules/undici-types/mock-agent.d.ts +68 -0
  830. package/vendor/ink/node_modules/undici-types/mock-call-history.d.ts +111 -0
  831. package/vendor/ink/node_modules/undici-types/mock-client.d.ts +27 -0
  832. package/vendor/ink/node_modules/undici-types/mock-errors.d.ts +12 -0
  833. package/vendor/ink/node_modules/undici-types/mock-interceptor.d.ts +94 -0
  834. package/vendor/ink/node_modules/undici-types/mock-pool.d.ts +27 -0
  835. package/vendor/ink/node_modules/undici-types/package.json +55 -0
  836. package/vendor/ink/node_modules/undici-types/patch.d.ts +29 -0
  837. package/vendor/ink/node_modules/undici-types/pool-stats.d.ts +19 -0
  838. package/vendor/ink/node_modules/undici-types/pool.d.ts +41 -0
  839. package/vendor/ink/node_modules/undici-types/proxy-agent.d.ts +29 -0
  840. package/vendor/ink/node_modules/undici-types/readable.d.ts +68 -0
  841. package/vendor/ink/node_modules/undici-types/retry-agent.d.ts +8 -0
  842. package/vendor/ink/node_modules/undici-types/retry-handler.d.ts +125 -0
  843. package/vendor/ink/node_modules/undici-types/round-robin-pool.d.ts +41 -0
  844. package/vendor/ink/node_modules/undici-types/snapshot-agent.d.ts +109 -0
  845. package/vendor/ink/node_modules/undici-types/util.d.ts +18 -0
  846. package/vendor/ink/node_modules/undici-types/utility.d.ts +7 -0
  847. package/vendor/ink/node_modules/undici-types/webidl.d.ts +341 -0
  848. package/vendor/ink/node_modules/undici-types/websocket.d.ts +186 -0
  849. package/vendor/ink/package.json +201 -0
  850. package/vendor/ink/readme.md +2636 -0
  851. package/bin/swag-agent.js +0 -9
  852. package/dist/server/lib/pg-rate-limiter.d.ts +0 -21
  853. package/dist/server/lib/pg-rate-limiter.js +0 -86
@@ -3,385 +3,499 @@
3
3
  *
4
4
  * All consumers should import from ChatApp (re-export facade).
5
5
  */
6
- import { useCallback, useRef } from "react";
6
+
7
+ import { useRef } from "react";
7
8
  import { runAgentLoop } from "../../services/agent-loop.js";
8
9
  import { AgentEventEmitter } from "../../services/agent-events.js";
9
10
  import { listBackups } from "../../services/file-history.js";
10
11
  export function useAgentLoop(deps) {
11
- const { isStreaming, thinkingEnabled, conversationRef, abortRef, accTextRef, lastContentUpdateRef, thinkingChunksRef, thinkingDoneRef, rewindManagerRef, turnIndexRef, setMessages, setStreamingText, setIsStreaming, setActiveTools, setSubagentActivity, setCompletedSubagents, setTeamState, } = deps;
12
- // Single ref for the unified flush timer — survives across handleSend calls for cleanup
13
- const flushTimerRef = useRef(null);
14
- const handleSend = useCallback(async (userMessage, images) => {
15
- if (isStreaming)
16
- return;
17
- setMessages((prev) => [...prev, {
18
- role: "user",
19
- text: userMessage,
20
- images: images?.map(img => img.name),
21
- }]);
22
- setStreamingText("");
23
- setActiveTools([]);
24
- setSubagentActivity(new Map());
25
- setCompletedSubagents([]);
26
- setTeamState(null);
27
- setIsStreaming(true);
28
- thinkingChunksRef.current = 0;
29
- thinkingDoneRef.current = false;
30
- const abort = new AbortController();
31
- abortRef.current = abort;
32
- accTextRef.current = "";
33
- const toolCalls = [];
34
- let usage;
35
- // ── Unified render batching ──
36
- // All events accumulate in local state; ONE 100ms timer flushes all dirty fields.
37
- // This replaces 3 separate timers (text: 150ms, tool_output: 250ms, team: 200ms)
38
- // and adds batching for previously-unbatched subagent events.
39
- const dirty = { text: false, tools: false, team: false, subagents: false };
40
- const subagentMap = new Map();
41
- const pendingCompleted = [];
42
- function markDirty(field) {
43
- dirty[field] = true;
44
- if (!flushTimerRef.current) {
45
- flushTimerRef.current = setTimeout(flushAll, 100);
46
- }
12
+ const {
13
+ isStreaming,
14
+ thinkingEnabled,
15
+ conversationRef,
16
+ abortRef,
17
+ accTextRef,
18
+ lastContentUpdateRef,
19
+ thinkingChunksRef,
20
+ thinkingDoneRef,
21
+ rewindManagerRef,
22
+ turnIndexRef,
23
+ setMessages,
24
+ setStreamingText,
25
+ setIsStreaming,
26
+ setActiveTools,
27
+ setSubagentActivity,
28
+ setCompletedSubagents,
29
+ setTeamState
30
+ } = deps;
31
+
32
+ // Single ref for the unified flush timer — survives across handleSend calls for cleanup
33
+ const flushTimerRef = useRef(null);
34
+ const handleSend = async (userMessage, images) => {
35
+ if (isStreaming) return;
36
+ setMessages(prev => [...prev, {
37
+ role: "user",
38
+ text: userMessage,
39
+ images: images?.map(img => img.name)
40
+ }]);
41
+ setStreamingText("");
42
+ setActiveTools([]);
43
+ setSubagentActivity(new Map());
44
+ setCompletedSubagents([]);
45
+ setTeamState(null);
46
+ setIsStreaming(true);
47
+ thinkingChunksRef.current = 0;
48
+ thinkingDoneRef.current = false;
49
+ const abort = new AbortController();
50
+ abortRef.current = abort;
51
+ accTextRef.current = "";
52
+ const toolCalls = [];
53
+ let usage;
54
+
55
+ // ── Unified render batching ──
56
+ // All events accumulate in local state; ONE 100ms timer flushes all dirty fields.
57
+ // This replaces 3 separate timers (text: 150ms, tool_output: 250ms, team: 200ms)
58
+ // and adds batching for previously-unbatched subagent events.
59
+ const dirty = {
60
+ text: false,
61
+ tools: false,
62
+ team: false,
63
+ subagents: false,
64
+ messages: false
65
+ };
66
+ const subagentMap = new Map();
67
+ const pendingCompleted = [];
68
+ const pendingToolMsgs = [];
69
+ function markDirty(field) {
70
+ dirty[field] = true;
71
+ if (!flushTimerRef.current) {
72
+ flushTimerRef.current = setTimeout(flushAll, 200);
73
+ }
74
+ }
75
+ function cancelFlush() {
76
+ if (flushTimerRef.current) {
77
+ clearTimeout(flushTimerRef.current);
78
+ flushTimerRef.current = null;
79
+ }
80
+ }
81
+ function flushAll() {
82
+ flushTimerRef.current = null;
83
+ if (dirty.text) {
84
+ setStreamingText(accTextRef.current);
85
+ dirty.text = false;
86
+ }
87
+ if (dirty.tools) {
88
+ setActiveTools([...toolCalls]);
89
+ dirty.tools = false;
90
+ }
91
+ if (dirty.team) {
92
+ setTeamState({
93
+ name: teamName,
94
+ tasksCompleted: teamCompleted,
95
+ tasksTotal: teamTotal,
96
+ teammates: new Map(teammateStatus)
97
+ });
98
+ dirty.team = false;
99
+ }
100
+ if (dirty.subagents) {
101
+ setSubagentActivity(new Map(subagentMap));
102
+ if (pendingCompleted.length > 0) {
103
+ const batch = pendingCompleted.splice(0);
104
+ setCompletedSubagents(prev_0 => [...prev_0, ...batch]);
47
105
  }
48
- function cancelFlush() {
49
- if (flushTimerRef.current) {
50
- clearTimeout(flushTimerRef.current);
51
- flushTimerRef.current = null;
52
- }
106
+ dirty.subagents = false;
107
+ }
108
+ if (dirty.messages) {
109
+ const batch_0 = pendingToolMsgs.splice(0);
110
+ if (batch_0.length > 0) {
111
+ setMessages(prev_1 => [...prev_1, ...batch_0]);
53
112
  }
54
- function flushAll() {
55
- flushTimerRef.current = null;
56
- if (dirty.text) {
57
- setStreamingText(accTextRef.current);
58
- dirty.text = false;
113
+ dirty.messages = false;
114
+ }
115
+ lastContentUpdateRef.current = Date.now();
116
+ }
117
+ const flushText = () => {
118
+ const text = accTextRef.current;
119
+ if (text.trim()) {
120
+ setMessages(prev_2 => [...prev_2, {
121
+ role: "assistant",
122
+ text
123
+ }]);
124
+ }
125
+ accTextRef.current = "";
126
+ dirty.text = false;
127
+ setStreamingText("");
128
+ };
129
+ const emitter = new AgentEventEmitter();
130
+
131
+ // Team tracking
132
+ let teamName = "";
133
+ let teamTotal = 0;
134
+ let teamCompleted = 0;
135
+ const teammateStatus = new Map();
136
+ const unsub = emitter.onEvent(event => {
137
+ switch (event.type) {
138
+ case "thinking":
139
+ thinkingChunksRef.current = event.chunkCount;
140
+ markDirty("text");
141
+ break;
142
+ case "text":
143
+ if (thinkingChunksRef.current > 0 && !thinkingDoneRef.current) {
144
+ thinkingDoneRef.current = true;
145
+ markDirty("text");
146
+ }
147
+ accTextRef.current += event.text;
148
+ markDirty("text");
149
+ break;
150
+ case "tool_output":
151
+ {
152
+ const idx_0 = toolCalls.findIndex(t_0 => t_0.name === event.toolName && t_0.status === "running");
153
+ if (idx_0 >= 0) {
154
+ const prev_3 = toolCalls[idx_0].result || "";
155
+ const lines = (prev_3 + "\n" + event.line).split("\n");
156
+ toolCalls[idx_0].result = lines.slice(-4).join("\n").trim();
157
+ markDirty("tools");
158
+ }
159
+ break;
160
+ }
161
+ case "tool_progress":
162
+ {
163
+ const idx = toolCalls.findIndex(t => t.name === event.toolName && t.status === "running");
164
+ if (idx >= 0) {
165
+ toolCalls[idx].progress = event.progress;
166
+ markDirty("tools");
59
167
  }
60
- if (dirty.tools) {
61
- setActiveTools([...toolCalls]);
62
- dirty.tools = false;
168
+ break;
169
+ }
170
+ case "team_start":
171
+ teamName = event.name;
172
+ teamTotal = event.taskCount;
173
+ teamCompleted = 0;
174
+ teammateStatus.clear();
175
+ markDirty("team");
176
+ break;
177
+ case "team_task":
178
+ if (event.status === "started") {
179
+ const existing_4 = teammateStatus.get(event.teammateId);
180
+ teammateStatus.set(event.teammateId, {
181
+ name: existing_4?.name || event.teammateId,
182
+ status: event.taskDescription.slice(0, 50),
183
+ startTime: existing_4?.startTime || Date.now()
184
+ });
185
+ } else if (event.status === "completed") {
186
+ teamCompleted++;
187
+ const existing_5 = teammateStatus.get(event.teammateId);
188
+ teammateStatus.set(event.teammateId, {
189
+ name: existing_5?.name || event.teammateId,
190
+ status: "done",
191
+ startTime: existing_5?.startTime || Date.now()
192
+ });
193
+ } else if (event.status === "failed") {
194
+ // Task failed, but teammate is still alive — show the failure briefly
195
+ // as progress, don't permanently mark the teammate as "failed".
196
+ // The teammate will claim the next task or send "done" when finished.
197
+ const existing_6 = teammateStatus.get(event.teammateId);
198
+ teammateStatus.set(event.teammateId, {
199
+ name: existing_6?.name || event.teammateId,
200
+ status: "retrying…",
201
+ startTime: existing_6?.startTime || Date.now()
202
+ });
203
+ }
204
+ markDirty("team");
205
+ break;
206
+ case "team_progress":
207
+ {
208
+ const existing_3 = teammateStatus.get(event.teammateId);
209
+ teammateStatus.set(event.teammateId, {
210
+ name: event.teammateName || event.teammateId,
211
+ status: event.message.slice(0, 50),
212
+ startTime: existing_3?.startTime || Date.now()
213
+ });
214
+ markDirty("team");
215
+ break;
216
+ }
217
+ case "team_done":
218
+ cancelFlush();
219
+ setTeamState(null);
220
+ accTextRef.current = "";
221
+ setStreamingText("");
222
+ break;
223
+ case "subagent_start":
224
+ subagentMap.set(event.id, {
225
+ type: event.agentType,
226
+ model: event.model,
227
+ description: event.description,
228
+ turn: 0,
229
+ message: "starting\u2026",
230
+ tools: [],
231
+ startTime: Date.now()
232
+ });
233
+ markDirty("subagents");
234
+ break;
235
+ case "subagent_progress":
236
+ {
237
+ const existing_2 = subagentMap.get(event.id);
238
+ if (existing_2) {
239
+ subagentMap.set(event.id, {
240
+ ...existing_2,
241
+ turn: event.turn || existing_2.turn,
242
+ message: event.message
243
+ });
244
+ markDirty("subagents");
63
245
  }
64
- if (dirty.team) {
65
- setTeamState({
66
- name: teamName, tasksCompleted: teamCompleted,
67
- tasksTotal: teamTotal, teammates: new Map(teammateStatus),
68
- });
69
- dirty.team = false;
246
+ break;
247
+ }
248
+ case "subagent_tool_start":
249
+ {
250
+ const existing_1 = subagentMap.get(event.agentId);
251
+ if (existing_1) {
252
+ subagentMap.set(event.agentId, {
253
+ ...existing_1,
254
+ tools: [...existing_1.tools, {
255
+ name: event.toolName,
256
+ status: "running",
257
+ input: event.toolInput
258
+ }]
259
+ });
260
+ markDirty("subagents");
70
261
  }
71
- if (dirty.subagents) {
72
- setSubagentActivity(new Map(subagentMap));
73
- if (pendingCompleted.length > 0) {
74
- const batch = pendingCompleted.splice(0);
75
- setCompletedSubagents(prev => [...prev, ...batch]);
262
+ break;
263
+ }
264
+ case "subagent_tool_end":
265
+ {
266
+ const existing_0 = subagentMap.get(event.agentId);
267
+ if (existing_0) {
268
+ const tools = [...existing_0.tools];
269
+ for (let i = tools.length - 1; i >= 0; i--) {
270
+ if (tools[i].name === event.toolName && tools[i].status === "running") {
271
+ tools[i] = {
272
+ ...tools[i],
273
+ status: event.success ? "success" : "error",
274
+ durationMs: event.durationMs
275
+ };
276
+ break;
76
277
  }
77
- dirty.subagents = false;
278
+ }
279
+ subagentMap.set(event.agentId, {
280
+ ...existing_0,
281
+ tools
282
+ });
283
+ markDirty("subagents");
78
284
  }
79
- lastContentUpdateRef.current = Date.now();
80
- }
81
- const flushText = () => {
82
- const text = accTextRef.current;
83
- if (text.trim()) {
84
- setMessages(prev => [...prev, { role: "assistant", text }]);
285
+ break;
286
+ }
287
+ case "subagent_done":
288
+ {
289
+ const existing = subagentMap.get(event.id);
290
+ subagentMap.delete(event.id);
291
+ if (existing) {
292
+ pendingCompleted.push({
293
+ id: event.id,
294
+ type: event.agentType,
295
+ description: existing.description || "",
296
+ toolCount: event.tools.length,
297
+ tokens: event.tokens,
298
+ durationMs: event.durationMs,
299
+ success: event.success
300
+ });
85
301
  }
86
- accTextRef.current = "";
87
- dirty.text = false;
88
- setStreamingText("");
89
- };
90
- const emitter = new AgentEventEmitter();
91
- // Team tracking
92
- let teamName = "";
93
- let teamTotal = 0;
94
- let teamCompleted = 0;
95
- const teammateStatus = new Map();
96
- const unsub = emitter.onEvent((event) => {
97
- switch (event.type) {
98
- case "thinking":
99
- thinkingChunksRef.current = event.chunkCount;
100
- markDirty("text");
101
- break;
102
- case "text":
103
- if (thinkingChunksRef.current > 0 && !thinkingDoneRef.current) {
104
- thinkingDoneRef.current = true;
105
- markDirty("text");
106
- }
107
- accTextRef.current += event.text;
108
- markDirty("text");
109
- break;
110
- case "tool_output": {
111
- const idx = toolCalls.findIndex(t => t.name === event.toolName && t.status === "running");
112
- if (idx >= 0) {
113
- const prev = toolCalls[idx].result || "";
114
- const lines = (prev + "\n" + event.line).split("\n");
115
- toolCalls[idx].result = lines.slice(-4).join("\n").trim();
116
- markDirty("tools");
117
- }
118
- break;
119
- }
120
- case "tool_progress": {
121
- const idx = toolCalls.findIndex(t => t.name === event.toolName && t.status === "running");
122
- if (idx >= 0) {
123
- toolCalls[idx].progress = event.progress;
124
- markDirty("tools");
125
- }
126
- break;
127
- }
128
- case "team_start":
129
- teamName = event.name;
130
- teamTotal = event.taskCount;
131
- teamCompleted = 0;
132
- teammateStatus.clear();
133
- markDirty("team");
134
- break;
135
- case "team_task":
136
- if (event.status === "started") {
137
- const existing = teammateStatus.get(event.teammateId);
138
- teammateStatus.set(event.teammateId, { name: existing?.name || event.teammateId, status: event.taskDescription.slice(0, 50) });
139
- }
140
- else if (event.status === "completed") {
141
- teamCompleted++;
142
- const existing = teammateStatus.get(event.teammateId);
143
- teammateStatus.set(event.teammateId, { name: existing?.name || event.teammateId, status: "done" });
144
- }
145
- else if (event.status === "failed") {
146
- // Task failed, but teammate is still alive — show the failure briefly
147
- // as progress, don't permanently mark the teammate as "failed".
148
- // The teammate will claim the next task or send "done" when finished.
149
- const existing = teammateStatus.get(event.teammateId);
150
- teammateStatus.set(event.teammateId, { name: existing?.name || event.teammateId, status: "retrying…" });
151
- }
152
- markDirty("team");
153
- break;
154
- case "team_progress":
155
- teammateStatus.set(event.teammateId, { name: event.teammateName || event.teammateId, status: event.message.slice(0, 50) });
156
- markDirty("team");
157
- break;
158
- case "team_done":
159
- cancelFlush();
160
- setTeamState(null);
161
- accTextRef.current = "";
162
- setStreamingText("");
163
- break;
164
- case "subagent_start":
165
- subagentMap.set(event.id, {
166
- type: event.agentType,
167
- model: event.model,
168
- description: event.description,
169
- turn: 0,
170
- message: "starting\u2026",
171
- tools: [],
172
- startTime: Date.now(),
173
- });
174
- markDirty("subagents");
175
- break;
176
- case "subagent_progress": {
177
- const existing = subagentMap.get(event.id);
178
- if (existing) {
179
- subagentMap.set(event.id, {
180
- ...existing,
181
- turn: event.turn || existing.turn,
182
- message: event.message,
183
- });
184
- markDirty("subagents");
185
- }
186
- break;
187
- }
188
- case "subagent_tool_start": {
189
- const existing = subagentMap.get(event.agentId);
190
- if (existing) {
191
- subagentMap.set(event.agentId, {
192
- ...existing,
193
- tools: [...existing.tools, {
194
- name: event.toolName,
195
- status: "running",
196
- input: event.toolInput,
197
- }],
198
- });
199
- markDirty("subagents");
200
- }
201
- break;
202
- }
203
- case "subagent_tool_end": {
204
- const existing = subagentMap.get(event.agentId);
205
- if (existing) {
206
- const tools = [...existing.tools];
207
- for (let i = tools.length - 1; i >= 0; i--) {
208
- if (tools[i].name === event.toolName && tools[i].status === "running") {
209
- tools[i] = { ...tools[i], status: event.success ? "success" : "error", durationMs: event.durationMs };
210
- break;
211
- }
212
- }
213
- subagentMap.set(event.agentId, { ...existing, tools });
214
- markDirty("subagents");
215
- }
216
- break;
217
- }
218
- case "subagent_done": {
219
- const existing = subagentMap.get(event.id);
220
- subagentMap.delete(event.id);
221
- if (existing) {
222
- pendingCompleted.push({
223
- id: event.id,
224
- type: event.agentType,
225
- description: existing.description || "",
226
- toolCount: event.tools.length,
227
- tokens: event.tokens,
228
- durationMs: event.durationMs,
229
- success: event.success,
230
- });
231
- }
232
- markDirty("subagents");
233
- break;
302
+ markDirty("subagents");
303
+ break;
304
+ }
305
+ case "done":
306
+ cancelFlush();
307
+ accTextRef.current = event.text;
308
+ break;
309
+ }
310
+ });
311
+ await runAgentLoop({
312
+ message: userMessage,
313
+ images: images?.map(img_0 => ({
314
+ base64: img_0.base64,
315
+ mediaType: img_0.mediaType
316
+ })),
317
+ conversationHistory: conversationRef.current,
318
+ abortSignal: abort.signal,
319
+ emitter,
320
+ thinking: thinkingEnabled,
321
+ callbacks: {
322
+ onText: () => {},
323
+ onToolStart: (name, input) => {
324
+ if (input) {
325
+ // Update existing running tool with input, or create it if missing
326
+ const idx_1 = toolCalls.findIndex(t_1 => t_1.name === name && t_1.status === "running" && !t_1.input);
327
+ if (idx_1 >= 0) {
328
+ toolCalls[idx_1].input = input;
329
+ } else {
330
+ // dispatchTools.onStart fires with input directly add the tool now.
331
+ // Don't flushText() here — text was already flushed by the streaming
332
+ // parser's tool_use transition before dispatchTools executes.
333
+ toolCalls.push({
334
+ name,
335
+ status: "running",
336
+ input
337
+ });
338
+ }
339
+ setActiveTools([...toolCalls]);
340
+ lastContentUpdateRef.current = Date.now();
341
+ return;
342
+ }
343
+ flushText();
344
+ toolCalls.push({
345
+ name,
346
+ status: "running"
347
+ });
348
+ setActiveTools([...toolCalls]);
349
+ lastContentUpdateRef.current = Date.now();
350
+ },
351
+ onToolResult: (name_0, success, result, input_0, durationMs) => {
352
+ dirty.tools = false;
353
+ const completedTool = {
354
+ name: name_0,
355
+ status: success ? "success" : "error",
356
+ result: typeof result === "string" ? result : JSON.stringify(result),
357
+ input: input_0,
358
+ durationMs
359
+ };
360
+ const idx_2 = toolCalls.findIndex(t_2 => t_2.name === name_0 && t_2.status === "running");
361
+ if (idx_2 >= 0) toolCalls.splice(idx_2, 1);
362
+
363
+ // Track file changes for rewind
364
+ if (success && input_0) {
365
+ const FILE_TOOLS = ["write_file", "edit_file", "multi_edit"];
366
+ if (FILE_TOOLS.includes(name_0)) {
367
+ try {
368
+ const filePath = input_0.file_path;
369
+ if (filePath) {
370
+ // Find the most recent backup for this file from file-history
371
+ const backups = listBackups();
372
+ const fileName = filePath.split("/").pop() || "";
373
+ const backup = backups.find(b => b.name.endsWith(`-${fileName}`));
374
+ const isNewFile = !backup; // No backup means file didn't exist before
375
+ const op = name_0 === "write_file" ? "write" : name_0 === "edit_file" ? "edit" : "multi_edit";
376
+ rewindManagerRef.current.trackFileChange({
377
+ filePath,
378
+ backupPath: backup?.path || "",
379
+ operation: op,
380
+ isNewFile
381
+ });
234
382
  }
235
- case "done":
236
- cancelFlush();
237
- accTextRef.current = event.text;
238
- break;
383
+ } catch {
384
+ // Best effort — don't fail the actual operation
385
+ }
239
386
  }
240
- });
241
- await runAgentLoop({
242
- message: userMessage,
243
- images: images?.map(img => ({ base64: img.base64, mediaType: img.mediaType })),
244
- conversationHistory: conversationRef.current,
245
- abortSignal: abort.signal,
246
- emitter,
247
- thinking: thinkingEnabled,
248
- callbacks: {
249
- onText: () => { },
250
- onToolStart: (name, input) => {
251
- if (input) {
252
- const idx = toolCalls.findIndex(t => t.name === name && t.status === "running" && !t.input);
253
- if (idx >= 0) {
254
- toolCalls[idx].input = input;
255
- setActiveTools([...toolCalls]);
256
- lastContentUpdateRef.current = Date.now();
257
- }
258
- return;
259
- }
260
- flushText();
261
- toolCalls.push({ name, status: "running" });
262
- setActiveTools([...toolCalls]);
263
- lastContentUpdateRef.current = Date.now();
264
- },
265
- onToolResult: (name, success, result, input, durationMs) => {
266
- cancelFlush();
267
- dirty.tools = false;
268
- const completedTool = {
269
- name,
270
- status: success ? "success" : "error",
271
- result: typeof result === "string" ? result : JSON.stringify(result),
272
- input,
273
- durationMs,
274
- };
275
- const idx = toolCalls.findIndex((t) => t.name === name && t.status === "running");
276
- if (idx >= 0)
277
- toolCalls.splice(idx, 1);
278
- // Track file changes for rewind
279
- if (success && input) {
280
- const FILE_TOOLS = ["write_file", "edit_file", "multi_edit"];
281
- if (FILE_TOOLS.includes(name)) {
282
- try {
283
- const filePath = input.file_path;
284
- if (filePath) {
285
- // Find the most recent backup for this file from file-history
286
- const backups = listBackups();
287
- const fileName = filePath.split("/").pop() || "";
288
- const backup = backups.find(b => b.name.endsWith(`-${fileName}`));
289
- const isNewFile = !backup; // No backup means file didn't exist before
290
- const op = name === "write_file" ? "write"
291
- : name === "edit_file" ? "edit"
292
- : "multi_edit";
293
- rewindManagerRef.current.trackFileChange({
294
- filePath,
295
- backupPath: backup?.path || "",
296
- operation: op,
297
- isNewFile,
298
- });
299
- }
300
- }
301
- catch {
302
- // Best effort — don't fail the actual operation
303
- }
304
- }
305
- }
306
- // Each tool result is its own message — goes to Static immediately.
307
- // (Don't batch into the last message — Static can't re-render updated items.)
308
- setMessages(prev => [...prev, { role: "assistant", text: "", toolCalls: [completedTool] }]);
309
- setActiveTools([...toolCalls]);
310
- accTextRef.current = "";
311
- setStreamingText("");
312
- lastContentUpdateRef.current = Date.now();
313
- },
314
- onUsage: (input_tokens, output_tokens, thinking_tokens, model, costUsd, cacheReadTokens, cacheCreationTokens) => {
315
- usage = { input_tokens, output_tokens, thinking_tokens, model, costUsd, cache_read_tokens: cacheReadTokens, cache_creation_tokens: cacheCreationTokens };
316
- },
317
- onAutoCompact: (before, after, tokensSaved) => {
318
- setMessages((prev) => [...prev, {
319
- role: "assistant",
320
- text: ` Context auto-compacted: ${before} messages -> ${after} messages (~${(tokensSaved / 1000).toFixed(0)}K tokens freed)`,
321
- }]);
322
- },
323
- onDone: (finalMessages) => {
324
- unsub();
325
- emitter.destroy();
326
- cancelFlush();
327
- setStreamingText("");
328
- setCompletedSubagents(prevCompleted => {
329
- // Include any pending completed subagents from the batch
330
- const all = [...prevCompleted, ...pendingCompleted.splice(0)];
331
- if (all.length > 0) {
332
- setMessages(prev => [...prev, {
333
- role: "assistant",
334
- text: "",
335
- completedSubagents: all,
336
- }]);
337
- }
338
- return [];
339
- });
340
- const finalText = accTextRef.current;
341
- if (finalText.trim() || usage) {
342
- setMessages((prev) => [...prev, {
343
- role: "assistant",
344
- text: finalText,
345
- usage,
346
- }]);
347
- }
348
- // Record rewind checkpoint for this turn
349
- setMessages(prev => {
350
- const fileChanges = rewindManagerRef.current.getCurrentFileChanges();
351
- const summary = finalText.trim() || "(tool-only turn)";
352
- rewindManagerRef.current.addCheckpoint(turnIndexRef.current, prev.length, summary, fileChanges);
353
- rewindManagerRef.current.commitTurn();
354
- turnIndexRef.current++;
355
- return prev;
356
- });
357
- setStreamingText("");
358
- setActiveTools([]);
359
- setSubagentActivity(new Map());
360
- setTeamState(null);
361
- setIsStreaming(false);
362
- abortRef.current = null;
363
- conversationRef.current = finalMessages;
364
- },
365
- onError: (err, partialMessages) => {
366
- unsub();
367
- emitter.destroy();
368
- cancelFlush();
369
- if (err !== "Cancelled") {
370
- setMessages((prev) => [...prev, { role: "assistant", text: `\x1b[31m\u2718 Error: ${err}\x1b[0m` }]);
371
- }
372
- setStreamingText("");
373
- setActiveTools([]);
374
- setSubagentActivity(new Map());
375
- setCompletedSubagents([]);
376
- setTeamState(null);
377
- setIsStreaming(false);
378
- abortRef.current = null;
379
- if (partialMessages && partialMessages.length > 0) {
380
- conversationRef.current = partialMessages;
381
- }
382
- },
383
- },
384
- });
385
- }, [isStreaming, thinkingEnabled]);
386
- return { handleSend };
387
+ }
388
+
389
+ // Batch tool result messages — flushed via the 100ms dirty timer.
390
+ // This prevents 9 parallel failures from causing 9 separate Ink render
391
+ // cycles, which triggers fullscreen repaints and flickering.
392
+ pendingToolMsgs.push({
393
+ role: "assistant",
394
+ text: "",
395
+ toolCalls: [completedTool]
396
+ });
397
+ markDirty("messages");
398
+ setActiveTools([...toolCalls]);
399
+ accTextRef.current = "";
400
+ setStreamingText("");
401
+ lastContentUpdateRef.current = Date.now();
402
+ },
403
+ onUsage: (input_tokens, output_tokens, thinking_tokens, model, costUsd, cacheReadTokens, cacheCreationTokens) => {
404
+ usage = {
405
+ input_tokens,
406
+ output_tokens,
407
+ thinking_tokens,
408
+ model,
409
+ costUsd,
410
+ cache_read_tokens: cacheReadTokens,
411
+ cache_creation_tokens: cacheCreationTokens
412
+ };
413
+ },
414
+ onAutoCompact: (before, after, tokensSaved) => {
415
+ setMessages(prev_4 => [...prev_4, {
416
+ role: "assistant",
417
+ text: ` Context auto-compacted: ${before} messages -> ${after} messages (~${(tokensSaved / 1000).toFixed(0)}K tokens freed)`
418
+ }]);
419
+ },
420
+ onDone: finalMessages => {
421
+ unsub();
422
+ emitter.destroy();
423
+ cancelFlush();
424
+ // Flush any batched tool result messages before final message
425
+ if (pendingToolMsgs.length > 0) {
426
+ const batch_1 = pendingToolMsgs.splice(0);
427
+ setMessages(prev_5 => [...prev_5, ...batch_1]);
428
+ }
429
+ setStreamingText("");
430
+ setCompletedSubagents(prevCompleted => {
431
+ // Include any pending completed subagents from the batch
432
+ const all = [...prevCompleted, ...pendingCompleted.splice(0)];
433
+ if (all.length > 0) {
434
+ setMessages(prev_6 => [...prev_6, {
435
+ role: "assistant",
436
+ text: "",
437
+ completedSubagents: all
438
+ }]);
439
+ }
440
+ return [];
441
+ });
442
+ const finalText = accTextRef.current;
443
+ if (finalText.trim() || usage) {
444
+ setMessages(prev_7 => [...prev_7, {
445
+ role: "assistant",
446
+ text: finalText,
447
+ usage
448
+ }]);
449
+ }
450
+
451
+ // Record rewind checkpoint for this turn
452
+ setMessages(prev_8 => {
453
+ const fileChanges = rewindManagerRef.current.getCurrentFileChanges();
454
+ const summary = finalText.trim() || "(tool-only turn)";
455
+ rewindManagerRef.current.addCheckpoint(turnIndexRef.current, prev_8.length, summary, fileChanges);
456
+ rewindManagerRef.current.commitTurn();
457
+ turnIndexRef.current++;
458
+ return prev_8;
459
+ });
460
+ setStreamingText("");
461
+ setActiveTools([]);
462
+ setSubagentActivity(new Map());
463
+ setTeamState(null);
464
+ setIsStreaming(false);
465
+ abortRef.current = null;
466
+ conversationRef.current = finalMessages;
467
+ },
468
+ onError: (err, partialMessages) => {
469
+ unsub();
470
+ emitter.destroy();
471
+ cancelFlush();
472
+ // Flush any batched tool result messages before error message
473
+ if (pendingToolMsgs.length > 0) {
474
+ const batch_2 = pendingToolMsgs.splice(0);
475
+ setMessages(prev_9 => [...prev_9, ...batch_2]);
476
+ }
477
+ if (err !== "Cancelled") {
478
+ setMessages(prev_10 => [...prev_10, {
479
+ role: "assistant",
480
+ text: `\x1b[31m\u2718 Error: ${err}\x1b[0m`
481
+ }]);
482
+ }
483
+ setStreamingText("");
484
+ setActiveTools([]);
485
+ setSubagentActivity(new Map());
486
+ setCompletedSubagents([]);
487
+ setTeamState(null);
488
+ setIsStreaming(false);
489
+ abortRef.current = null;
490
+ if (partialMessages && partialMessages.length > 0) {
491
+ conversationRef.current = partialMessages;
492
+ }
493
+ }
494
+ }
495
+ });
496
+ };
497
+ return {
498
+ handleSend
499
+ };
387
500
  }
501
+ //# sourceMappingURL=useAgentLoop.js.map