whale-code 6.5.5 → 6.5.6

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