whale-code 6.5.5 → 6.5.7

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 (2089) hide show
  1. package/README.md +39 -31
  2. package/bin/{swagmanager-mcp.js → whale-code.js} +40 -2
  3. package/dist/cli/__tests__/print-mode-streaming.test.js +270 -0
  4. package/dist/cli/__tests__/print-mode.basic-output.test.js +230 -0
  5. package/dist/cli/__tests__/print-mode.session-errors.test.js +252 -0
  6. package/dist/cli/__tests__/print-mode.test.js +273 -0
  7. package/dist/cli/__tests__/serve-mode-messages.test.js +338 -0
  8. package/dist/cli/__tests__/serve-mode.messages.part2.test.js +266 -0
  9. package/dist/cli/__tests__/serve-mode.messages.test.js +277 -0
  10. package/dist/cli/__tests__/serve-mode.startup-http.test.js +279 -0
  11. package/dist/cli/__tests__/serve-mode.test.js +345 -0
  12. package/dist/cli/app.d.ts +1 -0
  13. package/dist/cli/app.js +154 -72
  14. package/dist/cli/app.js.map +1 -0
  15. package/dist/cli/chat/AgentSelector.js +105 -10
  16. package/dist/cli/chat/AgentSelector.js.map +1 -0
  17. package/dist/cli/chat/ChatApp.d.ts +8 -5
  18. package/dist/cli/chat/ChatApp.js +253 -315
  19. package/dist/cli/chat/ChatApp.js.map +1 -0
  20. package/dist/cli/chat/ChatInput.d.ts +3 -2
  21. package/dist/cli/chat/ChatInput.js +1111 -770
  22. package/dist/cli/chat/ChatInput.js.map +1 -0
  23. package/dist/cli/chat/ImsgManager.d.ts +20 -0
  24. package/dist/cli/chat/ImsgManager.js +341 -0
  25. package/dist/cli/chat/ImsgManager.js.map +1 -0
  26. package/dist/cli/chat/MarkdownText.d.ts +2 -1
  27. package/dist/cli/chat/MarkdownText.js +44 -15
  28. package/dist/cli/chat/MarkdownText.js.map +1 -0
  29. package/dist/cli/chat/MemoryManager.js +182 -46
  30. package/dist/cli/chat/MemoryManager.js.map +1 -0
  31. package/dist/cli/chat/MessageList.d.ts +3 -4
  32. package/dist/cli/chat/MessageList.js +195 -49
  33. package/dist/cli/chat/MessageList.js.map +1 -0
  34. package/dist/cli/chat/ModelSelector.js +282 -63
  35. package/dist/cli/chat/ModelSelector.js.map +1 -0
  36. package/dist/cli/chat/NodeManager.js +61 -84
  37. package/dist/cli/chat/NodeManager.js.map +1 -0
  38. package/dist/cli/chat/NodeSelector.js +171 -30
  39. package/dist/cli/chat/NodeSelector.js.map +1 -0
  40. package/dist/cli/chat/OverlayContext.d.ts +27 -0
  41. package/dist/cli/chat/OverlayContext.js +2 -0
  42. package/dist/cli/chat/OverlayContext.js.map +1 -0
  43. package/dist/cli/chat/PlanApproval.js +282 -57
  44. package/dist/cli/chat/PlanApproval.js.map +1 -0
  45. package/dist/cli/chat/RewindConfirmation.d.ts +12 -0
  46. package/dist/cli/chat/RewindConfirmation.js +243 -0
  47. package/dist/cli/chat/RewindConfirmation.js.map +1 -0
  48. package/dist/cli/chat/RewindViewer.js +560 -144
  49. package/dist/cli/chat/RewindViewer.js.map +1 -0
  50. package/dist/cli/chat/SessionManager.js +138 -30
  51. package/dist/cli/chat/SessionManager.js.map +1 -0
  52. package/dist/cli/chat/SlashMenu.d.ts +7 -24
  53. package/dist/cli/chat/SlashMenu.js +150 -190
  54. package/dist/cli/chat/SlashMenu.js.map +1 -0
  55. package/dist/cli/chat/StatusBar.d.ts +5 -2
  56. package/dist/cli/chat/StatusBar.js +188 -10
  57. package/dist/cli/chat/StatusBar.js.map +1 -0
  58. package/dist/cli/chat/StoreSelector.js +147 -18
  59. package/dist/cli/chat/StoreSelector.js.map +1 -0
  60. package/dist/cli/chat/StreamingText.d.ts +0 -3
  61. package/dist/cli/chat/StreamingText.js +21 -6
  62. package/dist/cli/chat/StreamingText.js.map +1 -0
  63. package/dist/cli/chat/SubagentPanel.d.ts +6 -7
  64. package/dist/cli/chat/SubagentPanel.js +253 -91
  65. package/dist/cli/chat/SubagentPanel.js.map +1 -0
  66. package/dist/cli/chat/TeamPanel.d.ts +1 -0
  67. package/dist/cli/chat/TeamPanel.js +201 -29
  68. package/dist/cli/chat/TeamPanel.js.map +1 -0
  69. package/dist/cli/chat/ThemeSelector.js +84 -24
  70. package/dist/cli/chat/ThemeSelector.js.map +1 -0
  71. package/dist/cli/chat/ToolIndicator.d.ts +7 -23
  72. package/dist/cli/chat/ToolIndicator.js +635 -430
  73. package/dist/cli/chat/ToolIndicator.js.map +1 -0
  74. package/dist/cli/chat/chat-input-menu-handler.d.ts +32 -0
  75. package/dist/cli/chat/components/LiveArea.d.ts +12 -0
  76. package/dist/cli/chat/components/LiveArea.js +252 -0
  77. package/dist/cli/chat/components/LiveArea.js.map +1 -0
  78. package/dist/cli/chat/components/OverlayRouter.d.ts +13 -0
  79. package/dist/cli/chat/components/OverlayRouter.js +257 -0
  80. package/dist/cli/chat/components/OverlayRouter.js.map +1 -0
  81. package/dist/cli/chat/components/StaticMessages.d.ts +9 -0
  82. package/dist/cli/chat/components/StaticMessages.js +132 -0
  83. package/dist/cli/chat/components/StaticMessages.js.map +1 -0
  84. package/dist/cli/chat/hooks/agent-loop-events.d.ts +77 -0
  85. package/dist/cli/chat/hooks/agent-loop-events.js +171 -0
  86. package/dist/cli/chat/hooks/agent-loop-events.js.map +1 -0
  87. package/dist/cli/chat/hooks/slash-command-config-system.d.ts +11 -0
  88. package/dist/cli/chat/hooks/slash-command-config-system.js +177 -0
  89. package/dist/cli/chat/hooks/slash-command-config-system.js.map +1 -0
  90. package/dist/cli/chat/hooks/slash-command-handlers-system.d.ts +12 -0
  91. package/dist/cli/chat/hooks/slash-command-handlers-system.js +127 -0
  92. package/dist/cli/chat/hooks/slash-command-handlers-system.js.map +1 -0
  93. package/dist/cli/chat/hooks/slash-command-handlers.d.ts +21 -0
  94. package/dist/cli/chat/hooks/slash-command-handlers.js +222 -0
  95. package/dist/cli/chat/hooks/slash-command-handlers.js.map +1 -0
  96. package/dist/cli/chat/hooks/slash-imsg-handlers.js +148 -0
  97. package/dist/cli/chat/hooks/slash-imsg-handlers.js.map +1 -0
  98. package/dist/cli/chat/hooks/slash-node-handlers.d.ts +26 -0
  99. package/dist/cli/chat/hooks/slash-node-handlers.js +226 -0
  100. package/dist/cli/chat/hooks/slash-node-handlers.js.map +1 -0
  101. package/dist/cli/chat/hooks/useAgentLoop.d.ts +2 -20
  102. package/dist/cli/chat/hooks/useAgentLoop.js +344 -373
  103. package/dist/cli/chat/hooks/useAgentLoop.js.map +1 -0
  104. package/dist/cli/chat/hooks/useElapsedClock.d.ts +19 -0
  105. package/dist/cli/chat/hooks/useElapsedClock.js +80 -0
  106. package/dist/cli/chat/hooks/useElapsedClock.js.map +1 -0
  107. package/dist/cli/chat/hooks/useOverlayHandlers.d.ts +23 -0
  108. package/dist/cli/chat/hooks/useOverlayHandlers.js +125 -0
  109. package/dist/cli/chat/hooks/useOverlayHandlers.js.map +1 -0
  110. package/dist/cli/chat/hooks/useSlashCommands.d.ts +14 -33
  111. package/dist/cli/chat/hooks/useSlashCommands.js +167 -616
  112. package/dist/cli/chat/hooks/useSlashCommands.js.map +1 -0
  113. package/dist/cli/chat/hooks/useStreamingReducer.d.ts +66 -0
  114. package/dist/cli/chat/imsg-manager-render.d.ts +29 -0
  115. package/dist/cli/chat/imsg-manager-render.js +294 -0
  116. package/dist/cli/chat/imsg-manager-render.js.map +1 -0
  117. package/dist/cli/chat/slash-commands.d.ts +37 -0
  118. package/dist/cli/chat/slash-commands.js +194 -0
  119. package/dist/cli/chat/slash-commands.js.map +1 -0
  120. package/dist/cli/chat/store.d.ts +115 -0
  121. package/dist/cli/chat/store.js +177 -0
  122. package/dist/cli/chat/store.js.map +1 -0
  123. package/dist/cli/chat/tool-indicator-helpers.d.ts +14 -0
  124. package/dist/cli/chat/tool-indicator-helpers.js +167 -0
  125. package/dist/cli/chat/tool-indicator-helpers.js.map +1 -0
  126. package/dist/cli/chat/tool-indicator-summary.d.ts +6 -0
  127. package/dist/cli/chat/tool-indicator-summary.js +103 -0
  128. package/dist/cli/chat/tool-indicator-summary.js.map +1 -0
  129. package/dist/cli/chat/tool-indicator-types.d.ts +66 -0
  130. package/dist/cli/chat/tool-indicator-types.js +177 -0
  131. package/dist/cli/chat/tool-indicator-types.js.map +1 -0
  132. package/dist/cli/commands/__tests__/config-cmd.test.js +270 -0
  133. package/dist/cli/commands/__tests__/doctor.test.js +257 -0
  134. package/dist/cli/commands/__tests__/imsg-node-bridge.test.js +99 -0
  135. package/dist/cli/commands/__tests__/imsg-utils.test.js +73 -0
  136. package/dist/cli/commands/__tests__/init.test.js +214 -0
  137. package/dist/cli/commands/__tests__/mcp.test.js +287 -0
  138. package/dist/cli/commands/config-cmd.js +56 -57
  139. package/dist/cli/commands/config-cmd.js.map +1 -0
  140. package/dist/cli/commands/db.js +184 -169
  141. package/dist/cli/commands/db.js.map +1 -0
  142. package/dist/cli/commands/doctor.js +212 -122
  143. package/dist/cli/commands/doctor.js.map +1 -0
  144. package/dist/cli/commands/imsg-config.d.ts +31 -0
  145. package/dist/cli/commands/imsg-config.js +104 -0
  146. package/dist/cli/commands/imsg-config.js.map +1 -0
  147. package/dist/cli/commands/imsg-node-bridge.d.ts +25 -0
  148. package/dist/cli/commands/imsg-node-bridge.js +229 -0
  149. package/dist/cli/commands/imsg-node-bridge.js.map +1 -0
  150. package/dist/cli/commands/imsg-utils.d.ts +14 -0
  151. package/dist/cli/commands/imsg-utils.js +42 -0
  152. package/dist/cli/commands/imsg-utils.js.map +1 -0
  153. package/dist/cli/commands/imsg-watcher-helpers.d.ts +40 -0
  154. package/dist/cli/commands/imsg-watcher-helpers.js +184 -0
  155. package/dist/cli/commands/imsg-watcher-helpers.js.map +1 -0
  156. package/dist/cli/commands/imsg-watcher.d.ts +11 -0
  157. package/dist/cli/commands/imsg-watcher.js +230 -0
  158. package/dist/cli/commands/imsg-watcher.js.map +1 -0
  159. package/dist/cli/commands/imsg.d.ts +14 -0
  160. package/dist/cli/commands/imsg.js +181 -0
  161. package/dist/cli/commands/imsg.js.map +1 -0
  162. package/dist/cli/commands/init.js +211 -244
  163. package/dist/cli/commands/init.js.map +1 -0
  164. package/dist/cli/commands/mcp.js +127 -122
  165. package/dist/cli/commands/mcp.js.map +1 -0
  166. package/dist/cli/commands/sessions.d.ts +9 -0
  167. package/dist/cli/commands/sessions.js +93 -0
  168. package/dist/cli/commands/sessions.js.map +1 -0
  169. package/dist/cli/login/LoginApp.js +358 -141
  170. package/dist/cli/login/LoginApp.js.map +1 -0
  171. package/dist/cli/print-mode.js +196 -177
  172. package/dist/cli/print-mode.js.map +1 -0
  173. package/dist/cli/serve-mode-persistence.d.ts +18 -0
  174. package/dist/cli/serve-mode-persistence.js +157 -0
  175. package/dist/cli/serve-mode-persistence.js.map +1 -0
  176. package/dist/cli/serve-mode-query.d.ts +9 -0
  177. package/dist/cli/serve-mode-query.js +247 -0
  178. package/dist/cli/serve-mode-query.js.map +1 -0
  179. package/dist/cli/serve-mode-types.d.ts +29 -0
  180. package/dist/cli/serve-mode-types.js +56 -0
  181. package/dist/cli/serve-mode-types.js.map +1 -0
  182. package/dist/cli/serve-mode.js +615 -530
  183. package/dist/cli/serve-mode.js.map +1 -0
  184. package/dist/cli/services/__tests__/agent-definitions.test.js +153 -0
  185. package/dist/cli/services/__tests__/agent-events-global.test.js +39 -0
  186. package/dist/cli/services/__tests__/agent-events.part2.test.js +113 -0
  187. package/dist/cli/services/__tests__/agent-events.test.js +157 -0
  188. package/dist/cli/services/__tests__/agent-loop-auth.test.js +392 -0
  189. package/dist/cli/services/__tests__/agent-loop-budget.test.js +389 -0
  190. package/dist/cli/services/__tests__/agent-loop-tools-lifecycle.test.js +430 -0
  191. package/dist/cli/services/__tests__/agent-loop-tools-maxturns.test.js +486 -0
  192. package/dist/cli/services/__tests__/agent-loop-utils-execution.test.js +528 -0
  193. package/dist/cli/services/__tests__/agent-loop-utils-helpers.test.js +466 -0
  194. package/dist/cli/services/__tests__/agent-worker-base-execute.test.js +257 -0
  195. package/dist/cli/services/__tests__/agent-worker-base-helpers.test.js +198 -0
  196. package/dist/cli/services/__tests__/agent-worker-base.test.js +278 -0
  197. package/dist/cli/services/__tests__/auth-service-exports.test.js +41 -0
  198. package/dist/cli/services/__tests__/auth-service.part2.test.js +169 -0
  199. package/dist/cli/services/__tests__/auth-service.test.js +242 -0
  200. package/dist/cli/services/__tests__/background-processes.test.js +282 -0
  201. package/dist/cli/services/__tests__/claude-md-loader.test.js +134 -0
  202. package/dist/cli/services/__tests__/config-store.test.js +247 -0
  203. package/dist/cli/services/__tests__/debug-log.test.js +199 -0
  204. package/dist/cli/services/__tests__/edge-cases-caching.test.js +174 -0
  205. package/dist/cli/services/__tests__/edge-cases-compaction-core.test.js +226 -0
  206. package/dist/cli/services/__tests__/edge-cases-compaction-openai.test.js +152 -0
  207. package/dist/cli/services/__tests__/edge-cases-compaction-shapes.test.js +53 -0
  208. package/dist/cli/services/__tests__/edge-cases-compaction-thinking.test.js +226 -0
  209. package/dist/cli/services/__tests__/edge-cases-compaction.test.js +131 -0
  210. package/dist/cli/services/__tests__/edge-cases-paths.test.js +86 -0
  211. package/dist/cli/services/__tests__/error-logger-messages.test.js +81 -0
  212. package/dist/cli/services/__tests__/error-logger-transport.test.js +119 -0
  213. package/dist/cli/services/__tests__/error-logger.test.js +264 -0
  214. package/dist/cli/services/__tests__/file-history.test.js +136 -0
  215. package/dist/cli/services/__tests__/git-context-cache-reset.test.js +223 -0
  216. package/dist/cli/services/__tests__/git-context.test.js +241 -0
  217. package/dist/cli/services/__tests__/interactive-tools-execute.test.js +166 -0
  218. package/dist/cli/services/__tests__/interactive-tools-plan.test.js +197 -0
  219. package/dist/cli/services/__tests__/interactive-tools.part2.test.js +168 -0
  220. package/dist/cli/services/__tests__/interactive-tools.test.js +179 -0
  221. package/dist/cli/services/__tests__/keybinding-manager.test.js +205 -0
  222. package/dist/cli/services/__tests__/local-tools-dispatch.test.js +404 -0
  223. package/dist/cli/services/__tests__/local-tools.test.js +238 -0
  224. package/dist/cli/services/__tests__/lsp-manager.test.js +364 -0
  225. package/dist/cli/services/__tests__/mcp-client-connect-disconnect.test.js +310 -0
  226. package/dist/cli/services/__tests__/mcp-client.test.js +93 -0
  227. package/dist/cli/services/__tests__/memory-manager.test.js +154 -0
  228. package/dist/cli/services/__tests__/model-manager-utils.test.js +154 -0
  229. package/dist/cli/services/__tests__/model-manager.test.js +175 -0
  230. package/dist/cli/services/__tests__/permission-modes.test.js +222 -0
  231. package/dist/cli/services/__tests__/ripgrep.test.js +328 -0
  232. package/dist/cli/services/__tests__/server-tools-execute.test.js +317 -0
  233. package/dist/cli/services/__tests__/server-tools.test.js +272 -0
  234. package/dist/cli/services/__tests__/session-persistence.test.js +245 -0
  235. package/dist/cli/services/__tests__/subagent-basic.test.js +489 -0
  236. package/dist/cli/services/__tests__/subagent-edge.test.js +545 -0
  237. package/dist/cli/services/__tests__/subagent-prompts.test.js +558 -0
  238. package/dist/cli/services/__tests__/subagent-worker-errors.test.js +255 -0
  239. package/dist/cli/services/__tests__/subagent-worker.test.js +242 -0
  240. package/dist/cli/services/__tests__/system-prompt.test.js +210 -0
  241. package/dist/cli/services/__tests__/team-lead-comms-messaging.test.js +250 -0
  242. package/dist/cli/services/__tests__/team-lead-comms-result.test.js +232 -0
  243. package/dist/cli/services/__tests__/team-lead-comms-stop.test.js +344 -0
  244. package/dist/cli/services/__tests__/team-lead-comms.test.js +285 -0
  245. package/dist/cli/services/__tests__/team-lead-create.test.js +327 -0
  246. package/dist/cli/services/__tests__/team-lead-run.test.js +318 -0
  247. package/dist/cli/services/__tests__/team-lead-stop.test.js +199 -0
  248. package/dist/cli/services/__tests__/team-state-comms.test.js +240 -0
  249. package/dist/cli/services/__tests__/team-state-core.test.js +230 -0
  250. package/dist/cli/services/__tests__/team-state-tasks-complete-fail-available.test.js +224 -0
  251. package/dist/cli/services/__tests__/team-state-tasks.test.js +184 -0
  252. package/dist/cli/services/__tests__/telemetry-ai-metadata.test.js +116 -0
  253. package/dist/cli/services/__tests__/telemetry.part2.test.js +195 -0
  254. package/dist/cli/services/__tests__/telemetry.test.js +176 -0
  255. package/dist/cli/services/agent-config.d.ts +5 -1
  256. package/dist/cli/services/agent-config.js +66 -36
  257. package/dist/cli/services/agent-config.js.map +1 -0
  258. package/dist/cli/services/agent-definitions.d.ts +4 -1
  259. package/dist/cli/services/agent-definitions.js +97 -56
  260. package/dist/cli/services/agent-definitions.js.map +1 -0
  261. package/dist/cli/services/agent-event-types.d.ts +148 -0
  262. package/dist/cli/services/agent-event-types.js +2 -0
  263. package/dist/cli/services/agent-event-types.js.map +1 -0
  264. package/dist/cli/services/agent-events.js +225 -162
  265. package/dist/cli/services/agent-events.js.map +1 -0
  266. package/dist/cli/services/agent-loop-iteration.d.ts +13 -0
  267. package/dist/cli/services/agent-loop-setup.d.ts +32 -0
  268. package/dist/cli/services/agent-loop-shell-summarize.d.ts +11 -0
  269. package/dist/cli/services/agent-loop-shell-summarize.js +94 -0
  270. package/dist/cli/services/agent-loop-shell-summarize.js.map +1 -0
  271. package/dist/cli/services/agent-loop-tools.d.ts +37 -0
  272. package/dist/cli/services/agent-loop-tools.js +243 -0
  273. package/dist/cli/services/agent-loop-tools.js.map +1 -0
  274. package/dist/cli/services/agent-loop-types.d.ts +52 -0
  275. package/dist/cli/services/agent-loop-types.js +25 -0
  276. package/dist/cli/services/agent-loop-types.js.map +1 -0
  277. package/dist/cli/services/agent-loop.d.ts +2 -2
  278. package/dist/cli/services/agent-loop.js +1135 -702
  279. package/dist/cli/services/agent-loop.js.map +1 -0
  280. package/dist/cli/services/agent-worker-base-api.d.ts +19 -0
  281. package/dist/cli/services/agent-worker-base-helpers.d.ts +27 -0
  282. package/dist/cli/services/agent-worker-base-tools.d.ts +16 -0
  283. package/dist/cli/services/agent-worker-base-types.d.ts +81 -0
  284. package/dist/cli/services/agent-worker-base.d.ts +35 -5
  285. package/dist/cli/services/agent-worker-base.js +337 -153
  286. package/dist/cli/services/agent-worker-base.js.map +1 -0
  287. package/dist/cli/services/api-retry.js +69 -64
  288. package/dist/cli/services/api-retry.js.map +1 -0
  289. package/dist/cli/services/auth-service.d.ts +3 -3
  290. package/dist/cli/services/auth-service.js +213 -136
  291. package/dist/cli/services/auth-service.js.map +1 -0
  292. package/dist/cli/services/background-agents.d.ts +26 -0
  293. package/dist/cli/services/background-processes-ops.d.ts +24 -0
  294. package/dist/cli/services/background-processes.d.ts +2 -1
  295. package/dist/cli/services/background-processes.js +347 -267
  296. package/dist/cli/services/background-processes.js.map +1 -0
  297. package/dist/cli/services/background-tool-defs.d.ts +50 -0
  298. package/dist/cli/services/browser-auth.d.ts +2 -2
  299. package/dist/cli/services/browser-auth.js +159 -118
  300. package/dist/cli/services/browser-auth.js.map +1 -0
  301. package/dist/cli/services/claude-md-loader.js +40 -36
  302. package/dist/cli/services/claude-md-loader.js.map +1 -0
  303. package/dist/cli/services/cli-agent-loop.d.ts +41 -0
  304. package/dist/cli/services/cli-agent-loop.js +104 -0
  305. package/dist/cli/services/cli-agent-loop.js.map +1 -0
  306. package/dist/cli/services/config-modules-model.test.js +133 -0
  307. package/dist/cli/services/config-modules-permission.test.js +85 -0
  308. package/dist/cli/services/config-modules-permissions.test.js +85 -0
  309. package/dist/cli/services/config-modules-session.test.js +297 -0
  310. package/dist/cli/services/config-store.d.ts +14 -4
  311. package/dist/cli/services/config-store.js +249 -117
  312. package/dist/cli/services/config-store.js.map +1 -0
  313. package/dist/cli/services/debug-log.d.ts +1 -1
  314. package/dist/cli/services/debug-log.js +34 -35
  315. package/dist/cli/services/debug-log.js.map +1 -0
  316. package/dist/cli/services/env-detect.d.ts +7 -0
  317. package/dist/cli/services/env-detect.js +9 -0
  318. package/dist/cli/services/env-detect.js.map +1 -0
  319. package/dist/cli/services/error-logger-internals.d.ts +25 -0
  320. package/dist/cli/services/error-logger-internals.js +111 -0
  321. package/dist/cli/services/error-logger-internals.js.map +1 -0
  322. package/dist/cli/services/error-logger.js +187 -169
  323. package/dist/cli/services/error-logger.js.map +1 -0
  324. package/dist/cli/services/file-history.d.ts +1 -1
  325. package/dist/cli/services/file-history.js +50 -54
  326. package/dist/cli/services/file-history.js.map +1 -0
  327. package/dist/cli/services/format-server-response-columns.test.js +265 -0
  328. package/dist/cli/services/format-server-response-fallback.test.js +65 -0
  329. package/dist/cli/services/format-server-response-formatters.d.ts +18 -0
  330. package/dist/cli/services/format-server-response-formatters.js +195 -0
  331. package/dist/cli/services/format-server-response-formatters.js.map +1 -0
  332. package/dist/cli/services/format-server-response-primitives-basic.test.js +261 -0
  333. package/dist/cli/services/format-server-response-primitives-nested.test.js +188 -0
  334. package/dist/cli/services/format-server-response-primitives.test.js +300 -0
  335. package/dist/cli/services/format-server-response-realworld.test.js +248 -0
  336. package/dist/cli/services/format-server-response-values.test.js +247 -0
  337. package/dist/cli/services/format-server-response.js +334 -372
  338. package/dist/cli/services/format-server-response.js.map +1 -0
  339. package/dist/cli/services/git-context.js +61 -45
  340. package/dist/cli/services/git-context.js.map +1 -0
  341. package/dist/cli/services/hooks-execute.d.ts +47 -0
  342. package/dist/cli/services/hooks-execute.js +181 -0
  343. package/dist/cli/services/hooks-execute.js.map +1 -0
  344. package/dist/cli/services/hooks-runners.test.js +184 -0
  345. package/dist/cli/services/hooks.d.ts +2 -2
  346. package/dist/cli/services/hooks.glob-load.test.js +233 -0
  347. package/dist/cli/services/hooks.js +195 -180
  348. package/dist/cli/services/hooks.js.map +1 -0
  349. package/dist/cli/services/hooks.run-hooks.test.js +184 -0
  350. package/dist/cli/services/hooks.test.js +233 -0
  351. package/dist/cli/services/ink-incremental.d.ts +19 -0
  352. package/dist/cli/services/ink-incremental.js +59 -0
  353. package/dist/cli/services/ink-incremental.js.map +1 -0
  354. package/dist/cli/services/ink-resize-fix.js +54 -44
  355. package/dist/cli/services/ink-resize-fix.js.map +1 -0
  356. package/dist/cli/services/ink-sync-output.d.ts +12 -0
  357. package/dist/cli/services/ink-sync-output.js +16 -0
  358. package/dist/cli/services/ink-sync-output.js.map +1 -0
  359. package/dist/cli/services/interactive-tool-defs.d.ts +80 -0
  360. package/dist/cli/services/interactive-tools.d.ts +5 -2
  361. package/dist/cli/services/interactive-tools.js +283 -213
  362. package/dist/cli/services/interactive-tools.js.map +1 -0
  363. package/dist/cli/services/keybinding-manager.d.ts +13 -1
  364. package/dist/cli/services/keybinding-manager.js +131 -63
  365. package/dist/cli/services/keybinding-manager.js.map +1 -0
  366. package/dist/cli/services/local-tools-agent-defs-tasks.d.ts +6 -0
  367. package/dist/cli/services/local-tools-agent-defs-tasks.js +245 -0
  368. package/dist/cli/services/local-tools-agent-defs-tasks.js.map +1 -0
  369. package/dist/cli/services/local-tools-agent-defs-utils.d.ts +6 -0
  370. package/dist/cli/services/local-tools-agent-defs-utils.js +198 -0
  371. package/dist/cli/services/local-tools-agent-defs-utils.js.map +1 -0
  372. package/dist/cli/services/local-tools-agent-defs.d.ts +10 -0
  373. package/dist/cli/services/local-tools-agent-defs.js +13 -0
  374. package/dist/cli/services/local-tools-agent-defs.js.map +1 -0
  375. package/dist/cli/services/local-tools-definitions.d.ts +6 -0
  376. package/dist/cli/services/local-tools-files.test.js +256 -0
  377. package/dist/cli/services/local-tools-read-many.d.ts +6 -0
  378. package/dist/cli/services/local-tools.d.ts +1 -1
  379. package/dist/cli/services/local-tools.js +938 -657
  380. package/dist/cli/services/local-tools.js.map +1 -0
  381. package/dist/cli/services/lsp-config.d.ts +13 -0
  382. package/dist/cli/services/lsp-config.js +72 -0
  383. package/dist/cli/services/lsp-config.js.map +1 -0
  384. package/dist/cli/services/lsp-formatters.d.ts +11 -0
  385. package/dist/cli/services/lsp-formatters.js +209 -0
  386. package/dist/cli/services/lsp-formatters.js.map +1 -0
  387. package/dist/cli/services/lsp-manager.js +757 -594
  388. package/dist/cli/services/lsp-manager.js.map +1 -0
  389. package/dist/cli/services/lsp-protocol.d.ts +9 -0
  390. package/dist/cli/services/lsp-protocol.js +40 -0
  391. package/dist/cli/services/lsp-protocol.js.map +1 -0
  392. package/dist/cli/services/lsp-server-docs.d.ts +8 -0
  393. package/dist/cli/services/lsp-server-docs.js +132 -0
  394. package/dist/cli/services/lsp-server-docs.js.map +1 -0
  395. package/dist/cli/services/lsp-server-documents.d.ts +8 -0
  396. package/dist/cli/services/lsp-server-documents.js +132 -0
  397. package/dist/cli/services/lsp-server-documents.js.map +1 -0
  398. package/dist/cli/services/lsp-server.d.ts +40 -0
  399. package/dist/cli/services/lsp-server.js +270 -0
  400. package/dist/cli/services/lsp-server.js.map +1 -0
  401. package/dist/cli/services/mcp-client.d.ts +1 -1
  402. package/dist/cli/services/mcp-client.js +173 -134
  403. package/dist/cli/services/mcp-client.js.map +1 -0
  404. package/dist/cli/services/memory-manager.js +53 -40
  405. package/dist/cli/services/memory-manager.js.map +1 -0
  406. package/dist/cli/services/model-manager.js +55 -40
  407. package/dist/cli/services/model-manager.js.map +1 -0
  408. package/dist/cli/services/model-router.js +115 -85
  409. package/dist/cli/services/model-router.js.map +1 -0
  410. package/dist/cli/services/model-router.test.js +245 -0
  411. package/dist/cli/services/paths.d.ts +30 -0
  412. package/dist/cli/services/paths.js +81 -0
  413. package/dist/cli/services/paths.js.map +1 -0
  414. package/dist/cli/services/permission-modes.js +45 -25
  415. package/dist/cli/services/permission-modes.js.map +1 -0
  416. package/dist/cli/services/project-index.d.ts +41 -0
  417. package/dist/cli/services/project-index.js +286 -0
  418. package/dist/cli/services/project-index.js.map +1 -0
  419. package/dist/cli/services/rewind-rewindTo.test.js +202 -0
  420. package/dist/cli/services/rewind.js +182 -168
  421. package/dist/cli/services/rewind.js.map +1 -0
  422. package/dist/cli/services/rewind.test.js +175 -0
  423. package/dist/cli/services/ripgrep.js +115 -115
  424. package/dist/cli/services/ripgrep.js.map +1 -0
  425. package/dist/cli/services/sandbox.d.ts +1 -1
  426. package/dist/cli/services/sandbox.js +58 -37
  427. package/dist/cli/services/sandbox.js.map +1 -0
  428. package/dist/cli/services/sandbox.test.js +198 -0
  429. package/dist/cli/services/server-tools-client.d.ts +46 -0
  430. package/dist/cli/services/server-tools-client.js +211 -0
  431. package/dist/cli/services/server-tools-client.js.map +1 -0
  432. package/dist/cli/services/server-tools-media.d.ts +21 -0
  433. package/dist/cli/services/server-tools-media.js +163 -0
  434. package/dist/cli/services/server-tools-media.js.map +1 -0
  435. package/dist/cli/services/server-tools-preprocess.d.ts +23 -0
  436. package/dist/cli/services/server-tools-preprocess.js +386 -0
  437. package/dist/cli/services/server-tools-preprocess.js.map +1 -0
  438. package/dist/cli/services/server-tools.d.ts +2 -0
  439. package/dist/cli/services/server-tools.js +763 -565
  440. package/dist/cli/services/server-tools.js.map +1 -0
  441. package/dist/cli/services/session-client.d.ts +78 -0
  442. package/dist/cli/services/session-client.js +197 -0
  443. package/dist/cli/services/session-client.js.map +1 -0
  444. package/dist/cli/services/session-persistence.d.ts +3 -0
  445. package/dist/cli/services/session-persistence.js +81 -74
  446. package/dist/cli/services/session-persistence.js.map +1 -0
  447. package/dist/cli/services/subagent-execution.d.ts +12 -0
  448. package/dist/cli/services/subagent-loop-v2.d.ts +36 -0
  449. package/dist/cli/services/subagent-loop-v2.js +238 -0
  450. package/dist/cli/services/subagent-loop-v2.js.map +1 -0
  451. package/dist/cli/services/subagent-tools.d.ts +10 -0
  452. package/dist/cli/services/subagent-tools.js +96 -0
  453. package/dist/cli/services/subagent-tools.js.map +1 -0
  454. package/dist/cli/services/subagent-types.d.ts +57 -0
  455. package/dist/cli/services/subagent-types.js +218 -0
  456. package/dist/cli/services/subagent-types.js.map +1 -0
  457. package/dist/cli/services/subagent-worker.js +42 -27
  458. package/dist/cli/services/subagent-worker.js.map +1 -0
  459. package/dist/cli/services/subagent.d.ts +2 -0
  460. package/dist/cli/services/subagent.js +606 -433
  461. package/dist/cli/services/subagent.js.map +1 -0
  462. package/dist/cli/services/system-prompt.js +111 -80
  463. package/dist/cli/services/system-prompt.js.map +1 -0
  464. package/dist/cli/services/task-decomposer.d.ts +1 -1
  465. package/dist/cli/services/task-decomposer.js +172 -139
  466. package/dist/cli/services/task-decomposer.js.map +1 -0
  467. package/dist/cli/services/team-lead-auto.d.ts +11 -0
  468. package/dist/cli/services/team-lead-execution.d.ts +28 -0
  469. package/dist/cli/services/team-lead-types.d.ts +37 -0
  470. package/dist/cli/services/team-lead-types.js +2 -0
  471. package/dist/cli/services/team-lead-types.js.map +1 -0
  472. package/dist/cli/services/team-lead.d.ts +62 -2
  473. package/dist/cli/services/team-lead.js +863 -528
  474. package/dist/cli/services/team-lead.js.map +1 -0
  475. package/dist/cli/services/team-state-members.d.ts +11 -0
  476. package/dist/cli/services/team-state-members.js +185 -0
  477. package/dist/cli/services/team-state-members.js.map +1 -0
  478. package/dist/cli/services/team-state-messaging.d.ts +16 -0
  479. package/dist/cli/services/team-state-messaging.js +90 -0
  480. package/dist/cli/services/team-state-messaging.js.map +1 -0
  481. package/dist/cli/services/team-state-tasks.d.ts +12 -0
  482. package/dist/cli/services/team-state-tasks.js +23 -0
  483. package/dist/cli/services/team-state-tasks.js.map +1 -0
  484. package/dist/cli/services/team-state-types.d.ts +54 -0
  485. package/dist/cli/services/team-state-types.js +129 -0
  486. package/dist/cli/services/team-state-types.js.map +1 -0
  487. package/dist/cli/services/team-state.d.ts +5 -0
  488. package/dist/cli/services/team-state.js +348 -319
  489. package/dist/cli/services/team-state.js.map +1 -0
  490. package/dist/cli/services/teammate-loop.js +557 -0
  491. package/dist/cli/services/teammate-loop.js.map +1 -0
  492. package/dist/cli/services/teammate-prompt.d.ts +2 -0
  493. package/dist/cli/services/teammate-prompt.js +68 -0
  494. package/dist/cli/services/teammate-prompt.js.map +1 -0
  495. package/dist/cli/services/teammate-tools.d.ts +6 -0
  496. package/dist/cli/services/teammate-tools.js +158 -0
  497. package/dist/cli/services/teammate-tools.js.map +1 -0
  498. package/dist/cli/services/teammate-types.d.ts +36 -0
  499. package/dist/cli/services/teammate-types.js +43 -0
  500. package/dist/cli/services/teammate-types.js.map +1 -0
  501. package/dist/cli/services/teammate-worker-helpers.d.ts +71 -0
  502. package/dist/cli/services/teammate-worker-helpers.js +183 -0
  503. package/dist/cli/services/teammate-worker-helpers.js.map +1 -0
  504. package/dist/cli/services/teammate-worker-task-cleanup.d.ts +27 -0
  505. package/dist/cli/services/teammate-worker-task-cleanup.js +91 -0
  506. package/dist/cli/services/teammate-worker-task-cleanup.js.map +1 -0
  507. package/dist/cli/services/teammate-worker-task-loop.d.ts +35 -0
  508. package/dist/cli/services/teammate-worker-task-loop.js +273 -0
  509. package/dist/cli/services/teammate-worker-task-loop.js.map +1 -0
  510. package/dist/cli/services/teammate-worker.d.ts +13 -0
  511. package/dist/cli/services/teammate-worker.js +294 -0
  512. package/dist/cli/services/teammate-worker.js.map +1 -0
  513. package/dist/cli/services/teammate.d.ts +8 -2
  514. package/dist/cli/services/teammate.js +857 -569
  515. package/dist/cli/services/teammate.js.map +1 -0
  516. package/dist/cli/services/telemetry-spans.d.ts +17 -0
  517. package/dist/cli/services/telemetry-spans.js +172 -0
  518. package/dist/cli/services/telemetry-spans.js.map +1 -0
  519. package/dist/cli/services/telemetry.d.ts +6 -1
  520. package/dist/cli/services/telemetry.js +180 -157
  521. package/dist/cli/services/telemetry.js.map +1 -0
  522. package/dist/cli/services/tools/__tests__/agent-tools-tasks-teams.test.js +250 -0
  523. package/dist/cli/services/tools/__tests__/agent-tools-teams.test.js +200 -0
  524. package/dist/cli/services/tools/__tests__/agent-tools.test.js +340 -0
  525. package/dist/cli/services/tools/__tests__/file-ops-cache.test.js +152 -0
  526. package/dist/cli/services/tools/__tests__/file-ops-notebook.test.js +249 -0
  527. package/dist/cli/services/tools/__tests__/file-ops-read.test.js +261 -0
  528. package/dist/cli/services/tools/__tests__/file-ops-write.test.js +292 -0
  529. package/dist/cli/services/tools/__tests__/search-tools-rg.test.js +92 -0
  530. package/dist/cli/services/tools/__tests__/search-tools.part2.test.js +174 -0
  531. package/dist/cli/services/tools/__tests__/search-tools.test.js +227 -0
  532. package/dist/cli/services/tools/__tests__/shell-exec-allowed-core.test.js +163 -0
  533. package/dist/cli/services/tools/__tests__/shell-exec-allowed-extended.test.js +220 -0
  534. package/dist/cli/services/tools/__tests__/shell-exec-allowed.part2.test.js +215 -0
  535. package/dist/cli/services/tools/__tests__/shell-exec-allowed.test.js +154 -0
  536. package/dist/cli/services/tools/__tests__/shell-exec-blocked.test.js +132 -0
  537. package/dist/cli/services/tools/__tests__/shell-exec-execution.test.js +245 -0
  538. package/dist/cli/services/tools/__tests__/task-manager-create.test.js +110 -0
  539. package/dist/cli/services/tools/__tests__/task-manager-crud.test.js +339 -0
  540. package/dist/cli/services/tools/__tests__/task-manager-list-get.test.js +343 -0
  541. package/dist/cli/services/tools/__tests__/task-manager-query.test.js +346 -0
  542. package/dist/cli/services/tools/__tests__/task-manager-routing.test.js +58 -0
  543. package/dist/cli/services/tools/__tests__/task-manager-update.test.js +224 -0
  544. package/dist/cli/services/tools/__tests__/task-manager.test.js +159 -0
  545. package/dist/cli/services/tools/__tests__/web-tools-html-search.test.js +227 -0
  546. package/dist/cli/services/tools/__tests__/web-tools.test.js +285 -0
  547. package/dist/cli/services/tools/agent-tools-tasks.d.ts +10 -0
  548. package/dist/cli/services/tools/agent-tools-tasks.js +216 -0
  549. package/dist/cli/services/tools/agent-tools-tasks.js.map +1 -0
  550. package/dist/cli/services/tools/agent-tools-team.d.ts +8 -0
  551. package/dist/cli/services/tools/agent-tools-team.js +101 -0
  552. package/dist/cli/services/tools/agent-tools-team.js.map +1 -0
  553. package/dist/cli/services/tools/agent-tools.d.ts +3 -3
  554. package/dist/cli/services/tools/agent-tools.js +555 -324
  555. package/dist/cli/services/tools/agent-tools.js.map +1 -0
  556. package/dist/cli/services/tools/file-ops-notebook.d.ts +9 -0
  557. package/dist/cli/services/tools/file-ops-notebook.js +186 -0
  558. package/dist/cli/services/tools/file-ops-notebook.js.map +1 -0
  559. package/dist/cli/services/tools/file-ops-read.d.ts +11 -0
  560. package/dist/cli/services/tools/file-ops-read.js +237 -0
  561. package/dist/cli/services/tools/file-ops-read.js.map +1 -0
  562. package/dist/cli/services/tools/file-ops-write.d.ts +8 -0
  563. package/dist/cli/services/tools/file-ops-write.js +260 -0
  564. package/dist/cli/services/tools/file-ops-write.js.map +1 -0
  565. package/dist/cli/services/tools/file-ops.d.ts +1 -0
  566. package/dist/cli/services/tools/file-ops.js +727 -447
  567. package/dist/cli/services/tools/file-ops.js.map +1 -0
  568. package/dist/cli/services/tools/html-to-text.d.ts +6 -0
  569. package/dist/cli/services/tools/html-to-text.js +118 -0
  570. package/dist/cli/services/tools/html-to-text.js.map +1 -0
  571. package/dist/cli/services/tools/search-tools.js +231 -162
  572. package/dist/cli/services/tools/search-tools.js.map +1 -0
  573. package/dist/cli/services/tools/shell-exec.js +197 -151
  574. package/dist/cli/services/tools/shell-exec.js.map +1 -0
  575. package/dist/cli/services/tools/shell-exec.test.js +148 -0
  576. package/dist/cli/services/tools/ssrf-guard.d.ts +6 -0
  577. package/dist/cli/services/tools/ssrf-guard.js +80 -0
  578. package/dist/cli/services/tools/ssrf-guard.js.map +1 -0
  579. package/dist/cli/services/tools/task-manager.js +206 -173
  580. package/dist/cli/services/tools/task-manager.js.map +1 -0
  581. package/dist/cli/services/tools/web-tools.js +388 -341
  582. package/dist/cli/services/tools/web-tools.js.map +1 -0
  583. package/dist/cli/setup/SetupApp.d.ts +2 -2
  584. package/dist/cli/setup/SetupApp.js +608 -160
  585. package/dist/cli/setup/SetupApp.js.map +1 -0
  586. package/dist/cli/setup/SetupComponents.d.ts +10 -0
  587. package/dist/cli/setup/SetupComponents.js +144 -0
  588. package/dist/cli/setup/SetupComponents.js.map +1 -0
  589. package/dist/cli/setup/setup-cli-targets.d.ts +9 -0
  590. package/dist/cli/setup/setup-cli-targets.js +49 -0
  591. package/dist/cli/setup/setup-cli-targets.js.map +1 -0
  592. package/dist/cli/shared/ErrorBoundary.d.ts +22 -0
  593. package/dist/cli/shared/ErrorBoundary.js +73 -0
  594. package/dist/cli/shared/ErrorBoundary.js.map +1 -0
  595. package/dist/cli/shared/InlineErrorBoundary.d.ts +22 -0
  596. package/dist/cli/shared/InlineErrorBoundary.js +35 -0
  597. package/dist/cli/shared/InlineErrorBoundary.js.map +1 -0
  598. package/dist/cli/shared/MatrixIntro.js +67 -69
  599. package/dist/cli/shared/MatrixIntro.js.map +1 -0
  600. package/dist/cli/shared/SharedTick.d.ts +10 -0
  601. package/dist/cli/shared/SpinnerSlot.d.ts +22 -0
  602. package/dist/cli/shared/SpinnerSlot.js +156 -0
  603. package/dist/cli/shared/SpinnerSlot.js.map +1 -0
  604. package/dist/cli/shared/Theme.d.ts +1 -1
  605. package/dist/cli/shared/Theme.js +136 -92
  606. package/dist/cli/shared/Theme.js.map +1 -0
  607. package/dist/cli/shared/WhaleBanner.js +100 -11
  608. package/dist/cli/shared/WhaleBanner.js.map +1 -0
  609. package/dist/cli/shared/__tests__/markdown.test.js +188 -0
  610. package/dist/cli/shared/format-utils.d.ts +16 -0
  611. package/dist/cli/shared/format-utils.js +121 -0
  612. package/dist/cli/shared/format-utils.js.map +1 -0
  613. package/dist/cli/shared/markdown-chart.d.ts +8 -0
  614. package/dist/cli/shared/markdown-chart.js +92 -0
  615. package/dist/cli/shared/markdown-chart.js.map +1 -0
  616. package/dist/cli/shared/markdown-diff.d.ts +15 -0
  617. package/dist/cli/shared/markdown-diff.js +205 -0
  618. package/dist/cli/shared/markdown-diff.js.map +1 -0
  619. package/dist/cli/shared/markdown-helpers.d.ts +33 -0
  620. package/dist/cli/shared/markdown-helpers.js +129 -0
  621. package/dist/cli/shared/markdown-helpers.js.map +1 -0
  622. package/dist/cli/shared/markdown-table.d.ts +10 -0
  623. package/dist/cli/shared/markdown-table.js +227 -0
  624. package/dist/cli/shared/markdown-table.js.map +1 -0
  625. package/dist/cli/shared/markdown.d.ts +2 -4
  626. package/dist/cli/shared/markdown.js +658 -703
  627. package/dist/cli/shared/markdown.js.map +1 -0
  628. package/dist/cli/shared/marked-terminal.d.js +2 -0
  629. package/dist/cli/shared/marked-terminal.d.js.map +1 -0
  630. package/dist/cli/shared/theme-manager.js +99 -90
  631. package/dist/cli/shared/theme-manager.js.map +1 -0
  632. package/dist/cli/shared/theme-presets.js +256 -254
  633. package/dist/cli/shared/theme-presets.js.map +1 -0
  634. package/dist/cli/shared/useLatestRef.d.ts +11 -0
  635. package/dist/cli/shared/useLatestRef.js +34 -0
  636. package/dist/cli/shared/useLatestRef.js.map +1 -0
  637. package/dist/cli/shared/useSyncState.d.ts +11 -0
  638. package/dist/cli/shared/useSyncState.js +39 -0
  639. package/dist/cli/shared/useSyncState.js.map +1 -0
  640. package/dist/cli/status/StatusApp.js +235 -86
  641. package/dist/cli/status/StatusApp.js.map +1 -0
  642. package/dist/cli/stores/StoreApp.js +278 -66
  643. package/dist/cli/stores/StoreApp.js.map +1 -0
  644. package/dist/index-agent.d.ts +11 -0
  645. package/dist/index-agent.js +83 -0
  646. package/dist/index-agent.js.map +1 -0
  647. package/dist/index-auth.d.ts +22 -0
  648. package/dist/index-auth.js +114 -0
  649. package/dist/index-auth.js.map +1 -0
  650. package/dist/index-handlers.d.ts +25 -0
  651. package/dist/index-handlers.js +164 -0
  652. package/dist/index-handlers.js.map +1 -0
  653. package/dist/index-tools.d.ts +22 -0
  654. package/dist/index-tools.js +115 -0
  655. package/dist/index-tools.js.map +1 -0
  656. package/dist/index.d.ts +2 -2
  657. package/dist/index.js +509 -396
  658. package/dist/index.js.map +1 -0
  659. package/dist/local-agent/__tests__/connection-disconnect.test.js +201 -0
  660. package/dist/local-agent/__tests__/connection-lifecycle.test.js +289 -0
  661. package/dist/local-agent/__tests__/connection-msghandling.test.js +311 -0
  662. package/dist/local-agent/__tests__/connection-reconnect.test.js +230 -0
  663. package/dist/local-agent/__tests__/connection-toolexec.test.js +253 -0
  664. package/dist/local-agent/__tests__/discovery.test.js +328 -0
  665. package/dist/local-agent/__tests__/executor-background.test.js +219 -0
  666. package/dist/local-agent/__tests__/executor-exec.test.js +221 -0
  667. package/dist/local-agent/__tests__/executor-jobs-sessions.test.js +220 -0
  668. package/dist/local-agent/__tests__/executor-system-info.test.js +133 -0
  669. package/dist/local-agent/__tests__/executor-systeminfo.test.js +109 -0
  670. package/dist/local-agent/__tests__/executor.test.js +235 -0
  671. package/dist/local-agent/__tests__/index.test.js +139 -0
  672. package/dist/local-agent/connection-handlers.d.ts +8 -0
  673. package/dist/local-agent/connection-handlers.js +112 -0
  674. package/dist/local-agent/connection-handlers.js.map +1 -0
  675. package/dist/local-agent/connection-tools.d.ts +8 -0
  676. package/dist/local-agent/connection-tools.js +111 -0
  677. package/dist/local-agent/connection-tools.js.map +1 -0
  678. package/dist/local-agent/connection.d.ts +2 -2
  679. package/dist/local-agent/connection.js +352 -293
  680. package/dist/local-agent/connection.js.map +1 -0
  681. package/dist/local-agent/discovery.js +259 -122
  682. package/dist/local-agent/discovery.js.map +1 -0
  683. package/dist/local-agent/executor-jobs.d.ts +12 -0
  684. package/dist/local-agent/executor-jobs.js +143 -0
  685. package/dist/local-agent/executor-jobs.js.map +1 -0
  686. package/dist/local-agent/executor.d.ts +3 -0
  687. package/dist/local-agent/executor.js +218 -195
  688. package/dist/local-agent/executor.js.map +1 -0
  689. package/dist/local-agent/index.d.ts +2 -2
  690. package/dist/local-agent/index.js +156 -156
  691. package/dist/local-agent/index.js.map +1 -0
  692. package/dist/node/__tests__/cli-channels.test.js +293 -0
  693. package/dist/node/__tests__/cli-config-edge.test.js +154 -0
  694. package/dist/node/__tests__/cli-config.test.js +215 -0
  695. package/dist/node/__tests__/config.test.js +292 -0
  696. package/dist/node/__tests__/runtime-heartbeat.test.js +153 -0
  697. package/dist/node/__tests__/runtime-lifecycle-init.test.js +263 -0
  698. package/dist/node/__tests__/runtime-lifecycle-stats.test.js +180 -0
  699. package/dist/node/__tests__/runtime-lifecycle.test.js +305 -0
  700. package/dist/node/__tests__/runtime-relay.test.js +341 -0
  701. package/dist/node/adapters/__tests__/base.test.js +286 -0
  702. package/dist/node/adapters/__tests__/discord.test.js +284 -0
  703. package/dist/node/adapters/__tests__/email-send.test.js +295 -0
  704. package/dist/node/adapters/__tests__/email.inbound-send.test.js +217 -0
  705. package/dist/node/adapters/__tests__/email.lifecycle.test.js +211 -0
  706. package/dist/node/adapters/__tests__/email.test.js +290 -0
  707. package/dist/node/adapters/__tests__/email.webhook-send.test.js +251 -0
  708. package/dist/node/adapters/__tests__/imessage-filter.test.js +183 -0
  709. package/dist/node/adapters/__tests__/imessage-lifecycle.test.js +215 -0
  710. package/dist/node/adapters/__tests__/imessage-send-restart.test.js +227 -0
  711. package/dist/node/adapters/__tests__/slack.part2.test.js +135 -0
  712. package/dist/node/adapters/__tests__/slack.test.js +241 -0
  713. package/dist/node/adapters/__tests__/sms-extras.test.js +108 -0
  714. package/dist/node/adapters/__tests__/sms-lifecycle.test.js +203 -0
  715. package/dist/node/adapters/__tests__/sms-messaging.test.js +266 -0
  716. package/dist/node/adapters/__tests__/sms.part2.test.js +174 -0
  717. package/dist/node/adapters/__tests__/sms.test.js +253 -0
  718. package/dist/node/adapters/__tests__/telegram-polling.test.js +256 -0
  719. package/dist/node/adapters/__tests__/telegram-send.test.js +166 -0
  720. package/dist/node/adapters/__tests__/webchat-inbound.test.js +188 -0
  721. package/dist/node/adapters/__tests__/webchat-outbound.test.js +178 -0
  722. package/dist/node/adapters/__tests__/whatsapp-inbound.test.js +200 -0
  723. package/dist/node/adapters/__tests__/whatsapp-send.test.js +212 -0
  724. package/dist/node/adapters/__tests__/whatsapp.test.js +280 -0
  725. package/dist/node/adapters/base.js +18 -8
  726. package/dist/node/adapters/base.js.map +1 -0
  727. package/dist/node/adapters/discord-gateway.d.ts +42 -0
  728. package/dist/node/adapters/discord-gateway.js +169 -0
  729. package/dist/node/adapters/discord-gateway.js.map +1 -0
  730. package/dist/node/adapters/discord.js +286 -275
  731. package/dist/node/adapters/discord.js.map +1 -0
  732. package/dist/node/adapters/email.js +189 -202
  733. package/dist/node/adapters/email.js.map +1 -0
  734. package/dist/node/adapters/imessage.d.ts +11 -0
  735. package/dist/node/adapters/imessage.js +165 -145
  736. package/dist/node/adapters/imessage.js.map +1 -0
  737. package/dist/node/adapters/slack.js +237 -236
  738. package/dist/node/adapters/slack.js.map +1 -0
  739. package/dist/node/adapters/sms.js +149 -151
  740. package/dist/node/adapters/sms.js.map +1 -0
  741. package/dist/node/adapters/telegram.js +88 -92
  742. package/dist/node/adapters/telegram.js.map +1 -0
  743. package/dist/node/adapters/webchat.js +160 -136
  744. package/dist/node/adapters/webchat.js.map +1 -0
  745. package/dist/node/adapters/whatsapp.js +212 -215
  746. package/dist/node/adapters/whatsapp.js.map +1 -0
  747. package/dist/node/cli-channels.d.ts +6 -0
  748. package/dist/node/cli-channels.js +229 -0
  749. package/dist/node/cli-channels.js.map +1 -0
  750. package/dist/node/cli-node.d.ts +9 -0
  751. package/dist/node/cli-node.js +186 -0
  752. package/dist/node/cli-node.js.map +1 -0
  753. package/dist/node/cli-portal.d.ts +11 -0
  754. package/dist/node/cli-portal.js +503 -0
  755. package/dist/node/cli-portal.js.map +1 -0
  756. package/dist/node/cli.js +884 -653
  757. package/dist/node/cli.js.map +1 -0
  758. package/dist/node/config.js +20 -18
  759. package/dist/node/config.js.map +1 -0
  760. package/dist/node/gateway-client.js +191 -181
  761. package/dist/node/gateway-client.js.map +1 -0
  762. package/dist/node/portal/clipboard.js +161 -130
  763. package/dist/node/portal/clipboard.js.map +1 -0
  764. package/dist/node/portal/discovery.js +51 -45
  765. package/dist/node/portal/discovery.js.map +1 -0
  766. package/dist/node/portal/forward.js +64 -58
  767. package/dist/node/portal/forward.js.map +1 -0
  768. package/dist/node/portal/index.js +246 -221
  769. package/dist/node/portal/index.js.map +1 -0
  770. package/dist/node/portal/multiplexer.js +192 -182
  771. package/dist/node/portal/multiplexer.js.map +1 -0
  772. package/dist/node/portal/permissions.js +102 -70
  773. package/dist/node/portal/permissions.js.map +1 -0
  774. package/dist/node/portal/portal-target.d.ts +16 -0
  775. package/dist/node/portal/portal-target.js +102 -0
  776. package/dist/node/portal/portal-target.js.map +1 -0
  777. package/dist/node/portal/protocol-frames.d.ts +33 -0
  778. package/dist/node/portal/protocol-frames.js +170 -0
  779. package/dist/node/portal/protocol-frames.js.map +1 -0
  780. package/dist/node/portal/protocol.js +153 -116
  781. package/dist/node/portal/protocol.js.map +1 -0
  782. package/dist/node/portal/screen.js +80 -69
  783. package/dist/node/portal/screen.js.map +1 -0
  784. package/dist/node/portal/session.js +124 -117
  785. package/dist/node/portal/session.js.map +1 -0
  786. package/dist/node/portal/shell.js +140 -113
  787. package/dist/node/portal/shell.js.map +1 -0
  788. package/dist/node/portal/stream.js +77 -75
  789. package/dist/node/portal/stream.js.map +1 -0
  790. package/dist/node/portal/transfer.js +190 -167
  791. package/dist/node/portal/transfer.js.map +1 -0
  792. package/dist/node/portal/ui.js +124 -99
  793. package/dist/node/portal/ui.js.map +1 -0
  794. package/dist/node/remote-desktop/compile-helper.js +50 -45
  795. package/dist/node/remote-desktop/compile-helper.js.map +1 -0
  796. package/dist/node/remote-desktop/index.js +215 -187
  797. package/dist/node/remote-desktop/index.js.map +1 -0
  798. package/dist/node/remote-desktop/protocol.js +45 -29
  799. package/dist/node/remote-desktop/protocol.js.map +1 -0
  800. package/dist/node/runtime-network.d.ts +25 -0
  801. package/dist/node/runtime-network.js +226 -0
  802. package/dist/node/runtime-network.js.map +1 -0
  803. package/dist/node/runtime-utils.d.ts +27 -0
  804. package/dist/node/runtime-utils.js +99 -0
  805. package/dist/node/runtime-utils.js.map +1 -0
  806. package/dist/node/runtime.d.ts +1 -0
  807. package/dist/node/runtime.js +562 -409
  808. package/dist/node/runtime.js.map +1 -0
  809. package/dist/node/task-runner.d.ts +33 -0
  810. package/dist/node/task-runner.js +276 -0
  811. package/dist/node/task-runner.js.map +1 -0
  812. package/dist/server/__tests__/gateway-fast-fail.test.js +160 -0
  813. package/dist/server/__tests__/local-agent-gateway.test.js +186 -0
  814. package/dist/server/__tests__/proxy-handlers-delegation.test.js +240 -0
  815. package/dist/server/__tests__/proxy-handlers-validation.test.js +211 -0
  816. package/dist/server/__tests__/proxy-handlers.part2.test.js +240 -0
  817. package/dist/server/__tests__/proxy-handlers.test.js +213 -0
  818. package/dist/server/__tests__/strip-base64-e2e.test.js +303 -0
  819. package/dist/server/__tests__/strip-base64.test.js +256 -0
  820. package/dist/server/__tests__/tool-router-agent-tools.test.js +324 -0
  821. package/dist/server/__tests__/tool-router-execute-core.test.js +357 -0
  822. package/dist/server/__tests__/tool-router-execute-permissions.test.js +332 -0
  823. package/dist/server/__tests__/tool-router-execute.test.js +348 -0
  824. package/dist/server/__tests__/tool-router-load.test.js +432 -0
  825. package/dist/server/__tests__/tool-router-permissions.test.js +359 -0
  826. package/dist/server/__tests__/tool-router-registry-cache.test.js +383 -0
  827. package/dist/server/__tests__/tool-router-registry-handlers.test.js +272 -0
  828. package/dist/server/__tests__/tool-router-registry.test.js +331 -0
  829. package/dist/server/__tests__/validation-inventory.test.js +250 -0
  830. package/dist/server/__tests__/validation-misc.test.js +243 -0
  831. package/dist/server/__tests__/validation-supply-chain.test.js +188 -0
  832. package/dist/server/__tests__/worker.test.js +265 -0
  833. package/dist/server/handlers/__test-utils__/test-db.d.ts +2 -0
  834. package/dist/server/handlers/__test-utils__/test-db.js +52 -89
  835. package/dist/server/handlers/__test-utils__/test-db.js.map +1 -0
  836. package/dist/server/handlers/__tests__/conversation-lock.test.js +117 -0
  837. package/dist/server/handlers/__tests__/e2e/auth-cross-platform-login.e2e.test.js +268 -0
  838. package/dist/server/handlers/__tests__/e2e/auth-cross-platform-tokens.e2e.test.js +264 -0
  839. package/dist/server/handlers/__tests__/e2e/email-pipeline-send.e2e.test.js +214 -0
  840. package/dist/server/handlers/__tests__/e2e/email-pipeline-threads.e2e.test.js +168 -0
  841. package/dist/server/handlers/__tests__/e2e/error-logging-pipeline-dedup.e2e.test.js +229 -0
  842. package/dist/server/handlers/__tests__/e2e/error-logging-pipeline.e2e.test.js +239 -0
  843. package/dist/server/handlers/__tests__/e2e/error-logging-rate-limit.e2e.test.js +150 -0
  844. package/dist/server/handlers/__tests__/e2e/inventory-sync-guards.e2e.test.js +177 -0
  845. package/dist/server/handlers/__tests__/e2e/inventory-sync.e2e.test.js +228 -0
  846. package/dist/server/handlers/__tests__/e2e/inventory-sync.part2.e2e.test.js +188 -0
  847. package/dist/server/handlers/__tests__/e2e/order-lifecycle-fulfillment.e2e.test.js +295 -0
  848. package/dist/server/handlers/__tests__/e2e/order-lifecycle.e2e.test.js +277 -0
  849. package/dist/server/handlers/__tests__/e2e/order-lifecycle.fulfillment.e2e.test.js +307 -0
  850. package/dist/server/handlers/__tests__/e2e/order-lifecycle.setup.e2e.test.js +177 -0
  851. package/dist/server/handlers/__tests__/e2e/storefront-checkout-cart.e2e.test.js +255 -0
  852. package/dist/server/handlers/__tests__/e2e/storefront-checkout-webhook.e2e.test.js +231 -0
  853. package/dist/server/handlers/__tests__/e2e/workflow-execution-failures.e2e.test.js +235 -0
  854. package/dist/server/handlers/__tests__/e2e/workflow-execution.e2e.test.js +294 -0
  855. package/dist/server/handlers/__tests__/e2e/workflow-security.e2e.test.js +311 -0
  856. package/dist/server/handlers/__tests__/e2e/workflow-security.part2.e2e.test.js +267 -0
  857. package/dist/server/handlers/__tests__/workflow-cache.test.js +237 -0
  858. package/dist/server/handlers/analytics-errors-edge.test.js +173 -0
  859. package/dist/server/handlers/analytics.js +553 -260
  860. package/dist/server/handlers/analytics.js.map +1 -0
  861. package/dist/server/handlers/analytics.test.js +280 -0
  862. package/dist/server/handlers/api-docs-examples-ext.d.ts +9 -0
  863. package/dist/server/handlers/api-docs-examples-ext.js +278 -0
  864. package/dist/server/handlers/api-docs-examples-ext.js.map +1 -0
  865. package/dist/server/handlers/api-docs-examples.d.ts +8 -0
  866. package/dist/server/handlers/api-docs-examples.js +221 -0
  867. package/dist/server/handlers/api-docs-examples.js.map +1 -0
  868. package/dist/server/handlers/api-docs-sections-ext.d.ts +2 -0
  869. package/dist/server/handlers/api-docs-sections-ext.js +497 -0
  870. package/dist/server/handlers/api-docs-sections-ext.js.map +1 -0
  871. package/dist/server/handlers/api-docs-sections.d.ts +21 -0
  872. package/dist/server/handlers/api-docs-sections.js +293 -0
  873. package/dist/server/handlers/api-docs-sections.js.map +1 -0
  874. package/dist/server/handlers/api-docs.d.ts +2 -0
  875. package/dist/server/handlers/api-docs.js +1205 -893
  876. package/dist/server/handlers/api-docs.js.map +1 -0
  877. package/dist/server/handlers/api-keys.js +291 -242
  878. package/dist/server/handlers/api-keys.js.map +1 -0
  879. package/dist/server/handlers/api-keys.part2.test.js +157 -0
  880. package/dist/server/handlers/api-keys.test.js +161 -0
  881. package/dist/server/handlers/billing-core.d.ts +28 -0
  882. package/dist/server/handlers/billing-core.js +126 -0
  883. package/dist/server/handlers/billing-core.js.map +1 -0
  884. package/dist/server/handlers/billing-routes.d.ts +9 -0
  885. package/dist/server/handlers/billing-routes.js +243 -0
  886. package/dist/server/handlers/billing-routes.js.map +1 -0
  887. package/dist/server/handlers/billing-routes.test.js +123 -0
  888. package/dist/server/handlers/billing.js +330 -239
  889. package/dist/server/handlers/billing.js.map +1 -0
  890. package/dist/server/handlers/billing.test.js +215 -0
  891. package/dist/server/handlers/browser-actions-errors.test.js +94 -0
  892. package/dist/server/handlers/browser-actions.d.ts +35 -0
  893. package/dist/server/handlers/browser-actions.js +171 -0
  894. package/dist/server/handlers/browser-actions.js.map +1 -0
  895. package/dist/server/handlers/browser-actions.part2.test.js +190 -0
  896. package/dist/server/handlers/browser-actions.test.js +190 -0
  897. package/dist/server/handlers/browser-captcha.d.ts +6 -0
  898. package/dist/server/handlers/browser-captcha.js +172 -0
  899. package/dist/server/handlers/browser-captcha.js.map +1 -0
  900. package/dist/server/handlers/browser-lifecycle.d.ts +9 -0
  901. package/dist/server/handlers/browser-lifecycle.js +142 -0
  902. package/dist/server/handlers/browser-lifecycle.js.map +1 -0
  903. package/dist/server/handlers/browser-validation.test.js +257 -0
  904. package/dist/server/handlers/browser.js +468 -395
  905. package/dist/server/handlers/browser.js.map +1 -0
  906. package/dist/server/handlers/catalog-advanced.d.ts +9 -0
  907. package/dist/server/handlers/catalog-advanced.js +352 -0
  908. package/dist/server/handlers/catalog-advanced.js.map +1 -0
  909. package/dist/server/handlers/catalog-categories.d.ts +5 -0
  910. package/dist/server/handlers/catalog-categories.js +181 -0
  911. package/dist/server/handlers/catalog-categories.js.map +1 -0
  912. package/dist/server/handlers/catalog-products.d.ts +5 -0
  913. package/dist/server/handlers/catalog-products.js +404 -0
  914. package/dist/server/handlers/catalog-products.js.map +1 -0
  915. package/dist/server/handlers/catalog-schemas.d.ts +5 -0
  916. package/dist/server/handlers/catalog-schemas.js +426 -0
  917. package/dist/server/handlers/catalog-schemas.js.map +1 -0
  918. package/dist/server/handlers/catalog.js +1377 -978
  919. package/dist/server/handlers/catalog.js.map +1 -0
  920. package/dist/server/handlers/catalog.test.js +297 -0
  921. package/dist/server/handlers/clickhouse.js +157 -109
  922. package/dist/server/handlers/clickhouse.js.map +1 -0
  923. package/dist/server/handlers/comms-documents-advanced.d.ts +8 -0
  924. package/dist/server/handlers/comms-documents-advanced.js +159 -0
  925. package/dist/server/handlers/comms-documents-advanced.js.map +1 -0
  926. package/dist/server/handlers/comms-documents.d.ts +10 -0
  927. package/dist/server/handlers/comms-documents.js +445 -0
  928. package/dist/server/handlers/comms-documents.js.map +1 -0
  929. package/dist/server/handlers/comms-email.d.ts +10 -0
  930. package/dist/server/handlers/comms-email.js +492 -0
  931. package/dist/server/handlers/comms-email.js.map +1 -0
  932. package/dist/server/handlers/comms-pdf-generation.d.ts +8 -0
  933. package/dist/server/handlers/comms-pdf-generation.js +327 -0
  934. package/dist/server/handlers/comms-pdf-generation.js.map +1 -0
  935. package/dist/server/handlers/comms-pdf-helpers.d.ts +9 -0
  936. package/dist/server/handlers/comms-pdf-helpers.js +126 -0
  937. package/dist/server/handlers/comms-pdf-helpers.js.map +1 -0
  938. package/dist/server/handlers/comms-shared.d.ts +3 -0
  939. package/dist/server/handlers/comms-shared.js +28 -0
  940. package/dist/server/handlers/comms-shared.js.map +1 -0
  941. package/dist/server/handlers/comms.js +1439 -984
  942. package/dist/server/handlers/comms.js.map +1 -0
  943. package/dist/server/handlers/comms.test.js +289 -0
  944. package/dist/server/handlers/creations-actions.d.ts +21 -0
  945. package/dist/server/handlers/creations-actions.js +250 -0
  946. package/dist/server/handlers/creations-actions.js.map +1 -0
  947. package/dist/server/handlers/creations-advanced-collections.test.js +214 -0
  948. package/dist/server/handlers/creations-advanced-generate.test.js +142 -0
  949. package/dist/server/handlers/creations-advanced.test.js +171 -0
  950. package/dist/server/handlers/creations-collections-preview.test.js +214 -0
  951. package/dist/server/handlers/creations-crud.d.ts +35 -0
  952. package/dist/server/handlers/creations-crud.js +248 -0
  953. package/dist/server/handlers/creations-crud.js.map +1 -0
  954. package/dist/server/handlers/creations-crud.test.js +260 -0
  955. package/dist/server/handlers/creations-generate.d.ts +21 -0
  956. package/dist/server/handlers/creations-generate.js +256 -0
  957. package/dist/server/handlers/creations-generate.js.map +1 -0
  958. package/dist/server/handlers/creations-mutations.test.js +197 -0
  959. package/dist/server/handlers/creations.js +461 -394
  960. package/dist/server/handlers/creations.js.map +1 -0
  961. package/dist/server/handlers/crm-customers-read.d.ts +58 -0
  962. package/dist/server/handlers/crm-customers-read.js +208 -0
  963. package/dist/server/handlers/crm-customers-read.js.map +1 -0
  964. package/dist/server/handlers/crm-customers-write.d.ts +54 -0
  965. package/dist/server/handlers/crm-customers-write.js +414 -0
  966. package/dist/server/handlers/crm-customers-write.js.map +1 -0
  967. package/dist/server/handlers/crm-utils.d.ts +6 -0
  968. package/dist/server/handlers/crm-utils.js +19 -0
  969. package/dist/server/handlers/crm-utils.js.map +1 -0
  970. package/dist/server/handlers/crm.js +1082 -791
  971. package/dist/server/handlers/crm.js.map +1 -0
  972. package/dist/server/handlers/crm.test.js +179 -0
  973. package/dist/server/handlers/discovery-advertise.d.ts +18 -0
  974. package/dist/server/handlers/discovery-advertise.js +101 -0
  975. package/dist/server/handlers/discovery-advertise.js.map +1 -0
  976. package/dist/server/handlers/discovery-advertise.test.js +185 -0
  977. package/dist/server/handlers/discovery-scan.d.ts +19 -0
  978. package/dist/server/handlers/discovery-scan.js +107 -0
  979. package/dist/server/handlers/discovery-scan.js.map +1 -0
  980. package/dist/server/handlers/discovery-scan.test.js +233 -0
  981. package/dist/server/handlers/discovery.js +251 -232
  982. package/dist/server/handlers/discovery.js.map +1 -0
  983. package/dist/server/handlers/embeddings-embed-search.test.js +196 -0
  984. package/dist/server/handlers/embeddings-index-delete-stats.test.js +140 -0
  985. package/dist/server/handlers/embeddings-search.test.js +221 -0
  986. package/dist/server/handlers/embeddings.js +241 -164
  987. package/dist/server/handlers/embeddings.js.map +1 -0
  988. package/dist/server/handlers/embeddings.test.js +137 -0
  989. package/dist/server/handlers/enrichment-breach.d.ts +8 -0
  990. package/dist/server/handlers/enrichment-breach.js +266 -0
  991. package/dist/server/handlers/enrichment-breach.js.map +1 -0
  992. package/dist/server/handlers/enrichment-data.d.ts +13 -0
  993. package/dist/server/handlers/enrichment-data.js +145 -0
  994. package/dist/server/handlers/enrichment-data.js.map +1 -0
  995. package/dist/server/handlers/enrichment-enrich.d.ts +6 -0
  996. package/dist/server/handlers/enrichment-enrich.js +235 -0
  997. package/dist/server/handlers/enrichment-enrich.js.map +1 -0
  998. package/dist/server/handlers/enrichment-helpers.d.ts +10 -0
  999. package/dist/server/handlers/enrichment-helpers.js +17 -0
  1000. package/dist/server/handlers/enrichment-helpers.js.map +1 -0
  1001. package/dist/server/handlers/enrichment-mutations.test.js +240 -0
  1002. package/dist/server/handlers/enrichment-queries.test.js +181 -0
  1003. package/dist/server/handlers/enrichment-validation.test.js +177 -0
  1004. package/dist/server/handlers/enrichment-writes.d.ts +16 -0
  1005. package/dist/server/handlers/enrichment-writes.js +226 -0
  1006. package/dist/server/handlers/enrichment-writes.js.map +1 -0
  1007. package/dist/server/handlers/enrichment.js +887 -718
  1008. package/dist/server/handlers/enrichment.js.map +1 -0
  1009. package/dist/server/handlers/image-gen-actions.d.ts +18 -0
  1010. package/dist/server/handlers/image-gen-actions.js +183 -0
  1011. package/dist/server/handlers/image-gen-actions.js.map +1 -0
  1012. package/dist/server/handlers/image-gen-providers.d.ts +29 -0
  1013. package/dist/server/handlers/image-gen-providers.js +161 -0
  1014. package/dist/server/handlers/image-gen-providers.js.map +1 -0
  1015. package/dist/server/handlers/image-gen.js +467 -376
  1016. package/dist/server/handlers/image-gen.js.map +1 -0
  1017. package/dist/server/handlers/image-gen.test.js +205 -0
  1018. package/dist/server/handlers/inventory-audit.d.ts +10 -0
  1019. package/dist/server/handlers/inventory-audit.js +90 -0
  1020. package/dist/server/handlers/inventory-audit.js.map +1 -0
  1021. package/dist/server/handlers/inventory-helpers.d.ts +8 -0
  1022. package/dist/server/handlers/inventory-helpers.js +19 -0
  1023. package/dist/server/handlers/inventory-helpers.js.map +1 -0
  1024. package/dist/server/handlers/inventory-query.d.ts +67 -0
  1025. package/dist/server/handlers/inventory-query.js +299 -0
  1026. package/dist/server/handlers/inventory-query.js.map +1 -0
  1027. package/dist/server/handlers/inventory.js +797 -424
  1028. package/dist/server/handlers/inventory.js.map +1 -0
  1029. package/dist/server/handlers/inventory.test.js +380 -0
  1030. package/dist/server/handlers/kali-background.test.js +222 -0
  1031. package/dist/server/handlers/kali-errors.test.js +92 -0
  1032. package/dist/server/handlers/kali-validation.test.js +234 -0
  1033. package/dist/server/handlers/kali.js +272 -230
  1034. package/dist/server/handlers/kali.js.map +1 -0
  1035. package/dist/server/handlers/llm-providers-actions.test.js +220 -0
  1036. package/dist/server/handlers/llm-providers-anthropic.test.js +239 -0
  1037. package/dist/server/handlers/llm-providers-clients.d.ts +6 -0
  1038. package/dist/server/handlers/llm-providers-clients.js +296 -0
  1039. package/dist/server/handlers/llm-providers-clients.js.map +1 -0
  1040. package/dist/server/handlers/llm-providers-credentials.d.ts +3 -0
  1041. package/dist/server/handlers/llm-providers-credentials.js +109 -0
  1042. package/dist/server/handlers/llm-providers-credentials.js.map +1 -0
  1043. package/dist/server/handlers/llm-providers-failover.test.js +232 -0
  1044. package/dist/server/handlers/llm-providers-models.d.ts +67 -0
  1045. package/dist/server/handlers/llm-providers-models.js +213 -0
  1046. package/dist/server/handlers/llm-providers-models.js.map +1 -0
  1047. package/dist/server/handlers/llm-providers-providers.test.js +300 -0
  1048. package/dist/server/handlers/llm-providers-validation.test.js +239 -0
  1049. package/dist/server/handlers/llm-providers.js +803 -580
  1050. package/dist/server/handlers/llm-providers.js.map +1 -0
  1051. package/dist/server/handlers/local-agent-tools.test.js +224 -0
  1052. package/dist/server/handlers/local-agent.js +133 -105
  1053. package/dist/server/handlers/local-agent.js.map +1 -0
  1054. package/dist/server/handlers/local-agent.test.js +198 -0
  1055. package/dist/server/handlers/local-agent.tools-status.test.js +204 -0
  1056. package/dist/server/handlers/local-agent.validation-exec.test.js +182 -0
  1057. package/dist/server/handlers/media-actions.d.ts +14 -0
  1058. package/dist/server/handlers/media-actions.js +398 -0
  1059. package/dist/server/handlers/media-actions.js.map +1 -0
  1060. package/dist/server/handlers/media-crud.d.ts +9 -0
  1061. package/dist/server/handlers/media-crud.js +365 -0
  1062. package/dist/server/handlers/media-crud.js.map +1 -0
  1063. package/dist/server/handlers/media-upload.d.ts +4 -0
  1064. package/dist/server/handlers/media-upload.js +179 -0
  1065. package/dist/server/handlers/media-upload.js.map +1 -0
  1066. package/dist/server/handlers/media-utils.d.ts +14 -0
  1067. package/dist/server/handlers/media-utils.js +33 -0
  1068. package/dist/server/handlers/media-utils.js.map +1 -0
  1069. package/dist/server/handlers/media.js +1179 -857
  1070. package/dist/server/handlers/media.js.map +1 -0
  1071. package/dist/server/handlers/meta-ads-advanced.d.ts +46 -0
  1072. package/dist/server/handlers/meta-ads-advanced.js +222 -0
  1073. package/dist/server/handlers/meta-ads-advanced.js.map +1 -0
  1074. package/dist/server/handlers/meta-ads-audience-rules.test.js +243 -0
  1075. package/dist/server/handlers/meta-ads-audience-targeting.test.js +205 -0
  1076. package/dist/server/handlers/meta-ads-audiences-targeting.test.js +383 -0
  1077. package/dist/server/handlers/meta-ads-audiences.d.ts +48 -0
  1078. package/dist/server/handlers/meta-ads-audiences.js +214 -0
  1079. package/dist/server/handlers/meta-ads-audiences.js.map +1 -0
  1080. package/dist/server/handlers/meta-ads-crud-ads.test.js +136 -0
  1081. package/dist/server/handlers/meta-ads-crud-campaigns.test.js +189 -0
  1082. package/dist/server/handlers/meta-ads-crud-create.test.js +303 -0
  1083. package/dist/server/handlers/meta-ads-crud-list-update.test.js +259 -0
  1084. package/dist/server/handlers/meta-ads-crud-read.d.ts +78 -0
  1085. package/dist/server/handlers/meta-ads-crud-read.js +204 -0
  1086. package/dist/server/handlers/meta-ads-crud-read.js.map +1 -0
  1087. package/dist/server/handlers/meta-ads-crud-write.d.ts +105 -0
  1088. package/dist/server/handlers/meta-ads-crud-write.js +390 -0
  1089. package/dist/server/handlers/meta-ads-crud-write.js.map +1 -0
  1090. package/dist/server/handlers/meta-ads-crud.d.ts +9 -0
  1091. package/dist/server/handlers/meta-ads-crud.js +12 -0
  1092. package/dist/server/handlers/meta-ads-crud.js.map +1 -0
  1093. package/dist/server/handlers/meta-ads-delete-publish-sync.test.js +282 -0
  1094. package/dist/server/handlers/meta-ads-graph-api.d.ts +25 -0
  1095. package/dist/server/handlers/meta-ads-graph-api.js +155 -0
  1096. package/dist/server/handlers/meta-ads-graph-api.js.map +1 -0
  1097. package/dist/server/handlers/meta-ads-insights.test.js +80 -0
  1098. package/dist/server/handlers/meta-ads-list-get.test.js +237 -0
  1099. package/dist/server/handlers/meta-ads-media.d.ts +16 -0
  1100. package/dist/server/handlers/meta-ads-media.js +205 -0
  1101. package/dist/server/handlers/meta-ads-media.js.map +1 -0
  1102. package/dist/server/handlers/meta-ads-pixels-rules.d.ts +127 -0
  1103. package/dist/server/handlers/meta-ads-pixels-rules.js +463 -0
  1104. package/dist/server/handlers/meta-ads-pixels-rules.js.map +1 -0
  1105. package/dist/server/handlers/meta-ads-publish-ad.d.ts +11 -0
  1106. package/dist/server/handlers/meta-ads-publish-ad.js +229 -0
  1107. package/dist/server/handlers/meta-ads-publish-ad.js.map +1 -0
  1108. package/dist/server/handlers/meta-ads-publish-delete.test.js +254 -0
  1109. package/dist/server/handlers/meta-ads-publish-helpers.js +117 -0
  1110. package/dist/server/handlers/meta-ads-publish-helpers.js.map +1 -0
  1111. package/dist/server/handlers/meta-ads-publish-sync.test.js +205 -0
  1112. package/dist/server/handlers/meta-ads-publish.d.ts +14 -0
  1113. package/dist/server/handlers/meta-ads-publish.js +194 -0
  1114. package/dist/server/handlers/meta-ads-publish.js.map +1 -0
  1115. package/dist/server/handlers/meta-ads-publish.test.js +254 -0
  1116. package/dist/server/handlers/meta-ads-sync-insights.test.js +184 -0
  1117. package/dist/server/handlers/meta-ads-targeting.d.ts +27 -0
  1118. package/dist/server/handlers/meta-ads-targeting.js +323 -0
  1119. package/dist/server/handlers/meta-ads-targeting.js.map +1 -0
  1120. package/dist/server/handlers/meta-ads-types.d.ts +49 -0
  1121. package/dist/server/handlers/meta-ads-types.js +59 -0
  1122. package/dist/server/handlers/meta-ads-types.js.map +1 -0
  1123. package/dist/server/handlers/meta-ads-update.test.js +117 -0
  1124. package/dist/server/handlers/meta-ads.d.ts +25 -0
  1125. package/dist/server/handlers/meta-ads.js +3049 -2084
  1126. package/dist/server/handlers/meta-ads.js.map +1 -0
  1127. package/dist/server/handlers/nodes-channels.test.js +413 -0
  1128. package/dist/server/handlers/nodes-events.test.js +131 -0
  1129. package/dist/server/handlers/nodes-handlers-channels-messages.d.ts +20 -0
  1130. package/dist/server/handlers/nodes-handlers-channels-messages.js +314 -0
  1131. package/dist/server/handlers/nodes-handlers-channels-messages.js.map +1 -0
  1132. package/dist/server/handlers/nodes-handlers-channels.d.ts +19 -0
  1133. package/dist/server/handlers/nodes-handlers-channels.js +225 -0
  1134. package/dist/server/handlers/nodes-handlers-channels.js.map +1 -0
  1135. package/dist/server/handlers/nodes-handlers-mgmt.d.ts +33 -0
  1136. package/dist/server/handlers/nodes-handlers-mgmt.js +418 -0
  1137. package/dist/server/handlers/nodes-handlers-mgmt.js.map +1 -0
  1138. package/dist/server/handlers/nodes-list-delete.test.js +171 -0
  1139. package/dist/server/handlers/nodes-messages-delivery.test.js +208 -0
  1140. package/dist/server/handlers/nodes-messages.test.js +211 -0
  1141. package/dist/server/handlers/nodes-register.test.js +277 -0
  1142. package/dist/server/handlers/nodes-routes-channels.d.ts +9 -0
  1143. package/dist/server/handlers/nodes-routes-channels.js +217 -0
  1144. package/dist/server/handlers/nodes-routes-channels.js.map +1 -0
  1145. package/dist/server/handlers/nodes-routes-crud.d.ts +9 -0
  1146. package/dist/server/handlers/nodes-routes-crud.js +290 -0
  1147. package/dist/server/handlers/nodes-routes-crud.js.map +1 -0
  1148. package/dist/server/handlers/nodes-routes-delivery.d.ts +9 -0
  1149. package/dist/server/handlers/nodes-routes-delivery.js +226 -0
  1150. package/dist/server/handlers/nodes-routes-delivery.js.map +1 -0
  1151. package/dist/server/handlers/nodes-routes-messages.d.ts +9 -0
  1152. package/dist/server/handlers/nodes-routes-messages.js +218 -0
  1153. package/dist/server/handlers/nodes-routes-messages.js.map +1 -0
  1154. package/dist/server/handlers/nodes-routes-register.d.ts +9 -0
  1155. package/dist/server/handlers/nodes-routes-register.js +239 -0
  1156. package/dist/server/handlers/nodes-routes-register.js.map +1 -0
  1157. package/dist/server/handlers/nodes-types.d.ts +82 -0
  1158. package/dist/server/handlers/nodes-types.js +220 -0
  1159. package/dist/server/handlers/nodes-types.js.map +1 -0
  1160. package/dist/server/handlers/nodes-utils.d.ts +70 -0
  1161. package/dist/server/handlers/nodes-utils.js +214 -0
  1162. package/dist/server/handlers/nodes-utils.js.map +1 -0
  1163. package/dist/server/handlers/nodes.js +1321 -913
  1164. package/dist/server/handlers/nodes.js.map +1 -0
  1165. package/dist/server/handlers/nodes.test.js +353 -0
  1166. package/dist/server/handlers/operations.js +183 -157
  1167. package/dist/server/handlers/operations.js.map +1 -0
  1168. package/dist/server/handlers/operations.test.js +136 -0
  1169. package/dist/server/handlers/platform-telemetry.d.ts +10 -0
  1170. package/dist/server/handlers/platform-telemetry.js +372 -0
  1171. package/dist/server/handlers/platform-telemetry.js.map +1 -0
  1172. package/dist/server/handlers/platform-telemetry.test.js +200 -0
  1173. package/dist/server/handlers/platform-websearch.test.js +160 -0
  1174. package/dist/server/handlers/platform.js +346 -210
  1175. package/dist/server/handlers/platform.js.map +1 -0
  1176. package/dist/server/handlers/remove-bg.js +118 -86
  1177. package/dist/server/handlers/remove-bg.js.map +1 -0
  1178. package/dist/server/handlers/sessions-handlers.d.ts +23 -0
  1179. package/dist/server/handlers/sessions-handlers.js +374 -0
  1180. package/dist/server/handlers/sessions-handlers.js.map +1 -0
  1181. package/dist/server/handlers/storefront-cart.d.ts +31 -0
  1182. package/dist/server/handlers/storefront-cart.js +381 -0
  1183. package/dist/server/handlers/storefront-cart.js.map +1 -0
  1184. package/dist/server/handlers/storefront.js +586 -446
  1185. package/dist/server/handlers/storefront.js.map +1 -0
  1186. package/dist/server/handlers/storefront.test.js +329 -0
  1187. package/dist/server/handlers/supply-chain-transfers.d.ts +10 -0
  1188. package/dist/server/handlers/supply-chain-transfers.js +214 -0
  1189. package/dist/server/handlers/supply-chain-transfers.js.map +1 -0
  1190. package/dist/server/handlers/supply-chain-utils.d.ts +2 -0
  1191. package/dist/server/handlers/supply-chain-utils.js +21 -0
  1192. package/dist/server/handlers/supply-chain-utils.js.map +1 -0
  1193. package/dist/server/handlers/supply-chain.js +546 -326
  1194. package/dist/server/handlers/supply-chain.js.map +1 -0
  1195. package/dist/server/handlers/supply-chain.test.js +347 -0
  1196. package/dist/server/handlers/transcription.js +106 -97
  1197. package/dist/server/handlers/transcription.js.map +1 -0
  1198. package/dist/server/handlers/transcription.test.js +118 -0
  1199. package/dist/server/handlers/video-gen-providers.d.ts +30 -0
  1200. package/dist/server/handlers/video-gen-providers.js +205 -0
  1201. package/dist/server/handlers/video-gen-providers.js.map +1 -0
  1202. package/dist/server/handlers/video-gen-sora.d.ts +5 -0
  1203. package/dist/server/handlers/video-gen-sora.js +87 -0
  1204. package/dist/server/handlers/video-gen-sora.js.map +1 -0
  1205. package/dist/server/handlers/video-gen-veo.js +114 -0
  1206. package/dist/server/handlers/video-gen-veo.js.map +1 -0
  1207. package/dist/server/handlers/video-gen.js +593 -424
  1208. package/dist/server/handlers/video-gen.js.map +1 -0
  1209. package/dist/server/handlers/video-gen.test.js +146 -0
  1210. package/dist/server/handlers/voice-handlers-audio.d.ts +9 -0
  1211. package/dist/server/handlers/voice-handlers-audio.js +229 -0
  1212. package/dist/server/handlers/voice-handlers-audio.js.map +1 -0
  1213. package/dist/server/handlers/voice-handlers-music.d.ts +5 -0
  1214. package/dist/server/handlers/voice-handlers-music.js +124 -0
  1215. package/dist/server/handlers/voice-handlers-music.js.map +1 -0
  1216. package/dist/server/handlers/voice-handlers-pvc.d.ts +8 -0
  1217. package/dist/server/handlers/voice-handlers-pvc.js +345 -0
  1218. package/dist/server/handlers/voice-handlers-pvc.js.map +1 -0
  1219. package/dist/server/handlers/voice-handlers-tts.d.ts +5 -0
  1220. package/dist/server/handlers/voice-handlers-tts.js +142 -0
  1221. package/dist/server/handlers/voice-handlers-tts.js.map +1 -0
  1222. package/dist/server/handlers/voice-handlers-voices.d.ts +8 -0
  1223. package/dist/server/handlers/voice-handlers-voices.js +321 -0
  1224. package/dist/server/handlers/voice-handlers-voices.js.map +1 -0
  1225. package/dist/server/handlers/voice-utils.d.ts +32 -0
  1226. package/dist/server/handlers/voice-utils.js +281 -0
  1227. package/dist/server/handlers/voice-utils.js.map +1 -0
  1228. package/dist/server/handlers/voice.js +1458 -1039
  1229. package/dist/server/handlers/voice.js.map +1 -0
  1230. package/dist/server/handlers/voice.test.js +153 -0
  1231. package/dist/server/handlers/workflow-crud-advanced.d.ts +8 -0
  1232. package/dist/server/handlers/workflow-crud-advanced.js +275 -0
  1233. package/dist/server/handlers/workflow-crud-advanced.js.map +1 -0
  1234. package/dist/server/handlers/workflow-crud-core.d.ts +8 -0
  1235. package/dist/server/handlers/workflow-crud-core.js +286 -0
  1236. package/dist/server/handlers/workflow-crud-core.js.map +1 -0
  1237. package/dist/server/handlers/workflow-crud-events.d.ts +8 -0
  1238. package/dist/server/handlers/workflow-crud-events.js +483 -0
  1239. package/dist/server/handlers/workflow-crud-events.js.map +1 -0
  1240. package/dist/server/handlers/workflow-crud-runs-lifecycle.d.ts +8 -0
  1241. package/dist/server/handlers/workflow-crud-runs-lifecycle.js +231 -0
  1242. package/dist/server/handlers/workflow-crud-runs-lifecycle.js.map +1 -0
  1243. package/dist/server/handlers/workflow-crud-runs-versioning.d.ts +8 -0
  1244. package/dist/server/handlers/workflow-crud-runs-versioning.js +319 -0
  1245. package/dist/server/handlers/workflow-crud-runs-versioning.js.map +1 -0
  1246. package/dist/server/handlers/workflow-crud-runs.d.ts +8 -0
  1247. package/dist/server/handlers/workflow-crud-runs.js +18 -0
  1248. package/dist/server/handlers/workflow-crud-runs.js.map +1 -0
  1249. package/dist/server/handlers/workflow-steps-advancement.d.ts +13 -0
  1250. package/dist/server/handlers/workflow-steps-advancement.js +197 -0
  1251. package/dist/server/handlers/workflow-steps-advancement.js.map +1 -0
  1252. package/dist/server/handlers/workflow-steps-circuit-breaker.d.ts +7 -0
  1253. package/dist/server/handlers/workflow-steps-circuit-breaker.js +131 -0
  1254. package/dist/server/handlers/workflow-steps-circuit-breaker.js.map +1 -0
  1255. package/dist/server/handlers/workflow-steps-completion.d.ts +5 -0
  1256. package/dist/server/handlers/workflow-steps-completion.js +254 -0
  1257. package/dist/server/handlers/workflow-steps-completion.js.map +1 -0
  1258. package/dist/server/handlers/workflow-steps-cron.d.ts +4 -0
  1259. package/dist/server/handlers/workflow-steps-cron.js +259 -0
  1260. package/dist/server/handlers/workflow-steps-cron.js.map +1 -0
  1261. package/dist/server/handlers/workflow-steps-engine-execute.d.ts +3 -0
  1262. package/dist/server/handlers/workflow-steps-engine-execute.js +388 -0
  1263. package/dist/server/handlers/workflow-steps-engine-execute.js.map +1 -0
  1264. package/dist/server/handlers/workflow-steps-engine-inline.d.ts +2 -0
  1265. package/dist/server/handlers/workflow-steps-engine-inline.js +91 -0
  1266. package/dist/server/handlers/workflow-steps-engine-inline.js.map +1 -0
  1267. package/dist/server/handlers/workflow-steps-engine-persist.d.ts +5 -0
  1268. package/dist/server/handlers/workflow-steps-engine-persist.js +192 -0
  1269. package/dist/server/handlers/workflow-steps-engine-persist.js.map +1 -0
  1270. package/dist/server/handlers/workflow-steps-engine-process.d.ts +7 -0
  1271. package/dist/server/handlers/workflow-steps-engine-process.js +290 -0
  1272. package/dist/server/handlers/workflow-steps-engine-process.js.map +1 -0
  1273. package/dist/server/handlers/workflow-steps-engine.d.ts +3 -0
  1274. package/dist/server/handlers/workflow-steps-engine.js +10 -0
  1275. package/dist/server/handlers/workflow-steps-engine.js.map +1 -0
  1276. package/dist/server/handlers/workflow-steps-executors-llm.d.ts +7 -0
  1277. package/dist/server/handlers/workflow-steps-executors-llm.js +265 -0
  1278. package/dist/server/handlers/workflow-steps-executors-llm.js.map +1 -0
  1279. package/dist/server/handlers/workflow-steps-executors.d.ts +9 -0
  1280. package/dist/server/handlers/workflow-steps-executors.js +188 -0
  1281. package/dist/server/handlers/workflow-steps-executors.js.map +1 -0
  1282. package/dist/server/handlers/workflow-steps-maintenance.d.ts +4 -0
  1283. package/dist/server/handlers/workflow-steps-maintenance.js +256 -0
  1284. package/dist/server/handlers/workflow-steps-maintenance.js.map +1 -0
  1285. package/dist/server/handlers/workflow-steps-types.d.ts +84 -0
  1286. package/dist/server/handlers/workflow-steps-types.js +179 -0
  1287. package/dist/server/handlers/workflow-steps-types.js.map +1 -0
  1288. package/dist/server/handlers/workflow-steps-webhook.d.ts +5 -0
  1289. package/dist/server/handlers/workflow-steps-webhook.js +179 -0
  1290. package/dist/server/handlers/workflow-steps-webhook.js.map +1 -0
  1291. package/dist/server/handlers/workflow-steps.js +2837 -2116
  1292. package/dist/server/handlers/workflow-steps.js.map +1 -0
  1293. package/dist/server/handlers/workflow-steps.test.js +330 -0
  1294. package/dist/server/handlers/workflows-extras.test.js +65 -0
  1295. package/dist/server/handlers/workflows.js +1630 -933
  1296. package/dist/server/handlers/workflows.js.map +1 -0
  1297. package/dist/server/handlers/workflows.part2.test.js +170 -0
  1298. package/dist/server/handlers/workflows.test.js +281 -0
  1299. package/dist/server/index.js +1702 -2596
  1300. package/dist/server/index.js.map +1 -0
  1301. package/dist/server/lib/__tests__/batch-client-conversion-jsonl.test.js +171 -0
  1302. package/dist/server/lib/__tests__/batch-client-polling.test.js +292 -0
  1303. package/dist/server/lib/__tests__/batch-client-queue.test.js +270 -0
  1304. package/dist/server/lib/__tests__/clickhouse-buffer.test.js +236 -0
  1305. package/dist/server/lib/__tests__/code-worker-edge-cases.test.js +118 -0
  1306. package/dist/server/lib/__tests__/code-worker-pool-execute.test.js +193 -0
  1307. package/dist/server/lib/__tests__/code-worker-pool-execution.test.js +165 -0
  1308. package/dist/server/lib/__tests__/code-worker-pool-init.test.js +131 -0
  1309. package/dist/server/lib/__tests__/code-worker-pool.test.js +194 -0
  1310. package/dist/server/lib/__tests__/code-worker-sandbox-ops.test.js +123 -0
  1311. package/dist/server/lib/__tests__/code-worker-sandbox.test.js +217 -0
  1312. package/dist/server/lib/__tests__/code-worker.test.js +179 -0
  1313. package/dist/server/lib/__tests__/compaction-service-generate.test.js +229 -0
  1314. package/dist/server/lib/__tests__/compaction-service.test.js +319 -0
  1315. package/dist/server/lib/__tests__/otel.test.js +146 -0
  1316. package/dist/server/lib/__tests__/prompt-sanitizer-validation.test.js +165 -0
  1317. package/dist/server/lib/__tests__/prompt-sanitizer.sanitize.test.js +343 -0
  1318. package/dist/server/lib/__tests__/prompt-sanitizer.test.js +328 -0
  1319. package/dist/server/lib/__tests__/prompt-sanitizer.validate-tool.test.js +145 -0
  1320. package/dist/server/lib/__tests__/provider-capabilities.test.js +263 -0
  1321. package/dist/server/lib/__tests__/provider-failover-routing.test.js +145 -0
  1322. package/dist/server/lib/__tests__/provider-failover-state.test.js +131 -0
  1323. package/dist/server/lib/__tests__/rate-limiter-budgets.test.js +216 -0
  1324. package/dist/server/lib/__tests__/rate-limiter.budgets-tools.test.js +113 -0
  1325. package/dist/server/lib/__tests__/rate-limiter.check-request.test.js +141 -0
  1326. package/dist/server/lib/__tests__/rate-limiter.stats-lifecycle.test.js +135 -0
  1327. package/dist/server/lib/__tests__/rate-limiter.test.js +207 -0
  1328. package/dist/server/lib/__tests__/server-agent-loop-abort-conditions.test.js +544 -0
  1329. package/dist/server/lib/__tests__/server-agent-loop-abort.part2.test.js +504 -0
  1330. package/dist/server/lib/__tests__/server-agent-loop-abort.test.js +396 -0
  1331. package/dist/server/lib/__tests__/server-agent-loop-compaction.test.js +397 -0
  1332. package/dist/server/lib/__tests__/server-agent-loop-failover.test.js +356 -0
  1333. package/dist/server/lib/__tests__/server-agent-loop-features-caching.test.js +519 -0
  1334. package/dist/server/lib/__tests__/server-agent-loop-features-edges.test.js +512 -0
  1335. package/dist/server/lib/__tests__/server-subagent-bailout.test.js +194 -0
  1336. package/dist/server/lib/__tests__/server-subagent-basics.test.js +348 -0
  1337. package/dist/server/lib/__tests__/server-subagent-errors-abort.test.js +319 -0
  1338. package/dist/server/lib/__tests__/server-subagent-errors-progress.test.js +253 -0
  1339. package/dist/server/lib/__tests__/server-subagent-errors.part2.test.js +253 -0
  1340. package/dist/server/lib/__tests__/server-subagent-errors.test.js +319 -0
  1341. package/dist/server/lib/__tests__/session-checkpoint-load.test.js +275 -0
  1342. package/dist/server/lib/__tests__/session-checkpoint-save.test.js +159 -0
  1343. package/dist/server/lib/__tests__/ssrf-guard.test.js +93 -0
  1344. package/dist/server/lib/__tests__/supabase-client.test.js +111 -0
  1345. package/dist/server/lib/__tests__/template-resolver.test.js +317 -0
  1346. package/dist/server/lib/__tests__/utils-timeout.test.js +49 -0
  1347. package/dist/server/lib/__tests__/utils.test.js +322 -0
  1348. package/dist/server/lib/agent-loop-executor.d.ts +7 -0
  1349. package/dist/server/lib/agent-loop-executor.js +224 -0
  1350. package/dist/server/lib/agent-loop-executor.js.map +1 -0
  1351. package/dist/server/lib/agent-loop-turn.d.ts +53 -0
  1352. package/dist/server/lib/agent-loop-turn.js +166 -0
  1353. package/dist/server/lib/agent-loop-turn.js.map +1 -0
  1354. package/dist/server/lib/agent-loop-types.d.ts +118 -0
  1355. package/dist/server/lib/agent-loop-types.js +53 -0
  1356. package/dist/server/lib/agent-loop-types.js.map +1 -0
  1357. package/dist/server/lib/batch-client-anthropic.d.ts +10 -0
  1358. package/dist/server/lib/batch-client-anthropic.js +144 -0
  1359. package/dist/server/lib/batch-client-anthropic.js.map +1 -0
  1360. package/dist/server/lib/batch-client-openai.d.ts +10 -0
  1361. package/dist/server/lib/batch-client-openai.js +172 -0
  1362. package/dist/server/lib/batch-client-openai.js.map +1 -0
  1363. package/dist/server/lib/batch-client-types.d.ts +54 -0
  1364. package/dist/server/lib/batch-client-types.js +27 -0
  1365. package/dist/server/lib/batch-client-types.js.map +1 -0
  1366. package/dist/server/lib/batch-client.js +471 -409
  1367. package/dist/server/lib/batch-client.js.map +1 -0
  1368. package/dist/server/lib/clickhouse-buffer.js +118 -104
  1369. package/dist/server/lib/clickhouse-buffer.js.map +1 -0
  1370. package/dist/server/lib/clickhouse-client.js +107 -107
  1371. package/dist/server/lib/clickhouse-client.js.map +1 -0
  1372. package/dist/server/lib/coa-renderer-components.d.ts +15 -0
  1373. package/dist/server/lib/coa-renderer-components.js +361 -0
  1374. package/dist/server/lib/coa-renderer-components.js.map +1 -0
  1375. package/dist/server/lib/coa-renderer-pages.d.ts +15 -0
  1376. package/dist/server/lib/coa-renderer-pages.js +467 -0
  1377. package/dist/server/lib/coa-renderer-pages.js.map +1 -0
  1378. package/dist/server/lib/coa-renderer-styles.d.ts +525 -0
  1379. package/dist/server/lib/coa-renderer-styles.js +540 -0
  1380. package/dist/server/lib/coa-renderer-styles.js.map +1 -0
  1381. package/dist/server/lib/coa-renderer-tokens.d.ts +107 -0
  1382. package/dist/server/lib/coa-renderer-tokens.js +46 -0
  1383. package/dist/server/lib/coa-renderer-tokens.js.map +1 -0
  1384. package/dist/server/lib/coa-renderer.js +1786 -356
  1385. package/dist/server/lib/coa-renderer.js.map +1 -0
  1386. package/dist/server/lib/code-worker-pool.js +227 -177
  1387. package/dist/server/lib/code-worker-pool.js.map +1 -0
  1388. package/dist/server/lib/code-worker.js +174 -164
  1389. package/dist/server/lib/code-worker.js.map +1 -0
  1390. package/dist/server/lib/compaction-service.d.ts +2 -12
  1391. package/dist/server/lib/compaction-service.js +74 -184
  1392. package/dist/server/lib/compaction-service.js.map +1 -0
  1393. package/dist/server/lib/logger.js +36 -24
  1394. package/dist/server/lib/logger.js.map +1 -0
  1395. package/dist/server/lib/otel.js +101 -80
  1396. package/dist/server/lib/otel.js.map +1 -0
  1397. package/dist/server/lib/pdf-renderer-calc.d.ts +7 -0
  1398. package/dist/server/lib/pdf-renderer-calc.js +272 -0
  1399. package/dist/server/lib/pdf-renderer-calc.js.map +1 -0
  1400. package/dist/server/lib/pdf-renderer-generation.d.ts +73 -0
  1401. package/dist/server/lib/pdf-renderer-generation.js +298 -0
  1402. package/dist/server/lib/pdf-renderer-generation.js.map +1 -0
  1403. package/dist/server/lib/pdf-renderer-layout.d.ts +2 -0
  1404. package/dist/server/lib/pdf-renderer-layout.js +144 -0
  1405. package/dist/server/lib/pdf-renderer-layout.js.map +1 -0
  1406. package/dist/server/lib/pdf-renderer-validation.d.ts +14 -0
  1407. package/dist/server/lib/pdf-renderer-validation.js +220 -0
  1408. package/dist/server/lib/pdf-renderer-validation.js.map +1 -0
  1409. package/dist/server/lib/pdf-renderer.js +952 -788
  1410. package/dist/server/lib/pdf-renderer.js.map +1 -0
  1411. package/dist/server/lib/prompt-sanitizer.js +188 -108
  1412. package/dist/server/lib/prompt-sanitizer.js.map +1 -0
  1413. package/dist/server/lib/provider-capabilities.js +136 -138
  1414. package/dist/server/lib/provider-capabilities.js.map +1 -0
  1415. package/dist/server/lib/provider-failover.js +190 -168
  1416. package/dist/server/lib/provider-failover.js.map +1 -0
  1417. package/dist/server/lib/rate-limiter.js +186 -117
  1418. package/dist/server/lib/rate-limiter.js.map +1 -0
  1419. package/dist/server/lib/react-pdf-layout-elements.d.ts +8 -0
  1420. package/dist/server/lib/react-pdf-layout-elements.js +366 -0
  1421. package/dist/server/lib/react-pdf-layout-elements.js.map +1 -0
  1422. package/dist/server/lib/react-pdf-layout-labels.d.ts +38 -0
  1423. package/dist/server/lib/react-pdf-layout-labels.js +217 -0
  1424. package/dist/server/lib/react-pdf-layout-labels.js.map +1 -0
  1425. package/dist/server/lib/react-pdf-layout.js +551 -382
  1426. package/dist/server/lib/react-pdf-layout.js.map +1 -0
  1427. package/dist/server/lib/server-agent-loop-init.d.ts +28 -0
  1428. package/dist/server/lib/server-agent-loop-init.js +138 -0
  1429. package/dist/server/lib/server-agent-loop-init.js.map +1 -0
  1430. package/dist/server/lib/server-agent-loop-v2.d.ts +110 -0
  1431. package/dist/server/lib/server-agent-loop-v2.js +340 -0
  1432. package/dist/server/lib/server-agent-loop-v2.js.map +1 -0
  1433. package/dist/server/lib/server-agent-loop.d.ts +4 -1
  1434. package/dist/server/lib/server-agent-loop.js +907 -634
  1435. package/dist/server/lib/server-agent-loop.js.map +1 -0
  1436. package/dist/server/lib/server-subagent-loop.d.ts +3 -0
  1437. package/dist/server/lib/server-subagent-loop.js +267 -0
  1438. package/dist/server/lib/server-subagent-loop.js.map +1 -0
  1439. package/dist/server/lib/server-subagent.js +260 -164
  1440. package/dist/server/lib/server-subagent.js.map +1 -0
  1441. package/dist/server/lib/session-checkpoint.js +105 -96
  1442. package/dist/server/lib/session-checkpoint.js.map +1 -0
  1443. package/dist/server/lib/session-types.d.ts +106 -0
  1444. package/dist/server/lib/session-types.js +2 -0
  1445. package/dist/server/lib/session-types.js.map +1 -0
  1446. package/dist/server/lib/ssrf-guard.js +193 -184
  1447. package/dist/server/lib/ssrf-guard.js.map +1 -0
  1448. package/dist/server/lib/supabase-client.js +94 -82
  1449. package/dist/server/lib/supabase-client.js.map +1 -0
  1450. package/dist/server/lib/template-resolver.js +154 -176
  1451. package/dist/server/lib/template-resolver.js.map +1 -0
  1452. package/dist/server/lib/utils.js +242 -133
  1453. package/dist/server/lib/utils.js.map +1 -0
  1454. package/dist/server/local-agent-gateway-api.d.ts +34 -0
  1455. package/dist/server/local-agent-gateway-api.js +156 -0
  1456. package/dist/server/local-agent-gateway-api.js.map +1 -0
  1457. package/dist/server/local-agent-gateway-handler.d.ts +3 -0
  1458. package/dist/server/local-agent-gateway-handler.js +292 -0
  1459. package/dist/server/local-agent-gateway-handler.js.map +1 -0
  1460. package/dist/server/local-agent-gateway-init.d.ts +21 -0
  1461. package/dist/server/local-agent-gateway-init.js +143 -0
  1462. package/dist/server/local-agent-gateway-init.js.map +1 -0
  1463. package/dist/server/local-agent-gateway-messages.d.ts +12 -0
  1464. package/dist/server/local-agent-gateway-messages.js +108 -0
  1465. package/dist/server/local-agent-gateway-messages.js.map +1 -0
  1466. package/dist/server/local-agent-gateway-stats.d.ts +53 -0
  1467. package/dist/server/local-agent-gateway-stats.js +129 -0
  1468. package/dist/server/local-agent-gateway-stats.js.map +1 -0
  1469. package/dist/server/local-agent-gateway-types.d.ts +94 -0
  1470. package/dist/server/local-agent-gateway-types.js +78 -0
  1471. package/dist/server/local-agent-gateway-types.js.map +1 -0
  1472. package/dist/server/local-agent-gateway.d.ts +8 -2
  1473. package/dist/server/local-agent-gateway.js +825 -627
  1474. package/dist/server/local-agent-gateway.js.map +1 -0
  1475. package/dist/server/providers/__tests__/anthropic-adapter.test.js +228 -0
  1476. package/dist/server/providers/__tests__/anthropic-betas-toolchoice.test.js +257 -0
  1477. package/dist/server/providers/__tests__/anthropic-errors.test.js +262 -0
  1478. package/dist/server/providers/__tests__/anthropic-stream-core.test.js +275 -0
  1479. package/dist/server/providers/__tests__/anthropic-streaming-betas.test.js +247 -0
  1480. package/dist/server/providers/__tests__/anthropic-streaming-core.test.js +275 -0
  1481. package/dist/server/providers/__tests__/bedrock-config.test.js +177 -0
  1482. package/dist/server/providers/__tests__/bedrock-stream-behavior-streaming.test.js +272 -0
  1483. package/dist/server/providers/__tests__/bedrock-stream-behavior-toolchoice.test.js +214 -0
  1484. package/dist/server/providers/__tests__/bedrock-stream-behavior.part2.test.js +165 -0
  1485. package/dist/server/providers/__tests__/bedrock-stream-behavior.test.js +309 -0
  1486. package/dist/server/providers/__tests__/bedrock-stream-body-credentials.test.js +170 -0
  1487. package/dist/server/providers/__tests__/bedrock-stream-body-extras.test.js +183 -0
  1488. package/dist/server/providers/__tests__/bedrock-stream-body-request.test.js +305 -0
  1489. package/dist/server/providers/__tests__/bedrock-stream-body.part2.test.js +305 -0
  1490. package/dist/server/providers/__tests__/bedrock-stream-body.test.js +175 -0
  1491. package/dist/server/providers/__tests__/bedrock-stream-errors.test.js +165 -0
  1492. package/dist/server/providers/__tests__/gemini-config-methods.test.js +182 -0
  1493. package/dist/server/providers/__tests__/gemini-config-streaming.test.js +257 -0
  1494. package/dist/server/providers/__tests__/gemini-conversion-messages.test.js +247 -0
  1495. package/dist/server/providers/__tests__/gemini-conversion-schema.test.js +365 -0
  1496. package/dist/server/providers/__tests__/gemini-tools-choice.test.js +221 -0
  1497. package/dist/server/providers/__tests__/gemini-tools-fn.test.js +252 -0
  1498. package/dist/server/providers/__tests__/openai-config.test.js +194 -0
  1499. package/dist/server/providers/__tests__/openai-conversion.test.js +276 -0
  1500. package/dist/server/providers/__tests__/openai-messages.test.js +261 -0
  1501. package/dist/server/providers/__tests__/openai-streaming.test.js +394 -0
  1502. package/dist/server/providers/__tests__/openai-tools-cache.test.js +227 -0
  1503. package/dist/server/providers/__tests__/registry.test.js +183 -0
  1504. package/dist/server/providers/__tests__/shared.test.js +297 -0
  1505. package/dist/server/providers/anthropic.js +250 -172
  1506. package/dist/server/providers/anthropic.js.map +1 -0
  1507. package/dist/server/providers/bedrock.js +217 -158
  1508. package/dist/server/providers/bedrock.js.map +1 -0
  1509. package/dist/server/providers/gemini-conversion.d.ts +17 -0
  1510. package/dist/server/providers/gemini-conversion.js +185 -0
  1511. package/dist/server/providers/gemini-conversion.js.map +1 -0
  1512. package/dist/server/providers/gemini-streaming.d.ts +18 -0
  1513. package/dist/server/providers/gemini-streaming.js +187 -0
  1514. package/dist/server/providers/gemini-streaming.js.map +1 -0
  1515. package/dist/server/providers/gemini.js +548 -418
  1516. package/dist/server/providers/gemini.js.map +1 -0
  1517. package/dist/server/providers/openai-adapter.d.ts +15 -0
  1518. package/dist/server/providers/openai-adapter.js +423 -0
  1519. package/dist/server/providers/openai-adapter.js.map +1 -0
  1520. package/dist/server/providers/openai-conversion.d.ts +21 -0
  1521. package/dist/server/providers/openai-conversion.js +191 -0
  1522. package/dist/server/providers/openai-conversion.js.map +1 -0
  1523. package/dist/server/providers/openai.js +571 -437
  1524. package/dist/server/providers/openai.js.map +1 -0
  1525. package/dist/server/providers/registry.js +23 -18
  1526. package/dist/server/providers/registry.js.map +1 -0
  1527. package/dist/server/providers/shared.js +123 -95
  1528. package/dist/server/providers/shared.js.map +1 -0
  1529. package/dist/server/providers/types.js +1 -11
  1530. package/dist/server/providers/types.js.map +1 -0
  1531. package/dist/server/proxy-handlers.js +209 -165
  1532. package/dist/server/proxy-handlers.js.map +1 -0
  1533. package/dist/server/server-agent.d.ts +21 -0
  1534. package/dist/server/server-agent.js +162 -0
  1535. package/dist/server/server-agent.js.map +1 -0
  1536. package/dist/server/server-chat.d.ts +6 -0
  1537. package/dist/server/server-chat.js +210 -0
  1538. package/dist/server/server-chat.js.map +1 -0
  1539. package/dist/server/server-cost-guard.d.ts +16 -0
  1540. package/dist/server/server-cost-guard.js +141 -0
  1541. package/dist/server/server-cost-guard.js.map +1 -0
  1542. package/dist/server/server-executors.d.ts +10 -0
  1543. package/dist/server/server-executors.js +110 -0
  1544. package/dist/server/server-executors.js.map +1 -0
  1545. package/dist/server/server-helpers.d.ts +49 -0
  1546. package/dist/server/server-helpers.js +210 -0
  1547. package/dist/server/server-helpers.js.map +1 -0
  1548. package/dist/server/server-persist.d.ts +43 -0
  1549. package/dist/server/server-persist.js +249 -0
  1550. package/dist/server/server-persist.js.map +1 -0
  1551. package/dist/server/server-rate-limit.d.ts +9 -0
  1552. package/dist/server/server-rate-limit.js +77 -0
  1553. package/dist/server/server-rate-limit.js.map +1 -0
  1554. package/dist/server/server-routes-approvals.d.ts +4 -0
  1555. package/dist/server/server-routes-approvals.js +238 -0
  1556. package/dist/server/server-routes-approvals.js.map +1 -0
  1557. package/dist/server/server-routes-auth.d.ts +7 -0
  1558. package/dist/server/server-routes-auth.js +532 -0
  1559. package/dist/server/server-routes-auth.js.map +1 -0
  1560. package/dist/server/server-routes-events.d.ts +4 -0
  1561. package/dist/server/server-routes-events.js +167 -0
  1562. package/dist/server/server-routes-events.js.map +1 -0
  1563. package/dist/server/server-routes-public.d.ts +24 -0
  1564. package/dist/server/server-routes-public.js +453 -0
  1565. package/dist/server/server-routes-public.js.map +1 -0
  1566. package/dist/server/server-routes-waitpoints.d.ts +4 -0
  1567. package/dist/server/server-routes-waitpoints.js +190 -0
  1568. package/dist/server/server-routes-waitpoints.js.map +1 -0
  1569. package/dist/server/server-routes-webchat.d.ts +14 -0
  1570. package/dist/server/server-routes-webchat.js +307 -0
  1571. package/dist/server/server-routes-webchat.js.map +1 -0
  1572. package/dist/server/server-routes-workflows.d.ts +5 -0
  1573. package/dist/server/server-routes-workflows.js +289 -0
  1574. package/dist/server/server-routes-workflows.js.map +1 -0
  1575. package/dist/server/server-sse.d.ts +13 -0
  1576. package/dist/server/server-sse.js +197 -0
  1577. package/dist/server/server-sse.js.map +1 -0
  1578. package/dist/server/server-store-circuit-breaker.d.ts +32 -0
  1579. package/dist/server/server-store-circuit-breaker.js +211 -0
  1580. package/dist/server/server-store-circuit-breaker.js.map +1 -0
  1581. package/dist/server/server-store.d.ts +5 -0
  1582. package/dist/server/server-store.js +71 -0
  1583. package/dist/server/server-store.js.map +1 -0
  1584. package/dist/server/server-trace.d.ts +41 -0
  1585. package/dist/server/server-trace.js +133 -0
  1586. package/dist/server/server-trace.js.map +1 -0
  1587. package/dist/server/server-worker.d.ts +4 -0
  1588. package/dist/server/server-worker.js +127 -0
  1589. package/dist/server/server-worker.js.map +1 -0
  1590. package/dist/server/session-events.d.ts +27 -0
  1591. package/dist/server/session-events.js +69 -0
  1592. package/dist/server/session-events.js.map +1 -0
  1593. package/dist/server/session-manager.d.ts +52 -0
  1594. package/dist/server/session-manager.js +502 -0
  1595. package/dist/server/session-manager.js.map +1 -0
  1596. package/dist/server/tool-router-discovery.d.ts +33 -0
  1597. package/dist/server/tool-router-discovery.js +218 -0
  1598. package/dist/server/tool-router-discovery.js.map +1 -0
  1599. package/dist/server/tool-router-types.d.ts +91 -0
  1600. package/dist/server/tool-router-types.js +336 -0
  1601. package/dist/server/tool-router-types.js.map +1 -0
  1602. package/dist/server/tool-router-user-tools.d.ts +16 -0
  1603. package/dist/server/tool-router-user-tools.js +269 -0
  1604. package/dist/server/tool-router-user-tools.js.map +1 -0
  1605. package/dist/server/tool-router.js +959 -599
  1606. package/dist/server/tool-router.js.map +1 -0
  1607. package/dist/server/validation-schemas.d.ts +12 -0
  1608. package/dist/server/validation-schemas.js +251 -0
  1609. package/dist/server/validation-schemas.js.map +1 -0
  1610. package/dist/server/validation.js +248 -188
  1611. package/dist/server/validation.js.map +1 -0
  1612. package/dist/server/worker.js +202 -133
  1613. package/dist/server/worker.js.map +1 -0
  1614. package/dist/setup.d.ts +2 -2
  1615. package/dist/setup.js +151 -147
  1616. package/dist/setup.js.map +1 -0
  1617. package/dist/shared/agent-core-config.d.ts +12 -0
  1618. package/dist/shared/agent-core-config.js +77 -0
  1619. package/dist/shared/agent-core-config.js.map +1 -0
  1620. package/dist/shared/agent-core-config.test.js +132 -0
  1621. package/dist/shared/agent-core-context-thinking.test.js +293 -0
  1622. package/dist/shared/agent-core-loop-calls.test.js +174 -0
  1623. package/dist/shared/agent-core-loop-detector-bail.test.js +201 -0
  1624. package/dist/shared/agent-core-loop-detector.test.js +195 -0
  1625. package/dist/shared/agent-core-loop-errors.test.js +258 -0
  1626. package/dist/shared/agent-core-loop.d.ts +53 -0
  1627. package/dist/shared/agent-core-loop.js +251 -0
  1628. package/dist/shared/agent-core-loop.js.map +1 -0
  1629. package/dist/shared/agent-core-pricing.test.js +191 -0
  1630. package/dist/shared/agent-core-sanitize-retry.test.js +129 -0
  1631. package/dist/shared/agent-core-tools.d.ts +32 -0
  1632. package/dist/shared/agent-core-tools.js +323 -0
  1633. package/dist/shared/agent-core-tools.js.map +1 -0
  1634. package/dist/shared/agent-core-types.d.ts +182 -0
  1635. package/dist/shared/agent-core-types.js +265 -0
  1636. package/dist/shared/agent-core-types.js.map +1 -0
  1637. package/dist/shared/agent-core.d.ts +115 -26
  1638. package/dist/shared/agent-core.js +956 -522
  1639. package/dist/shared/agent-core.js.map +1 -0
  1640. package/dist/shared/agent-loop-base.d.ts +130 -0
  1641. package/dist/shared/agent-loop-base.js +347 -0
  1642. package/dist/shared/agent-loop-base.js.map +1 -0
  1643. package/dist/shared/anthropic-types.js +1 -6
  1644. package/dist/shared/anthropic-types.js.map +1 -0
  1645. package/dist/shared/api-client-build-request.test.js +228 -0
  1646. package/dist/shared/api-client-build-system-caching.test.js +107 -0
  1647. package/dist/shared/api-client-build.test.js +223 -0
  1648. package/dist/shared/api-client-config.d.ts +21 -0
  1649. package/dist/shared/api-client-helpers.d.ts +57 -0
  1650. package/dist/shared/api-client-helpers.test.js +261 -0
  1651. package/dist/shared/api-client-proxy-happy.test.js +255 -0
  1652. package/dist/shared/api-client-proxy-retry.test.js +307 -0
  1653. package/dist/shared/api-client-proxy.d.ts +26 -0
  1654. package/dist/shared/api-client-proxy.test.js +255 -0
  1655. package/dist/shared/api-client-retry.test.js +307 -0
  1656. package/dist/shared/api-client-system-trimming.test.js +261 -0
  1657. package/dist/shared/api-client-trimming.d.ts +36 -0
  1658. package/dist/shared/api-client.d.ts +16 -9
  1659. package/dist/shared/api-client.js +419 -327
  1660. package/dist/shared/api-client.js.map +1 -0
  1661. package/dist/shared/api-client.test.js +228 -0
  1662. package/dist/shared/compaction-thinking.test.js +315 -0
  1663. package/dist/shared/compaction-trimming.test.js +223 -0
  1664. package/dist/shared/compaction.d.ts +36 -0
  1665. package/dist/shared/compaction.js +138 -0
  1666. package/dist/shared/compaction.js.map +1 -0
  1667. package/dist/shared/constants.js +67 -64
  1668. package/dist/shared/constants.js.map +1 -0
  1669. package/dist/shared/exec-validator.d.ts +29 -0
  1670. package/dist/shared/exec-validator.js +106 -0
  1671. package/dist/shared/exec-validator.js.map +1 -0
  1672. package/dist/shared/imsg-constants.d.ts +8 -0
  1673. package/dist/shared/imsg-constants.js +13 -0
  1674. package/dist/shared/imsg-constants.js.map +1 -0
  1675. package/dist/shared/sse-parser-callbacks.test.js +422 -0
  1676. package/dist/shared/sse-parser-collect.test.js +252 -0
  1677. package/dist/shared/sse-parser-e2e.test.js +558 -0
  1678. package/dist/shared/sse-parser-parse.test.js +253 -0
  1679. package/dist/shared/sse-parser.js +221 -219
  1680. package/dist/shared/sse-parser.js.map +1 -0
  1681. package/dist/shared/tool-dispatch-advanced-batch-build.test.js +405 -0
  1682. package/dist/shared/tool-dispatch-advanced.test.js +320 -0
  1683. package/dist/shared/tool-dispatch-basic.test.js +278 -0
  1684. package/dist/shared/tool-dispatch-content.d.ts +14 -0
  1685. package/dist/shared/tool-dispatch-parallel.test.js +378 -0
  1686. package/dist/shared/tool-dispatch.d.ts +4 -0
  1687. package/dist/shared/tool-dispatch.js +226 -165
  1688. package/dist/shared/tool-dispatch.js.map +1 -0
  1689. package/dist/shared/types.js +1 -6
  1690. package/dist/shared/types.js.map +1 -0
  1691. package/dist/types/cli-highlight.d.js +2 -0
  1692. package/dist/types/cli-highlight.d.js.map +1 -0
  1693. package/dist/types/diff.d.js +2 -0
  1694. package/dist/types/diff.d.js.map +1 -0
  1695. package/dist/types/pdf-parse.d.js +2 -0
  1696. package/dist/types/pdf-parse.d.js.map +1 -0
  1697. package/dist/updater.d.ts +1 -1
  1698. package/dist/updater.js +118 -92
  1699. package/dist/updater.js.map +1 -0
  1700. package/dist/webchat/__tests__/widget-messaging.test.js +323 -0
  1701. package/dist/webchat/__tests__/widget.test.js +273 -0
  1702. package/dist/webchat/widget-styles.d.ts +7 -0
  1703. package/dist/webchat/widget-styles.js +11 -0
  1704. package/dist/webchat/widget-styles.js.map +1 -0
  1705. package/dist/webchat/widget.js +227 -380
  1706. package/dist/webchat/widget.js.map +1 -0
  1707. package/package.json +24 -11
  1708. package/src/cli/services/builtin-skills/verify.md +72 -0
  1709. package/vendor/ink/build/ansi-tokenizer.d.ts +38 -0
  1710. package/vendor/ink/build/ansi-tokenizer.js +316 -0
  1711. package/vendor/ink/build/ansi-tokenizer.js.map +1 -0
  1712. package/vendor/ink/build/apply-styles.js +175 -0
  1713. package/vendor/ink/build/build-layout.js +77 -0
  1714. package/vendor/ink/build/calculate-wrapped-text.js +53 -0
  1715. package/vendor/ink/build/colorize.d.ts +3 -0
  1716. package/vendor/ink/build/colorize.js +48 -0
  1717. package/vendor/ink/build/colorize.js.map +1 -0
  1718. package/vendor/ink/build/components/AccessibilityContext.d.ts +3 -0
  1719. package/vendor/ink/build/components/AccessibilityContext.js +5 -0
  1720. package/vendor/ink/build/components/AccessibilityContext.js.map +1 -0
  1721. package/vendor/ink/build/components/App.d.ts +18 -0
  1722. package/vendor/ink/build/components/App.js +351 -0
  1723. package/vendor/ink/build/components/App.js.map +1 -0
  1724. package/vendor/ink/build/components/AppContext.d.ts +15 -0
  1725. package/vendor/ink/build/components/AppContext.js +11 -0
  1726. package/vendor/ink/build/components/AppContext.js.map +1 -0
  1727. package/vendor/ink/build/components/BackgroundContext.d.ts +4 -0
  1728. package/vendor/ink/build/components/BackgroundContext.js +3 -0
  1729. package/vendor/ink/build/components/BackgroundContext.js.map +1 -0
  1730. package/vendor/ink/build/components/Box.d.ts +117 -0
  1731. package/vendor/ink/build/components/Box.js +34 -0
  1732. package/vendor/ink/build/components/Box.js.map +1 -0
  1733. package/vendor/ink/build/components/Color.js +62 -0
  1734. package/vendor/ink/build/components/Cursor.d.ts +83 -0
  1735. package/vendor/ink/build/components/Cursor.js +53 -0
  1736. package/vendor/ink/build/components/Cursor.js.map +1 -0
  1737. package/vendor/ink/build/components/CursorContext.d.ts +11 -0
  1738. package/vendor/ink/build/components/CursorContext.js +8 -0
  1739. package/vendor/ink/build/components/CursorContext.js.map +1 -0
  1740. package/vendor/ink/build/components/ErrorBoundary.d.ts +18 -0
  1741. package/vendor/ink/build/components/ErrorBoundary.js +23 -0
  1742. package/vendor/ink/build/components/ErrorBoundary.js.map +1 -0
  1743. package/vendor/ink/build/components/ErrorOverview.d.ts +6 -0
  1744. package/vendor/ink/build/components/ErrorOverview.js +84 -0
  1745. package/vendor/ink/build/components/ErrorOverview.js.map +1 -0
  1746. package/vendor/ink/build/components/FocusContext.d.ts +16 -0
  1747. package/vendor/ink/build/components/FocusContext.js +17 -0
  1748. package/vendor/ink/build/components/FocusContext.js.map +1 -0
  1749. package/vendor/ink/build/components/Newline.d.ts +13 -0
  1750. package/vendor/ink/build/components/Newline.js +8 -0
  1751. package/vendor/ink/build/components/Newline.js.map +1 -0
  1752. package/vendor/ink/build/components/Spacer.d.ts +7 -0
  1753. package/vendor/ink/build/components/Spacer.js +11 -0
  1754. package/vendor/ink/build/components/Spacer.js.map +1 -0
  1755. package/vendor/ink/build/components/Static.d.ts +24 -0
  1756. package/vendor/ink/build/components/Static.js +28 -0
  1757. package/vendor/ink/build/components/Static.js.map +1 -0
  1758. package/vendor/ink/build/components/StderrContext.d.ts +15 -0
  1759. package/vendor/ink/build/components/StderrContext.js +13 -0
  1760. package/vendor/ink/build/components/StderrContext.js.map +1 -0
  1761. package/vendor/ink/build/components/StdinContext.d.ts +22 -0
  1762. package/vendor/ink/build/components/StdinContext.js +19 -0
  1763. package/vendor/ink/build/components/StdinContext.js.map +1 -0
  1764. package/vendor/ink/build/components/StdoutContext.d.ts +15 -0
  1765. package/vendor/ink/build/components/StdoutContext.js +13 -0
  1766. package/vendor/ink/build/components/StdoutContext.js.map +1 -0
  1767. package/vendor/ink/build/components/Text.d.ts +55 -0
  1768. package/vendor/ink/build/components/Text.js +50 -0
  1769. package/vendor/ink/build/components/Text.js.map +1 -0
  1770. package/vendor/ink/build/components/Transform.d.ts +16 -0
  1771. package/vendor/ink/build/components/Transform.js +15 -0
  1772. package/vendor/ink/build/components/Transform.js.map +1 -0
  1773. package/vendor/ink/build/cursor-helpers.d.ts +38 -0
  1774. package/vendor/ink/build/cursor-helpers.js +56 -0
  1775. package/vendor/ink/build/cursor-helpers.js.map +1 -0
  1776. package/vendor/ink/build/devtools-window-polyfill.d.ts +1 -0
  1777. package/vendor/ink/build/devtools-window-polyfill.js +65 -0
  1778. package/vendor/ink/build/devtools-window-polyfill.js.map +1 -0
  1779. package/vendor/ink/build/devtools.d.ts +1 -0
  1780. package/vendor/ink/build/devtools.js +11 -0
  1781. package/vendor/ink/build/devtools.js.map +1 -0
  1782. package/vendor/ink/build/dom.d.ts +56 -0
  1783. package/vendor/ink/build/dom.js +124 -0
  1784. package/vendor/ink/build/dom.js.map +1 -0
  1785. package/vendor/ink/build/experimental/apply-style.js +140 -0
  1786. package/vendor/ink/build/experimental/dom.js +123 -0
  1787. package/vendor/ink/build/experimental/output.js +91 -0
  1788. package/vendor/ink/build/experimental/reconciler.js +141 -0
  1789. package/vendor/ink/build/experimental/renderer.js +81 -0
  1790. package/vendor/ink/build/get-max-width.d.ts +3 -0
  1791. package/vendor/ink/build/get-max-width.js +10 -0
  1792. package/vendor/ink/build/get-max-width.js.map +1 -0
  1793. package/vendor/ink/build/hooks/use-app.d.ts +5 -0
  1794. package/vendor/ink/build/hooks/use-app.js +8 -0
  1795. package/vendor/ink/build/hooks/use-app.js.map +1 -0
  1796. package/vendor/ink/build/hooks/use-cursor.d.ts +12 -0
  1797. package/vendor/ink/build/hooks/use-cursor.js +29 -0
  1798. package/vendor/ink/build/hooks/use-cursor.js.map +1 -0
  1799. package/vendor/ink/build/hooks/use-focus-manager.d.ts +28 -0
  1800. package/vendor/ink/build/hooks/use-focus-manager.js +17 -0
  1801. package/vendor/ink/build/hooks/use-focus-manager.js.map +1 -0
  1802. package/vendor/ink/build/hooks/use-focus.d.ts +29 -0
  1803. package/vendor/ink/build/hooks/use-focus.js +42 -0
  1804. package/vendor/ink/build/hooks/use-focus.js.map +1 -0
  1805. package/vendor/ink/build/hooks/use-input.d.ts +131 -0
  1806. package/vendor/ink/build/hooks/use-input.js +124 -0
  1807. package/vendor/ink/build/hooks/use-input.js.map +1 -0
  1808. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.d.ts +5 -0
  1809. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js +11 -0
  1810. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
  1811. package/vendor/ink/build/hooks/use-stderr.d.ts +5 -0
  1812. package/vendor/ink/build/hooks/use-stderr.js +8 -0
  1813. package/vendor/ink/build/hooks/use-stderr.js.map +1 -0
  1814. package/vendor/ink/build/hooks/use-stdin.d.ts +5 -0
  1815. package/vendor/ink/build/hooks/use-stdin.js +8 -0
  1816. package/vendor/ink/build/hooks/use-stdin.js.map +1 -0
  1817. package/vendor/ink/build/hooks/use-stdout.d.ts +5 -0
  1818. package/vendor/ink/build/hooks/use-stdout.js +8 -0
  1819. package/vendor/ink/build/hooks/use-stdout.js.map +1 -0
  1820. package/vendor/ink/build/hooks/useInput.js +38 -0
  1821. package/vendor/ink/build/index.d.ts +34 -0
  1822. package/vendor/ink/build/index.js +20 -0
  1823. package/vendor/ink/build/index.js.map +1 -0
  1824. package/vendor/ink/build/ink.d.ts +90 -0
  1825. package/vendor/ink/build/ink.js +677 -0
  1826. package/vendor/ink/build/ink.js.map +1 -0
  1827. package/vendor/ink/build/input-parser.d.ts +7 -0
  1828. package/vendor/ink/build/input-parser.js +154 -0
  1829. package/vendor/ink/build/input-parser.js.map +1 -0
  1830. package/vendor/ink/build/instance.js +205 -0
  1831. package/vendor/ink/build/instances.d.ts +3 -0
  1832. package/vendor/ink/build/instances.js +8 -0
  1833. package/vendor/ink/build/instances.js.map +1 -0
  1834. package/vendor/ink/build/kitty-keyboard.d.ts +23 -0
  1835. package/vendor/ink/build/kitty-keyboard.js +32 -0
  1836. package/vendor/ink/build/kitty-keyboard.js.map +1 -0
  1837. package/vendor/ink/build/layout.d.ts +7 -0
  1838. package/vendor/ink/build/layout.js +33 -0
  1839. package/vendor/ink/build/layout.js.map +1 -0
  1840. package/vendor/ink/build/log-update.d.ts +19 -0
  1841. package/vendor/ink/build/log-update.js +250 -0
  1842. package/vendor/ink/build/log-update.js.map +1 -0
  1843. package/vendor/ink/build/measure-element.d.ts +16 -0
  1844. package/vendor/ink/build/measure-element.js +9 -0
  1845. package/vendor/ink/build/measure-element.js.map +1 -0
  1846. package/vendor/ink/build/measure-text.d.ts +6 -0
  1847. package/vendor/ink/build/measure-text.js +21 -0
  1848. package/vendor/ink/build/measure-text.js.map +1 -0
  1849. package/vendor/ink/build/options.d.ts +52 -0
  1850. package/vendor/ink/build/options.js +2 -0
  1851. package/vendor/ink/build/options.js.map +1 -0
  1852. package/vendor/ink/build/output.d.ts +35 -0
  1853. package/vendor/ink/build/output.js +183 -0
  1854. package/vendor/ink/build/output.js.map +1 -0
  1855. package/vendor/ink/build/parse-keypress.d.ts +22 -0
  1856. package/vendor/ink/build/parse-keypress.js +493 -0
  1857. package/vendor/ink/build/parse-keypress.js.map +1 -0
  1858. package/vendor/ink/build/reconciler.d.ts +4 -0
  1859. package/vendor/ink/build/reconciler.js +274 -0
  1860. package/vendor/ink/build/reconciler.js.map +1 -0
  1861. package/vendor/ink/build/render-background.d.ts +4 -0
  1862. package/vendor/ink/build/render-background.js +25 -0
  1863. package/vendor/ink/build/render-background.js.map +1 -0
  1864. package/vendor/ink/build/render-border.d.ts +4 -0
  1865. package/vendor/ink/build/render-border.js +73 -0
  1866. package/vendor/ink/build/render-border.js.map +1 -0
  1867. package/vendor/ink/build/render-node-to-output.d.ts +14 -0
  1868. package/vendor/ink/build/render-node-to-output.js +147 -0
  1869. package/vendor/ink/build/render-node-to-output.js.map +1 -0
  1870. package/vendor/ink/build/render-to-string.d.ts +38 -0
  1871. package/vendor/ink/build/render-to-string.js +115 -0
  1872. package/vendor/ink/build/render-to-string.js.map +1 -0
  1873. package/vendor/ink/build/render.d.ts +121 -0
  1874. package/vendor/ink/build/render.js +55 -0
  1875. package/vendor/ink/build/render.js.map +1 -0
  1876. package/vendor/ink/build/renderer.d.ts +8 -0
  1877. package/vendor/ink/build/renderer.js +55 -0
  1878. package/vendor/ink/build/renderer.js.map +1 -0
  1879. package/vendor/ink/build/sanitize-ansi.d.ts +2 -0
  1880. package/vendor/ink/build/sanitize-ansi.js +27 -0
  1881. package/vendor/ink/build/sanitize-ansi.js.map +1 -0
  1882. package/vendor/ink/build/screen-reader-update.d.ts +13 -0
  1883. package/vendor/ink/build/screen-reader-update.js +38 -0
  1884. package/vendor/ink/build/screen-reader-update.js.map +1 -0
  1885. package/vendor/ink/build/squash-text-nodes.d.ts +3 -0
  1886. package/vendor/ink/build/squash-text-nodes.js +36 -0
  1887. package/vendor/ink/build/squash-text-nodes.js.map +1 -0
  1888. package/vendor/ink/build/styles.d.ts +240 -0
  1889. package/vendor/ink/build/styles.js +232 -0
  1890. package/vendor/ink/build/styles.js.map +1 -0
  1891. package/vendor/ink/build/utils.d.ts +2 -0
  1892. package/vendor/ink/build/utils.js +4 -0
  1893. package/vendor/ink/build/utils.js.map +1 -0
  1894. package/vendor/ink/build/wrap-text.d.ts +3 -0
  1895. package/vendor/ink/build/wrap-text.js +31 -0
  1896. package/vendor/ink/build/wrap-text.js.map +1 -0
  1897. package/vendor/ink/build/write-synchronized.d.ts +4 -0
  1898. package/vendor/ink/build/write-synchronized.js +7 -0
  1899. package/vendor/ink/build/write-synchronized.js.map +1 -0
  1900. package/vendor/ink/license +10 -0
  1901. package/vendor/ink/node_modules/@types/node/LICENSE +21 -0
  1902. package/vendor/ink/node_modules/@types/node/README.md +15 -0
  1903. package/vendor/ink/node_modules/@types/node/assert/strict.d.ts +105 -0
  1904. package/vendor/ink/node_modules/@types/node/assert.d.ts +955 -0
  1905. package/vendor/ink/node_modules/@types/node/async_hooks.d.ts +623 -0
  1906. package/vendor/ink/node_modules/@types/node/buffer.buffer.d.ts +466 -0
  1907. package/vendor/ink/node_modules/@types/node/buffer.d.ts +1810 -0
  1908. package/vendor/ink/node_modules/@types/node/child_process.d.ts +1428 -0
  1909. package/vendor/ink/node_modules/@types/node/cluster.d.ts +486 -0
  1910. package/vendor/ink/node_modules/@types/node/compatibility/iterators.d.ts +21 -0
  1911. package/vendor/ink/node_modules/@types/node/console.d.ts +151 -0
  1912. package/vendor/ink/node_modules/@types/node/constants.d.ts +20 -0
  1913. package/vendor/ink/node_modules/@types/node/crypto.d.ts +4065 -0
  1914. package/vendor/ink/node_modules/@types/node/dgram.d.ts +564 -0
  1915. package/vendor/ink/node_modules/@types/node/diagnostics_channel.d.ts +576 -0
  1916. package/vendor/ink/node_modules/@types/node/dns/promises.d.ts +503 -0
  1917. package/vendor/ink/node_modules/@types/node/dns.d.ts +922 -0
  1918. package/vendor/ink/node_modules/@types/node/domain.d.ts +166 -0
  1919. package/vendor/ink/node_modules/@types/node/events.d.ts +1054 -0
  1920. package/vendor/ink/node_modules/@types/node/fs/promises.d.ts +1329 -0
  1921. package/vendor/ink/node_modules/@types/node/fs.d.ts +4676 -0
  1922. package/vendor/ink/node_modules/@types/node/globals.d.ts +150 -0
  1923. package/vendor/ink/node_modules/@types/node/globals.typedarray.d.ts +101 -0
  1924. package/vendor/ink/node_modules/@types/node/http.d.ts +2167 -0
  1925. package/vendor/ink/node_modules/@types/node/http2.d.ts +2480 -0
  1926. package/vendor/ink/node_modules/@types/node/https.d.ts +405 -0
  1927. package/vendor/ink/node_modules/@types/node/index.d.ts +115 -0
  1928. package/vendor/ink/node_modules/@types/node/inspector/promises.d.ts +41 -0
  1929. package/vendor/ink/node_modules/@types/node/inspector.d.ts +224 -0
  1930. package/vendor/ink/node_modules/@types/node/inspector.generated.d.ts +4226 -0
  1931. package/vendor/ink/node_modules/@types/node/module.d.ts +819 -0
  1932. package/vendor/ink/node_modules/@types/node/net.d.ts +933 -0
  1933. package/vendor/ink/node_modules/@types/node/os.d.ts +507 -0
  1934. package/vendor/ink/node_modules/@types/node/package.json +155 -0
  1935. package/vendor/ink/node_modules/@types/node/path/posix.d.ts +8 -0
  1936. package/vendor/ink/node_modules/@types/node/path/win32.d.ts +8 -0
  1937. package/vendor/ink/node_modules/@types/node/path.d.ts +187 -0
  1938. package/vendor/ink/node_modules/@types/node/perf_hooks.d.ts +643 -0
  1939. package/vendor/ink/node_modules/@types/node/process.d.ts +2156 -0
  1940. package/vendor/ink/node_modules/@types/node/punycode.d.ts +117 -0
  1941. package/vendor/ink/node_modules/@types/node/querystring.d.ts +152 -0
  1942. package/vendor/ink/node_modules/@types/node/quic.d.ts +910 -0
  1943. package/vendor/ink/node_modules/@types/node/readline/promises.d.ts +161 -0
  1944. package/vendor/ink/node_modules/@types/node/readline.d.ts +541 -0
  1945. package/vendor/ink/node_modules/@types/node/repl.d.ts +415 -0
  1946. package/vendor/ink/node_modules/@types/node/sea.d.ts +162 -0
  1947. package/vendor/ink/node_modules/@types/node/sqlite.d.ts +955 -0
  1948. package/vendor/ink/node_modules/@types/node/stream/consumers.d.ts +38 -0
  1949. package/vendor/ink/node_modules/@types/node/stream/promises.d.ts +211 -0
  1950. package/vendor/ink/node_modules/@types/node/stream/web.d.ts +296 -0
  1951. package/vendor/ink/node_modules/@types/node/stream.d.ts +1760 -0
  1952. package/vendor/ink/node_modules/@types/node/string_decoder.d.ts +67 -0
  1953. package/vendor/ink/node_modules/@types/node/test/reporters.d.ts +96 -0
  1954. package/vendor/ink/node_modules/@types/node/test.d.ts +2240 -0
  1955. package/vendor/ink/node_modules/@types/node/timers/promises.d.ts +108 -0
  1956. package/vendor/ink/node_modules/@types/node/timers.d.ts +159 -0
  1957. package/vendor/ink/node_modules/@types/node/tls.d.ts +1198 -0
  1958. package/vendor/ink/node_modules/@types/node/trace_events.d.ts +197 -0
  1959. package/vendor/ink/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +462 -0
  1960. package/vendor/ink/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +71 -0
  1961. package/vendor/ink/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +36 -0
  1962. package/vendor/ink/node_modules/@types/node/ts5.6/index.d.ts +117 -0
  1963. package/vendor/ink/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +72 -0
  1964. package/vendor/ink/node_modules/@types/node/ts5.7/index.d.ts +117 -0
  1965. package/vendor/ink/node_modules/@types/node/tty.d.ts +250 -0
  1966. package/vendor/ink/node_modules/@types/node/url.d.ts +519 -0
  1967. package/vendor/ink/node_modules/@types/node/util/types.d.ts +558 -0
  1968. package/vendor/ink/node_modules/@types/node/util.d.ts +1662 -0
  1969. package/vendor/ink/node_modules/@types/node/v8.d.ts +983 -0
  1970. package/vendor/ink/node_modules/@types/node/vm.d.ts +1208 -0
  1971. package/vendor/ink/node_modules/@types/node/wasi.d.ts +202 -0
  1972. package/vendor/ink/node_modules/@types/node/web-globals/abortcontroller.d.ts +59 -0
  1973. package/vendor/ink/node_modules/@types/node/web-globals/blob.d.ts +23 -0
  1974. package/vendor/ink/node_modules/@types/node/web-globals/console.d.ts +9 -0
  1975. package/vendor/ink/node_modules/@types/node/web-globals/crypto.d.ts +39 -0
  1976. package/vendor/ink/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  1977. package/vendor/ink/node_modules/@types/node/web-globals/encoding.d.ts +11 -0
  1978. package/vendor/ink/node_modules/@types/node/web-globals/events.d.ts +106 -0
  1979. package/vendor/ink/node_modules/@types/node/web-globals/fetch.d.ts +69 -0
  1980. package/vendor/ink/node_modules/@types/node/web-globals/importmeta.d.ts +13 -0
  1981. package/vendor/ink/node_modules/@types/node/web-globals/messaging.d.ts +23 -0
  1982. package/vendor/ink/node_modules/@types/node/web-globals/navigator.d.ts +25 -0
  1983. package/vendor/ink/node_modules/@types/node/web-globals/performance.d.ts +45 -0
  1984. package/vendor/ink/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  1985. package/vendor/ink/node_modules/@types/node/web-globals/streams.d.ts +115 -0
  1986. package/vendor/ink/node_modules/@types/node/web-globals/timers.d.ts +44 -0
  1987. package/vendor/ink/node_modules/@types/node/web-globals/url.d.ts +24 -0
  1988. package/vendor/ink/node_modules/@types/node/worker_threads.d.ts +717 -0
  1989. package/vendor/ink/node_modules/@types/node/zlib.d.ts +618 -0
  1990. package/vendor/ink/node_modules/node-pty/LICENSE +69 -0
  1991. package/vendor/ink/node_modules/node-pty/README.md +164 -0
  1992. package/vendor/ink/node_modules/node-pty/binding.gyp +150 -0
  1993. package/vendor/ink/node_modules/node-pty/lib/conpty_console_list_agent.js +25 -0
  1994. package/vendor/ink/node_modules/node-pty/lib/eventEmitter2.js +47 -0
  1995. package/vendor/ink/node_modules/node-pty/lib/index.js +52 -0
  1996. package/vendor/ink/node_modules/node-pty/lib/interfaces.js +7 -0
  1997. package/vendor/ink/node_modules/node-pty/lib/shared/conout.js +11 -0
  1998. package/vendor/ink/node_modules/node-pty/lib/terminal.js +190 -0
  1999. package/vendor/ink/node_modules/node-pty/lib/types.js +7 -0
  2000. package/vendor/ink/node_modules/node-pty/lib/unixTerminal.js +349 -0
  2001. package/vendor/ink/node_modules/node-pty/lib/utils.js +39 -0
  2002. package/vendor/ink/node_modules/node-pty/lib/windowsConoutConnection.js +125 -0
  2003. package/vendor/ink/node_modules/node-pty/lib/windowsPtyAgent.js +287 -0
  2004. package/vendor/ink/node_modules/node-pty/lib/windowsTerminal.js +201 -0
  2005. package/vendor/ink/node_modules/node-pty/lib/worker/conoutSocketWorker.js +22 -0
  2006. package/vendor/ink/node_modules/node-pty/package.json +65 -0
  2007. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/pty.node +0 -0
  2008. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/spawn-helper +0 -0
  2009. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/pty.node +0 -0
  2010. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/spawn-helper +0 -0
  2011. package/vendor/ink/node_modules/node-pty/prebuilds/linux-arm64/pty.node +0 -0
  2012. package/vendor/ink/node_modules/node-pty/prebuilds/linux-x64/pty.node +0 -0
  2013. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
  2014. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
  2015. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
  2016. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.pdb +0 -0
  2017. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
  2018. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.pdb +0 -0
  2019. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
  2020. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
  2021. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.node +0 -0
  2022. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.pdb +0 -0
  2023. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
  2024. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.pdb +0 -0
  2025. package/vendor/ink/node_modules/node-pty/scripts/post-install.js +76 -0
  2026. package/vendor/ink/node_modules/node-pty/scripts/prebuild.js +34 -0
  2027. package/vendor/ink/node_modules/node-pty/src/unix/pty.cc +875 -0
  2028. package/vendor/ink/node_modules/node-pty/src/unix/spawn-helper.cc +23 -0
  2029. package/vendor/ink/node_modules/node-pty/src/win/conpty.cc +582 -0
  2030. package/vendor/ink/node_modules/node-pty/src/win/conpty.h +41 -0
  2031. package/vendor/ink/node_modules/node-pty/src/win/conpty_console_list.cc +44 -0
  2032. package/vendor/ink/node_modules/node-pty/src/win/path_util.cc +95 -0
  2033. package/vendor/ink/node_modules/node-pty/src/win/path_util.h +26 -0
  2034. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/OpenConsole.exe +0 -0
  2035. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/conpty.dll +0 -0
  2036. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/OpenConsole.exe +0 -0
  2037. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/conpty.dll +0 -0
  2038. package/vendor/ink/node_modules/node-pty/typings/node-pty.d.ts +215 -0
  2039. package/vendor/ink/node_modules/undici-types/LICENSE +21 -0
  2040. package/vendor/ink/node_modules/undici-types/README.md +6 -0
  2041. package/vendor/ink/node_modules/undici-types/agent.d.ts +32 -0
  2042. package/vendor/ink/node_modules/undici-types/api.d.ts +43 -0
  2043. package/vendor/ink/node_modules/undici-types/balanced-pool.d.ts +30 -0
  2044. package/vendor/ink/node_modules/undici-types/cache-interceptor.d.ts +173 -0
  2045. package/vendor/ink/node_modules/undici-types/cache.d.ts +36 -0
  2046. package/vendor/ink/node_modules/undici-types/client-stats.d.ts +15 -0
  2047. package/vendor/ink/node_modules/undici-types/client.d.ts +108 -0
  2048. package/vendor/ink/node_modules/undici-types/connector.d.ts +34 -0
  2049. package/vendor/ink/node_modules/undici-types/content-type.d.ts +21 -0
  2050. package/vendor/ink/node_modules/undici-types/cookies.d.ts +30 -0
  2051. package/vendor/ink/node_modules/undici-types/diagnostics-channel.d.ts +74 -0
  2052. package/vendor/ink/node_modules/undici-types/dispatcher.d.ts +276 -0
  2053. package/vendor/ink/node_modules/undici-types/env-http-proxy-agent.d.ts +22 -0
  2054. package/vendor/ink/node_modules/undici-types/errors.d.ts +161 -0
  2055. package/vendor/ink/node_modules/undici-types/eventsource.d.ts +66 -0
  2056. package/vendor/ink/node_modules/undici-types/fetch.d.ts +211 -0
  2057. package/vendor/ink/node_modules/undici-types/formdata.d.ts +108 -0
  2058. package/vendor/ink/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  2059. package/vendor/ink/node_modules/undici-types/global-origin.d.ts +7 -0
  2060. package/vendor/ink/node_modules/undici-types/h2c-client.d.ts +73 -0
  2061. package/vendor/ink/node_modules/undici-types/handlers.d.ts +15 -0
  2062. package/vendor/ink/node_modules/undici-types/header.d.ts +160 -0
  2063. package/vendor/ink/node_modules/undici-types/index.d.ts +88 -0
  2064. package/vendor/ink/node_modules/undici-types/interceptors.d.ts +73 -0
  2065. package/vendor/ink/node_modules/undici-types/mock-agent.d.ts +68 -0
  2066. package/vendor/ink/node_modules/undici-types/mock-call-history.d.ts +111 -0
  2067. package/vendor/ink/node_modules/undici-types/mock-client.d.ts +27 -0
  2068. package/vendor/ink/node_modules/undici-types/mock-errors.d.ts +12 -0
  2069. package/vendor/ink/node_modules/undici-types/mock-interceptor.d.ts +94 -0
  2070. package/vendor/ink/node_modules/undici-types/mock-pool.d.ts +27 -0
  2071. package/vendor/ink/node_modules/undici-types/package.json +55 -0
  2072. package/vendor/ink/node_modules/undici-types/patch.d.ts +29 -0
  2073. package/vendor/ink/node_modules/undici-types/pool-stats.d.ts +19 -0
  2074. package/vendor/ink/node_modules/undici-types/pool.d.ts +41 -0
  2075. package/vendor/ink/node_modules/undici-types/proxy-agent.d.ts +29 -0
  2076. package/vendor/ink/node_modules/undici-types/readable.d.ts +68 -0
  2077. package/vendor/ink/node_modules/undici-types/retry-agent.d.ts +8 -0
  2078. package/vendor/ink/node_modules/undici-types/retry-handler.d.ts +125 -0
  2079. package/vendor/ink/node_modules/undici-types/round-robin-pool.d.ts +41 -0
  2080. package/vendor/ink/node_modules/undici-types/snapshot-agent.d.ts +109 -0
  2081. package/vendor/ink/node_modules/undici-types/util.d.ts +18 -0
  2082. package/vendor/ink/node_modules/undici-types/utility.d.ts +7 -0
  2083. package/vendor/ink/node_modules/undici-types/webidl.d.ts +341 -0
  2084. package/vendor/ink/node_modules/undici-types/websocket.d.ts +186 -0
  2085. package/vendor/ink/package.json +201 -0
  2086. package/vendor/ink/readme.md +2636 -0
  2087. package/bin/swag-agent.js +0 -9
  2088. package/dist/server/lib/pg-rate-limiter.d.ts +0 -21
  2089. package/dist/server/lib/pg-rate-limiter.js +0 -86
