whale-code 6.5.4 → 6.5.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (853) hide show
  1. package/README.md +39 -31
  2. package/bin/{swagmanager-mcp.js → whale-code.js} +17 -2
  3. package/dist/cli/app.js +148 -72
  4. package/dist/cli/app.js.map +1 -0
  5. package/dist/cli/chat/AgentSelector.js +105 -10
  6. package/dist/cli/chat/AgentSelector.js.map +1 -0
  7. package/dist/cli/chat/ChatApp.d.ts +31 -0
  8. package/dist/cli/chat/ChatApp.js +539 -286
  9. package/dist/cli/chat/ChatApp.js.map +1 -0
  10. package/dist/cli/chat/ChatInput.js +1088 -770
  11. package/dist/cli/chat/ChatInput.js.map +1 -0
  12. package/dist/cli/chat/MarkdownText.js +39 -14
  13. package/dist/cli/chat/MarkdownText.js.map +1 -0
  14. package/dist/cli/chat/MemoryManager.js +181 -46
  15. package/dist/cli/chat/MemoryManager.js.map +1 -0
  16. package/dist/cli/chat/MessageList.d.ts +2 -3
  17. package/dist/cli/chat/MessageList.js +186 -45
  18. package/dist/cli/chat/MessageList.js.map +1 -0
  19. package/dist/cli/chat/ModelSelector.js +282 -63
  20. package/dist/cli/chat/ModelSelector.js.map +1 -0
  21. package/dist/cli/chat/NodeManager.js +165 -75
  22. package/dist/cli/chat/NodeManager.js.map +1 -0
  23. package/dist/cli/chat/NodeSelector.js +171 -30
  24. package/dist/cli/chat/NodeSelector.js.map +1 -0
  25. package/dist/cli/chat/PlanApproval.js +281 -57
  26. package/dist/cli/chat/PlanApproval.js.map +1 -0
  27. package/dist/cli/chat/RewindViewer.js +559 -144
  28. package/dist/cli/chat/RewindViewer.js.map +1 -0
  29. package/dist/cli/chat/SessionManager.js +137 -30
  30. package/dist/cli/chat/SessionManager.js.map +1 -0
  31. package/dist/cli/chat/SlashMenu.js +293 -164
  32. package/dist/cli/chat/SlashMenu.js.map +1 -0
  33. package/dist/cli/chat/StatusBar.js +172 -9
  34. package/dist/cli/chat/StatusBar.js.map +1 -0
  35. package/dist/cli/chat/StoreSelector.js +147 -18
  36. package/dist/cli/chat/StoreSelector.js.map +1 -0
  37. package/dist/cli/chat/StreamingText.d.ts +1 -5
  38. package/dist/cli/chat/StreamingText.js +22 -7
  39. package/dist/cli/chat/StreamingText.js.map +1 -0
  40. package/dist/cli/chat/SubagentPanel.d.ts +1 -2
  41. package/dist/cli/chat/SubagentPanel.js +612 -72
  42. package/dist/cli/chat/SubagentPanel.js.map +1 -0
  43. package/dist/cli/chat/TeamPanel.d.ts +1 -0
  44. package/dist/cli/chat/TeamPanel.js +230 -30
  45. package/dist/cli/chat/TeamPanel.js.map +1 -0
  46. package/dist/cli/chat/ThemeSelector.js +84 -24
  47. package/dist/cli/chat/ThemeSelector.js.map +1 -0
  48. package/dist/cli/chat/ToolIndicator.js +1476 -371
  49. package/dist/cli/chat/ToolIndicator.js.map +1 -0
  50. package/dist/cli/chat/hooks/useAgentLoop.d.ts +1 -0
  51. package/dist/cli/chat/hooks/useAgentLoop.js +481 -367
  52. package/dist/cli/chat/hooks/useAgentLoop.js.map +1 -0
  53. package/dist/cli/chat/hooks/useSlashCommands.d.ts +3 -14
  54. package/dist/cli/chat/hooks/useSlashCommands.js +744 -572
  55. package/dist/cli/chat/hooks/useSlashCommands.js.map +1 -0
  56. package/dist/cli/commands/config-cmd.js +56 -57
  57. package/dist/cli/commands/config-cmd.js.map +1 -0
  58. package/dist/cli/commands/db.js +184 -169
  59. package/dist/cli/commands/db.js.map +1 -0
  60. package/dist/cli/commands/doctor.js +212 -122
  61. package/dist/cli/commands/doctor.js.map +1 -0
  62. package/dist/cli/commands/init.js +211 -244
  63. package/dist/cli/commands/init.js.map +1 -0
  64. package/dist/cli/commands/mcp.js +127 -122
  65. package/dist/cli/commands/mcp.js.map +1 -0
  66. package/dist/cli/login/LoginApp.js +355 -141
  67. package/dist/cli/login/LoginApp.js.map +1 -0
  68. package/dist/cli/print-mode.js +196 -177
  69. package/dist/cli/print-mode.js.map +1 -0
  70. package/dist/cli/serve-mode.js +615 -530
  71. package/dist/cli/serve-mode.js.map +1 -0
  72. package/dist/cli/services/agent-config.d.ts +29 -0
  73. package/dist/cli/services/agent-config.js +91 -0
  74. package/dist/cli/services/agent-config.js.map +1 -0
  75. package/dist/cli/services/agent-definitions.d.ts +4 -1
  76. package/dist/cli/services/agent-definitions.js +97 -56
  77. package/dist/cli/services/agent-definitions.js.map +1 -0
  78. package/dist/cli/services/agent-events.js +225 -162
  79. package/dist/cli/services/agent-events.js.map +1 -0
  80. package/dist/cli/services/agent-loop.js +978 -669
  81. package/dist/cli/services/agent-loop.js.map +1 -0
  82. package/dist/cli/services/agent-worker-base.d.ts +35 -5
  83. package/dist/cli/services/agent-worker-base.js +337 -153
  84. package/dist/cli/services/agent-worker-base.js.map +1 -0
  85. package/dist/cli/services/api-retry.js +69 -64
  86. package/dist/cli/services/api-retry.js.map +1 -0
  87. package/dist/cli/services/auth-service.d.ts +3 -3
  88. package/dist/cli/services/auth-service.js +209 -132
  89. package/dist/cli/services/auth-service.js.map +1 -0
  90. package/dist/cli/services/background-processes.js +343 -267
  91. package/dist/cli/services/background-processes.js.map +1 -0
  92. package/dist/cli/services/browser-auth.d.ts +2 -2
  93. package/dist/cli/services/browser-auth.js +159 -118
  94. package/dist/cli/services/browser-auth.js.map +1 -0
  95. package/dist/cli/services/claude-md-loader.js +40 -36
  96. package/dist/cli/services/claude-md-loader.js.map +1 -0
  97. package/dist/cli/services/config-store.d.ts +9 -4
  98. package/dist/cli/services/config-store.js +164 -117
  99. package/dist/cli/services/config-store.js.map +1 -0
  100. package/dist/cli/services/debug-log.d.ts +1 -1
  101. package/dist/cli/services/debug-log.js +34 -35
  102. package/dist/cli/services/debug-log.js.map +1 -0
  103. package/dist/cli/services/env-detect.d.ts +7 -0
  104. package/dist/cli/services/env-detect.js +9 -0
  105. package/dist/cli/services/env-detect.js.map +1 -0
  106. package/dist/cli/services/error-logger.d.ts +2 -3
  107. package/dist/cli/services/error-logger.js +189 -180
  108. package/dist/cli/services/error-logger.js.map +1 -0
  109. package/dist/cli/services/file-history.d.ts +1 -1
  110. package/dist/cli/services/file-history.js +50 -54
  111. package/dist/cli/services/file-history.js.map +1 -0
  112. package/dist/cli/services/format-server-response.js +332 -372
  113. package/dist/cli/services/format-server-response.js.map +1 -0
  114. package/dist/cli/services/git-context.js +61 -45
  115. package/dist/cli/services/git-context.js.map +1 -0
  116. package/dist/cli/services/hooks.d.ts +2 -2
  117. package/dist/cli/services/hooks.js +195 -180
  118. package/dist/cli/services/hooks.js.map +1 -0
  119. package/dist/cli/services/ink-incremental.d.ts +19 -0
  120. package/dist/cli/services/ink-incremental.js +59 -0
  121. package/dist/cli/services/ink-incremental.js.map +1 -0
  122. package/dist/cli/services/ink-resize-fix.js +54 -44
  123. package/dist/cli/services/ink-resize-fix.js.map +1 -0
  124. package/dist/cli/services/ink-sync-output.d.ts +12 -0
  125. package/dist/cli/services/ink-sync-output.js +16 -0
  126. package/dist/cli/services/ink-sync-output.js.map +1 -0
  127. package/dist/cli/services/interactive-tools.js +268 -212
  128. package/dist/cli/services/interactive-tools.js.map +1 -0
  129. package/dist/cli/services/keybinding-manager.d.ts +11 -1
  130. package/dist/cli/services/keybinding-manager.js +126 -63
  131. package/dist/cli/services/keybinding-manager.js.map +1 -0
  132. package/dist/cli/services/local-tools.d.ts +1 -1
  133. package/dist/cli/services/local-tools.js +939 -656
  134. package/dist/cli/services/local-tools.js.map +1 -0
  135. package/dist/cli/services/lsp-manager.js +757 -594
  136. package/dist/cli/services/lsp-manager.js.map +1 -0
  137. package/dist/cli/services/mcp-client.d.ts +1 -1
  138. package/dist/cli/services/mcp-client.js +173 -134
  139. package/dist/cli/services/mcp-client.js.map +1 -0
  140. package/dist/cli/services/memory-manager.js +53 -40
  141. package/dist/cli/services/memory-manager.js.map +1 -0
  142. package/dist/cli/services/model-manager.js +55 -40
  143. package/dist/cli/services/model-manager.js.map +1 -0
  144. package/dist/cli/services/model-router.js +115 -85
  145. package/dist/cli/services/model-router.js.map +1 -0
  146. package/dist/cli/services/paths.d.ts +30 -0
  147. package/dist/cli/services/paths.js +81 -0
  148. package/dist/cli/services/paths.js.map +1 -0
  149. package/dist/cli/services/permission-modes.js +32 -25
  150. package/dist/cli/services/permission-modes.js.map +1 -0
  151. package/dist/cli/services/rewind.js +182 -168
  152. package/dist/cli/services/rewind.js.map +1 -0
  153. package/dist/cli/services/ripgrep.js +115 -115
  154. package/dist/cli/services/ripgrep.js.map +1 -0
  155. package/dist/cli/services/sandbox.d.ts +1 -1
  156. package/dist/cli/services/sandbox.js +58 -37
  157. package/dist/cli/services/sandbox.js.map +1 -0
  158. package/dist/cli/services/server-tools.js +738 -565
  159. package/dist/cli/services/server-tools.js.map +1 -0
  160. package/dist/cli/services/session-persistence.js +69 -74
  161. package/dist/cli/services/session-persistence.js.map +1 -0
  162. package/dist/cli/services/subagent-worker.js +42 -27
  163. package/dist/cli/services/subagent-worker.js.map +1 -0
  164. package/dist/cli/services/subagent.d.ts +2 -0
  165. package/dist/cli/services/subagent.js +606 -430
  166. package/dist/cli/services/subagent.js.map +1 -0
  167. package/dist/cli/services/system-prompt.js +86 -78
  168. package/dist/cli/services/system-prompt.js.map +1 -0
  169. package/dist/cli/services/task-decomposer.d.ts +1 -1
  170. package/dist/cli/services/task-decomposer.js +172 -139
  171. package/dist/cli/services/task-decomposer.js.map +1 -0
  172. package/dist/cli/services/team-lead.d.ts +2 -2
  173. package/dist/cli/services/team-lead.js +727 -529
  174. package/dist/cli/services/team-lead.js.map +1 -0
  175. package/dist/cli/services/team-state.js +319 -319
  176. package/dist/cli/services/team-state.js.map +1 -0
  177. package/dist/cli/services/teammate.d.ts +8 -2
  178. package/dist/cli/services/teammate.js +862 -560
  179. package/dist/cli/services/teammate.js.map +1 -0
  180. package/dist/cli/services/telemetry.d.ts +6 -1
  181. package/dist/cli/services/telemetry.js +180 -157
  182. package/dist/cli/services/telemetry.js.map +1 -0
  183. package/dist/cli/services/tools/agent-tools.d.ts +3 -3
  184. package/dist/cli/services/tools/agent-tools.js +480 -322
  185. package/dist/cli/services/tools/agent-tools.js.map +1 -0
  186. package/dist/cli/services/tools/file-ops.js +563 -450
  187. package/dist/cli/services/tools/file-ops.js.map +1 -0
  188. package/dist/cli/services/tools/search-tools.js +231 -162
  189. package/dist/cli/services/tools/search-tools.js.map +1 -0
  190. package/dist/cli/services/tools/shell-exec.js +197 -151
  191. package/dist/cli/services/tools/shell-exec.js.map +1 -0
  192. package/dist/cli/services/tools/task-manager.js +206 -173
  193. package/dist/cli/services/tools/task-manager.js.map +1 -0
  194. package/dist/cli/services/tools/web-tools.js +388 -341
  195. package/dist/cli/services/tools/web-tools.js.map +1 -0
  196. package/dist/cli/setup/SetupApp.d.ts +2 -2
  197. package/dist/cli/setup/SetupApp.js +608 -160
  198. package/dist/cli/setup/SetupApp.js.map +1 -0
  199. package/dist/cli/shared/ErrorBoundary.d.ts +22 -0
  200. package/dist/cli/shared/ErrorBoundary.js +73 -0
  201. package/dist/cli/shared/ErrorBoundary.js.map +1 -0
  202. package/dist/cli/shared/MatrixIntro.js +66 -69
  203. package/dist/cli/shared/MatrixIntro.js.map +1 -0
  204. package/dist/cli/shared/SpinnerSlot.d.ts +14 -0
  205. package/dist/cli/shared/SpinnerSlot.js +63 -0
  206. package/dist/cli/shared/SpinnerSlot.js.map +1 -0
  207. package/dist/cli/shared/Theme.d.ts +1 -1
  208. package/dist/cli/shared/Theme.js +136 -92
  209. package/dist/cli/shared/Theme.js.map +1 -0
  210. package/dist/cli/shared/WhaleBanner.js +99 -11
  211. package/dist/cli/shared/WhaleBanner.js.map +1 -0
  212. package/dist/cli/shared/markdown.d.ts +3 -1
  213. package/dist/cli/shared/markdown.js +736 -674
  214. package/dist/cli/shared/markdown.js.map +1 -0
  215. package/dist/cli/shared/marked-terminal.d.js +2 -0
  216. package/dist/cli/shared/marked-terminal.d.js.map +1 -0
  217. package/dist/cli/shared/theme-manager.js +99 -90
  218. package/dist/cli/shared/theme-manager.js.map +1 -0
  219. package/dist/cli/shared/theme-presets.js +256 -254
  220. package/dist/cli/shared/theme-presets.js.map +1 -0
  221. package/dist/cli/status/StatusApp.js +235 -86
  222. package/dist/cli/status/StatusApp.js.map +1 -0
  223. package/dist/cli/stores/StoreApp.js +275 -65
  224. package/dist/cli/stores/StoreApp.js.map +1 -0
  225. package/dist/index.d.ts +2 -2
  226. package/dist/index.js +509 -396
  227. package/dist/index.js.map +1 -0
  228. package/dist/local-agent/connection.d.ts +2 -2
  229. package/dist/local-agent/connection.js +352 -293
  230. package/dist/local-agent/connection.js.map +1 -0
  231. package/dist/local-agent/discovery.js +259 -122
  232. package/dist/local-agent/discovery.js.map +1 -0
  233. package/dist/local-agent/executor.js +216 -193
  234. package/dist/local-agent/executor.js.map +1 -0
  235. package/dist/local-agent/index.d.ts +2 -2
  236. package/dist/local-agent/index.js +156 -156
  237. package/dist/local-agent/index.js.map +1 -0
  238. package/dist/node/adapters/base.js +18 -8
  239. package/dist/node/adapters/base.js.map +1 -0
  240. package/dist/node/adapters/discord.js +286 -275
  241. package/dist/node/adapters/discord.js.map +1 -0
  242. package/dist/node/adapters/email.js +189 -202
  243. package/dist/node/adapters/email.js.map +1 -0
  244. package/dist/node/adapters/imessage.js +145 -142
  245. package/dist/node/adapters/imessage.js.map +1 -0
  246. package/dist/node/adapters/slack.js +237 -236
  247. package/dist/node/adapters/slack.js.map +1 -0
  248. package/dist/node/adapters/sms.js +149 -151
  249. package/dist/node/adapters/sms.js.map +1 -0
  250. package/dist/node/adapters/telegram.js +88 -92
  251. package/dist/node/adapters/telegram.js.map +1 -0
  252. package/dist/node/adapters/webchat.js +160 -136
  253. package/dist/node/adapters/webchat.js.map +1 -0
  254. package/dist/node/adapters/whatsapp.js +212 -215
  255. package/dist/node/adapters/whatsapp.js.map +1 -0
  256. package/dist/node/cli.js +884 -653
  257. package/dist/node/cli.js.map +1 -0
  258. package/dist/node/config.js +20 -18
  259. package/dist/node/config.js.map +1 -0
  260. package/dist/node/gateway-client.js +191 -181
  261. package/dist/node/gateway-client.js.map +1 -0
  262. package/dist/node/portal/clipboard.js +161 -130
  263. package/dist/node/portal/clipboard.js.map +1 -0
  264. package/dist/node/portal/discovery.js +51 -45
  265. package/dist/node/portal/discovery.js.map +1 -0
  266. package/dist/node/portal/forward.js +64 -58
  267. package/dist/node/portal/forward.js.map +1 -0
  268. package/dist/node/portal/index.js +246 -221
  269. package/dist/node/portal/index.js.map +1 -0
  270. package/dist/node/portal/multiplexer.js +192 -182
  271. package/dist/node/portal/multiplexer.js.map +1 -0
  272. package/dist/node/portal/permissions.js +102 -70
  273. package/dist/node/portal/permissions.js.map +1 -0
  274. package/dist/node/portal/protocol.js +153 -116
  275. package/dist/node/portal/protocol.js.map +1 -0
  276. package/dist/node/portal/screen.js +80 -69
  277. package/dist/node/portal/screen.js.map +1 -0
  278. package/dist/node/portal/session.js +124 -117
  279. package/dist/node/portal/session.js.map +1 -0
  280. package/dist/node/portal/shell.js +140 -113
  281. package/dist/node/portal/shell.js.map +1 -0
  282. package/dist/node/portal/stream.js +77 -75
  283. package/dist/node/portal/stream.js.map +1 -0
  284. package/dist/node/portal/transfer.js +190 -167
  285. package/dist/node/portal/transfer.js.map +1 -0
  286. package/dist/node/portal/ui.js +124 -99
  287. package/dist/node/portal/ui.js.map +1 -0
  288. package/dist/node/remote-desktop/compile-helper.js +50 -45
  289. package/dist/node/remote-desktop/compile-helper.js.map +1 -0
  290. package/dist/node/remote-desktop/index.js +215 -187
  291. package/dist/node/remote-desktop/index.js.map +1 -0
  292. package/dist/node/remote-desktop/protocol.js +45 -29
  293. package/dist/node/remote-desktop/protocol.js.map +1 -0
  294. package/dist/node/runtime.js +493 -410
  295. package/dist/node/runtime.js.map +1 -0
  296. package/dist/server/handlers/__test-utils__/test-db.js +39 -89
  297. package/dist/server/handlers/__test-utils__/test-db.js.map +1 -0
  298. package/dist/server/handlers/analytics.js +467 -261
  299. package/dist/server/handlers/analytics.js.map +1 -0
  300. package/dist/server/handlers/api-docs.d.ts +6 -0
  301. package/dist/server/handlers/api-docs.js +1613 -0
  302. package/dist/server/handlers/api-docs.js.map +1 -0
  303. package/dist/server/handlers/api-keys.js +295 -232
  304. package/dist/server/handlers/api-keys.js.map +1 -0
  305. package/dist/server/handlers/billing.js +330 -239
  306. package/dist/server/handlers/billing.js.map +1 -0
  307. package/dist/server/handlers/browser.js +468 -395
  308. package/dist/server/handlers/browser.js.map +1 -0
  309. package/dist/server/handlers/catalog.js +1377 -978
  310. package/dist/server/handlers/catalog.js.map +1 -0
  311. package/dist/server/handlers/clickhouse.js +157 -109
  312. package/dist/server/handlers/clickhouse.js.map +1 -0
  313. package/dist/server/handlers/comms.d.ts +0 -53
  314. package/dist/server/handlers/comms.js +1443 -970
  315. package/dist/server/handlers/comms.js.map +1 -0
  316. package/dist/server/handlers/creations.js +461 -394
  317. package/dist/server/handlers/creations.js.map +1 -0
  318. package/dist/server/handlers/crm.js +1082 -791
  319. package/dist/server/handlers/crm.js.map +1 -0
  320. package/dist/server/handlers/discovery.js +251 -232
  321. package/dist/server/handlers/discovery.js.map +1 -0
  322. package/dist/server/handlers/embeddings.js +241 -164
  323. package/dist/server/handlers/embeddings.js.map +1 -0
  324. package/dist/server/handlers/enrichment.js +887 -718
  325. package/dist/server/handlers/enrichment.js.map +1 -0
  326. package/dist/server/handlers/image-gen.js +467 -376
  327. package/dist/server/handlers/image-gen.js.map +1 -0
  328. package/dist/server/handlers/inventory.js +797 -424
  329. package/dist/server/handlers/inventory.js.map +1 -0
  330. package/dist/server/handlers/kali.js +272 -230
  331. package/dist/server/handlers/kali.js.map +1 -0
  332. package/dist/server/handlers/llm-providers.js +803 -580
  333. package/dist/server/handlers/llm-providers.js.map +1 -0
  334. package/dist/server/handlers/local-agent.js +133 -105
  335. package/dist/server/handlers/local-agent.js.map +1 -0
  336. package/dist/server/handlers/media.js +1179 -857
  337. package/dist/server/handlers/media.js.map +1 -0
  338. package/dist/server/handlers/meta-ads.js +2669 -2093
  339. package/dist/server/handlers/meta-ads.js.map +1 -0
  340. package/dist/server/handlers/nodes.js +1321 -913
  341. package/dist/server/handlers/nodes.js.map +1 -0
  342. package/dist/server/handlers/operations.js +183 -157
  343. package/dist/server/handlers/operations.js.map +1 -0
  344. package/dist/server/handlers/platform.js +346 -210
  345. package/dist/server/handlers/platform.js.map +1 -0
  346. package/dist/server/handlers/remove-bg.js +118 -86
  347. package/dist/server/handlers/remove-bg.js.map +1 -0
  348. package/dist/server/handlers/storefront.js +586 -446
  349. package/dist/server/handlers/storefront.js.map +1 -0
  350. package/dist/server/handlers/supply-chain.js +546 -326
  351. package/dist/server/handlers/supply-chain.js.map +1 -0
  352. package/dist/server/handlers/transcription.js +106 -97
  353. package/dist/server/handlers/transcription.js.map +1 -0
  354. package/dist/server/handlers/video-gen.js +593 -424
  355. package/dist/server/handlers/video-gen.js.map +1 -0
  356. package/dist/server/handlers/voice.js +1458 -1017
  357. package/dist/server/handlers/voice.js.map +1 -0
  358. package/dist/server/handlers/workflow-steps.js +2837 -2116
  359. package/dist/server/handlers/workflow-steps.js.map +1 -0
  360. package/dist/server/handlers/workflows.js +1630 -933
  361. package/dist/server/handlers/workflows.js.map +1 -0
  362. package/dist/server/index.js +3166 -2390
  363. package/dist/server/index.js.map +1 -0
  364. package/dist/server/lib/batch-client.js +471 -409
  365. package/dist/server/lib/batch-client.js.map +1 -0
  366. package/dist/server/lib/clickhouse-buffer.js +118 -104
  367. package/dist/server/lib/clickhouse-buffer.js.map +1 -0
  368. package/dist/server/lib/clickhouse-client.js +107 -107
  369. package/dist/server/lib/clickhouse-client.js.map +1 -0
  370. package/dist/server/lib/coa-renderer.js +1786 -356
  371. package/dist/server/lib/coa-renderer.js.map +1 -0
  372. package/dist/server/lib/code-worker-pool.js +227 -177
  373. package/dist/server/lib/code-worker-pool.js.map +1 -0
  374. package/dist/server/lib/code-worker.js +174 -164
  375. package/dist/server/lib/code-worker.js.map +1 -0
  376. package/dist/server/lib/compaction-service.d.ts +2 -12
  377. package/dist/server/lib/compaction-service.js +74 -184
  378. package/dist/server/lib/compaction-service.js.map +1 -0
  379. package/dist/server/lib/logger.js +36 -24
  380. package/dist/server/lib/logger.js.map +1 -0
  381. package/dist/server/lib/otel.js +101 -80
  382. package/dist/server/lib/otel.js.map +1 -0
  383. package/dist/server/lib/pdf-renderer.d.ts +1 -1
  384. package/dist/server/lib/pdf-renderer.js +954 -776
  385. package/dist/server/lib/pdf-renderer.js.map +1 -0
  386. package/dist/server/lib/prompt-sanitizer.js +188 -108
  387. package/dist/server/lib/prompt-sanitizer.js.map +1 -0
  388. package/dist/server/lib/provider-capabilities.js +136 -138
  389. package/dist/server/lib/provider-capabilities.js.map +1 -0
  390. package/dist/server/lib/provider-failover.js +190 -168
  391. package/dist/server/lib/provider-failover.js.map +1 -0
  392. package/dist/server/lib/rate-limiter.js +186 -117
  393. package/dist/server/lib/rate-limiter.js.map +1 -0
  394. package/dist/server/lib/react-pdf-layout.js +551 -382
  395. package/dist/server/lib/react-pdf-layout.js.map +1 -0
  396. package/dist/server/lib/server-agent-loop.d.ts +9 -0
  397. package/dist/server/lib/server-agent-loop.js +906 -624
  398. package/dist/server/lib/server-agent-loop.js.map +1 -0
  399. package/dist/server/lib/server-subagent.d.ts +2 -0
  400. package/dist/server/lib/server-subagent.js +260 -162
  401. package/dist/server/lib/server-subagent.js.map +1 -0
  402. package/dist/server/lib/session-checkpoint.js +105 -96
  403. package/dist/server/lib/session-checkpoint.js.map +1 -0
  404. package/dist/server/lib/ssrf-guard.js +193 -184
  405. package/dist/server/lib/ssrf-guard.js.map +1 -0
  406. package/dist/server/lib/supabase-client.js +94 -82
  407. package/dist/server/lib/supabase-client.js.map +1 -0
  408. package/dist/server/lib/template-resolver.js +154 -176
  409. package/dist/server/lib/template-resolver.js.map +1 -0
  410. package/dist/server/lib/utils.js +242 -133
  411. package/dist/server/lib/utils.js.map +1 -0
  412. package/dist/server/local-agent-gateway.d.ts +2 -2
  413. package/dist/server/local-agent-gateway.js +785 -627
  414. package/dist/server/local-agent-gateway.js.map +1 -0
  415. package/dist/server/providers/anthropic.js +254 -176
  416. package/dist/server/providers/anthropic.js.map +1 -0
  417. package/dist/server/providers/bedrock.js +221 -162
  418. package/dist/server/providers/bedrock.js.map +1 -0
  419. package/dist/server/providers/gemini.js +548 -418
  420. package/dist/server/providers/gemini.js.map +1 -0
  421. package/dist/server/providers/openai.js +571 -437
  422. package/dist/server/providers/openai.js.map +1 -0
  423. package/dist/server/providers/registry.js +23 -18
  424. package/dist/server/providers/registry.js.map +1 -0
  425. package/dist/server/providers/shared.js +123 -95
  426. package/dist/server/providers/shared.js.map +1 -0
  427. package/dist/server/providers/types.js +1 -11
  428. package/dist/server/providers/types.js.map +1 -0
  429. package/dist/server/proxy-handlers.js +209 -165
  430. package/dist/server/proxy-handlers.js.map +1 -0
  431. package/dist/server/tool-router.d.ts +13 -0
  432. package/dist/server/tool-router.js +960 -598
  433. package/dist/server/tool-router.js.map +1 -0
  434. package/dist/server/validation.js +248 -188
  435. package/dist/server/validation.js.map +1 -0
  436. package/dist/server/worker.js +202 -133
  437. package/dist/server/worker.js.map +1 -0
  438. package/dist/setup.d.ts +2 -2
  439. package/dist/setup.js +151 -147
  440. package/dist/setup.js.map +1 -0
  441. package/dist/shared/agent-core.d.ts +191 -24
  442. package/dist/shared/agent-core.js +971 -462
  443. package/dist/shared/agent-core.js.map +1 -0
  444. package/dist/shared/anthropic-types.js +1 -6
  445. package/dist/shared/anthropic-types.js.map +1 -0
  446. package/dist/shared/api-client.d.ts +17 -9
  447. package/dist/shared/api-client.js +419 -327
  448. package/dist/shared/api-client.js.map +1 -0
  449. package/dist/shared/compaction.d.ts +36 -0
  450. package/dist/shared/compaction.js +138 -0
  451. package/dist/shared/compaction.js.map +1 -0
  452. package/dist/shared/constants.js +67 -64
  453. package/dist/shared/constants.js.map +1 -0
  454. package/dist/shared/sse-parser.js +221 -219
  455. package/dist/shared/sse-parser.js.map +1 -0
  456. package/dist/shared/tool-dispatch.d.ts +4 -2
  457. package/dist/shared/tool-dispatch.js +226 -165
  458. package/dist/shared/tool-dispatch.js.map +1 -0
  459. package/dist/shared/types.js +1 -6
  460. package/dist/shared/types.js.map +1 -0
  461. package/dist/types/cli-highlight.d.js +2 -0
  462. package/dist/types/cli-highlight.d.js.map +1 -0
  463. package/dist/types/diff.d.js +2 -0
  464. package/dist/types/diff.d.js.map +1 -0
  465. package/dist/types/pdf-parse.d.js +2 -0
  466. package/dist/types/pdf-parse.d.js.map +1 -0
  467. package/dist/updater.d.ts +1 -1
  468. package/dist/updater.js +118 -92
  469. package/dist/updater.js.map +1 -0
  470. package/dist/webchat/widget.js +227 -380
  471. package/dist/webchat/widget.js.map +1 -0
  472. package/package.json +22 -10
  473. package/vendor/ink/build/ansi-tokenizer.d.ts +38 -0
  474. package/vendor/ink/build/ansi-tokenizer.js +316 -0
  475. package/vendor/ink/build/ansi-tokenizer.js.map +1 -0
  476. package/vendor/ink/build/apply-styles.js +175 -0
  477. package/vendor/ink/build/build-layout.js +77 -0
  478. package/vendor/ink/build/calculate-wrapped-text.js +53 -0
  479. package/vendor/ink/build/colorize.d.ts +3 -0
  480. package/vendor/ink/build/colorize.js +48 -0
  481. package/vendor/ink/build/colorize.js.map +1 -0
  482. package/vendor/ink/build/components/AccessibilityContext.d.ts +3 -0
  483. package/vendor/ink/build/components/AccessibilityContext.js +5 -0
  484. package/vendor/ink/build/components/AccessibilityContext.js.map +1 -0
  485. package/vendor/ink/build/components/App.d.ts +18 -0
  486. package/vendor/ink/build/components/App.js +351 -0
  487. package/vendor/ink/build/components/App.js.map +1 -0
  488. package/vendor/ink/build/components/AppContext.d.ts +15 -0
  489. package/vendor/ink/build/components/AppContext.js +11 -0
  490. package/vendor/ink/build/components/AppContext.js.map +1 -0
  491. package/vendor/ink/build/components/BackgroundContext.d.ts +4 -0
  492. package/vendor/ink/build/components/BackgroundContext.js +3 -0
  493. package/vendor/ink/build/components/BackgroundContext.js.map +1 -0
  494. package/vendor/ink/build/components/Box.d.ts +117 -0
  495. package/vendor/ink/build/components/Box.js +34 -0
  496. package/vendor/ink/build/components/Box.js.map +1 -0
  497. package/vendor/ink/build/components/Color.js +62 -0
  498. package/vendor/ink/build/components/Cursor.d.ts +83 -0
  499. package/vendor/ink/build/components/Cursor.js +53 -0
  500. package/vendor/ink/build/components/Cursor.js.map +1 -0
  501. package/vendor/ink/build/components/CursorContext.d.ts +11 -0
  502. package/vendor/ink/build/components/CursorContext.js +8 -0
  503. package/vendor/ink/build/components/CursorContext.js.map +1 -0
  504. package/vendor/ink/build/components/ErrorBoundary.d.ts +18 -0
  505. package/vendor/ink/build/components/ErrorBoundary.js +23 -0
  506. package/vendor/ink/build/components/ErrorBoundary.js.map +1 -0
  507. package/vendor/ink/build/components/ErrorOverview.d.ts +6 -0
  508. package/vendor/ink/build/components/ErrorOverview.js +84 -0
  509. package/vendor/ink/build/components/ErrorOverview.js.map +1 -0
  510. package/vendor/ink/build/components/FocusContext.d.ts +16 -0
  511. package/vendor/ink/build/components/FocusContext.js +17 -0
  512. package/vendor/ink/build/components/FocusContext.js.map +1 -0
  513. package/vendor/ink/build/components/Newline.d.ts +13 -0
  514. package/vendor/ink/build/components/Newline.js +8 -0
  515. package/vendor/ink/build/components/Newline.js.map +1 -0
  516. package/vendor/ink/build/components/Spacer.d.ts +7 -0
  517. package/vendor/ink/build/components/Spacer.js +11 -0
  518. package/vendor/ink/build/components/Spacer.js.map +1 -0
  519. package/vendor/ink/build/components/Static.d.ts +24 -0
  520. package/vendor/ink/build/components/Static.js +28 -0
  521. package/vendor/ink/build/components/Static.js.map +1 -0
  522. package/vendor/ink/build/components/StderrContext.d.ts +15 -0
  523. package/vendor/ink/build/components/StderrContext.js +13 -0
  524. package/vendor/ink/build/components/StderrContext.js.map +1 -0
  525. package/vendor/ink/build/components/StdinContext.d.ts +22 -0
  526. package/vendor/ink/build/components/StdinContext.js +19 -0
  527. package/vendor/ink/build/components/StdinContext.js.map +1 -0
  528. package/vendor/ink/build/components/StdoutContext.d.ts +15 -0
  529. package/vendor/ink/build/components/StdoutContext.js +13 -0
  530. package/vendor/ink/build/components/StdoutContext.js.map +1 -0
  531. package/vendor/ink/build/components/Text.d.ts +55 -0
  532. package/vendor/ink/build/components/Text.js +50 -0
  533. package/vendor/ink/build/components/Text.js.map +1 -0
  534. package/vendor/ink/build/components/Transform.d.ts +16 -0
  535. package/vendor/ink/build/components/Transform.js +15 -0
  536. package/vendor/ink/build/components/Transform.js.map +1 -0
  537. package/vendor/ink/build/cursor-helpers.d.ts +38 -0
  538. package/vendor/ink/build/cursor-helpers.js +56 -0
  539. package/vendor/ink/build/cursor-helpers.js.map +1 -0
  540. package/vendor/ink/build/devtools-window-polyfill.d.ts +1 -0
  541. package/vendor/ink/build/devtools-window-polyfill.js +65 -0
  542. package/vendor/ink/build/devtools-window-polyfill.js.map +1 -0
  543. package/vendor/ink/build/devtools.d.ts +1 -0
  544. package/vendor/ink/build/devtools.js +11 -0
  545. package/vendor/ink/build/devtools.js.map +1 -0
  546. package/vendor/ink/build/dom.d.ts +56 -0
  547. package/vendor/ink/build/dom.js +124 -0
  548. package/vendor/ink/build/dom.js.map +1 -0
  549. package/vendor/ink/build/experimental/apply-style.js +140 -0
  550. package/vendor/ink/build/experimental/dom.js +123 -0
  551. package/vendor/ink/build/experimental/output.js +91 -0
  552. package/vendor/ink/build/experimental/reconciler.js +141 -0
  553. package/vendor/ink/build/experimental/renderer.js +81 -0
  554. package/vendor/ink/build/get-max-width.d.ts +3 -0
  555. package/vendor/ink/build/get-max-width.js +10 -0
  556. package/vendor/ink/build/get-max-width.js.map +1 -0
  557. package/vendor/ink/build/hooks/use-app.d.ts +5 -0
  558. package/vendor/ink/build/hooks/use-app.js +8 -0
  559. package/vendor/ink/build/hooks/use-app.js.map +1 -0
  560. package/vendor/ink/build/hooks/use-cursor.d.ts +12 -0
  561. package/vendor/ink/build/hooks/use-cursor.js +29 -0
  562. package/vendor/ink/build/hooks/use-cursor.js.map +1 -0
  563. package/vendor/ink/build/hooks/use-focus-manager.d.ts +28 -0
  564. package/vendor/ink/build/hooks/use-focus-manager.js +17 -0
  565. package/vendor/ink/build/hooks/use-focus-manager.js.map +1 -0
  566. package/vendor/ink/build/hooks/use-focus.d.ts +29 -0
  567. package/vendor/ink/build/hooks/use-focus.js +42 -0
  568. package/vendor/ink/build/hooks/use-focus.js.map +1 -0
  569. package/vendor/ink/build/hooks/use-input.d.ts +131 -0
  570. package/vendor/ink/build/hooks/use-input.js +124 -0
  571. package/vendor/ink/build/hooks/use-input.js.map +1 -0
  572. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.d.ts +5 -0
  573. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js +11 -0
  574. package/vendor/ink/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
  575. package/vendor/ink/build/hooks/use-stderr.d.ts +5 -0
  576. package/vendor/ink/build/hooks/use-stderr.js +8 -0
  577. package/vendor/ink/build/hooks/use-stderr.js.map +1 -0
  578. package/vendor/ink/build/hooks/use-stdin.d.ts +5 -0
  579. package/vendor/ink/build/hooks/use-stdin.js +8 -0
  580. package/vendor/ink/build/hooks/use-stdin.js.map +1 -0
  581. package/vendor/ink/build/hooks/use-stdout.d.ts +5 -0
  582. package/vendor/ink/build/hooks/use-stdout.js +8 -0
  583. package/vendor/ink/build/hooks/use-stdout.js.map +1 -0
  584. package/vendor/ink/build/hooks/useInput.js +38 -0
  585. package/vendor/ink/build/index.d.ts +34 -0
  586. package/vendor/ink/build/index.js +20 -0
  587. package/vendor/ink/build/index.js.map +1 -0
  588. package/vendor/ink/build/ink.d.ts +90 -0
  589. package/vendor/ink/build/ink.js +654 -0
  590. package/vendor/ink/build/ink.js.map +1 -0
  591. package/vendor/ink/build/input-parser.d.ts +7 -0
  592. package/vendor/ink/build/input-parser.js +154 -0
  593. package/vendor/ink/build/input-parser.js.map +1 -0
  594. package/vendor/ink/build/instance.js +205 -0
  595. package/vendor/ink/build/instances.d.ts +3 -0
  596. package/vendor/ink/build/instances.js +8 -0
  597. package/vendor/ink/build/instances.js.map +1 -0
  598. package/vendor/ink/build/kitty-keyboard.d.ts +23 -0
  599. package/vendor/ink/build/kitty-keyboard.js +32 -0
  600. package/vendor/ink/build/kitty-keyboard.js.map +1 -0
  601. package/vendor/ink/build/layout.d.ts +7 -0
  602. package/vendor/ink/build/layout.js +33 -0
  603. package/vendor/ink/build/layout.js.map +1 -0
  604. package/vendor/ink/build/log-update.d.ts +19 -0
  605. package/vendor/ink/build/log-update.js +243 -0
  606. package/vendor/ink/build/log-update.js.map +1 -0
  607. package/vendor/ink/build/measure-element.d.ts +16 -0
  608. package/vendor/ink/build/measure-element.js +9 -0
  609. package/vendor/ink/build/measure-element.js.map +1 -0
  610. package/vendor/ink/build/measure-text.d.ts +6 -0
  611. package/vendor/ink/build/measure-text.js +21 -0
  612. package/vendor/ink/build/measure-text.js.map +1 -0
  613. package/vendor/ink/build/options.d.ts +52 -0
  614. package/vendor/ink/build/options.js +2 -0
  615. package/vendor/ink/build/options.js.map +1 -0
  616. package/vendor/ink/build/output.d.ts +35 -0
  617. package/vendor/ink/build/output.js +183 -0
  618. package/vendor/ink/build/output.js.map +1 -0
  619. package/vendor/ink/build/parse-keypress.d.ts +22 -0
  620. package/vendor/ink/build/parse-keypress.js +493 -0
  621. package/vendor/ink/build/parse-keypress.js.map +1 -0
  622. package/vendor/ink/build/reconciler.d.ts +4 -0
  623. package/vendor/ink/build/reconciler.js +274 -0
  624. package/vendor/ink/build/reconciler.js.map +1 -0
  625. package/vendor/ink/build/render-background.d.ts +4 -0
  626. package/vendor/ink/build/render-background.js +25 -0
  627. package/vendor/ink/build/render-background.js.map +1 -0
  628. package/vendor/ink/build/render-border.d.ts +4 -0
  629. package/vendor/ink/build/render-border.js +73 -0
  630. package/vendor/ink/build/render-border.js.map +1 -0
  631. package/vendor/ink/build/render-node-to-output.d.ts +14 -0
  632. package/vendor/ink/build/render-node-to-output.js +147 -0
  633. package/vendor/ink/build/render-node-to-output.js.map +1 -0
  634. package/vendor/ink/build/render-to-string.d.ts +38 -0
  635. package/vendor/ink/build/render-to-string.js +115 -0
  636. package/vendor/ink/build/render-to-string.js.map +1 -0
  637. package/vendor/ink/build/render.d.ts +121 -0
  638. package/vendor/ink/build/render.js +55 -0
  639. package/vendor/ink/build/render.js.map +1 -0
  640. package/vendor/ink/build/renderer.d.ts +8 -0
  641. package/vendor/ink/build/renderer.js +55 -0
  642. package/vendor/ink/build/renderer.js.map +1 -0
  643. package/vendor/ink/build/sanitize-ansi.d.ts +2 -0
  644. package/vendor/ink/build/sanitize-ansi.js +27 -0
  645. package/vendor/ink/build/sanitize-ansi.js.map +1 -0
  646. package/vendor/ink/build/screen-reader-update.d.ts +13 -0
  647. package/vendor/ink/build/screen-reader-update.js +38 -0
  648. package/vendor/ink/build/screen-reader-update.js.map +1 -0
  649. package/vendor/ink/build/squash-text-nodes.d.ts +3 -0
  650. package/vendor/ink/build/squash-text-nodes.js +36 -0
  651. package/vendor/ink/build/squash-text-nodes.js.map +1 -0
  652. package/vendor/ink/build/styles.d.ts +240 -0
  653. package/vendor/ink/build/styles.js +232 -0
  654. package/vendor/ink/build/styles.js.map +1 -0
  655. package/vendor/ink/build/utils.d.ts +2 -0
  656. package/vendor/ink/build/utils.js +4 -0
  657. package/vendor/ink/build/utils.js.map +1 -0
  658. package/vendor/ink/build/wrap-text.d.ts +3 -0
  659. package/vendor/ink/build/wrap-text.js +31 -0
  660. package/vendor/ink/build/wrap-text.js.map +1 -0
  661. package/vendor/ink/build/write-synchronized.d.ts +4 -0
  662. package/vendor/ink/build/write-synchronized.js +7 -0
  663. package/vendor/ink/build/write-synchronized.js.map +1 -0
  664. package/vendor/ink/license +10 -0
  665. package/vendor/ink/node_modules/@types/node/LICENSE +21 -0
  666. package/vendor/ink/node_modules/@types/node/README.md +15 -0
  667. package/vendor/ink/node_modules/@types/node/assert/strict.d.ts +105 -0
  668. package/vendor/ink/node_modules/@types/node/assert.d.ts +955 -0
  669. package/vendor/ink/node_modules/@types/node/async_hooks.d.ts +623 -0
  670. package/vendor/ink/node_modules/@types/node/buffer.buffer.d.ts +466 -0
  671. package/vendor/ink/node_modules/@types/node/buffer.d.ts +1810 -0
  672. package/vendor/ink/node_modules/@types/node/child_process.d.ts +1428 -0
  673. package/vendor/ink/node_modules/@types/node/cluster.d.ts +486 -0
  674. package/vendor/ink/node_modules/@types/node/compatibility/iterators.d.ts +21 -0
  675. package/vendor/ink/node_modules/@types/node/console.d.ts +151 -0
  676. package/vendor/ink/node_modules/@types/node/constants.d.ts +20 -0
  677. package/vendor/ink/node_modules/@types/node/crypto.d.ts +4065 -0
  678. package/vendor/ink/node_modules/@types/node/dgram.d.ts +564 -0
  679. package/vendor/ink/node_modules/@types/node/diagnostics_channel.d.ts +576 -0
  680. package/vendor/ink/node_modules/@types/node/dns/promises.d.ts +503 -0
  681. package/vendor/ink/node_modules/@types/node/dns.d.ts +922 -0
  682. package/vendor/ink/node_modules/@types/node/domain.d.ts +166 -0
  683. package/vendor/ink/node_modules/@types/node/events.d.ts +1054 -0
  684. package/vendor/ink/node_modules/@types/node/fs/promises.d.ts +1329 -0
  685. package/vendor/ink/node_modules/@types/node/fs.d.ts +4676 -0
  686. package/vendor/ink/node_modules/@types/node/globals.d.ts +150 -0
  687. package/vendor/ink/node_modules/@types/node/globals.typedarray.d.ts +101 -0
  688. package/vendor/ink/node_modules/@types/node/http.d.ts +2167 -0
  689. package/vendor/ink/node_modules/@types/node/http2.d.ts +2480 -0
  690. package/vendor/ink/node_modules/@types/node/https.d.ts +405 -0
  691. package/vendor/ink/node_modules/@types/node/index.d.ts +115 -0
  692. package/vendor/ink/node_modules/@types/node/inspector/promises.d.ts +41 -0
  693. package/vendor/ink/node_modules/@types/node/inspector.d.ts +224 -0
  694. package/vendor/ink/node_modules/@types/node/inspector.generated.d.ts +4226 -0
  695. package/vendor/ink/node_modules/@types/node/module.d.ts +819 -0
  696. package/vendor/ink/node_modules/@types/node/net.d.ts +933 -0
  697. package/vendor/ink/node_modules/@types/node/os.d.ts +507 -0
  698. package/vendor/ink/node_modules/@types/node/package.json +155 -0
  699. package/vendor/ink/node_modules/@types/node/path/posix.d.ts +8 -0
  700. package/vendor/ink/node_modules/@types/node/path/win32.d.ts +8 -0
  701. package/vendor/ink/node_modules/@types/node/path.d.ts +187 -0
  702. package/vendor/ink/node_modules/@types/node/perf_hooks.d.ts +643 -0
  703. package/vendor/ink/node_modules/@types/node/process.d.ts +2156 -0
  704. package/vendor/ink/node_modules/@types/node/punycode.d.ts +117 -0
  705. package/vendor/ink/node_modules/@types/node/querystring.d.ts +152 -0
  706. package/vendor/ink/node_modules/@types/node/quic.d.ts +910 -0
  707. package/vendor/ink/node_modules/@types/node/readline/promises.d.ts +161 -0
  708. package/vendor/ink/node_modules/@types/node/readline.d.ts +541 -0
  709. package/vendor/ink/node_modules/@types/node/repl.d.ts +415 -0
  710. package/vendor/ink/node_modules/@types/node/sea.d.ts +162 -0
  711. package/vendor/ink/node_modules/@types/node/sqlite.d.ts +955 -0
  712. package/vendor/ink/node_modules/@types/node/stream/consumers.d.ts +38 -0
  713. package/vendor/ink/node_modules/@types/node/stream/promises.d.ts +211 -0
  714. package/vendor/ink/node_modules/@types/node/stream/web.d.ts +296 -0
  715. package/vendor/ink/node_modules/@types/node/stream.d.ts +1760 -0
  716. package/vendor/ink/node_modules/@types/node/string_decoder.d.ts +67 -0
  717. package/vendor/ink/node_modules/@types/node/test/reporters.d.ts +96 -0
  718. package/vendor/ink/node_modules/@types/node/test.d.ts +2240 -0
  719. package/vendor/ink/node_modules/@types/node/timers/promises.d.ts +108 -0
  720. package/vendor/ink/node_modules/@types/node/timers.d.ts +159 -0
  721. package/vendor/ink/node_modules/@types/node/tls.d.ts +1198 -0
  722. package/vendor/ink/node_modules/@types/node/trace_events.d.ts +197 -0
  723. package/vendor/ink/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +462 -0
  724. package/vendor/ink/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +71 -0
  725. package/vendor/ink/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +36 -0
  726. package/vendor/ink/node_modules/@types/node/ts5.6/index.d.ts +117 -0
  727. package/vendor/ink/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +72 -0
  728. package/vendor/ink/node_modules/@types/node/ts5.7/index.d.ts +117 -0
  729. package/vendor/ink/node_modules/@types/node/tty.d.ts +250 -0
  730. package/vendor/ink/node_modules/@types/node/url.d.ts +519 -0
  731. package/vendor/ink/node_modules/@types/node/util/types.d.ts +558 -0
  732. package/vendor/ink/node_modules/@types/node/util.d.ts +1662 -0
  733. package/vendor/ink/node_modules/@types/node/v8.d.ts +983 -0
  734. package/vendor/ink/node_modules/@types/node/vm.d.ts +1208 -0
  735. package/vendor/ink/node_modules/@types/node/wasi.d.ts +202 -0
  736. package/vendor/ink/node_modules/@types/node/web-globals/abortcontroller.d.ts +59 -0
  737. package/vendor/ink/node_modules/@types/node/web-globals/blob.d.ts +23 -0
  738. package/vendor/ink/node_modules/@types/node/web-globals/console.d.ts +9 -0
  739. package/vendor/ink/node_modules/@types/node/web-globals/crypto.d.ts +39 -0
  740. package/vendor/ink/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
  741. package/vendor/ink/node_modules/@types/node/web-globals/encoding.d.ts +11 -0
  742. package/vendor/ink/node_modules/@types/node/web-globals/events.d.ts +106 -0
  743. package/vendor/ink/node_modules/@types/node/web-globals/fetch.d.ts +69 -0
  744. package/vendor/ink/node_modules/@types/node/web-globals/importmeta.d.ts +13 -0
  745. package/vendor/ink/node_modules/@types/node/web-globals/messaging.d.ts +23 -0
  746. package/vendor/ink/node_modules/@types/node/web-globals/navigator.d.ts +25 -0
  747. package/vendor/ink/node_modules/@types/node/web-globals/performance.d.ts +45 -0
  748. package/vendor/ink/node_modules/@types/node/web-globals/storage.d.ts +24 -0
  749. package/vendor/ink/node_modules/@types/node/web-globals/streams.d.ts +115 -0
  750. package/vendor/ink/node_modules/@types/node/web-globals/timers.d.ts +44 -0
  751. package/vendor/ink/node_modules/@types/node/web-globals/url.d.ts +24 -0
  752. package/vendor/ink/node_modules/@types/node/worker_threads.d.ts +717 -0
  753. package/vendor/ink/node_modules/@types/node/zlib.d.ts +618 -0
  754. package/vendor/ink/node_modules/node-pty/LICENSE +69 -0
  755. package/vendor/ink/node_modules/node-pty/README.md +164 -0
  756. package/vendor/ink/node_modules/node-pty/binding.gyp +150 -0
  757. package/vendor/ink/node_modules/node-pty/lib/conpty_console_list_agent.js +25 -0
  758. package/vendor/ink/node_modules/node-pty/lib/eventEmitter2.js +47 -0
  759. package/vendor/ink/node_modules/node-pty/lib/index.js +52 -0
  760. package/vendor/ink/node_modules/node-pty/lib/interfaces.js +7 -0
  761. package/vendor/ink/node_modules/node-pty/lib/shared/conout.js +11 -0
  762. package/vendor/ink/node_modules/node-pty/lib/terminal.js +190 -0
  763. package/vendor/ink/node_modules/node-pty/lib/types.js +7 -0
  764. package/vendor/ink/node_modules/node-pty/lib/unixTerminal.js +349 -0
  765. package/vendor/ink/node_modules/node-pty/lib/utils.js +39 -0
  766. package/vendor/ink/node_modules/node-pty/lib/windowsConoutConnection.js +125 -0
  767. package/vendor/ink/node_modules/node-pty/lib/windowsPtyAgent.js +287 -0
  768. package/vendor/ink/node_modules/node-pty/lib/windowsTerminal.js +201 -0
  769. package/vendor/ink/node_modules/node-pty/lib/worker/conoutSocketWorker.js +22 -0
  770. package/vendor/ink/node_modules/node-pty/package.json +65 -0
  771. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/pty.node +0 -0
  772. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-arm64/spawn-helper +0 -0
  773. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/pty.node +0 -0
  774. package/vendor/ink/node_modules/node-pty/prebuilds/darwin-x64/spawn-helper +0 -0
  775. package/vendor/ink/node_modules/node-pty/prebuilds/linux-arm64/pty.node +0 -0
  776. package/vendor/ink/node_modules/node-pty/prebuilds/linux-x64/pty.node +0 -0
  777. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/OpenConsole.exe +0 -0
  778. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty/conpty.dll +0 -0
  779. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.node +0 -0
  780. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty.pdb +0 -0
  781. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.node +0 -0
  782. package/vendor/ink/node_modules/node-pty/prebuilds/win32-arm64/conpty_console_list.pdb +0 -0
  783. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/OpenConsole.exe +0 -0
  784. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty/conpty.dll +0 -0
  785. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.node +0 -0
  786. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty.pdb +0 -0
  787. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.node +0 -0
  788. package/vendor/ink/node_modules/node-pty/prebuilds/win32-x64/conpty_console_list.pdb +0 -0
  789. package/vendor/ink/node_modules/node-pty/scripts/post-install.js +76 -0
  790. package/vendor/ink/node_modules/node-pty/scripts/prebuild.js +34 -0
  791. package/vendor/ink/node_modules/node-pty/src/unix/pty.cc +875 -0
  792. package/vendor/ink/node_modules/node-pty/src/unix/spawn-helper.cc +23 -0
  793. package/vendor/ink/node_modules/node-pty/src/win/conpty.cc +582 -0
  794. package/vendor/ink/node_modules/node-pty/src/win/conpty.h +41 -0
  795. package/vendor/ink/node_modules/node-pty/src/win/conpty_console_list.cc +44 -0
  796. package/vendor/ink/node_modules/node-pty/src/win/path_util.cc +95 -0
  797. package/vendor/ink/node_modules/node-pty/src/win/path_util.h +26 -0
  798. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/OpenConsole.exe +0 -0
  799. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-arm64/conpty.dll +0 -0
  800. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/OpenConsole.exe +0 -0
  801. package/vendor/ink/node_modules/node-pty/third_party/conpty/1.23.251008001/win10-x64/conpty.dll +0 -0
  802. package/vendor/ink/node_modules/node-pty/typings/node-pty.d.ts +215 -0
  803. package/vendor/ink/node_modules/undici-types/LICENSE +21 -0
  804. package/vendor/ink/node_modules/undici-types/README.md +6 -0
  805. package/vendor/ink/node_modules/undici-types/agent.d.ts +32 -0
  806. package/vendor/ink/node_modules/undici-types/api.d.ts +43 -0
  807. package/vendor/ink/node_modules/undici-types/balanced-pool.d.ts +30 -0
  808. package/vendor/ink/node_modules/undici-types/cache-interceptor.d.ts +173 -0
  809. package/vendor/ink/node_modules/undici-types/cache.d.ts +36 -0
  810. package/vendor/ink/node_modules/undici-types/client-stats.d.ts +15 -0
  811. package/vendor/ink/node_modules/undici-types/client.d.ts +108 -0
  812. package/vendor/ink/node_modules/undici-types/connector.d.ts +34 -0
  813. package/vendor/ink/node_modules/undici-types/content-type.d.ts +21 -0
  814. package/vendor/ink/node_modules/undici-types/cookies.d.ts +30 -0
  815. package/vendor/ink/node_modules/undici-types/diagnostics-channel.d.ts +74 -0
  816. package/vendor/ink/node_modules/undici-types/dispatcher.d.ts +276 -0
  817. package/vendor/ink/node_modules/undici-types/env-http-proxy-agent.d.ts +22 -0
  818. package/vendor/ink/node_modules/undici-types/errors.d.ts +161 -0
  819. package/vendor/ink/node_modules/undici-types/eventsource.d.ts +66 -0
  820. package/vendor/ink/node_modules/undici-types/fetch.d.ts +211 -0
  821. package/vendor/ink/node_modules/undici-types/formdata.d.ts +108 -0
  822. package/vendor/ink/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  823. package/vendor/ink/node_modules/undici-types/global-origin.d.ts +7 -0
  824. package/vendor/ink/node_modules/undici-types/h2c-client.d.ts +73 -0
  825. package/vendor/ink/node_modules/undici-types/handlers.d.ts +15 -0
  826. package/vendor/ink/node_modules/undici-types/header.d.ts +160 -0
  827. package/vendor/ink/node_modules/undici-types/index.d.ts +88 -0
  828. package/vendor/ink/node_modules/undici-types/interceptors.d.ts +73 -0
  829. package/vendor/ink/node_modules/undici-types/mock-agent.d.ts +68 -0
  830. package/vendor/ink/node_modules/undici-types/mock-call-history.d.ts +111 -0
  831. package/vendor/ink/node_modules/undici-types/mock-client.d.ts +27 -0
  832. package/vendor/ink/node_modules/undici-types/mock-errors.d.ts +12 -0
  833. package/vendor/ink/node_modules/undici-types/mock-interceptor.d.ts +94 -0
  834. package/vendor/ink/node_modules/undici-types/mock-pool.d.ts +27 -0
  835. package/vendor/ink/node_modules/undici-types/package.json +55 -0
  836. package/vendor/ink/node_modules/undici-types/patch.d.ts +29 -0
  837. package/vendor/ink/node_modules/undici-types/pool-stats.d.ts +19 -0
  838. package/vendor/ink/node_modules/undici-types/pool.d.ts +41 -0
  839. package/vendor/ink/node_modules/undici-types/proxy-agent.d.ts +29 -0
  840. package/vendor/ink/node_modules/undici-types/readable.d.ts +68 -0
  841. package/vendor/ink/node_modules/undici-types/retry-agent.d.ts +8 -0
  842. package/vendor/ink/node_modules/undici-types/retry-handler.d.ts +125 -0
  843. package/vendor/ink/node_modules/undici-types/round-robin-pool.d.ts +41 -0
  844. package/vendor/ink/node_modules/undici-types/snapshot-agent.d.ts +109 -0
  845. package/vendor/ink/node_modules/undici-types/util.d.ts +18 -0
  846. package/vendor/ink/node_modules/undici-types/utility.d.ts +7 -0
  847. package/vendor/ink/node_modules/undici-types/webidl.d.ts +341 -0
  848. package/vendor/ink/node_modules/undici-types/websocket.d.ts +186 -0
  849. package/vendor/ink/package.json +201 -0
  850. package/vendor/ink/readme.md +2636 -0
  851. package/bin/swag-agent.js +0 -9
  852. package/dist/server/lib/pg-rate-limiter.d.ts +0 -21
  853. package/dist/server/lib/pg-rate-limiter.js +0 -86
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lsp-manager.js","names":["spawn","execSync","readFileSync","existsSync","statSync","resolve","dirname","extname","LANG_CONFIGS","id","languageIds","binaries","args","installHint","EXT_TO_LANGID","LANGID_TO_CONFIG","Map","cfg","lid","set","MessageBuffer","buffer","Buffer","alloc","append","data","concat","tryRead","headerEnd","indexOf","header","subarray","toString","match","contentLength","parseInt","bodyStart","length","body","JSON","parse","encodeMessage","msg","stringify","byteLength","from","servers","REQUEST_TIMEOUT","cleanupRegistered","quickHash","content","h","i","charCodeAt","findBinary","bin","encoding","findWorkspaceRoot","filePath","dir","markers","marker","parent","fileUri","abs","split","map","seg","encodeURIComponent","join","uriToPath","uri","startsWith","decodeURIComponent","slice","spawnServer","config","workspaceRoot","binary","Error","child","cwd","stdio","env","process","key","server","configId","messageBuffer","nextId","pending","openedFiles","ready","alive","projectIndexed","capabilities","initPromise","Promise","stdout","on","handleMessage","stderr","delete","req","clearTimeout","timer","reject","clear","shutdownAll","exit","initializeServer","getOrCreateServer","ext","toLowerCase","langId","get","existing","has","error","message","result","response","jsonrpc","method","params","items","stdin","write","sendRequest","setTimeout","sendNotification","processId","pid","rootUri","rootPath","textDocument","synchronization","didOpen","didClose","didChange","willSave","willSaveWaitUntil","didSave","definition","dynamicRegistration","references","hover","contentFormat","documentSymbol","hierarchicalDocumentSymbolSupport","implementation","callHierarchy","workspace","symbol","workspaceFolders","configuration","window","workDoneProgress","name","pop","ensureFileOpen","absPath","text","mtimeMs","hash","contentHash","version","contentChanges","openedFile","languageId","query","notifyFileChanged","values","opened","OPERATIONS","Set","toPosition","line","character","Math","max","runOperation","operation","pos","position","formatLocations","context","includeDeclaration","formatHover","formatDocumentSymbols","formatWorkspaceSymbols","formatCallHierarchyItems","Array","isArray","item","formatIncomingCalls","formatOutgoingCalls","normalizeLocations","targetUri","range","targetSelectionRange","targetRange","label","locations","byFile","loc","path","push","start","char","lines","positions","size","prefix","contents","kind","value","language","c","String","SYMBOL_KIND_NAMES","symbolKindName","walk","symbols","indent","sym","location","repeat","children","call","to","kill","executeLSP","input","op","success","output","resolved","err"],"sources":["../../../src/cli/services/lsp-manager.ts"],"sourcesContent":["/**\n * LSP Manager — Language Server Protocol client for code intelligence\n *\n * Provides go-to-definition, find-references, hover, document/workspace symbols,\n * go-to-implementation, and call hierarchy via stdio JSON-RPC to language servers.\n *\n * Zero external dependencies — Node.js builtins only (child_process, Buffer).\n * Servers are lazy-spawned on first request and keyed by language + workspace root.\n */\n\nimport { spawn, execSync, type ChildProcess } from \"child_process\";\nimport { readFileSync, existsSync, statSync } from \"fs\";\nimport { resolve, dirname, extname } from \"path\";\n\n// ============================================================================\n// LANGUAGE CONFIG\n// ============================================================================\n\ninterface LanguageConfig {\n id: string; // Canonical server group (dedup key)\n languageIds: string[]; // LSP language IDs this server handles\n binaries: string[]; // Try in order\n args: string[];\n installHint: string;\n}\n\nconst LANG_CONFIGS: LanguageConfig[] = [\n {\n id: \"typescript\",\n languageIds: [\"typescript\", \"typescriptreact\", \"javascript\", \"javascriptreact\"],\n binaries: [\"typescript-language-server\"],\n args: [\"--stdio\"],\n installHint: \"npm i -g typescript-language-server typescript\",\n },\n {\n id: \"python\",\n languageIds: [\"python\"],\n binaries: [\"pyright-langserver\", \"pylsp\", \"python-language-server\"],\n args: [\"--stdio\"],\n installHint: \"npm i -g pyright\",\n },\n {\n id: \"rust\",\n languageIds: [\"rust\"],\n binaries: [\"rust-analyzer\"],\n args: [],\n installHint: \"rustup component add rust-analyzer\",\n },\n {\n id: \"go\",\n languageIds: [\"go\"],\n binaries: [\"gopls\"],\n args: [\"serve\"],\n installHint: \"go install golang.org/x/tools/gopls@latest\",\n },\n {\n id: \"clangd\",\n languageIds: [\"c\", \"cpp\"],\n binaries: [\"clangd\"],\n args: [],\n installHint: \"brew install llvm (or apt install clangd)\",\n },\n {\n id: \"java\",\n languageIds: [\"java\"],\n binaries: [\"jdtls\"],\n args: [],\n installHint: \"brew install jdtls\",\n },\n];\n\nconst EXT_TO_LANGID: Record<string, string> = {\n \".ts\": \"typescript\", \".tsx\": \"typescriptreact\",\n \".js\": \"javascript\", \".jsx\": \"javascriptreact\",\n \".mjs\": \"javascript\", \".cjs\": \"javascript\",\n \".py\": \"python\", \".rs\": \"rust\", \".go\": \"go\",\n \".c\": \"c\", \".h\": \"c\",\n \".cpp\": \"cpp\", \".cc\": \"cpp\", \".cxx\": \"cpp\", \".hpp\": \"cpp\",\n \".java\": \"java\",\n};\n\n// Build lookup: languageId → config\nconst LANGID_TO_CONFIG = new Map<string, LanguageConfig>();\nfor (const cfg of LANG_CONFIGS) {\n for (const lid of cfg.languageIds) {\n LANGID_TO_CONFIG.set(lid, cfg);\n }\n}\n\n// ============================================================================\n// JSON-RPC MESSAGE BUFFER\n// ============================================================================\n\nclass MessageBuffer {\n private buffer = Buffer.alloc(0);\n\n append(data: Buffer): void {\n this.buffer = Buffer.concat([this.buffer, data]);\n }\n\n tryRead(): object | null {\n const headerEnd = this.buffer.indexOf(\"\\r\\n\\r\\n\");\n if (headerEnd === -1) return null;\n\n const header = this.buffer.subarray(0, headerEnd).toString(\"ascii\");\n const match = header.match(/Content-Length:\\s*(\\d+)/i);\n if (!match) {\n this.buffer = this.buffer.subarray(headerEnd + 4);\n return null;\n }\n\n const contentLength = parseInt(match[1], 10);\n const bodyStart = headerEnd + 4;\n\n if (this.buffer.length < bodyStart + contentLength) return null;\n\n const body = this.buffer.subarray(bodyStart, bodyStart + contentLength).toString(\"utf-8\");\n this.buffer = this.buffer.subarray(bodyStart + contentLength);\n\n try {\n return JSON.parse(body);\n } catch {\n return null;\n }\n }\n}\n\nfunction encodeMessage(msg: object): Buffer {\n const body = JSON.stringify(msg);\n const header = `Content-Length: ${Buffer.byteLength(body)}\\r\\n\\r\\n`;\n return Buffer.from(header + body, \"utf-8\");\n}\n\n// ============================================================================\n// LSP SERVER\n// ============================================================================\n\ninterface PendingRequest {\n resolve: (value: any) => void;\n reject: (reason: Error) => void;\n timer: ReturnType<typeof setTimeout>;\n}\n\ninterface OpenedFile {\n uri: string;\n version: number;\n contentHash: string; // Quick change detection\n mtimeMs: number; // Disk mtime when last synced\n}\n\ninterface LSPServer {\n process: ChildProcess;\n configId: string;\n workspaceRoot: string;\n messageBuffer: MessageBuffer;\n nextId: number;\n pending: Map<number, PendingRequest>;\n openedFiles: Map<string, OpenedFile>; // uri → file state\n ready: boolean;\n alive: boolean;\n projectIndexed: boolean; // True after workspace/symbol probe succeeds\n capabilities: any;\n initPromise: Promise<void>;\n}\n\nconst servers = new Map<string, LSPServer>();\nconst REQUEST_TIMEOUT = 30_000;\nlet cleanupRegistered = false;\n\n// Simple content hash for change detection (fast, not crypto)\nfunction quickHash(content: string): string {\n let h = 0;\n for (let i = 0; i < content.length; i++) {\n h = ((h << 5) - h + content.charCodeAt(i)) | 0;\n }\n return h.toString(36);\n}\n\nfunction findBinary(binaries: string[]): string | null {\n for (const bin of binaries) {\n try {\n execSync(`which ${bin} 2>/dev/null`, { encoding: \"utf-8\" });\n return bin;\n } catch {\n continue;\n }\n }\n return null;\n}\n\nfunction findWorkspaceRoot(filePath: string): string {\n let dir = dirname(resolve(filePath));\n const markers = [\".git\", \"package.json\", \"Cargo.toml\", \"go.mod\", \"pyproject.toml\", \"setup.py\"];\n for (let i = 0; i < 20; i++) {\n for (const marker of markers) {\n if (existsSync(resolve(dir, marker))) return dir;\n }\n const parent = dirname(dir);\n if (parent === dir) break;\n dir = parent;\n }\n return dirname(resolve(filePath));\n}\n\nfunction fileUri(filePath: string): string {\n const abs = resolve(filePath);\n return \"file://\" + abs.split(\"/\").map(seg => encodeURIComponent(seg)).join(\"/\");\n}\n\nfunction uriToPath(uri: string): string {\n if (uri.startsWith(\"file://\")) return decodeURIComponent(uri.slice(7));\n return decodeURIComponent(uri);\n}\n\n// ============================================================================\n// SERVER LIFECYCLE\n// ============================================================================\n\nfunction spawnServer(config: LanguageConfig, workspaceRoot: string): LSPServer {\n const binary = findBinary(config.binaries);\n if (!binary) {\n throw new Error(`No language server found for ${config.id}. Install: ${config.installHint}`);\n }\n\n const child = spawn(binary, config.args, {\n cwd: workspaceRoot,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n env: { ...process.env },\n });\n\n const key = `${config.id}:${workspaceRoot}`;\n\n const server: LSPServer = {\n process: child,\n configId: config.id,\n workspaceRoot,\n messageBuffer: new MessageBuffer(),\n nextId: 1,\n pending: new Map(),\n openedFiles: new Map(),\n ready: false,\n alive: true,\n projectIndexed: false,\n capabilities: null,\n initPromise: Promise.resolve(),\n };\n\n child.stdout!.on(\"data\", (data: Buffer) => {\n server.messageBuffer.append(data);\n let msg: object | null;\n while ((msg = server.messageBuffer.tryRead()) !== null) {\n handleMessage(server, msg as any);\n }\n });\n\n child.stderr!.on(\"data\", () => { /* discard */ });\n\n child.on(\"exit\", () => {\n server.alive = false;\n servers.delete(key);\n for (const [, req] of server.pending) {\n clearTimeout(req.timer);\n req.reject(new Error(\"Language server exited\"));\n }\n server.pending.clear();\n });\n\n // Register cleanup on first server\n if (!cleanupRegistered) {\n cleanupRegistered = true;\n process.on(\"exit\", shutdownAll);\n process.on(\"SIGINT\", () => { shutdownAll(); process.exit(0); });\n process.on(\"SIGTERM\", () => { shutdownAll(); process.exit(0); });\n }\n\n server.initPromise = initializeServer(server);\n servers.set(key, server);\n return server;\n}\n\nasync function getOrCreateServer(filePath: string): Promise<LSPServer> {\n const ext = extname(filePath).toLowerCase();\n const langId = EXT_TO_LANGID[ext];\n if (!langId) throw new Error(`No language server configured for ${ext} files`);\n\n const config = LANGID_TO_CONFIG.get(langId);\n if (!config) throw new Error(`No language config for ${langId}`);\n\n const workspaceRoot = findWorkspaceRoot(filePath);\n const key = `${config.id}:${workspaceRoot}`;\n\n const existing = servers.get(key);\n\n // Auto-restart: if server died, remove and respawn\n if (existing && !existing.alive) {\n servers.delete(key);\n } else if (existing && existing.ready) {\n return existing;\n } else if (existing) {\n await existing.initPromise;\n return existing;\n }\n\n const server = spawnServer(config, workspaceRoot);\n await server.initPromise;\n return server;\n}\n\n// ============================================================================\n// MESSAGE HANDLING\n// ============================================================================\n\nfunction handleMessage(server: LSPServer, msg: any): void {\n // Response to a request we sent\n if (\"id\" in msg && \"result\" in msg || \"id\" in msg && \"error\" in msg) {\n if (server.pending.has(msg.id)) {\n const req = server.pending.get(msg.id)!;\n server.pending.delete(msg.id);\n clearTimeout(req.timer);\n if (msg.error) {\n req.reject(new Error(msg.error.message || JSON.stringify(msg.error)));\n } else {\n req.resolve(msg.result);\n }\n return;\n }\n }\n\n // Server-initiated request — respond to avoid timeouts on the server side\n if (\"id\" in msg && \"method\" in msg) {\n const response: any = { jsonrpc: \"2.0\", id: msg.id };\n switch (msg.method) {\n case \"window/workDoneProgress/create\":\n case \"client/registerCapability\":\n case \"client/unregisterCapability\":\n response.result = null;\n break;\n case \"workspace/configuration\":\n // Return empty config for each requested scope\n response.result = (msg.params?.items || []).map(() => ({}));\n break;\n case \"window/showMessageRequest\":\n response.result = null; // Dismiss\n break;\n default:\n response.result = null;\n break;\n }\n server.process.stdin!.write(encodeMessage(response));\n return;\n }\n\n // Other notifications (diagnostics, etc.) silently ignored\n}\n\nfunction sendRequest(server: LSPServer, method: string, params: any): Promise<any> {\n if (!server.alive) return Promise.reject(new Error(\"Language server is not running\"));\n return new Promise((resolve, reject) => {\n const id = server.nextId++;\n const timer = setTimeout(() => {\n server.pending.delete(id);\n reject(new Error(`LSP request timed out: ${method}`));\n }, REQUEST_TIMEOUT);\n\n server.pending.set(id, { resolve, reject, timer });\n server.process.stdin!.write(encodeMessage({ jsonrpc: \"2.0\", id, method, params }));\n });\n}\n\nfunction sendNotification(server: LSPServer, method: string, params: any): void {\n if (!server.alive) return;\n server.process.stdin!.write(encodeMessage({ jsonrpc: \"2.0\", method, params }));\n}\n\nasync function initializeServer(server: LSPServer): Promise<void> {\n const result = await sendRequest(server, \"initialize\", {\n processId: process.pid,\n rootUri: fileUri(server.workspaceRoot),\n rootPath: server.workspaceRoot,\n capabilities: {\n textDocument: {\n synchronization: {\n didOpen: true,\n didClose: true,\n didChange: 1, // Full content sync\n willSave: false,\n willSaveWaitUntil: false,\n didSave: false,\n },\n definition: { dynamicRegistration: false },\n references: { dynamicRegistration: false },\n hover: { dynamicRegistration: false, contentFormat: [\"markdown\", \"plaintext\"] },\n documentSymbol: { dynamicRegistration: false, hierarchicalDocumentSymbolSupport: true },\n implementation: { dynamicRegistration: false },\n callHierarchy: { dynamicRegistration: false },\n },\n workspace: {\n symbol: { dynamicRegistration: false },\n workspaceFolders: true,\n configuration: true,\n },\n window: {\n workDoneProgress: true,\n },\n },\n workspaceFolders: [{ uri: fileUri(server.workspaceRoot), name: server.workspaceRoot.split(\"/\").pop() }],\n });\n\n server.capabilities = result.capabilities;\n sendNotification(server, \"initialized\", {});\n server.ready = true;\n}\n\n// ============================================================================\n// DOCUMENT SYNC\n// ============================================================================\n\n/**\n * Open or re-sync a file with the language server.\n * - First open: sends didOpen + probes with documentSymbol to ensure server is ready\n * - Subsequent: checks mtime → if changed, sends didChange + re-probes\n *\n * The probe (documentSymbol request) is key: the server must fully parse the file\n * to respond, so when it returns we know all symbols/types are available.\n * This is more reliable than waiting for diagnostics notifications.\n */\nasync function ensureFileOpen(server: LSPServer, filePath: string): Promise<void> {\n const uri = fileUri(filePath);\n const absPath = resolve(filePath);\n\n let text: string;\n let mtimeMs: number;\n try {\n text = readFileSync(absPath, \"utf-8\");\n mtimeMs = statSync(absPath).mtimeMs;\n } catch {\n throw new Error(`Cannot read file: ${filePath}`);\n }\n\n const hash = quickHash(text);\n const existing = server.openedFiles.get(uri);\n\n if (existing) {\n // Already open — check if content changed\n if (existing.mtimeMs === mtimeMs && existing.contentHash === hash) {\n return; // No changes\n }\n\n // File changed on disk — send didChange with full content\n existing.version++;\n existing.contentHash = hash;\n existing.mtimeMs = mtimeMs;\n\n sendNotification(server, \"textDocument/didChange\", {\n textDocument: { uri, version: existing.version },\n contentChanges: [{ text }],\n });\n\n // Probe: force server to re-process the file before we query it\n await sendRequest(server, \"textDocument/documentSymbol\", { textDocument: { uri } });\n return;\n }\n\n // First open\n const ext = extname(filePath).toLowerCase();\n const langId = EXT_TO_LANGID[ext] || \"plaintext\";\n\n const openedFile: OpenedFile = { uri, version: 1, contentHash: hash, mtimeMs };\n server.openedFiles.set(uri, openedFile);\n\n sendNotification(server, \"textDocument/didOpen\", {\n textDocument: { uri, languageId: langId, version: 1, text },\n });\n\n // Probe: documentSymbol ensures the server has parsed this file's AST.\n await sendRequest(server, \"textDocument/documentSymbol\", { textDocument: { uri } });\n\n // On first file open, also probe with workspace/symbol to wait for full\n // project indexing (type checking, cross-file resolution). This takes ~10s\n // on cold start but is essential for hover/definition to work correctly.\n // Subsequent files skip this since the project is already indexed.\n if (!server.projectIndexed) {\n await sendRequest(server, \"workspace/symbol\", { query: \"\" });\n server.projectIndexed = true;\n }\n}\n\n/**\n * Notify server that a file was modified externally (by edit_file, write_file, etc.).\n * Call this from local-tools after any file modification.\n */\nexport function notifyFileChanged(filePath: string): void {\n const absPath = resolve(filePath);\n const uri = fileUri(absPath);\n\n // Find any server that has this file open and invalidate it\n for (const server of servers.values()) {\n const opened = server.openedFiles.get(uri);\n if (opened) {\n // Force mtime to 0 so next ensureFileOpen detects the change\n opened.mtimeMs = 0;\n }\n }\n}\n\n// ============================================================================\n// OPERATIONS\n// ============================================================================\n\ntype Operation =\n | \"goToDefinition\"\n | \"findReferences\"\n | \"hover\"\n | \"documentSymbol\"\n | \"workspaceSymbol\"\n | \"goToImplementation\"\n | \"prepareCallHierarchy\"\n | \"incomingCalls\"\n | \"outgoingCalls\";\n\nconst OPERATIONS = new Set<Operation>([\n \"goToDefinition\", \"findReferences\", \"hover\",\n \"documentSymbol\", \"workspaceSymbol\", \"goToImplementation\",\n \"prepareCallHierarchy\", \"incomingCalls\", \"outgoingCalls\",\n]);\n\nfunction toPosition(line: number, character: number): { line: number; character: number } {\n return { line: Math.max(0, line - 1), character: Math.max(0, character - 1) };\n}\n\nasync function runOperation(\n operation: Operation,\n server: LSPServer,\n filePath: string,\n line: number,\n character: number,\n query?: string,\n): Promise<string> {\n const uri = fileUri(filePath);\n const pos = toPosition(line, character);\n\n switch (operation) {\n case \"goToDefinition\": {\n const result = await sendRequest(server, \"textDocument/definition\", {\n textDocument: { uri }, position: pos,\n });\n return formatLocations(result, \"Definition\");\n }\n\n case \"findReferences\": {\n const result = await sendRequest(server, \"textDocument/references\", {\n textDocument: { uri }, position: pos,\n context: { includeDeclaration: true },\n });\n return formatLocations(result, \"References\");\n }\n\n case \"hover\": {\n const result = await sendRequest(server, \"textDocument/hover\", {\n textDocument: { uri }, position: pos,\n });\n return formatHover(result);\n }\n\n case \"documentSymbol\": {\n const result = await sendRequest(server, \"textDocument/documentSymbol\", {\n textDocument: { uri },\n });\n return formatDocumentSymbols(result, filePath);\n }\n\n case \"workspaceSymbol\": {\n const result = await sendRequest(server, \"workspace/symbol\", {\n query: query || \"\",\n });\n return formatWorkspaceSymbols(result);\n }\n\n case \"goToImplementation\": {\n const result = await sendRequest(server, \"textDocument/implementation\", {\n textDocument: { uri }, position: pos,\n });\n return formatLocations(result, \"Implementations\");\n }\n\n case \"prepareCallHierarchy\": {\n const result = await sendRequest(server, \"textDocument/prepareCallHierarchy\", {\n textDocument: { uri }, position: pos,\n });\n return formatCallHierarchyItems(result);\n }\n\n case \"incomingCalls\": {\n const items = await sendRequest(server, \"textDocument/prepareCallHierarchy\", {\n textDocument: { uri }, position: pos,\n });\n if (!items || (Array.isArray(items) && items.length === 0)) {\n return \"No call hierarchy item found at this position.\";\n }\n const item = Array.isArray(items) ? items[0] : items;\n const result = await sendRequest(server, \"callHierarchy/incomingCalls\", { item });\n return formatIncomingCalls(result);\n }\n\n case \"outgoingCalls\": {\n const items = await sendRequest(server, \"textDocument/prepareCallHierarchy\", {\n textDocument: { uri }, position: pos,\n });\n if (!items || (Array.isArray(items) && items.length === 0)) {\n return \"No call hierarchy item found at this position.\";\n }\n const item = Array.isArray(items) ? items[0] : items;\n const result = await sendRequest(server, \"callHierarchy/outgoingCalls\", { item });\n return formatOutgoingCalls(result);\n }\n\n default:\n return `Unknown operation: ${operation}`;\n }\n}\n\n// ============================================================================\n// RESULT FORMATTERS\n// ============================================================================\n\nfunction normalizeLocations(result: any): Array<{ uri: string; range: any }> {\n if (!result) return [];\n if (Array.isArray(result)) {\n return result.map(item => {\n if (item.targetUri) {\n return { uri: item.targetUri, range: item.targetSelectionRange || item.targetRange };\n }\n return item;\n });\n }\n if (result.uri) return [result];\n if (result.targetUri) {\n return [{ uri: result.targetUri, range: result.targetSelectionRange || result.targetRange }];\n }\n return [];\n}\n\nfunction formatLocations(result: any, label: string): string {\n const locations = normalizeLocations(result);\n if (locations.length === 0) return `No ${label.toLowerCase()} found.`;\n\n const byFile = new Map<string, Array<{ line: number; char: number }>>();\n for (const loc of locations) {\n const path = uriToPath(loc.uri);\n if (!byFile.has(path)) byFile.set(path, []);\n byFile.get(path)!.push({\n line: loc.range.start.line + 1,\n char: loc.range.start.character + 1,\n });\n }\n\n const lines: string[] = [`${label} (${locations.length}):`];\n for (const [path, positions] of byFile) {\n if (byFile.size > 1) lines.push(` ${path}`);\n for (const pos of positions) {\n const prefix = byFile.size > 1 ? \" \" : \" \";\n lines.push(`${prefix}${path}:${pos.line}:${pos.char}`);\n }\n }\n return lines.join(\"\\n\");\n}\n\nfunction formatHover(result: any): string {\n if (!result || !result.contents) return \"No hover information.\";\n\n const contents = result.contents;\n if (typeof contents === \"string\") return contents;\n\n if (contents.kind === \"markdown\" || contents.kind === \"plaintext\") {\n return contents.value || \"\";\n }\n\n if (contents.language && contents.value) {\n return `\\`\\`\\`${contents.language}\\n${contents.value}\\n\\`\\`\\``;\n }\n\n if (Array.isArray(contents)) {\n return contents\n .map((c: any) => {\n if (typeof c === \"string\") return c;\n if (c.language && c.value) return `\\`\\`\\`${c.language}\\n${c.value}\\n\\`\\`\\``;\n if (c.value) return c.value;\n return String(c);\n })\n .join(\"\\n\\n\");\n }\n\n return JSON.stringify(contents, null, 2);\n}\n\nconst SYMBOL_KIND_NAMES: Record<number, string> = {\n 1: \"File\", 2: \"Module\", 3: \"Namespace\", 4: \"Package\", 5: \"Class\",\n 6: \"Method\", 7: \"Property\", 8: \"Field\", 9: \"Constructor\", 10: \"Enum\",\n 11: \"Interface\", 12: \"Function\", 13: \"Variable\", 14: \"Constant\",\n 15: \"String\", 16: \"Number\", 17: \"Boolean\", 18: \"Array\", 19: \"Object\",\n 20: \"Key\", 21: \"Null\", 22: \"EnumMember\", 23: \"Struct\", 24: \"Event\",\n 25: \"Operator\", 26: \"TypeParameter\",\n};\n\nfunction symbolKindName(kind: number): string {\n return SYMBOL_KIND_NAMES[kind] || `Kind(${kind})`;\n}\n\nfunction formatDocumentSymbols(result: any, filePath: string): string {\n if (!result || !Array.isArray(result) || result.length === 0) {\n return `No symbols found in ${filePath}`;\n }\n\n const lines: string[] = [`Symbols in ${filePath}:`];\n\n function walk(symbols: any[], indent: number): void {\n for (const sym of symbols) {\n const kind = symbolKindName(sym.kind);\n const line = sym.range?.start?.line != null\n ? sym.range.start.line + 1\n : sym.location?.range?.start?.line != null\n ? sym.location.range.start.line + 1\n : \"?\";\n lines.push(`${\" \".repeat(indent + 1)}${kind} ${sym.name} :${line}`);\n if (sym.children?.length) walk(sym.children, indent + 1);\n }\n }\n\n walk(result, 0);\n return lines.join(\"\\n\");\n}\n\nfunction formatWorkspaceSymbols(result: any): string {\n if (!result || !Array.isArray(result) || result.length === 0) {\n return \"No workspace symbols found.\";\n }\n\n const lines: string[] = [`Workspace symbols (${result.length}):`];\n for (const sym of result.slice(0, 100)) {\n const kind = symbolKindName(sym.kind);\n const path = sym.location?.uri ? uriToPath(sym.location.uri) : \"?\";\n const line = sym.location?.range?.start?.line != null ? sym.location.range.start.line + 1 : \"?\";\n lines.push(` ${kind} ${sym.name} ${path}:${line}`);\n }\n if (result.length > 100) lines.push(` ... and ${result.length - 100} more`);\n return lines.join(\"\\n\");\n}\n\nfunction formatCallHierarchyItems(result: any): string {\n if (!result || !Array.isArray(result) || result.length === 0) {\n return \"No call hierarchy item found at this position.\";\n }\n\n const lines: string[] = [\"Call hierarchy items:\"];\n for (const item of result) {\n const kind = symbolKindName(item.kind);\n const path = item.uri ? uriToPath(item.uri) : \"?\";\n const line = item.range?.start?.line != null ? item.range.start.line + 1 : \"?\";\n lines.push(` ${kind} ${item.name} ${path}:${line}`);\n }\n return lines.join(\"\\n\");\n}\n\nfunction formatIncomingCalls(result: any): string {\n if (!result || !Array.isArray(result) || result.length === 0) {\n return \"No incoming calls found.\";\n }\n\n const lines: string[] = [`Incoming calls (${result.length}):`];\n for (const call of result) {\n const from = call.from;\n const kind = symbolKindName(from.kind);\n const path = from.uri ? uriToPath(from.uri) : \"?\";\n const line = from.range?.start?.line != null ? from.range.start.line + 1 : \"?\";\n lines.push(` ${kind} ${from.name} ${path}:${line}`);\n }\n return lines.join(\"\\n\");\n}\n\nfunction formatOutgoingCalls(result: any): string {\n if (!result || !Array.isArray(result) || result.length === 0) {\n return \"No outgoing calls found.\";\n }\n\n const lines: string[] = [`Outgoing calls (${result.length}):`];\n for (const call of result) {\n const to = call.to;\n const kind = symbolKindName(to.kind);\n const path = to.uri ? uriToPath(to.uri) : \"?\";\n const line = to.range?.start?.line != null ? to.range.start.line + 1 : \"?\";\n lines.push(` ${kind} ${to.name} ${path}:${line}`);\n }\n return lines.join(\"\\n\");\n}\n\n// ============================================================================\n// CLEANUP\n// ============================================================================\n\nfunction shutdownAll(): void {\n for (const [key, server] of servers) {\n try {\n const id = server.nextId++;\n server.process.stdin!.write(encodeMessage({ jsonrpc: \"2.0\", id, method: \"shutdown\", params: null }));\n sendNotification(server, \"exit\", null);\n setTimeout(() => {\n try { server.process.kill(\"SIGTERM\"); } catch { /* dead */ }\n }, 2000);\n } catch {\n try { server.process.kill(\"SIGTERM\"); } catch { /* dead */ }\n }\n servers.delete(key);\n }\n}\n\n// ============================================================================\n// PUBLIC API\n// ============================================================================\n\nexport async function executeLSP(\n operation: string,\n input: Record<string, unknown>,\n): Promise<{ success: boolean; output: string }> {\n const op = operation as Operation;\n if (!OPERATIONS.has(op)) {\n return {\n success: false,\n output: `Unknown LSP operation: ${operation}. Valid: ${[...OPERATIONS].join(\", \")}`,\n };\n }\n\n const filePath = input.filePath as string;\n const line = input.line as number;\n const character = input.character as number;\n const query = input.query as string | undefined;\n\n if (!filePath) return { success: false, output: \"filePath is required\" };\n if (!line || line < 1) return { success: false, output: \"line is required (1-based)\" };\n if (!character || character < 1) return { success: false, output: \"character is required (1-based)\" };\n\n const resolved = resolve(filePath);\n if (!existsSync(resolved)) {\n return { success: false, output: `File not found: ${resolved}` };\n }\n\n try {\n const server = await getOrCreateServer(resolved);\n await ensureFileOpen(server, resolved);\n const result = await runOperation(op, server, resolved, line, character, query);\n return { success: true, output: result };\n } catch (err: any) {\n return { success: false, output: `LSP error: ${err.message || err}` };\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * MCP Client Manager — connect to external MCP servers
3
3
  *
