aws-runtime-bridge 1.9.175 → 1.9.179

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 (357) hide show
  1. package/CHANGELOG.md +188 -0
  2. package/README.md +61 -2
  3. package/dist/adapter/AcodeSdkAdapter.d.ts +369 -0
  4. package/dist/adapter/AcodeSdkAdapter.js +2 -2
  5. package/dist/adapter/AdapterRegistry.d.ts +28 -0
  6. package/dist/adapter/ClaudeSdkAdapter.d.ts +71 -0
  7. package/dist/adapter/CodexSdkAdapter.d.ts +14 -0
  8. package/dist/adapter/OpencodeSdkAdapter.d.ts +44 -0
  9. package/dist/adapter/acode-tool-names.d.ts +9 -0
  10. package/dist/adapter/idle-poll-loop.d.ts +20 -0
  11. package/dist/adapter/index.d.ts +3 -0
  12. package/dist/adapter/instance-ai-config-resolver.d.ts +20 -0
  13. package/dist/adapter/prompts.d.ts +12 -0
  14. package/dist/adapter/types.d.ts +182 -0
  15. package/dist/browser/browser-bootstrap.d.ts +15 -0
  16. package/dist/browser/browser-connect-token.d.ts +11 -0
  17. package/dist/browser/browser-frame-encode.d.ts +32 -0
  18. package/dist/browser/browser-pool.d.ts +129 -0
  19. package/dist/browser/browser-profile-store.d.ts +41 -0
  20. package/dist/browser/browser-ws-bridge.d.ts +20 -0
  21. package/dist/browser/built-in-browser-tools.d.ts +44 -0
  22. package/dist/browser/element-locator.d.ts +25 -0
  23. package/dist/browser/element-picker.d.ts +30 -0
  24. package/dist/browser/frame-encode.d.ts +19 -0
  25. package/dist/browser/input-dispatcher.d.ts +35 -0
  26. package/dist/browser/listener-store.d.ts +44 -0
  27. package/dist/browser/page-listener-manager.d.ts +88 -0
  28. package/dist/browser/page-listener-types.d.ts +38 -0
  29. package/dist/browser/screencast-differ.d.ts +10 -0
  30. package/dist/browser/screencast-manager.d.ts +94 -0
  31. package/dist/browser/snapshot-serializer.d.ts +56 -0
  32. package/dist/browser/ssrf-guard.d.ts +44 -0
  33. package/dist/browser/stealth.d.ts +21 -0
  34. package/dist/browser/step-archive.d.ts +13 -0
  35. package/dist/browser/types.d.ts +100 -0
  36. package/dist/browser/ws-server.d.ts +54 -0
  37. package/dist/config.d.ts +138 -2
  38. package/dist/config.js +2 -2
  39. package/dist/desktop/built-in-desktop-tools.d.ts +68 -0
  40. package/dist/desktop/built-in-desktop-tools.js +2 -1
  41. package/dist/desktop/desktop-control.d.ts +142 -0
  42. package/dist/desktop/desktop-control.js +2 -0
  43. package/dist/desktop/desktop-mcp-client.d.ts +28 -0
  44. package/dist/desktop/desktop-staleness.d.ts +66 -0
  45. package/dist/desktop/desktop-staleness.js +2 -0
  46. package/dist/index.d.ts +4 -0
  47. package/dist/index.js +1 -1
  48. package/dist/middleware/auth.d.ts +26 -0
  49. package/dist/middleware/auth.js +1 -1
  50. package/dist/remote-desktop/computer-control.d.ts +3 -0
  51. package/dist/remote-desktop/coords.d.ts +6 -0
  52. package/dist/remote-desktop/frame-backpressure.d.ts +10 -0
  53. package/dist/remote-desktop/frame-encode.d.ts +3 -0
  54. package/dist/remote-desktop/index.js +2 -2
  55. package/dist/remote-desktop/input-dispatcher.d.ts +4 -0
  56. package/dist/remote-desktop/permission-manager.d.ts +3 -0
  57. package/dist/remote-desktop/screen-capture.d.ts +91 -0
  58. package/dist/remote-desktop/session-manager.d.ts +47 -0
  59. package/dist/remote-desktop/session-manager.js +1 -1
  60. package/dist/remote-desktop/system-backend.d.ts +64 -0
  61. package/dist/remote-desktop/types.d.ts +25 -0
  62. package/dist/remote-desktop/ui-automation.d.ts +11 -0
  63. package/dist/remote-desktop/win32-api.d.ts +10 -0
  64. package/dist/routes/acode-todos.d.ts +13 -0
  65. package/dist/routes/agent-state.d.ts +15 -0
  66. package/dist/routes/ai-sources.js +1 -1
  67. package/dist/routes/background-tasks.d.ts +18 -0
  68. package/dist/routes/background-tasks.js +2 -2
  69. package/dist/routes/browser-listeners.d.ts +17 -0
  70. package/dist/routes/browser-sessions.d.ts +10 -0
  71. package/dist/routes/capabilities.js +1 -1
  72. package/dist/routes/dashboard-icon.d.ts +9 -0
  73. package/dist/routes/dashboard-icon.js +2 -0
  74. package/dist/routes/dashboard-theme.d.ts +24 -0
  75. package/dist/routes/dashboard-theme.js +157 -0
  76. package/dist/routes/dashboard.d.ts +9 -0
  77. package/dist/routes/dashboard.js +1988 -625
  78. package/dist/routes/debug-mount.d.ts +16 -0
  79. package/dist/routes/desktop-control.d.ts +15 -0
  80. package/dist/routes/desktop-control.js +2 -0
  81. package/dist/routes/events.d.ts +4 -0
  82. package/dist/routes/file-browser.d.ts +11 -0
  83. package/dist/routes/file-change-diff.d.ts +25 -0
  84. package/dist/routes/file-diff-rollback.d.ts +28 -0
  85. package/dist/routes/file-snapshot.d.ts +7 -0
  86. package/dist/routes/git.d.ts +143 -0
  87. package/dist/routes/instance-tool-status.d.ts +5 -0
  88. package/dist/routes/instance.d.ts +8 -0
  89. package/dist/routes/instance.js +1 -1
  90. package/dist/routes/jdks.d.ts +4 -0
  91. package/dist/routes/launch.d.ts +5 -0
  92. package/dist/routes/lsp-providers.d.ts +11 -0
  93. package/dist/routes/lsp-providers.js +2 -0
  94. package/dist/routes/lsp.d.ts +41 -0
  95. package/dist/routes/lsp.js +4 -2
  96. package/dist/routes/mcp-extra.d.ts +15 -0
  97. package/dist/routes/mcp.d.ts +16 -0
  98. package/dist/routes/mcp.js +1 -1
  99. package/dist/routes/plugins.d.ts +19 -0
  100. package/dist/routes/plugins.js +1 -1
  101. package/dist/routes/processes.d.ts +4 -0
  102. package/dist/routes/properties.d.ts +4 -0
  103. package/dist/routes/pty.d.ts +29 -0
  104. package/dist/routes/runtime-binding.d.ts +3 -0
  105. package/dist/routes/sessions.d.ts +22 -0
  106. package/dist/routes/skills.d.ts +15 -0
  107. package/dist/routes/skills.js +1 -1
  108. package/dist/routes/sub-agents.d.ts +11 -0
  109. package/dist/routes/sub-agents.js +1 -1
  110. package/dist/routes/task-context.d.ts +5 -0
  111. package/dist/routes/tech-stack.d.ts +4 -0
  112. package/dist/routes/terminal.d.ts +122 -0
  113. package/dist/routes/terminal.js +16 -16
  114. package/dist/routes/workspace-index.d.ts +12 -0
  115. package/dist/routes/workspace-index.js +2 -0
  116. package/dist/routes/yml.d.ts +4 -0
  117. package/dist/scripts/migrate-user-scopes.d.ts +26 -0
  118. package/dist/scripts/migrate-user-scopes.js +2 -0
  119. package/dist/services/access-control.d.ts +21 -0
  120. package/dist/services/acode-bg-manager.d.ts +21 -0
  121. package/dist/services/acode-package.d.ts +10 -0
  122. package/dist/services/acode-package.js +1 -1
  123. package/dist/services/agent-capability-sync.d.ts +26 -0
  124. package/dist/services/agent-capability-sync.js +1 -1
  125. package/dist/services/agent-event-store.d.ts +20 -0
  126. package/dist/services/agent-ownership.d.ts +58 -0
  127. package/dist/services/agent-ownership.js +3 -0
  128. package/dist/services/agent-process-manager.d.ts +154 -0
  129. package/dist/services/agent-pty-manager.d.ts +37 -0
  130. package/dist/services/agent-startup-memory.d.ts +34 -0
  131. package/dist/services/agent-startup-memory.js +1 -1
  132. package/dist/services/ai-config-service.d.ts +26 -52
  133. package/dist/services/ai-config-service.js +1 -3
  134. package/dist/services/ai-source-apply.d.ts +7 -15
  135. package/dist/services/ai-source-apply.js +1 -1
  136. package/dist/services/auto-register.d.ts +165 -1
  137. package/dist/services/auto-register.js +1 -1
  138. package/dist/services/aws-client-agent-mcp.d.ts +14 -0
  139. package/dist/services/aws-client-agent-mcp.js +2 -2
  140. package/dist/services/bridge-package-publish-hooks.d.ts +14 -0
  141. package/dist/services/bridge-pairing.d.ts +82 -0
  142. package/dist/services/bridge-pairing.js +2 -0
  143. package/dist/services/bridge-temp-files.d.ts +29 -0
  144. package/dist/services/browser-session-manager.d.ts +71 -0
  145. package/dist/services/capability-config.d.ts +60 -15
  146. package/dist/services/capability-config.js +2 -2
  147. package/dist/services/change-cache-retention.d.ts +9 -0
  148. package/dist/services/changelog.d.ts +9 -0
  149. package/dist/services/cli-commands.d.ts +82 -0
  150. package/dist/services/cli-commands.js +6 -6
  151. package/dist/services/connection-key-rotation.d.ts +27 -0
  152. package/dist/services/connection-key-rotation.js +2 -0
  153. package/dist/services/debug-mount.d.ts +49 -0
  154. package/dist/services/desktop-mcp-manager.d.ts +103 -1
  155. package/dist/services/desktop-mcp-manager.js +1 -1
  156. package/dist/services/event-delta-pusher.d.ts +15 -0
  157. package/dist/services/fileSnapshotStore.d.ts +33 -0
  158. package/dist/services/gitignore.d.ts +9 -0
  159. package/dist/services/instance-ai-config-service.d.ts +9 -0
  160. package/dist/services/instance-ai-config-service.js +1 -1
  161. package/dist/services/instance-features.d.ts +127 -0
  162. package/dist/services/instance-features.js +1 -1
  163. package/dist/services/instance-init-service.d.ts +3 -0
  164. package/dist/services/instance-init-service.js +1 -1
  165. package/dist/services/instance-state.d.ts +23 -0
  166. package/dist/services/jdk-scanner.d.ts +15 -0
  167. package/dist/services/launch-manager.d.ts +138 -0
  168. package/dist/services/launch-metrics.d.ts +42 -0
  169. package/dist/services/launch-streams.d.ts +19 -0
  170. package/dist/services/lifecycle-state.d.ts +5 -0
  171. package/dist/services/log-retention.d.ts +38 -0
  172. package/dist/services/lsp/install-manager.d.ts +55 -0
  173. package/dist/services/lsp/install-manager.js +2 -0
  174. package/dist/services/lsp/provider-registry.d.ts +108 -0
  175. package/dist/services/lsp/provider-registry.js +2 -0
  176. package/dist/services/lsp/uri-rewrite.d.ts +44 -0
  177. package/dist/services/lsp/uri-rewrite.js +2 -0
  178. package/dist/services/lsp-stdio-bridge.d.ts +41 -4
  179. package/dist/services/lsp-stdio-bridge.js +3 -3
  180. package/dist/services/mcp-deploy.d.ts +45 -4
  181. package/dist/services/mcp-deploy.js +4 -4
  182. package/dist/services/mcp-env-injector.d.ts +52 -0
  183. package/dist/services/mcp-launch-binding-queue.d.ts +12 -0
  184. package/dist/services/mcp-package.d.ts +22 -0
  185. package/dist/services/mcp-package.js +1 -1
  186. package/dist/services/mcp-probe-client.d.ts +19 -0
  187. package/dist/services/mcp-probe-client.js +1 -1
  188. package/dist/services/open-doc-events.d.ts +22 -0
  189. package/dist/services/open-doc-registry.d.ts +35 -0
  190. package/dist/services/orphan-monitor.d.ts +43 -0
  191. package/dist/services/panel-auth.d.ts +24 -0
  192. package/dist/services/panel-env.d.ts +28 -0
  193. package/dist/services/plugin-deployment.d.ts +34 -1
  194. package/dist/services/plugin-deployment.js +2 -2
  195. package/dist/services/plugin-event-buffer.d.ts +21 -0
  196. package/dist/services/plugin-fs.d.ts +11 -0
  197. package/dist/services/plugin-handler-adapter.d.ts +13 -0
  198. package/dist/services/plugin-listener-runner.d.ts +10 -0
  199. package/dist/services/plugin-loader.d.ts +15 -0
  200. package/dist/services/plugin-manager.d.ts +95 -9
  201. package/dist/services/plugin-manager.js +4 -4
  202. package/dist/services/plugin-manifest.d.ts +14 -0
  203. package/dist/services/plugin-package.d.ts +13 -0
  204. package/dist/services/plugin-runtime.d.ts +15 -0
  205. package/dist/services/port-detector.d.ts +15 -0
  206. package/dist/services/process-detail.d.ts +3 -0
  207. package/dist/services/process-detector.d.ts +132 -0
  208. package/dist/services/process-registry.d.ts +120 -0
  209. package/dist/services/process-top.d.ts +6 -0
  210. package/dist/services/request-identity.d.ts +77 -0
  211. package/dist/services/request-identity.js +2 -0
  212. package/dist/services/request-invalid-dump.d.ts +4 -0
  213. package/dist/services/ring-buffer.d.ts +33 -0
  214. package/dist/services/runtime-binding.d.ts +56 -4
  215. package/dist/services/runtime-binding.js +4 -4
  216. package/dist/services/runtime-lifecycle-policy.d.ts +17 -0
  217. package/dist/services/runtime-resources-snapshot.d.ts +26 -0
  218. package/dist/services/sdk-tool-file-change-recorder.d.ts +9 -0
  219. package/dist/services/session-output.d.ts +63 -0
  220. package/dist/services/session-output.js +3 -3
  221. package/dist/services/skill-manager.d.ts +42 -5
  222. package/dist/services/skill-manager.js +3 -3
  223. package/dist/services/snapshot-retention.d.ts +23 -0
  224. package/dist/services/startup-config-wizard.d.ts +7 -1
  225. package/dist/services/startup-config-wizard.js +10 -10
  226. package/dist/services/system-metrics.d.ts +3 -0
  227. package/dist/services/tech-stack-scanner.d.ts +12 -0
  228. package/dist/services/terminal-persistence.d.ts +43 -0
  229. package/dist/services/tool-installer.d.ts +12 -0
  230. package/dist/services/tunnel-client.d.ts +57 -2
  231. package/dist/services/tunnel-client.js +1 -1
  232. package/dist/services/update-log.d.ts +6 -0
  233. package/dist/services/update-notifier.d.ts +17 -0
  234. package/dist/services/update-notifier.js +2 -2
  235. package/dist/services/user-scope.d.ts +115 -0
  236. package/dist/services/user-scope.js +2 -0
  237. package/dist/services/windows-service-manager.d.ts +12 -0
  238. package/dist/services/workspace-files.d.ts +64 -0
  239. package/dist/services/workspace-index/index-manager.d.ts +46 -0
  240. package/dist/services/workspace-index/index-manager.js +2 -0
  241. package/dist/services/workspace-index/indexer.d.ts +15 -0
  242. package/dist/services/workspace-index/indexer.js +2 -0
  243. package/dist/services/workspace-index/query.d.ts +74 -0
  244. package/dist/services/workspace-index/query.js +5 -0
  245. package/dist/services/workspace-index/resolver.d.ts +26 -0
  246. package/dist/services/workspace-index/resolver.js +2 -0
  247. package/dist/services/workspace-index/types.d.ts +89 -0
  248. package/dist/services/workspace-index/types.js +2 -0
  249. package/dist/services/workspace-watch.d.ts +4 -0
  250. package/dist/services/workspaceTaskChangeWatcher.d.ts +49 -0
  251. package/dist/services/workspaceTaskChangeWatcher.js +1 -1
  252. package/dist/types.d.ts +9 -0
  253. package/dist/utils/config-write-queue.d.ts +11 -0
  254. package/dist/utils/env-safety.d.ts +21 -0
  255. package/dist/utils/file-utils.d.ts +15 -0
  256. package/dist/utils/instance-ai-config-debug-logger.d.ts +15 -0
  257. package/dist/utils/lifecycle-log.d.ts +5 -0
  258. package/dist/utils/logger.d.ts +13 -0
  259. package/dist/utils/logger.js +2 -1
  260. package/dist/utils/npm-version.d.ts +10 -0
  261. package/dist/utils/path-utils.d.ts +12 -0
  262. package/dist/utils/scheduler-url.d.ts +18 -0
  263. package/dist/utils/scheduler-url.js +2 -0
  264. package/dist/utils/sdk-package-loader.d.ts +13 -0
  265. package/dist/utils/sdk-package-loader.js +1 -1
  266. package/dist/utils/target-identity.d.ts +31 -0
  267. package/dist/utils/target-identity.js +2 -0
  268. package/dist/utils/validation.d.ts +17 -0
  269. package/dist/utils/yaml-utils.d.ts +48 -0
  270. package/package/acode/dist/__tests__/summary-request-helper.d.ts +10 -0
  271. package/package/acode/dist/ask-user-question-tool.d.ts +17 -0
  272. package/package/acode/dist/await-complete-tool.d.ts +12 -0
  273. package/package/acode/dist/background-command-manager.d.ts +105 -0
  274. package/package/acode/dist/background-command-store.d.ts +27 -0
  275. package/package/acode/dist/background-command-tools.d.ts +8 -0
  276. package/package/acode/dist/background-output-ringbuffer.d.ts +15 -0
  277. package/package/acode/dist/built-in-file-tools.d.ts +65 -0
  278. package/package/acode/dist/built-in-symbols-tool.d.ts +3 -0
  279. package/package/acode/dist/builtins/commandArtifacts.d.ts +3 -0
  280. package/package/acode/dist/builtins/shellCommandPreparation.d.ts +17 -0
  281. package/package/acode/dist/builtins/shellCommandRunner.d.ts +4 -0
  282. package/package/acode/dist/builtins/shellOutputDecoder.d.ts +15 -0
  283. package/package/acode/dist/cache-control.d.ts +45 -0
  284. package/package/acode/dist/commands/commandLoader.d.ts +3 -0
  285. package/package/acode/dist/commands/commandParser.d.ts +3 -0
  286. package/package/acode/dist/commands/commandRegistry.d.ts +3 -0
  287. package/package/acode/dist/compaction.d.ts +354 -0
  288. package/package/acode/dist/config.d.ts +3 -0
  289. package/package/acode/dist/context-overflow.d.ts +32 -0
  290. package/package/acode/dist/fs-utils.d.ts +18 -0
  291. package/package/acode/dist/hooks/hookBus.d.ts +3 -0
  292. package/package/acode/dist/image-utils.d.ts +35 -0
  293. package/package/acode/dist/index.d.ts +1 -0
  294. package/package/acode/dist/index.js +1 -1
  295. package/package/acode/dist/mcpToolNames.d.ts +32 -0
  296. package/package/acode/dist/microcompact.d.ts +53 -0
  297. package/package/acode/dist/parsers/ast-cache.d.ts +41 -0
  298. package/package/acode/dist/parsers/file-index.d.ts +83 -0
  299. package/package/acode/dist/parsers/file-index.js +4 -0
  300. package/package/acode/dist/parsers/language-detector.d.ts +4 -0
  301. package/package/acode/dist/parsers/tree-sitter-loader.d.ts +12 -0
  302. package/package/acode/dist/parsers/types.d.ts +11 -0
  303. package/package/acode/dist/paths.d.ts +14 -0
  304. package/package/acode/dist/plugin-types.d.ts +34 -0
  305. package/package/acode/dist/read-file-state.d.ts +15 -0
  306. package/package/acode/dist/runtime-environment.d.ts +16 -0
  307. package/package/acode/dist/runtime.d.ts +824 -9
  308. package/package/acode/dist/runtime.js +21 -21
  309. package/package/acode/dist/skill-tool.d.ts +20 -0
  310. package/package/acode/dist/sub-agent-manager.d.ts +169 -0
  311. package/package/acode/dist/sub-agent-manager.js +1 -1
  312. package/package/acode/dist/sub-agent-store.d.ts +50 -0
  313. package/package/acode/dist/sub-agent-tools.d.ts +15 -0
  314. package/package/acode/dist/sub-agent-types.d.ts +13 -0
  315. package/package/acode/dist/terminal-tool.d.ts +15 -0
  316. package/package/acode/dist/terminal-types.d.ts +10 -0
  317. package/package/acode/dist/todo-store.d.ts +15 -0
  318. package/package/acode/dist/token-estimator.d.ts +17 -0
  319. package/package/acode/dist/tool-allocation.d.ts +113 -0
  320. package/package/acode/dist/tool-concurrency/index.d.ts +8 -0
  321. package/package/acode/dist/tool-concurrency/observability.d.ts +32 -0
  322. package/package/acode/dist/tool-concurrency/resource-lock.d.ts +30 -0
  323. package/package/acode/dist/tool-concurrency/scheduler.d.ts +19 -0
  324. package/package/acode/dist/tool-concurrency/types.d.ts +57 -0
  325. package/package/acode/dist/tool-group-manager.d.ts +195 -0
  326. package/package/acode/dist/tool-group-manager.js +4 -4
  327. package/package/acode/dist/types.d.ts +179 -0
  328. package/package/aws-client-agent-mcp/README.md +130 -215
  329. package/package/aws-client-agent-mcp/dist/ability-market-tools.d.ts +57 -0
  330. package/package/aws-client-agent-mcp/dist/agent-client.d.ts +277 -3
  331. package/package/aws-client-agent-mcp/dist/agent-client.js +1 -1
  332. package/package/aws-client-agent-mcp/dist/config.d.ts +18 -0
  333. package/package/aws-client-agent-mcp/dist/constants.d.ts +2 -0
  334. package/package/aws-client-agent-mcp/dist/context-manager.d.ts +70 -0
  335. package/package/aws-client-agent-mcp/dist/http-client.d.ts +61 -0
  336. package/package/aws-client-agent-mcp/dist/index.d.ts +10 -0
  337. package/package/aws-client-agent-mcp/dist/logger.d.ts +24 -0
  338. package/package/aws-client-agent-mcp/dist/mcp-server.d.ts +606 -1
  339. package/package/aws-client-agent-mcp/dist/mcp-server.js +4 -4
  340. package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts +158 -0
  341. package/package/aws-client-agent-mcp/dist/mcp-tools.js +38 -22
  342. package/package/aws-client-agent-mcp/dist/memory-store.d.ts +81 -0
  343. package/package/aws-client-agent-mcp/dist/memory-tools.d.ts +18 -0
  344. package/package/aws-client-agent-mcp/dist/message-buffer.d.ts +86 -0
  345. package/package/aws-client-agent-mcp/dist/messageContent.d.ts +24 -0
  346. package/package/aws-client-agent-mcp/dist/office/office-equation.d.ts +19 -0
  347. package/package/aws-client-agent-mcp/dist/office/office-image.d.ts +18 -0
  348. package/package/aws-client-agent-mcp/dist/office/office-workspace.d.ts +29 -0
  349. package/package/aws-client-agent-mcp/dist/parent-lifecycle.d.ts +18 -0
  350. package/package/aws-client-agent-mcp/dist/runtime-launch-binding.d.ts +6 -0
  351. package/package/aws-client-agent-mcp/dist/server-memory-store.d.ts +4 -0
  352. package/package/aws-client-agent-mcp/dist/status-reporter.d.ts +41 -0
  353. package/package/aws-client-agent-mcp/dist/tool-groups.d.ts +136 -0
  354. package/package/aws-client-agent-mcp/dist/types.d.ts +123 -0
  355. package/package/aws-client-agent-mcp/dist/watchdog.d.ts +7 -0
  356. package/package/aws-client-agent-mcp/dist/websocket-client.d.ts +108 -0
  357. package/package.json +1 -1