@@ -16,14 +16,15 @@
16
16
  * - session-persistence.ts (SessionMeta, save/load/list/find sessions)
17
17
  * - system-prompt.ts (buildSystemPrompt)
18
18
  */
19
- import { LOCAL_TOOL_DEFINITIONS, executeLocalTool, isLocalTool, } from "./local-tools.js";
20
- import { INTERACTIVE_TOOL_DEFINITIONS, executeInteractiveTool, waitForPlanApproval, } from "./interactive-tools.js";
21
- import { loadConfig, resolveConfig, getProxyUrl } from "./config-store.js";
19
+
20
+ import { LOCAL_TOOL_DEFINITIONS, executeLocalTool, isLocalTool } from "./local-tools.js";
21
+ import { INTERACTIVE_TOOL_DEFINITIONS, executeInteractiveTool, waitForPlanApproval } from "./interactive-tools.js";
22
+ import { loadConfig, resolveConfig, getProxyUrl, resolveDefaultAgentId } from "./config-store.js";
22
23
  import { getValidToken, refreshSession } from "./auth-service.js";
23
- import { isServerTool, loadServerToolDefinitions, executeServerTool, getServerStatus, setServerToolContext, } from "./server-tools.js";
24
- import { nextTurn, createTurnContext, logSpan, generateSpanId, flushCliSpans, } from "./telemetry.js";
24
+ import { isServerTool, loadServerToolDefinitions, executeServerTool, getServerStatus, setServerToolContext } from "./server-tools.js";
25
+ import { nextTurn, createTurnContext, logSpan, generateSpanId, flushCliSpans } from "./telemetry.js";
25
26
  import { captureError, addBreadcrumb } from "./error-logger.js";