4
- * Reads mcpServers from ~/.swagmanager/config.json, spawns/connects each,
4
+ * Reads mcpServers from ~/.whale/config.json, spawns/connects each,
5
5
  * and exposes their tools with mcp__{server}__{tool} naming convention.
6
6
  * Non-fatal: if a server fails to connect, it's skipped with a warning.
7
7
  */
@@ -1,157 +1,196 @@
1
1
  /**
2
2
  * MCP Client Manager — connect to external MCP servers
3
3
  *
4
- * Reads mcpServers from ~/.swagmanager/config.json, spawns/connects each,
4
+ * Reads mcpServers from ~/.whale/config.json, spawns/connects each,
5
5
  * and exposes their tools with mcp__{server}__{tool} naming convention.
6
6
  * Non-fatal: if a server fails to connect, it's skipped with a warning.
7
7
  */
8
+
8
9
  import { Client } from "@modelcontextprotocol/sdk/client/index.js";
9
10
  import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
10
11
  import { loadConfig } from "./config-store.js";
12
+
13
+ // ============================================================================
14
+ // TYPES
15
+ // ============================================================================
16
+
11
17
  // ============================================================================
12
18
  // MCP CLIENT MANAGER
13
19
  // ============================================================================
20
+
14
21
  class McpClientManager {
15
- servers = new Map();
16
- connectPromise = null;
17
- /**
18
- * Connect to all configured MCP servers.
19
- * Non-blocking: failures are logged but don't prevent startup.
20
- */
21
- async connectAll() {
22
- if (this.connectPromise)
23
- return this.connectPromise;
24
- this.connectPromise = this._connectAll();
25
- return this.connectPromise;
26
- }
27
- async _connectAll() {
28
- const config = loadConfig();
29
- const mcpServers = (config.mcpServers || {});
30
- const serverNames = Object.keys(mcpServers);
31
- if (serverNames.length === 0)
32
- return;
33
- const results = await Promise.allSettled(serverNames.map(name => this.connectServer(name, mcpServers[name])));
34
- for (let i = 0; i < results.length; i++) {
35
- if (results[i].status === "rejected") {
36
- const err = results[i].reason;
37
- process.stderr.write(`[mcp] Failed to connect to "${serverNames[i]}": ${err?.message || err}\n`);
38
- }
39
- }
22
+ servers = new Map();
23
+ connectPromise = null;
24
+
25
+ /**
26
+ * Connect to all configured MCP servers.
27
+ * Non-blocking: failures are logged but don't prevent startup.
28
+ */
29
+ async connectAll() {
30
+ if (this.connectPromise) return this.connectPromise;
31
+ this.connectPromise = this._connectAll();
32
+ return this.connectPromise;
33
+ }
34
+ async _connectAll() {
35
+ const config = loadConfig();
36
+ const mcpServers = config.mcpServers || {};
37
+ const serverNames = Object.keys(mcpServers);
38
+ if (serverNames.length === 0) return;
39
+ const results = await Promise.allSettled(serverNames.map(name => this.connectServer(name, mcpServers[name])));
40
+ for (let i = 0; i < results.length; i++) {
41
+ if (results[i].status === "rejected") {
42
+ const err = results[i].reason;
43
+ process.stderr.write(`[mcp] Failed to connect to "${serverNames[i]}": ${err?.message || err}\n`);
44
+ }
40
45
  }
41
- async connectServer(name, config) {
42
- const client = new Client({
43
- name: "whale-code",
44
- version: "5.1.0",
45
- });
46
- let transport;
47
- if (config.transport === "http" && config.url) {
48
- // Dynamically import HTTP transport handles both new StreamableHTTP and legacy SSE
49
- try {
50
- const { StreamableHTTPClientTransport } = await import("@modelcontextprotocol/sdk/client/streamableHttp.js");
51
- transport = new StreamableHTTPClientTransport(new URL(config.url));
52
- }
53
- catch {
54
- // Fallback to SSE for older SDK versions
55
- const { SSEClientTransport } = await import("@modelcontextprotocol/sdk/client/sse.js");
56
- transport = new SSEClientTransport(new URL(config.url));
57
- }
58
- }
59
- else if (config.command) {
60
- transport = new StdioClientTransport({
61
- command: config.command,
62
- args: config.args || [],
63
- env: {
64
- ...process.env,
65
- ...(config.env || {}),
66
- },
67
- // Pipe stderr to avoid corrupting our UI
68
- stderr: "pipe",
69
- });
70
- }
71
- else {
72
- throw new Error(`Invalid config: no command or url`);
73
- }
74
- // Connect with a 10s timeout
75
- const connectTimeout = new Promise((_, reject) => setTimeout(() => reject(new Error("Connection timeout (10s)")), 10_000));
76
- await Promise.race([client.connect(transport), connectTimeout]);
77
- // Discover tools
78
- const toolsResult = await client.listTools();
79
- const tools = (toolsResult.tools || []).map(t => ({
80
- name: `mcp__${name}__${t.name}`,
81
- description: `[${name}] ${t.description || t.name}`,
82
- input_schema: (t.inputSchema || { type: "object", properties: {} }),
83
- }));
84
- this.servers.set(name, { name, client, tools });
46
+ }
47
+ async connectServer(name, config) {
48
+ const client = new Client({
49
+ name: "whale-code",
50
+ version: "5.1.0"
51
+ });
52
+ let transport;
53
+ if (config.transport === "http" && config.url) {
54
+ // Dynamically import HTTP transport — handles both new StreamableHTTP and legacy SSE
55
+ try {
56
+ const {
57
+ StreamableHTTPClientTransport
58
+ } = await import("@modelcontextprotocol/sdk/client/streamableHttp.js");
59
+ transport = new StreamableHTTPClientTransport(new URL(config.url));
60
+ } catch {
61
+ // Fallback to SSE for older SDK versions
62
+ const {
63
+ SSEClientTransport
64
+ } = await import("@modelcontextprotocol/sdk/client/sse.js");
65
+ transport = new SSEClientTransport(new URL(config.url));
66
+ }
67
+ } else if (config.command) {
68
+ transport = new StdioClientTransport({
69
+ command: config.command,
70
+ args: config.args || [],
71
+ env: {
72
+ ...process.env,
73
+ ...(config.env || {})
74
+ },
75
+ // Pipe stderr to avoid corrupting our UI
76
+ stderr: "pipe"
77
+ });
78
+ } else {
79
+ throw new Error(`Invalid config: no command or url`);
85
80
  }
86
- /**
87
- * Get all tools from all connected MCP servers.
88
- */
89
- getTools() {
90
- const allTools = [];
91
- for (const server of this.servers.values()) {
92
- allTools.push(...server.tools);
93
- }
94
- return allTools;
81
+
82
+ // Connect with a 10s timeout
83
+ const connectTimeout = new Promise((_, reject) => setTimeout(() => reject(new Error("Connection timeout (10s)")), 10_000));
84
+ await Promise.race([client.connect(transport), connectTimeout]);
85
+
86
+ // Discover tools
87
+ const toolsResult = await client.listTools();
88
+ const tools = (toolsResult.tools || []).map(t => ({
89
+ name: `mcp__${name}__${t.name}`,
90
+ description: `[${name}] ${t.description || t.name}`,
91
+ input_schema: t.inputSchema || {
92
+ type: "object",
93
+ properties: {}
94
+ }
95
+ }));
96
+ this.servers.set(name, {
97
+ name,
98
+ client,
99
+ tools
100
+ });
101
+ }
102
+
103
+ /**
104
+ * Get all tools from all connected MCP servers.
105
+ */
106
+ getTools() {
107
+ const allTools = [];
108
+ for (const server of this.servers.values()) {
109
+ allTools.push(...server.tools);
95
110
  }
96
- /**
97
- * Call a tool on a connected MCP server.
98
- * Tool name format: mcp__{serverName}__{toolName}
99
- */
100
- async callTool(fullToolName, args) {
101
- // Parse mcp__{server}__{tool}
102
- const parts = fullToolName.split("__");
103
- if (parts.length < 3 || parts[0] !== "mcp") {
104
- return { success: false, output: `Invalid MCP tool name: ${fullToolName}` };
105
- }
106
- const serverName = parts[1];
107
- const toolName = parts.slice(2).join("__"); // Handle tool names with __ in them
108
- const server = this.servers.get(serverName);
109
- if (!server) {
110
- return { success: false, output: `MCP server "${serverName}" not connected` };
111
- }
112
- try {
113
- const result = await server.client.callTool({ name: toolName, arguments: args });
114
- // Extract text content from the result
115
- const content = result.content;
116
- if (Array.isArray(content)) {
117
- const texts = content
118
- .filter((c) => c.type === "text")
119
- .map((c) => c.text);
120
- return { success: !result.isError, output: texts.join("\n") || JSON.stringify(content) };
121
- }
122
- return { success: !result.isError, output: String(content) };
123
- }
124
- catch (err) {
125
- return { success: false, output: `MCP tool error: ${err.message || err}` };
126
- }
111
+ return allTools;
112
+ }
113
+
114
+ /**
115
+ * Call a tool on a connected MCP server.
116
+ * Tool name format: mcp__{serverName}__{toolName}
117
+ */
118
+ async callTool(fullToolName, args) {
119
+ // Parse mcp__{server}__{tool}
120
+ const parts = fullToolName.split("__");
121
+ if (parts.length < 3 || parts[0] !== "mcp") {
122
+ return {
123
+ success: false,
124
+ output: `Invalid MCP tool name: ${fullToolName}`
125
+ };
127
126
  }
128
- /**
129
- * Check if a tool name is an MCP tool.
130
- */
131
- isMcpTool(name) {
132
- return name.startsWith("mcp__");
127
+ const serverName = parts[1];
128
+ const toolName = parts.slice(2).join("__"); // Handle tool names with __ in them
129
+
130
+ const server = this.servers.get(serverName);
131
+ if (!server) {
132
+ return {
133
+ success: false,
134
+ output: `MCP server "${serverName}" not connected`
135
+ };
133
136
  }
134
- /**
135
- * Get status info about connected servers.
136
- */
137
- getStatus() {
138
- return Array.from(this.servers.values()).map(s => ({
139
- name: s.name,
140
- toolCount: s.tools.length,
141
- }));
137
+ try {
138
+ const result = await server.client.callTool({
139
+ name: toolName,
140
+ arguments: args
141
+ });
142
+ // Extract text content from the result
143
+ const content = result.content;
144
+ if (Array.isArray(content)) {
145
+ const texts = content.filter(c => c.type === "text").map(c => c.text);
146
+ return {
147
+ success: !result.isError,
148
+ output: texts.join("\n") || JSON.stringify(content)
149
+ };
150
+ }
151
+ return {
152
+ success: !result.isError,
153
+ output: String(content)
154
+ };
155
+ } catch (err) {
156
+ return {
157
+ success: false,
158
+ output: `MCP tool error: ${err.message || err}`
159
+ };
142
160
  }
143
- /**
144
- * Disconnect all servers gracefully.
145
- */
146
- async disconnectAll() {
147
- const closePromises = [];
148
- for (const server of this.servers.values()) {
149
- closePromises.push(server.client.close().catch(() => { }));
150
- }
151
- await Promise.allSettled(closePromises);
152
- this.servers.clear();
153
- this.connectPromise = null;
161
+ }
162
+
163
+ /**
164
+ * Check if a tool name is an MCP tool.
165
+ */
166
+ isMcpTool(name) {
167
+ return name.startsWith("mcp__");
168
+ }
169
+
170
+ /**
171
+ * Get status info about connected servers.
172
+ */
173
+ getStatus() {
174
+ return Array.from(this.servers.values()).map(s => ({
175
+ name: s.name,
176
+ toolCount: s.tools.length
177
+ }));
178
+ }
179
+
180
+ /**
181
+ * Disconnect all servers gracefully.
182
+ */
183
+ async disconnectAll() {
184
+ const closePromises = [];
185
+ for (const server of this.servers.values()) {
186
+ closePromises.push(server.client.close().catch(() => {}));
154
187
  }
188
+ await Promise.allSettled(closePromises);
189
+ this.servers.clear();
190
+ this.connectPromise = null;
191
+ }
155
192
  }
193
+
156
194
  // Singleton instance
157
195
  export const mcpClientManager = new McpClientManager();
196
+ //# sourceMappingURL=mcp-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-client.js","names":["Client","StdioClientTransport","loadConfig","McpClientManager","servers","Map","connectPromise","connectAll","_connectAll","config","mcpServers","serverNames","Object","keys","length","results","Promise","allSettled","map","name","connectServer","i","status","err","reason","process","stderr","write","message","client","version","transport","url","StreamableHTTPClientTransport","URL","SSEClientTransport","command","args","env","Error","connectTimeout","_","reject","setTimeout","race","connect","toolsResult","listTools","tools","t","description","input_schema","inputSchema","type","properties","set","getTools","allTools","server","values","push","callTool","fullToolName","parts","split","success","output","serverName","toolName","slice","join","get","result","arguments","content","Array","isArray","texts","filter","c","text","isError","JSON","stringify","String","isMcpTool","startsWith","getStatus","from","s","toolCount","disconnectAll","closePromises","close","catch","clear","mcpClientManager"],"sources":["../../../src/cli/services/mcp-client.ts"],"sourcesContent":["/**\n * MCP Client Manager — connect to external MCP servers\n *\n * Reads mcpServers from ~/.whale/config.json, spawns/connects each,\n * and exposes their tools with mcp__{server}__{tool} naming convention.\n * Non-fatal: if a server fails to connect, it's skipped with a warning.\n */\n\nimport { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { StdioClientTransport } from \"@modelcontextprotocol/sdk/client/stdio.js\";\nimport type Anthropic from \"@anthropic-ai/sdk\";\nimport { loadConfig } from \"./config-store.js\";\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\ninterface McpServerConfig {\n command?: string;\n args?: string[];\n env?: Record<string, string>;\n transport: \"stdio\" | \"http\";\n url?: string;\n}\n\ninterface ConnectedServer {\n name: string;\n client: Client;\n tools: Anthropic.Tool[];\n}\n\n// ============================================================================\n// MCP CLIENT MANAGER\n// ============================================================================\n\nclass McpClientManager {\n private servers = new Map<string, ConnectedServer>();\n private connectPromise: Promise<void> | null = null;\n\n /**\n * Connect to all configured MCP servers.\n * Non-blocking: failures are logged but don't prevent startup.\n */\n async connectAll(): Promise<void> {\n if (this.connectPromise) return this.connectPromise;\n this.connectPromise = this._connectAll();\n return this.connectPromise;\n }\n\n private async _connectAll(): Promise<void> {\n const config = loadConfig() as Record<string, unknown>;\n const mcpServers = (config.mcpServers || {}) as Record<string, McpServerConfig>;\n const serverNames = Object.keys(mcpServers);\n if (serverNames.length === 0) return;\n\n const results = await Promise.allSettled(\n serverNames.map(name => this.connectServer(name, mcpServers[name]))\n );\n\n for (let i = 0; i < results.length; i++) {\n if (results[i].status === \"rejected\") {\n const err = (results[i] as PromiseRejectedResult).reason;\n process.stderr.write(`[mcp] Failed to connect to \"${serverNames[i]}\": ${err?.message || err}\\n`);\n }\n }\n }\n\n private async connectServer(name: string, config: McpServerConfig): Promise<void> {\n const client = new Client({\n name: \"whale-code\",\n version: \"5.1.0\",\n });\n\n let transport: any;\n\n if (config.transport === \"http\" && config.url) {\n // Dynamically import HTTP transport — handles both new StreamableHTTP and legacy SSE\n try {\n const { StreamableHTTPClientTransport } = await import(\"@modelcontextprotocol/sdk/client/streamableHttp.js\");\n transport = new StreamableHTTPClientTransport(new URL(config.url));\n } catch {\n // Fallback to SSE for older SDK versions\n const { SSEClientTransport } = await import(\"@modelcontextprotocol/sdk/client/sse.js\");\n transport = new SSEClientTransport(new URL(config.url));\n }\n } else if (config.command) {\n transport = new StdioClientTransport({\n command: config.command,\n args: config.args || [],\n env: {\n ...process.env as Record<string, string>,\n ...(config.env || {}),\n },\n // Pipe stderr to avoid corrupting our UI\n stderr: \"pipe\",\n });\n } else {\n throw new Error(`Invalid config: no command or url`);\n }\n\n // Connect with a 10s timeout\n const connectTimeout = new Promise<never>((_, reject) =>\n setTimeout(() => reject(new Error(\"Connection timeout (10s)\")), 10_000)\n );\n await Promise.race([client.connect(transport), connectTimeout]);\n\n // Discover tools\n const toolsResult = await client.listTools();\n const tools: Anthropic.Tool[] = (toolsResult.tools || []).map(t => ({\n name: `mcp__${name}__${t.name}`,\n description: `[${name}] ${t.description || t.name}`,\n input_schema: (t.inputSchema || { type: \"object\", properties: {} }) as Anthropic.Tool[\"input_schema\"],\n }));\n\n this.servers.set(name, { name, client, tools });\n }\n\n /**\n * Get all tools from all connected MCP servers.\n */\n getTools(): Anthropic.Tool[] {\n const allTools: Anthropic.Tool[] = [];\n for (const server of this.servers.values()) {\n allTools.push(...server.tools);\n }\n return allTools;\n }\n\n /**\n * Call a tool on a connected MCP server.\n * Tool name format: mcp__{serverName}__{toolName}\n */\n async callTool(fullToolName: string, args: Record<string, unknown>): Promise<{ success: boolean; output: string }> {\n // Parse mcp__{server}__{tool}\n const parts = fullToolName.split(\"__\");\n if (parts.length < 3 || parts[0] !== \"mcp\") {\n return { success: false, output: `Invalid MCP tool name: ${fullToolName}` };\n }\n const serverName = parts[1];\n const toolName = parts.slice(2).join(\"__\"); // Handle tool names with __ in them\n\n const server = this.servers.get(serverName);\n if (!server) {\n return { success: false, output: `MCP server \"${serverName}\" not connected` };\n }\n\n try {\n const result = await server.client.callTool({ name: toolName, arguments: args });\n // Extract text content from the result\n const content = result.content;\n if (Array.isArray(content)) {\n const texts = content\n .filter((c: any) => c.type === \"text\")\n .map((c: any) => c.text);\n return { success: !result.isError, output: texts.join(\"\\n\") || JSON.stringify(content) };\n }\n return { success: !result.isError, output: String(content) };\n } catch (err: any) {\n return { success: false, output: `MCP tool error: ${err.message || err}` };\n }\n }\n\n /**\n * Check if a tool name is an MCP tool.\n */\n isMcpTool(name: string): boolean {\n return name.startsWith(\"mcp__\");\n }\n\n /**\n * Get status info about connected servers.\n */\n getStatus(): { name: string; toolCount: number }[] {\n return Array.from(this.servers.values()).map(s => ({\n name: s.name,\n toolCount: s.tools.length,\n }));\n }\n\n /**\n * Disconnect all servers gracefully.\n */\n async disconnectAll(): Promise<void> {\n const closePromises: Promise<void>[] = [];\n for (const server of this.servers.values()) {\n closePromises.push(\n server.client.close().catch(() => {})\n );\n }\n await Promise.allSettled(closePromises);\n this.servers.clear();\n this.connectPromise = null;\n }\n}\n\n// Singleton instance\nexport const mcpClientManager = new McpClientManager();\n"],"mappings":"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","ignoreList":[]}
@@ -4,54 +4,67 @@
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, writeFileSync, existsSync, mkdirSync } from "fs";
8
- import { join } from "path";
9
- import { homedir } from "os";
10
- const MEMORY_DIR = join(homedir(), ".swagmanager", "memory");
11
- const MEMORY_FILE = join(MEMORY_DIR, "MEMORY.md");
9
+ import { MEMORY_DIR, MEMORY_FILE, ensureDataDir } from "./paths.js";
12
10
  function ensureMemoryDir() {
13
- if (!existsSync(MEMORY_DIR))
14
- mkdirSync(MEMORY_DIR, { recursive: true });
11
+ ensureDataDir();
12
+ if (!existsSync(MEMORY_DIR)) mkdirSync(MEMORY_DIR, {
13
+ recursive: true
14
+ });
15
15
  }
16
16
  export function loadMemory() {
17
- if (!existsSync(MEMORY_FILE))
18
- return "";
19
- try {
20
- return readFileSync(MEMORY_FILE, "utf-8").trim();
21
- }
22
- catch {
23
- return "";
24
- }
17
+ if (!existsSync(MEMORY_FILE)) return "";
18
+ try {
19
+ return readFileSync(MEMORY_FILE, "utf-8").trim();
20
+ } catch {
21
+ return "";
22
+ }
25
23
  }
26
24
  export function addMemory(fact) {
27
- ensureMemoryDir();
28
- const existing = loadMemory();
29
- const entry = `- ${fact}`;
30
- // Check for duplicate
31
- if (existing.includes(fact)) {
32
- return { success: false, message: "Already remembered." };
33
- }
34
- const updated = existing ? existing + "\n" + entry : entry;
35
- writeFileSync(MEMORY_FILE, updated + "\n", "utf-8");
36
- return { success: true, message: `Remembered: ${fact}` };
25
+ ensureMemoryDir();
26
+ const existing = loadMemory();
27
+ const entry = `- ${fact}`;
28
+
29
+ // Check for duplicate
30
+ if (existing.includes(fact)) {
31
+ return {
32
+ success: false,
33
+ message: "Already remembered."
34
+ };
35
+ }
36
+ const updated = existing ? existing + "\n" + entry : entry;
37
+ writeFileSync(MEMORY_FILE, updated + "\n", "utf-8");
38
+ return {
39
+ success: true,
40
+ message: `Remembered: ${fact}`
41
+ };
37
42
  }
38
43
  export function removeMemory(pattern) {
39
- if (!existsSync(MEMORY_FILE))
40
- return { success: false, message: "No memories stored." };
41
- const content = readFileSync(MEMORY_FILE, "utf-8");
42
- const lines = content.split("\n");
43
- const lower = pattern.toLowerCase();
44
- const filtered = lines.filter(line => !line.toLowerCase().includes(lower));
45
- if (filtered.length === lines.length) {
46
- return { success: false, message: `No memory matching "${pattern}" found.` };
47
- }
48
- const removed = lines.length - filtered.length;
49
- writeFileSync(MEMORY_FILE, filtered.join("\n"), "utf-8");
50
- return { success: true, message: `Forgot ${removed} memor${removed === 1 ? "y" : "ies"} matching "${pattern}".` };
44
+ if (!existsSync(MEMORY_FILE)) return {
45
+ success: false,
46
+ message: "No memories stored."
47
+ };
48
+ const content = readFileSync(MEMORY_FILE, "utf-8");
49
+ const lines = content.split("\n");
50
+ const lower = pattern.toLowerCase();
51
+ const filtered = lines.filter(line => !line.toLowerCase().includes(lower));
52
+ if (filtered.length === lines.length) {
53
+ return {
54
+ success: false,
55
+ message: `No memory matching "${pattern}" found.`
56
+ };
57
+ }
58
+ const removed = lines.length - filtered.length;
59
+ writeFileSync(MEMORY_FILE, filtered.join("\n"), "utf-8");
60
+ return {
61
+ success: true,
62
+ message: `Forgot ${removed} memor${removed === 1 ? "y" : "ies"} matching "${pattern}".`
63
+ };
51
64
  }
52
65
  export function listMemories() {
53
- const content = loadMemory();
54
- if (!content)
55
- return [];
56
- return content.split("\n").filter(l => l.trim().startsWith("- ")).map(l => l.replace(/^- /, "").trim());
66
+ const content = loadMemory();
67
+ if (!content) return [];
68
+ return content.split("\n").filter(l => l.trim().startsWith("- ")).map(l => l.replace(/^- /, "").trim());
57
69
  }
70
+ //# sourceMappingURL=memory-manager.js.map