whale-code 6.5.5 → 6.5.6

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