26
- import { setGlobalEmitter, clearGlobalEmitter, } from "./agent-events.js";
27
+ import { setGlobalEmitter, clearGlobalEmitter } from "./agent-events.js";
27
28
  import { mcpClientManager } from "./mcp-client.js";
28
29
  import { loadHooks, runBeforeToolHook, runAfterToolHook, runSessionHook } from "./hooks.js";
29
30
  import { LoopDetector, COMPACTION_TOTAL_BUDGET, getCompactionConfig, getContextManagement, DEFAULT_SESSION_COST_BUDGET_USD, emitCostWarningIfNeeded, resolveAgentLoopConfig, AGENT_DEFAULTS } from "../../shared/agent-core.js";
@@ -39,41 +40,65 @@ import { loadClaudeMd, reloadClaudeMd, resetClaudeMdCache } from "./claude-md-lo
39
40
  import { clearReadCache } from "./tools/file-ops.js";
40
41
  import { setPermissionMode, getPermissionMode, isToolAllowedByPermission } from "./permission-modes.js";
41
42
  import { setModel, setModelById, getModel, getModelShortName, estimateCostUsd } from "./model-manager.js";
42
- import { saveSession, loadSession, listSessions, findLatestSessionForCwd } from "./session-persistence.js";
43
+ import { saveSession, loadSession, listSessions, findLatestSessionForCwd, updateSessionMeta } from "./session-persistence.js";
43
44
  import { buildSystemPrompt } from "./system-prompt.js";
