whale-code 6.5.4 → 6.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (853) hide show
  1. package/README.md +39 -31
  2. package/bin/{swagmanager-mcp.js → whale-code.js} +17 -2
  3. package/dist/cli/app.js +148 -72
  4. package/dist/cli/app.js.map +1 -0
  5. package/dist/cli/chat/AgentSelector.js +105 -10
  6. package/dist/cli/chat/AgentSelector.js.map +1 -0
  7. package/dist/cli/chat/ChatApp.d.ts +31 -0
  8. package/dist/cli/chat/ChatApp.js +539 -286
  9. package/dist/cli/chat/ChatApp.js.map +1 -0
  10. package/dist/cli/chat/ChatInput.js +1088 -770
  11. package/dist/cli/chat/ChatInput.js.map +1 -0
  12. package/dist/cli/chat/MarkdownText.js +39 -14
  13. package/dist/cli/chat/MarkdownText.js.map +1 -0
  14. package/dist/cli/chat/MemoryManager.js +181 -46
  15. package/dist/cli/chat/MemoryManager.js.map +1 -0
  16. package/dist/cli/chat/MessageList.d.ts +2 -3
  17. package/dist/cli/chat/MessageList.js +186 -45
  18. package/dist/cli/chat/MessageList.js.map +1 -0
  19. package/dist/cli/chat/ModelSelector.js +282 -63
  20. package/dist/cli/chat/ModelSelector.js.map +1 -0
  21. package/dist/cli/chat/NodeManager.js +165 -75
  22. package/dist/cli/chat/NodeManager.js.map +1 -0
  23. package/dist/cli/chat/NodeSelector.js +171 -30
  24. package/dist/cli/chat/NodeSelector.js.map +1 -0
  25. package/dist/cli/chat/PlanApproval.js +281 -57
  26. package/dist/cli/chat/PlanApproval.js.map +1 -0
  27. package/dist/cli/chat/RewindViewer.js +559 -144
  28. package/dist/cli/chat/RewindViewer.js.map +1 -0
  29. package/dist/cli/chat/SessionManager.js +137 -30
  30. package/dist/cli/chat/SessionManager.js.map +1 -0
  31. package/dist/cli/chat/SlashMenu.js +293 -164
  32. package/dist/cli/chat/SlashMenu.js.map +1 -0
  33. package/dist/cli/chat/StatusBar.js +172 -9
  34. package/dist/cli/chat/StatusBar.js.map +1 -0
  35. package/dist/cli/chat/StoreSelector.js +147 -18
  36. package/dist/cli/chat/StoreSelector.js.map +1 -0
  37. package/dist/cli/chat/StreamingText.d.ts +1 -5
  38. package/dist/cli/chat/StreamingText.js +22 -7
  39. package/dist/cli/chat/StreamingText.js.map +1 -0
  40. package/dist/cli/chat/SubagentPanel.d.ts +1 -2
  41. package/dist/cli/chat/SubagentPanel.js +612 -72
  42. package/dist/cli/chat/SubagentPanel.js.map +1 -0
  43. package/dist/cli/chat/TeamPanel.d.ts +1 -0
  44. package/dist/cli/chat/TeamPanel.js +230 -30
  45. package/dist/cli/chat/TeamPanel.js.map +1 -0
  46. package/dist/cli/chat/ThemeSelector.js +84 -24
  47. package/dist/cli/chat/ThemeSelector.js.map +1 -0
  48. package/dist/cli/chat/ToolIndicator.js +1476 -371
  49. package/dist/cli/chat/ToolIndicator.js.map +1 -0
  50. package/dist/cli/chat/hooks/useAgentLoop.d.ts +1 -0
  51. package/dist/cli/chat/hooks/useAgentLoop.js +481 -367
  52. package/dist/cli/chat/hooks/useAgentLoop.js.map +1 -0
  53. package/dist/cli/chat/hooks/useSlashCommands.d.ts +3 -14
  54. package/dist/cli/chat/hooks/useSlashCommands.js +744 -572
  55. package/dist/cli/chat/hooks/useSlashCommands.js.map +1 -0
  56. package/dist/cli/commands/config-cmd.js +56 -57
  57. package/dist/cli/commands/config-cmd.js.map +1 -0
  58. package/dist/cli/commands/db.js +184 -169
  59. package/dist/cli/commands/db.js.map +1 -0
  60. package/dist/cli/commands/doctor.js +212 -122
  61. package/dist/cli/commands/doctor.js.map +1 -0
  62. package/dist/cli/commands/init.js +211 -244
  63. package/dist/cli/commands/init.js.map +1 -0
  64. package/dist/cli/commands/mcp.js +127 -122
  65. package/dist/cli/commands/mcp.js.map +1 -0
  66. package/dist/cli/login/LoginApp.js +355 -141
  67. package/dist/cli/login/LoginApp.js.map +1 -0
  68. package/dist/cli/print-mode.js +196 -177
  69. package/dist/cli/print-mode.js.map +1 -0
  70. package/dist/cli/serve-mode.js +615 -530
  71. package/dist/cli/serve-mode.js.map +1 -0
  72. package/dist/cli/services/agent-config.d.ts +29 -0
  73. package/dist/cli/services/agent-config.js +91 -0
  74. package/dist/cli/services/agent-config.js.map +1 -0
  75. package/dist/cli/services/agent-definitions.d.ts +4 -1
  76. package/dist/cli/services/agent-definitions.js +97 -56
  77. package/dist/cli/services/agent-definitions.js.map +1 -0
  78. package/dist/cli/services/agent-events.js +225 -162
  79. package/dist/cli/services/agent-events.js.map +1 -0
  80. package/dist/cli/services/agent-loop.js +978 -669
  81. package/dist/cli/services/agent-loop.js.map +1 -0
  82. package/dist/cli/services/agent-worker-base.d.ts +35 -5
  83. package/dist/cli/services/agent-worker-base.js +337 -153
  84. package/dist/cli/services/agent-worker-base.js.map +1 -0
  85. package/dist/cli/services/api-retry.js +69 -64
  86. package/dist/cli/services/api-retry.js.map +1 -0
  87. package/dist/cli/services/auth-service.d.ts +3 -3
  88. package/dist/cli/services/auth-service.js +209 -132
  89. package/dist/cli/services/auth-service.js.map +1 -0
  90. package/dist/cli/services/background-processes.js +343 -267
  91. package/dist/cli/services/background-processes.js.map +1 -0
  92. package/dist/cli/services/browser-auth.d.ts +2 -2
  93. package/dist/cli/services/browser-auth.js +159 -118
  94. package/dist/cli/services/browser-auth.js.map +1 -0
  95. package/dist/cli/services/claude-md-loader.js +40 -36
  96. package/dist/cli/services/claude-md-loader.js.map +1 -0
  97. package/dist/cli/services/config-store.d.ts +9 -4
  98. package/dist/cli/services/config-store.js +164 -117
  99. package/dist/cli/services/config-store.js.map +1 -0
  100. package/dist/cli/services/debug-log.d.ts +1 -1
  101. package/dist/cli/services/debug-log.js +34 -35
  102. package/dist/cli/services/debug-log.js.map +1 -0
  103. package/dist/cli/services/env-detect.d.ts +7 -0
  104. package/dist/cli/services/env-detect.js +9 -0
  105. package/dist/cli/services/env-detect.js.map +1 -0
  106. package/dist/cli/services/error-logger.d.ts +2 -3
  107. package/dist/cli/services/error-logger.js +189 -180
  108. package/dist/cli/services/error-logger.js.map +1 -0
  109. package/dist/cli/services/file-history.d.ts +1 -1
  110. package/dist/cli/services/file-history.js +50 -54
  111. package/dist/cli/services/file-history.js.map +1 -0
  112. package/dist/cli/services/format-server-response.js +332 -372
  113. package/dist/cli/services/format-server-response.js.map +1 -0
  114. package/dist/cli/services/git-context.js +61 -45
  115. package/dist/cli/services/git-context.js.map +1 -0
  116. package/dist/cli/services/hooks.d.ts +2 -2
  117. package/dist/cli/services/hooks.js +195 -180
  118. package/dist/cli/services/hooks.js.map +1 -0
  119. package/dist/cli/services/ink-incremental.d.ts +19 -0
  120. package/dist/cli/services/ink-incremental.js +59 -0
  121. package/dist/cli/services/ink-incremental.js.map +1 -0
  122. package/dist/cli/services/ink-resize-fix.js +54 -44
  123. package/dist/cli/services/ink-resize-fix.js.map +1 -0
  124. package/dist/cli/services/ink-sync-output.d.ts +12 -0
  125. package/dist/cli/services/ink-sync-output.js +16 -0
  126. package/dist/cli/services/ink-sync-output.js.map +1 -0
  127. package/dist/cli/services/interactive-tools.js +268 -212
  128. package/dist/cli/services/interactive-tools.js.map +1 -0
  129. package/dist/cli/services/keybinding-manager.d.ts +11 -1
  130. package/dist/cli/services/keybinding-manager.js +126 -63
  131. package/dist/cli/services/keybinding-manager.js.map +1 -0
  132. package/dist/cli/services/local-tools.d.ts +1 -1
  133. package/dist/cli/services/local-tools.js +939 -656
  134. package/dist/cli/services/local-tools.js.map +1 -0
  135. package/dist/cli/services/lsp-manager.js +757 -594
  136. package/dist/cli/services/lsp-manager.js.map +1 -0
  137. package/dist/cli/services/mcp-client.d.ts +1 -1
  138. package/dist/cli/services/mcp-client.js +173 -134
  139. package/dist/cli/services/mcp-client.js.map +1 -0
  140. package/dist/cli/services/memory-manager.js +53 -40
  141. package/dist/cli/services/memory-manager.js.map +1 -0
  142. package/dist/cli/services/model-manager.js +55 -40
  143. package/dist/cli/services/model-manager.js.map +1 -0
  144. package/dist/cli/services/model-router.js +115 -85
  145. package/dist/cli/services/model-router.js.map +1 -0
  146. package/dist/cli/services/paths.d.ts +30 -0
  147. package/dist/cli/services/paths.js +81 -0
  148. package/dist/cli/services/paths.js.map +1 -0
  149. package/dist/cli/services/permission-modes.js +32 -25
  150. package/dist/cli/services/permission-modes.js.map +1 -0
  151. package/dist/cli/services/rewind.js +182 -168
  152. package/dist/cli/services/rewind.js.map +1 -0
  153. package/dist/cli/services/ripgrep.js +115 -115
  154. package/dist/cli/services/ripgrep.js.map +1 -0
  155. package/dist/cli/services/sandbox.d.ts +1 -1
  156. package/dist/cli/services/sandbox.js +58 -37
  157. package/dist/cli/services/sandbox.js.map +1 -0
  158. package/dist/cli/services/server-tools.js +738 -565
  159. package/dist/cli/services/server-tools.js.map +1 -0
  160. package/dist/cli/services/session-persistence.js +69 -74
  161. package/dist/cli/services/session-persistence.js.map +1 -0
  162. package/dist/cli/services/subagent-worker.js +42 -27
  163. package/dist/cli/services/subagent-worker.js.map +1 -0
  164. package/dist/cli/services/subagent.d.ts +2 -0
  165. package/dist/cli/services/subagent.js +606 -430
  166. package/dist/cli/services/subagent.js.map +1 -0
  167. package/dist/cli/services/system-prompt.js +86 -78
  168. package/dist/cli/services/system-prompt.js.map +1 -0
  169. package/dist/cli/services/task-decomposer.d.ts +1 -1
  170. package/dist/cli/services/task-decomposer.js +172 -139
  171. package/dist/cli/services/task-decomposer.js.map +1 -0
  172. package/dist/cli/services/team-lead.d.ts +2 -2
  173. package/dist/cli/services/team-lead.js +727 -529
  174. package/dist/cli/services/team-lead.js.map +1 -0
  175. package/dist/cli/services/team-state.js +319 -319
  176. package/dist/cli/services/team-state.js.map +1 -0
  177. package/dist/cli/services/teammate.d.ts +8 -2
  178. package/dist/cli/services/teammate.js +862 -560
  179. package/dist/cli/services/teammate.js.map +1 -0
  180. package/dist/cli/services/telemetry.d.ts +6 -1
  181. package/dist/cli/services/telemetry.js +180 -157
  182. package/dist/cli/services/telemetry.js.map +1 -0
  183. package/dist/cli/services/tools/agent-tools.d.ts +3 -3
  184. package/dist/cli/services/tools/agent-tools.js +480 -322
  185. package/dist/cli/services/tools/agent-tools.js.map +1 -0
  186. package/dist/cli/services/tools/file-ops.js +563 -450
  187. package/dist/cli/services/tools/file-ops.js.map +1 -0
  188. package/dist/cli/services/tools/search-tools.js +231 -162
  189. package/dist/cli/services/tools/search-tools.js.map +1 -0
  190. package/dist/cli/services/tools/shell-exec.js +197 -151
  191. package/dist/cli/services/tools/shell-exec.js.map +1 -0
  192. package/dist/cli/services/tools/task-manager.js +206 -173
  193. package/dist/cli/services/tools/task-manager.js.map +1 -0
  194. package/dist/cli/services/tools/web-tools.js +388 -341
  195. package/dist/cli/services/tools/web-tools.js.map +1 -0
  196. package/dist/cli/setup/SetupApp.d.ts +2 -2
  197. package/dist/cli/setup/SetupApp.js +608 -160
  198. package/dist/cli/setup/SetupApp.js.map +1 -0
  199. package/dist/cli/shared/ErrorBoundary.d.ts +22 -0
  200. package/dist/cli/shared/ErrorBoundary.js +73 -0
  201. package/dist/cli/shared/ErrorBoundary.js.map +1 -0
  202. package/dist/cli/shared/MatrixIntro.js +66 -69
  203. package/dist/cli/shared/MatrixIntro.js.map +1 -0
  204. package/dist/cli/shared/SpinnerSlot.d.ts +14 -0
  205. package/dist/cli/shared/SpinnerSlot.js +63 -0
  206. package/dist/cli/shared/SpinnerSlot.js.map +1 -0
  207. package/dist/cli/shared/Theme.d.ts +1 -1
  208. package/dist/cli/shared/Theme.js +136 -92
  209. package/dist/cli/shared/Theme.js.map +1 -0
  210. package/dist/cli/shared/WhaleBanner.js +99 -11
  211. package/dist/cli/shared/WhaleBanner.js.map +1 -0
  212. package/dist/cli/shared/markdown.d.ts +3 -1
  213. package/dist/cli/shared/markdown.js +736 -674
  214. package/dist/cli/shared/markdown.js.map +1 -0
  215. package/dist/cli/shared/marked-terminal.d.js +2 -0
  216. package/dist/cli/shared/marked-terminal.d.js.map +1 -0
  217. package/dist/cli/shared/theme-manager.js +99 -90
  218. package/dist/cli/shared/theme-manager.js.map +1 -0
  219. package/dist/cli/shared/theme-presets.js +256 -254
  220. package/dist/cli/shared/theme-presets.js.map +1 -0
  221. package/dist/cli/status/StatusApp.js +235 -86
  222. package/dist/cli/status/StatusApp.js.map +1 -0
  223. package/dist/cli/stores/StoreApp.js +275 -65
  224. package/dist/cli/stores/StoreApp.js.map +1 -0
  225. package/dist/index.d.ts +2 -2
  226. package/dist/index.js +509 -396
  227. package/dist/index.js.map +1 -0
  228. package/dist/local-agent/connection.d.ts +2 -2
  229. package/dist/local-agent/connection.js +352 -293
  230. package/dist/local-agent/connection.js.map +1 -0
  231. package/dist/local-agent/discovery.js +259 -122
  232. package/dist/local-agent/discovery.js.map +1 -0
  233. package/dist/local-agent/executor.js +216 -193
  234. package/dist/local-agent/executor.js.map +1 -0
  235. package/dist/local-agent/index.d.ts +2 -2
  236. package/dist/local-agent/index.js +156 -156
  237. package/dist/local-agent/index.js.map +1 -0
  238. package/dist/node/adapters/base.js +18 -8
  239. package/dist/node/adapters/base.js.map +1 -0
  240. package/dist/node/adapters/discord.js +286 -275
  241. package/dist/node/adapters/discord.js.map +1 -0
  242. package/dist/node/adapters/email.js +189 -202
  243. package/dist/node/adapters/email.js.map +1 -0
  244. package/dist/node/adapters/imessage.js +145 -142
  245. package/dist/node/adapters/imessage.js.map +1 -0
  246. package/dist/node/adapters/slack.js +237 -236
  247. package/dist/node/adapters/slack.js.map +1 -0
  248. package/dist/node/adapters/sms.js +149 -151
  249. package/dist/node/adapters/sms.js.map +1 -0
  250. package/dist/node/adapters/telegram.js +88 -92
  251. package/dist/node/adapters/telegram.js.map +1 -0
  252. package/dist/node/adapters/webchat.js +160 -136
  253. package/dist/node/adapters/webchat.js.map +1 -0
  254. package/dist/node/adapters/whatsapp.js +212 -215
  255. package/dist/node/adapters/whatsapp.js.map +1 -0
  256. package/dist/node/cli.js +884 -653
  257. package/dist/node/cli.js.map +1 -0
  258. package/dist/node/config.js +20 -18
  259. package/dist/node/config.js.map +1 -0
  260. package/dist/node/gateway-client.js +191 -181
  261. package/dist/node/gateway-client.js.map +1 -0
  262. package/dist/node/portal/clipboard.js +161 -130
  263. package/dist/node/portal/clipboard.js.map +1 -0
  264. package/dist/node/portal/discovery.js +51 -45
  265. package/dist/node/portal/discovery.js.map +1 -0
  266. package/dist/node/portal/forward.js +64 -58
  267. package/dist/node/portal/forward.js.map +1 -0
  268. package/dist/node/portal/index.js +246 -221
  269. package/dist/node/portal/index.js.map +1 -0
  270. package/dist/node/portal/multiplexer.js +192 -182
  271. package/dist/node/portal/multiplexer.js.map +1 -0
  272. package/dist/node/portal/permissions.js +102 -70
  273. package/dist/node/portal/permissions.js.map +1 -0
  274. package/dist/node/portal/protocol.js +153 -116
  275. package/dist/node/portal/protocol.js.map +1 -0
  276. package/dist/node/portal/screen.js +80 -69
  277. package/dist/node/portal/screen.js.map +1 -0
  278. package/dist/node/portal/session.js +124 -117
  279. package/dist/node/portal/session.js.map +1 -0
  280. package/dist/node/portal/shell.js +140 -113
  281. package/dist/node/portal/shell.js.map +1 -0
  282. package/dist/node/portal/stream.js +77 -75
  283. package/dist/node/portal/stream.js.map +1 -0
  284. package/dist/node/portal/transfer.js +190 -167
  285. package/dist/node/portal/transfer.js.map +1 -0
  286. package/dist/node/portal/ui.js +124 -99
  287. package/dist/node/portal/ui.js.map +1 -0
  288. package/dist/node/remote-desktop/compile-helper.js +50 -45
  289. package/dist/node/remote-desktop/compile-helper.js.map +1 -0
  290. package/dist/node/remote-desktop/index.js +215 -187
  291. package/dist/node/remote-desktop/index.js.map +1 -0
  292. package/dist/node/remote-desktop/protocol.js +45 -29
  293. package/dist/node/remote-desktop/protocol.js.map +1 -0
  294. package/dist/node/runtime.js +493 -410
  295. package/dist/node/runtime.js.map +1 -0
  296. package/dist/server/handlers/__test-utils__/test-db.js +39 -89
  297. package/dist/server/handlers/__test-utils__/test-db.js.map +1 -0
  298. package/dist/server/handlers/analytics.js +467 -261
  299. package/dist/server/handlers/analytics.js.map +1 -0
  300. package/dist/server/handlers/api-docs.d.ts +6 -0
  301. package/dist/server/handlers/api-docs.js +1613 -0
  302. package/dist/server/handlers/api-docs.js.map +1 -0
  303. package/dist/server/handlers/api-keys.js +295 -232
  304. package/dist/server/handlers/api-keys.js.map +1 -0
  305. package/dist/server/handlers/billing.js +330 -239
  306. package/dist/server/handlers/billing.js.map +1 -0
  307. package/dist/server/handlers/browser.js +468 -395
  308. package/dist/server/handlers/browser.js.map +1 -0
  309. package/dist/server/handlers/catalog.js +1377 -978
  310. package/dist/server/handlers/catalog.js.map +1 -0
  311. package/dist/server/handlers/clickhouse.js +157 -109
  312. package/dist/server/handlers/clickhouse.js.map +1 -0
  313. package/dist/server/handlers/comms.d.ts +0 -53
  314. package/dist/server/handlers/comms.js +1443 -970
  315. package/dist/server/handlers/comms.js.map +1 -0
  316. package/dist/server/handlers/creations.js +461 -394
  317. package/dist/server/handlers/creations.js.map +1 -0
  318. package/dist/server/handlers/crm.js +1082 -791
  319. package/dist/server/handlers/crm.js.map +1 -0
  320. package/dist/server/handlers/discovery.js +251 -232
  321. package/dist/server/handlers/discovery.js.map +1 -0
  322. package/dist/server/handlers/embeddings.js +241 -164
  323. package/dist/server/handlers/embeddings.js.map +1 -0
  324. package/dist/server/handlers/enrichment.js +887 -718
  325. package/dist/server/handlers/enrichment.js.map +1 -0
  326. package/dist/server/handlers/image-gen.js +467 -376
  327. package/dist/server/handlers/image-gen.js.map +1 -0
  328. package/dist/server/handlers/inventory.js +797 -424
  329. package/dist/server/handlers/inventory.js.map +1 -0
  330. package/dist/server/handlers/kali.js +272 -230
  331. package/dist/server/handlers/kali.js.map +1 -0
  332. package/dist/server/handlers/llm-providers.js +803 -580
  333. package/dist/server/handlers/llm-providers.js.map +1 -0
  334. package/dist/server/handlers/local-agent.js +133 -105
  335. package/dist/server/handlers/local-agent.js.map +1 -0
  336. package/dist/server/handlers/media.js +1179 -857
  337. package/dist/server/handlers/media.js.map +1 -0
  338. package/dist/server/handlers/meta-ads.js +2669 -2093
  339. package/dist/server/handlers/meta-ads.js.map +1 -0
  340. package/dist/server/handlers/nodes.js +1321 -913
  341. package/dist/server/handlers/nodes.js.map +1 -0
  342. package/dist/server/handlers/operations.js +183 -157
  343. package/dist/server/handlers/operations.js.map +1 -0
  344. package/dist/server/handlers/platform.js +346 -210
  345. package/dist/server/handlers/platform.js.map +1 -0
  346. package/dist/server/handlers/remove-bg.js +118 -86
  347. package/dist/server/handlers/remove-bg.js.map +1 -0
  348. package/dist/server/handlers/storefront.js +586 -446
  349. package/dist/server/handlers/storefront.js.map +1 -0
  350. package/dist/server/handlers/supply-chain.js +546 -326
  351. package/dist/server/handlers/supply-chain.js.map +1 -0
  352. package/dist/server/handlers/transcription.js +106 -97
  353. package/dist/server/handlers/transcription.js.map +1 -0
  354. package/dist/server/handlers/video-gen.js +593 -424
  355. package/dist/server/handlers/video-gen.js.map +1 -0
  356. package/dist/server/handlers/voice.js +1458 -1017
  357. package/dist/server/handlers/voice.js.map +1 -0
  358. package/dist/server/handlers/workflow-steps.js +2837 -2116
  359. package/dist/server/handlers/workflow-steps.js.map +1 -0
  360. package/dist/server/handlers/workflows.js +1630 -933
  361. package/dist/server/handlers/workflows.js.map +1 -0
  362. package/dist/server/index.js +3166 -2390
  363. package/dist/server/index.js.map +1 -0
  364. package/dist/server/lib/batch-client.js +471 -409
  365. package/dist/server/lib/batch-client.js.map +1 -0
  366. package/dist/server/lib/clickhouse-buffer.js +118 -104
  367. package/dist/server/lib/clickhouse-buffer.js.map +1 -0
  368. package/dist/server/lib/clickhouse-client.js +107 -107
  369. package/dist/server/lib/clickhouse-client.js.map +1 -0
  370. package/dist/server/lib/coa-renderer.js +1786 -356
  371. package/dist/server/lib/coa-renderer.js.map +1 -0
  372. package/dist/server/lib/code-worker-pool.js +227 -177
  373. package/dist/server/lib/code-worker-pool.js.map +1 -0
  374. package/dist/server/lib/code-worker.js +174 -164
  375. package/dist/server/lib/code-worker.js.map +1 -0
  376. package/dist/server/lib/compaction-service.d.ts +2 -12
  377. package/dist/server/lib/compaction-service.js +74 -184
  378. package/dist/server/lib/compaction-service.js.map +1 -0
  379. package/dist/server/lib/logger.js +36 -24
  380. package/dist/server/lib/logger.js.map +1 -0
  381. package/dist/server/lib/otel.js +101 -80
  382. package/dist/server/lib/otel.js.map +1 -0
  383. package/dist/server/lib/pdf-renderer.d.ts +1 -1
  384. package/dist/server/lib/pdf-renderer.js +954 -776
  385. package/dist/server/lib/pdf-renderer.js.map +1 -0
  386. package/dist/server/lib/prompt-sanitizer.js +188 -108
  387. package/dist/server/lib/prompt-sanitizer.js.map +1 -0
  388. package/dist/server/lib/provider-capabilities.js +136 -138
  389. package/dist/server/lib/provider-capabilities.js.map +1 -0
  390. package/dist/server/lib/provider-failover.js +190 -168
  391. package/dist/server/lib/provider-failover.js.map +1 -0
  392. package/dist/server/lib/rate-limiter.js +186 -117
  393. package/dist/server/lib/rate-limiter.js.map +1 -0
  394. package/dist/server/lib/react-pdf-layout.js +551 -382
  395. package/dist/server/lib/react-pdf-layout.js.map +1 -0
  396. package/dist/server/lib/server-agent-loop.d.ts +9 -0
  397. package/dist/server/lib/server-agent-loop.js +906 -624
  398. package/dist/server/lib/server-agent-loop.js.map +1 -0
  399. package/dist/server/lib/server-subagent.d.ts +2 -0
  400. package/dist/server/lib/server-subagent.js +260 -162
  401. package/dist/server/lib/server-subagent.js.map +1 -0
  402. package/dist/server/lib/session-checkpoint.js +105 -96
  403. package/dist/server/lib/session-checkpoint.js.map +1 -0
  404. package/dist/server/lib/ssrf-guard.js +193 -184
  405. package/dist/server/lib/ssrf-guard.js.map +1 -0
  406. package/dist/server/lib/supabase-client.js +94 -82
  407. package/dist/server/lib/supabase-client.js.map +1 -0
  408. package/dist/server/lib/template-resolver.js +154 -176
  409. package/dist/server/lib/template-resolver.js.map +1 -0
  410. package/dist/server/lib/utils.js +242 -133
  411. package/dist/server/lib/utils.js.map +1 -0
  412. package/dist/server/local-agent-gateway.d.ts +2 -2
  413. package/dist/server/local-agent-gateway.js +785 -627
  414. package/dist/server/local-agent-gateway.js.map +1 -0
  415. package/dist/server/providers/anthropic.js +254 -176
  416. package/dist/server/providers/anthropic.js.map +1 -0
  417. package/dist/server/providers/bedrock.js +221 -162
  418. package/dist/server/providers/bedrock.js.map +1 -0
  419. package/dist/server/providers/gemini.js +548 -418
  420. package/dist/server/providers/gemini.js.map +1 -0
  421. package/dist/server/providers/openai.js +571 -437
  422. package/dist/server/providers/openai.js.map +1 -0
  423. package/dist/server/providers/registry.js +23 -18
  424. package/dist/server/providers/registry.js.map +1 -0
  425. package/dist/server/providers/shared.js +123 -95
  426. package/dist/server/providers/shared.js.map +1 -0
  427. package/dist/server/providers/types.js +1 -11
  428. package/dist/server/providers/types.js.map +1 -0
  429. package/dist/server/proxy-handlers.js +209 -165
  430. package/dist/server/proxy-handlers.js.map +1 -0
  431. package/dist/server/tool-router.d.ts +13 -0
  432. package/dist/server/tool-router.js +960 -598
  433. package/dist/server/tool-router.js.map +1 -0
  434. package/dist/server/validation.js +248 -188
  435. package/dist/server/validation.js.map +1 -0
  436. package/dist/server/worker.js +202 -133
  437. package/dist/server/worker.js.map +1 -0
  438. package/dist/setup.d.ts +2 -2
  439. package/dist/setup.js +151 -147
  440. package/dist/setup.js.map +1 -0
  441. package/dist/shared/agent-core.d.ts +191 -24
  442. package/dist/shared/agent-core.js +971 -462
  443. package/dist/shared/agent-core.js.map +1 -0
  444. package/dist/shared/anthropic-types.js +1 -6
  445. package/dist/shared/anthropic-types.js.map +1 -0
  446. package/dist/shared/api-client.d.ts +17 -9
  447. package/dist/shared/api-client.js +419 -327
  448. package/dist/shared/api-client.js.map +1 -0
  449. package/dist/shared/compaction.d.ts +36 -0
  450. package/dist/shared/compaction.js +138 -0
  451. package/dist/shared/compaction.js.map +1 -0
  452. package/dist/shared/constants.js +67 -64
  453. package/dist/shared/constants.js.map +1 -0
  454. package/dist/shared/sse-parser.js +221 -219
  455. package/dist/shared/sse-parser.js.map +1 -0
  456. package/dist/shared/tool-dispatch.d.ts +4 -2
  457. package/dist/shared/tool-dispatch.js +226 -165
  458. package/dist/shared/tool-dispatch.js.map +1 -0
  459. package/dist/shared/types.js +1 -6
  460. package/dist/shared/types.js.map +1 -0
  461. package/dist/types/cli-highlight.d.js +2 -0
  462. package/dist/types/cli-highlight.d.js.map +1 -0
  463. package/dist/types/diff.d.js +2 -0
  464. package/dist/types/diff.d.js.map +1 -0
  465. package/dist/types/pdf-parse.d.js +2 -0
  466. package/dist/types/pdf-parse.d.js.map +1 -0
  467. package/dist/updater.d.ts +1 -1
  468. package/dist/updater.js +118 -92
  469. package/dist/updater.js.map +1 -0
  470. package/dist/webchat/widget.js +227 -380
  471. package/dist/webchat/widget.js.map +1 -0
  472. package/package.json +22 -10
  473. package/vendor/ink/build/ansi-tokenizer.d.ts +38 -0
  474. package/vendor/ink/build/ansi-tokenizer.js +316 -0
  475. package/vendor/ink/build/ansi-tokenizer.js.map +1 -0
  476. package/vendor/ink/build/apply-styles.js +175 -0
  477. package/vendor/ink/build/build-layout.js +77 -0
  478. package/vendor/ink/build/calculate-wrapped-text.js +53 -0
  479. package/vendor/ink/build/colorize.d.ts +3 -0
  480. package/vendor/ink/build/colorize.js +48 -0
  481. package/vendor/ink/build/colorize.js.map +1 -0
  482. package/vendor/ink/build/components/AccessibilityContext.d.ts +3 -0
  483. package/vendor/ink/build/components/AccessibilityContext.js +5 -0
  484. package/vendor/ink/build/components/AccessibilityContext.js.map +1 -0
  485. package/vendor/ink/build/components/App.d.ts +18 -0
  486. package/vendor/ink/build/components/App.js +351 -0
  487. package/vendor/ink/build/components/App.js.map +1 -0
  488. package/vendor/ink/build/components/AppContext.d.ts +15 -0
  489. package/vendor/ink/build/components/AppContext.js +11 -0
  490. package/vendor/ink/build/components/AppContext.js.map +1 -0
  491. package/vendor/ink/build/components/BackgroundContext.d.ts +4 -0
  492. package/vendor/ink/build/components/BackgroundContext.js +3 -0
  493. package/vendor/ink/build/components/BackgroundContext.js.map +1 -0
  494. package/vendor/ink/build/components/Box.d.ts +117 -0
  495. package/vendor/ink/build/components/Box.js +34 -0
  496. package/vendor/ink/build/components/Box.js.map +1 -0
  497. package/vendor/ink/build/components/Color.js +62 -0
  498. package/vendor/ink/build/components/Cursor.d.ts +83 -0
  499. package/vendor/ink/build/components/Cursor.js +53 -0
  500. package/vendor/ink/build/components/Cursor.js.map +1 -0
  501. package/vendor/ink/build/components/CursorContext.d.ts +11 -0
  502. package/vendor/ink/build/components/CursorContext.js +8 -0
  503. package/vendor/ink/build/components/CursorContext.js.map +1 -0
  504. package/vendor/ink/build/components/ErrorBoundary.d.ts +18 -0
  505. package/vendor/ink/build/components/ErrorBoundary.js +23 -0
  506. package/vendor/ink/build/components/ErrorBoundary.js.map +1 -0
  507. package/vendor/ink/build/components/ErrorOverview.d.ts +6 -0
  508. package/vendor/ink/build/components/ErrorOverview.js +84 -0
  509. package/vendor/ink/build/components/ErrorOverview.js.map +1 -0
  510. package/vendor/ink/build/components/FocusContext.d.ts +16 -0
  511. package/vendor/ink/build/components/FocusContext.js +17 -0
  512. package/vendor/ink/build/components/FocusContext.js.map +1 -0
  513. package/vendor/ink/build/components/Newline.d.ts +13 -0
  514. package/vendor/ink/build/components/Newline.js +8 -0
  515. package/vendor/ink/build/components/Newline.js.map +1 -0
  516. package/vendor/ink/build/components/Spacer.d.ts +7 -0
  517. package/vendor/ink/build/components/Spacer.js +11 -0
  518. package/vendor/ink/build/components/Spacer.js.map +1 -0
  519. package/vendor/ink/build/components/Static.d.ts +24 -0
  520. package/vendor/ink/build/components/Static.js +28 -0
  521. package/vendor/ink/build/components/Static.js.map +1 -0
  522. package/vendor/ink/build/components/StderrContext.d.ts +15 -0
  523. package/vendor/ink/build/components/StderrContext.js +13 -0
  524. package/vendor/ink/build/components/StderrContext.js.map +1 -0
  525. package/vendor/ink/build/components/StdinContext.d.ts +22 -0
  526. package/vendor/ink/build/components/StdinContext.js +19 -0
  527. package/vendor/ink/build/components/StdinContext.js.map +1 -0
  528. package/vendor/ink/build/components/StdoutContext.d.ts +15 -0
  529. package/vendor/ink/build/components/StdoutContext.js +13 -0
  530. package/vendor/ink/build/components/StdoutContext.js.map +1 -0
  531. package/vendor/ink/build/components/Text.d.ts +55 -0
  532. package/vendor/ink/build/components/Text.js +50 -0
  533. package/vendor/ink/build/components/Text.js.map +1 -0
  534. package/vendor/ink/build/components/Transform.d.ts +16 -0
  535. package/vendor/ink/build/components/Transform.js +15 -0
  536. package/vendor/ink/build/components/Transform.js.map +1 -0
  537. package/vendor/ink/build/cursor-helpers.d.ts +38 -0
  538. package/vendor/ink/build/cursor-helpers.js +56 -0
  539. package/vendor/ink/build/cursor-helpers.js.map +1 -0
  540. package/vendor/ink/build/devtools-window-polyfill.d.ts +1 -0
  541. package/vendor/ink/build/devtools-window-polyfill.js +65 -0
  542. package/vendor/ink/build/devtools-window-polyfill.js.map +1 -0
  543. package/vendor/ink/build/devtools.d.ts +1 -0
  544. package/vendor/ink/build/devtools.js +11 -0
  545. package/vendor/ink/build/devtools.js.map +1 -0
  546. package/vendor/ink/build/dom.d.ts +56 -0
  547. package/vendor/ink/build/dom.js +124 -0
  548. package/vendor/ink/build/dom.js.map +1 -0
  549. package/vendor/ink/build/experimental/apply-style.js +140 -0
  550. package/vendor/ink/build/experimental/dom.js +123 -0
  551. package/vendor/ink/build/experimental/output.js +91 -0
  552. package/vendor/ink/build/experimental/reconciler.js +141 -0
  553. package/vendor/ink/build/experimental/renderer.js +81 -0
  554. package/vendor/ink/build/get-max-width.d.ts +3 -0
  555. package/vendor/ink/build/get-max-width.js +10 -0
  556. package/vendor/ink/build/get-max-width.js.map +1 -0
  557. package/vendor/ink/build/hooks/use-app.d.ts +5 -0
  558. package/vendor/ink/build/hooks/use-app.js +8 -0
  559. package/vendor/ink/build/hooks/use-app.js.map +1 -0
  560. package/vendor/ink/build/hooks/use-cursor.d.ts +12 -0
  561. package/vendor/ink/build/hooks/use-cursor.js +29 -0
  562. package/vendor/ink/build/hooks/use-cursor.js.map +1 -0
  563. package/vendor/ink/build/hooks/use-focus-manager.d.ts +28 -0
  564. package/vendor/ink/build/hooks/use-focus-manager.js +17 -0
  565. package/vendor/ink/build/hooks/use-focus-manager.js.map +1 -0
  566. package/vendor/ink/build/hooks/use-focus.d.ts +29 -0
  567. package/vendor/ink/build/hooks/use-focus.js +42 -0
  568. package/vendor/ink/build/hooks/use-focus.js.map +1 -0
  569. package/vendor/ink/build/hooks/use-input.d.ts +131 -0
  570. package/vendor/ink/build/hooks/use-input.js +124 -0
  571. package/vendor/ink/build/hooks/use-input.js.map +1 -0
  572. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.d.ts +5 -0
  573. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js +11 -0
  574. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
  575. package/vendor/ink/build/hooks/use-stderr.d.ts +5 -0
  576. package/vendor/ink/build/hooks/use-stderr.js +8 -0
  577. package/vendor/ink/build/hooks/use-stderr.js.map +1 -0
  578. package/vendor/ink/build/hooks/use-stdin.d.ts +5 -0
  579. package/vendor/ink/build/hooks/use-stdin.js +8 -0
  580. package/vendor/ink/build/hooks/use-stdin.js.map +1 -0
  581. package/vendor/ink/build/hooks/use-stdout.d.ts +5 -0
  582. package/vendor/ink/build/hooks/use-stdout.js +8 -0
  583. package/vendor/ink/build/hooks/use-stdout.js.map +1 -0
  584. package/vendor/ink/build/hooks/useInput.js +38 -0
  585. package/vendor/ink/build/index.d.ts +34 -0
  586. package/vendor/ink/build/index.js +20 -0
  587. package/vendor/ink/build/index.js.map +1 -0
  588. package/vendor/ink/build/ink.d.ts +90 -0
  589. package/vendor/ink/build/ink.js +654 -0
  590. package/vendor/ink/build/ink.js.map +1 -0
  591. package/vendor/ink/build/input-parser.d.ts +7 -0
  592. package/vendor/ink/build/input-parser.js +154 -0
  593. package/vendor/ink/build/input-parser.js.map +1 -0
  594. package/vendor/ink/build/instance.js +205 -0
  595. package/vendor/ink/build/instances.d.ts +3 -0
  596. package/vendor/ink/build/instances.js +8 -0
  597. package/vendor/ink/build/instances.js.map +1 -0
  598. package/vendor/ink/build/kitty-keyboard.d.ts +23 -0
  599. package/vendor/ink/build/kitty-keyboard.js +32 -0
  600. package/vendor/ink/build/kitty-keyboard.js.map +1 -0
  601. package/vendor/ink/build/layout.d.ts +7 -0
  602. package/vendor/ink/build/layout.js +33 -0
  603. package/vendor/ink/build/layout.js.map +1 -0
  604. package/vendor/ink/build/log-update.d.ts +19 -0
  605. package/vendor/ink/build/log-update.js +243 -0
  606. package/vendor/ink/build/log-update.js.map +1 -0
  607. package/vendor/ink/build/measure-element.d.ts +16 -0
  608. package/vendor/ink/build/measure-element.js +9 -0
  609. package/vendor/ink/build/measure-element.js.map +1 -0
  610. package/vendor/ink/build/measure-text.d.ts +6 -0
  611. package/vendor/ink/build/measure-text.js +21 -0
  612. package/vendor/ink/build/measure-text.js.map +1 -0
  613. package/vendor/ink/build/options.d.ts +52 -0
  614. package/vendor/ink/build/options.js +2 -0
  615. package/vendor/ink/build/options.js.map +1 -0
  616. package/vendor/ink/build/output.d.ts +35 -0
  617. package/vendor/ink/build/output.js +183 -0
  618. package/vendor/ink/build/output.js.map +1 -0
  619. package/vendor/ink/build/parse-keypress.d.ts +22 -0
  620. package/vendor/ink/build/parse-keypress.js +493 -0
  621. package/vendor/ink/build/parse-keypress.js.map +1 -0
  622. package/vendor/ink/build/reconciler.d.ts +4 -0
  623. package/vendor/ink/build/reconciler.js +274 -0
  624. package/vendor/ink/build/reconciler.js.map +1 -0
  625. package/vendor/ink/build/render-background.d.ts +4 -0
  626. package/vendor/ink/build/render-background.js +25 -0
  627. package/vendor/ink/build/render-background.js.map +1 -0
  628. package/vendor/ink/build/render-border.d.ts +4 -0
  629. package/vendor/ink/build/render-border.js +73 -0
  630. package/vendor/ink/build/render-border.js.map +1 -0
  631. package/vendor/ink/build/render-node-to-output.d.ts +14 -0
  632. package/vendor/ink/build/render-node-to-output.js +147 -0
  633. package/vendor/ink/build/render-node-to-output.js.map +1 -0
  634. package/vendor/ink/build/render-to-string.d.ts +38 -0
  635. package/vendor/ink/build/render-to-string.js +115 -0
  636. package/vendor/ink/build/render-to-string.js.map +1 -0
  637. package/vendor/ink/build/render.d.ts +121 -0
  638. package/vendor/ink/build/render.js +55 -0
  639. package/vendor/ink/build/render.js.map +1 -0
  640. package/vendor/ink/build/renderer.d.ts +8 -0
  641. package/vendor/ink/build/renderer.js +55 -0
  642. package/vendor/ink/build/renderer.js.map +1 -0
  643. package/vendor/ink/build/sanitize-ansi.d.ts +2 -0
  644. package/vendor/ink/build/sanitize-ansi.js +27 -0
  645. package/vendor/ink/build/sanitize-ansi.js.map +1 -0
  646. package/vendor/ink/build/screen-reader-update.d.ts +13 -0
  647. package/vendor/ink/build/screen-reader-update.js +38 -0
  648. package/vendor/ink/build/screen-reader-update.js.map +1 -0
  649. package/vendor/ink/build/squash-text-nodes.d.ts +3 -0
  650. package/vendor/ink/build/squash-text-nodes.js +36 -0
  651. package/vendor/ink/build/squash-text-nodes.js.map +1 -0
  652. package/vendor/ink/build/styles.d.ts +240 -0
  653. package/vendor/ink/build/styles.js +232 -0
  654. package/vendor/ink/build/styles.js.map +1 -0
  655. package/vendor/ink/build/utils.d.ts +2 -0
  656. package/vendor/ink/build/utils.js +4 -0
  657. package/vendor/ink/build/utils.js.map +1 -0
  658. package/vendor/ink/build/wrap-text.d.ts +3 -0
  659. package/vendor/ink/build/wrap-text.js +31 -0
  660. package/vendor/ink/build/wrap-text.js.map +1 -0
  661. package/vendor/ink/build/write-synchronized.d.ts +4 -0
  662. package/vendor/ink/build/write-synchronized.js +7 -0
  663. package/vendor/ink/build/write-synchronized.js.map +1 -0
  664. package/vendor/ink/license +10 -0
  665. package/vendor/ink/node_modules/@types/node/LICENSE +21 -0
  666. package/vendor/ink/node_modules/@types/node/README.md +15 -0
  667. package/vendor/ink/node_modules/@types/node/assert/strict.d.ts +105 -0
  668. package/vendor/ink/node_modules/@types/node/assert.d.ts +955 -0
  669. package/vendor/ink/node_modules/@types/node/async_hooks.d.ts +623 -0
  670. package/vendor/ink/node_modules/@types/node/buffer.buffer.d.ts +466 -0
  671. package/vendor/ink/node_modules/@types/node/buffer.d.ts +1810 -0
  672. package/vendor/ink/node_modules/@types/node/child_process.d.ts +1428 -0
  673. package/vendor/ink/node_modules/@types/node/cluster.d.ts +486 -0
  674. package/vendor/ink/node_modules/@types/node/compatibility/iterators.d.ts +21 -0
  675. package/vendor/ink/node_modules/@types/node/console.d.ts +151 -0
  676. package/vendor/ink/node_modules/@types/node/constants.d.ts +20 -0
  677. package/vendor/ink/node_modules/@types/node/crypto.d.ts +4065 -0
  678. package/vendor/ink/node_modules/@types/node/dgram.d.ts +564 -0
  679. package/vendor/ink/node_modules/@types/node/diagnostics_channel.d.ts +576 -0
  680. package/vendor/ink/node_modules/@types/node/dns/promises.d.ts +503 -0
  681. package/vendor/ink/node_modules/@types/node/dns.d.ts +922 -0
  682. package/vendor/ink/node_modules/@types/node/domain.d.ts +166 -0
  683. package/vendor/ink/node_modules/@types/node/events.d.ts +1054 -0
  684. package/vendor/ink/node_modules/@types/node/fs/promises.d.ts +1329 -0
  685. package/vendor/ink/node_modules/@types/node/fs.d.ts +4676 -0
  686. package/vendor/ink/node_modules/@types/node/globals.d.ts +150 -0
  687. package/vendor/ink/node_modules/@types/node/globals.typedarray.d.ts +101 -0
  688. package/vendor/ink/node_modules/@types/node/http.d.ts +2167 -0
  689. package/vendor/ink/node_modules/@types/node/http2.d.ts +2480 -0
  690. package/vendor/ink/node_modules/@types/node/https.d.ts +405 -0
  691. package/vendor/ink/node_modules/@types/node/index.d.ts +115 -0
  692. package/vendor/ink/node_modules/@types/node/inspector/promises.d.ts +41 -0
  693. package/vendor/ink/node_modules/@types/node/inspector.d.ts +224 -0
  694. package/vendor/ink/node_modules/@types/node/inspector.generated.d.ts +4226 -0
  695. package/vendor/ink/node_modules/@types/node/module.d.ts +819 -0
  696. package/vendor/ink/node_modules/@types/node/net.d.ts +933 -0
  697. package/vendor/ink/node_modules/@types/node/os.d.ts +507 -0
  698. package/vendor/ink/node_modules/@types/node/package.json +155 -0
  699. package/vendor/ink/node_modules/@types/node/path/posix.d.ts +8 -0
  700. package/vendor/ink/node_modules/@types/node/path/win32.d.ts +8 -0
  701. package/vendor/ink/node_modules/@types/node/path.d.ts +187 -0
  702. package/vendor/ink/node_modules/@types/node/perf_hooks.d.ts +643 -0
  703. package/vendor/ink/node_modules/@types/node/process.d.ts +2156 -0
  704. package/vendor/ink/node_modules/@types/node/punycode.d.ts +117 -0
  705. package/vendor/ink/node_modules/@types/node/querystring.d.ts +152 -0
  706. package/vendor/ink/node_modules/@types/node/quic.d.ts +910 -0
  707. package/vendor/ink/node_modules/@types/node/readline/promises.d.ts +161 -0
  708. package/vendor/ink/node_modules/@types/node/readline.d.ts +541 -0
  709. package/vendor/ink/node_modules/@types/node/repl.d.ts +415 -0
  710. package/vendor/ink/node_modules/@types/node/sea.d.ts +162 -0
  711. package/vendor/ink/node_modules/@types/node/sqlite.d.ts +955 -0
  712. package/vendor/ink/node_modules/@types/node/stream/consumers.d.ts +38 -0
  713. package/vendor/ink/node_modules/@types/node/stream/promises.d.ts +211 -0
  714. package/vendor/ink/node_modules/@types/node/stream/web.d.ts +296 -0
  715. package/vendor/ink/node_modules/@types/node/stream.d.ts +1760 -0
  716. package/vendor/ink/node_modules/@types/node/string_decoder.d.ts +67 -0
  717. package/vendor/ink/node_modules/@types/node/test/reporters.d.ts +96 -0
  718. package/vendor/ink/node_modules/@types/node/test.d.ts +2240 -0
  719. package/vendor/ink/node_modules/@types/node/timers/promises.d.ts +108 -0
  720. package/vendor/ink/node_modules/@types/node/timers.d.ts +159 -0
  721. package/vendor/ink/node_modules/@types/node/tls.d.ts +1198 -0
  722. package/vendor/ink/node_modules/@types/node/trace_events.d.ts +197 -0
  723. package/vendor/ink/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +462 -0
  724. package/vendor/ink/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +71 -0
  725. package/vendor/ink/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +36 -0
  726. package/vendor/ink/node_modules/@types/node/ts5.6/index.d.ts +117 -0
  727. package/vendor/ink/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +72 -0
  728. package/vendor/ink/node_modules/@types/node/ts5.7/index.d.ts +117 -0
  729. package/vendor/ink/node_modules/@types/node/tty.d.ts +250 -0
  730. package/vendor/ink/node_modules/@types/node/url.d.ts +519 -0
  731. package/vendor/ink/node_modules/@types/node/util/types.d.ts +558 -0
  732. package/vendor/ink/node_modules/@types/node/util.d.ts +1662 -0
  733. package/vendor/ink/node_modules/@types/node/v8.d.ts +983 -0
  734. package/vendor/ink/node_modules/@types/node/vm.d.ts +1208 -0
  735. package/vendor/ink/node_modules/@types/node/wasi.d.ts +202 -0
  736. package/vendor/ink/node_modules/@types/node/web-globals/abortcontroller.d.ts +59 -0
  737. package/vendor/ink/node_modules/@types/node/web-globals/blob.d.ts +23 -0
  738. package/vendor/ink/node_modules/@types/node/web-globals/console.d.ts +9 -0
  739. package/vendor/ink/node_modules/@types/node/web-globals/crypto.d.ts +39 -0
  740. package/vendor/ink/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  741. package/vendor/ink/node_modules/@types/node/web-globals/encoding.d.ts +11 -0
  742. package/vendor/ink/node_modules/@types/node/web-globals/events.d.ts +106 -0
  743. package/vendor/ink/node_modules/@types/node/web-globals/fetch.d.ts +69 -0
  744. package/vendor/ink/node_modules/@types/node/web-globals/importmeta.d.ts +13 -0
  745. package/vendor/ink/node_modules/@types/node/web-globals/messaging.d.ts +23 -0
  746. package/vendor/ink/node_modules/@types/node/web-globals/navigator.d.ts +25 -0
  747. package/vendor/ink/node_modules/@types/node/web-globals/performance.d.ts +45 -0
  748. package/vendor/ink/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  749. package/vendor/ink/node_modules/@types/node/web-globals/streams.d.ts +115 -0
  750. package/vendor/ink/node_modules/@types/node/web-globals/timers.d.ts +44 -0
  751. package/vendor/ink/node_modules/@types/node/web-globals/url.d.ts +24 -0
  752. package/vendor/ink/node_modules/@types/node/worker_threads.d.ts +717 -0
  753. package/vendor/ink/node_modules/@types/node/zlib.d.ts +618 -0
  754. package/vendor/ink/node_modules/node-pty/LICENSE +69 -0
  755. package/vendor/ink/node_modules/node-pty/README.md +164 -0
  756. package/vendor/ink/node_modules/node-pty/binding.gyp +150 -0
  757. package/vendor/ink/node_modules/node-pty/lib/conpty_console_list_agent.js +25 -0
  758. package/vendor/ink/node_modules/node-pty/lib/eventEmitter2.js +47 -0
  759. package/vendor/ink/node_modules/node-pty/lib/index.js +52 -0
  760. package/vendor/ink/node_modules/node-pty/lib/interfaces.js +7 -0
  761. package/vendor/ink/node_modules/node-pty/lib/shared/conout.js +11 -0
  762. package/vendor/ink/node_modules/node-pty/lib/terminal.js +190 -0
  763. package/vendor/ink/node_modules/node-pty/lib/types.js +7 -0
  764. package/vendor/ink/node_modules/node-pty/lib/unixTerminal.js +349 -0
  765. package/vendor/ink/node_modules/node-pty/lib/utils.js +39 -0
  766. package/vendor/ink/node_modules/node-pty/lib/windowsConoutConnection.js +125 -0
  767. package/vendor/ink/node_modules/node-pty/lib/windowsPtyAgent.js +287 -0
  768. package/vendor/ink/node_modules/node-pty/lib/windowsTerminal.js +201 -0
  769. package/vendor/ink/node_modules/node-pty/lib/worker/conoutSocketWorker.js +22 -0
  770. package/vendor/ink/node_modules/node-pty/package.json +65 -0
  771. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/pty.node +0 -0
  772. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/spawn-helper +0 -0
  773. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/pty.node +0 -0
  774. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/spawn-helper +0 -0
  775. package/vendor/ink/node_modules/node-pty/prebuilds/linux-arm64/pty.node +0 -0
  776. package/vendor/ink/node_modules/node-pty/prebuilds/linux-x64/pty.node +0 -0
  777. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
  778. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
  779. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
  780. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.pdb +0 -0
  781. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
  782. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.pdb +0 -0
  783. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
  784. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
  785. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.node +0 -0
  786. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.pdb +0 -0
  787. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
  788. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.pdb +0 -0
  789. package/vendor/ink/node_modules/node-pty/scripts/post-install.js +76 -0
  790. package/vendor/ink/node_modules/node-pty/scripts/prebuild.js +34 -0
  791. package/vendor/ink/node_modules/node-pty/src/unix/pty.cc +875 -0
  792. package/vendor/ink/node_modules/node-pty/src/unix/spawn-helper.cc +23 -0
  793. package/vendor/ink/node_modules/node-pty/src/win/conpty.cc +582 -0
  794. package/vendor/ink/node_modules/node-pty/src/win/conpty.h +41 -0
  795. package/vendor/ink/node_modules/node-pty/src/win/conpty_console_list.cc +44 -0
  796. package/vendor/ink/node_modules/node-pty/src/win/path_util.cc +95 -0
  797. package/vendor/ink/node_modules/node-pty/src/win/path_util.h +26 -0
  798. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/OpenConsole.exe +0 -0
  799. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/conpty.dll +0 -0
  800. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/OpenConsole.exe +0 -0
  801. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/conpty.dll +0 -0
  802. package/vendor/ink/node_modules/node-pty/typings/node-pty.d.ts +215 -0
  803. package/vendor/ink/node_modules/undici-types/LICENSE +21 -0
  804. package/vendor/ink/node_modules/undici-types/README.md +6 -0
  805. package/vendor/ink/node_modules/undici-types/agent.d.ts +32 -0
  806. package/vendor/ink/node_modules/undici-types/api.d.ts +43 -0
  807. package/vendor/ink/node_modules/undici-types/balanced-pool.d.ts +30 -0
  808. package/vendor/ink/node_modules/undici-types/cache-interceptor.d.ts +173 -0
  809. package/vendor/ink/node_modules/undici-types/cache.d.ts +36 -0
  810. package/vendor/ink/node_modules/undici-types/client-stats.d.ts +15 -0
  811. package/vendor/ink/node_modules/undici-types/client.d.ts +108 -0
  812. package/vendor/ink/node_modules/undici-types/connector.d.ts +34 -0
  813. package/vendor/ink/node_modules/undici-types/content-type.d.ts +21 -0
  814. package/vendor/ink/node_modules/undici-types/cookies.d.ts +30 -0
  815. package/vendor/ink/node_modules/undici-types/diagnostics-channel.d.ts +74 -0
  816. package/vendor/ink/node_modules/undici-types/dispatcher.d.ts +276 -0
  817. package/vendor/ink/node_modules/undici-types/env-http-proxy-agent.d.ts +22 -0
  818. package/vendor/ink/node_modules/undici-types/errors.d.ts +161 -0
  819. package/vendor/ink/node_modules/undici-types/eventsource.d.ts +66 -0
  820. package/vendor/ink/node_modules/undici-types/fetch.d.ts +211 -0
  821. package/vendor/ink/node_modules/undici-types/formdata.d.ts +108 -0
  822. package/vendor/ink/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  823. package/vendor/ink/node_modules/undici-types/global-origin.d.ts +7 -0
  824. package/vendor/ink/node_modules/undici-types/h2c-client.d.ts +73 -0
  825. package/vendor/ink/node_modules/undici-types/handlers.d.ts +15 -0
  826. package/vendor/ink/node_modules/undici-types/header.d.ts +160 -0
  827. package/vendor/ink/node_modules/undici-types/index.d.ts +88 -0
  828. package/vendor/ink/node_modules/undici-types/interceptors.d.ts +73 -0
  829. package/vendor/ink/node_modules/undici-types/mock-agent.d.ts +68 -0
  830. package/vendor/ink/node_modules/undici-types/mock-call-history.d.ts +111 -0
  831. package/vendor/ink/node_modules/undici-types/mock-client.d.ts +27 -0
  832. package/vendor/ink/node_modules/undici-types/mock-errors.d.ts +12 -0
  833. package/vendor/ink/node_modules/undici-types/mock-interceptor.d.ts +94 -0
  834. package/vendor/ink/node_modules/undici-types/mock-pool.d.ts +27 -0
  835. package/vendor/ink/node_modules/undici-types/package.json +55 -0
  836. package/vendor/ink/node_modules/undici-types/patch.d.ts +29 -0
  837. package/vendor/ink/node_modules/undici-types/pool-stats.d.ts +19 -0
  838. package/vendor/ink/node_modules/undici-types/pool.d.ts +41 -0
  839. package/vendor/ink/node_modules/undici-types/proxy-agent.d.ts +29 -0
  840. package/vendor/ink/node_modules/undici-types/readable.d.ts +68 -0
  841. package/vendor/ink/node_modules/undici-types/retry-agent.d.ts +8 -0
  842. package/vendor/ink/node_modules/undici-types/retry-handler.d.ts +125 -0
  843. package/vendor/ink/node_modules/undici-types/round-robin-pool.d.ts +41 -0
  844. package/vendor/ink/node_modules/undici-types/snapshot-agent.d.ts +109 -0
  845. package/vendor/ink/node_modules/undici-types/util.d.ts +18 -0
  846. package/vendor/ink/node_modules/undici-types/utility.d.ts +7 -0
  847. package/vendor/ink/node_modules/undici-types/webidl.d.ts +341 -0
  848. package/vendor/ink/node_modules/undici-types/websocket.d.ts +186 -0
  849. package/vendor/ink/package.json +201 -0
  850. package/vendor/ink/readme.md +2636 -0
  851. package/bin/swag-agent.js +0 -9
  852. package/dist/server/lib/pg-rate-limiter.d.ts +0 -21
  853. package/dist/server/lib/pg-rate-limiter.js +0 -86
