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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"background-processes.js","names":["spawn","readFileSync","existsSync","processes","Map","MAX_BUFFER_LINES","MAX_PROCESSES","generateProcessId","Date","now","Math","random","toString","slice","cleanOldProcesses","procs","Array","from","values","completed","filter","p","status","sort","a","b","startedAt","getTime","size","length","oldest","shift","delete","id","spawnBackground","command","options","cwd","process","timeout","proc","outputBuffer","errorBuffer","lastReadIndex","lastErrorReadIndex","child","shell","env","FORCE_COLOR","stdio","err","message","stdout","on","data","lines","split","line","trim","push","splice","stderr","code","exitCode","undefined","setTimeout","kill","set","Promise","resolve","join","pid","l","readProcessOutput","get","match","keys","find","k","includes","error","newStdout","newStderr","filteredOutput","filteredErrors","regex","RegExp","test","newOutput","newErrors","killProcess","success","listProcesses","map","runtimeMs","runtimeSec","floor","runtime","toISOString","outputLines","errorLines","bgAgents","registerBackgroundAgent","type","outputFile","startTime","getAgentStatus","markAgentDone","agent","readAgentOutput","raw","output","doneIdx","indexOf","json","JSON","parse","clean","result","errIdx","errMsg","content","startsWith","listBackgroundAgents","stopBackgroundAgent","BACKGROUND_TOOL_DEFINITIONS","name","description","input_schema","properties","bash_id","required","shell_id"],"sources":["../../../src/cli/services/background-processes.ts"],"sourcesContent":["/**\n * Background Process Management — Claude Code-style async shell execution\n *\n * Enables running long-running processes (dev servers, watchers, builds)\n * without blocking the agent loop.\n *\n * Tools:\n * - run_command with run_in_background: true\n * - bash_output: Read output from running/completed process\n * - kill_shell: Terminate a background process\n */\n\nimport { spawn, ChildProcess } from \"child_process\";\nimport { readFileSync, existsSync } from \"fs\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface BackgroundProcess {\n id: string;\n command: string;\n cwd: string;\n startedAt: Date;\n status: \"running\" | \"completed\" | \"failed\" | \"killed\";\n exitCode?: number;\n outputBuffer: string[];\n errorBuffer: string[];\n process: ChildProcess | null;\n lastReadIndex: number; // Track what's been read (stdout)\n lastErrorReadIndex: number; // Track what's been read (stderr)\n}\n\nexport interface ProcessOutput {\n id: string;\n status: BackgroundProcess[\"status\"];\n newOutput: string;\n newErrors: string;\n exitCode?: number;\n}\n\n// ============================================================================\n// PROCESS REGISTRY — in-memory store of running/completed processes\n// ============================================================================\n\nconst processes = new Map<string, BackgroundProcess>();\nconst MAX_BUFFER_LINES = 10000;\nconst MAX_PROCESSES = 20;\n\n// ============================================================================\n// HELPERS\n// ============================================================================\n\nfunction generateProcessId(): string {\n return `shell-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;\n}\n\nfunction cleanOldProcesses(): void {\n // Remove oldest completed/failed processes if we're at capacity\n const procs = Array.from(processes.values());\n const completed = procs\n .filter((p) => p.status !== \"running\")\n .sort((a, b) => a.startedAt.getTime() - b.startedAt.getTime());\n\n while (processes.size >= MAX_PROCESSES && completed.length > 0) {\n const oldest = completed.shift()!;\n processes.delete(oldest.id);\n }\n}\n\n// ============================================================================\n// SPAWN BACKGROUND PROCESS\n// ============================================================================\n\nexport async function spawnBackground(\n command: string,\n options: {\n cwd?: string;\n timeout?: number; // Max runtime in ms (default: 10 minutes)\n description?: string;\n } = {}\n): Promise<{ id: string; message: string; status: \"running\" | \"failed\" }> {\n cleanOldProcesses();\n\n const id = generateProcessId();\n const cwd = options.cwd || process.cwd();\n const timeout = options.timeout || 600_000; // 10 minutes default\n\n const proc: BackgroundProcess = {\n id,\n command,\n cwd,\n startedAt: new Date(),\n status: \"running\",\n outputBuffer: [],\n errorBuffer: [],\n process: null,\n lastReadIndex: 0,\n lastErrorReadIndex: 0,\n };\n\n // Spawn with shell\n let child: ChildProcess;\n try {\n child = spawn(command, [], {\n shell: true,\n cwd,\n env: { ...process.env, FORCE_COLOR: \"0\" },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n } catch (err: any) {\n return { id, message: `Failed to spawn: ${err.message}`, status: \"failed\" };\n }\n\n proc.process = child;\n\n // Capture stdout\n child.stdout?.on(\"data\", (data: Buffer) => {\n const lines = data.toString().split(\"\\n\");\n for (const line of lines) {\n if (line.trim()) {\n proc.outputBuffer.push(line);\n if (proc.outputBuffer.length > MAX_BUFFER_LINES) {\n proc.outputBuffer.splice(0, proc.outputBuffer.length - MAX_BUFFER_LINES);\n }\n }\n }\n });\n\n // Capture stderr\n child.stderr?.on(\"data\", (data: Buffer) => {\n const lines = data.toString().split(\"\\n\");\n for (const line of lines) {\n if (line.trim()) {\n proc.errorBuffer.push(line);\n if (proc.errorBuffer.length > MAX_BUFFER_LINES) {\n proc.errorBuffer.splice(0, proc.errorBuffer.length - MAX_BUFFER_LINES);\n }\n }\n }\n });\n\n // Handle exit\n child.on(\"exit\", (code) => {\n proc.status = code === 0 ? \"completed\" : \"failed\";\n proc.exitCode = code ?? undefined;\n proc.process = null;\n });\n\n child.on(\"error\", (err) => {\n proc.status = \"failed\";\n proc.errorBuffer.push(`Process error: ${err.message}`);\n proc.process = null;\n });\n\n // Timeout kill\n setTimeout(() => {\n if (proc.status === \"running\" && proc.process) {\n proc.process.kill(\"SIGTERM\");\n proc.status = \"killed\";\n proc.errorBuffer.push(`Process killed after ${timeout}ms timeout`);\n }\n }, timeout);\n\n processes.set(id, proc);\n\n // ── Validation wait — give process 1.5s to start or fail ──\n await new Promise(resolve => setTimeout(resolve, 1500));\n\n // Build result with validation\n const lines: string[] = [];\n if (proc.status === \"failed\") {\n lines.push(`✕ Process failed immediately`);\n lines.push(` Command: ${command}`);\n if (proc.errorBuffer.length > 0) lines.push(` Error: ${proc.errorBuffer.join(\"\\n \")}`);\n if (proc.exitCode !== undefined) lines.push(` Exit code: ${proc.exitCode}`);\n return { id, message: lines.join(\"\\n\"), status: \"failed\" };\n }\n\n lines.push(`✓ Background process running`);\n lines.push(` PID: ${child.pid || \"?\"}`);\n lines.push(` ID: ${id}`);\n lines.push(` Command: ${command}`);\n if (proc.outputBuffer.length > 0) {\n lines.push(` Initial output (${proc.outputBuffer.length} lines):`);\n for (const l of proc.outputBuffer.slice(0, 8)) {\n lines.push(` ${l}`);\n }\n if (proc.outputBuffer.length > 8) lines.push(` ... +${proc.outputBuffer.length - 8} more lines`);\n }\n if (proc.errorBuffer.length > 0) {\n lines.push(` Stderr (${proc.errorBuffer.length} lines):`);\n for (const l of proc.errorBuffer.slice(0, 4)) {\n lines.push(` ${l}`);\n }\n }\n lines.push(` Use bash_output(\"${id}\") to check output, kill_shell(\"${id}\") to stop.`);\n\n return { id, message: lines.join(\"\\n\"), status: \"running\" };\n}\n\n// ============================================================================\n// READ OUTPUT\n// ============================================================================\n\nexport function readProcessOutput(\n id: string,\n options: {\n filter?: string; // Regex to filter lines\n } = {}\n): ProcessOutput | { error: string } {\n const proc = processes.get(id);\n if (!proc) {\n // Try partial match\n const match = Array.from(processes.keys()).find(k => k.includes(id));\n if (match) return readProcessOutput(match, options);\n return { error: `Process not found: ${id}. Use list_shells to see available processes.` };\n }\n\n // Get new output since last read (separate indices for stdout/stderr)\n const newStdout = proc.outputBuffer.slice(proc.lastReadIndex);\n const newStderr = proc.errorBuffer.slice(proc.lastErrorReadIndex);\n\n // Update read indices\n proc.lastReadIndex = proc.outputBuffer.length;\n proc.lastErrorReadIndex = proc.errorBuffer.length;\n\n // Apply filter if provided\n let filteredOutput = newStdout;\n let filteredErrors = newStderr;\n\n if (options.filter) {\n try {\n const regex = new RegExp(options.filter, \"i\");\n filteredOutput = newStdout.filter((line) => regex.test(line));\n filteredErrors = newStderr.filter((line) => regex.test(line));\n } catch {\n // Invalid regex, return unfiltered\n }\n }\n\n return {\n id,\n status: proc.status,\n newOutput: filteredOutput.join(\"\\n\"),\n newErrors: filteredErrors.join(\"\\n\"),\n exitCode: proc.exitCode,\n };\n}\n\n// ============================================================================\n// KILL PROCESS\n// ============================================================================\n\nexport function killProcess(id: string): { success: boolean; message: string } {\n const proc = processes.get(id);\n if (!proc) {\n return { success: false, message: `Process not found: ${id}` };\n }\n\n if (proc.status !== \"running\") {\n return { success: false, message: `Process already ${proc.status}` };\n }\n\n if (proc.process) {\n proc.process.kill(\"SIGTERM\");\n\n // Force kill after 5 seconds if still running\n setTimeout(() => {\n if (proc.process) {\n proc.process.kill(\"SIGKILL\");\n }\n }, 5000);\n }\n\n proc.status = \"killed\";\n\n return { success: true, message: `Process ${id} killed` };\n}\n\n// ============================================================================\n// LIST PROCESSES\n// ============================================================================\n\nexport function listProcesses(): Array<{\n id: string;\n pid: number | undefined;\n command: string;\n status: BackgroundProcess[\"status\"];\n startedAt: string;\n runtime: string;\n outputLines: number;\n errorLines: number;\n}> {\n const now = Date.now();\n return Array.from(processes.values()).map((p) => {\n const runtimeMs = now - p.startedAt.getTime();\n const runtimeSec = Math.floor(runtimeMs / 1000);\n const runtime =\n runtimeSec < 60\n ? `${runtimeSec}s`\n : runtimeSec < 3600\n ? `${Math.floor(runtimeSec / 60)}m ${runtimeSec % 60}s`\n : `${Math.floor(runtimeSec / 3600)}h ${Math.floor((runtimeSec % 3600) / 60)}m`;\n\n return {\n id: p.id,\n pid: p.process?.pid,\n command: p.command.length > 50 ? p.command.slice(0, 47) + \"...\" : p.command,\n status: p.status,\n startedAt: p.startedAt.toISOString(),\n runtime,\n outputLines: p.outputBuffer.length,\n errorLines: p.errorBuffer.length,\n };\n });\n}\n\n// ============================================================================\n// BACKGROUND AGENT TRACKING\n// ============================================================================\n\ninterface BackgroundAgent {\n id: string;\n type: string;\n outputFile: string;\n startTime: number;\n status: \"running\" | \"completed\" | \"failed\";\n}\n\nconst bgAgents = new Map<string, BackgroundAgent>();\n\nexport function registerBackgroundAgent(id: string, type: string, outputFile: string): void {\n bgAgents.set(id, { id, type, outputFile, startTime: Date.now(), status: \"running\" });\n}\n\nexport function getAgentStatus(id: string): BackgroundAgent | null {\n return bgAgents.get(id) || null;\n}\n\nexport function markAgentDone(id: string, success: boolean): void {\n const agent = bgAgents.get(id);\n if (agent) agent.status = success ? \"completed\" : \"failed\";\n}\n\nexport function readAgentOutput(id: string): { status: string; output: string } | null {\n const agent = bgAgents.get(id);\n if (!agent) return null;\n try {\n const raw = existsSync(agent.outputFile) ? readFileSync(agent.outputFile, \"utf-8\") : \"\";\n if (!raw) return { status: agent.status, output: \"(no output yet)\" };\n\n // Parse ---DONE--- sentinel: extract .output from the JSON blob after it\n const doneIdx = raw.indexOf(\"\\n---DONE---\\n\");\n if (doneIdx !== -1) {\n try {\n const json = JSON.parse(raw.slice(doneIdx + \"\\n---DONE---\\n\".length).trim());\n const clean = (json.output || json.result || json.message || \"\").toString().trim();\n return { status: agent.status, output: clean || raw.slice(0, doneIdx).trim() };\n } catch {\n // JSON parse failed — return content before sentinel\n return { status: agent.status, output: raw.slice(0, doneIdx).trim() };\n }\n }\n\n // Parse ---ERROR--- sentinel\n const errIdx = raw.indexOf(\"\\n---ERROR---\\n\");\n if (errIdx !== -1) {\n const errMsg = raw.slice(errIdx + \"\\n---ERROR---\\n\".length).trim();\n return { status: agent.status, output: errMsg || raw.slice(0, errIdx).trim() };\n }\n\n // Still running — strip the \"Agent X started\" header line\n const lines = raw.split(\"\\n\");\n const content = lines[0]?.startsWith(\"Agent \") ? lines.slice(1).join(\"\\n\").trim() : raw.trim();\n return { status: agent.status, output: content || \"(running...)\" };\n } catch {\n return { status: agent.status, output: \"(failed to read output file)\" };\n }\n}\n\nexport function listBackgroundAgents(): BackgroundAgent[] {\n return Array.from(bgAgents.values());\n}\n\nexport function stopBackgroundAgent(id: string): { success: boolean; message: string } {\n const agent = bgAgents.get(id);\n if (!agent) return { success: false, message: `Agent not found: ${id}` };\n if (agent.status !== \"running\") return { success: false, message: `Agent already ${agent.status}` };\n // We can't kill the async promise, but we mark it as failed so it won't be waited on\n agent.status = \"failed\";\n return { success: true, message: `Agent ${id} marked as stopped` };\n}\n\n// ============================================================================\n// TOOL DEFINITIONS\n// ============================================================================\n\nexport const BACKGROUND_TOOL_DEFINITIONS = [\n {\n name: \"bash_output\",\n description: \"Read output from a running or completed background shell process. Returns only NEW output since the last read.\",\n input_schema: {\n type: \"object\",\n properties: {\n bash_id: {\n type: \"string\",\n description: \"The process ID returned when starting the background process\",\n },\n filter: {\n type: \"string\",\n description: \"Optional regex to filter output lines (only matching lines returned)\",\n },\n },\n required: [\"bash_id\"],\n },\n },\n {\n name: \"kill_shell\",\n description: \"Terminate a running background shell process\",\n input_schema: {\n type: \"object\",\n properties: {\n shell_id: {\n type: \"string\",\n description: \"The process ID to kill\",\n },\n },\n required: [\"shell_id\"],\n },\n },\n {\n name: \"list_shells\",\n description: \"List all background shell processes (running and recent completed)\",\n input_schema: {\n type: \"object\",\n properties: {},\n required: [],\n },\n },\n];\n"],"mappings":"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","ignoreList":[]}
@@ -7,7 +7,7 @@
7
7
  *