45
+
44
46
  // ============================================================================
45
- // RE-EXPORTS — all consumers keep importing from agent-loop.ts
47
+ // RE-EXPORTS — legacy compatibility. Prefer importing from source modules directly:
48
+ // memory-manager.ts, git-context.ts, claude-md-loader.ts,
49
+ // permission-modes.ts, model-manager.ts, session-persistence.ts,
50
+ // server-tools.ts, mcp-client.ts, background-processes.ts, agent-events.ts
46
51
  // ============================================================================
47
- // Memory
52
+
53
+ // Memory → import from "./memory-manager.js"
48
54
  export { loadMemory, addMemory, removeMemory, listMemories };
49
- // Git context
55
+
56
+ // Git context → import from "./git-context.js"
50
57
  export { refreshGitContext };
51
- // CLAUDE.md
58
+
59
+ // CLAUDE.md → import from "./claude-md-loader.js"
52
60
  export { loadClaudeMd, reloadClaudeMd };
53
- // Permission modes
61
+
62
+ // Permission modes → import from "./permission-modes.js"
54
63
  export { setPermissionMode, getPermissionMode, isToolAllowedByPermission };
55
- // Model management
64
+
65
+ // Model management → import from "./model-manager.js"
56
66
  export { setModel, getModel, getModelShortName, estimateCostUsd };