@@ -0,0 +1,108 @@
1
+
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+ export type LspProviderKind = "builtin" | "npm" | "system";
14
+ export interface LspProviderLanguage {
15
+
16
+ languageId: string;
17
+
18
+ extensions: string[];
19
+ }
20
+ export interface LspProviderSpec {
21
+ id: string;
22
+
23
+ label: string;
24
+ kind: LspProviderKind;
25
+ languages: LspProviderLanguage[];
26
+
27
+ npmPackage?: string;
28
+ npmVersion?: string;
29
+
30
+ binPath?: string;
31
+
32
+ args: string[];
33
+
34
+ env?: Record<string, string>;
35
+
36
+ initializationOptions?: Record<string, unknown>;
37
+
38
+ rootMarkers: string[];
39
+
40
+ systemBinaries?: string[];
41
+
42
+ systemArgs?: string[];
43
+
44
+ priority: number;
45
+
46
+ description: string;
47
+ }
48
+
49
+ export interface LspLaunchSpec {
50
+ providerId: string;
51
+ label: string;
52
+ command: string;
53
+ args: string[];
54
+ env: Record<string, string>;
55
+ cwd: string;
56
+ initializationOptions?: Record<string, unknown>;
57
+ }
58
+
59
+ export interface LspProviderSummary {
60
+ id: string;
61
+ label: string;
62
+ kind: LspProviderKind;
63
+ languages: string[];
64
+ extensions: string[];
65
+ npmPackage?: string;
66
+ npmVersion?: string;
67
+ systemBinaries?: string[];
68
+ rootMarkers: string[];
69
+ description: string;
70
+
71
+ available: boolean;
72
+
73
+ unavailableReason?: string;
74
+ }
75
+
76
+ export declare function getLspServersRoot(): string;
77
+
78
+ export declare function getLspServerDir(providerId: string): string;
79
+ export declare function listAllProviders(): LspProviderSpec[];
80
+ export declare function getProvider(providerId: string): LspProviderSpec | null;
81
+
82
+
83
+
84
+
85
+ export declare function resolveProviderForFile(filePath: string): LspProviderSpec | null;
86
+
87
+ export declare function resolveLanguageId(provider: LspProviderSpec, filePath: string): string;
88
+
89
+
90
+
91
+
92
+ export declare function resolveProviderRoot(provider: LspProviderSpec, workspacePath: string, filePath: string): Promise<string>;
93
+
94
+
95
+
96
+
97
+ export declare function checkProviderAvailability(provider: LspProviderSpec): {
98
+ available: boolean;
99
+ reason?: string;
100
+ command?: string;
101
+ };
102
+
103
+ export declare function buildLaunchSpec(provider: LspProviderSpec, ctx: {
104
+ workspacePath: string;
105
+ filePath: string;
106
+ }): Promise<LspLaunchSpec | null>;
107
+
108
+ export declare function listProviderSummaries(): Promise<LspProviderSummary[]>;
@@ -0,0 +1,2 @@
1
+ import{existsSync as u,readFileSync as j,promises as y}from"node:fs";import{createRequire as v}from"node:module";import t from"node:path";import{getBridgeDataHome as I}from"../../config.js";import{canonicalizePath as k}from"./uri-rewrite.js";const h=v(import.meta.url),_="typescript-language-server",M={id:"typescript",label:"TypeScript / JavaScript",kind:"builtin",languages:[{languageId:"typescript",extensions:[".ts",".tsx",".mts",".cts"]},{languageId:"javascript",extensions:[".js",".jsx",".mjs",".cjs"]}],npmPackage:_,args:["--stdio"],initializationOptions:{tsserver:{useSyntaxServer:"never"}},rootMarkers:["tsconfig.json","jsconfig.json","package.json"],priority:100,description:"\u968F bridge \u5185\u7F6E\uFF0C\u65E0\u9700\u5B89\u88C5\u3002"},A=[{id:"vue",label:"Vue",kind:"npm",languages:[{languageId:"vue",extensions:[".vue"]}],npmPackage:"@vue/language-server",npmVersion:"3.3.13",binPath:"bin/vue-language-server.js",args:["--stdio"],initializationOptions:{vue:{hybridMode:!1}},rootMarkers:["package.json","tsconfig.json","vite.config.ts","vite.config.js"],priority:90,description:"Vue \u5355\u6587\u4EF6\u7EC4\u4EF6\u8BED\u4E49\u8DF3\u8F6C\uFF08\u542B template \u5F15\u7528\uFF09\u3002"},{id:"python",label:"Python (Pyright)",kind:"npm",languages:[{languageId:"python",extensions:[".py",".pyi"]}],npmPackage:"pyright",npmVersion:"1.1.414",binPath:"langserver.index.js",args:["--stdio"],rootMarkers:["pyproject.toml","setup.py","setup.cfg","requirements.txt","pyrightconfig.json"],priority:90,description:"Pyright \u8BED\u8A00\u670D\u52A1\uFF0C\u7EAF JS \u5B9E\u73B0\uFF0C\u65E0\u9700\u672C\u673A Python\u3002"},{id:"json",label:"JSON",kind:"npm",languages:[{languageId:"json",extensions:[".json",".jsonc"]}],npmPackage:"vscode-langservers-extracted",npmVersion:"4.10.0",binPath:"bin/vscode-json-language-server",args:["--stdio"],rootMarkers:[".git"],priority:40,description:"JSON Schema \u6821\u9A8C\u4E0E\u8DF3\u8F6C\u3002"},{id:"css",label:"CSS / SCSS / Less",kind:"npm",languages:[{languageId:"css",extensions:[".css",".scss",".less",".sass",".pcss"]}],npmPackage:"vscode-langservers-extracted",npmVersion:"4.10.0",binPath:"bin/vscode-css-language-server",args:["--stdio"],rootMarkers:[".git"],priority:30,description:"CSS \u53D8\u91CF\u4E0E @import \u8DF3\u8F6C\u3002"},{id:"html",label:"HTML",kind:"npm",languages:[{languageId:"html",extensions:[".html",".htm"]}],npmPackage:"vscode-langservers-extracted",npmVersion:"4.10.0",binPath:"bin/vscode-html-language-server",args:["--stdio"],rootMarkers:[".git"],priority:30,description:"HTML \u7ED3\u6784\u4E0E\u8D44\u6E90\u5F15\u7528\u3002"},{id:"yaml",label:"YAML",kind:"npm",languages:[{languageId:"yaml",extensions:[".yaml",".yml"]}],npmPackage:"yaml-language-server",npmVersion:"2.0.0",binPath:"bin/yaml-language-server",args:["--stdio"],rootMarkers:[".git"],priority:30,description:"YAML Schema \u6821\u9A8C\u4E0E\u951A\u70B9\u8DF3\u8F6C\u3002"},{id:"bash",label:"Shell",kind:"npm",languages:[{languageId:"shellscript",extensions:[".sh",".bash",".zsh"]}],npmPackage:"bash-language-server",npmVersion:"5.8.1",binPath:"out/cli.js",args:["start"],rootMarkers:[".git"],priority:20,description:"Shell \u51FD\u6570\u4E0E\u53D8\u91CF\u8DF3\u8F6C\uFF08\u4F9D\u8D56\u672C\u673A shellcheck \u63D0\u4F9B\u8BCA\u65AD\uFF09\u3002"},{id:"dockerfile",label:"Dockerfile",kind:"npm",languages:[{languageId:"dockerfile",extensions:[".dockerfile"]}],npmPackage:"dockerfile-language-server-nodejs",npmVersion:"0.15.0",binPath:"bin/docker-langserver",args:["--stdio"],rootMarkers:[".git"],priority:20,description:"Dockerfile \u6307\u4EE4\u6821\u9A8C\uFF08\u6309\u6587\u4EF6\u540D\u8BC6\u522B\uFF0C\u89C1 resolveLanguageId\uFF09\u3002"},{id:"php",label:"PHP (Intelephense)",kind:"npm",languages:[{languageId:"php",extensions:[".php"]}],npmPackage:"intelephense",npmVersion:"1.18.5",binPath:"lib/intelephense.js",args:["--stdio"],rootMarkers:["composer.json"],priority:80,description:"Intelephense \u514D\u8D39\u7248\uFF1B\u5355\u6587\u4EF6\u4F53\u79EF\u8F83\u5927\uFF08\u7EA6 26MB\uFF09\u3002"}],L=[{id:"java",label:"Java (Eclipse JDT)",kind:"system",languages:[{languageId:"java",extensions:[".java"]}],args:[],systemBinaries:["jdtls","jdt-language-server"],systemArgs:["-data","{dataDir}"],rootMarkers:["pom.xml","build.gradle","build.gradle.kts","settings.gradle",".project"],priority:95,description:"\u9700\u8981\u672C\u673A\u5B89\u88C5 eclipse.jdt.ls\uFF08jdtls \u547D\u4EE4\uFF09\u3002"},{id:"go",label:"Go (gopls)",kind:"system",languages:[{languageId:"go",extensions:[".go"]}],args:[],systemBinaries:["gopls"],rootMarkers:["go.mod","go.work"],priority:95,description:"\u9700\u8981\u672C\u673A\u5B89\u88C5 gopls\uFF08go install golang.org/x/tools/gopls@latest\uFF09\u3002"},{id:"rust",label:"Rust (rust-analyzer)",kind:"system",languages:[{languageId:"rust",extensions:[".rs"]}],args:[],systemBinaries:["rust-analyzer"],rootMarkers:["Cargo.toml","rust-toolchain.toml"],priority:95,description:"\u9700\u8981\u672C\u673A\u5B89\u88C5 rust-analyzer\uFF08rustup component add rust-analyzer\uFF09\u3002"},{id:"clangd",label:"C / C++ (clangd)",kind:"system",languages:[{languageId:"c",extensions:[".c",".h"]},{languageId:"cpp",extensions:[".cpp",".cc",".cxx",".hpp",".hxx"]}],args:[],systemBinaries:["clangd"],rootMarkers:["compile_commands.json","CMakeLists.txt",".clangd"],priority:95,description:"\u9700\u8981\u672C\u673A\u5B89\u88C5 clangd\uFF08LLVM \u53D1\u884C\u7248\u81EA\u5E26\uFF09\u3002"},{id:"csharp",label:"C# (csharp-ls)",kind:"system",languages:[{languageId:"csharp",extensions:[".cs"]}],args:[],systemBinaries:["csharp-ls","omnisharp","OmniSharp"],rootMarkers:["*.sln","*.csproj","*.fsproj"],priority:95,description:"\u9700\u8981\u672C\u673A\u5B89\u88C5 csharp-ls \u6216 OmniSharp\u3002"},{id:"ruby",label:"Ruby (solargraph)",kind:"system",languages:[{languageId:"ruby",extensions:[".rb",".rake",".gemspec"]}],args:[],systemBinaries:["solargraph"],systemArgs:["stdio"],rootMarkers:["Gemfile",".solargraph.yml"],priority:70,description:"\u9700\u8981\u672C\u673A\u5B89\u88C5 solargraph\uFF08gem install solargraph\uFF09\u3002"}],p=[M,...A,...L].sort((e,n)=>n.priority-e.priority),E=new Map(p.map(e=>[e.id,e]));function R(){return String(process.env.AWS_LSP_SERVER_ROOT||"").trim()||t.join(I(),"lsp-servers")}function b(e){return t.join(R(),e)}const B={dockerfile:"dockerfile","dockerfile.dev":"dockerfile","dockerfile.prod":"dockerfile",makefile:"makefile"},d=new Map;for(const e of p)for(const n of e.languages)for(const s of n.extensions)d.has(s)||d.set(s,e);function U(){return p}function V(e){return E.get(String(e||"").trim().toLowerCase())??null}function q(e){const n=String(e||"").trim().toLowerCase();if(!n)return null;const s=n.split(/[\\/]/).pop()??"",a=B[s];if(a&&a==="dockerfile")return V("dockerfile");const i=s.lastIndexOf(".");if(i<0)return null;const r=s.slice(i);return d.get(r)??null}function X(e,n){const a=String(n||"").trim().toLowerCase().split(/[\\/]/).pop()??"";if(a==="dockerfile"||a.startsWith("dockerfile."))return"dockerfile";const i=a.lastIndexOf("."),r=i<0?"":a.slice(i);for(const o of e.languages)if(o.extensions.includes(r))return o.languageId;return e.languages[0]?.languageId??"plaintext"}function m(e,n){return e.replace(/\{(\w+)\}/g,(s,a)=>n[a]??"")}async function O(e){try{return await y.access(e),!0}catch{return!1}}async function N(e,n,s){const a=t.resolve(String(n||"").trim()||process.cwd()),i=t.isAbsolute(s)?t.resolve(s):t.resolve(a,s);let r=t.dirname(i);for(let o=0;o<12;o+=1){for(const l of e.rootMarkers){if(l.includes("*")){const P=t.basename(l).replace(/^\*/,"");try{if((await y.readdir(r)).some(x=>x.endsWith(P)))return r}catch{}continue}if(await O(t.join(r,l)))return r}const c=t.dirname(r);if(c===r)break;const g=t.relative(a,c);if(g.startsWith("..")||t.isAbsolute(g))break;r=c}return a}function C(e){if(!e.npmPackage)return null;try{const n=h.resolve(`${e.npmPackage}/package.json`),a=JSON.parse(j(n,"utf8")).bin;if(!a)return null;if(typeof a=="string")return t.join(t.dirname(n),a);const i=Object.values(a)[0];return i?t.join(t.dirname(n),i):null}catch{return null}}function T(e){if(!e.npmPackage||!e.binPath)return null;const n=t.join(b(e.id),"node_modules",...e.npmPackage.split("/")),s=t.join(n,e.binPath);return u(s)?s:null}const w={java:"AWS_LSP_JAVA_BIN",go:"AWS_LSP_GO_BIN",rust:"AWS_LSP_RUST_BIN",clangd:"AWS_LSP_CLANGD_BIN",csharp:"AWS_LSP_CSHARP_BIN",ruby:"AWS_LSP_RUBY_BIN"};function D(e){const n=String(process.env.PATH||"").split(t.delimiter).map(a=>a.trim()).filter(Boolean),s=process.platform==="win32"?String(process.env.PATHEXT||".EXE;.CMD;.BAT").split(";").map(a=>a.toLowerCase()):[""];for(const a of n)for(const i of e)for(const r of s){const o=t.join(a,`${i}${r}`);if(u(o))return o}return null}function z(e){const n=w[e.id];if(n){const s=String(process.env[n]||"").trim();if(s&&u(s))return s}return D(e.systemBinaries??[])}function S(e){if(e.kind==="builtin"){const s=C(e);return s?{available:!0,command:s}:{available:!1,reason:"\u5185\u7F6E\u8BED\u8A00\u670D\u52A1\u5165\u53E3\u89E3\u6790\u5931\u8D25"}}if(e.kind==="npm"){const s=T(e);return s?{available:!0,command:s}:{available:!1,reason:`\u5C1A\u672A\u5B89\u88C5\uFF08${e.npmPackage}@${e.npmVersion}\uFF09`}}const n=z(e);return n?{available:!0,command:n}:{available:!1,reason:`\u672A\u627E\u5230\u53EF\u6267\u884C\u6587\u4EF6\uFF1A${(e.systemBinaries??[]).join(" / ")}`}}async function K(e,n){const s=S(e);if(!s.available||!s.command)return null;const a=k(await N(e,n.workspacePath,n.filePath)),i=t.join(b(e.id),"data",W(a)),r={workspace:k(n.workspacePath),root:a,dataDir:i};let o,c;e.kind==="system"?(o=s.command,c=[...e.args,...e.systemArgs??[]].map(l=>m(l,r))):(o=process.execPath,c=[s.command,...e.args.map(l=>m(l,r))]);const g={};for(const[l,f]of Object.entries(e.env??{}))g[l]=m(f,r);if(e.id==="typescript")try{g.TSSERVER_PATH=h.resolve("typescript/lib/tsserver.js")}catch{}return{providerId:e.id,label:e.label,command:o,args:c,env:g,cwd:a,initializationOptions:e.initializationOptions}}function W(e){let n=0;for(let s=0;s<e.length;s+=1)n=n*31+e.charCodeAt(s)|0;return Math.abs(n).toString(36)}async function Q(){return p.map(e=>{const n=S(e);return{id:e.id,label:e.label,kind:e.kind,languages:e.languages.map(s=>s.languageId),extensions:e.languages.flatMap(s=>s.extensions),npmPackage:e.npmPackage,npmVersion:e.npmVersion,systemBinaries:e.systemBinaries,rootMarkers:e.rootMarkers,description:e.description,available:n.available,unavailableReason:n.reason}})}export{K as buildLaunchSpec,S as checkProviderAvailability,b as getLspServerDir,R as getLspServersRoot,V as getProvider,U as listAllProviders,Q as listProviderSummaries,X as resolveLanguageId,q as resolveProviderForFile,N as resolveProviderRoot};
2
+
@@ -0,0 +1,44 @@
1
+
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+ export interface UriRewriteRule {
17
+ from: string;
18
+ to: string;
19
+ }
20
+
21
+ export declare function normalizeUriPath(value: string): string;
22
+
23
+ export declare function pathToFileUri(absolutePath: string): string;
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+ export declare function buildUriRewriteRules(workspacePath: string, canonicalWorkspace: string, filePath?: string, canonicalFile?: string): UriRewriteRule[];
33
+
34
+
35
+
36
+
37
+ export declare function rewriteMessageUris<T>(message: T, rules: UriRewriteRule[]): T;
38
+
39
+ export declare function invertRules(rules: UriRewriteRule[]): UriRewriteRule[];
40
+
41
+
42
+
43
+
44
+ export declare function canonicalizePath(target: string): string;
@@ -0,0 +1,2 @@
1
+ import{realpathSync as m}from"node:fs";import l from"node:path";function c(r){let t=String(r||"").replace(/\\/g,"/");try{t=decodeURIComponent(t)}catch{}return t.startsWith("file://")&&(t=t.slice(7),/^\/[a-zA-Z]:\//.test(t)&&(t=t.slice(1))),t}function u(r){const e=String(r||"").replace(/\\/g,"/").replace(/[^A-Za-z0-9\-._~:/@!$&'()*+,;=]/g,o=>encodeURIComponent(o));return e.startsWith("/")?`file://${e}`:`file:///${e}`}function h(r,t){return t?r.toLowerCase().startsWith(t.toLowerCase()):!1}function C(r,t,e,o){const n=[],i=c(r).replace(/\/+$/,""),a=c(t).replace(/\/+$/,"");if(i&&a&&i.toLowerCase()!==a.toLowerCase()&&n.push({from:i,to:a}),e&&o){const s=c(e),f=c(o);s&&f&&s.toLowerCase()!==f.toLowerCase()&&n.push({from:s,to:f})}return n.sort((s,f)=>f.from.length-s.from.length),n}function g(r,t){if(!r.startsWith("file://"))return r;const e=c(r);for(const o of t)if(h(e,o.from)){const n=e.slice(o.from.length);if(n===""||n.startsWith("/"))return u(o.to+n)}return r}function p(r,t,e){if(e>12)return r;if(typeof r=="string")return g(r,t);if(Array.isArray(r))return r.map(o=>p(o,t,e+1));if(r!==null&&typeof r=="object"){const o={};for(const[n,i]of Object.entries(r))o[n]=p(i,t,e+1);return o}return r}function W(r,t){return t.length===0?r:p(r,t,0)}function d(r){return r.map(t=>({from:t.to,to:t.from})).sort((t,e)=>e.from.length-t.from.length)}function U(r){const t=l.resolve(String(r||"").trim());if(process.platform!=="win32")return t;try{return m.native(t)}catch{return t}}export{C as buildUriRewriteRules,U as canonicalizePath,d as invertRules,c as normalizeUriPath,u as pathToFileUri,W as rewriteMessageUris};
2
+
@@ -1,6 +1,9 @@
1
1
 
2
2
  export declare function encodeLspStdioFrame(jsonText: string): Buffer;
3
3
 
4
+
5
+
6
+
4
7
  export declare class LspStdioFrameReader {
5
8
  private buffer;
6
9
 
@@ -13,6 +16,9 @@ export declare class LspStdioFrameReader {
13
16
  reset(): void;
14
17
  }
15
18
 
19
+
20
+
21
+
16
22
  export declare function resolveTypeScriptLanguageServerEntry(): string;
17
23
 
18
24
  export declare function resolveTsserverPath(): string;
@@ -27,20 +33,51 @@ export interface LspProcessBridgeCallbacks {
27
33
  onError?: (error: Error) => void;
28
34
  }
29
35
 
36
+ export interface LspLaunchCommand {
37
+ command: string;
38
+ args: string[];
39
+ env?: Record<string, string>;
40
+ cwd?: string;
41
+ }
42
+ export interface LspProcessBridgeOptions {
43
+
44
+ workspacePath: string;
45
+
46
+ language: string;
47
+
48
+
49
+
50
+
51
+ launch?: LspLaunchCommand;
52
+
53
+ providerId?: string;
54
+ }
55
+
56
+
57
+
58
+
59
+
60
+
61
+
30
62
  export declare class LspProcessBridge {
31
63
  readonly callbacks: LspProcessBridgeCallbacks;
32
64
  readonly workspacePath: string;
33
65
  readonly language: string;
66
+ readonly providerId: string;
67
+ private readonly launch?;
34
68
  private child;
35
69
  private readonly reader;
36
70
  private disposed;
37
- constructor(options: {
38
- workspacePath: string;
39
- language: string;
40
- }, callbacks: LspProcessBridgeCallbacks);
71
+ private readonly stderrTail;
72
+ constructor(options: LspProcessBridgeOptions, callbacks: LspProcessBridgeCallbacks);
41
73
  get running(): boolean;
42
74
 
75
+ getStderrTail(): string[];
76
+
77
+ private resolveLaunchCommand;
78
+
43
79
  start(): void;
80
+ private appendStderrTail;
44
81
 
45
82
  send(message: unknown): void;
46
83
 
@@ -1,6 +1,6 @@
1
- import{spawn as f}from"node:child_process";import d from"node:fs";import{createRequire as p}from"node:module";import c from"node:path";import{createLogger as u}from"../utils/logger.js";const i=u("lsp-stdio-bridge"),l=p(import.meta.url);function g(n){const e=Buffer.from(n,"utf8"),t=`Content-Length: ${e.length}\r
1
+ import{spawn as d}from"node:child_process";import f from"node:fs";import{createRequire as p}from"node:module";import c from"node:path";import{createLogger as u}from"../utils/logger.js";const i=u("lsp-stdio-bridge"),l=p(import.meta.url);function g(n){const t=Buffer.from(n,"utf8"),e=`Content-Length: ${t.length}\r
2
2
  \r
3
- `;return Buffer.concat([Buffer.from(t,"ascii"),e])}class a{constructor(){this.buffer=Buffer.alloc(0),this.headerDone=!1,this.contentLength=0}push(e){this.buffer=this.buffer.length===0?e:Buffer.concat([this.buffer,e]);const t=[];for(;;){if(!this.headerDone){const s=this.buffer.indexOf(`\r
3
+ `;return Buffer.concat([Buffer.from(e,"ascii"),t])}class h{constructor(){this.buffer=Buffer.alloc(0),this.headerDone=!1,this.contentLength=0}push(t){this.buffer=this.buffer.length===0?t:Buffer.concat([this.buffer,t]);const e=[];for(;;){if(!this.headerDone){const r=this.buffer.indexOf(`\r
4
4
  \r
5
- `);if(s===-1){if(this.buffer.length>a.MAX_HEADER_BYTES)throw new Error(`lsp stdio: header too large (${this.buffer.length} bytes), stream is malformed`);break}const o=this.buffer.subarray(0,s).toString("ascii"),h=/^Content-Length:\s*(\d+)/i.exec(o);if(!h)throw new Error(`lsp stdio: invalid header: ${o.slice(0,120)}`);if(this.contentLength=parseInt(h[1],10),this.contentLength<0||this.contentLength>512*1024*1024)throw new Error(`lsp stdio: implausible content length ${this.contentLength}`);this.buffer=this.buffer.subarray(s+4),this.headerDone=!0}if(this.buffer.length<this.contentLength)break;const r=this.buffer.subarray(0,this.contentLength).toString("utf8");this.buffer=this.buffer.subarray(this.contentLength),this.headerDone=!1,this.contentLength=0,t.push(r)}return t}reset(){this.buffer=Buffer.alloc(0),this.headerDone=!1,this.contentLength=0}}a.MAX_HEADER_BYTES=64*1024;function b(){const n=l.resolve("typescript-language-server/package.json"),e=JSON.parse(d.readFileSync(n,"utf8"));if(!e.bin)throw new Error("typescript-language-server package.json has no bin entry");const t=typeof e.bin=="string"?e.bin:Object.values(e.bin)[0];return c.join(c.dirname(n),t)}function m(){return l.resolve("typescript/lib/tsserver.js")}class L{constructor(e,t){this.callbacks=t,this.child=null,this.reader=new a,this.disposed=!1,this.workspacePath=e.workspacePath,this.language=e.language}get running(){return this.child!==null&&this.child.exitCode===null&&this.child.signalCode===null}start(){if(this.disposed)return;let e;try{e=b()}catch(t){i.warn(`[lsp-stdio] \u89E3\u6790 typescript-language-server \u5165\u53E3\u5931\u8D25: ${t.message}`),this.callbacks.onError?.(t);return}try{const t=f(process.execPath,[e,"--stdio"],{cwd:this.workspacePath,env:{...process.env,TSSERVER_PATH:m()},stdio:["pipe","pipe","pipe"]});this.child=t,t.on("error",r=>{i.warn(`[lsp-stdio] \u8BED\u8A00\u670D\u52A1\u8FDB\u7A0B error: ${r.message}`),this.callbacks.onError?.(r)}),t.on("exit",(r,s)=>{this.child===t&&(this.child=null),i.info(`[lsp-stdio] \u8BED\u8A00\u670D\u52A1\u8FDB\u7A0B\u9000\u51FA: code=${r}, signal=${String(s)}`),this.callbacks.onExit?.(r,s)}),t.stdout?.on("data",r=>{if(!this.disposed)try{for(const s of this.reader.push(r))try{this.callbacks.onMessage(JSON.parse(s))}catch(o){i.warn(`[lsp-stdio] \u65E0\u6CD5\u89E3\u6790 server \u6D88\u606F: ${s.slice(0,200)} err=${o.message}`)}}catch(s){i.warn(`[lsp-stdio] \u89E3\u6790 server \u8F93\u51FA\u5931\u8D25: ${s.message}`),this.callbacks.onError?.(s)}}),t.stderr?.on("data",r=>{this.disposed||this.callbacks.onStderr?.(r.toString("utf8"))}),i.info(`[lsp-stdio] \u8BED\u8A00\u670D\u52A1\u8FDB\u7A0B\u5DF2\u542F\u52A8 workspace=${this.workspacePath} pid=${t.pid}`)}catch(t){i.warn(`[lsp-stdio] \u542F\u52A8\u8BED\u8A00\u670D\u52A1\u8FDB\u7A0B\u5931\u8D25: ${t.message}`),this.callbacks.onError?.(t)}}send(e){const t=this.child;if(!t||!t.stdin?.writable){i.warn("[lsp-stdio] \u8FDB\u7A0B\u672A\u5C31\u7EEA\uFF0C\u4E22\u5F03\u6D88\u606F");return}t.stdin.write(g(JSON.stringify(e)))}dispose(){if(this.disposed)return;this.disposed=!0;const e=this.child;this.child=null,this.reader.reset(),e&&e.exitCode===null&&e.signalCode===null&&(i.info(`[lsp-stdio] \u7EC8\u6B62\u8BED\u8A00\u670D\u52A1\u8FDB\u7A0B pid=${e.pid}`),e.kill())}}export{L as LspProcessBridge,a as LspStdioFrameReader,g as encodeLspStdioFrame,m as resolveTsserverPath,b as resolveTypeScriptLanguageServerEntry};
5
+ `);if(r===-1){if(this.buffer.length>h.MAX_HEADER_BYTES)throw new Error(`lsp stdio: header too large (${this.buffer.length} bytes), stream is malformed`);break}const o=this.buffer.subarray(0,r).toString("ascii"),a=/^Content-Length:\s*(\d+)/i.exec(o);if(!a)throw new Error(`lsp stdio: invalid header: ${o.slice(0,120)}`);if(this.contentLength=parseInt(a[1],10),this.contentLength<0||this.contentLength>512*1024*1024)throw new Error(`lsp stdio: implausible content length ${this.contentLength}`);this.buffer=this.buffer.subarray(r+4),this.headerDone=!0}if(this.buffer.length<this.contentLength)break;const s=this.buffer.subarray(0,this.contentLength).toString("utf8");this.buffer=this.buffer.subarray(this.contentLength),this.headerDone=!1,this.contentLength=0,e.push(s)}return e}reset(){this.buffer=Buffer.alloc(0),this.headerDone=!1,this.contentLength=0}}h.MAX_HEADER_BYTES=64*1024;function b(){const n=l.resolve("typescript-language-server/package.json"),t=JSON.parse(f.readFileSync(n,"utf8"));if(!t.bin)throw new Error("typescript-language-server package.json has no bin entry");const e=typeof t.bin=="string"?t.bin:Object.values(t.bin)[0];return c.join(c.dirname(n),e)}function m(){return l.resolve("typescript/lib/tsserver.js")}const v=40;class E{constructor(t,e){this.callbacks=e,this.child=null,this.reader=new h,this.disposed=!1,this.stderrTail=[],this.workspacePath=t.workspacePath,this.language=t.language,this.providerId=t.providerId??"typescript",this.launch=t.launch}get running(){return this.child!==null&&this.child.exitCode===null&&this.child.signalCode===null}getStderrTail(){return[...this.stderrTail]}resolveLaunchCommand(){if(this.launch)return this.launch;const t=b();return{command:process.execPath,args:[t,"--stdio"],env:{TSSERVER_PATH:m()},cwd:this.workspacePath}}start(){if(this.disposed)return;let t;try{t=this.resolveLaunchCommand()}catch(e){i.warn(`[lsp-stdio] \u89E3\u6790\u8BED\u8A00\u670D\u52A1\u5165\u53E3\u5931\u8D25 provider=${this.providerId}: ${e.message}`),this.callbacks.onError?.(e);return}try{const e=d(t.command,t.args,{cwd:t.cwd||this.workspacePath,env:{...process.env,...t.env??{}},stdio:["pipe","pipe","pipe"]});this.child=e,e.on("error",s=>{i.warn(`[lsp-stdio] \u8BED\u8A00\u670D\u52A1\u8FDB\u7A0B error provider=${this.providerId}: ${s.message}`),this.callbacks.onError?.(s)}),e.on("exit",(s,r)=>{this.child===e&&(this.child=null),i.info(`[lsp-stdio] \u8BED\u8A00\u670D\u52A1\u8FDB\u7A0B\u9000\u51FA provider=${this.providerId}: code=${s}, signal=${String(r)}`),this.callbacks.onExit?.(s,r)}),e.stdout?.on("data",s=>{if(!this.disposed)try{for(const r of this.reader.push(s))try{this.callbacks.onMessage(JSON.parse(r))}catch(o){i.warn(`[lsp-stdio] \u65E0\u6CD5\u89E3\u6790 server \u6D88\u606F: ${r.slice(0,200)} err=${o.message}`)}}catch(r){i.warn(`[lsp-stdio] \u89E3\u6790 server \u8F93\u51FA\u5931\u8D25: ${r.message}`),this.callbacks.onError?.(r)}}),e.stderr?.on("data",s=>{if(this.disposed)return;const r=s.toString("utf8");this.appendStderrTail(r),this.callbacks.onStderr?.(r)}),i.info(`[lsp-stdio] \u8BED\u8A00\u670D\u52A1\u8FDB\u7A0B\u5DF2\u542F\u52A8 provider=${this.providerId} workspace=${this.workspacePath} pid=${e.pid} cmd=${t.command}`)}catch(e){i.warn(`[lsp-stdio] \u542F\u52A8\u8BED\u8A00\u670D\u52A1\u8FDB\u7A0B\u5931\u8D25 provider=${this.providerId}: ${e.message}`),this.callbacks.onError?.(e)}}appendStderrTail(t){for(const e of t.split(/\r?\n/)){const s=e.trim();s&&this.stderrTail.push(s)}for(;this.stderrTail.length>v;)this.stderrTail.shift()}send(t){const e=this.child;if(!e||!e.stdin?.writable){i.warn("[lsp-stdio] \u8FDB\u7A0B\u672A\u5C31\u7EEA\uFF0C\u4E22\u5F03\u6D88\u606F");return}e.stdin.write(g(JSON.stringify(t)))}dispose(){if(this.disposed)return;this.disposed=!0;const t=this.child;this.child=null,this.reader.reset(),t&&t.exitCode===null&&t.signalCode===null&&(i.info(`[lsp-stdio] \u7EC8\u6B62\u8BED\u8A00\u670D\u52A1\u8FDB\u7A0B pid=${t.pid}`),t.kill())}}export{E as LspProcessBridge,h as LspStdioFrameReader,g as encodeLspStdioFrame,m as resolveTsserverPath,b as resolveTypeScriptLanguageServerEntry};
6
6
 
