whale-code 6.5.5 → 6.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (847) hide show
  1. package/README.md +39 -31
  2. package/bin/{swagmanager-mcp.js → whale-code.js} +17 -2
  3. package/dist/cli/app.js +148 -72
  4. package/dist/cli/app.js.map +1 -0
  5. package/dist/cli/chat/AgentSelector.js +105 -10
  6. package/dist/cli/chat/AgentSelector.js.map +1 -0
  7. package/dist/cli/chat/ChatApp.d.ts +31 -0
  8. package/dist/cli/chat/ChatApp.js +539 -286
  9. package/dist/cli/chat/ChatApp.js.map +1 -0
  10. package/dist/cli/chat/ChatInput.js +1088 -770
  11. package/dist/cli/chat/ChatInput.js.map +1 -0
  12. package/dist/cli/chat/MarkdownText.js +39 -14
  13. package/dist/cli/chat/MarkdownText.js.map +1 -0
  14. package/dist/cli/chat/MemoryManager.js +181 -46
  15. package/dist/cli/chat/MemoryManager.js.map +1 -0
  16. package/dist/cli/chat/MessageList.d.ts +2 -3
  17. package/dist/cli/chat/MessageList.js +186 -45
  18. package/dist/cli/chat/MessageList.js.map +1 -0
  19. package/dist/cli/chat/ModelSelector.js +282 -63
  20. package/dist/cli/chat/ModelSelector.js.map +1 -0
  21. package/dist/cli/chat/NodeManager.js +165 -75
  22. package/dist/cli/chat/NodeManager.js.map +1 -0
  23. package/dist/cli/chat/NodeSelector.js +171 -30
  24. package/dist/cli/chat/NodeSelector.js.map +1 -0
  25. package/dist/cli/chat/PlanApproval.js +281 -57
  26. package/dist/cli/chat/PlanApproval.js.map +1 -0
  27. package/dist/cli/chat/RewindViewer.js +559 -144
  28. package/dist/cli/chat/RewindViewer.js.map +1 -0
  29. package/dist/cli/chat/SessionManager.js +137 -30
  30. package/dist/cli/chat/SessionManager.js.map +1 -0
  31. package/dist/cli/chat/SlashMenu.js +293 -164
  32. package/dist/cli/chat/SlashMenu.js.map +1 -0
  33. package/dist/cli/chat/StatusBar.js +172 -9
  34. package/dist/cli/chat/StatusBar.js.map +1 -0
  35. package/dist/cli/chat/StoreSelector.js +147 -18
  36. package/dist/cli/chat/StoreSelector.js.map +1 -0
  37. package/dist/cli/chat/StreamingText.d.ts +1 -5
  38. package/dist/cli/chat/StreamingText.js +22 -7
  39. package/dist/cli/chat/StreamingText.js.map +1 -0
  40. package/dist/cli/chat/SubagentPanel.d.ts +1 -2
  41. package/dist/cli/chat/SubagentPanel.js +612 -72
  42. package/dist/cli/chat/SubagentPanel.js.map +1 -0
  43. package/dist/cli/chat/TeamPanel.d.ts +1 -0
  44. package/dist/cli/chat/TeamPanel.js +230 -30
  45. package/dist/cli/chat/TeamPanel.js.map +1 -0
  46. package/dist/cli/chat/ThemeSelector.js +84 -24
  47. package/dist/cli/chat/ThemeSelector.js.map +1 -0
  48. package/dist/cli/chat/ToolIndicator.js +1476 -371
  49. package/dist/cli/chat/ToolIndicator.js.map +1 -0
  50. package/dist/cli/chat/hooks/useAgentLoop.d.ts +1 -0
  51. package/dist/cli/chat/hooks/useAgentLoop.js +481 -367
  52. package/dist/cli/chat/hooks/useAgentLoop.js.map +1 -0
  53. package/dist/cli/chat/hooks/useSlashCommands.d.ts +3 -14
  54. package/dist/cli/chat/hooks/useSlashCommands.js +744 -572
  55. package/dist/cli/chat/hooks/useSlashCommands.js.map +1 -0
  56. package/dist/cli/commands/config-cmd.js +56 -57
  57. package/dist/cli/commands/config-cmd.js.map +1 -0
  58. package/dist/cli/commands/db.js +184 -169
  59. package/dist/cli/commands/db.js.map +1 -0
  60. package/dist/cli/commands/doctor.js +212 -122
  61. package/dist/cli/commands/doctor.js.map +1 -0
  62. package/dist/cli/commands/init.js +211 -244
  63. package/dist/cli/commands/init.js.map +1 -0
  64. package/dist/cli/commands/mcp.js +127 -122
  65. package/dist/cli/commands/mcp.js.map +1 -0
  66. package/dist/cli/login/LoginApp.js +355 -141
  67. package/dist/cli/login/LoginApp.js.map +1 -0
  68. package/dist/cli/print-mode.js +196 -177
  69. package/dist/cli/print-mode.js.map +1 -0
  70. package/dist/cli/serve-mode.js +615 -530
  71. package/dist/cli/serve-mode.js.map +1 -0
  72. package/dist/cli/services/agent-config.d.ts +5 -1
  73. package/dist/cli/services/agent-config.js +66 -36
  74. package/dist/cli/services/agent-config.js.map +1 -0
  75. package/dist/cli/services/agent-definitions.d.ts +4 -1
  76. package/dist/cli/services/agent-definitions.js +97 -56
  77. package/dist/cli/services/agent-definitions.js.map +1 -0
  78. package/dist/cli/services/agent-events.js +225 -162
  79. package/dist/cli/services/agent-events.js.map +1 -0
  80. package/dist/cli/services/agent-loop.js +976 -688
  81. package/dist/cli/services/agent-loop.js.map +1 -0
  82. package/dist/cli/services/agent-worker-base.d.ts +35 -5
  83. package/dist/cli/services/agent-worker-base.js +337 -153
  84. package/dist/cli/services/agent-worker-base.js.map +1 -0
  85. package/dist/cli/services/api-retry.js +69 -64
  86. package/dist/cli/services/api-retry.js.map +1 -0
  87. package/dist/cli/services/auth-service.d.ts +3 -3
  88. package/dist/cli/services/auth-service.js +209 -132
  89. package/dist/cli/services/auth-service.js.map +1 -0
  90. package/dist/cli/services/background-processes.js +343 -267
  91. package/dist/cli/services/background-processes.js.map +1 -0
  92. package/dist/cli/services/browser-auth.d.ts +2 -2
  93. package/dist/cli/services/browser-auth.js +159 -118
  94. package/dist/cli/services/browser-auth.js.map +1 -0
  95. package/dist/cli/services/claude-md-loader.js +40 -36
  96. package/dist/cli/services/claude-md-loader.js.map +1 -0
  97. package/dist/cli/services/config-store.d.ts +9 -4
  98. package/dist/cli/services/config-store.js +164 -117
  99. package/dist/cli/services/config-store.js.map +1 -0
  100. package/dist/cli/services/debug-log.d.ts +1 -1
  101. package/dist/cli/services/debug-log.js +34 -35
  102. package/dist/cli/services/debug-log.js.map +1 -0
  103. package/dist/cli/services/env-detect.d.ts +7 -0
  104. package/dist/cli/services/env-detect.js +9 -0
  105. package/dist/cli/services/env-detect.js.map +1 -0
  106. package/dist/cli/services/error-logger.js +187 -169
  107. package/dist/cli/services/error-logger.js.map +1 -0
  108. package/dist/cli/services/file-history.d.ts +1 -1
  109. package/dist/cli/services/file-history.js +50 -54
  110. package/dist/cli/services/file-history.js.map +1 -0
  111. package/dist/cli/services/format-server-response.js +332 -372
  112. package/dist/cli/services/format-server-response.js.map +1 -0
  113. package/dist/cli/services/git-context.js +61 -45
  114. package/dist/cli/services/git-context.js.map +1 -0
  115. package/dist/cli/services/hooks.d.ts +2 -2
  116. package/dist/cli/services/hooks.js +195 -180
  117. package/dist/cli/services/hooks.js.map +1 -0
  118. package/dist/cli/services/ink-incremental.d.ts +19 -0
  119. package/dist/cli/services/ink-incremental.js +59 -0
  120. package/dist/cli/services/ink-incremental.js.map +1 -0
  121. package/dist/cli/services/ink-resize-fix.js +54 -44
  122. package/dist/cli/services/ink-resize-fix.js.map +1 -0
  123. package/dist/cli/services/ink-sync-output.d.ts +12 -0
  124. package/dist/cli/services/ink-sync-output.js +16 -0
  125. package/dist/cli/services/ink-sync-output.js.map +1 -0
  126. package/dist/cli/services/interactive-tools.js +268 -212
  127. package/dist/cli/services/interactive-tools.js.map +1 -0
  128. package/dist/cli/services/keybinding-manager.d.ts +11 -1
  129. package/dist/cli/services/keybinding-manager.js +126 -63
  130. package/dist/cli/services/keybinding-manager.js.map +1 -0
  131. package/dist/cli/services/local-tools.d.ts +1 -1
  132. package/dist/cli/services/local-tools.js +939 -656
  133. package/dist/cli/services/local-tools.js.map +1 -0
  134. package/dist/cli/services/lsp-manager.js +757 -594
  135. package/dist/cli/services/lsp-manager.js.map +1 -0
  136. package/dist/cli/services/mcp-client.d.ts +1 -1
  137. package/dist/cli/services/mcp-client.js +173 -134
  138. package/dist/cli/services/mcp-client.js.map +1 -0
  139. package/dist/cli/services/memory-manager.js +53 -40
  140. package/dist/cli/services/memory-manager.js.map +1 -0
  141. package/dist/cli/services/model-manager.js +55 -40
  142. package/dist/cli/services/model-manager.js.map +1 -0
  143. package/dist/cli/services/model-router.js +115 -85
  144. package/dist/cli/services/model-router.js.map +1 -0
  145. package/dist/cli/services/paths.d.ts +30 -0
  146. package/dist/cli/services/paths.js +81 -0
  147. package/dist/cli/services/paths.js.map +1 -0
  148. package/dist/cli/services/permission-modes.js +32 -25
  149. package/dist/cli/services/permission-modes.js.map +1 -0
  150. package/dist/cli/services/rewind.js +182 -168
  151. package/dist/cli/services/rewind.js.map +1 -0
  152. package/dist/cli/services/ripgrep.js +115 -115
  153. package/dist/cli/services/ripgrep.js.map +1 -0
  154. package/dist/cli/services/sandbox.d.ts +1 -1
  155. package/dist/cli/services/sandbox.js +58 -37
  156. package/dist/cli/services/sandbox.js.map +1 -0
  157. package/dist/cli/services/server-tools.js +738 -565
  158. package/dist/cli/services/server-tools.js.map +1 -0
  159. package/dist/cli/services/session-persistence.js +69 -74
  160. package/dist/cli/services/session-persistence.js.map +1 -0
  161. package/dist/cli/services/subagent-worker.js +42 -27
  162. package/dist/cli/services/subagent-worker.js.map +1 -0
  163. package/dist/cli/services/subagent.d.ts +2 -0
  164. package/dist/cli/services/subagent.js +605 -433
  165. package/dist/cli/services/subagent.js.map +1 -0
  166. package/dist/cli/services/system-prompt.js +86 -78
  167. package/dist/cli/services/system-prompt.js.map +1 -0
  168. package/dist/cli/services/task-decomposer.d.ts +1 -1
  169. package/dist/cli/services/task-decomposer.js +172 -139
  170. package/dist/cli/services/task-decomposer.js.map +1 -0
  171. package/dist/cli/services/team-lead.d.ts +2 -2
  172. package/dist/cli/services/team-lead.js +727 -529
  173. package/dist/cli/services/team-lead.js.map +1 -0
  174. package/dist/cli/services/team-state.js +319 -319
  175. package/dist/cli/services/team-state.js.map +1 -0
  176. package/dist/cli/services/teammate.d.ts +8 -2
  177. package/dist/cli/services/teammate.js +857 -569
  178. package/dist/cli/services/teammate.js.map +1 -0
  179. package/dist/cli/services/telemetry.d.ts +6 -1
  180. package/dist/cli/services/telemetry.js +180 -157
  181. package/dist/cli/services/telemetry.js.map +1 -0
  182. package/dist/cli/services/tools/agent-tools.d.ts +3 -3
  183. package/dist/cli/services/tools/agent-tools.js +480 -322
  184. package/dist/cli/services/tools/agent-tools.js.map +1 -0
  185. package/dist/cli/services/tools/file-ops.js +563 -450
  186. package/dist/cli/services/tools/file-ops.js.map +1 -0
  187. package/dist/cli/services/tools/search-tools.js +231 -162
  188. package/dist/cli/services/tools/search-tools.js.map +1 -0
  189. package/dist/cli/services/tools/shell-exec.js +197 -151
  190. package/dist/cli/services/tools/shell-exec.js.map +1 -0
  191. package/dist/cli/services/tools/task-manager.js +206 -173
  192. package/dist/cli/services/tools/task-manager.js.map +1 -0
  193. package/dist/cli/services/tools/web-tools.js +388 -341
  194. package/dist/cli/services/tools/web-tools.js.map +1 -0
  195. package/dist/cli/setup/SetupApp.d.ts +2 -2
  196. package/dist/cli/setup/SetupApp.js +608 -160
  197. package/dist/cli/setup/SetupApp.js.map +1 -0
  198. package/dist/cli/shared/ErrorBoundary.d.ts +22 -0
  199. package/dist/cli/shared/ErrorBoundary.js +73 -0
  200. package/dist/cli/shared/ErrorBoundary.js.map +1 -0
  201. package/dist/cli/shared/MatrixIntro.js +66 -69
  202. package/dist/cli/shared/MatrixIntro.js.map +1 -0
  203. package/dist/cli/shared/SpinnerSlot.d.ts +14 -0
  204. package/dist/cli/shared/SpinnerSlot.js +63 -0
  205. package/dist/cli/shared/SpinnerSlot.js.map +1 -0
  206. package/dist/cli/shared/Theme.d.ts +1 -1
  207. package/dist/cli/shared/Theme.js +136 -92
  208. package/dist/cli/shared/Theme.js.map +1 -0
  209. package/dist/cli/shared/WhaleBanner.js +99 -11
  210. package/dist/cli/shared/WhaleBanner.js.map +1 -0
  211. package/dist/cli/shared/markdown.d.ts +3 -1
  212. package/dist/cli/shared/markdown.js +736 -674
  213. package/dist/cli/shared/markdown.js.map +1 -0
  214. package/dist/cli/shared/marked-terminal.d.js +2 -0
  215. package/dist/cli/shared/marked-terminal.d.js.map +1 -0
  216. package/dist/cli/shared/theme-manager.js +99 -90
  217. package/dist/cli/shared/theme-manager.js.map +1 -0
  218. package/dist/cli/shared/theme-presets.js +256 -254
  219. package/dist/cli/shared/theme-presets.js.map +1 -0
  220. package/dist/cli/status/StatusApp.js +235 -86
  221. package/dist/cli/status/StatusApp.js.map +1 -0
  222. package/dist/cli/stores/StoreApp.js +275 -65
  223. package/dist/cli/stores/StoreApp.js.map +1 -0
  224. package/dist/index.d.ts +2 -2
  225. package/dist/index.js +509 -396
  226. package/dist/index.js.map +1 -0
  227. package/dist/local-agent/connection.d.ts +2 -2
  228. package/dist/local-agent/connection.js +352 -293
  229. package/dist/local-agent/connection.js.map +1 -0
  230. package/dist/local-agent/discovery.js +259 -122
  231. package/dist/local-agent/discovery.js.map +1 -0
  232. package/dist/local-agent/executor.js +216 -193
  233. package/dist/local-agent/executor.js.map +1 -0
  234. package/dist/local-agent/index.d.ts +2 -2
  235. package/dist/local-agent/index.js +156 -156
  236. package/dist/local-agent/index.js.map +1 -0
  237. package/dist/node/adapters/base.js +18 -8
  238. package/dist/node/adapters/base.js.map +1 -0
  239. package/dist/node/adapters/discord.js +286 -275
  240. package/dist/node/adapters/discord.js.map +1 -0
  241. package/dist/node/adapters/email.js +189 -202
  242. package/dist/node/adapters/email.js.map +1 -0
  243. package/dist/node/adapters/imessage.js +145 -142
  244. package/dist/node/adapters/imessage.js.map +1 -0
  245. package/dist/node/adapters/slack.js +237 -236
  246. package/dist/node/adapters/slack.js.map +1 -0
  247. package/dist/node/adapters/sms.js +149 -151
  248. package/dist/node/adapters/sms.js.map +1 -0
  249. package/dist/node/adapters/telegram.js +88 -92
  250. package/dist/node/adapters/telegram.js.map +1 -0
  251. package/dist/node/adapters/webchat.js +160 -136
  252. package/dist/node/adapters/webchat.js.map +1 -0
  253. package/dist/node/adapters/whatsapp.js +212 -215
  254. package/dist/node/adapters/whatsapp.js.map +1 -0
  255. package/dist/node/cli.js +884 -653
  256. package/dist/node/cli.js.map +1 -0
  257. package/dist/node/config.js +20 -18
  258. package/dist/node/config.js.map +1 -0
  259. package/dist/node/gateway-client.js +191 -181
  260. package/dist/node/gateway-client.js.map +1 -0
  261. package/dist/node/portal/clipboard.js +161 -130
  262. package/dist/node/portal/clipboard.js.map +1 -0
  263. package/dist/node/portal/discovery.js +51 -45
  264. package/dist/node/portal/discovery.js.map +1 -0
  265. package/dist/node/portal/forward.js +64 -58
  266. package/dist/node/portal/forward.js.map +1 -0
  267. package/dist/node/portal/index.js +246 -221
  268. package/dist/node/portal/index.js.map +1 -0
  269. package/dist/node/portal/multiplexer.js +192 -182
  270. package/dist/node/portal/multiplexer.js.map +1 -0
  271. package/dist/node/portal/permissions.js +102 -70
  272. package/dist/node/portal/permissions.js.map +1 -0
  273. package/dist/node/portal/protocol.js +153 -116
  274. package/dist/node/portal/protocol.js.map +1 -0
  275. package/dist/node/portal/screen.js +80 -69
  276. package/dist/node/portal/screen.js.map +1 -0
  277. package/dist/node/portal/session.js +124 -117
  278. package/dist/node/portal/session.js.map +1 -0
  279. package/dist/node/portal/shell.js +140 -113
  280. package/dist/node/portal/shell.js.map +1 -0
  281. package/dist/node/portal/stream.js +77 -75
  282. package/dist/node/portal/stream.js.map +1 -0
  283. package/dist/node/portal/transfer.js +190 -167
  284. package/dist/node/portal/transfer.js.map +1 -0
  285. package/dist/node/portal/ui.js +124 -99
  286. package/dist/node/portal/ui.js.map +1 -0
  287. package/dist/node/remote-desktop/compile-helper.js +50 -45
  288. package/dist/node/remote-desktop/compile-helper.js.map +1 -0
  289. package/dist/node/remote-desktop/index.js +215 -187
  290. package/dist/node/remote-desktop/index.js.map +1 -0
  291. package/dist/node/remote-desktop/protocol.js +45 -29
  292. package/dist/node/remote-desktop/protocol.js.map +1 -0
  293. package/dist/node/runtime.js +493 -410
  294. package/dist/node/runtime.js.map +1 -0
  295. package/dist/server/handlers/__test-utils__/test-db.js +39 -89
  296. package/dist/server/handlers/__test-utils__/test-db.js.map +1 -0
  297. package/dist/server/handlers/analytics.js +467 -261
  298. package/dist/server/handlers/analytics.js.map +1 -0
  299. package/dist/server/handlers/api-docs.js +1030 -895
  300. package/dist/server/handlers/api-docs.js.map +1 -0
  301. package/dist/server/handlers/api-keys.js +291 -242
  302. package/dist/server/handlers/api-keys.js.map +1 -0
  303. package/dist/server/handlers/billing.js +330 -239
  304. package/dist/server/handlers/billing.js.map +1 -0
  305. package/dist/server/handlers/browser.js +468 -395
  306. package/dist/server/handlers/browser.js.map +1 -0
  307. package/dist/server/handlers/catalog.js +1377 -978
  308. package/dist/server/handlers/catalog.js.map +1 -0
  309. package/dist/server/handlers/clickhouse.js +157 -109
  310. package/dist/server/handlers/clickhouse.js.map +1 -0
  311. package/dist/server/handlers/comms.js +1439 -984
  312. package/dist/server/handlers/comms.js.map +1 -0
  313. package/dist/server/handlers/creations.js +461 -394
  314. package/dist/server/handlers/creations.js.map +1 -0
  315. package/dist/server/handlers/crm.js +1082 -791
  316. package/dist/server/handlers/crm.js.map +1 -0
  317. package/dist/server/handlers/discovery.js +251 -232
  318. package/dist/server/handlers/discovery.js.map +1 -0
  319. package/dist/server/handlers/embeddings.js +241 -164
  320. package/dist/server/handlers/embeddings.js.map +1 -0
  321. package/dist/server/handlers/enrichment.js +887 -718
  322. package/dist/server/handlers/enrichment.js.map +1 -0
  323. package/dist/server/handlers/image-gen.js +467 -376
  324. package/dist/server/handlers/image-gen.js.map +1 -0
  325. package/dist/server/handlers/inventory.js +797 -424
  326. package/dist/server/handlers/inventory.js.map +1 -0
  327. package/dist/server/handlers/kali.js +272 -230
  328. package/dist/server/handlers/kali.js.map +1 -0
  329. package/dist/server/handlers/llm-providers.js +803 -580
  330. package/dist/server/handlers/llm-providers.js.map +1 -0
  331. package/dist/server/handlers/local-agent.js +133 -105
  332. package/dist/server/handlers/local-agent.js.map +1 -0
  333. package/dist/server/handlers/media.js +1179 -857
  334. package/dist/server/handlers/media.js.map +1 -0
  335. package/dist/server/handlers/meta-ads.js +2669 -2093
  336. package/dist/server/handlers/meta-ads.js.map +1 -0
  337. package/dist/server/handlers/nodes.js +1321 -913
  338. package/dist/server/handlers/nodes.js.map +1 -0
  339. package/dist/server/handlers/operations.js +183 -157
  340. package/dist/server/handlers/operations.js.map +1 -0
  341. package/dist/server/handlers/platform.js +346 -210
  342. package/dist/server/handlers/platform.js.map +1 -0
  343. package/dist/server/handlers/remove-bg.js +118 -86
  344. package/dist/server/handlers/remove-bg.js.map +1 -0
  345. package/dist/server/handlers/storefront.js +586 -446
  346. package/dist/server/handlers/storefront.js.map +1 -0
  347. package/dist/server/handlers/supply-chain.js +546 -326
  348. package/dist/server/handlers/supply-chain.js.map +1 -0
  349. package/dist/server/handlers/transcription.js +106 -97
  350. package/dist/server/handlers/transcription.js.map +1 -0
  351. package/dist/server/handlers/video-gen.js +593 -424
  352. package/dist/server/handlers/video-gen.js.map +1 -0
  353. package/dist/server/handlers/voice.js +1458 -1039
  354. package/dist/server/handlers/voice.js.map +1 -0
  355. package/dist/server/handlers/workflow-steps.js +2837 -2116
  356. package/dist/server/handlers/workflow-steps.js.map +1 -0
  357. package/dist/server/handlers/workflows.js +1630 -933
  358. package/dist/server/handlers/workflows.js.map +1 -0
  359. package/dist/server/index.js +3167 -2422
  360. package/dist/server/index.js.map +1 -0
  361. package/dist/server/lib/batch-client.js +471 -409
  362. package/dist/server/lib/batch-client.js.map +1 -0
  363. package/dist/server/lib/clickhouse-buffer.js +118 -104
  364. package/dist/server/lib/clickhouse-buffer.js.map +1 -0
  365. package/dist/server/lib/clickhouse-client.js +107 -107
  366. package/dist/server/lib/clickhouse-client.js.map +1 -0
  367. package/dist/server/lib/coa-renderer.js +1786 -356
  368. package/dist/server/lib/coa-renderer.js.map +1 -0
  369. package/dist/server/lib/code-worker-pool.js +227 -177
  370. package/dist/server/lib/code-worker-pool.js.map +1 -0
  371. package/dist/server/lib/code-worker.js +174 -164
  372. package/dist/server/lib/code-worker.js.map +1 -0
  373. package/dist/server/lib/compaction-service.d.ts +2 -12
  374. package/dist/server/lib/compaction-service.js +74 -184
  375. package/dist/server/lib/compaction-service.js.map +1 -0
  376. package/dist/server/lib/logger.js +36 -24
  377. package/dist/server/lib/logger.js.map +1 -0
  378. package/dist/server/lib/otel.js +101 -80
  379. package/dist/server/lib/otel.js.map +1 -0
  380. package/dist/server/lib/pdf-renderer.js +952 -788
  381. package/dist/server/lib/pdf-renderer.js.map +1 -0
  382. package/dist/server/lib/prompt-sanitizer.js +188 -108
  383. package/dist/server/lib/prompt-sanitizer.js.map +1 -0
  384. package/dist/server/lib/provider-capabilities.js +136 -138
  385. package/dist/server/lib/provider-capabilities.js.map +1 -0
  386. package/dist/server/lib/provider-failover.js +190 -168
  387. package/dist/server/lib/provider-failover.js.map +1 -0
  388. package/dist/server/lib/rate-limiter.js +186 -117
  389. package/dist/server/lib/rate-limiter.js.map +1 -0
  390. package/dist/server/lib/react-pdf-layout.js +551 -382
  391. package/dist/server/lib/react-pdf-layout.js.map +1 -0
  392. package/dist/server/lib/server-agent-loop.d.ts +4 -1
  393. package/dist/server/lib/server-agent-loop.js +906 -634
  394. package/dist/server/lib/server-agent-loop.js.map +1 -0
  395. package/dist/server/lib/server-subagent.js +260 -164
  396. package/dist/server/lib/server-subagent.js.map +1 -0
  397. package/dist/server/lib/session-checkpoint.js +105 -96
  398. package/dist/server/lib/session-checkpoint.js.map +1 -0
  399. package/dist/server/lib/ssrf-guard.js +193 -184
  400. package/dist/server/lib/ssrf-guard.js.map +1 -0
  401. package/dist/server/lib/supabase-client.js +94 -82
  402. package/dist/server/lib/supabase-client.js.map +1 -0
  403. package/dist/server/lib/template-resolver.js +154 -176
  404. package/dist/server/lib/template-resolver.js.map +1 -0
  405. package/dist/server/lib/utils.js +242 -133
  406. package/dist/server/lib/utils.js.map +1 -0
  407. package/dist/server/local-agent-gateway.d.ts +2 -2
  408. package/dist/server/local-agent-gateway.js +785 -627
  409. package/dist/server/local-agent-gateway.js.map +1 -0
  410. package/dist/server/providers/anthropic.js +250 -172
  411. package/dist/server/providers/anthropic.js.map +1 -0
  412. package/dist/server/providers/bedrock.js +217 -158
  413. package/dist/server/providers/bedrock.js.map +1 -0
  414. package/dist/server/providers/gemini.js +548 -418
  415. package/dist/server/providers/gemini.js.map +1 -0
  416. package/dist/server/providers/openai.js +571 -437
  417. package/dist/server/providers/openai.js.map +1 -0
  418. package/dist/server/providers/registry.js +23 -18
  419. package/dist/server/providers/registry.js.map +1 -0
  420. package/dist/server/providers/shared.js +123 -95
  421. package/dist/server/providers/shared.js.map +1 -0
  422. package/dist/server/providers/types.js +1 -11
  423. package/dist/server/providers/types.js.map +1 -0
  424. package/dist/server/proxy-handlers.js +209 -165
  425. package/dist/server/proxy-handlers.js.map +1 -0
  426. package/dist/server/tool-router.js +959 -599
  427. package/dist/server/tool-router.js.map +1 -0
  428. package/dist/server/validation.js +248 -188
  429. package/dist/server/validation.js.map +1 -0
  430. package/dist/server/worker.js +202 -133
  431. package/dist/server/worker.js.map +1 -0
  432. package/dist/setup.d.ts +2 -2
  433. package/dist/setup.js +151 -147
  434. package/dist/setup.js.map +1 -0
  435. package/dist/shared/agent-core.d.ts +115 -26
  436. package/dist/shared/agent-core.js +956 -522
  437. package/dist/shared/agent-core.js.map +1 -0
  438. package/dist/shared/anthropic-types.js +1 -6
  439. package/dist/shared/anthropic-types.js.map +1 -0
  440. package/dist/shared/api-client.d.ts +16 -9
  441. package/dist/shared/api-client.js +419 -327
  442. package/dist/shared/api-client.js.map +1 -0
  443. package/dist/shared/compaction.d.ts +36 -0
  444. package/dist/shared/compaction.js +138 -0
  445. package/dist/shared/compaction.js.map +1 -0
  446. package/dist/shared/constants.js +67 -64
  447. package/dist/shared/constants.js.map +1 -0
  448. package/dist/shared/sse-parser.js +221 -219
  449. package/dist/shared/sse-parser.js.map +1 -0
  450. package/dist/shared/tool-dispatch.d.ts +4 -0
  451. package/dist/shared/tool-dispatch.js +226 -165
  452. package/dist/shared/tool-dispatch.js.map +1 -0
  453. package/dist/shared/types.js +1 -6
  454. package/dist/shared/types.js.map +1 -0
  455. package/dist/types/cli-highlight.d.js +2 -0
  456. package/dist/types/cli-highlight.d.js.map +1 -0
  457. package/dist/types/diff.d.js +2 -0
  458. package/dist/types/diff.d.js.map +1 -0
  459. package/dist/types/pdf-parse.d.js +2 -0
  460. package/dist/types/pdf-parse.d.js.map +1 -0
  461. package/dist/updater.d.ts +1 -1
  462. package/dist/updater.js +118 -92
  463. package/dist/updater.js.map +1 -0
  464. package/dist/webchat/widget.js +227 -380
  465. package/dist/webchat/widget.js.map +1 -0
  466. package/package.json +22 -10
  467. package/vendor/ink/build/ansi-tokenizer.d.ts +38 -0
  468. package/vendor/ink/build/ansi-tokenizer.js +316 -0
  469. package/vendor/ink/build/ansi-tokenizer.js.map +1 -0
  470. package/vendor/ink/build/apply-styles.js +175 -0
  471. package/vendor/ink/build/build-layout.js +77 -0
  472. package/vendor/ink/build/calculate-wrapped-text.js +53 -0
  473. package/vendor/ink/build/colorize.d.ts +3 -0
  474. package/vendor/ink/build/colorize.js +48 -0
  475. package/vendor/ink/build/colorize.js.map +1 -0
  476. package/vendor/ink/build/components/AccessibilityContext.d.ts +3 -0
  477. package/vendor/ink/build/components/AccessibilityContext.js +5 -0
  478. package/vendor/ink/build/components/AccessibilityContext.js.map +1 -0
  479. package/vendor/ink/build/components/App.d.ts +18 -0
  480. package/vendor/ink/build/components/App.js +351 -0
  481. package/vendor/ink/build/components/App.js.map +1 -0
  482. package/vendor/ink/build/components/AppContext.d.ts +15 -0
  483. package/vendor/ink/build/components/AppContext.js +11 -0
  484. package/vendor/ink/build/components/AppContext.js.map +1 -0
  485. package/vendor/ink/build/components/BackgroundContext.d.ts +4 -0
  486. package/vendor/ink/build/components/BackgroundContext.js +3 -0
  487. package/vendor/ink/build/components/BackgroundContext.js.map +1 -0
  488. package/vendor/ink/build/components/Box.d.ts +117 -0
  489. package/vendor/ink/build/components/Box.js +34 -0
  490. package/vendor/ink/build/components/Box.js.map +1 -0
  491. package/vendor/ink/build/components/Color.js +62 -0
  492. package/vendor/ink/build/components/Cursor.d.ts +83 -0
  493. package/vendor/ink/build/components/Cursor.js +53 -0
  494. package/vendor/ink/build/components/Cursor.js.map +1 -0
  495. package/vendor/ink/build/components/CursorContext.d.ts +11 -0
  496. package/vendor/ink/build/components/CursorContext.js +8 -0
  497. package/vendor/ink/build/components/CursorContext.js.map +1 -0
  498. package/vendor/ink/build/components/ErrorBoundary.d.ts +18 -0
  499. package/vendor/ink/build/components/ErrorBoundary.js +23 -0
  500. package/vendor/ink/build/components/ErrorBoundary.js.map +1 -0
  501. package/vendor/ink/build/components/ErrorOverview.d.ts +6 -0
  502. package/vendor/ink/build/components/ErrorOverview.js +84 -0
  503. package/vendor/ink/build/components/ErrorOverview.js.map +1 -0
  504. package/vendor/ink/build/components/FocusContext.d.ts +16 -0
  505. package/vendor/ink/build/components/FocusContext.js +17 -0
  506. package/vendor/ink/build/components/FocusContext.js.map +1 -0
  507. package/vendor/ink/build/components/Newline.d.ts +13 -0
  508. package/vendor/ink/build/components/Newline.js +8 -0
  509. package/vendor/ink/build/components/Newline.js.map +1 -0
  510. package/vendor/ink/build/components/Spacer.d.ts +7 -0
  511. package/vendor/ink/build/components/Spacer.js +11 -0
  512. package/vendor/ink/build/components/Spacer.js.map +1 -0
  513. package/vendor/ink/build/components/Static.d.ts +24 -0
  514. package/vendor/ink/build/components/Static.js +28 -0
  515. package/vendor/ink/build/components/Static.js.map +1 -0
  516. package/vendor/ink/build/components/StderrContext.d.ts +15 -0
  517. package/vendor/ink/build/components/StderrContext.js +13 -0
  518. package/vendor/ink/build/components/StderrContext.js.map +1 -0
  519. package/vendor/ink/build/components/StdinContext.d.ts +22 -0
  520. package/vendor/ink/build/components/StdinContext.js +19 -0
  521. package/vendor/ink/build/components/StdinContext.js.map +1 -0
  522. package/vendor/ink/build/components/StdoutContext.d.ts +15 -0
  523. package/vendor/ink/build/components/StdoutContext.js +13 -0
  524. package/vendor/ink/build/components/StdoutContext.js.map +1 -0
  525. package/vendor/ink/build/components/Text.d.ts +55 -0
  526. package/vendor/ink/build/components/Text.js +50 -0
  527. package/vendor/ink/build/components/Text.js.map +1 -0
  528. package/vendor/ink/build/components/Transform.d.ts +16 -0
  529. package/vendor/ink/build/components/Transform.js +15 -0
  530. package/vendor/ink/build/components/Transform.js.map +1 -0
  531. package/vendor/ink/build/cursor-helpers.d.ts +38 -0
  532. package/vendor/ink/build/cursor-helpers.js +56 -0
  533. package/vendor/ink/build/cursor-helpers.js.map +1 -0
  534. package/vendor/ink/build/devtools-window-polyfill.d.ts +1 -0
  535. package/vendor/ink/build/devtools-window-polyfill.js +65 -0
  536. package/vendor/ink/build/devtools-window-polyfill.js.map +1 -0
  537. package/vendor/ink/build/devtools.d.ts +1 -0
  538. package/vendor/ink/build/devtools.js +11 -0
  539. package/vendor/ink/build/devtools.js.map +1 -0
  540. package/vendor/ink/build/dom.d.ts +56 -0
  541. package/vendor/ink/build/dom.js +124 -0
  542. package/vendor/ink/build/dom.js.map +1 -0
  543. package/vendor/ink/build/experimental/apply-style.js +140 -0
  544. package/vendor/ink/build/experimental/dom.js +123 -0
  545. package/vendor/ink/build/experimental/output.js +91 -0
  546. package/vendor/ink/build/experimental/reconciler.js +141 -0
  547. package/vendor/ink/build/experimental/renderer.js +81 -0
  548. package/vendor/ink/build/get-max-width.d.ts +3 -0
  549. package/vendor/ink/build/get-max-width.js +10 -0
  550. package/vendor/ink/build/get-max-width.js.map +1 -0
  551. package/vendor/ink/build/hooks/use-app.d.ts +5 -0
  552. package/vendor/ink/build/hooks/use-app.js +8 -0
  553. package/vendor/ink/build/hooks/use-app.js.map +1 -0
  554. package/vendor/ink/build/hooks/use-cursor.d.ts +12 -0
  555. package/vendor/ink/build/hooks/use-cursor.js +29 -0
  556. package/vendor/ink/build/hooks/use-cursor.js.map +1 -0
  557. package/vendor/ink/build/hooks/use-focus-manager.d.ts +28 -0
  558. package/vendor/ink/build/hooks/use-focus-manager.js +17 -0
  559. package/vendor/ink/build/hooks/use-focus-manager.js.map +1 -0
  560. package/vendor/ink/build/hooks/use-focus.d.ts +29 -0
  561. package/vendor/ink/build/hooks/use-focus.js +42 -0
  562. package/vendor/ink/build/hooks/use-focus.js.map +1 -0
  563. package/vendor/ink/build/hooks/use-input.d.ts +131 -0
  564. package/vendor/ink/build/hooks/use-input.js +124 -0
  565. package/vendor/ink/build/hooks/use-input.js.map +1 -0
  566. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.d.ts +5 -0
  567. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js +11 -0
  568. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
  569. package/vendor/ink/build/hooks/use-stderr.d.ts +5 -0
  570. package/vendor/ink/build/hooks/use-stderr.js +8 -0
  571. package/vendor/ink/build/hooks/use-stderr.js.map +1 -0
  572. package/vendor/ink/build/hooks/use-stdin.d.ts +5 -0
  573. package/vendor/ink/build/hooks/use-stdin.js +8 -0
  574. package/vendor/ink/build/hooks/use-stdin.js.map +1 -0
  575. package/vendor/ink/build/hooks/use-stdout.d.ts +5 -0
  576. package/vendor/ink/build/hooks/use-stdout.js +8 -0
  577. package/vendor/ink/build/hooks/use-stdout.js.map +1 -0
  578. package/vendor/ink/build/hooks/useInput.js +38 -0
  579. package/vendor/ink/build/index.d.ts +34 -0
  580. package/vendor/ink/build/index.js +20 -0
  581. package/vendor/ink/build/index.js.map +1 -0
  582. package/vendor/ink/build/ink.d.ts +90 -0
  583. package/vendor/ink/build/ink.js +654 -0
  584. package/vendor/ink/build/ink.js.map +1 -0
  585. package/vendor/ink/build/input-parser.d.ts +7 -0
  586. package/vendor/ink/build/input-parser.js +154 -0
  587. package/vendor/ink/build/input-parser.js.map +1 -0
  588. package/vendor/ink/build/instance.js +205 -0
  589. package/vendor/ink/build/instances.d.ts +3 -0
  590. package/vendor/ink/build/instances.js +8 -0
  591. package/vendor/ink/build/instances.js.map +1 -0
  592. package/vendor/ink/build/kitty-keyboard.d.ts +23 -0
  593. package/vendor/ink/build/kitty-keyboard.js +32 -0
  594. package/vendor/ink/build/kitty-keyboard.js.map +1 -0
  595. package/vendor/ink/build/layout.d.ts +7 -0
  596. package/vendor/ink/build/layout.js +33 -0
  597. package/vendor/ink/build/layout.js.map +1 -0
  598. package/vendor/ink/build/log-update.d.ts +19 -0
  599. package/vendor/ink/build/log-update.js +243 -0
  600. package/vendor/ink/build/log-update.js.map +1 -0
  601. package/vendor/ink/build/measure-element.d.ts +16 -0
  602. package/vendor/ink/build/measure-element.js +9 -0
  603. package/vendor/ink/build/measure-element.js.map +1 -0
  604. package/vendor/ink/build/measure-text.d.ts +6 -0
  605. package/vendor/ink/build/measure-text.js +21 -0
  606. package/vendor/ink/build/measure-text.js.map +1 -0
  607. package/vendor/ink/build/options.d.ts +52 -0
  608. package/vendor/ink/build/options.js +2 -0
  609. package/vendor/ink/build/options.js.map +1 -0
  610. package/vendor/ink/build/output.d.ts +35 -0
  611. package/vendor/ink/build/output.js +183 -0
  612. package/vendor/ink/build/output.js.map +1 -0
  613. package/vendor/ink/build/parse-keypress.d.ts +22 -0
  614. package/vendor/ink/build/parse-keypress.js +493 -0
  615. package/vendor/ink/build/parse-keypress.js.map +1 -0
  616. package/vendor/ink/build/reconciler.d.ts +4 -0
  617. package/vendor/ink/build/reconciler.js +274 -0
  618. package/vendor/ink/build/reconciler.js.map +1 -0
  619. package/vendor/ink/build/render-background.d.ts +4 -0
  620. package/vendor/ink/build/render-background.js +25 -0
  621. package/vendor/ink/build/render-background.js.map +1 -0
  622. package/vendor/ink/build/render-border.d.ts +4 -0
  623. package/vendor/ink/build/render-border.js +73 -0
  624. package/vendor/ink/build/render-border.js.map +1 -0
  625. package/vendor/ink/build/render-node-to-output.d.ts +14 -0
  626. package/vendor/ink/build/render-node-to-output.js +147 -0
  627. package/vendor/ink/build/render-node-to-output.js.map +1 -0
  628. package/vendor/ink/build/render-to-string.d.ts +38 -0
  629. package/vendor/ink/build/render-to-string.js +115 -0
  630. package/vendor/ink/build/render-to-string.js.map +1 -0
  631. package/vendor/ink/build/render.d.ts +121 -0
  632. package/vendor/ink/build/render.js +55 -0
  633. package/vendor/ink/build/render.js.map +1 -0
  634. package/vendor/ink/build/renderer.d.ts +8 -0
  635. package/vendor/ink/build/renderer.js +55 -0
  636. package/vendor/ink/build/renderer.js.map +1 -0
  637. package/vendor/ink/build/sanitize-ansi.d.ts +2 -0
  638. package/vendor/ink/build/sanitize-ansi.js +27 -0
  639. package/vendor/ink/build/sanitize-ansi.js.map +1 -0
  640. package/vendor/ink/build/screen-reader-update.d.ts +13 -0
  641. package/vendor/ink/build/screen-reader-update.js +38 -0
  642. package/vendor/ink/build/screen-reader-update.js.map +1 -0
  643. package/vendor/ink/build/squash-text-nodes.d.ts +3 -0
  644. package/vendor/ink/build/squash-text-nodes.js +36 -0
  645. package/vendor/ink/build/squash-text-nodes.js.map +1 -0
  646. package/vendor/ink/build/styles.d.ts +240 -0
  647. package/vendor/ink/build/styles.js +232 -0
  648. package/vendor/ink/build/styles.js.map +1 -0
  649. package/vendor/ink/build/utils.d.ts +2 -0
  650. package/vendor/ink/build/utils.js +4 -0
  651. package/vendor/ink/build/utils.js.map +1 -0
  652. package/vendor/ink/build/wrap-text.d.ts +3 -0
  653. package/vendor/ink/build/wrap-text.js +31 -0
  654. package/vendor/ink/build/wrap-text.js.map +1 -0
  655. package/vendor/ink/build/write-synchronized.d.ts +4 -0
  656. package/vendor/ink/build/write-synchronized.js +7 -0
  657. package/vendor/ink/build/write-synchronized.js.map +1 -0
  658. package/vendor/ink/license +10 -0
  659. package/vendor/ink/node_modules/@types/node/LICENSE +21 -0
  660. package/vendor/ink/node_modules/@types/node/README.md +15 -0
  661. package/vendor/ink/node_modules/@types/node/assert/strict.d.ts +105 -0
  662. package/vendor/ink/node_modules/@types/node/assert.d.ts +955 -0
  663. package/vendor/ink/node_modules/@types/node/async_hooks.d.ts +623 -0
  664. package/vendor/ink/node_modules/@types/node/buffer.buffer.d.ts +466 -0
  665. package/vendor/ink/node_modules/@types/node/buffer.d.ts +1810 -0
  666. package/vendor/ink/node_modules/@types/node/child_process.d.ts +1428 -0
  667. package/vendor/ink/node_modules/@types/node/cluster.d.ts +486 -0
  668. package/vendor/ink/node_modules/@types/node/compatibility/iterators.d.ts +21 -0
  669. package/vendor/ink/node_modules/@types/node/console.d.ts +151 -0
  670. package/vendor/ink/node_modules/@types/node/constants.d.ts +20 -0
  671. package/vendor/ink/node_modules/@types/node/crypto.d.ts +4065 -0
  672. package/vendor/ink/node_modules/@types/node/dgram.d.ts +564 -0
  673. package/vendor/ink/node_modules/@types/node/diagnostics_channel.d.ts +576 -0
  674. package/vendor/ink/node_modules/@types/node/dns/promises.d.ts +503 -0
  675. package/vendor/ink/node_modules/@types/node/dns.d.ts +922 -0
  676. package/vendor/ink/node_modules/@types/node/domain.d.ts +166 -0
  677. package/vendor/ink/node_modules/@types/node/events.d.ts +1054 -0
  678. package/vendor/ink/node_modules/@types/node/fs/promises.d.ts +1329 -0
  679. package/vendor/ink/node_modules/@types/node/fs.d.ts +4676 -0
  680. package/vendor/ink/node_modules/@types/node/globals.d.ts +150 -0
  681. package/vendor/ink/node_modules/@types/node/globals.typedarray.d.ts +101 -0
  682. package/vendor/ink/node_modules/@types/node/http.d.ts +2167 -0
  683. package/vendor/ink/node_modules/@types/node/http2.d.ts +2480 -0
  684. package/vendor/ink/node_modules/@types/node/https.d.ts +405 -0
  685. package/vendor/ink/node_modules/@types/node/index.d.ts +115 -0
  686. package/vendor/ink/node_modules/@types/node/inspector/promises.d.ts +41 -0
  687. package/vendor/ink/node_modules/@types/node/inspector.d.ts +224 -0
  688. package/vendor/ink/node_modules/@types/node/inspector.generated.d.ts +4226 -0
  689. package/vendor/ink/node_modules/@types/node/module.d.ts +819 -0
  690. package/vendor/ink/node_modules/@types/node/net.d.ts +933 -0
  691. package/vendor/ink/node_modules/@types/node/os.d.ts +507 -0
  692. package/vendor/ink/node_modules/@types/node/package.json +155 -0
  693. package/vendor/ink/node_modules/@types/node/path/posix.d.ts +8 -0
  694. package/vendor/ink/node_modules/@types/node/path/win32.d.ts +8 -0
  695. package/vendor/ink/node_modules/@types/node/path.d.ts +187 -0
  696. package/vendor/ink/node_modules/@types/node/perf_hooks.d.ts +643 -0
  697. package/vendor/ink/node_modules/@types/node/process.d.ts +2156 -0
  698. package/vendor/ink/node_modules/@types/node/punycode.d.ts +117 -0
  699. package/vendor/ink/node_modules/@types/node/querystring.d.ts +152 -0
  700. package/vendor/ink/node_modules/@types/node/quic.d.ts +910 -0
  701. package/vendor/ink/node_modules/@types/node/readline/promises.d.ts +161 -0
  702. package/vendor/ink/node_modules/@types/node/readline.d.ts +541 -0
  703. package/vendor/ink/node_modules/@types/node/repl.d.ts +415 -0
  704. package/vendor/ink/node_modules/@types/node/sea.d.ts +162 -0
  705. package/vendor/ink/node_modules/@types/node/sqlite.d.ts +955 -0
  706. package/vendor/ink/node_modules/@types/node/stream/consumers.d.ts +38 -0
  707. package/vendor/ink/node_modules/@types/node/stream/promises.d.ts +211 -0
  708. package/vendor/ink/node_modules/@types/node/stream/web.d.ts +296 -0
  709. package/vendor/ink/node_modules/@types/node/stream.d.ts +1760 -0
  710. package/vendor/ink/node_modules/@types/node/string_decoder.d.ts +67 -0
  711. package/vendor/ink/node_modules/@types/node/test/reporters.d.ts +96 -0
  712. package/vendor/ink/node_modules/@types/node/test.d.ts +2240 -0
  713. package/vendor/ink/node_modules/@types/node/timers/promises.d.ts +108 -0
  714. package/vendor/ink/node_modules/@types/node/timers.d.ts +159 -0
  715. package/vendor/ink/node_modules/@types/node/tls.d.ts +1198 -0
  716. package/vendor/ink/node_modules/@types/node/trace_events.d.ts +197 -0
  717. package/vendor/ink/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +462 -0
  718. package/vendor/ink/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +71 -0
  719. package/vendor/ink/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +36 -0
  720. package/vendor/ink/node_modules/@types/node/ts5.6/index.d.ts +117 -0
  721. package/vendor/ink/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +72 -0
  722. package/vendor/ink/node_modules/@types/node/ts5.7/index.d.ts +117 -0
  723. package/vendor/ink/node_modules/@types/node/tty.d.ts +250 -0
  724. package/vendor/ink/node_modules/@types/node/url.d.ts +519 -0
  725. package/vendor/ink/node_modules/@types/node/util/types.d.ts +558 -0
  726. package/vendor/ink/node_modules/@types/node/util.d.ts +1662 -0
  727. package/vendor/ink/node_modules/@types/node/v8.d.ts +983 -0
  728. package/vendor/ink/node_modules/@types/node/vm.d.ts +1208 -0
  729. package/vendor/ink/node_modules/@types/node/wasi.d.ts +202 -0
  730. package/vendor/ink/node_modules/@types/node/web-globals/abortcontroller.d.ts +59 -0
  731. package/vendor/ink/node_modules/@types/node/web-globals/blob.d.ts +23 -0
  732. package/vendor/ink/node_modules/@types/node/web-globals/console.d.ts +9 -0
  733. package/vendor/ink/node_modules/@types/node/web-globals/crypto.d.ts +39 -0
  734. package/vendor/ink/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  735. package/vendor/ink/node_modules/@types/node/web-globals/encoding.d.ts +11 -0
  736. package/vendor/ink/node_modules/@types/node/web-globals/events.d.ts +106 -0
  737. package/vendor/ink/node_modules/@types/node/web-globals/fetch.d.ts +69 -0
  738. package/vendor/ink/node_modules/@types/node/web-globals/importmeta.d.ts +13 -0
  739. package/vendor/ink/node_modules/@types/node/web-globals/messaging.d.ts +23 -0
  740. package/vendor/ink/node_modules/@types/node/web-globals/navigator.d.ts +25 -0
  741. package/vendor/ink/node_modules/@types/node/web-globals/performance.d.ts +45 -0
  742. package/vendor/ink/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  743. package/vendor/ink/node_modules/@types/node/web-globals/streams.d.ts +115 -0
  744. package/vendor/ink/node_modules/@types/node/web-globals/timers.d.ts +44 -0
  745. package/vendor/ink/node_modules/@types/node/web-globals/url.d.ts +24 -0
  746. package/vendor/ink/node_modules/@types/node/worker_threads.d.ts +717 -0
  747. package/vendor/ink/node_modules/@types/node/zlib.d.ts +618 -0
  748. package/vendor/ink/node_modules/node-pty/LICENSE +69 -0
  749. package/vendor/ink/node_modules/node-pty/README.md +164 -0
  750. package/vendor/ink/node_modules/node-pty/binding.gyp +150 -0
  751. package/vendor/ink/node_modules/node-pty/lib/conpty_console_list_agent.js +25 -0
  752. package/vendor/ink/node_modules/node-pty/lib/eventEmitter2.js +47 -0
  753. package/vendor/ink/node_modules/node-pty/lib/index.js +52 -0
  754. package/vendor/ink/node_modules/node-pty/lib/interfaces.js +7 -0
  755. package/vendor/ink/node_modules/node-pty/lib/shared/conout.js +11 -0
  756. package/vendor/ink/node_modules/node-pty/lib/terminal.js +190 -0
  757. package/vendor/ink/node_modules/node-pty/lib/types.js +7 -0
  758. package/vendor/ink/node_modules/node-pty/lib/unixTerminal.js +349 -0
  759. package/vendor/ink/node_modules/node-pty/lib/utils.js +39 -0
  760. package/vendor/ink/node_modules/node-pty/lib/windowsConoutConnection.js +125 -0
  761. package/vendor/ink/node_modules/node-pty/lib/windowsPtyAgent.js +287 -0
  762. package/vendor/ink/node_modules/node-pty/lib/windowsTerminal.js +201 -0
  763. package/vendor/ink/node_modules/node-pty/lib/worker/conoutSocketWorker.js +22 -0
  764. package/vendor/ink/node_modules/node-pty/package.json +65 -0
  765. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/pty.node +0 -0
  766. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/spawn-helper +0 -0
  767. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/pty.node +0 -0
  768. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/spawn-helper +0 -0
  769. package/vendor/ink/node_modules/node-pty/prebuilds/linux-arm64/pty.node +0 -0
  770. package/vendor/ink/node_modules/node-pty/prebuilds/linux-x64/pty.node +0 -0
  771. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
  772. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
  773. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
  774. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.pdb +0 -0
  775. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
  776. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.pdb +0 -0
  777. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
  778. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
  779. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.node +0 -0
  780. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.pdb +0 -0
  781. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
  782. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.pdb +0 -0
  783. package/vendor/ink/node_modules/node-pty/scripts/post-install.js +76 -0
  784. package/vendor/ink/node_modules/node-pty/scripts/prebuild.js +34 -0
  785. package/vendor/ink/node_modules/node-pty/src/unix/pty.cc +875 -0
  786. package/vendor/ink/node_modules/node-pty/src/unix/spawn-helper.cc +23 -0
  787. package/vendor/ink/node_modules/node-pty/src/win/conpty.cc +582 -0
  788. package/vendor/ink/node_modules/node-pty/src/win/conpty.h +41 -0
  789. package/vendor/ink/node_modules/node-pty/src/win/conpty_console_list.cc +44 -0
  790. package/vendor/ink/node_modules/node-pty/src/win/path_util.cc +95 -0
  791. package/vendor/ink/node_modules/node-pty/src/win/path_util.h +26 -0
  792. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/OpenConsole.exe +0 -0
  793. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/conpty.dll +0 -0
  794. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/OpenConsole.exe +0 -0
  795. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/conpty.dll +0 -0
  796. package/vendor/ink/node_modules/node-pty/typings/node-pty.d.ts +215 -0
  797. package/vendor/ink/node_modules/undici-types/LICENSE +21 -0
  798. package/vendor/ink/node_modules/undici-types/README.md +6 -0
  799. package/vendor/ink/node_modules/undici-types/agent.d.ts +32 -0
  800. package/vendor/ink/node_modules/undici-types/api.d.ts +43 -0
  801. package/vendor/ink/node_modules/undici-types/balanced-pool.d.ts +30 -0
  802. package/vendor/ink/node_modules/undici-types/cache-interceptor.d.ts +173 -0
  803. package/vendor/ink/node_modules/undici-types/cache.d.ts +36 -0
  804. package/vendor/ink/node_modules/undici-types/client-stats.d.ts +15 -0
  805. package/vendor/ink/node_modules/undici-types/client.d.ts +108 -0
  806. package/vendor/ink/node_modules/undici-types/connector.d.ts +34 -0
  807. package/vendor/ink/node_modules/undici-types/content-type.d.ts +21 -0
  808. package/vendor/ink/node_modules/undici-types/cookies.d.ts +30 -0
  809. package/vendor/ink/node_modules/undici-types/diagnostics-channel.d.ts +74 -0
  810. package/vendor/ink/node_modules/undici-types/dispatcher.d.ts +276 -0
  811. package/vendor/ink/node_modules/undici-types/env-http-proxy-agent.d.ts +22 -0
  812. package/vendor/ink/node_modules/undici-types/errors.d.ts +161 -0
  813. package/vendor/ink/node_modules/undici-types/eventsource.d.ts +66 -0
  814. package/vendor/ink/node_modules/undici-types/fetch.d.ts +211 -0
  815. package/vendor/ink/node_modules/undici-types/formdata.d.ts +108 -0
  816. package/vendor/ink/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  817. package/vendor/ink/node_modules/undici-types/global-origin.d.ts +7 -0
  818. package/vendor/ink/node_modules/undici-types/h2c-client.d.ts +73 -0
  819. package/vendor/ink/node_modules/undici-types/handlers.d.ts +15 -0
  820. package/vendor/ink/node_modules/undici-types/header.d.ts +160 -0
  821. package/vendor/ink/node_modules/undici-types/index.d.ts +88 -0
  822. package/vendor/ink/node_modules/undici-types/interceptors.d.ts +73 -0
  823. package/vendor/ink/node_modules/undici-types/mock-agent.d.ts +68 -0
  824. package/vendor/ink/node_modules/undici-types/mock-call-history.d.ts +111 -0
  825. package/vendor/ink/node_modules/undici-types/mock-client.d.ts +27 -0
  826. package/vendor/ink/node_modules/undici-types/mock-errors.d.ts +12 -0
  827. package/vendor/ink/node_modules/undici-types/mock-interceptor.d.ts +94 -0
  828. package/vendor/ink/node_modules/undici-types/mock-pool.d.ts +27 -0
  829. package/vendor/ink/node_modules/undici-types/package.json +55 -0
  830. package/vendor/ink/node_modules/undici-types/patch.d.ts +29 -0
  831. package/vendor/ink/node_modules/undici-types/pool-stats.d.ts +19 -0
  832. package/vendor/ink/node_modules/undici-types/pool.d.ts +41 -0
  833. package/vendor/ink/node_modules/undici-types/proxy-agent.d.ts +29 -0
  834. package/vendor/ink/node_modules/undici-types/readable.d.ts +68 -0
  835. package/vendor/ink/node_modules/undici-types/retry-agent.d.ts +8 -0
  836. package/vendor/ink/node_modules/undici-types/retry-handler.d.ts +125 -0
  837. package/vendor/ink/node_modules/undici-types/round-robin-pool.d.ts +41 -0
  838. package/vendor/ink/node_modules/undici-types/snapshot-agent.d.ts +109 -0
  839. package/vendor/ink/node_modules/undici-types/util.d.ts +18 -0
  840. package/vendor/ink/node_modules/undici-types/utility.d.ts +7 -0
  841. package/vendor/ink/node_modules/undici-types/webidl.d.ts +341 -0
  842. package/vendor/ink/node_modules/undici-types/websocket.d.ts +186 -0
  843. package/vendor/ink/package.json +201 -0
  844. package/vendor/ink/readme.md +2636 -0
  845. package/bin/swag-agent.js +0 -9
  846. package/dist/server/lib/pg-rate-limiter.d.ts +0 -21
  847. package/dist/server/lib/pg-rate-limiter.js +0 -86
@@ -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
  */