57
- // Session persistence
58
- export { saveSession, loadSession, listSessions, findLatestSessionForCwd };
59
- // Server status (pass-through)
67
+
68
+ // Session persistence import from "./session-persistence.js"
69
+ export { saveSession, loadSession, listSessions, findLatestSessionForCwd, updateSessionMeta };
70
+
71
+ // Server status → import from "./server-tools.js"
60
72
  export { getServerStatus };
61
- // MCP client manager
73
+
74
+ // MCP client manager → import from "./mcp-client.js"
62
75
  export { mcpClientManager };
63
- // Re-export background process listing for /tasks command
76
+
77
+ // Background processes → import from "./background-processes.js"
64
78
  export { listProcesses, listBackgroundAgents } from "./background-processes.js";
65
- // Re-export event emitter for ChatApp
79
+
80
+ // Event emitter → import from "./agent-events.js"
66
81
  export { AgentEventEmitter } from "./agent-events.js";
82
+
83
+ // ============================================================================
84
+ // TYPES
85
+ // ============================================================================
86
+
67
87
  // ============================================================================
68
88
  // SESSION STATE
69
89
  // ============================================================================
90
+
70
91
  // CLI-only: Session-wide token tracking (actual counts from API responses).
71
92
  // Reset via resetSessionState() when starting a new conversation.