@@ -1,4 +1,17 @@
1
1
 
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+ import { type UserScope } from "./user-scope.js";
2
15
  export interface DeployedMcpEntry {
3
16
  name: string;
4
17
  fileName: string;
@@ -34,16 +47,30 @@ export interface McpDeploySpec {
34
47
  env?: Record<string, string>;
35
48
  headers?: Record<string, string>;
36
49
 
50
+
51
+
52
+
53
+
37
54
  collapsed?: boolean;
38
55
 
39
56
  description?: string;
40
57
  }
41
58
  export declare class McpDeployManager {
59
+ private readonly scope;
42
60
  private readonly rootDir;
43
- private static _instance;
44
- static getInstance(): McpDeployManager;
61
+ private readonly packagesRootDir;
62
+ private static instances;
63
+
64
+
65
+
66
+
67
+ static forScope(scope: UserScope): McpDeployManager;
45
68
  private constructor();
46
69
 
70
+
71
+
72
+
73
+
47
74
  private static isValidName;
48
75
  private manifestFile;
49
76
  private specFile;
@@ -60,6 +87,9 @@ export declare class McpDeployManager {
60
87
  private packagesDir;
61
88
  private packagesManifestFile;
62
89
 
90
+
91
+
92
+
63
93
  packageDir(name: string): string;
64
94
 
65
95
  isPackageHealthy(name: string): boolean;
@@ -68,6 +98,12 @@ export declare class McpDeployManager {
68
98
 
69
99
  private packageUpToDate;
70
100
 
101
+
102
+
103
+
104
+
105
+
106
+
71
107
  ensureMcpPackage(name: string, ref: McpPackageRef): Promise<McpDeployResult>;
72
108
 
73
109
  private removeMcpPackage;
@@ -76,9 +112,14 @@ export declare class McpDeployManager {
76
112
 
77
113
  getSpec(name: string): McpDeploySpec | null;
78
114
 
115
+
116
+
117
+
118
+
79
119
  resolveEnabledMcp(agentId: string, globalMcpServers: Record<string, unknown>): Record<string, unknown>;
80
120
 
81
121
  deployedDefaultEnabled(): Record<string, boolean>;
82
122
  }
83
- export declare const mcpDeployManager: McpDeployManager;
84
- export declare const reconcileMcpDefaultsFromDeployed: () => number;
123
+
124
+ export declare function getMcpDeployManager(scope: UserScope): McpDeployManager;
125
+ export declare const reconcileMcpDefaultsFromDeployed: (scope: UserScope) => number;
@@ -1,5 +1,5 @@
1
- import{existsSync as f,mkdirSync as p,readFileSync as d,renameSync as y,rmSync as h,writeFileSync as M}from"node:fs";import s from"node:path";import{getBridgeTemplateMcpDir as v,getBridgeTemplateMcpPackagesDir as $}from"../config.js";import{downloadPluginZip as N}from"../utils/file-utils.js";import{createLogger as j}from"../utils/logger.js";import{setDeployedDefaultsProvider as C,reconcileDefaultsFromDeployed as F}from"./capability-config.js";import{isCapabilityEnabled as P}from"./instance-features.js";import{extractMcpPackageZip as E,runMcpPackageInstall as b}from"./mcp-package.js";const g=j("mcp-deploy"),O=1;class c{static getInstance(){return this._instance||(this._instance=new c(s.join(v(),"deployed"))),this._instance}constructor(e){this.rootDir=e}static isValidName(e){return!e||e==="."||e===".."||e!==s.basename(e)?!1:/^[a-zA-Z0-9_.-]+$/.test(e)}manifestFile(){return s.join(this.rootDir,"manifest.json")}specFile(e){const r=s.join(this.rootDir,`${e}.json`),t=s.resolve(this.rootDir);if(s.resolve(r)!==s.join(t,`${e}.json`))throw new Error(`MCP \u6A21\u677F\u6587\u4EF6\u8D8A\u51FA\u90E8\u7F72\u533A: ${e}`);return r}isHealthy(e){return f(this.specFile(e))}readManifest(){try{const e=JSON.parse(d(this.manifestFile(),"utf8"));return Array.isArray(e.servers)?e.servers.filter(r=>r&&r.name):[]}catch{return[]}}writeManifest(e){p(this.rootDir,{recursive:!0}),M(this.manifestFile(),`${JSON.stringify({version:O,servers:e},null,2)}
2
- `,"utf8")}saveMcp(e,r,t=!0,i){if(!c.isValidName(e))return{ok:!1,error:`MCP \u540D\u975E\u6CD5: ${JSON.stringify(e)}`};p(this.rootDir,{recursive:!0});try{M(this.specFile(e),`${JSON.stringify(r,null,2)}
3
- `,"utf8")}catch(n){return{ok:!1,error:`MCP \u6A21\u677F\u5199\u5165\u5931\u8D25: ${n instanceof Error?n.message:String(n)}`}}const a=this.readManifest().filter(n=>n.name!==e);return a.push({name:e,fileName:`${e}.json`,defaultEnabled:t,sha256:i}),this.writeManifest(a),g.info("[mcp] MCP \u6A21\u677F\u5DF2\u90E8\u7F72\u5230 bridge: %s",e),{ok:!0,name:e}}removeMcp(e){if(!c.isValidName(e))return{ok:!1,error:"name \u975E\u6CD5"};const r=this.readManifest().filter(t=>t.name!==e);this.writeManifest(r);try{h(this.specFile(e),{force:!0})}catch(t){return{ok:!1,error:`\u6A21\u677F\u6587\u4EF6\u6E05\u7406\u5931\u8D25: ${t instanceof Error?t.message:String(t)}`}}return this.removeMcpPackage(e),g.info("[mcp] MCP \u6A21\u677F\u5DF2\u4ECE bridge \u79FB\u9664\u90E8\u7F72: %s",e),{ok:!0}}packagesDir(){return $()}packagesManifestFile(){return s.join(this.packagesDir(),"manifest.json")}packageDir(e){if(!c.isValidName(e))throw new Error(`\u975E\u6CD5 MCP \u540D: ${JSON.stringify(e)}`);const r=s.join(this.packagesDir(),e),t=s.resolve(this.packagesDir());if(s.resolve(r)!==s.join(t,e))throw new Error(`MCP \u5305\u76EE\u5F55\u8D8A\u51FA\u90E8\u7F72\u533A: ${e}`);return r}isPackageHealthy(e){try{return f(s.join(this.packageDir(e),"mcp.json"))}catch{return!1}}readPackagesManifest(){try{const e=JSON.parse(d(this.packagesManifestFile(),"utf8"));return Array.isArray(e.packages)?e.packages.filter(r=>r&&r.name):[]}catch{return[]}}writePackagesManifest(e){p(this.packagesDir(),{recursive:!0}),M(this.packagesManifestFile(),`${JSON.stringify({version:1,packages:e},null,2)}
4
- `,"utf8")}packageUpToDate(e,r){return this.isPackageHealthy(e)?r?this.readPackagesManifest().find(i=>i.name===e)?.packageSha256===r:!0:!1}async ensureMcpPackage(e,r){if(!c.isValidName(e))return{ok:!1,error:`MCP \u540D\u975E\u6CD5: ${JSON.stringify(e)}`};const t=String(r?.packageUrl??"").trim();if(!t)return{ok:!1,error:"packageUrl \u4E3A\u7A7A"};if(this.packageUpToDate(e,r.packageSha256))return{ok:!0,name:e};const i=s.join(this.packagesDir(),"tmp",`pull-${e}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`);try{p(i,{recursive:!0});const a=r.fileName?.trim()||`${e}.zip`,n=await N({downloadUrl:t,fileName:a,sha256:r.packageSha256},i);if(!n)return{ok:!1,error:`\u4E0B\u8F7D MCP \u5305\u65E0\u54CD\u5E94: ${t}`};const S=d(n.outputPath),w=s.join(i,"extract"),o=await E(S,w);await b(o.packageDir,o.manifest),p(this.packagesDir(),{recursive:!0});const l=this.packageDir(e),u=s.join(this.packagesDir(),`.old-${e}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`);let k=!1;f(l)&&(y(l,u),k=!0);try{y(o.packageDir,l)}catch(m){throw k&&f(u)&&(h(l,{recursive:!0,force:!0}),y(u,l)),m}k&&f(u)&&h(u,{recursive:!0,force:!0});const D=this.readPackagesManifest().filter(m=>m.name!==e);return D.push({name:e,fileName:n.fileName,packageSha256:r.packageSha256,dependencies:o.manifest.dependencies}),this.writePackagesManifest(D),g.info("[mcp] \u5305\u578B MCP \u5DF2\u90E8\u7F72\u5230 bridge: %s\uFF08%d \u4E2A\u6587\u4EF6, dependencies=%s\uFF09",e,o.fileCount,o.manifest.dependencies),{ok:!0,name:e}}catch(a){const n=a instanceof Error?a.message:String(a);return g.warn("[mcp] \u5305\u578B MCP \u90E8\u7F72\u5931\u8D25\uFF08%s\uFF09: %s",e,n),{ok:!1,error:`MCP \u5305\u90E8\u7F72\u5931\u8D25: ${n}`}}finally{try{h(i,{recursive:!0,force:!0})}catch{}}}removeMcpPackage(e){try{const t=this.packageDir(e);f(t)&&h(t,{recursive:!0,force:!0})}catch(t){g.warn("[mcp] MCP \u5305\u76EE\u5F55\u6E05\u7406\u5931\u8D25\uFF08%s\uFF09: %s",e,t instanceof Error?t.message:String(t))}const r=this.readPackagesManifest().filter(t=>t.name!==e);try{this.writePackagesManifest(r)}catch{}}listDeployed(){return this.readManifest().map(e=>({...e,deployed:this.isHealthy(e.name)}))}getSpec(e){if(!this.isHealthy(e))return null;try{return JSON.parse(d(this.specFile(e),"utf8"))}catch{return null}}resolveEnabledMcp(e,r){const t={};for(const i of this.readManifest()){if(!P(e,"mcp",i.name)||!this.isHealthy(i.name))continue;const a=this.getSpec(i.name);a&&(t[i.name]={...a,type:a.type||"stdio"})}for(const[i,a]of Object.entries(r))P(e,"mcp",i)&&(t[i]||(t[i]=a));return t}deployedDefaultEnabled(){const e={};for(const r of this.readManifest())e[r.name]=r.defaultEnabled;return e}}c._instance=null;const J=c.getInstance();C("mcp",()=>J.deployedDefaultEnabled());const z=()=>F("mcp");export{c as McpDeployManager,J as mcpDeployManager,z as reconcileMcpDefaultsFromDeployed};
1
+ import{existsSync as l,mkdirSync as h,readFileSync as d,renameSync as M,rmSync as g,writeFileSync as D}from"node:fs";import s from"node:path";import{downloadPluginZip as $}from"../utils/file-utils.js";import{createLogger as N}from"../utils/logger.js";import{setDeployedDefaultsProvider as j,reconcileDefaultsFromDeployed as C}from"./capability-config.js";import{isCapabilityEnabled as P}from"./instance-features.js";import{extractMcpPackageZip as F,runMcpPackageInstall as E}from"./mcp-package.js";import{getUserMcpDeployedDir as b,getUserMcpPackagesDir as O}from"./user-scope.js";const k=N("mcp-deploy"),J=1;class o{static forScope(e){const r=b(e),t=s.resolve(r);let i=this.instances.get(t);return i||(i=new o(e,r,O(e)),this.instances.set(t,i)),i}constructor(e,r,t){this.scope=e,this.rootDir=r,this.packagesRootDir=t}static isValidName(e){return!e||e==="."||e===".."||e!==s.basename(e)?!1:/^[a-zA-Z0-9_.-]+$/.test(e)}manifestFile(){return s.join(this.rootDir,"manifest.json")}specFile(e){const r=s.join(this.rootDir,`${e}.json`),t=s.resolve(this.rootDir);if(s.resolve(r)!==s.join(t,`${e}.json`))throw new Error(`MCP \u6A21\u677F\u6587\u4EF6\u8D8A\u51FA\u90E8\u7F72\u533A: ${e}`);return r}isHealthy(e){return l(this.specFile(e))}readManifest(){try{const e=JSON.parse(d(this.manifestFile(),"utf8"));return Array.isArray(e.servers)?e.servers.filter(r=>r&&r.name):[]}catch{return[]}}writeManifest(e){h(this.rootDir,{recursive:!0}),D(this.manifestFile(),`${JSON.stringify({version:J,servers:e},null,2)}
2
+ `,"utf8")}saveMcp(e,r,t=!0,i){if(!o.isValidName(e))return{ok:!1,error:`MCP \u540D\u975E\u6CD5: ${JSON.stringify(e)}`};h(this.rootDir,{recursive:!0});try{D(this.specFile(e),`${JSON.stringify(r,null,2)}
3
+ `,"utf8")}catch(n){return{ok:!1,error:`MCP \u6A21\u677F\u5199\u5165\u5931\u8D25: ${n instanceof Error?n.message:String(n)}`}}const a=this.readManifest().filter(n=>n.name!==e);return a.push({name:e,fileName:`${e}.json`,defaultEnabled:t,sha256:i}),this.writeManifest(a),k.info("[mcp] MCP \u6A21\u677F\u5DF2\u90E8\u7F72\u5230 bridge: %s",e),{ok:!0,name:e}}removeMcp(e){if(!o.isValidName(e))return{ok:!1,error:"name \u975E\u6CD5"};const r=this.readManifest().filter(t=>t.name!==e);this.writeManifest(r);try{g(this.specFile(e),{force:!0})}catch(t){return{ok:!1,error:`\u6A21\u677F\u6587\u4EF6\u6E05\u7406\u5931\u8D25: ${t instanceof Error?t.message:String(t)}`}}return this.removeMcpPackage(e),k.info("[mcp] MCP \u6A21\u677F\u5DF2\u4ECE bridge \u79FB\u9664\u90E8\u7F72: %s",e),{ok:!0}}packagesDir(){return this.packagesRootDir}packagesManifestFile(){return s.join(this.packagesDir(),"manifest.json")}packageDir(e){if(!o.isValidName(e))throw new Error(`\u975E\u6CD5 MCP \u540D: ${JSON.stringify(e)}`);const r=s.join(this.packagesDir(),e),t=s.resolve(this.packagesDir());if(s.resolve(r)!==s.join(t,e))throw new Error(`MCP \u5305\u76EE\u5F55\u8D8A\u51FA\u90E8\u7F72\u533A: ${e}`);return r}isPackageHealthy(e){try{return l(s.join(this.packageDir(e),"mcp.json"))}catch{return!1}}readPackagesManifest(){try{const e=JSON.parse(d(this.packagesManifestFile(),"utf8"));return Array.isArray(e.packages)?e.packages.filter(r=>r&&r.name):[]}catch{return[]}}writePackagesManifest(e){h(this.packagesDir(),{recursive:!0}),D(this.packagesManifestFile(),`${JSON.stringify({version:1,packages:e},null,2)}
4
+ `,"utf8")}packageUpToDate(e,r){return this.isPackageHealthy(e)?r?this.readPackagesManifest().find(i=>i.name===e)?.packageSha256===r:!0:!1}async ensureMcpPackage(e,r){if(!o.isValidName(e))return{ok:!1,error:`MCP \u540D\u975E\u6CD5: ${JSON.stringify(e)}`};const t=String(r?.packageUrl??"").trim();if(!t)return{ok:!1,error:"packageUrl \u4E3A\u7A7A"};if(this.packageUpToDate(e,r.packageSha256))return{ok:!0,name:e};const i=s.join(this.packagesDir(),"tmp",`pull-${e}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`);try{h(i,{recursive:!0});const a=r.fileName?.trim()||`${e}.zip`,n=await $({downloadUrl:t,fileName:a,sha256:r.packageSha256},i);if(!n)return{ok:!1,error:`\u4E0B\u8F7D MCP \u5305\u65E0\u54CD\u5E94: ${t}`};const w=d(n.outputPath),v=s.join(i,"extract"),f=await F(w,v);await E(f.packageDir,f.manifest),h(this.packagesDir(),{recursive:!0});const u=this.packageDir(e),p=s.join(this.packagesDir(),`.old-${e}-${Date.now()}-${Math.random().toString(36).slice(2,8)}`);let y=!1;l(u)&&(M(u,p),y=!0);try{M(f.packageDir,u)}catch(m){throw y&&l(p)&&(g(u,{recursive:!0,force:!0}),M(p,u)),m}y&&l(p)&&g(p,{recursive:!0,force:!0});const S=this.readPackagesManifest().filter(m=>m.name!==e);return S.push({name:e,fileName:n.fileName,packageSha256:r.packageSha256,dependencies:f.manifest.dependencies}),this.writePackagesManifest(S),k.info("[mcp] \u5305\u578B MCP \u5DF2\u90E8\u7F72\u5230 bridge: %s\uFF08%d \u4E2A\u6587\u4EF6, dependencies=%s\uFF09",e,f.fileCount,f.manifest.dependencies),{ok:!0,name:e}}catch(a){const n=a instanceof Error?a.message:String(a);return k.warn("[mcp] \u5305\u578B MCP \u90E8\u7F72\u5931\u8D25\uFF08%s\uFF09: %s",e,n),{ok:!1,error:`MCP \u5305\u90E8\u7F72\u5931\u8D25: ${n}`}}finally{try{g(i,{recursive:!0,force:!0})}catch{}}}removeMcpPackage(e){try{const t=this.packageDir(e);l(t)&&g(t,{recursive:!0,force:!0})}catch(t){k.warn("[mcp] MCP \u5305\u76EE\u5F55\u6E05\u7406\u5931\u8D25\uFF08%s\uFF09: %s",e,t instanceof Error?t.message:String(t))}const r=this.readPackagesManifest().filter(t=>t.name!==e);try{this.writePackagesManifest(r)}catch{}}listDeployed(){return this.readManifest().map(e=>({...e,deployed:this.isHealthy(e.name)}))}getSpec(e){if(!this.isHealthy(e))return null;try{return JSON.parse(d(this.specFile(e),"utf8"))}catch{return null}}resolveEnabledMcp(e,r){const t={};for(const i of this.readManifest()){if(!P(e,"mcp",i.name)||!this.isHealthy(i.name))continue;const a=this.getSpec(i.name);a&&(t[i.name]={...a,type:a.type||"stdio"})}for(const[i,a]of Object.entries(r))P(e,"mcp",i)&&(t[i]||(t[i]=a));return t}deployedDefaultEnabled(){const e={};for(const r of this.readManifest())e[r.name]=r.defaultEnabled;return e}}o.instances=new Map;function Z(c){return o.forScope(c)}j("mcp",c=>c?o.forScope(c).deployedDefaultEnabled():{});const B=c=>C(c,"mcp");export{o as McpDeployManager,Z as getMcpDeployManager,B as reconcileMcpDefaultsFromDeployed};
5
5
 
@@ -4,10 +4,30 @@ export declare function isStdioMcpSpec(spec: unknown): boolean;
4
4
  export declare const MCP_PACKAGE_DIR_PLACEHOLDER = "${MCP_PACKAGE_DIR}";
5
5
  export declare const MCP_NODE_PLACEHOLDER = "${MCP_NODE}";
6
6
 
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
7
17
  export declare function expandMcpPackagePlaceholders(record: Record<string, unknown>, packageDir?: string, nodePath?: string): boolean;
8
18
 
9
19
  export declare function isBuiltinMcpName(name: string): boolean;
10
20
 
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
11
31
  export declare const AGENT_META_ENV_KEYS: {
12
32
  readonly agentId: "AWS_AGENT_ID";
13
33
  readonly roleId: "AWS_AGENT_ROLE_ID";
@@ -21,16 +41,48 @@ export interface AgentMetaEnvInput {
21
41
  projectId?: string;
22
42
  }
23
43
 
44
+
45
+
46
+
24
47
  export declare function buildAgentMetaEnv(meta: AgentMetaEnvInput | undefined): Record<string, string>;
25
48
 
49
+
50
+
51
+
52
+
53
+
54
+
26
55
  export declare function expandEnvPlaceholders(text: string, env: Record<string, string>): string;
27
56
  export interface InjectEnvOptions {
28
57
 
58
+
59
+
60
+
29
61
  overwriteExisting?: boolean;
30
62
 
63
+
64
+
65
+
66
+
31
67
  resolvePackageDir?: (name: string) => string | undefined;
32
68
 
69
+
70
+
71
+
72
+
33
73
  agentMeta?: AgentMetaEnvInput;
34
74
  }
35
75
 
76
+
77
+
78
+
79
+
80
+
81
+
82
+
83
+
84
+
85
+
86
+
87
+
36
88
  export declare function injectEffectiveEnvIntoMcpServers(servers: Record<string, unknown>, effectiveEnv: Record<string, string>, options?: InjectEnvOptions): string[];
@@ -32,17 +32,29 @@ export declare function enqueueMcpLaunchBinding(input: McpLaunchBindingInput): M
32
32
  export declare function claimMcpLaunchBinding(request: McpLaunchBindingClaimRequest): ClaimedMcpLaunchBinding | null;
33
33
  export declare function getMcpLaunchQueueSize(workspacePath: unknown): number;
34
34
 
35
+
36
+
37
+
35
38
  export declare function removeMcpLaunchBinding(bindingId: string): boolean;
36
39
  export declare function clearMcpLaunchBindingQueues(): void;
37
40
 
41
+
42
+
43
+
38
44
  export declare function getLatestAgentToken(agentId: string): {
39
45
  runtimeAccessToken: string;
40
46
  } | null;
41
47
 
48
+
49
+
50
+
42
51
  export declare function getLatestAgentTokenEntry(agentId: string): {
43
52
  runtimeAccessToken: string;
44
53
  schedulerBaseUrl?: string;
45
54
  updatedAt: number;
46
55
  } | null;
47
56
 
57
+
58
+
59
+
48
60
  export declare function updateLatestAgentToken(agentId: string, runtimeAccessToken: string, schedulerBaseUrl?: string): void;
@@ -1,4 +1,15 @@
1
1
 
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
2
13
  export interface McpPackageManifestEnvField {
3
14
  key: string;
4
15
  required?: boolean;
@@ -17,9 +28,14 @@ export interface McpPackageManifest {
17
28
  install?: string;
18
29
  description?: string;
19
30
 
31
+
32
+
33
+
20
34
  env?: McpPackageManifestEnvField[];
21
35
  }
22
36
 
37
+
38
+
23
39
  export declare function validateMcpPackageManifest(raw: unknown): McpPackageManifest;
24
40
 
25
41
  export declare function readMcpPackageManifest(packageDir: string): McpPackageManifest;
@@ -30,6 +46,12 @@ export interface McpPackageExtractResult {
30
46
  manifest: McpPackageManifest;
31
47
  }
32
48
 
49
+
50
+
51
+
33
52
  export declare function extractMcpPackageZip(zipBuffer: Buffer, stagingRoot: string): Promise<McpPackageExtractResult>;
34
53
 
54
+
55
+
56
+
35
57
  export declare function runMcpPackageInstall(packageDir: string, manifest: McpPackageManifest): Promise<void>;
@@ -1,2 +1,2 @@
1
- import{spawn as l}from"node:child_process";import{existsSync as E,readFileSync as g}from"node:fs";import h from"node:path";import{createLogger as S}from"../utils/logger.js";import{BLOCKED_ENV_KEYS as w,ENV_KEY_PATTERN as y}from"../utils/env-safety.js";import{extractPluginZip as T}from"./plugin-package.js";const A=S("mcp-package"),$=new Set(["node","python","binary"]),M=new Set(["bundled","npm"]),d="mcp.json",N=/^[A-Za-z0-9_./@+-]+$/,a=/^(npm|pnpm|yarn)\s+(ci|install)(\s+[A-Za-z0-9@._/:=+-]+)*$/,u=5*60*1e3,P=64*1024;function f(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function _(n){if(n==null)return;if(!Array.isArray(n))throw new Error("mcp.json \u7684 env \u975E\u6CD5\uFF08\u987B\u4E3A\u6570\u7EC4\uFF09");if(n.length===0)return;if(n.length>64)throw new Error("mcp.json \u7684 env \u6700\u591A\u58F0\u660E 64 \u9879");const i=new Set,e=[];for(const r of n){if(!f(r))throw new Error("mcp.json \u7684 env \u5143\u7D20\u975E\u6CD5\uFF08\u987B\u4E3A\u5BF9\u8C61\uFF09");const t=String(r.key??"").trim();if(!t)throw new Error("mcp.json \u7684 env \u5143\u7D20\u7F3A\u5C11 key");if(!y.test(t))throw new Error(`mcp.json \u7684 env \u53D8\u91CF\u540D\u975E\u6CD5: ${t}`);if(w.has(t.toUpperCase()))throw new Error(`mcp.json \u58F0\u660E\u4E86\u7981\u6B62\u7684\u5371\u9669\u73AF\u5883\u53D8\u91CF: ${t}`);if(i.has(t))throw new Error(`mcp.json \u7684 env \u91CD\u590D\u58F0\u660E: ${t}`);i.add(t),e.push({key:t,required:r.required===!0,sensitive:r.sensitive===!0,description:r.description!==void 0?String(r.description):void 0,example:r.example!==void 0?String(r.example):void 0})}return e}function v(n){if(!f(n))throw new Error("mcp.json \u5FC5\u987B\u662F JSON \u5BF9\u8C61");const i=String(n.runtime??"").trim().toLowerCase();if(!$.has(i))throw new Error(`mcp.json \u7684 runtime \u975E\u6CD5\uFF08\u4EC5 node/python/binary\uFF09: ${String(n.runtime)}`);const e=String(n.entry??"").trim();if(!e||!N.test(e)||e.startsWith("/")||/^[A-Za-z]:/.test(e)||e.split(/[\\/]/).includes(".."))throw new Error(`mcp.json \u7684 entry \u975E\u6CD5\uFF08\u987B\u4E3A\u5305\u5185\u76F8\u5BF9\u8DEF\u5F84\uFF09: ${e}`);const r=String(n.dependencies??"bundled").trim().toLowerCase()||"bundled";if(!M.has(r))throw new Error(`mcp.json \u7684 dependencies \u975E\u6CD5\uFF08\u4EC5 bundled/npm\uFF09: ${r}`);let t;if(r==="npm"&&(t=String(n.install??"").trim(),!t||!a.test(t)))throw new Error(`dependencies=npm \u65F6\u5FC5\u987B\u58F0\u660E\u5408\u6CD5\u7684 install \u547D\u4EE4\uFF08\u4EC5 npm/pnpm/yarn \u7684 install/ci\uFF09: ${t}`);const o=Array.isArray(n.args)?n.args.filter(s=>s!=null).map(String):void 0;return{name:n.name!==void 0?String(n.name):void 0,version:n.version!==void 0?String(n.version):void 0,runtime:i,entry:e,args:o,dependencies:r,install:t,description:n.description!==void 0?String(n.description):void 0,env:_(n.env)}}function j(n){const i=h.join(n,d);if(!E(i))throw new Error(`MCP \u5305\u5185\u7F3A\u5C11 ${d}\uFF08\u5305\u578B MCP \u5FC5\u987B\u81EA\u63CF\u8FF0 runtime/entry\uFF09`);let e;try{e=JSON.parse(g(i,"utf8"))}catch(r){throw new Error(`MCP \u5305\u5185 ${d} \u89E3\u6790\u5931\u8D25: ${r instanceof Error?r.message:String(r)}`)}return v(e)}async function O(n,i){const{pluginDir:e,fileCount:r}=await T(n,i),t=j(e);return{packageDir:e,fileCount:r,manifest:t}}async function R(n,i){if(i.dependencies!=="npm")return;const e=String(i.install??"").trim();if(!a.test(e))throw new Error(`\u62D2\u7EDD\u6267\u884C\u975E\u767D\u540D\u5355\u5B89\u88C5\u547D\u4EE4: ${e}`);await new Promise((r,t)=>{A.info("[mcp-package] \u6267\u884C\u4F9D\u8D56\u5B89\u88C5: %s (cwd=%s)",e,n);const o=l(e,{cwd:n,shell:!0,windowsHide:!0});let s="";const p=c=>{s.length<P&&(s+=c.toString("utf8"))};o.stdout?.on("data",p),o.stderr?.on("data",p);const m=setTimeout(()=>{o.kill(),t(new Error(`\u4F9D\u8D56\u5B89\u88C5\u8D85\u65F6\uFF08${u}ms\uFF09: ${e}`))},u);o.on("error",c=>{clearTimeout(m),t(new Error(`\u4F9D\u8D56\u5B89\u88C5\u8FDB\u7A0B\u542F\u52A8\u5931\u8D25: ${c.message}`))}),o.on("close",c=>{if(clearTimeout(m),c!==0){t(new Error(`\u4F9D\u8D56\u5B89\u88C5\u5931\u8D25\uFF08\u9000\u51FA\u7801 ${c}\uFF09: ${s.trim().slice(0,600)||"(\u65E0\u8F93\u51FA)"}`));return}r()})})}export{O as extractMcpPackageZip,j as readMcpPackageManifest,R as runMcpPackageInstall,v as validateMcpPackageManifest};
1
+ import{spawn as l}from"node:child_process";import{existsSync as E,readFileSync as g}from"node:fs";import h from"node:path";import{BLOCKED_ENV_KEYS as S,ENV_KEY_PATTERN as w}from"../utils/env-safety.js";import{createLogger as y}from"../utils/logger.js";import{extractPluginZip as T}from"./plugin-package.js";const A=y("mcp-package"),$=new Set(["node","python","binary"]),M=new Set(["bundled","npm"]),d="mcp.json",N=/^[A-Za-z0-9_./@+-]+$/,a=/^(npm|pnpm|yarn)\s+(ci|install)(\s+[A-Za-z0-9@._/:=+-]+)*$/,u=5*60*1e3,P=64*1024;function f(n){return typeof n=="object"&&n!==null&&!Array.isArray(n)}function _(n){if(n==null)return;if(!Array.isArray(n))throw new Error("mcp.json \u7684 env \u975E\u6CD5\uFF08\u987B\u4E3A\u6570\u7EC4\uFF09");if(n.length===0)return;if(n.length>64)throw new Error("mcp.json \u7684 env \u6700\u591A\u58F0\u660E 64 \u9879");const i=new Set,e=[];for(const r of n){if(!f(r))throw new Error("mcp.json \u7684 env \u5143\u7D20\u975E\u6CD5\uFF08\u987B\u4E3A\u5BF9\u8C61\uFF09");const t=String(r.key??"").trim();if(!t)throw new Error("mcp.json \u7684 env \u5143\u7D20\u7F3A\u5C11 key");if(!w.test(t))throw new Error(`mcp.json \u7684 env \u53D8\u91CF\u540D\u975E\u6CD5: ${t}`);if(S.has(t.toUpperCase()))throw new Error(`mcp.json \u58F0\u660E\u4E86\u7981\u6B62\u7684\u5371\u9669\u73AF\u5883\u53D8\u91CF: ${t}`);if(i.has(t))throw new Error(`mcp.json \u7684 env \u91CD\u590D\u58F0\u660E: ${t}`);i.add(t),e.push({key:t,required:r.required===!0,sensitive:r.sensitive===!0,description:r.description!==void 0?String(r.description):void 0,example:r.example!==void 0?String(r.example):void 0})}return e}function v(n){if(!f(n))throw new Error("mcp.json \u5FC5\u987B\u662F JSON \u5BF9\u8C61");const i=String(n.runtime??"").trim().toLowerCase();if(!$.has(i))throw new Error(`mcp.json \u7684 runtime \u975E\u6CD5\uFF08\u4EC5 node/python/binary\uFF09: ${String(n.runtime)}`);const e=String(n.entry??"").trim();if(!e||!N.test(e)||e.startsWith("/")||/^[A-Za-z]:/.test(e)||e.split(/[\\/]/).includes(".."))throw new Error(`mcp.json \u7684 entry \u975E\u6CD5\uFF08\u987B\u4E3A\u5305\u5185\u76F8\u5BF9\u8DEF\u5F84\uFF09: ${e}`);const r=String(n.dependencies??"bundled").trim().toLowerCase()||"bundled";if(!M.has(r))throw new Error(`mcp.json \u7684 dependencies \u975E\u6CD5\uFF08\u4EC5 bundled/npm\uFF09: ${r}`);let t;if(r==="npm"&&(t=String(n.install??"").trim(),!t||!a.test(t)))throw new Error(`dependencies=npm \u65F6\u5FC5\u987B\u58F0\u660E\u5408\u6CD5\u7684 install \u547D\u4EE4\uFF08\u4EC5 npm/pnpm/yarn \u7684 install/ci\uFF09: ${t}`);const o=Array.isArray(n.args)?n.args.filter(s=>s!=null).map(String):void 0;return{name:n.name!==void 0?String(n.name):void 0,version:n.version!==void 0?String(n.version):void 0,runtime:i,entry:e,args:o,dependencies:r,install:t,description:n.description!==void 0?String(n.description):void 0,env:_(n.env)}}function j(n){const i=h.join(n,d);if(!E(i))throw new Error(`MCP \u5305\u5185\u7F3A\u5C11 ${d}\uFF08\u5305\u578B MCP \u5FC5\u987B\u81EA\u63CF\u8FF0 runtime/entry\uFF09`);let e;try{e=JSON.parse(g(i,"utf8"))}catch(r){throw new Error(`MCP \u5305\u5185 ${d} \u89E3\u6790\u5931\u8D25: ${r instanceof Error?r.message:String(r)}`)}return v(e)}async function O(n,i){const{pluginDir:e,fileCount:r}=await T(n,i),t=j(e);return{packageDir:e,fileCount:r,manifest:t}}async function R(n,i){if(i.dependencies!=="npm")return;const e=String(i.install??"").trim();if(!a.test(e))throw new Error(`\u62D2\u7EDD\u6267\u884C\u975E\u767D\u540D\u5355\u5B89\u88C5\u547D\u4EE4: ${e}`);await new Promise((r,t)=>{A.info("[mcp-package] \u6267\u884C\u4F9D\u8D56\u5B89\u88C5: %s (cwd=%s)",e,n);const o=l(e,{cwd:n,shell:!0,windowsHide:!0});let s="";const p=c=>{s.length<P&&(s+=c.toString("utf8"))};o.stdout?.on("data",p),o.stderr?.on("data",p);const m=setTimeout(()=>{o.kill(),t(new Error(`\u4F9D\u8D56\u5B89\u88C5\u8D85\u65F6\uFF08${u}ms\uFF09: ${e}`))},u);o.on("error",c=>{clearTimeout(m),t(new Error(`\u4F9D\u8D56\u5B89\u88C5\u8FDB\u7A0B\u542F\u52A8\u5931\u8D25: ${c.message}`))}),o.on("close",c=>{if(clearTimeout(m),c!==0){t(new Error(`\u4F9D\u8D56\u5B89\u88C5\u5931\u8D25\uFF08\u9000\u51FA\u7801 ${c}\uFF09: ${s.trim().slice(0,600)||"(\u65E0\u8F93\u51FA)"}`));return}r()})})}export{O as extractMcpPackageZip,j as readMcpPackageManifest,R as runMcpPackageInstall,v as validateMcpPackageManifest};
2
2
 
@@ -1,4 +1,16 @@
1
1
 
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
2
14
  import { type AgentMetaEnvInput } from "./mcp-env-injector.js";
3
15
  export interface McpProbeTool {
4
16
  name: string;
@@ -15,6 +27,8 @@ export interface McpProbeResult {
15
27
  }
16
28
  export interface McpProbeOptions {
17
29
 
30
+ scope?: import("./user-scope.js").UserScope;
31
+
18
32
  effectiveEnv?: Record<string, string>;
19
33
 
20
34
  agentMeta?: AgentMetaEnvInput;
@@ -22,4 +36,9 @@ export interface McpProbeOptions {
22
36
  listToolsTimeoutMs?: number;
23
37
  }
24
38
 
39
+
40
+
41
+
42
+
43
+
25
44
  export declare function probeDeployedMcp(name: string, options?: McpProbeOptions): Promise<McpProbeResult>;