8
8
  * Same pattern as: `gh auth login`, `vercel login`, `claude login`
9
9
  */
10
- import { type SwagManagerConfig } from "./config-store.js";
10
+ import { type WhaleConfig } from "./config-store.js";
11
11
  import type { StoreInfo } from "./auth-service.js";
12
12
  export interface BrowserAuthCallbacks {
13
13
  onBrowserOpening?: (url: string) => void;
@@ -17,7 +17,7 @@ export interface BrowserAuthCallbacks {
17
17
  export interface BrowserAuthResult {
18
18
  success: boolean;
19
19
  error?: string;
20
- config?: SwagManagerConfig;
20
+ config?: WhaleConfig;
21
21
  stores?: StoreInfo[];
22
22
  }
23
23
  export declare function openBrowser(url: string): void;
@@ -7,147 +7,187 @@
7
7
  *
8
8
  * Same pattern as: `gh auth login`, `vercel login`, `claude login`
9
9
  */
10
+
10
11
  import http from "node:http";
11
12
  import { exec } from "node:child_process";
12
13
  import { loadConfig, saveConfig } from "./config-store.js";
14
+
15
+ // ============================================================================
16
+ // TYPES
17
+ // ============================================================================
18
+
13
19
  const DEFAULT_PLATFORM_URL = "https://whaletools.dev";
14
20
  const DEFAULT_TIMEOUT_MS = 120_000; // 2 minutes
21
+
15
22
  // ============================================================================
16
23
  // OPEN BROWSER (cross-platform)
17
24
  // ============================================================================
25
+
18
26
  export function openBrowser(url) {
19
- const platform = process.platform;
20
- const cmd = platform === "darwin" ? "open" :
21
- platform === "win32" ? "start" :
22
- "xdg-open";
23
- exec(`${cmd} "${url}"`, (err) => {
24
- if (err) {
25
- // Non-fatal — user can manually open the URL
26
- console.error(`[browser-auth] Failed to open browser: ${err.message}`);
27
- }
28
- });
27
+ const platform = process.platform;
28
+ const cmd = platform === "darwin" ? "open" : platform === "win32" ? "start" : "xdg-open";
29
+ exec(`${cmd} "${url}"`, err => {
30
+ if (err) {
31
+ // Non-fatal user can manually open the URL
32
+ console.error(`[browser-auth] Failed to open browser: ${err.message}`);
33
+ }
34
+ });
29
35
  }
36
+
30
37
  // ============================================================================
31
38
  // BROWSER AUTH FLOW
32
39
  // ============================================================================
40
+
33
41
  export async function signInWithBrowser(platformUrl, callbacks, timeoutMs) {
34
- const platform = platformUrl || process.env.WHALETOOLS_PLATFORM_URL || loadConfig().platform_url || DEFAULT_PLATFORM_URL;
35
- const timeout = timeoutMs || DEFAULT_TIMEOUT_MS;
36
- const state = crypto.randomUUID();
37
- return new Promise((resolve) => {
38
- let settled = false;
39
- let timeoutId;
40
- let httpServer;
41
- function finish(result) {
42
- if (settled)
43
- return;
44
- settled = true;
45
- clearTimeout(timeoutId);
46
- try {
47
- httpServer?.close();
48
- }
49
- catch { }
50
- resolve(result);
42
+ const platform = platformUrl || process.env.WHALETOOLS_PLATFORM_URL || loadConfig().platform_url || DEFAULT_PLATFORM_URL;
43
+ const timeout = timeoutMs || DEFAULT_TIMEOUT_MS;
44
+ const state = crypto.randomUUID();
45
+ return new Promise(resolve => {
46
+ let settled = false;
47
+ let timeoutId;
48
+ let httpServer;
49
+ function finish(result) {
50
+ if (settled) return;
51
+ settled = true;
52
+ clearTimeout(timeoutId);
53
+ try {
54
+ httpServer?.close();
55
+ } catch {}
56
+ resolve(result);
57
+ }
58
+
59
+ // Start localhost callback server on random port
60
+ httpServer = http.createServer(async (req, res) => {
61
+ const url = new URL(req.url || "/", `http://localhost`);
62
+ if (url.pathname !== "/callback") {
63
+ res.writeHead(404);
64
+ res.end("Not found");
65
+ return;
66
+ }
67
+ const code = url.searchParams.get("code");
68
+ const returnedState = url.searchParams.get("state");
69
+
70
+ // CSRF check
71
+ if (returnedState !== state) {
72
+ res.writeHead(400, {
73
+ "Content-Type": "text/html"
74
+ });
75
+ res.end(errorPage("Security error: state mismatch. Please try again."));
76
+ finish({
77
+ success: false,
78
+ error: "State mismatch — possible CSRF attack"
79
+ });
80
+ return;
81
+ }
82
+ if (!code) {
83
+ res.writeHead(400, {
84
+ "Content-Type": "text/html"
85
+ });
86
+ res.end(errorPage("Missing auth code. Please try again."));
87
+ finish({
88
+ success: false,
89
+ error: "No auth code received"
90
+ });
91
+ return;
92
+ }
93
+
94
+ // Show success page immediately (before exchange — reduces perceived latency)
95
+ res.writeHead(200, {
96
+ "Content-Type": "text/html"
97
+ });
98
+ res.end(successPage());
99
+ callbacks?.onExchangingCode?.();
100
+
101
+ // Exchange the one-time code for tokens
102
+ try {
103
+ const exchangeRes = await fetch(`${platform}/api/auth/cli/exchange`, {
104
+ method: "POST",
105
+ headers: {
106
+ "Content-Type": "application/json"
107
+ },
108
+ body: JSON.stringify({
109
+ code
110
+ })
111
+ });
112
+ const data = await exchangeRes.json();
113
+ if (!exchangeRes.ok || data.error) {
114
+ finish({
115
+ success: false,
116
+ error: data.error || "Failed to exchange auth code"
117
+ });
118
+ return;
51
119
  }
52
- // Start localhost callback server on random port
53
- httpServer = http.createServer(async (req, res) => {
54
- const url = new URL(req.url || "/", `http://localhost`);
55
- if (url.pathname !== "/callback") {
56
- res.writeHead(404);
57
- res.end("Not found");
58
- return;
59
- }
60
- const code = url.searchParams.get("code");
61
- const returnedState = url.searchParams.get("state");
62
- // CSRF check
63
- if (returnedState !== state) {
64
- res.writeHead(400, { "Content-Type": "text/html" });
65
- res.end(errorPage("Security error: state mismatch. Please try again."));
66
- finish({ success: false, error: "State mismatch — possible CSRF attack" });
67
- return;
68
- }
69
- if (!code) {
70
- res.writeHead(400, { "Content-Type": "text/html" });
71
- res.end(errorPage("Missing auth code. Please try again."));
72
- finish({ success: false, error: "No auth code received" });
73
- return;
74
- }
75
- // Show success page immediately (before exchange — reduces perceived latency)
76
- res.writeHead(200, { "Content-Type": "text/html" });
77
- res.end(successPage());
78
- callbacks?.onExchangingCode?.();
79
- // Exchange the one-time code for tokens
80
- try {
81
- const exchangeRes = await fetch(`${platform}/api/auth/cli/exchange`, {
82
- method: "POST",
83
- headers: { "Content-Type": "application/json" },
84
- body: JSON.stringify({ code }),
85
- });
86
- const data = await exchangeRes.json();
87
- if (!exchangeRes.ok || data.error) {
88
- finish({ success: false, error: data.error || "Failed to exchange auth code" });
89
- return;
90
- }
91
- // data = { access_token, refresh_token, user_id, email, expires_at, stores }
92
- const config = {
93
- ...loadConfig(),
94
- access_token: data.access_token,
95
- refresh_token: data.refresh_token,
96
- user_id: data.user_id,
97
- email: data.email,
98
- expires_at: data.expires_at,
99
- platform_url: platform !== DEFAULT_PLATFORM_URL ? platform : undefined,
100
- };
101
- const stores = data.stores || [];
102
- // Auto-select store if user has exactly one
103
- if (stores.length === 1) {
104
- config.store_id = stores[0].id;
105
- config.store_name = stores[0].name;
106
- }
107
- saveConfig(config);
108
- finish({
109
- success: true,
110
- config,
111
- stores: stores.length > 1 ? stores : undefined,
112
- });
113
- }
114
- catch (err) {
115
- finish({
116
- success: false,
117
- error: `Code exchange failed: ${err instanceof Error ? err.message : String(err)}`,
118
- });
119
- }
120
+
121
+ // data = { access_token, refresh_token, user_id, email, expires_at, stores }
122
+ const config = {
123
+ ...loadConfig(),
124
+ access_token: data.access_token,
125
+ refresh_token: data.refresh_token,
126
+ user_id: data.user_id,
127
+ email: data.email,
128
+ expires_at: data.expires_at,
129
+ platform_url: platform !== DEFAULT_PLATFORM_URL ? platform : undefined
130
+ };
131
+ const stores = data.stores || [];
132
+
133
+ // Auto-select store if user has exactly one
134
+ if (stores.length === 1) {
135
+ config.store_id = stores[0].id;
136
+ config.store_name = stores[0].name;
137
+ }
138
+ saveConfig(config);
139
+ finish({
140
+ success: true,
141
+ config,
142
+ stores: stores.length > 1 ? stores : undefined
120
143
  });
121
- httpServer.listen(0, "127.0.0.1", () => {
122
- const addr = httpServer.address();
123
- if (!addr || typeof addr === "string") {
124
- finish({ success: false, error: "Failed to bind callback server" });
125
- return;
126
- }
127
- const port = addr.port;
128
- const loginUrl = `${platform}/auth/cli?port=${port}&state=${state}`;
129
- callbacks?.onBrowserOpening?.(loginUrl);
130
- openBrowser(loginUrl);
131
- callbacks?.onWaitingForCallback?.();
144
+ } catch (err) {
145
+ finish({
146
+ success: false,
147
+ error: `Code exchange failed: ${err instanceof Error ? err.message : String(err)}`
132
148
  });
133
- // Timeout
134
- timeoutId = setTimeout(() => {
135
- finish({
136
- success: false,
137
- error: "Login timed out. Please try again with `whale login`.",
138
- });
139
- }, timeout);
140
- // Handle server errors
141
- httpServer.on("error", (err) => {
142
- finish({ success: false, error: `Callback server error: ${err.message}` });
149
+ }
150
+ });
151
+ httpServer.listen(0, "127.0.0.1", () => {
152
+ const addr = httpServer.address();
153
+ if (!addr || typeof addr === "string") {
154
+ finish({
155
+ success: false,
156
+ error: "Failed to bind callback server"
143
157
  });
158
+ return;
159
+ }
160
+ const port = addr.port;
161
+ const loginUrl = `${platform}/auth/cli?port=${port}&state=${state}`;
162
+ callbacks?.onBrowserOpening?.(loginUrl);
163
+ openBrowser(loginUrl);
164
+ callbacks?.onWaitingForCallback?.();
165
+ });
166
+
167
+ // Timeout
168
+ timeoutId = setTimeout(() => {
169
+ finish({
170
+ success: false,
171
+ error: "Login timed out. Please try again with `whale login`."
172
+ });
173
+ }, timeout);
174
+
175
+ // Handle server errors
176
+ httpServer.on("error", err => {
177
+ finish({
178
+ success: false,
179
+ error: `Callback server error: ${err.message}`
180
+ });
144
181
  });
182
+ });
145
183
  }
184
+
146
185
  // ============================================================================
147
186
  // HTML PAGES (served by localhost callback)
148
187
  // ============================================================================
188
+
149
189
  function successPage() {
150
- return `<!DOCTYPE html>
190
+ return `<!DOCTYPE html>
151
191
  <html><head><title>Whale Code — Signed In</title>
152
192
  <style>
153
193
  body { background: #0a0a0a; color: #f5f5f7; font-family: -apple-system, BlinkMacSystemFont, sans-serif;
@@ -164,7 +204,7 @@ function successPage() {
164
204
  </div></body></html>`;
165
205
  }
166
206
  function errorPage(message) {
167
- return `<!DOCTYPE html>
207
+ return `<!DOCTYPE html>
168
208
  <html><head><title>Whale Code — Error</title>
169
209
  <style>
170
210
  body { background: #0a0a0a; color: #f5f5f7; font-family: -apple-system, BlinkMacSystemFont, sans-serif;
@@ -178,3 +218,4 @@ function errorPage(message) {
178
218
  <p>${message}</p>
179
219
  </div></body></html>`;
180
220
  }
221
+ //# sourceMappingURL=browser-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-auth.js","names":["http","exec","loadConfig","saveConfig","DEFAULT_PLATFORM_URL","DEFAULT_TIMEOUT_MS","openBrowser","url","platform","process","cmd","err","console","error","message","signInWithBrowser","platformUrl","callbacks","timeoutMs","env","WHALETOOLS_PLATFORM_URL","platform_url","timeout","state","crypto","randomUUID","Promise","resolve","settled","timeoutId","httpServer","finish","result","clearTimeout","close","createServer","req","res","URL","pathname","writeHead","end","code","searchParams","get","returnedState","errorPage","success","successPage","onExchangingCode","exchangeRes","fetch","method","headers","body","JSON","stringify","data","json","ok","config","access_token","refresh_token","user_id","email","expires_at","undefined","stores","length","store_id","id","store_name","name","Error","String","listen","addr","address","port","loginUrl","onBrowserOpening","onWaitingForCallback","setTimeout","on"],"sources":["../../../src/cli/services/browser-auth.ts"],"sourcesContent":["/**\n * Browser-based OAuth login for CLI and MCP\n *\n * Opens the user's browser to whaletools.dev/auth/cli, which handles\n * email/password (and future SSO), then redirects back to a localhost\n * callback with a one-time code. The CLI exchanges that code for tokens.\n *\n * Same pattern as: `gh auth login`, `vercel login`, `claude login`\n */\n\nimport http from \"node:http\";\nimport { exec } from \"node:child_process\";\nimport { loadConfig, saveConfig, updateConfig, type WhaleConfig } from \"./config-store.js\";\nimport type { StoreInfo } from \"./auth-service.js\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface BrowserAuthCallbacks {\n onBrowserOpening?: (url: string) => void;\n onWaitingForCallback?: () => void;\n onExchangingCode?: () => void;\n}\n\nexport interface BrowserAuthResult {\n success: boolean;\n error?: string;\n config?: WhaleConfig;\n stores?: StoreInfo[];\n}\n\nconst DEFAULT_PLATFORM_URL = \"https://whaletools.dev\";\nconst DEFAULT_TIMEOUT_MS = 120_000; // 2 minutes\n\n// ============================================================================\n// OPEN BROWSER (cross-platform)\n// ============================================================================\n\nexport function openBrowser(url: string): void {\n const platform = process.platform;\n const cmd =\n platform === \"darwin\" ? \"open\" :\n platform === \"win32\" ? \"start\" :\n \"xdg-open\";\n\n exec(`${cmd} \"${url}\"`, (err) => {\n if (err) {\n // Non-fatal — user can manually open the URL\n console.error(`[browser-auth] Failed to open browser: ${err.message}`);\n }\n });\n}\n\n// ============================================================================\n// BROWSER AUTH FLOW\n// ============================================================================\n\nexport async function signInWithBrowser(\n platformUrl?: string,\n callbacks?: BrowserAuthCallbacks,\n timeoutMs?: number,\n): Promise<BrowserAuthResult> {\n const platform = platformUrl || process.env.WHALETOOLS_PLATFORM_URL || loadConfig().platform_url || DEFAULT_PLATFORM_URL;\n const timeout = timeoutMs || DEFAULT_TIMEOUT_MS;\n const state = crypto.randomUUID();\n\n return new Promise((resolve) => {\n let settled = false;\n let timeoutId: ReturnType<typeof setTimeout>;\n let httpServer: http.Server;\n\n function finish(result: BrowserAuthResult) {\n if (settled) return;\n settled = true;\n clearTimeout(timeoutId);\n try { httpServer?.close(); } catch {}\n resolve(result);\n }\n\n // Start localhost callback server on random port\n httpServer = http.createServer(async (req, res) => {\n const url = new URL(req.url || \"/\", `http://localhost`);\n\n if (url.pathname !== \"/callback\") {\n res.writeHead(404);\n res.end(\"Not found\");\n return;\n }\n\n const code = url.searchParams.get(\"code\");\n const returnedState = url.searchParams.get(\"state\");\n\n // CSRF check\n if (returnedState !== state) {\n res.writeHead(400, { \"Content-Type\": \"text/html\" });\n res.end(errorPage(\"Security error: state mismatch. Please try again.\"));\n finish({ success: false, error: \"State mismatch — possible CSRF attack\" });\n return;\n }\n\n if (!code) {\n res.writeHead(400, { \"Content-Type\": \"text/html\" });\n res.end(errorPage(\"Missing auth code. Please try again.\"));\n finish({ success: false, error: \"No auth code received\" });\n return;\n }\n\n // Show success page immediately (before exchange — reduces perceived latency)\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(successPage());\n\n callbacks?.onExchangingCode?.();\n\n // Exchange the one-time code for tokens\n try {\n const exchangeRes = await fetch(`${platform}/api/auth/cli/exchange`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ code }),\n });\n\n const data = await exchangeRes.json();\n\n if (!exchangeRes.ok || data.error) {\n finish({ success: false, error: data.error || \"Failed to exchange auth code\" });\n return;\n }\n\n // data = { access_token, refresh_token, user_id, email, expires_at, stores }\n const config: WhaleConfig = {\n ...loadConfig(),\n access_token: data.access_token,\n refresh_token: data.refresh_token,\n user_id: data.user_id,\n email: data.email,\n expires_at: data.expires_at,\n platform_url: platform !== DEFAULT_PLATFORM_URL ? platform : undefined,\n };\n\n const stores: StoreInfo[] = data.stores || [];\n\n // Auto-select store if user has exactly one\n if (stores.length === 1) {\n config.store_id = stores[0].id;\n config.store_name = stores[0].name;\n }\n\n saveConfig(config);\n\n finish({\n success: true,\n config,\n stores: stores.length > 1 ? stores : undefined,\n });\n } catch (err) {\n finish({\n success: false,\n error: `Code exchange failed: ${err instanceof Error ? err.message : String(err)}`,\n });\n }\n });\n\n httpServer.listen(0, \"127.0.0.1\", () => {\n const addr = httpServer.address();\n if (!addr || typeof addr === \"string\") {\n finish({ success: false, error: \"Failed to bind callback server\" });\n return;\n }\n\n const port = addr.port;\n const loginUrl = `${platform}/auth/cli?port=${port}&state=${state}`;\n\n callbacks?.onBrowserOpening?.(loginUrl);\n openBrowser(loginUrl);\n callbacks?.onWaitingForCallback?.();\n });\n\n // Timeout\n timeoutId = setTimeout(() => {\n finish({\n success: false,\n error: \"Login timed out. Please try again with `whale login`.\",\n });\n }, timeout);\n\n // Handle server errors\n httpServer.on(\"error\", (err) => {\n finish({ success: false, error: `Callback server error: ${err.message}` });\n });\n });\n}\n\n// ============================================================================\n// HTML PAGES (served by localhost callback)\n// ============================================================================\n\nfunction successPage(): string {\n return `<!DOCTYPE html>\n<html><head><title>Whale Code — Signed In</title>\n<style>\n body { background: #0a0a0a; color: #f5f5f7; font-family: -apple-system, BlinkMacSystemFont, sans-serif;\n display: flex; align-items: center; justify-content: center; min-height: 100vh; margin: 0; }\n .box { text-align: center; max-width: 400px; }\n h1 { font-size: 1.5rem; margin-bottom: 0.5rem; }\n p { color: #a1a1a6; font-size: 0.9rem; }\n .check { font-size: 3rem; margin-bottom: 1rem; color: #30d158; }\n</style></head>\n<body><div class=\"box\">\n <div class=\"check\">&#10003;</div>\n <h1>Signed in!</h1>\n <p>You can close this window and return to your terminal.</p>\n</div></body></html>`;\n}\n\nfunction errorPage(message: string): string {\n return `<!DOCTYPE html>\n<html><head><title>Whale Code — Error</title>\n<style>\n body { background: #0a0a0a; color: #f5f5f7; font-family: -apple-system, BlinkMacSystemFont, sans-serif;\n display: flex; align-items: center; justify-content: center; min-height: 100vh; margin: 0; }\n .box { text-align: center; max-width: 400px; }\n h1 { font-size: 1.5rem; margin-bottom: 0.5rem; color: #ff453a; }\n p { color: #a1a1a6; font-size: 0.9rem; }\n</style></head>\n<body><div class=\"box\">\n <h1>Authentication Error</h1>\n <p>${message}</p>\n</div></body></html>`;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -4,55 +4,59 @@
4
4
  * Extracted from agent-loop.ts for single-responsibility.
5
5
  * All consumers should import from agent-loop.ts (re-export facade).
6
6
  */
7
+
7
8
  import { readFileSync, existsSync } from "fs";
8
9
  import { join, resolve, dirname } from "path";
10
+
9
11
  /** CLI-only: cached CLAUDE.md content (cleared by reloadClaudeMd/resetClaudeMdCache) */
10
12
  let cachedClaudeMd = null;
11
13
  /** CLI-only: cached CLAUDE.md path */
12
14
  let cachedClaudeMdPath = null;
13
15
  function findClaudeMd(startDir) {
14
- const cwd = startDir || process.cwd();
15
- const checked = new Set();
16
- // Walk up from cwd looking for CLAUDE.md
17
- let dir = resolve(cwd);
18
- while (dir && !checked.has(dir)) {
19
- checked.add(dir);
20
- const candidates = [
21
- join(dir, "CLAUDE.md"),
22
- join(dir, ".claude", "CLAUDE.md"),
23
- ];
24
- for (const candidate of candidates) {
25
- if (existsSync(candidate)) {
26
- try {
27
- const content = readFileSync(candidate, "utf-8");
28
- if (content.trim())
29
- return { content: content.trim(), path: candidate };
30
- }
31
- catch { /* skip unreadable */ }
32
- }
33
- }
34
- const parent = dirname(dir);
35
- if (parent === dir)
36
- break;
37
- dir = parent;
16
+ const cwd = startDir || process.cwd();
17
+ const checked = new Set();
18
+
19
+ // Walk up from cwd looking for CLAUDE.md
20
+ let dir = resolve(cwd);
21
+ while (dir && !checked.has(dir)) {
22
+ checked.add(dir);
23
+ const candidates = [join(dir, "CLAUDE.md"), join(dir, ".claude", "CLAUDE.md")];
24
+ for (const candidate of candidates) {
25
+ if (existsSync(candidate)) {
26
+ try {
27
+ const content = readFileSync(candidate, "utf-8");
28
+ if (content.trim()) return {
29
+ content: content.trim(),
30
+ path: candidate
31
+ };
32
+ } catch {/* skip unreadable */}
33
+ }
38
34
  }
39
- return null;
35
+ const parent = dirname(dir);
36
+ if (parent === dir) break;
37
+ dir = parent;
38
+ }
39
+ return null;
40
40
  }
41
41
  export function loadClaudeMd() {
42
- if (cachedClaudeMd !== null)
43
- return cachedClaudeMd ? { content: cachedClaudeMd, path: cachedClaudeMdPath } : null;
44
- const result = findClaudeMd();
45
- cachedClaudeMd = result?.content || "";
46
- cachedClaudeMdPath = result?.path || null;
47
- return result;
42
+ if (cachedClaudeMd !== null) return cachedClaudeMd ? {
43
+ content: cachedClaudeMd,
44
+ path: cachedClaudeMdPath
45
+ } : null;
46
+ const result = findClaudeMd();
47
+ cachedClaudeMd = result?.content || "";
48
+ cachedClaudeMdPath = result?.path || null;
49
+ return result;
48
50
  }
49
51
  export function reloadClaudeMd() {
50
- cachedClaudeMd = null;
51
- cachedClaudeMdPath = null;
52
- return loadClaudeMd();
52
+ cachedClaudeMd = null;
53
+ cachedClaudeMdPath = null;
54
+ return loadClaudeMd();
53
55
  }
56
+
54
57
  /** Reset CLAUDE.md cache (called by resetSessionState) */
55
58
  export function resetClaudeMdCache() {
56
- cachedClaudeMd = null;
57
- cachedClaudeMdPath = null;
59
+ cachedClaudeMd = null;
60
+ cachedClaudeMdPath = null;
58
61
  }
62
+ //# sourceMappingURL=claude-md-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-md-loader.js","names":["readFileSync","existsSync","join","resolve","dirname","cachedClaudeMd","cachedClaudeMdPath","findClaudeMd","startDir","cwd","process","checked","Set","dir","has","add","candidates","candidate","content","trim","path","parent","loadClaudeMd","result","reloadClaudeMd","resetClaudeMdCache"],"sources":["../../../src/cli/services/claude-md-loader.ts"],"sourcesContent":["/**\n * CLAUDE.md Loader — auto-load project instructions from cwd + parents\n *\n * Extracted from agent-loop.ts for single-responsibility.\n * All consumers should import from agent-loop.ts (re-export facade).\n */\n\nimport { readFileSync, existsSync } from \"fs\";\nimport { join, resolve, dirname } from \"path\";\n\n/** CLI-only: cached CLAUDE.md content (cleared by reloadClaudeMd/resetClaudeMdCache) */\nlet cachedClaudeMd: string | null = null;\n/** CLI-only: cached CLAUDE.md path */\nlet cachedClaudeMdPath: string | null = null;\n\nfunction findClaudeMd(startDir?: string): { content: string; path: string } | null {\n const cwd = startDir || process.cwd();\n const checked = new Set<string>();\n\n // Walk up from cwd looking for CLAUDE.md\n let dir = resolve(cwd);\n while (dir && !checked.has(dir)) {\n checked.add(dir);\n const candidates = [\n join(dir, \"CLAUDE.md\"),\n join(dir, \".claude\", \"CLAUDE.md\"),\n ];\n for (const candidate of candidates) {\n if (existsSync(candidate)) {\n try {\n const content = readFileSync(candidate, \"utf-8\");\n if (content.trim()) return { content: content.trim(), path: candidate };\n } catch { /* skip unreadable */ }\n }\n }\n const parent = dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n return null;\n}\n\nexport function loadClaudeMd(): { content: string; path: string } | null {\n if (cachedClaudeMd !== null) return cachedClaudeMd ? { content: cachedClaudeMd, path: cachedClaudeMdPath! } : null;\n const result = findClaudeMd();\n cachedClaudeMd = result?.content || \"\";\n cachedClaudeMdPath = result?.path || null;\n return result;\n}\n\nexport function reloadClaudeMd(): { content: string; path: string } | null {\n cachedClaudeMd = null;\n cachedClaudeMdPath = null;\n return loadClaudeMd();\n}\n\n/** Reset CLAUDE.md cache (called by resetSessionState) */\nexport function resetClaudeMdCache(): void {\n cachedClaudeMd = null;\n cachedClaudeMdPath = null;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA,SAASA,YAAY,EAAEC,UAAU,QAAQ,IAAI;AAC7C,SAASC,IAAI,EAAEC,OAAO,EAAEC,OAAO,QAAQ,MAAM;;AAE7C;AACA,IAAIC,cAA6B,GAAG,IAAI;AACxC;AACA,IAAIC,kBAAiC,GAAG,IAAI;AAE5C,SAASC,YAAYA,CAACC,QAAiB,EAA4C;EACjF,MAAMC,GAAG,GAAGD,QAAQ,IAAIE,OAAO,CAACD,GAAG,CAAC,CAAC;EACrC,MAAME,OAAO,GAAG,IAAIC,GAAG,CAAS,CAAC;;EAEjC;EACA,IAAIC,GAAG,GAAGV,OAAO,CAACM,GAAG,CAAC;EACtB,OAAOI,GAAG,IAAI,CAACF,OAAO,CAACG,GAAG,CAACD,GAAG,CAAC,EAAE;IAC/BF,OAAO,CAACI,GAAG,CAACF,GAAG,CAAC;IAChB,MAAMG,UAAU,GAAG,CACjBd,IAAI,CAACW,GAAG,EAAE,WAAW,CAAC,EACtBX,IAAI,CAACW,GAAG,EAAE,SAAS,EAAE,WAAW,CAAC,CAClC;IACD,KAAK,MAAMI,SAAS,IAAID,UAAU,EAAE;MAClC,IAAIf,UAAU,CAACgB,SAAS,CAAC,EAAE;QACzB,IAAI;UACF,MAAMC,OAAO,GAAGlB,YAAY,CAACiB,SAAS,EAAE,OAAO,CAAC;UAChD,IAAIC,OAAO,CAACC,IAAI,CAAC,CAAC,EAAE,OAAO;YAAED,OAAO,EAAEA,OAAO,CAACC,IAAI,CAAC,CAAC;YAAEC,IAAI,EAAEH;UAAU,CAAC;QACzE,CAAC,CAAC,MAAM,CAAE;MACZ;IACF;IACA,MAAMI,MAAM,GAAGjB,OAAO,CAACS,GAAG,CAAC;IAC3B,IAAIQ,MAAM,KAAKR,GAAG,EAAE;IACpBA,GAAG,GAAGQ,MAAM;EACd;EACA,OAAO,IAAI;AACb;AAEA,OAAO,SAASC,YAAYA,CAAA,EAA6C;EACvE,IAAIjB,cAAc,KAAK,IAAI,EAAE,OAAOA,cAAc,GAAG;IAAEa,OAAO,EAAEb,cAAc;IAAEe,IAAI,EAAEd;EAAoB,CAAC,GAAG,IAAI;EAClH,MAAMiB,MAAM,GAAGhB,YAAY,CAAC,CAAC;EAC7BF,cAAc,GAAGkB,MAAM,EAAEL,OAAO,IAAI,EAAE;EACtCZ,kBAAkB,GAAGiB,MAAM,EAAEH,IAAI,IAAI,IAAI;EACzC,OAAOG,MAAM;AACf;AAEA,OAAO,SAASC,cAAcA,CAAA,EAA6C;EACzEnB,cAAc,GAAG,IAAI;EACrBC,kBAAkB,GAAG,IAAI;EACzB,OAAOgB,YAAY,CAAC,CAAC;AACvB;;AAEA;AACA,OAAO,SAASG,kBAAkBA,CAAA,EAAS;EACzCpB,cAAc,GAAG,IAAI;EACrBC,kBAAkB,GAAG,IAAI;AAC3B","ignoreList":[]}
@@ -10,7 +10,7 @@
10
10
  *
11
11
  * Environment variables always override file-based config for MCP server mode.
12
12
  */
13
- export interface SwagManagerConfig {
13
+ export interface WhaleConfig {
14
14
  supabase_url?: string;
15
15
  supabase_key?: string;
16
16
  anthropic_api_key?: string;
@@ -27,6 +27,11 @@ export interface SwagManagerConfig {
27
27
  permission_mode?: string;
28
28
  agent_api_key?: string;
29
29
  platform_url?: string;
30
+ stores?: Array<{
31
+ id: string;
32
+ name: string;
33
+ role?: string;
34
+ }>;
30
35
  }
31
36
  /** Preferences that survive sign-out (stored in preferences.json) */
32
37
  export interface WhalePreferences {
@@ -36,9 +41,9 @@ export interface WhalePreferences {
36
41
  platform_url?: string;
37
42
  theme?: string;
38
43
  }
39
- export declare function loadConfig(): SwagManagerConfig;
40
- export declare function saveConfig(config: SwagManagerConfig): void;
41
- export declare function updateConfig(partial: Partial<SwagManagerConfig>): void;
44
+ export declare function loadConfig(): WhaleConfig;
45
+ export declare function saveConfig(config: WhaleConfig): void;
46
+ export declare function updateConfig(partial: Partial<WhaleConfig>): void;
42
47
  export declare function clearConfig(): void;
43
48
  export declare function loadPreferences(): WhalePreferences;
44
49
  export declare function savePreferences(prefs: WhalePreferences): void;