@@ -4,220 +4,255 @@
4
4
  * - AskUserQuestion: Multi-choice questions with optional custom input
5
5
  * - Plan Mode: Structured planning workflow with user approval
6
6
  */
7
+
7
8
  import { EventEmitter } from "events";
8
9
  import { readFileSync, existsSync } from "fs";
9
10
  import { resolve } from "path";
11
+
12
+ // ============================================================================
13
+ // TYPES
14
+ // ============================================================================
15
+
10
16
  // ============================================================================
11
17
  // GLOBAL STATE
12
18
  // ============================================================================
19
+
13
20
  // Pending question requests (resolved by UI)
14
21
  const pendingQuestions = new Map();
22
+
15
23
  // Plan mode state
16
- let planModeState = { active: false };
24
+ let planModeState = {
25
+ active: false
26
+ };
27
+
17
28
  // Plan approval state — blocks exit_plan_mode until UI resolves
18
29
  let pendingPlanApproval = null;
30
+
19
31
  // Event emitter for UI coordination
20
32
  export const interactiveEvents = new EventEmitter();
33
+
21
34
  // ============================================================================
22
35
  // ASK USER QUESTION
23
36
  // ============================================================================
37
+
24
38
  export function createQuestionRequest(questions) {
25
- const id = `question-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
26
- return new Promise((resolve, reject) => {
27
- const request = {
28
- id,
29
- questions,
30
- resolve,
31
- reject,
32
- };
33
- pendingQuestions.set(id, request);
34
- // Emit event for UI to pick up
35
- interactiveEvents.emit("question", request);
36
- });
39
+ const id = `question-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
40
+ return new Promise((resolve, reject) => {
41
+ const request = {
42
+ id,
43
+ questions,
44
+ resolve,
45
+ reject
46
+ };
47
+ pendingQuestions.set(id, request);
48
+
49
+ // Emit event for UI to pick up
50
+ interactiveEvents.emit("question", request);
51
+ });
37
52
  }