72
93
  let sessionInputTokens = 0;
73
94
  let sessionOutputTokens = 0;
74
95
  export function getSessionTokens() {
75
- return { input: sessionInputTokens, output: sessionOutputTokens };
96
+ return {
97
+ input: sessionInputTokens,
98
+ output: sessionOutputTokens
99
+ };
76
100
  }
101
+
77
102
  /**
78
103
  * Reset all CLI-only session state. Call when starting a new conversation
79
104
  * (e.g., /clear command, new print-mode run) to prevent stale token counts,
@@ -83,758 +108,1166 @@ export function getSessionTokens() {
83
108
  * that persist intentionally until explicitly changed.
84
109
  */
85
110
  export function resetSessionState() {
86
- sessionInputTokens = 0;
87
- sessionOutputTokens = 0;
88
- sessionLoopDetector = null;
89
- resetGitContext();
90
- resetClaudeMdCache();
91
- clearReadCache();
92
- resetAgentConfigCache();
111
+ sessionInputTokens = 0;
112
+ sessionOutputTokens = 0;
113
+ sessionLoopDetector = null;
114
+ resetGitContext();
115
+ resetClaudeMdCache();
116
+ clearReadCache();
117
+ resetAgentConfigCache();
93
118
  }
119
+
94
120
  /** CLI-only: loop detector — persists session error state across turns (reset by resetSessionState) */
95
121
  let sessionLoopDetector = null;
96
- // CLI max turns — high ceiling since user controls via Ctrl+C.
97
- // DB agent config maxTurns is used when available, this is the absolute safety cap.
98
- const CLI_MAX_TURNS_CAP = 200;
122
+
123
+ // No artificial turn cap agent self-regulates via end_turn (Claude Code parity).
124
+ // Safety: LoopDetector catches loops, cost budget catches runaway spending, user has Ctrl+C.
125
+ const CLI_NO_LIMIT = Number.MAX_SAFE_INTEGER;
126
+
99
127
  // ============================================================================
100
128
  // SHELL OUTPUT SUMMARIZATION
101
129
  // ============================================================================
130
+
102
131
  const SHELL_SUMMARIZE_LINE_THRESHOLD = 800;
103
132
  const SHELL_SUMMARIZE_SIZE_THRESHOLD = 200_000; // 200KB — only summarize truly huge outputs
104
133
  const SHELL_SUMMARIZE_MAX_INPUT = 300_000; // 300KB max to summarizer
105
134
  const SHELL_SUMMARIZE_ORIGINAL_PREVIEW_LINES = 20;
135
+
106
136
  /**
107
137
  * Check if shell output should be summarized based on line count or size.
108
138
  */
109
139
  function shouldSummarizeShellOutput(output) {
110
- if (output.length > SHELL_SUMMARIZE_SIZE_THRESHOLD)
111
- return true;
112
- const lineCount = output.split("\n").length;
113
- return lineCount > SHELL_SUMMARIZE_LINE_THRESHOLD;
140
+ if (output.length > SHELL_SUMMARIZE_SIZE_THRESHOLD) return true;
141
+ const lineCount = output.split("\n").length;
142
+ return lineCount > SHELL_SUMMARIZE_LINE_THRESHOLD;
114
143
  }
144
+
115
145
  /**
116
146
  * Summarize long shell output using Haiku via server proxy.
117
147
  * Returns summarized output or original if summarization fails.
118
148
  */
119
149
  async function summarizeShellOutput(output, proxyUrl, token, storeId) {
120
- const lineCount = output.split("\n").length;
121
- const truncatedForSummary = output.length > SHELL_SUMMARIZE_MAX_INPUT
122
- ? output.slice(0, SHELL_SUMMARIZE_MAX_INPUT) + "\n... (truncated for summarization)"
123
- : output;
124
- try {
125
- const summaryConfig = buildAPIRequest({
126
- model: MODELS.HAIKU,
127
- contextProfile: "subagent",
128
- });
129
- const stream = await callServerProxy({
130
- proxyUrl,
131
- token,
132
- model: MODELS.HAIKU,
133
- system: [{ type: "text", text: "You are a concise technical summarizer. Summarize shell/command output preserving key information, errors, warnings, file paths, and actionable items. Be brief but thorough." }],
134
- messages: [{ role: "user", content: `Summarize this shell output concisely, preserving key information, errors, and actionable items:\n\n${truncatedForSummary}` }],
135
- tools: [],
136
- apiConfig: summaryConfig,
137
- storeId,
138
- timeoutMs: 15_000,
139
- });
140
- const result = await collectStreamResult(parseSSEStream(stream));
141
- const summary = result.text.trim();
142
- if (!summary)
143
- return output; // Summarization failed, return original
144
- // Build first N lines preview
145
- const originalLines = output.split("\n");
146
- const preview = originalLines.slice(0, SHELL_SUMMARIZE_ORIGINAL_PREVIEW_LINES).join("\n");
147
- return `[Summarized from ${lineCount} lines]\n\n${summary}\n\n[First ${SHELL_SUMMARIZE_ORIGINAL_PREVIEW_LINES} lines of original output]\n${preview}`;
148
- }
149
- catch {
150
- // Summarization failed silently — return original output
151
- return output;
152
- }
150
+ const lineCount = output.split("\n").length;
151
+ const truncatedForSummary = output.length > SHELL_SUMMARIZE_MAX_INPUT ? output.slice(0, SHELL_SUMMARIZE_MAX_INPUT) + "\n... (truncated for summarization)" : output;
152
+ try {
153
+ const summaryConfig = buildAPIRequest({
154
+ model: MODELS.HAIKU,
155
+ contextProfile: "subagent"
156
+ });
157
+ const stream = await callServerProxy({
158
+ proxyUrl,
159
+ token,
160
+ model: MODELS.HAIKU,
161
+ system: [{
162
+ type: "text",
163
+ text: "You are a concise technical summarizer. Summarize shell/command output preserving key information, errors, warnings, file paths, and actionable items. Be brief but thorough."
164
+ }],
165
+ messages: [{
166
+ role: "user",
167
+ content: `Summarize this shell output concisely, preserving key information, errors, and actionable items:\n\n${truncatedForSummary}`
168
+ }],
169
+ tools: [],
170
+ apiConfig: summaryConfig,
171
+ storeId,
172
+ timeoutMs: 15_000
173
+ });
174
+ const result = await collectStreamResult(parseSSEStream(stream));
175
+ const summary = result.text.trim();
176
+ if (!summary) return output; // Summarization failed, return original
177
+
178
+ // Build first N lines preview
179
+ const originalLines = output.split("\n");
180
+ const preview = originalLines.slice(0, SHELL_SUMMARIZE_ORIGINAL_PREVIEW_LINES).join("\n");
181
+ return `[Summarized from ${lineCount} lines]\n\n${summary}\n\n[First ${SHELL_SUMMARIZE_ORIGINAL_PREVIEW_LINES} lines of original output]\n${preview}`;
182
+ } catch {
183
+ // Summarization failed silently — return original output
184
+ return output;
185
+ }
153
186
  }
187
+
154
188
  /**
155
189
  * Post-process tool results to summarize long bash output.
156
190
  * Only affects bash tool results that exceed size/line thresholds.
157
191
  */
158
192
  async function summarizeLongToolResults(toolResults, toolNames, proxyUrl, token, shellSummarization, storeId) {
159
- if (!shellSummarization)
160
- return toolResults;
161
- const tasks = toolResults.map(async (result) => {
162
- // Only summarize bash tool string results
163
- const toolName = toolNames.get(result.tool_use_id);
164
- if (toolName !== "bash" || typeof result.content !== "string")
165
- return result;
166
- // Check thresholds
167
- if (!shouldSummarizeShellOutput(result.content))
168
- return result;
169
- const summarized = await summarizeShellOutput(result.content, proxyUrl, token, storeId);
170
- return { ...result, content: summarized };
171
- });
172
- return Promise.all(tasks);
193
+ if (!shellSummarization) return toolResults;
194
+ const tasks = toolResults.map(async result => {
195
+ // Only summarize bash tool string results
196
+ const toolName = toolNames.get(result.tool_use_id);
197
+ if (toolName !== "bash" || typeof result.content !== "string") return result;
198
+
199
+ // Check thresholds
200
+ if (!shouldSummarizeShellOutput(result.content)) return result;
201
+ const summarized = await summarizeShellOutput(result.content, proxyUrl, token, storeId);
202
+ return {
203
+ ...result,
204
+ content: summarized
205
+ };
206
+ });
207
+ return Promise.all(tasks);
173
208
  }
209
+
174
210
  // ============================================================================
175
211
  // TOOL DEFINITIONS
176
212
  // ============================================================================
213
+
177
214
  async function getTools(allowedTools, disallowedTools) {
178
- const localTools = LOCAL_TOOL_DEFINITIONS.map((t) => ({
179
- name: t.name,
180
- description: t.description,
181
- input_schema: t.input_schema,
182
- }));
183
- // Add interactive tools (ask_user_question, enter_plan_mode, exit_plan_mode)
184
- const interactiveTools = INTERACTIVE_TOOL_DEFINITIONS.map((t) => ({
185
- name: t.name,
186
- description: t.description,
187
- input_schema: t.input_schema,
188
- }));
189
- localTools.push(...interactiveTools);
190
- let serverTools = [];
191
- try {
192
- serverTools = await loadServerToolDefinitions();
193
- }
194
- catch {
195
- // Server tools silently unavailable
196
- }
197
- // Deduplicate: local tools take priority over server tools with the same name
198
- const localNames = new Set(localTools.map(t => t.name));
199
- const uniqueServerTools = serverTools.filter(t => !localNames.has(t.name));
200
- // MCP tools from external servers
201
- const mcpTools = mcpClientManager.getTools();
202
- let allTools = [...localTools, ...uniqueServerTools, ...mcpTools];
203
- // Apply tool filtering
204
- if (allowedTools && allowedTools.length > 0) {
205
- const allowed = new Set(allowedTools);
206
- allTools = allTools.filter(t => allowed.has(t.name));
207
- }
208
- if (disallowedTools && disallowedTools.length > 0) {
209
- const disallowed = new Set(disallowedTools);
210
- allTools = allTools.filter(t => !disallowed.has(t.name));
211
- }
212
- return {
213
- tools: allTools,
214
- serverToolCount: uniqueServerTools.length,
215
- };
215
+ const localTools = LOCAL_TOOL_DEFINITIONS.map(t => ({
216
+ name: t.name,
217
+ description: t.description,
218
+ input_schema: t.input_schema
219
+ }));
220
+
221
+ // Add interactive tools — skip plan mode tools in yolo mode (user doesn't want plan gates)
222
+ const skipPlanTools = getPermissionMode() === "yolo";
223
+ const interactiveTools = INTERACTIVE_TOOL_DEFINITIONS.filter(t => !skipPlanTools || t.name !== "enter_plan_mode" && t.name !== "exit_plan_mode").map(t => ({
224
+ name: t.name,
225
+ description: t.description,
226
+ input_schema: t.input_schema
227
+ }));
228
+ localTools.push(...interactiveTools);
229
+ let serverTools = [];
230
+ try {
231
+ serverTools = await loadServerToolDefinitions();
232
+ } catch {
233
+ // Server tools silently unavailable
234
+ }
235
+
236
+ // Deduplicate: local tools take priority over server tools with the same name
237
+ const localNames = new Set(localTools.map(t => t.name));
238
+ const uniqueServerTools = serverTools.filter(t => !localNames.has(t.name));
239
+
240
+ // MCP tools from external servers
241
+ const mcpTools = mcpClientManager.getTools();
242
+ let allTools = [...localTools, ...uniqueServerTools, ...mcpTools];
243
+
244
+ // Apply tool filtering
245
+ if (allowedTools && allowedTools.length > 0) {
246
+ const allowed = new Set(allowedTools);
247
+ allTools = allTools.filter(t => allowed.has(t.name));
248
+ }
249
+ if (disallowedTools && disallowedTools.length > 0) {
250
+ const disallowed = new Set(disallowedTools);
251
+ allTools = allTools.filter(t => !disallowed.has(t.name));
252
+ }
253
+ return {
254
+ tools: allTools,
255
+ serverToolCount: uniqueServerTools.length
256
+ };
216
257
  }
258
+
217
259
  /** Exposed for /status command */
218
260
  export async function getServerToolCount() {
219
- try {
220
- const defs = await loadServerToolDefinitions();
221
- return defs.length;
222
- }
223
- catch {
224
- return 0;
225
- }
261
+ try {
262
+ const defs = await loadServerToolDefinitions();
263
+ return defs.length;
264
+ } catch {
265
+ return 0;
266
+ }
226
267
  }
268
+
227
269
  // ============================================================================
228
270
  // MAIN LOOP
229
271
  // ============================================================================