38
53
  export function getPendingQuestion() {
39
- // Return first pending question
40
- return pendingQuestions.values().next().value;
54
+ // Return first pending question
55
+ return pendingQuestions.values().next().value;
41
56
  }
42
57
  export function resolveQuestion(id, answers) {
43
- const request = pendingQuestions.get(id);
44
- if (!request)
45
- return false;
46
- pendingQuestions.delete(id);
47
- request.resolve(answers);
48
- return true;
58
+ const request = pendingQuestions.get(id);
59
+ if (!request) return false;
60
+ pendingQuestions.delete(id);
61
+ request.resolve(answers);
62
+ return true;
49
63
  }
50
64
  export function rejectQuestion(id, error) {
51
- const request = pendingQuestions.get(id);
52
- if (!request)
53
- return false;
54
- pendingQuestions.delete(id);
55
- request.reject(error);
56
- return true;
65
+ const request = pendingQuestions.get(id);
66
+ if (!request) return false;
67
+ pendingQuestions.delete(id);
68
+ request.reject(error);
69
+ return true;
57
70
  }
71
+
58
72
  // ============================================================================
59
73
  // PLAN MODE
60
74
  // ============================================================================
75
+
61
76
  export function enterPlanMode(planFile) {
62
- if (planModeState.active) {
63
- return {
64
- success: false,
65
- message: "Already in plan mode. Use ExitPlanMode to finish planning.",
66
- };
67
- }
68
- planModeState = {
69
- active: true,
70
- planFile: planFile || ".whale/plan.md",
71
- startedAt: new Date(),
72
- };
73
- interactiveEvents.emit("planModeEntered", planModeState);
77
+ if (planModeState.active) {
74
78
  return {
75
- success: true,
76
- message: `Entered plan mode. Write your plan to ${planModeState.planFile}, then use ExitPlanMode when ready for approval.`,
79
+ success: false,
80
+ message: "Already in plan mode. Use ExitPlanMode to finish planning."
77
81
  };
82
+ }
83
+ planModeState = {
84
+ active: true,
85
+ planFile: planFile || ".whale/plan.md",
86
+ startedAt: new Date()
87
+ };
88
+ interactiveEvents.emit("planModeEntered", planModeState);
89
+ return {
90
+ success: true,
91
+ message: `Entered plan mode. Write your plan to ${planModeState.planFile}, then use ExitPlanMode when ready for approval.`
92
+ };
78
93
  }
79
94
  export function exitPlanMode() {
80
- if (!planModeState.active) {
81
- return {
82
- success: false,
83
- message: "Not in plan mode. Use EnterPlanMode first.",
84
- };
85
- }
86
- const planFile = planModeState.planFile || ".whale/plan.md";
87
- planModeState = { active: false };
88
- // Read the plan file content
89
- const fullPath = resolve(process.cwd(), planFile);
90
- let planContent = "";
91
- if (existsSync(fullPath)) {
92
- try {
93
- planContent = readFileSync(fullPath, "utf-8").trim();
94
- }
95
- catch { /* ignore read errors */ }
96
- }
97
- // Emit event for UI to show approval overlay
98
- interactiveEvents.emit("planModeExited", { planFile, planContent });
99
- // Set up pending approval state so UI can resolve it via resolvePlanApproval()
100
- pendingPlanApproval = {
101
- resolve: () => { },
102
- reject: () => { },
103
- planContent,
104
- planFile,
95
+ if (!planModeState.active) {
96
+ return {
97
+ success: false,
98
+ message: "Not in plan mode. Use EnterPlanMode first."
105
99
  };
106
- if (planContent) {
107
- return {
108
- success: true,
109
- message: planContent,
110
- };
111
- }
100
+ }
101
+ const planFile = planModeState.planFile || ".whale/plan.md";
102
+ planModeState = {
103
+ active: false
104
+ };
105
+
106
+ // Read the plan file content
107
+ const fullPath = resolve(process.cwd(), planFile);
108
+ let planContent = "";
109
+ if (existsSync(fullPath)) {
110
+ try {
111
+ planContent = readFileSync(fullPath, "utf-8").trim();
112
+ } catch {/* ignore read errors */}
113
+ }
114
+
115
+ // Emit event for UI to show approval overlay
116
+ interactiveEvents.emit("planModeExited", {
117
+ planFile,
118
+ planContent
119
+ });
120
+
121
+ // Set up pending approval state so UI can resolve it via resolvePlanApproval()
122
+ pendingPlanApproval = {
123
+ resolve: () => {},
124
+ reject: () => {},
125
+ planContent,
126
+ planFile
127
+ };
128
+ if (planContent) {
112
129
  return {
113
- success: true,
114
- message: `Plan mode complete. Plan saved to ${planFile}.`,
130
+ success: true,
131
+ message: planContent
115
132
  };
133
+ }
134
+ return {
135
+ success: true,
136
+ message: `Plan mode complete. Plan saved to ${planFile}.`
137
+ };
116
138
  }
139
+
117
140
  /**
118
141
  * Wait for user to approve/reject the plan via the UI overlay.
119
142
  * Called by the agent loop after exitPlanMode() returns.
120
143
  */
121
144
  export async function waitForPlanApproval() {
122
- if (!pendingPlanApproval) {
123
- return { action: "execute" };
124
- }
125
- const { planContent, planFile } = pendingPlanApproval;
126
- const decision = await new Promise((resolvePromise, rejectPromise) => {
127
- pendingPlanApproval = {
128
- resolve: resolvePromise,
129
- reject: rejectPromise,
130
- planContent,
131
- planFile,
132
- };
133
- });
134
- return decision;
145
+ if (!pendingPlanApproval) {
146
+ return {
147
+ action: "execute"
148
+ };
149
+ }
150
+ const {
151
+ planContent,
152
+ planFile
153
+ } = pendingPlanApproval;
154
+ const decision = await new Promise((resolvePromise, rejectPromise) => {
155
+ pendingPlanApproval = {
156
+ resolve: resolvePromise,
157
+ reject: rejectPromise,
158
+ planContent,
159
+ planFile
160
+ };
161
+ });
162
+ return decision;
135
163
  }
136
164
  export function isPlanMode() {
137
- return planModeState.active;
165
+ return planModeState.active;
138
166
  }
139
167
  export function getPlanModeState() {
140
- return { ...planModeState };
168
+ return {
169
+ ...planModeState
170
+ };
141
171
  }
172
+
142
173
  // ============================================================================
143
174
  // PLAN APPROVAL — blocking resolution from UI
144
175
  // ============================================================================
176
+
145
177
  export function getPendingPlanApproval() {
146
- if (!pendingPlanApproval)
147
- return null;
148
- return { planContent: pendingPlanApproval.planContent, planFile: pendingPlanApproval.planFile };
178
+ if (!pendingPlanApproval) return null;
179
+ return {
180
+ planContent: pendingPlanApproval.planContent,
181
+ planFile: pendingPlanApproval.planFile
182
+ };
149
183
  }
150
184
  export function resolvePlanApproval(decision) {
151
- if (!pendingPlanApproval)
152
- return false;
153
- const { resolve } = pendingPlanApproval;
154
- pendingPlanApproval = null;
155
- resolve(decision);
156
- return true;
185
+ if (!pendingPlanApproval) return false;
186
+ const {
187
+ resolve
188
+ } = pendingPlanApproval;
189
+ pendingPlanApproval = null;
190
+ resolve(decision);
191
+ return true;
157
192
  }
193
+
158
194
  // ============================================================================
159
195
  // TOOL DEFINITIONS
160
196
  // ============================================================================
161
- export const INTERACTIVE_TOOL_DEFINITIONS = [
162
- {
163
- name: "ask_user_question",
164
- description: `Ask the user questions during execution. Use this to:
197
+
198
+ export const INTERACTIVE_TOOL_DEFINITIONS = [{
199
+ name: "ask_user_question",
200
+ description: `Ask the user questions during execution. Use this to:
165
201
  - Gather user preferences or requirements
166
202
  - Clarify ambiguous instructions
167
203
  - Get decisions on implementation choices
168
204
  - Offer choices about direction
169
205
 
170
206
  Users can always select "Other" to provide custom input.`,
171
- input_schema: {
172
- type: "object",
173
- properties: {
174
- questions: {
175
- type: "array",
176
- description: "1-4 questions to ask the user",
177
- items: {
178
- type: "object",
179
- properties: {
180
- question: {
181
- type: "string",
182
- description: "The complete question to ask (ends with ?)",
183
- },
184
- header: {
185
- type: "string",
186
- description: "Short label (max 12 chars) like 'Auth method' or 'Library'",
187
- },
188
- options: {
189
- type: "array",
190
- description: "2-4 choices (Other is added automatically)",
191
- items: {
192
- type: "object",
193
- properties: {
194
- label: {
195
- type: "string",
196
- description: "Concise choice text (1-5 words)",
197
- },
198
- description: {
199
- type: "string",
200
- description: "Explanation of what this choice means",
201
- },
202
- },
203
- required: ["label", "description"],
204
- },
205
- },
206
- multiSelect: {
207
- type: "boolean",
208
- description: "Allow selecting multiple options (default: false)",
209
- },
210
- },
211
- required: ["question", "header", "options"],
212
- },
207
+ input_schema: {
208
+ type: "object",
209
+ properties: {
210
+ questions: {
211
+ type: "array",
212
+ description: "1-4 questions to ask the user",
213
+ items: {
214
+ type: "object",
215
+ properties: {
216
+ question: {
217
+ type: "string",
218
+ description: "The complete question to ask (ends with ?)"
219
+ },
220
+ header: {
221
+ type: "string",
222
+ description: "Short label (max 12 chars) like 'Auth method' or 'Library'"
223
+ },
224
+ options: {
225
+ type: "array",
226
+ description: "2-4 choices (Other is added automatically)",
227
+ items: {
228
+ type: "object",
229
+ properties: {
230
+ label: {
231
+ type: "string",
232
+ description: "Concise choice text (1-5 words)"
233
+ },
234
+ description: {
235
+ type: "string",
236
+ description: "Explanation of what this choice means"
237
+ }
213
238
  },
239
+ required: ["label", "description"]
240
+ }
214
241
  },
215
- required: ["questions"],
216
- },
242
+ multiSelect: {
243
+ type: "boolean",
244
+ description: "Allow selecting multiple options (default: false)"
245
+ }
246
+ },
247
+ required: ["question", "header", "options"]
248
+ }
249
+ }
217
250
  },
218
- {
219
- name: "enter_plan_mode",
220
- description: `Enter plan mode for complex tasks requiring careful planning before implementation.
251
+ required: ["questions"]
252
+ }
253
+ }, {
254
+ name: "enter_plan_mode",
255
+ description: `Enter plan mode for complex tasks requiring careful planning before implementation.
221
256
 
222
257
  Use this when:
223
258
  - Multiple valid approaches exist with trade-offs
@@ -227,79 +262,100 @@ Use this when:
227
262
  - You need to ask clarifying questions before starting
228
263
 
229
264
  In plan mode, you explore the codebase and design an approach, then present it for user approval before implementing.`,
230
- input_schema: {
231
- type: "object",
232
- properties: {
233
- plan_file: {
234
- type: "string",
235
- description: "File to write the plan to (default: .whale/plan.md)",
236
- },
237
- },
238
- required: [],
239
- },
265
+ input_schema: {
266
+ type: "object",
267
+ properties: {
268
+ plan_file: {
269
+ type: "string",
270
+ description: "File to write the plan to (default: .whale/plan.md)"
271
+ }
240
272
  },
241
- {
242
- name: "exit_plan_mode",
243
- description: `Exit plan mode after writing your plan. The user will review and approve the plan before implementation begins.
273
+ required: []
274
+ }
275
+ }, {
276
+ name: "exit_plan_mode",
277
+ description: `Exit plan mode after writing your plan. The user will review and approve the plan before implementation begins.
244
278
 
245
279
  Only use this after you have:
246
280
  1. Thoroughly explored the codebase
247
281
  2. Written a clear plan to the plan file
248
282
  3. Resolved any ambiguities with the user`,
249
- input_schema: {
250
- type: "object",
251
- properties: {},
252
- required: [],
253
- },
254
- },
255
- ];
283
+ input_schema: {
284
+ type: "object",
285
+ properties: {},
286
+ required: []
287
+ }
288
+ }];
289
+
256
290
  // ============================================================================
257
291
  // EXECUTE INTERACTIVE TOOLS
258
292
  // ============================================================================
293
+
259
294
  export async function executeInteractiveTool(name, input) {
260
- switch (name) {
261
- case "ask_user_question": {
262
- const questions = input.questions;
263
- if (!Array.isArray(questions) || questions.length === 0) {
264
- return { success: false, output: "questions array is required" };
265
- }
266
- if (questions.length > 4) {
267
- return { success: false, output: "Maximum 4 questions allowed" };
268
- }
269
- // Create the request — UI will handle it
270
- const id = `question-${Date.now()}`;
271
- const request = {
272
- id,
273
- questions: questions.map((q) => ({
274
- question: q.question,
275
- header: q.header?.slice(0, 12) || "Question",
276
- options: (q.options || []).slice(0, 4).map((o) => ({
277
- label: o.label,
278
- description: o.description || "",
279
- })),
280
- multiSelect: q.multiSelect || false,
281
- })),
282
- resolve: () => { },
283
- reject: () => { },
284
- };
285
- // Store for UI to pick up
286
- pendingQuestions.set(id, request);
287
- interactiveEvents.emit("question", request);
288
- return {
289
- success: true,
290
- output: `Question pending: ${questions[0].question}`,
291
- pendingQuestion: request,
292
- };
293
- }
294
- case "enter_plan_mode": {
295
- const result = enterPlanMode(input.plan_file);
296
- return { success: result.success, output: result.message };
295
+ switch (name) {
296
+ case "ask_user_question":
297
+ {
298
+ const questions = input.questions;
299
+ if (!Array.isArray(questions) || questions.length === 0) {
300
+ return {
301
+ success: false,
302
+ output: "questions array is required"
303
+ };
297
304
  }
298
- case "exit_plan_mode": {
299
- const result = exitPlanMode();
300
- return { success: result.success, output: result.message };
305
+ if (questions.length > 4) {
306
+ return {
307
+ success: false,
308
+ output: "Maximum 4 questions allowed"
309
+ };
301
310
  }
302
- default:
303
- return { success: false, output: `Unknown interactive tool: ${name}` };
304
- }
311
+
312
+ // Create the request UI will handle it
313
+ const id = `question-${Date.now()}`;
314
+ const request = {
315
+ id,
316
+ questions: questions.map(q => ({
317
+ question: q.question,
318
+ header: q.header?.slice(0, 12) || "Question",
319
+ options: (q.options || []).slice(0, 4).map(o => ({
320
+ label: o.label,
321
+ description: o.description || ""
322
+ })),
323
+ multiSelect: q.multiSelect || false
324
+ })),
325
+ resolve: () => {},
326
+ reject: () => {}
327
+ };
328
+
329
+ // Store for UI to pick up
330
+ pendingQuestions.set(id, request);
331
+ interactiveEvents.emit("question", request);
332
+ return {
333
+ success: true,
334
+ output: `Question pending: ${questions[0].question}`,
335
+ pendingQuestion: request
336
+ };
337
+ }
338
+ case "enter_plan_mode":
339
+ {
340
+ const result = enterPlanMode(input.plan_file);
341
+ return {
342
+ success: result.success,
343
+ output: result.message
344
+ };
345
+ }
346
+ case "exit_plan_mode":
347
+ {
348
+ const result = exitPlanMode();
349
+ return {
350
+ success: result.success,
351
+ output: result.message
352
+ };
353
+ }
354
+ default:
355
+ return {
356
+ success: false,
357
+ output: `Unknown interactive tool: ${name}`
358
+ };
359
+ }
305
360
  }
361
+ //# sourceMappingURL=interactive-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive-tools.js","names":["EventEmitter","readFileSync","existsSync","resolve","pendingQuestions","Map","planModeState","active","pendingPlanApproval","interactiveEvents","createQuestionRequest","questions","id","Date","now","Math","random","toString","slice","Promise","reject","request","set","emit","getPendingQuestion","values","next","value","resolveQuestion","answers","get","delete","rejectQuestion","error","enterPlanMode","planFile","success","message","startedAt","exitPlanMode","fullPath","process","cwd","planContent","trim","waitForPlanApproval","action","decision","resolvePromise","rejectPromise","isPlanMode","getPlanModeState","getPendingPlanApproval","resolvePlanApproval","INTERACTIVE_TOOL_DEFINITIONS","name","description","input_schema","type","properties","items","question","header","options","label","required","multiSelect","plan_file","executeInteractiveTool","input","Array","isArray","length","output","map","q","o","pendingQuestion","result"],"sources":["../../../src/cli/services/interactive-tools.ts"],"sourcesContent":["/**\n * Interactive Tools — user interaction during agent execution\n *\n * - AskUserQuestion: Multi-choice questions with optional custom input\n * - Plan Mode: Structured planning workflow with user approval\n */\n\nimport { EventEmitter } from \"events\";\nimport { readFileSync, existsSync } from \"fs\";\nimport { resolve } from \"path\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface QuestionOption {\n label: string;\n description: string;\n}\n\nexport interface Question {\n question: string;\n header: string;\n options: QuestionOption[];\n multiSelect: boolean;\n}\n\nexport interface QuestionRequest {\n id: string;\n questions: Question[];\n resolve: (answers: Record<string, string | string[]>) => void;\n reject: (error: Error) => void;\n}\n\nexport interface PlanModeState {\n active: boolean;\n planFile?: string;\n planContent?: string;\n startedAt?: Date;\n}\n\nexport interface PlanApprovalDecision {\n action: \"execute\" | \"edit\" | \"cancel\" | \"feedback\";\n feedback?: string;\n}\n\n// ============================================================================\n// GLOBAL STATE\n// ============================================================================\n\n// Pending question requests (resolved by UI)\nconst pendingQuestions = new Map<string, QuestionRequest>();\n\n// Plan mode state\nlet planModeState: PlanModeState = { active: false };\n\n// Plan approval state — blocks exit_plan_mode until UI resolves\nlet pendingPlanApproval: {\n resolve: (decision: PlanApprovalDecision) => void;\n reject: (error: Error) => void;\n planContent: string;\n planFile: string;\n} | null = null;\n\n// Event emitter for UI coordination\nexport const interactiveEvents = new EventEmitter();\n\n// ============================================================================\n// ASK USER QUESTION\n// ============================================================================\n\nexport function createQuestionRequest(questions: Question[]): QuestionRequest {\n const id = `question-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;\n\n return new Promise<Record<string, string | string[]>>((resolve, reject) => {\n const request: QuestionRequest = {\n id,\n questions,\n resolve,\n reject,\n };\n\n pendingQuestions.set(id, request);\n\n // Emit event for UI to pick up\n interactiveEvents.emit(\"question\", request);\n }) as unknown as QuestionRequest;\n}\n\nexport function getPendingQuestion(): QuestionRequest | undefined {\n // Return first pending question\n return pendingQuestions.values().next().value;\n}\n\nexport function resolveQuestion(id: string, answers: Record<string, string | string[]>): boolean {\n const request = pendingQuestions.get(id);\n if (!request) return false;\n\n pendingQuestions.delete(id);\n request.resolve(answers);\n return true;\n}\n\nexport function rejectQuestion(id: string, error: Error): boolean {\n const request = pendingQuestions.get(id);\n if (!request) return false;\n\n pendingQuestions.delete(id);\n request.reject(error);\n return true;\n}\n\n// ============================================================================\n// PLAN MODE\n// ============================================================================\n\nexport function enterPlanMode(planFile?: string): { success: boolean; message: string } {\n if (planModeState.active) {\n return {\n success: false,\n message: \"Already in plan mode. Use ExitPlanMode to finish planning.\",\n };\n }\n\n planModeState = {\n active: true,\n planFile: planFile || \".whale/plan.md\",\n startedAt: new Date(),\n };\n\n interactiveEvents.emit(\"planModeEntered\", planModeState);\n\n return {\n success: true,\n message: `Entered plan mode. Write your plan to ${planModeState.planFile}, then use ExitPlanMode when ready for approval.`,\n };\n}\n\nexport function exitPlanMode(): { success: boolean; message: string } {\n if (!planModeState.active) {\n return {\n success: false,\n message: \"Not in plan mode. Use EnterPlanMode first.\",\n };\n }\n\n const planFile = planModeState.planFile || \".whale/plan.md\";\n planModeState = { active: false };\n\n // Read the plan file content\n const fullPath = resolve(process.cwd(), planFile);\n let planContent = \"\";\n if (existsSync(fullPath)) {\n try {\n planContent = readFileSync(fullPath, \"utf-8\").trim();\n } catch { /* ignore read errors */ }\n }\n\n // Emit event for UI to show approval overlay\n interactiveEvents.emit(\"planModeExited\", { planFile, planContent });\n\n // Set up pending approval state so UI can resolve it via resolvePlanApproval()\n pendingPlanApproval = {\n resolve: () => {},\n reject: () => {},\n planContent,\n planFile,\n };\n\n if (planContent) {\n return {\n success: true,\n message: planContent,\n };\n }\n\n return {\n success: true,\n message: `Plan mode complete. Plan saved to ${planFile}.`,\n };\n}\n\n/**\n * Wait for user to approve/reject the plan via the UI overlay.\n * Called by the agent loop after exitPlanMode() returns.\n */\nexport async function waitForPlanApproval(): Promise<PlanApprovalDecision> {\n if (!pendingPlanApproval) {\n return { action: \"execute\" };\n }\n\n const { planContent, planFile } = pendingPlanApproval;\n\n const decision = await new Promise<PlanApprovalDecision>((resolvePromise, rejectPromise) => {\n pendingPlanApproval = {\n resolve: resolvePromise,\n reject: rejectPromise,\n planContent,\n planFile,\n };\n });\n\n return decision;\n}\n\nexport function isPlanMode(): boolean {\n return planModeState.active;\n}\n\nexport function getPlanModeState(): PlanModeState {\n return { ...planModeState };\n}\n\n// ============================================================================\n// PLAN APPROVAL — blocking resolution from UI\n// ============================================================================\n\nexport function getPendingPlanApproval(): { planContent: string; planFile: string } | null {\n if (!pendingPlanApproval) return null;\n return { planContent: pendingPlanApproval.planContent, planFile: pendingPlanApproval.planFile };\n}\n\nexport function resolvePlanApproval(decision: PlanApprovalDecision): boolean {\n if (!pendingPlanApproval) return false;\n const { resolve } = pendingPlanApproval;\n pendingPlanApproval = null;\n resolve(decision);\n return true;\n}\n\n// ============================================================================\n// TOOL DEFINITIONS\n// ============================================================================\n\nexport const INTERACTIVE_TOOL_DEFINITIONS = [\n {\n name: \"ask_user_question\",\n description: `Ask the user questions during execution. Use this to:\n- Gather user preferences or requirements\n- Clarify ambiguous instructions\n- Get decisions on implementation choices\n- Offer choices about direction\n\nUsers can always select \"Other\" to provide custom input.`,\n input_schema: {\n type: \"object\",\n properties: {\n questions: {\n type: \"array\",\n description: \"1-4 questions to ask the user\",\n items: {\n type: \"object\",\n properties: {\n question: {\n type: \"string\",\n description: \"The complete question to ask (ends with ?)\",\n },\n header: {\n type: \"string\",\n description: \"Short label (max 12 chars) like 'Auth method' or 'Library'\",\n },\n options: {\n type: \"array\",\n description: \"2-4 choices (Other is added automatically)\",\n items: {\n type: \"object\",\n properties: {\n label: {\n type: \"string\",\n description: \"Concise choice text (1-5 words)\",\n },\n description: {\n type: \"string\",\n description: \"Explanation of what this choice means\",\n },\n },\n required: [\"label\", \"description\"],\n },\n },\n multiSelect: {\n type: \"boolean\",\n description: \"Allow selecting multiple options (default: false)\",\n },\n },\n required: [\"question\", \"header\", \"options\"],\n },\n },\n },\n required: [\"questions\"],\n },\n },\n {\n name: \"enter_plan_mode\",\n description: `Enter plan mode for complex tasks requiring careful planning before implementation.\n\nUse this when:\n- Multiple valid approaches exist with trade-offs\n- Significant architectural decisions are needed\n- Large-scale changes touch many files\n- Requirements are unclear and need exploration\n- You need to ask clarifying questions before starting\n\nIn plan mode, you explore the codebase and design an approach, then present it for user approval before implementing.`,\n input_schema: {\n type: \"object\",\n properties: {\n plan_file: {\n type: \"string\",\n description: \"File to write the plan to (default: .whale/plan.md)\",\n },\n },\n required: [],\n },\n },\n {\n name: \"exit_plan_mode\",\n description: `Exit plan mode after writing your plan. The user will review and approve the plan before implementation begins.\n\nOnly use this after you have:\n1. Thoroughly explored the codebase\n2. Written a clear plan to the plan file\n3. Resolved any ambiguities with the user`,\n input_schema: {\n type: \"object\",\n properties: {},\n required: [],\n },\n },\n];\n\n// ============================================================================\n// EXECUTE INTERACTIVE TOOLS\n// ============================================================================\n\nexport async function executeInteractiveTool(\n name: string,\n input: Record<string, unknown>\n): Promise<{ success: boolean; output: string; pendingQuestion?: QuestionRequest }> {\n switch (name) {\n case \"ask_user_question\": {\n const questions = input.questions as Question[];\n if (!Array.isArray(questions) || questions.length === 0) {\n return { success: false, output: \"questions array is required\" };\n }\n if (questions.length > 4) {\n return { success: false, output: \"Maximum 4 questions allowed\" };\n }\n\n // Create the request — UI will handle it\n const id = `question-${Date.now()}`;\n const request: QuestionRequest = {\n id,\n questions: questions.map((q) => ({\n question: q.question,\n header: q.header?.slice(0, 12) || \"Question\",\n options: (q.options || []).slice(0, 4).map((o) => ({\n label: o.label,\n description: o.description || \"\",\n })),\n multiSelect: q.multiSelect || false,\n })),\n resolve: () => {},\n reject: () => {},\n };\n\n // Store for UI to pick up\n pendingQuestions.set(id, request);\n interactiveEvents.emit(\"question\", request);\n\n return {\n success: true,\n output: `Question pending: ${questions[0].question}`,\n pendingQuestion: request,\n };\n }\n\n case \"enter_plan_mode\": {\n const result = enterPlanMode(input.plan_file as string);\n return { success: result.success, output: result.message };\n }\n\n case \"exit_plan_mode\": {\n const result = exitPlanMode();\n return { success: result.success, output: result.message };\n }\n\n default:\n return { success: false, output: `Unknown interactive tool: ${name}` };\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Keybinding Manager — configurable keyboard shortcuts
3
3
  *
4
- * Loads overrides from ~/.swagmanager/keybindings.json.
4
+ * Loads overrides from ~/.whale/keybindings.json.
5
5
  * Only listed bindings are configurable; Enter, backspace, arrows stay hardcoded.
6
6
  */
7
7
  export interface KeybindingConfig {
@@ -46,6 +46,16 @@ export declare function matchesBinding(binding: string, input: string, key: Part
46
46
  * "escape" -> "\x1b"
47
47
  */
48
48
  export declare function bindingToControlChar(binding: string): string;
49
+ /**
50
+ * Convert a binding string to a human-readable label.
51
+ *
52
+ * "ctrl+o" → "Ctrl+O"
53
+ * "escape" → "ESC"
54
+ * "meta+k" → "Alt+K"
55
+ * "alt+k" → "Alt+K"
56
+ * "a" → "A"
57
+ */
58
+ export declare function bindingToLabel(binding: string): string;
49
59
  /**
50
60
  * Reset cached keybindings (for testing or hot-reload).
51
61
  */