272
+
230
273
  export async function runAgentLoop(opts) {
231
- const { message, conversationHistory, callbacks, abortSignal, emitter } = opts;
232
- if (opts.model)
233
- setModel(opts.model);
234
- // Set global emitter for subagents to use
235
- if (emitter) {
236
- setGlobalEmitter(emitter);
237
- }
238
- // effectiveMaxTurns resolved after DB config fetch below
239
- let effectiveMaxTurns = opts.maxTurns || CLI_MAX_TURNS_CAP;
240
- // Load hooks from project and user config
241
- const hooksCwd = opts.cwd || process.cwd();
242
- const hooks = loadHooks(hooksCwd);
243
- // Fire SessionStart hook (non-blocking)
244
- if (hooks.length > 0) {
245
- runSessionHook(hooks, "SessionStart", { session_id: `turn-${Date.now()}` }).catch(() => { });
246
- }
247
- // Shell summarization config (default: true)
248
- const shellSummarization = opts.shellSummarization !== false;
249
- const { tools, serverToolCount } = await getTools(opts.allowedTools, opts.disallowedTools);
250
- const systemPrompt = await buildSystemPrompt(serverToolCount > 0, opts.effort);
251
- // Build user content text-only string or content blocks array with images
252
- let userContent;
253
- if (opts.images && opts.images.length > 0) {
254
- const blocks = [];
255
- for (const img of opts.images) {
256
- blocks.push({
257
- type: "image",
258
- source: {
259
- type: "base64",
260
- media_type: img.mediaType,
261
- data: img.base64,
262
- },
263
- });
274
+ // Session mode: delegate to server-side SessionManager when available
275
+ if (await shouldUseSessionMode()) {
276
+ return runSessionAgentLoop(opts);
277
+ }
278
+ const {
279
+ message,
280
+ conversationHistory,
281
+ callbacks,
282
+ abortSignal,
283
+ emitter
284
+ } = opts;
285
+ if (opts.model) setModel(opts.model);
286
+
287
+ // Set global emitter for subagents to use
288
+ if (emitter) {
289
+ setGlobalEmitter(emitter);
290
+ }
291
+
292
+ // effectiveMaxTurns resolved after DB config fetch below
293
+ // 0 or unset = no limit (Claude Code parity — agent self-regulates via end_turn)
294
+ let effectiveMaxTurns = opts.maxTurns || CLI_NO_LIMIT;
295
+
296
+ // Load hooks from project and user config
297
+ const hooksCwd = opts.cwd || process.cwd();
298
+ const hooks = loadHooks(hooksCwd);
299
+
300
+ // Fire SessionStart hook (non-blocking)
301
+ if (hooks.length > 0) {
302
+ runSessionHook(hooks, "SessionStart", {
303
+ session_id: `turn-${Date.now()}`
304
+ }).catch(() => {});
305
+ }
306
+
307
+ // Shell summarization config (default: true)
308
+ const shellSummarization = opts.shellSummarization !== false;
309
+ const {
310
+ tools,
311
+ serverToolCount
312
+ } = await getTools(opts.allowedTools, opts.disallowedTools);
313
+ const systemPrompt = await buildSystemPrompt(serverToolCount > 0, opts.effort);
314
+
315
+ // Build user content — text-only string or content blocks array with images
316
+ let userContent;
317
+ if (opts.images && opts.images.length > 0) {
318
+ const blocks = [];
319
+ for (const img of opts.images) {
320
+ blocks.push({
321
+ type: "image",
322
+ source: {
323
+ type: "base64",
324
+ media_type: img.mediaType,
325
+ data: img.base64
264
326
  }
265
- blocks.push({ type: "text", text: message || "(see attached images)" });
266
- userContent = blocks;
327
+ });
267
328
  }
268
- else {
269
- userContent = message;
329
+ blocks.push({
330
+ type: "text",
331
+ text: message || "(see attached images)"
332
+ });
333
+ userContent = blocks;
334
+ } else {
335
+ userContent = message;
336
+ }
337
+ const messages = [...conversationHistory, {
338
+ role: "user",
339
+ content: userContent
340
+ }];
341
+ let totalIn = 0;
342
+ let totalOut = 0;
343
+ let totalCacheCreation = 0;
344
+ let totalCacheRead = 0;
345
+ let totalThinking = 0;
346
+ let allAssistantText = [];
347
+ let prevIterationInputTokens = 0; // Tracks actual context size from last API call
348
+
349
+ // Telemetry: one turn per user message (not per API call)
350
+ const sessionStart = Date.now();
351
+ const {
352
+ storeId
353
+ } = resolveConfig();
354
+ const turnNum = nextTurn(); // ONCE per user message
355
+ const turnCtx = createTurnContext({
356
+ model: getModel(),
357
+ turnNumber: turnNum
358
+ });
359
+ addBreadcrumb("agent", `Turn ${turnNum}: ${message.slice(0, 100)}`, "info");
360
+
361
+ // Set server tool context so tool calls carry trace/user identity to Fly.io server
362
+ setServerToolContext({
363
+ traceId: turnCtx.traceId,
364
+ conversationId: turnCtx.conversationId,
365
+ userId: turnCtx.userId,
366
+ userEmail: turnCtx.userEmail,
367
+ source: "whale-code"
368
+ });
369
+ logSpan({
370
+ action: "chat.user_message",
371
+ durationMs: 0,
372
+ context: turnCtx,
373
+ storeId: storeId || undefined,
374
+ details: {
375
+ message: message,
376
+ conversation_history_length: conversationHistory.length
270
377
  }
271
- const messages = [
272
- ...conversationHistory,
273
- { role: "user", content: userContent },
274
- ];
275
- // Session-level loop detector: persists failed strategies across turns.
276
- // Created once per conversation, reset only when user starts a new conversation.
277
- if (!sessionLoopDetector || conversationHistory.length === 0) {
278
- sessionLoopDetector = new LoopDetector();
378
+ });
379
+ let sessionCostUsd = 0;
380
+ let compactionCount = 0;
381
+ let consecutiveCompactions = 0; // Circuit breaker: consecutive compactions without progress
382
+ let maxTokensContinuations = 0; // Cap continuation loops to prevent infinite looping
383
+ const costWarningsEmitted = new Set();
384
+ const activeModel = getModel();
385
+
386
+ // Fetch agent config from DB — single source of truth, nothing hardcoded.
387
+ // Falls back to AGENT_DEFAULTS only if DB is unreachable (never blocks).
388
+ const dbAgent = await loadCLIAgentConfig();
389
+ const resolved = dbAgent ? resolveAgentLoopConfig(dbAgent, "sse") : null;
390
+
391
+ // Session-level loop detector: persists failed strategies across turns.
392
+ // Created once per conversation, reset only when user starts a new conversation.
393
+ // Must be created AFTER config resolution so DB thresholds apply.
394
+ if (!sessionLoopDetector || conversationHistory.length === 0) {
395
+ sessionLoopDetector = resolved ? LoopDetector.fromResolved(resolved) : new LoopDetector();
396
+ }
397
+ const loopDetector = sessionLoopDetector;
398
+ loopDetector.resetTurn();
399
+ const effectiveBudget = opts.maxBudgetUsd ?? resolved?.contextOverrides.session_cost_budget_usd ?? DEFAULT_SESSION_COST_BUDGET_USD;
400
+
401
+ // Compaction settings from DB via getContextManagement — pass DB overrides so
402
+ // the trigger/budget values match what the Anthropic API actually uses.
403
+ const ctxOverrides = resolved?.contextOverrides;
404
+ const ctxMgmt = getContextManagement(activeModel, ctxOverrides);
405
+ const compactEdit = ctxMgmt.config.edits.find(e => e.type === "compact_20260112");
406
+ const effectiveCompactionTrigger = compactEdit?.trigger?.value ?? AGENT_DEFAULTS.compactionTriggerTokens;
407
+ const effectiveCompactionBudget = ctxOverrides?.compaction_total_budget ?? COMPACTION_TOTAL_BUDGET;
408
+
409
+ // Override maxTurns from DB config (if not explicitly set by caller)
410
+ // 0 = no limit (Claude Code parity)
411
+ if (!opts.maxTurns && resolved && resolved.maxTurns > 0) {
412
+ effectiveMaxTurns = resolved.maxTurns;
413
+ }
414
+
415
+ // Max continuations: resolved from DB config → AGENT_DEFAULTS fallback
416
+ const maxContinuations = resolved?.maxContinuations ?? AGENT_DEFAULTS.maxContinuations;
417
+
418
+ // Tool executor — routes to interactive, local, server, or MCP tools.
419
+ // Wraps execution with before/after hooks when hooks are loaded.
420
+ const INTERACTIVE_TOOL_NAMES = new Set(INTERACTIVE_TOOL_DEFINITIONS.map(t => t.name));
421
+ const toolExecutor = async (name, input) => {
422
+ if (!name) {
423
+ return {
424
+ success: false,
425
+ output: "Tool call missing name — skipping."
426
+ };
279
427
  }
280
- const loopDetector = sessionLoopDetector;
281
- loopDetector.resetTurn();
282
- let totalIn = 0;
283
- let totalOut = 0;
284
- let totalCacheCreation = 0;
285
- let totalCacheRead = 0;
286
- let totalThinking = 0;
287
- let allAssistantText = [];
288
- let prevIterationInputTokens = 0; // Tracks actual context size from last API call
289
- // Telemetry: one turn per user message (not per API call)
290
- const sessionStart = Date.now();
291
- const { storeId } = resolveConfig();
292
- const turnNum = nextTurn(); // ONCE per user message
293
- const turnCtx = createTurnContext({ model: getModel(), turnNumber: turnNum });
294
- addBreadcrumb("agent", `Turn ${turnNum}: ${message.slice(0, 100)}`, "info");
295
- // Set server tool context so tool calls carry trace/user identity to Fly.io server
296
- setServerToolContext({
297
- traceId: turnCtx.traceId,
298
- conversationId: turnCtx.conversationId,
299
- userId: turnCtx.userId,
300
- userEmail: turnCtx.userEmail,
301
- source: "whale-code",
302
- });
303
- logSpan({
304
- action: "chat.user_message",
305
- durationMs: 0,
306
- context: turnCtx,
307
- storeId: storeId || undefined,
308
- details: {
309
- message: message,
310
- conversation_history_length: conversationHistory.length,
311
- },
312
- });
313
- let sessionCostUsd = 0;
314
- let compactionCount = 0;
315
- const costWarningsEmitted = new Set();
316
- const activeModel = getModel();
317
- // Fetch agent config from DB — single source of truth, nothing hardcoded.
318
- // Falls back to AGENT_DEFAULTS only if DB is unreachable (never blocks).
319
- const dbAgent = await loadCLIAgentConfig();
320
- const resolved = dbAgent
321
- ? resolveAgentLoopConfig(dbAgent, "sse")
322
- : null;
323
- const effectiveBudget = opts.maxBudgetUsd
324
- ?? resolved?.contextOverrides.session_cost_budget_usd
325
- ?? DEFAULT_SESSION_COST_BUDGET_USD;
326
- // Compaction settings from DB via getContextManagement — pass DB overrides so
327
- // the trigger/budget values match what the Anthropic API actually uses.
328
- const ctxOverrides = resolved?.contextOverrides;
329
- const ctxMgmt = getContextManagement(activeModel, ctxOverrides);
330
- const compactEdit = ctxMgmt.config.edits.find((e) => e.type === "compact_20260112");
331
- const effectiveCompactionTrigger = compactEdit?.trigger?.value ?? AGENT_DEFAULTS.compactionTriggerTokens;
332
- const effectiveCompactionBudget = ctxOverrides?.compaction_total_budget ?? COMPACTION_TOTAL_BUDGET;
333
- // Override maxTurns from DB config (if not explicitly set by caller)
334
- if (!opts.maxTurns && resolved) {
335
- effectiveMaxTurns = resolved.maxTurns;
428
+
429
+ // Permission mode enforcement
430
+ if (!isToolAllowedByPermission(name)) {
431
+ return {
432
+ success: false,
433
+ output: `Tool "${name}" blocked by ${getPermissionMode()} mode. Switch modes with /mode.`
434
+ };
336
435
  }
337
- // Tool executor — routes to interactive, local, server, or MCP tools.
338
- // Wraps execution with before/after hooks when hooks are loaded.
339
- const INTERACTIVE_TOOL_NAMES = new Set(INTERACTIVE_TOOL_DEFINITIONS.map(t => t.name));
340
- const toolExecutor = async (name, input) => {
341
- if (!name) {
342
- return { success: false, output: "Tool call missing name — skipping." };
436
+
437
+ // BeforeTool hook may block or modify input
438
+ let effectiveInput = input;
439
+ if (hooks.length > 0) {
440
+ const hookResult = await runBeforeToolHook(hooks, name, input);
441
+ if (!hookResult.allow) {
442
+ return {
443
+ success: false,
444
+ output: hookResult.message || "Blocked by hook"
445
+ };
446
+ }
447
+ if (hookResult.modifiedInput) {
448
+ effectiveInput = hookResult.modifiedInput;
449
+ }
450
+ }
451
+ let result;
452
+ if (INTERACTIVE_TOOL_NAMES.has(name)) {
453
+ result = await executeInteractiveTool(name, effectiveInput);
454
+
455
+ // For exit_plan_mode: wait for UI approval, then map decision to result
456
+ if (name === "exit_plan_mode" && result.success) {
457
+ const decision = await waitForPlanApproval(abortSignal);
458
+ switch (decision.action) {
459
+ case "execute":
460
+ result = {
461
+ success: true,
462
+ output: `__PLAN_APPROVED_CLEAN__\n${result.output}`
463
+ };
464
+ break;
465
+ case "edit":
466
+ result = {
467
+ success: true,
468
+ output: "Plan returned for revision. Make changes and use ExitPlanMode again when ready."
469
+ };
470
+ break;
471
+ case "feedback":
472
+ result = {
473
+ success: true,
474
+ output: `User feedback on plan:\n\n${decision.feedback || "(no feedback provided)"}\n\nRevise the plan based on this feedback, then use ExitPlanMode again.`
475
+ };
476
+ break;
477
+ case "cancel":
478
+ result = {
479
+ success: true,
480
+ output: "Plan cancelled by user. Do not proceed with implementation."
481
+ };
482
+ break;
343
483
  }
344
- // Permission mode enforcement
345
- if (!isToolAllowedByPermission(name)) {
346
- return { success: false, output: `Tool "${name}" blocked by ${getPermissionMode()} mode. Switch modes with /mode.` };
484
+ }
485
+ } else if (isLocalTool(name)) {
486
+ result = await executeLocalTool(name, effectiveInput, abortSignal);
487
+ } else if (isServerTool(name)) {
488
+ result = await executeServerTool(name, effectiveInput, emitter);
489
+ } else if (mcpClientManager.isMcpTool(name)) {
490
+ result = await mcpClientManager.callTool(name, effectiveInput);
491
+ } else {
492
+ result = {
493
+ success: false,
494
+ output: `Unknown tool: ${name}`
495
+ };
496
+ }
497
+
498
+ // AfterTool hook — may modify output
499
+ if (hooks.length > 0) {
500
+ const afterResult = await runAfterToolHook(hooks, name, result.output, result.success);
501
+ if (afterResult.modifiedOutput !== undefined) {
502
+ result = {
503
+ ...result,
504
+ output: afterResult.modifiedOutput
505
+ };
506
+ }
507
+ }
508
+ return result;
509
+ };
510
+ try {
511
+ for (let iteration = 0; iteration < effectiveMaxTurns; iteration++) {
512
+ if (abortSignal?.aborted) {
513
+ logSpan({
514
+ action: "chat.cancelled",
515
+ durationMs: Date.now() - sessionStart,
516
+ context: turnCtx,
517
+ storeId: storeId || undefined,
518
+ details: {
519
+ iteration,
520
+ reason: "user_abort"
521
+ }
522
+ });
523
+ callbacks.onError("Cancelled", messages);
524
+ return;
525
+ }
526
+
527
+ // Budget enforcement — always enforced (defaults to DEFAULT_SESSION_COST_BUDGET_USD)
528
+ if (sessionCostUsd >= effectiveBudget) {
529
+ logSpan({
530
+ action: "chat.budget_exceeded",
531
+ durationMs: Date.now() - sessionStart,
532
+ context: turnCtx,
533
+ storeId: storeId || undefined,
534
+ severity: "warn",
535
+ details: {
536
+ session_cost_usd: sessionCostUsd,
537
+ max_budget_usd: effectiveBudget,
538
+ iteration
539
+ }
540
+ });
541
+ callbacks.onError(`Budget exceeded: $${sessionCostUsd.toFixed(4)} >= $${effectiveBudget}`, messages);
542
+ return;
543
+ }
544
+ const apiStart = Date.now();
545
+ const apiSpanId = generateSpanId();
546
+ const apiRowId = crypto.randomUUID(); // UUID for this span's row — children reference via parent_id
547
+ const costContext = `Session cost: $${sessionCostUsd.toFixed(2)} | Budget remaining: $${(effectiveBudget - sessionCostUsd).toFixed(2)}`;
548
+
549
+ // Build API request config
550
+ const currentModel = getModel();
551
+ const apiConfig = buildAPIRequest({
552
+ model: currentModel,
553
+ contextProfile: "main",
554
+ thinkingEnabled: opts.thinking,
555
+ contextOverrides: ctxOverrides
556
+ });
557
+
558
+ // Prepare with prompt caching
559
+ let {
560
+ tools: cachedTools,
561
+ messages: cachedMessages
562
+ } = prepareWithCaching(tools, messages);
563
+ const system = buildSystemBlocks(systemPrompt, costContext);
564
+
565
+ // Client-side context trimming for non-Anthropic providers.
566
+ // Uses prevIterationInputTokens (actual context size from last API call) — NOT
567
+ // cumulative sessionInputTokens, which grows quadratically and would trigger too early.
568
+ const provider = getProvider(currentModel);
569
+ if (provider === "gemini" || provider === "openai") {
570
+ const preTrimMessages = cachedMessages;
571
+ if (provider === "gemini") {
572
+ // Emergency fallback only — compaction fires at 700K first; trim at 950K catches failures
573
+ cachedMessages = trimGeminiContext(cachedMessages, prevIterationInputTokens);
574
+ } else {
575
+ // Emergency fallback only — compaction fires at 120K first; trim at 190K catches failures
576
+ // GPT-4o: 128K context → 96K threshold (no compaction headroom)
577
+ const threshold = currentModel === "gpt-4o" ? 96_000 : 190_000;
578
+ cachedMessages = trimOpenAIContext(cachedMessages, prevIterationInputTokens, threshold);
347
579
  }
348
- // BeforeTool hook may block or modify input
349
- let effectiveInput = input;
350
- if (hooks.length > 0) {
351
- const hookResult = await runBeforeToolHook(hooks, name, input);
352
- if (!hookResult.allow) {
353
- return { success: false, output: hookResult.message || "Blocked by hook" };
354
- }
355
- if (hookResult.modifiedInput) {
356
- effectiveInput = hookResult.modifiedInput;
357
- }
580
+ // Notify UI when trimming actually occurred (trim returns same ref if no-op)
581
+ if (cachedMessages !== preTrimMessages) {
582
+ // Count tool results before/after to report meaningful numbers
583
+ const countToolResults = msgs => msgs.reduce((sum, m) => sum + (Array.isArray(m.content) ? m.content.filter(b => b.type === "tool_result" && b.content !== "[trimmed]").length : 0), 0);
584
+ const activeBefore = countToolResults(preTrimMessages);
585
+ const activeAfter = countToolResults(cachedMessages);
586
+ const estimatedSaved = Math.round(prevIterationInputTokens * ((activeBefore - activeAfter) / Math.max(activeBefore, 1)));
587
+ callbacks.onAutoCompact?.(activeBefore, activeAfter, estimatedSaved);
588
+ emitter?.emitCompact(activeBefore, activeAfter, estimatedSaved);
358
589
  }
359
- let result;
360
- if (INTERACTIVE_TOOL_NAMES.has(name)) {
361
- result = await executeInteractiveTool(name, effectiveInput);
362
- // For exit_plan_mode: wait for UI approval, then map decision to result
363
- if (name === "exit_plan_mode" && result.success) {
364
- const decision = await waitForPlanApproval();
365
- switch (decision.action) {
366
- case "execute":
367
- result = { success: true, output: `__PLAN_APPROVED_CLEAN__\n${result.output}` };
368
- break;
369
- case "edit":
370
- result = { success: true, output: "Plan returned for revision. Make changes and use ExitPlanMode again when ready." };
371
- break;
372
- case "feedback":
373
- result = { success: true, output: `User feedback on plan:\n\n${decision.feedback || "(no feedback provided)"}\n\nRevise the plan based on this feedback, then use ExitPlanMode again.` };
374
- break;
375
- case "cancel":
376
- result = { success: true, output: "Plan cancelled by user. Do not proceed with implementation." };
377
- break;
378
- }
590
+ }
591
+
592
+ // Get auth token
593
+ const token = await getValidToken();
594
+ if (!token) {
595
+ throw new Error("Not logged in. Run: whale login");
596
+ }
597
+
598
+ // Call server proxy with built-in retry
599
+ const originalModel = currentModel;
600
+ const stream = await callServerProxy({
601
+ proxyUrl: getProxyUrl(),
602
+ token,
603
+ model: currentModel,
604
+ system,
605
+ messages: cachedMessages,
606
+ tools: cachedTools,
607
+ apiConfig,
608
+ signal: abortSignal,
609
+ fallbackModel: opts.fallbackModel,
610
+ storeId: storeId || undefined,
611
+ onFallback: (from, to) => {
612
+ setModel(to);
613
+ logSpan({
614
+ action: "claude_api_fallback",
615
+ durationMs: 0,
616
+ context: {
617
+ ...turnCtx,
618
+ spanId: apiSpanId
619
+ },
620
+ storeId: storeId || undefined,
621
+ details: {
622
+ from_model: from,
623
+ to_model: to
379
624
  }
625
+ });
626
+ },
627
+ onRetry: (attempt, max, err) => {
628
+ const msg = `\n\x1b[33m\u21BB Retrying (${attempt}/${max})... ${err.slice(0, 80)}\x1b[0m\n`;
629
+ if (emitter) {
630
+ emitter.emitText(msg);
631
+ } else {
632
+ callbacks.onText(msg);
633
+ }
634
+ },
635
+ onTokenRefresh: async () => {
636
+ const result = await refreshSession();
637
+ return result.success ? result.config.access_token : null;
380
638
  }
381
- else if (isLocalTool(name)) {
382
- result = await executeLocalTool(name, effectiveInput);
639
+ });
640
+
641
+ // Process stream events with UI callbacks
642
+ let thinkingChunks = 0;
643
+ const result = await processStreamWithCallbacks(parseSSEStream(stream, abortSignal), {
644
+ onText: text => {
645
+ if (emitter) {
646
+ emitter.emitText(text);
647
+ } else {
648
+ callbacks.onText(text);
649
+ }
650
+ },
651
+ onThinking: () => {
652
+ thinkingChunks++;
653
+ emitter?.emitThinking(thinkingChunks);
654
+ },
655
+ onToolStart: (name, input) => {
656
+ // NOTE: Do NOT call callbacks.onToolStart here — dispatchTools.onStart
657
+ // fires it once per tool at execution time. Calling it here too would
658
+ // send duplicate tool_start events (stale spinners in WhaleChat).
659
+ if (input) {
660
+ // Tool block complete — emit structured start for CLI TUI only
661
+ emitter?.emitToolStart("", name);
662
+ }
383
663
  }
384
- else if (isServerTool(name)) {
385
- result = await executeServerTool(name, effectiveInput, emitter);
664
+ }, abortSignal);
665
+
666
+ // Flush buffered text
667
+ emitter?.flushText();
668
+
669
+ // Restore original model after transient fallback
670
+ if (getModel() !== originalModel && opts.fallbackModel) {
671
+ setModelById(originalModel);
672
+ }
673
+
674
+ // Update session token tracking
675
+ sessionInputTokens += result.usage.inputTokens;
676
+ sessionOutputTokens += result.usage.outputTokens;
677
+ prevIterationInputTokens = result.usage.inputTokens; // Actual context size for next trim check
678
+
679
+ // Emit usage with model + cost context for all providers
680
+ if (emitter && (result.usage.inputTokens > 0 || result.usage.outputTokens > 0)) {
681
+ const iterCost = estimateCostUsd(result.usage.inputTokens, result.usage.outputTokens, currentModel, result.thinkingTokens, result.usage.cacheReadTokens, result.usage.cacheCreationTokens);
682
+ emitter.emitUsage(result.usage.inputTokens, result.usage.outputTokens, currentModel, iterCost, result.usage.cacheReadTokens, result.usage.cacheCreationTokens);
683
+ }
684
+ totalIn += result.usage.inputTokens;
685
+ totalOut += result.usage.outputTokens;
686
+ totalCacheCreation += result.usage.cacheCreationTokens;
687
+ totalCacheRead += result.usage.cacheReadTokens;
688
+ totalThinking += result.thinkingTokens;
689
+ sessionCostUsd += estimateCostUsd(result.usage.inputTokens, result.usage.outputTokens, currentModel, result.thinkingTokens, result.usage.cacheReadTokens, result.usage.cacheCreationTokens);
690
+
691
+ // Graduated cost warnings
692
+ emitCostWarningIfNeeded(sessionCostUsd, effectiveBudget, costWarningsEmitted, text => {
693
+ if (emitter) {
694
+ emitter.emitText(text);
695
+ } else {
696
+ callbacks.onText(text);
386
697
  }
387
- else if (mcpClientManager.isMcpTool(name)) {
388
- result = await mcpClientManager.callTool(name, effectiveInput);
698
+ });
699
+
700
+ // Server-side context management notification
701
+ if (result.contextManagementApplied) {
702
+ callbacks.onAutoCompact?.(messages.length, messages.length, 0);
703
+ emitter?.emitCompact(messages.length, messages.length, 0);
704
+ logSpan({
705
+ action: "chat.api_compaction",
706
+ durationMs: Date.now() - apiStart,
707
+ context: turnCtx,
708
+ storeId: storeId || undefined,
709
+ details: {
710
+ type: "server_side",
711
+ has_compaction_content: result.compactionContent !== null,
712
+ iteration
713
+ }
714
+ });
715
+ }
716
+ if (result.text) allAssistantText.push(result.text);
717
+
718
+ // Telemetry: API call span
719
+ const iterCostUsd = estimateCostUsd(result.usage.inputTokens, result.usage.outputTokens, currentModel, result.thinkingTokens, result.usage.cacheReadTokens, result.usage.cacheCreationTokens);
720
+ logSpan({
721
+ action: "claude_api_request",
722
+ durationMs: Date.now() - apiStart,
723
+ context: {
724
+ ...turnCtx,
725
+ spanId: apiSpanId,
726
+ rowId: apiRowId,
727
+ inputTokens: result.usage.inputTokens,
728
+ outputTokens: result.usage.outputTokens,
729
+ totalCost: iterCostUsd,
730
+ model: currentModel
731
+ },
732
+ storeId: storeId || undefined,
733
+ details: {
734
+ "gen_ai.request.model": currentModel,
735
+ "gen_ai.usage.input_tokens": result.usage.inputTokens,
736
+ "gen_ai.usage.output_tokens": result.usage.outputTokens,
737
+ "gen_ai.usage.cache_creation_tokens": result.usage.cacheCreationTokens,
738
+ "gen_ai.usage.cache_read_tokens": result.usage.cacheReadTokens,
739
+ "gen_ai.usage.cost": iterCostUsd,
740
+ stop_reason: result.stopReason === "compaction" ? "compaction" : result.toolUseBlocks.length > 0 ? "tool_use" : "end_turn",
741
+ iteration,
742
+ tool_count: result.toolUseBlocks.length,
743
+ tool_names: result.toolUseBlocks.map(t => t.name)
389
744
  }
390
- else {
391
- result = { success: false, output: `Unknown tool: ${name}` };
745
+ });
746
+
747
+ // Compaction handling — API paused after generating summary.
748
+ // Per Anthropic docs: the compaction block replaces all prior context.
749
+ // Do NOT preserve old messages — they can exceed the trigger threshold
750
+ // and cause an infinite compaction loop. The summary captures all context.
751
+ if (result.stopReason === "compaction" && result.compactionContent) {
752
+ compactionCount++;
753
+ consecutiveCompactions++;
754
+ logSpan({
755
+ action: "chat.compaction_pause",
756
+ durationMs: Date.now() - apiStart,
757
+ context: turnCtx,
758
+ storeId: storeId || undefined,
759
+ details: {
760
+ compaction_count: compactionCount,
761
+ consecutive: consecutiveCompactions,
762
+ messages_before: messages.length
763
+ }
764
+ });
765
+
766
+ // Circuit breaker: if compaction fires repeatedly without progress,
767
+ // the summary + system prompt alone may exceed the trigger. Force wrap-up.
768
+ const MAX_CONSECUTIVE_COMPACTIONS = 3;
769
+ const shouldWrapUp = consecutiveCompactions > MAX_CONSECUTIVE_COMPACTIONS || compactionCount * effectiveCompactionTrigger >= effectiveCompactionBudget;
770
+ const compactedMessages = [{
771
+ role: "assistant",
772
+ content: [{
773
+ type: "compaction",
774
+ content: result.compactionContent
775
+ }]
776
+ }, {
777
+ role: "user",
778
+ content: [{
779
+ type: "text",
780
+ text: shouldWrapUp ? "You have reached the context budget. Please wrap up your current work and provide a final summary of what was accomplished and what remains." : "Continue with your task."
781
+ }]
782
+ }];
783
+ messages.length = 0;
784
+ messages.push(...compactedMessages);
785
+ if (shouldWrapUp) {
786
+ const budgetMsg = consecutiveCompactions > MAX_CONSECUTIVE_COMPACTIONS ? "\n[Compaction loop detected — wrapping up.]" : "\n[Context budget reached — wrapping up.]";
787
+ if (emitter) {
788
+ emitter.emitText(budgetMsg);
789
+ } else {
790
+ callbacks.onText(budgetMsg);
791
+ }
392
792
  }
393
- // AfterTool hook may modify output
394
- if (hooks.length > 0) {
395
- const afterResult = await runAfterToolHook(hooks, name, result.output, result.success);
396
- if (afterResult.modifiedOutput !== undefined) {
397
- result = { ...result, output: afterResult.modifiedOutput };
398
- }
793
+ iteration--; // Don't count compaction as an iteration
794
+ continue;
795
+ }
796
+
797
+ // No tool calls check if we should continue or stop
798
+ if (result.toolUseBlocks.length === 0) {
799
+ // If model hit max_tokens, it was truncated mid-response — continue so it can finish.
800
+ // Cap at MAX_CONTINUATIONS to prevent infinite loops on very large outputs (e.g. HTML reports).
801
+ if (result.stopReason === "max_tokens" && maxTokensContinuations < maxContinuations) {
802
+ maxTokensContinuations++;
803
+ const truncatedText = result.text || "";
804
+ const assistantContent = buildAssistantContent({
805
+ text: truncatedText,
806
+ toolUseBlocks: [],
807
+ thinkingBlocks: result.thinkingBlocks,
808
+ compactionContent: result.compactionContent
809
+ });
810
+ messages.push({
811
+ role: "assistant",
812
+ content: assistantContent
813
+ });
814
+
815
+ // Escalating continuation prompts — if the model keeps hitting max_tokens,
816
+ // it's probably trying to write a large file. Guide it toward smaller chunks.
817
+ const continuationText = maxTokensContinuations === 1 ? "[Your response was truncated due to the output token limit. If you were writing a large file, split it into multiple smaller write_file calls (~200 lines each) or use run_command with a heredoc. Continue concisely.]" : `[Your response was truncated again (attempt ${maxTokensContinuations}/${maxContinuations}). You MUST reduce output size. For large files: use multiple write_file calls of ~100-200 lines each, or write via run_command. Do NOT attempt to write the entire file in one call.]`;
818
+ messages.push({
819
+ role: "user",
820
+ content: [{
821
+ type: "text",
822
+ text: continuationText
823
+ }]
824
+ });
825
+ continue;
399
826
  }
400
- return result;
401
- };
402
- try {
403
- for (let iteration = 0; iteration < effectiveMaxTurns; iteration++) {
404
- if (abortSignal?.aborted) {
405
- logSpan({ action: "chat.cancelled", durationMs: Date.now() - sessionStart, context: turnCtx, storeId: storeId || undefined, details: { iteration, reason: "user_abort" } });
406
- callbacks.onError("Cancelled", messages);
407
- return;
408
- }
409
- // Budget enforcement — always enforced (defaults to DEFAULT_SESSION_COST_BUDGET_USD)
410
- if (sessionCostUsd >= effectiveBudget) {
411
- logSpan({ action: "chat.budget_exceeded", durationMs: Date.now() - sessionStart, context: turnCtx, storeId: storeId || undefined, severity: "warn", details: { session_cost_usd: sessionCostUsd, max_budget_usd: effectiveBudget, iteration } });
412
- callbacks.onError(`Budget exceeded: $${sessionCostUsd.toFixed(4)} >= $${effectiveBudget}`, messages);
413
- return;
414
- }
415
- const apiStart = Date.now();
416
- const apiSpanId = generateSpanId();
417
- const apiRowId = crypto.randomUUID(); // UUID for this span's row — children reference via parent_id
418
- const costContext = `Session cost: $${sessionCostUsd.toFixed(2)} | Budget remaining: $${(effectiveBudget - sessionCostUsd).toFixed(2)}`;
419
- // Build API request config
420
- const currentModel = getModel();
421
- const apiConfig = buildAPIRequest({
422
- model: currentModel,
423
- contextProfile: "main",
424
- thinkingEnabled: opts.thinking,
425
- contextOverrides: ctxOverrides,
426
- });
427
- // Prepare with prompt caching
428
- let { tools: cachedTools, messages: cachedMessages } = prepareWithCaching(tools, messages);
429
- const system = buildSystemBlocks(systemPrompt, costContext);
430
- // Client-side context trimming for non-Anthropic providers.
431
- // Uses prevIterationInputTokens (actual context size from last API call) — NOT
432
- // cumulative sessionInputTokens, which grows quadratically and would trigger too early.
433
- const provider = getProvider(currentModel);
434
- if (provider === "gemini" || provider === "openai") {
435
- const preTrimMessages = cachedMessages;
436
- if (provider === "gemini") {
437
- // Emergency fallback only — compaction fires at 700K first; trim at 950K catches failures
438
- cachedMessages = trimGeminiContext(cachedMessages, prevIterationInputTokens);
439
- }
440
- else {
441
- // Emergency fallback only — compaction fires at 120K first; trim at 190K catches failures
442
- // GPT-4o: 128K context → 96K threshold (no compaction headroom)
443
- const threshold = currentModel === "gpt-4o" ? 96_000 : 190_000;
444
- cachedMessages = trimOpenAIContext(cachedMessages, prevIterationInputTokens, threshold);
445
- }
446
- // Notify UI when trimming actually occurred (trim returns same ref if no-op)
447
- if (cachedMessages !== preTrimMessages) {
448
- // Count tool results before/after to report meaningful numbers
449
- const countToolResults = (msgs) => msgs.reduce((sum, m) => sum + (Array.isArray(m.content)
450
- ? m.content.filter(b => b.type === "tool_result" && b.content !== "[trimmed]").length
451
- : 0), 0);
452
- const activeBefore = countToolResults(preTrimMessages);
453
- const activeAfter = countToolResults(cachedMessages);
454
- const estimatedSaved = Math.round(prevIterationInputTokens * ((activeBefore - activeAfter) / Math.max(activeBefore, 1)));
455
- callbacks.onAutoCompact?.(activeBefore, activeAfter, estimatedSaved);
456
- emitter?.emitCompact(activeBefore, activeAfter, estimatedSaved);
457
- }
458
- }
459
- // Get auth token
460
- const token = await getValidToken();
461
- if (!token) {
462
- throw new Error("Not logged in. Run: whale login");
463
- }
464
- // Call server proxy with built-in retry
465
- const originalModel = currentModel;
466
- const stream = await callServerProxy({
467
- proxyUrl: getProxyUrl(),
468
- token,
469
- model: currentModel,
470
- system,
471
- messages: cachedMessages,
472
- tools: cachedTools,
473
- apiConfig,
474
- signal: abortSignal,
475
- fallbackModel: opts.fallbackModel,
476
- storeId: storeId || undefined,
477
- onFallback: (from, to) => {
478
- setModel(to);
479
- logSpan({ action: "claude_api_fallback", durationMs: 0, context: { ...turnCtx, spanId: apiSpanId }, storeId: storeId || undefined, details: { from_model: from, to_model: to } });
480
- },
481
- onRetry: (attempt, max, err) => {
482
- const msg = `\n\x1b[33m\u21BB Retrying (${attempt}/${max})... ${err.slice(0, 80)}\x1b[0m\n`;
483
- if (emitter) {
484
- emitter.emitText(msg);
485
- }
486
- else {
487
- callbacks.onText(msg);
488
- }
489
- },
490
- onTokenRefresh: async () => {
491
- const result = await refreshSession();
492
- return result.success ? result.config.access_token : null;
493
- },
494
- });
495
- // Process stream events with UI callbacks
496
- let thinkingChunks = 0;
497
- const result = await processStreamWithCallbacks(parseSSEStream(stream, abortSignal), {
498
- onText: (text) => {
499
- if (emitter) {
500
- emitter.emitText(text);
501
- }
502
- else {
503
- callbacks.onText(text);
504
- }
505
- },
506
- onThinking: () => {
507
- thinkingChunks++;
508
- emitter?.emitThinking(thinkingChunks);
509
- },
510
- onToolStart: (name, input) => {
511
- // NOTE: Do NOT call callbacks.onToolStart here — dispatchTools.onStart
512
- // fires it once per tool at execution time. Calling it here too would
513
- // send duplicate tool_start events (stale spinners in WhaleChat).
514
- if (input) {
515
- // Tool block complete — emit structured start for CLI TUI only
516
- emitter?.emitToolStart("", name);
517
- }
518
- },
519
- }, abortSignal);
520
- // Flush buffered text
521
- emitter?.flushText();
522
- // Restore original model after transient fallback
523
- if (getModel() !== originalModel && opts.fallbackModel) {
524
- setModelById(originalModel);
525
- }
526
- // Update session token tracking
527
- sessionInputTokens += result.usage.inputTokens;
528
- sessionOutputTokens += result.usage.outputTokens;
529
- prevIterationInputTokens = result.usage.inputTokens; // Actual context size for next trim check
530
- // Emit usage with model + cost context for all providers
531
- if (emitter && (result.usage.inputTokens > 0 || result.usage.outputTokens > 0)) {
532
- const iterCost = estimateCostUsd(result.usage.inputTokens, result.usage.outputTokens, currentModel, result.thinkingTokens, result.usage.cacheReadTokens, result.usage.cacheCreationTokens);
533
- emitter.emitUsage(result.usage.inputTokens, result.usage.outputTokens, currentModel, iterCost, result.usage.cacheReadTokens, result.usage.cacheCreationTokens);
534
- }
535
- totalIn += result.usage.inputTokens;
536
- totalOut += result.usage.outputTokens;
537
- totalCacheCreation += result.usage.cacheCreationTokens;
538
- totalCacheRead += result.usage.cacheReadTokens;
539
- totalThinking += result.thinkingTokens;
540
- sessionCostUsd += estimateCostUsd(result.usage.inputTokens, result.usage.outputTokens, currentModel, result.thinkingTokens, result.usage.cacheReadTokens, result.usage.cacheCreationTokens);
541
- // Graduated cost warnings
542
- emitCostWarningIfNeeded(sessionCostUsd, effectiveBudget, costWarningsEmitted, (text) => { if (emitter) {
543
- emitter.emitText(text);
544
- }
545
- else {
546
- callbacks.onText(text);
547
- } });
548
- // Server-side context management notification
549
- if (result.contextManagementApplied) {
550
- callbacks.onAutoCompact?.(messages.length, messages.length, 0);
551
- emitter?.emitCompact(messages.length, messages.length, 0);
552
- logSpan({ action: "chat.api_compaction", durationMs: Date.now() - apiStart, context: turnCtx, storeId: storeId || undefined, details: { type: "server_side", has_compaction_content: result.compactionContent !== null, iteration } });
553
- }
554
- if (result.text)
555
- allAssistantText.push(result.text);
556
- // Telemetry: API call span
557
- const iterCostUsd = estimateCostUsd(result.usage.inputTokens, result.usage.outputTokens, currentModel, result.thinkingTokens, result.usage.cacheReadTokens, result.usage.cacheCreationTokens);
558
- logSpan({
559
- action: "claude_api_request",
560
- durationMs: Date.now() - apiStart,
561
- context: { ...turnCtx, spanId: apiSpanId, rowId: apiRowId, inputTokens: result.usage.inputTokens, outputTokens: result.usage.outputTokens, totalCost: iterCostUsd, model: currentModel },
562
- storeId: storeId || undefined,
563
- details: {
564
- "gen_ai.request.model": currentModel,
565
- "gen_ai.usage.input_tokens": result.usage.inputTokens,
566
- "gen_ai.usage.output_tokens": result.usage.outputTokens,
567
- "gen_ai.usage.cache_creation_tokens": result.usage.cacheCreationTokens,
568
- "gen_ai.usage.cache_read_tokens": result.usage.cacheReadTokens,
569
- "gen_ai.usage.cost": iterCostUsd,
570
- stop_reason: result.stopReason === "compaction" ? "compaction" : result.toolUseBlocks.length > 0 ? "tool_use" : "end_turn",
571
- iteration,
572
- tool_count: result.toolUseBlocks.length,
573
- tool_names: result.toolUseBlocks.map(t => t.name),
574
- },
575
- });
576
- // Compaction handling — API paused after generating summary.
577
- // Preserve last 2 messages for continuity, then resume.
578
- if (result.stopReason === "compaction" && result.compactionContent) {
579
- compactionCount++;
580
- logSpan({ action: "chat.compaction_pause", durationMs: Date.now() - apiStart, context: turnCtx, storeId: storeId || undefined, details: { compaction_count: compactionCount, messages_before: messages.length } });
581
- // Budget enforcement
582
- if (compactionCount * effectiveCompactionTrigger >= effectiveCompactionBudget) {
583
- const budgetMsg = "\n[Context budget reached — wrapping up.]";
584
- if (emitter) {
585
- emitter.emitText(budgetMsg);
586
- }
587
- else {
588
- callbacks.onText(budgetMsg);
589
- }
590
- const compactedMessages = [
591
- { role: "assistant", content: [{ type: "compaction", content: result.compactionContent }] },
592
- { role: "user", content: [{ type: "text", text: "You have reached the context budget. Please wrap up your current work and provide a final summary of what was accomplished and what remains." }] },
593
- ];
594
- messages.length = 0;
595
- messages.push(...compactedMessages);
596
- continue;
597
- }
598
- // Normal compaction: preserve last 2 messages for continuity
599
- const preserved = messages.slice(-2);
600
- const compactedMessages = [
601
- { role: "assistant", content: [{ type: "compaction", content: result.compactionContent }] },
602
- ...preserved,
603
- ];
604
- messages.length = 0;
605
- messages.push(...compactedMessages);
606
- iteration--; // Don't count compaction as an iteration
607
- continue;
608
- }
609
- // No tool calls — check if we should continue or stop
610
- if (result.toolUseBlocks.length === 0) {
611
- // If model hit max_tokens, it was truncated mid-response — continue so it can finish
612
- if (result.stopReason === "max_tokens") {
613
- const truncatedText = result.text || "";
614
- const assistantContent = buildAssistantContent({
615
- text: truncatedText,
616
- toolUseBlocks: [],
617
- thinkingBlocks: result.thinkingBlocks,
618
- compactionContent: result.compactionContent,
619
- });
620
- messages.push({ role: "assistant", content: assistantContent });
621
- messages.push({ role: "user", content: [{ type: "text", text: "[Your response was truncated due to length. Please continue where you left off.]" }] });
622
- continue;
623
- }
624
- break;
625
- }
626
- // Execute tools via shared dispatch
627
- const { results: toolResults, bailOut, bailMessage } = await dispatchTools(result.toolUseBlocks, toolExecutor, {
628
- loopDetector,
629
- maxConcurrent: 7,
630
- onStart: (name, input) => {
631
- callbacks.onToolStart(name, input);
632
- },
633
- onResult: (name, success, output, durationMs) => {
634
- callbacks.onToolResult(name, success, output, undefined, durationMs);
635
- logSpan({
636
- action: `tool.${name}`,
637
- durationMs,
638
- context: { ...turnCtx, spanId: generateSpanId(), parentSpanId: apiSpanId, parentId: apiRowId },
639
- storeId: storeId || undefined,
640
- error: success ? undefined : output,
641
- details: {
642
- tool_input: {},
643
- tool_result: truncateResult(output, 2000),
644
- error_type: success ? undefined : classifyToolError(output),
645
- iteration,
646
- },
647
- });
648
- },
649
- signal: abortSignal,
650
- transcribeAudio: storeId
651
- ? async (base64, mediaType) => callTranscribe({
652
- proxyUrl: getProxyUrl(),
653
- token,
654
- storeId: storeId,
655
- audioBase64: base64,
656
- mediaType,
657
- })
658
- : undefined,
659
- });
660
- if (bailOut) {
661
- logSpan({ action: "chat.bail_out", durationMs: Date.now() - sessionStart, context: turnCtx, storeId: storeId || undefined, severity: "warn", details: { ...loopDetector.getSessionStats(), message: bailMessage, iteration } });
662
- }
663
- // Shell output summarization — summarize long bash output to save context window
664
- const toolNameMap = new Map(result.toolUseBlocks.map(t => [t.id, t.name]));
665
- const finalToolResults = await summarizeLongToolResults(toolResults, toolNameMap, getProxyUrl(), token, shellSummarization, storeId || undefined);
666
- // Build assistant content and append to conversation
667
- const assistantContent = buildAssistantContent({
668
- text: result.text,
669
- toolUseBlocks: result.toolUseBlocks,
670
- thinkingBlocks: result.thinkingBlocks,
671
- compactionContent: result.compactionContent,
672
- });
673
- messages.push({ role: "assistant", content: assistantContent });
674
- // Check for __PLAN_APPROVED_CLEAN__ marker — clear context and start fresh with just the plan
675
- const planCleanMarker = "__PLAN_APPROVED_CLEAN__\n";
676
- const hasCleanPlanApproval = finalToolResults.some((tr) => {
677
- const content = typeof tr.content === "string" ? tr.content : "";
678
- return content.startsWith(planCleanMarker);
679
- });
680
- if (hasCleanPlanApproval) {
681
- // Extract plan content from the marker
682
- const planResult = finalToolResults.find((tr) => {
683
- const content = typeof tr.content === "string" ? tr.content : "";
684
- return content.startsWith(planCleanMarker);
685
- });
686
- const planText = planResult.content.slice(planCleanMarker.length);
687
- const beforeCount = messages.length;
688
- messages.length = 0;
689
- messages.push({ role: "user", content: [{ type: "text", text: `Implement this plan:\n\n${planText}` }] });
690
- callbacks.onAutoCompact?.(beforeCount, 1, 0);
691
- continue;
692
- }
693
- messages.push({ role: "user", content: finalToolResults });
694
- // Non-native compaction for OpenAI/Gemini — fires after tool results appended
695
- const compactionCfg = getCompactionConfig(currentModel);
696
- if (!compactionCfg.isNative && result.usage.inputTokens >= compactionCfg.triggerTokens) {
697
- compactionCount++;
698
- if (compactionCount * compactionCfg.triggerTokens >= compactionCfg.totalBudget) {
699
- // Budget exhaustion — force wrap-up (same as native compaction budget logic)
700
- const budgetMsg = "\n[Context budget reached — wrapping up.]";
701
- if (emitter) {
702
- emitter.emitText(budgetMsg);
703
- }
704
- else {
705
- callbacks.onText(budgetMsg);
706
- }
707
- const summary = await requestProviderCompaction({
708
- proxyUrl: getProxyUrl(),
709
- token,
710
- messages: messages,
711
- systemPrompt,
712
- });
713
- const compactedMessages = [
714
- ...(summary
715
- ? [{ role: "assistant", content: [{ type: "compaction", content: summary }] }]
716
- : []),
717
- { role: "user", content: [{ type: "text", text: "You have reached the context budget. Please wrap up your current work and provide a final summary of what was accomplished and what remains." }] },
718
- ];
719
- messages.length = 0;
720
- messages.push(...compactedMessages);
721
- continue;
722
- }
723
- // Normal compaction — summarize and preserve last 2 messages
724
- const summary = await requestProviderCompaction({
725
- proxyUrl: getProxyUrl(),
726
- token,
727
- messages: messages,
728
- systemPrompt,
729
- });
730
- if (summary) {
731
- const preserved = messages.slice(-2);
732
- const compactedMessages = [
733
- { role: "assistant", content: [{ type: "compaction", content: summary }] },
734
- ...preserved,
735
- ];
736
- messages.length = 0;
737
- messages.push(...compactedMessages);
738
- iteration--; // Don't count compaction as an iteration
739
- callbacks.onAutoCompact?.(messages.length + preserved.length, messages.length, Math.round(result.usage.inputTokens * 0.7));
740
- emitter?.emitCompact(messages.length + preserved.length, messages.length, Math.round(result.usage.inputTokens * 0.7));
741
- logSpan({ action: "chat.provider_compaction", durationMs: 0, context: turnCtx, storeId: storeId || undefined, details: { compaction_count: compactionCount, provider, model: currentModel, input_tokens: result.usage.inputTokens, trigger_tokens: compactionCfg.triggerTokens } });
742
- }
827
+ break;
828
+ }
829
+
830
+ // Reset counters model is taking tool actions, making progress
831
+ maxTokensContinuations = 0;
832
+ consecutiveCompactions = 0;
833
+
834
+ // Execute tools via shared dispatch
835
+ const {
836
+ results: toolResults,
837
+ bailOut,
838
+ bailMessage
839
+ } = await dispatchTools(result.toolUseBlocks, toolExecutor, {
840
+ loopDetector,
841
+ maxConcurrent: resolved?.maxConcurrentTools ?? AGENT_DEFAULTS.maxConcurrentTools,
842
+ batchErrorLimit: resolved?.loopBatchErrorLimit ?? AGENT_DEFAULTS.loopBatchErrorLimit,
843
+ onStart: (name, input) => {
844
+ callbacks.onToolStart(name, input);
845
+ },
846
+ onResult: (name, success, output, durationMs) => {
847
+ callbacks.onToolResult(name, success, output, undefined, durationMs);
848
+ logSpan({
849
+ action: `tool.${name}`,
850
+ durationMs,
851
+ context: {
852
+ ...turnCtx,
853
+ spanId: generateSpanId(),
854
+ parentSpanId: apiSpanId,
855
+ parentId: apiRowId
856
+ },
857
+ storeId: storeId || undefined,
858
+ error: success ? undefined : output,
859
+ details: {
860
+ tool_input: {},
861
+ tool_result: truncateResult(output, 2000),
862
+ error_type: success ? undefined : classifyToolError(output),
863
+ iteration
743
864
  }
744
- }
745
- // Telemetry: session summary
865
+ });
866
+ },
867
+ signal: abortSignal,
868
+ transcribeAudio: storeId ? async (base64, mediaType) => callTranscribe({
869
+ proxyUrl: getProxyUrl(),
870
+ token,
871
+ storeId: storeId,
872
+ audioBase64: base64,
873
+ mediaType
874
+ }) : undefined
875
+ });
876
+ if (bailOut) {
746
877
  logSpan({
747
- action: "chat.session_complete",
748
- durationMs: Date.now() - sessionStart,
749
- context: { ...turnCtx, inputTokens: totalIn, outputTokens: totalOut, model: activeModel },
878
+ action: "chat.bail_out",
879
+ durationMs: Date.now() - sessionStart,
880
+ context: turnCtx,
881
+ storeId: storeId || undefined,
882
+ severity: "warn",
883
+ details: {
884
+ ...loopDetector.getSessionStats(),
885
+ message: bailMessage,
886
+ iteration
887
+ }
888
+ });
889
+ }
890
+
891
+ // Shell output summarization — summarize long bash output to save context window
892
+ const toolNameMap = new Map(result.toolUseBlocks.map(t => [t.id, t.name]));
893
+ const finalToolResults = await summarizeLongToolResults(toolResults, toolNameMap, getProxyUrl(), token, shellSummarization, storeId || undefined);
894
+
895
+ // Build assistant content and append to conversation
896
+ const assistantContent = buildAssistantContent({
897
+ text: result.text,
898
+ toolUseBlocks: result.toolUseBlocks,
899
+ thinkingBlocks: result.thinkingBlocks,
900
+ compactionContent: result.compactionContent
901
+ });
902
+ messages.push({
903
+ role: "assistant",
904
+ content: assistantContent
905
+ });
906
+
907
+ // Check for __PLAN_APPROVED_CLEAN__ marker — clear context and start fresh with just the plan
908
+ const planCleanMarker = "__PLAN_APPROVED_CLEAN__\n";
909
+ const hasCleanPlanApproval = finalToolResults.some(tr => {
910
+ const content = typeof tr.content === "string" ? tr.content : "";
911
+ return content.startsWith(planCleanMarker);
912
+ });
913
+ if (hasCleanPlanApproval) {
914
+ // Extract plan content from the marker
915
+ const planResult = finalToolResults.find(tr => {
916
+ const content = typeof tr.content === "string" ? tr.content : "";
917
+ return content.startsWith(planCleanMarker);
918
+ });
919
+ const planText = planResult.content.slice(planCleanMarker.length);
920
+ const beforeCount = messages.length;
921
+ messages.length = 0;
922
+ messages.push({
923
+ role: "user",
924
+ content: [{
925
+ type: "text",
926
+ text: `Implement this plan:\n\n${planText}`
927
+ }]
928
+ });
929
+ callbacks.onAutoCompact?.(beforeCount, 1, 0);
930
+ continue;
931
+ }
932
+ messages.push({
933
+ role: "user",
934
+ content: finalToolResults
935
+ });
936
+
937
+ // Non-native compaction for OpenAI/Gemini — fires after tool results appended
938
+ const compactionCfg = getCompactionConfig(currentModel);
939
+ if (!compactionCfg.isNative && result.usage.inputTokens >= compactionCfg.triggerTokens) {
940
+ compactionCount++;
941
+ if (compactionCount * compactionCfg.triggerTokens >= compactionCfg.totalBudget) {
942
+ // Budget exhaustion — force wrap-up (same as native compaction budget logic)
943
+ const budgetMsg = "\n[Context budget reached — wrapping up.]";
944
+ if (emitter) {
945
+ emitter.emitText(budgetMsg);
946
+ } else {
947
+ callbacks.onText(budgetMsg);
948
+ }
949
+ const summary = await requestProviderCompaction({
950
+ proxyUrl: getProxyUrl(),
951
+ token,
952
+ messages,
953
+ systemPrompt
954
+ });
955
+ const compactedMessages = [...(summary ? [{
956
+ role: "assistant",
957
+ content: [{
958
+ type: "compaction",
959
+ content: summary
960
+ }]
961
+ }] : []), {
962
+ role: "user",
963
+ content: [{
964
+ type: "text",
965
+ text: "You have reached the context budget. Please wrap up your current work and provide a final summary of what was accomplished and what remains."
966
+ }]
967
+ }];
968
+ messages.length = 0;
969
+ messages.push(...compactedMessages);
970
+ continue;
971
+ }
972
+
973
+ // Normal compaction — summarize, don't preserve old messages (prevents loop)
974
+ const summary = await requestProviderCompaction({
975
+ proxyUrl: getProxyUrl(),
976
+ token,
977
+ messages: messages,
978
+ systemPrompt
979
+ });
980
+ if (summary) {
981
+ const beforeCount = messages.length;
982
+ const compactedMessages = [{
983
+ role: "assistant",
984
+ content: [{
985
+ type: "compaction",
986
+ content: summary
987
+ }]
988
+ }, {
989
+ role: "user",
990
+ content: [{
991
+ type: "text",
992
+ text: "Continue with your task."
993
+ }]
994
+ }];
995
+ messages.length = 0;
996
+ messages.push(...compactedMessages);
997
+ iteration--; // Don't count compaction as an iteration
998
+
999
+ callbacks.onAutoCompact?.(beforeCount, messages.length, Math.round(result.usage.inputTokens * 0.7));
1000
+ emitter?.emitCompact(beforeCount, messages.length, Math.round(result.usage.inputTokens * 0.7));
1001
+ logSpan({
1002
+ action: "chat.provider_compaction",
1003
+ durationMs: 0,
1004
+ context: turnCtx,
750
1005
  storeId: storeId || undefined,
751
1006
  details: {
752
- input_tokens: totalIn, output_tokens: totalOut, total_tokens: totalIn + totalOut,
753
- cache_creation_tokens: totalCacheCreation, cache_read_tokens: totalCacheRead,
754
- session_input_tokens: sessionInputTokens, session_output_tokens: sessionOutputTokens,
755
- model: activeModel,
756
- },
757
- });
758
- const turnCostUsd = estimateCostUsd(totalIn, totalOut, activeModel, totalThinking, totalCacheRead, totalCacheCreation);
759
- callbacks.onUsage(totalIn, totalOut, totalThinking, activeModel, turnCostUsd, totalCacheRead, totalCacheCreation);
760
- // Flush telemetry spans to server before session ends
761
- flushCliSpans();
762
- // Fire SessionEnd hook (non-blocking)
763
- if (hooks.length > 0) {
764
- runSessionHook(hooks, "SessionEnd", { session_id: `turn-${sessionStart}` }).catch(() => { });
1007
+ compaction_count: compactionCount,
1008
+ provider,
1009
+ model: currentModel,
1010
+ input_tokens: result.usage.inputTokens,
1011
+ trigger_tokens: compactionCfg.triggerTokens
1012
+ }
1013
+ });
765
1014
  }
766
- const finalText = allAssistantText.length > 0 ? allAssistantText[allAssistantText.length - 1] : "";
767
- emitter?.emitDone(finalText, messages);
768
- if (emitter)
769
- clearGlobalEmitter();
770
- callbacks.onDone(messages);
1015
+ }
771
1016
  }
772
- catch (err) {
773
- const errorMsg = abortSignal?.aborted || err?.message === "Cancelled"
774
- ? "Cancelled"
775
- : String(err?.message || err);
776
- logSpan({
777
- action: errorMsg === "Cancelled" ? "chat.cancelled" : "chat.fatal_error",
778
- durationMs: Date.now() - sessionStart,
779
- context: { ...turnCtx, inputTokens: totalIn, outputTokens: totalOut, model: activeModel },
780
- storeId: storeId || undefined,
781
- severity: errorMsg === "Cancelled" ? "info" : "error",
782
- error: errorMsg === "Cancelled" ? undefined : errorMsg,
783
- details: { input_tokens: totalIn, output_tokens: totalOut, session_cost_usd: sessionCostUsd, model: activeModel },
784
- });
785
- // Capture to error_events (not just audit_logs) for non-cancellations
786
- if (errorMsg !== "Cancelled") {
787
- captureError({
788
- error: err instanceof Error ? err : undefined,
789
- errorType: "AgentLoopError",
790
- errorMessage: errorMsg,
791
- severity: "error",
792
- traceId: turnCtx.traceId,
793
- spanId: turnCtx.spanId,
794
- storeId: storeId || undefined,
795
- tags: { model: activeModel, turn: String(turnNum) },
796
- });
1017
+
1018
+ // Telemetry: session summary
1019
+ logSpan({
1020
+ action: "chat.session_complete",
1021
+ durationMs: Date.now() - sessionStart,
1022
+ context: {
1023
+ ...turnCtx,
1024
+ inputTokens: totalIn,
1025
+ outputTokens: totalOut,
1026
+ model: activeModel
1027
+ },
1028
+ storeId: storeId || undefined,
1029
+ details: {
1030
+ input_tokens: totalIn,
1031
+ output_tokens: totalOut,
1032
+ total_tokens: totalIn + totalOut,
1033
+ cache_creation_tokens: totalCacheCreation,
1034
+ cache_read_tokens: totalCacheRead,
1035
+ session_input_tokens: sessionInputTokens,
1036
+ session_output_tokens: sessionOutputTokens,
1037
+ model: activeModel
1038
+ }
1039
+ });
1040
+ const turnCostUsd = estimateCostUsd(totalIn, totalOut, activeModel, totalThinking, totalCacheRead, totalCacheCreation);
1041
+ callbacks.onUsage(totalIn, totalOut, totalThinking, activeModel, turnCostUsd, totalCacheRead, totalCacheCreation);
1042
+
1043
+ // Flush telemetry spans to server before session ends
1044
+ flushCliSpans();
1045
+
1046
+ // Fire SessionEnd hook (non-blocking)
1047
+ if (hooks.length > 0) {
1048
+ runSessionHook(hooks, "SessionEnd", {
1049
+ session_id: `turn-${sessionStart}`
1050
+ }).catch(() => {});
1051
+ }
1052
+ const finalText = allAssistantText.length > 0 ? allAssistantText[allAssistantText.length - 1] : "";
1053
+ emitter?.emitDone(finalText, messages);
1054
+ if (emitter) clearGlobalEmitter();
1055
+ callbacks.onDone(messages);
1056
+ } catch (err) {
1057
+ const errorMsg = abortSignal?.aborted || err?.message === "Cancelled" ? "Cancelled" : String(err?.message || err);
1058
+ logSpan({
1059
+ action: errorMsg === "Cancelled" ? "chat.cancelled" : "chat.fatal_error",
1060
+ durationMs: Date.now() - sessionStart,
1061
+ context: {
1062
+ ...turnCtx,
1063
+ inputTokens: totalIn,
1064
+ outputTokens: totalOut,
1065
+ model: activeModel
1066
+ },
1067
+ storeId: storeId || undefined,
1068
+ severity: errorMsg === "Cancelled" ? "info" : "error",
1069
+ error: errorMsg === "Cancelled" ? undefined : errorMsg,
1070
+ details: {
1071
+ input_tokens: totalIn,
1072
+ output_tokens: totalOut,
1073
+ session_cost_usd: sessionCostUsd,
1074
+ model: activeModel
1075
+ }
1076
+ });
1077
+
1078
+ // Capture to error_events (not just audit_logs) for non-cancellations
1079
+ if (errorMsg !== "Cancelled") {
1080
+ captureError({
1081
+ error: err instanceof Error ? err : undefined,
1082
+ errorType: "AgentLoopError",
1083
+ errorMessage: errorMsg,
1084
+ severity: "error",
1085
+ traceId: turnCtx.traceId,
1086
+ spanId: turnCtx.spanId,
1087
+ storeId: storeId || undefined,
1088
+ tags: {
1089
+ model: activeModel,
1090
+ turn: String(turnNum)
797
1091
  }
798
- // Flush telemetry on error path too
799
- flushCliSpans();
800
- emitter?.emitError(errorMsg);
801
- if (emitter)
802
- clearGlobalEmitter();
803
- callbacks.onError(errorMsg, messages);
1092
+ });
804
1093
  }
1094
+
1095
+ // Flush telemetry on error path too
1096
+ flushCliSpans();
1097
+ emitter?.emitError(errorMsg);
1098
+ if (emitter) clearGlobalEmitter();
1099
+ callbacks.onError(errorMsg, messages);
1100
+ }
805
1101
  }
1102
+
806
1103
  // ============================================================================
807
1104
  // TELEMETRY HELPERS
808
1105
  // ============================================================================
1106
+
809
1107
  export function truncateResult(output, maxLen) {
810
- if (output.length <= maxLen)
811
- return output;
812
- return output.slice(0, maxLen) + `... (${output.length} chars total)`;
1108
+ if (output.length <= maxLen) return output;
1109
+ return output.slice(0, maxLen) + `... (${output.length} chars total)`;
813
1110
  }
814
1111
  export function classifyToolError(output) {
815
- const lower = output.toLowerCase();
816
- if (lower.includes("timed out") || lower.includes("timeout"))
817
- return "timeout";
818
- if (lower.includes("permission denied") || lower.includes("eacces"))
819
- return "permission";
820
- if (lower.includes("not found") || lower.includes("no such file"))
821
- return "not_found";
822
- if (lower.includes("command not found") || lower.includes("exit code 127"))
823
- return "command_not_found";
824
- if (lower.includes("import") && lower.includes("error"))
825
- return "import_error";
826
- if (lower.includes("syntax") || lower.includes("parse"))
827
- return "syntax_error";
828
- if (lower.includes("externally-managed"))
829
- return "env_managed";
830
- return "unknown";
1112
+ const lower = output.toLowerCase();
1113
+ if (lower.includes("timed out") || lower.includes("timeout")) return "timeout";
1114
+ if (lower.includes("permission denied") || lower.includes("eacces")) return "permission";
1115
+ if (lower.includes("not found") || lower.includes("no such file")) return "not_found";
1116
+ if (lower.includes("command not found") || lower.includes("exit code 127")) return "command_not_found";
1117
+ if (lower.includes("import") && lower.includes("error")) return "import_error";
1118
+ if (lower.includes("syntax") || lower.includes("parse")) return "syntax_error";
1119
+ if (lower.includes("externally-managed")) return "env_managed";
1120
+ return "unknown";
831
1121
  }
1122
+
832
1123
  // Convenience: check if user can use the agent (logged in OR has API key)
833
1124
  export function canUseAgent() {
834
- const config = loadConfig();
835
- const hasToken = !!(config.access_token && config.refresh_token);
836
- const hasApiKey = !!(process.env.ANTHROPIC_API_KEY || config.anthropic_api_key);
837
- if (hasToken || hasApiKey)
838
- return { ready: true };
839
- return { ready: false, reason: "Run `whale login` to authenticate." };
1125
+ const config = loadConfig();
1126
+ const hasToken = !!(config.access_token && config.refresh_token);
1127
+ const hasApiKey = !!(process.env.ANTHROPIC_API_KEY || config.anthropic_api_key);
1128
+ if (hasToken || hasApiKey) return {
1129
+ ready: true
1130
+ };
1131
+ return {
1132
+ ready: false,
1133
+ reason: "Run `whale login` to authenticate."
1134
+ };
1135
+ }
1136
+
1137
+ // ============================================================================
1138
+ // SESSION MODE — delegate to server-side SessionManager
1139
+ // ============================================================================
1140
+
1141
+ import { SessionClient } from "./session-client.js";
1142
+
1143
+ /** Check if session mode should be used (auto-detect by default). */
1144
+ async function shouldUseSessionMode() {
1145
+ if (process.env.WHALE_SESSION_MODE === "off") return false;
1146
+ if (process.env.WHALE_SESSION_MODE === "on") return true;
1147
+
1148
+ // Never auto-activate for interactive CLI — the emitter-based TUI
1149
+ // requires the local loop. Session mode only activates via explicit
1150
+ // env var or `whale resume <id>` (which sets WHALE_SESSION_MODE=on).
1151
+ if (process.stdin.isTTY) return false;
1152
+
1153
+ // Auto: if logged in + server reachable → session mode (non-TTY: print mode, MCP)
1154
+ const proxyUrl = getProxyUrl();
1155
+ if (!proxyUrl) return false;
1156
+ const config = resolveConfig();
1157
+ if (!config.storeId) return false;
1158
+ const client = new SessionClient(proxyUrl, getValidToken);
1159
+ return client.healthCheck();
1160
+ }
1161
+
1162
+ /**
1163
+ * Run agent loop in session mode — all state managed server-side.
1164
+ * The entire existing local loop stays as offline fallback.
1165
+ */
1166
+ async function runSessionAgentLoop(opts) {
1167
+ const {
1168
+ message,
1169
+ conversationHistory,
1170
+ callbacks,
1171
+ abortSignal,
1172
+ emitter
1173
+ } = opts;
1174
+ const proxyUrl = getProxyUrl();
1175
+ if (!proxyUrl) throw new Error("Session mode requires server connection");
1176
+
1177
+ // Set global emitter for subagents (mirrors local loop behavior)
1178
+ if (emitter) setGlobalEmitter(emitter);
1179
+ const client = new SessionClient(proxyUrl, getValidToken);
1180
+ const config = resolveConfig();
1181
+ const storeId = config.storeId;
1182
+ if (!storeId) {
1183
+ callbacks.onError("Session mode requires store_id in config. Falling back to local mode.");
1184
+ if (emitter) clearGlobalEmitter();
1185
+ return;
1186
+ }
1187
+
1188
+ // Resolve agent ID: use config, or query server for store's first active agent
1189
+ let agentId = config.defaultAgentId;
1190
+ if (!agentId) {
1191
+ agentId = (await resolveDefaultAgentId(proxyUrl, storeId, getValidToken)) || "";
1192
+ }
1193
+ if (!agentId) {
1194
+ callbacks.onError("No agent configured. Set default_agent_id in config or create an agent. Falling back to local mode.");
1195
+ if (emitter) clearGlobalEmitter();
1196
+ return;
1197
+ }
1198
+
1199
+ // Resume existing session or create new one
1200
+ const resumeId = process.env.WHALE_RESUME_SESSION_ID;
1201
+ let sessionId;
1202
+ if (resumeId) {
1203
+ sessionId = resumeId;
1204
+ delete process.env.WHALE_RESUME_SESSION_ID; // consume once
1205
+ } else {
1206
+ const session = await client.createSession({
1207
+ storeId,
1208
+ agentId,
1209
+ surface: "cli",
1210
+ message
1211
+ });
1212
+ sessionId = session.id;
1213
+ }
1214
+
1215
+ // Save local session backup with server session reference
1216
+ const localSessionId = saveSession(conversationHistory);
1217
+ updateSessionMeta(localSessionId, {
1218
+ serverSessionId: sessionId,
1219
+ synced: true
1220
+ });
1221
+
1222
+ // Track accumulated text for emitDone — the TUI's handleDone handler
1223
+ // overwrites accTextRef with event.text, so we must pass the full text.
1224
+ let accumulatedText = "";
1225
+ // Guard against double-error: SessionClient.sendMessage calls onError AND
1226
+ // throws for HTTP errors. The catch must not re-fire emitter/callbacks.
1227
+ let errorHandled = false;
1228
+ try {
1229
+ await client.sendMessage(sessionId, message, {
1230
+ onText: text => {
1231
+ accumulatedText += text;
1232
+ if (emitter) {
1233
+ emitter.emitText(text);
1234
+ } else {
1235
+ callbacks.onText(text);
1236
+ }
1237
+ },
1238
+ onToolStart: (name, input) => {
1239
+ callbacks.onToolStart(name, input);
1240
+ if (input) emitter?.emitToolStart("", name);
1241
+ },
1242
+ onToolResult: (name, success, result) => {
1243
+ callbacks.onToolResult(name, success, result);
1244
+ },
1245
+ onUsage: (tokens, costUsd) => {
1246
+ callbacks.onUsage(tokens.input, tokens.output, 0, getModel(), costUsd, tokens.cacheRead, tokens.cacheCreation);
1247
+ if (emitter && (tokens.input > 0 || tokens.output > 0)) {
1248
+ emitter.emitUsage(tokens.input, tokens.output, getModel(), costUsd, tokens.cacheRead, tokens.cacheCreation);
1249
+ }
1250
+ },
1251
+ onDone: _conversationId => {
1252
+ emitter?.flushText();
1253
+ emitter?.emitDone(accumulatedText, conversationHistory);
1254
+ if (emitter) clearGlobalEmitter();
1255
+ callbacks.onDone(conversationHistory);
1256
+ },
1257
+ onError: err => {
1258
+ errorHandled = true;
1259
+ emitter?.emitError(err);
1260
+ if (emitter) clearGlobalEmitter();
1261
+ callbacks.onError(err);
1262
+ }
1263
+ }, abortSignal);
1264
+ } catch (err) {
1265
+ if (!errorHandled) {
1266
+ const errorMsg = abortSignal?.aborted || err?.message === "Cancelled" ? "Cancelled" : String(err?.message || err);
1267
+ emitter?.emitError(errorMsg);
1268
+ if (emitter) clearGlobalEmitter();
1269
+ callbacks.onError(errorMsg);
1270
+ }
1271
+ }
840
1272
  }
1273
+ //# sourceMappingURL=agent-loop.js.map