aws-runtime-bridge 1.9.175 → 1.9.180
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.
- package/CHANGELOG.md +223 -0
- package/README.md +61 -2
- package/dist/adapter/AcodeSdkAdapter.d.ts +382 -0
- package/dist/adapter/AcodeSdkAdapter.js +3 -3
- package/dist/adapter/AdapterRegistry.d.ts +28 -0
- package/dist/adapter/ClaudeSdkAdapter.d.ts +71 -0
- package/dist/adapter/CodexSdkAdapter.d.ts +14 -0
- package/dist/adapter/OpencodeSdkAdapter.d.ts +44 -0
- package/dist/adapter/acode-tool-names.d.ts +9 -0
- package/dist/adapter/idle-poll-loop.d.ts +20 -0
- package/dist/adapter/index.d.ts +3 -0
- package/dist/adapter/instance-ai-config-resolver.d.ts +20 -0
- package/dist/adapter/prompts.d.ts +12 -0
- package/dist/adapter/types.d.ts +201 -0
- package/dist/browser/browser-bootstrap.d.ts +15 -0
- package/dist/browser/browser-connect-token.d.ts +11 -0
- package/dist/browser/browser-frame-encode.d.ts +32 -0
- package/dist/browser/browser-pool.d.ts +129 -0
- package/dist/browser/browser-profile-store.d.ts +41 -0
- package/dist/browser/browser-ws-bridge.d.ts +20 -0
- package/dist/browser/built-in-browser-tools.d.ts +44 -0
- package/dist/browser/element-locator.d.ts +25 -0
- package/dist/browser/element-picker.d.ts +30 -0
- package/dist/browser/frame-encode.d.ts +19 -0
- package/dist/browser/input-dispatcher.d.ts +35 -0
- package/dist/browser/listener-store.d.ts +44 -0
- package/dist/browser/page-listener-manager.d.ts +88 -0
- package/dist/browser/page-listener-types.d.ts +38 -0
- package/dist/browser/screencast-differ.d.ts +10 -0
- package/dist/browser/screencast-manager.d.ts +94 -0
- package/dist/browser/snapshot-serializer.d.ts +56 -0
- package/dist/browser/ssrf-guard.d.ts +44 -0
- package/dist/browser/stealth.d.ts +21 -0
- package/dist/browser/step-archive.d.ts +13 -0
- package/dist/browser/types.d.ts +100 -0
- package/dist/browser/ws-server.d.ts +54 -0
- package/dist/config.d.ts +138 -2
- package/dist/config.js +2 -2
- package/dist/desktop/built-in-desktop-tools.d.ts +68 -0
- package/dist/desktop/built-in-desktop-tools.js +2 -1
- package/dist/desktop/desktop-control.d.ts +142 -0
- package/dist/desktop/desktop-control.js +2 -0
- package/dist/desktop/desktop-mcp-client.d.ts +28 -0
- package/dist/desktop/desktop-staleness.d.ts +66 -0
- package/dist/desktop/desktop-staleness.js +2 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +1 -1
- package/dist/middleware/auth.d.ts +26 -0
- package/dist/middleware/auth.js +1 -1
- package/dist/remote-desktop/computer-control.d.ts +3 -0
- package/dist/remote-desktop/coords.d.ts +6 -0
- package/dist/remote-desktop/frame-backpressure.d.ts +10 -0
- package/dist/remote-desktop/frame-encode.d.ts +3 -0
- package/dist/remote-desktop/index.js +2 -2
- package/dist/remote-desktop/input-dispatcher.d.ts +4 -0
- package/dist/remote-desktop/permission-manager.d.ts +3 -0
- package/dist/remote-desktop/screen-capture.d.ts +91 -0
- package/dist/remote-desktop/session-manager.d.ts +47 -0
- package/dist/remote-desktop/session-manager.js +1 -1
- package/dist/remote-desktop/system-backend.d.ts +64 -0
- package/dist/remote-desktop/types.d.ts +25 -0
- package/dist/remote-desktop/ui-automation.d.ts +11 -0
- package/dist/remote-desktop/win32-api.d.ts +10 -0
- package/dist/routes/acode-todos.d.ts +13 -0
- package/dist/routes/agent-state.d.ts +15 -0
- package/dist/routes/ai-sources.js +1 -1
- package/dist/routes/background-tasks.d.ts +18 -0
- package/dist/routes/background-tasks.js +2 -2
- package/dist/routes/browser-listeners.d.ts +17 -0
- package/dist/routes/browser-sessions.d.ts +10 -0
- package/dist/routes/capabilities.js +1 -1
- package/dist/routes/dashboard-icon.d.ts +9 -0
- package/dist/routes/dashboard-icon.js +2 -0
- package/dist/routes/dashboard-theme.d.ts +24 -0
- package/dist/routes/dashboard-theme.js +157 -0
- package/dist/routes/dashboard.d.ts +9 -0
- package/dist/routes/dashboard.js +1988 -625
- package/dist/routes/debug-mount.d.ts +16 -0
- package/dist/routes/desktop-control.d.ts +15 -0
- package/dist/routes/desktop-control.js +2 -0
- package/dist/routes/events.d.ts +4 -0
- package/dist/routes/file-browser.d.ts +11 -0
- package/dist/routes/file-change-diff.d.ts +25 -0
- package/dist/routes/file-diff-rollback.d.ts +28 -0
- package/dist/routes/file-snapshot.d.ts +7 -0
- package/dist/routes/git.d.ts +143 -0
- package/dist/routes/instance-tool-status.d.ts +5 -0
- package/dist/routes/instance.d.ts +8 -0
- package/dist/routes/instance.js +1 -1
- package/dist/routes/jdks.d.ts +4 -0
- package/dist/routes/launch.d.ts +5 -0
- package/dist/routes/lsp-providers.d.ts +11 -0
- package/dist/routes/lsp-providers.js +2 -0
- package/dist/routes/lsp.d.ts +41 -0
- package/dist/routes/lsp.js +4 -2
- package/dist/routes/mcp-extra.d.ts +15 -0
- package/dist/routes/mcp.d.ts +16 -0
- package/dist/routes/mcp.js +1 -1
- package/dist/routes/plugins.d.ts +19 -0
- package/dist/routes/plugins.js +1 -1
- package/dist/routes/processes.d.ts +4 -0
- package/dist/routes/properties.d.ts +4 -0
- package/dist/routes/pty.d.ts +29 -0
- package/dist/routes/runtime-binding.d.ts +3 -0
- package/dist/routes/sessions.d.ts +22 -0
- package/dist/routes/skills.d.ts +15 -0
- package/dist/routes/skills.js +1 -1
- package/dist/routes/sub-agents.d.ts +11 -0
- package/dist/routes/sub-agents.js +1 -1
- package/dist/routes/task-context.d.ts +5 -0
- package/dist/routes/tech-stack.d.ts +4 -0
- package/dist/routes/terminal.d.ts +131 -0
- package/dist/routes/terminal.js +25 -25
- package/dist/routes/workspace-index.d.ts +12 -0
- package/dist/routes/workspace-index.js +2 -0
- package/dist/routes/yml.d.ts +4 -0
- package/dist/scripts/migrate-user-scopes.d.ts +26 -0
- package/dist/scripts/migrate-user-scopes.js +2 -0
- package/dist/services/access-control.d.ts +21 -0
- package/dist/services/acode-bg-manager.d.ts +21 -0
- package/dist/services/acode-package.d.ts +10 -0
- package/dist/services/acode-package.js +1 -1
- package/dist/services/agent-capability-sync.d.ts +26 -0
- package/dist/services/agent-capability-sync.js +1 -1
- package/dist/services/agent-event-store.d.ts +20 -0
- package/dist/services/agent-ownership.d.ts +58 -0
- package/dist/services/agent-ownership.js +3 -0
- package/dist/services/agent-process-manager.d.ts +154 -0
- package/dist/services/agent-pty-manager.d.ts +37 -0
- package/dist/services/agent-startup-memory.d.ts +34 -0
- package/dist/services/agent-startup-memory.js +1 -1
- package/dist/services/ai-config-service.d.ts +26 -52
- package/dist/services/ai-config-service.js +1 -3
- package/dist/services/ai-source-apply.d.ts +7 -15
- package/dist/services/ai-source-apply.js +1 -1
- package/dist/services/auto-register.d.ts +165 -1
- package/dist/services/auto-register.js +1 -1
- package/dist/services/aws-client-agent-mcp.d.ts +14 -0
- package/dist/services/aws-client-agent-mcp.js +2 -2
- package/dist/services/bridge-package-publish-hooks.d.ts +14 -0
- package/dist/services/bridge-pairing.d.ts +82 -0
- package/dist/services/bridge-pairing.js +2 -0
- package/dist/services/bridge-temp-files.d.ts +29 -0
- package/dist/services/browser-session-manager.d.ts +71 -0
- package/dist/services/capability-config.d.ts +60 -15
- package/dist/services/capability-config.js +2 -2
- package/dist/services/change-cache-retention.d.ts +9 -0
- package/dist/services/changelog.d.ts +9 -0
- package/dist/services/cli-commands.d.ts +82 -0
- package/dist/services/cli-commands.js +6 -6
- package/dist/services/connection-key-rotation.d.ts +27 -0
- package/dist/services/connection-key-rotation.js +2 -0
- package/dist/services/debug-mount.d.ts +49 -0
- package/dist/services/desktop-mcp-manager.d.ts +103 -1
- package/dist/services/desktop-mcp-manager.js +1 -1
- package/dist/services/event-delta-pusher.d.ts +15 -0
- package/dist/services/fileSnapshotStore.d.ts +33 -0
- package/dist/services/gitignore.d.ts +9 -0
- package/dist/services/instance-ai-config-service.d.ts +9 -0
- package/dist/services/instance-ai-config-service.js +1 -1
- package/dist/services/instance-features.d.ts +127 -0
- package/dist/services/instance-features.js +1 -1
- package/dist/services/instance-init-service.d.ts +3 -0
- package/dist/services/instance-init-service.js +1 -1
- package/dist/services/instance-state.d.ts +23 -0
- package/dist/services/jdk-scanner.d.ts +15 -0
- package/dist/services/launch-manager.d.ts +138 -0
- package/dist/services/launch-metrics.d.ts +42 -0
- package/dist/services/launch-streams.d.ts +19 -0
- package/dist/services/lifecycle-state.d.ts +5 -0
- package/dist/services/log-retention.d.ts +38 -0
- package/dist/services/lsp/install-manager.d.ts +55 -0
- package/dist/services/lsp/install-manager.js +2 -0
- package/dist/services/lsp/provider-registry.d.ts +108 -0
- package/dist/services/lsp/provider-registry.js +2 -0
- package/dist/services/lsp/uri-rewrite.d.ts +44 -0
- package/dist/services/lsp/uri-rewrite.js +2 -0
- package/dist/services/lsp-stdio-bridge.d.ts +41 -4
- package/dist/services/lsp-stdio-bridge.js +3 -3
- package/dist/services/mcp-deploy.d.ts +45 -4
- package/dist/services/mcp-deploy.js +4 -4
- package/dist/services/mcp-env-injector.d.ts +52 -0
- package/dist/services/mcp-launch-binding-queue.d.ts +12 -0
- package/dist/services/mcp-package.d.ts +22 -0
- package/dist/services/mcp-package.js +1 -1
- package/dist/services/mcp-probe-client.d.ts +19 -0
- package/dist/services/mcp-probe-client.js +1 -1
- package/dist/services/open-doc-events.d.ts +22 -0
- package/dist/services/open-doc-registry.d.ts +35 -0
- package/dist/services/orphan-monitor.d.ts +43 -0
- package/dist/services/panel-auth.d.ts +24 -0
- package/dist/services/panel-env.d.ts +28 -0
- package/dist/services/plugin-deployment.d.ts +34 -1
- package/dist/services/plugin-deployment.js +2 -2
- package/dist/services/plugin-event-buffer.d.ts +21 -0
- package/dist/services/plugin-fs.d.ts +11 -0
- package/dist/services/plugin-handler-adapter.d.ts +13 -0
- package/dist/services/plugin-listener-runner.d.ts +10 -0
- package/dist/services/plugin-loader.d.ts +15 -0
- package/dist/services/plugin-manager.d.ts +95 -9
- package/dist/services/plugin-manager.js +4 -4
- package/dist/services/plugin-manifest.d.ts +14 -0
- package/dist/services/plugin-package.d.ts +13 -0
- package/dist/services/plugin-runtime.d.ts +15 -0
- package/dist/services/port-detector.d.ts +15 -0
- package/dist/services/process-detail.d.ts +3 -0
- package/dist/services/process-detector.d.ts +132 -0
- package/dist/services/process-registry.d.ts +120 -0
- package/dist/services/process-top.d.ts +6 -0
- package/dist/services/request-identity.d.ts +77 -0
- package/dist/services/request-identity.js +2 -0
- package/dist/services/request-invalid-dump.d.ts +4 -0
- package/dist/services/ring-buffer.d.ts +33 -0
- package/dist/services/runtime-binding.d.ts +56 -4
- package/dist/services/runtime-binding.js +4 -4
- package/dist/services/runtime-lifecycle-policy.d.ts +17 -0
- package/dist/services/runtime-resources-snapshot.d.ts +26 -0
- package/dist/services/sdk-tool-file-change-recorder.d.ts +9 -0
- package/dist/services/session-output.d.ts +63 -0
- package/dist/services/session-output.js +3 -3
- package/dist/services/skill-manager.d.ts +42 -5
- package/dist/services/skill-manager.js +3 -3
- package/dist/services/snapshot-retention.d.ts +23 -0
- package/dist/services/startup-config-wizard.d.ts +7 -1
- package/dist/services/startup-config-wizard.js +10 -10
- package/dist/services/system-metrics.d.ts +3 -0
- package/dist/services/tech-stack-scanner.d.ts +12 -0
- package/dist/services/terminal-persistence.d.ts +43 -0
- package/dist/services/tool-installer.d.ts +12 -0
- package/dist/services/tunnel-client.d.ts +57 -2
- package/dist/services/tunnel-client.js +1 -1
- package/dist/services/update-log.d.ts +6 -0
- package/dist/services/update-notifier.d.ts +17 -0
- package/dist/services/update-notifier.js +2 -2
- package/dist/services/user-scope.d.ts +115 -0
- package/dist/services/user-scope.js +2 -0
- package/dist/services/windows-service-manager.d.ts +12 -0
- package/dist/services/workspace-files.d.ts +64 -0
- package/dist/services/workspace-index/index-manager.d.ts +46 -0
- package/dist/services/workspace-index/index-manager.js +2 -0
- package/dist/services/workspace-index/indexer.d.ts +15 -0
- package/dist/services/workspace-index/indexer.js +2 -0
- package/dist/services/workspace-index/query.d.ts +74 -0
- package/dist/services/workspace-index/query.js +5 -0
- package/dist/services/workspace-index/resolver.d.ts +26 -0
- package/dist/services/workspace-index/resolver.js +2 -0
- package/dist/services/workspace-index/types.d.ts +89 -0
- package/dist/services/workspace-index/types.js +2 -0
- package/dist/services/workspace-watch.d.ts +4 -0
- package/dist/services/workspaceTaskChangeWatcher.d.ts +49 -0
- package/dist/services/workspaceTaskChangeWatcher.js +1 -1
- package/dist/types.d.ts +9 -0
- package/dist/utils/config-write-queue.d.ts +11 -0
- package/dist/utils/env-safety.d.ts +21 -0
- package/dist/utils/file-utils.d.ts +15 -0
- package/dist/utils/instance-ai-config-debug-logger.d.ts +15 -0
- package/dist/utils/lifecycle-log.d.ts +5 -0
- package/dist/utils/logger.d.ts +13 -0
- package/dist/utils/logger.js +2 -1
- package/dist/utils/npm-version.d.ts +10 -0
- package/dist/utils/path-utils.d.ts +12 -0
- package/dist/utils/scheduler-url.d.ts +18 -0
- package/dist/utils/scheduler-url.js +2 -0
- package/dist/utils/sdk-package-loader.d.ts +13 -0
- package/dist/utils/sdk-package-loader.js +1 -1
- package/dist/utils/target-identity.d.ts +31 -0
- package/dist/utils/target-identity.js +2 -0
- package/dist/utils/validation.d.ts +17 -0
- package/dist/utils/yaml-utils.d.ts +48 -0
- package/package/acode/dist/__tests__/summary-request-helper.d.ts +10 -0
- package/package/acode/dist/ask-user-question-tool.d.ts +17 -0
- package/package/acode/dist/await-complete-tool.d.ts +12 -0
- package/package/acode/dist/background-command-manager.d.ts +105 -0
- package/package/acode/dist/background-command-store.d.ts +27 -0
- package/package/acode/dist/background-command-tools.d.ts +8 -0
- package/package/acode/dist/background-output-ringbuffer.d.ts +15 -0
- package/package/acode/dist/built-in-file-tools.d.ts +65 -0
- package/package/acode/dist/built-in-symbols-tool.d.ts +3 -0
- package/package/acode/dist/builtins/commandArtifacts.d.ts +3 -0
- package/package/acode/dist/builtins/shellCommandPreparation.d.ts +17 -0
- package/package/acode/dist/builtins/shellCommandRunner.d.ts +4 -0
- package/package/acode/dist/builtins/shellOutputDecoder.d.ts +15 -0
- package/package/acode/dist/cache-control.d.ts +45 -0
- package/package/acode/dist/commands/commandLoader.d.ts +3 -0
- package/package/acode/dist/commands/commandParser.d.ts +3 -0
- package/package/acode/dist/commands/commandRegistry.d.ts +3 -0
- package/package/acode/dist/compaction.d.ts +354 -0
- package/package/acode/dist/config.d.ts +3 -0
- package/package/acode/dist/context-overflow.d.ts +32 -0
- package/package/acode/dist/fs-utils.d.ts +18 -0
- package/package/acode/dist/hooks/hookBus.d.ts +3 -0
- package/package/acode/dist/image-utils.d.ts +35 -0
- package/package/acode/dist/index.d.ts +1 -0
- package/package/acode/dist/index.js +1 -1
- package/package/acode/dist/mcpToolNames.d.ts +32 -0
- package/package/acode/dist/microcompact.d.ts +53 -0
- package/package/acode/dist/parsers/ast-cache.d.ts +41 -0
- package/package/acode/dist/parsers/file-index.d.ts +83 -0
- package/package/acode/dist/parsers/file-index.js +4 -0
- package/package/acode/dist/parsers/language-detector.d.ts +4 -0
- package/package/acode/dist/parsers/tree-sitter-loader.d.ts +12 -0
- package/package/acode/dist/parsers/types.d.ts +11 -0
- package/package/acode/dist/paths.d.ts +14 -0
- package/package/acode/dist/plugin-types.d.ts +34 -0
- package/package/acode/dist/read-file-state.d.ts +15 -0
- package/package/acode/dist/runtime-environment.d.ts +16 -0
- package/package/acode/dist/runtime.d.ts +824 -9
- package/package/acode/dist/runtime.js +22 -22
- package/package/acode/dist/skill-tool.d.ts +20 -0
- package/package/acode/dist/sub-agent-manager.d.ts +169 -0
- package/package/acode/dist/sub-agent-manager.js +1 -1
- package/package/acode/dist/sub-agent-store.d.ts +50 -0
- package/package/acode/dist/sub-agent-tools.d.ts +15 -0
- package/package/acode/dist/sub-agent-types.d.ts +13 -0
- package/package/acode/dist/terminal-tool.d.ts +15 -0
- package/package/acode/dist/terminal-types.d.ts +10 -0
- package/package/acode/dist/todo-store.d.ts +15 -0
- package/package/acode/dist/token-estimator.d.ts +17 -0
- package/package/acode/dist/tool-allocation.d.ts +113 -0
- package/package/acode/dist/tool-concurrency/index.d.ts +8 -0
- package/package/acode/dist/tool-concurrency/observability.d.ts +32 -0
- package/package/acode/dist/tool-concurrency/resource-lock.d.ts +30 -0
- package/package/acode/dist/tool-concurrency/scheduler.d.ts +19 -0
- package/package/acode/dist/tool-concurrency/types.d.ts +57 -0
- package/package/acode/dist/tool-group-manager.d.ts +195 -0
- package/package/acode/dist/tool-group-manager.js +4 -4
- package/package/acode/dist/types.d.ts +194 -0
- package/package/aws-client-agent-mcp/README.md +130 -215
- package/package/aws-client-agent-mcp/dist/ability-market-tools.d.ts +57 -0
- package/package/aws-client-agent-mcp/dist/agent-client.d.ts +277 -3
- package/package/aws-client-agent-mcp/dist/agent-client.js +1 -1
- package/package/aws-client-agent-mcp/dist/config.d.ts +18 -0
- package/package/aws-client-agent-mcp/dist/constants.d.ts +2 -0
- package/package/aws-client-agent-mcp/dist/context-manager.d.ts +70 -0
- package/package/aws-client-agent-mcp/dist/http-client.d.ts +61 -0
- package/package/aws-client-agent-mcp/dist/index.d.ts +10 -0
- package/package/aws-client-agent-mcp/dist/logger.d.ts +24 -0
- package/package/aws-client-agent-mcp/dist/mcp-server.d.ts +606 -1
- package/package/aws-client-agent-mcp/dist/mcp-server.js +4 -4
- package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts +158 -0
- package/package/aws-client-agent-mcp/dist/mcp-tools.js +38 -22
- package/package/aws-client-agent-mcp/dist/memory-store.d.ts +81 -0
- package/package/aws-client-agent-mcp/dist/memory-tools.d.ts +18 -0
- package/package/aws-client-agent-mcp/dist/message-buffer.d.ts +86 -0
- package/package/aws-client-agent-mcp/dist/messageContent.d.ts +24 -0
- package/package/aws-client-agent-mcp/dist/office/office-equation.d.ts +19 -0
- package/package/aws-client-agent-mcp/dist/office/office-image.d.ts +18 -0
- package/package/aws-client-agent-mcp/dist/office/office-workspace.d.ts +29 -0
- package/package/aws-client-agent-mcp/dist/parent-lifecycle.d.ts +18 -0
- package/package/aws-client-agent-mcp/dist/runtime-launch-binding.d.ts +6 -0
- package/package/aws-client-agent-mcp/dist/server-memory-store.d.ts +4 -0
- package/package/aws-client-agent-mcp/dist/status-reporter.d.ts +41 -0
- package/package/aws-client-agent-mcp/dist/tool-groups.d.ts +136 -0
- package/package/aws-client-agent-mcp/dist/types.d.ts +123 -0
- package/package/aws-client-agent-mcp/dist/watchdog.d.ts +7 -0
- package/package/aws-client-agent-mcp/dist/websocket-client.d.ts +108 -0
- package/package.json +1 -1
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
2
13
|
export type LaunchStreamKind = "logs" | "metrics";
|
|
3
14
|
export declare class LaunchStreamHub {
|
|
4
15
|
private static instance;
|
|
@@ -8,10 +19,18 @@ export declare class LaunchStreamHub {
|
|
|
8
19
|
private readonly statusSubscribers;
|
|
9
20
|
static getInstance(): LaunchStreamHub;
|
|
10
21
|
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
11
26
|
subscribe(configId: string, kind: LaunchStreamKind, send: (frame: string) => void): () => void;
|
|
12
27
|
|
|
13
28
|
subscriberCount(configId: string, kind: LaunchStreamKind): number;
|
|
14
29
|
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
15
34
|
subscribeStatus(send: (frame: string) => void): () => void;
|
|
16
35
|
|
|
17
36
|
publishStatusRun(run: unknown): void;
|
|
@@ -30,5 +30,10 @@ export declare function createBridgeLifecycleOperation(input: {
|
|
|
30
30
|
export declare function upsertBridgeLifecycleOperation(operation: BridgeLifecycleOperation): Promise<void>;
|
|
31
31
|
export declare function removeBridgeLifecycleOperation(operationId: string): Promise<void>;
|
|
32
32
|
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
33
38
|
export declare function deliverPendingBridgeLifecycleNotifications(): Promise<void>;
|
|
34
39
|
export {};
|
|
@@ -1,9 +1,41 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
3
31
|
export declare const DEFAULT_LOG_RETENTION_DAYS = 7;
|
|
4
32
|
|
|
5
33
|
export declare function normalizeLogRetentionDays(value: unknown): number;
|
|
6
34
|
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
7
39
|
export declare function setLogRetentionDays(value: unknown): number;
|
|
8
40
|
|
|
9
41
|
export declare function getLogRetentionDays(): number;
|
|
@@ -30,8 +62,14 @@ export interface LogRetentionSweepResult {
|
|
|
30
62
|
bytesFreed: number;
|
|
31
63
|
}
|
|
32
64
|
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
|
|
33
68
|
export declare function sweepExpiredLogs(): Promise<LogRetentionSweepResult>;
|
|
34
69
|
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
|
|
35
73
|
export declare function startLogRetention(): void;
|
|
36
74
|
|
|
37
75
|
export declare function stopLogRetention(): void;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
import { type LspProviderSpec } from "./provider-registry.js";
|
|
17
|
+
export type LspInstallPhase = "queued" | "installing" | "done" | "error" | "removing";
|
|
18
|
+
export interface LspInstallTask {
|
|
19
|
+
providerId: string;
|
|
20
|
+
phase: LspInstallPhase;
|
|
21
|
+
startedAt: string;
|
|
22
|
+
finishedAt?: string;
|
|
23
|
+
|
|
24
|
+
logs: string[];
|
|
25
|
+
error?: string | null;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
export declare function installLspProvider(providerId: string, options?: {
|
|
32
|
+
registry?: string;
|
|
33
|
+
}): Promise<LspInstallTask>;
|
|
34
|
+
|
|
35
|
+
export declare function uninstallLspProvider(providerId: string): Promise<LspInstallTask>;
|
|
36
|
+
|
|
37
|
+
export declare function getLspInstallTask(providerId: string): LspInstallTask | null;
|
|
38
|
+
|
|
39
|
+
export declare function listLspInstallTasks(): LspInstallTask[];
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
export declare function getProviderDiskUsage(providerId: string): Promise<number | null>;
|
|
45
|
+
|
|
46
|
+
export declare function detectNpmRegistry(): Promise<string | null>;
|
|
47
|
+
|
|
48
|
+
export declare function describeInstallStatus(providerId: string): {
|
|
49
|
+
providerId: string;
|
|
50
|
+
task: LspInstallTask | null;
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export declare function isInstallBusy(): boolean;
|
|
54
|
+
|
|
55
|
+
export declare function listNpmProviders(): LspProviderSpec[];
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{execFile as v,spawn as x}from"node:child_process";import{promises as l}from"node:fs";import $ from"node:path";import{promisify as k}from"node:util";import{createLogger as L}from"../../utils/logger.js";import{getLspServerDir as d,getProvider as P,listAllProviders as S}from"./provider-registry.js";const A=k(v),m=L("lsp-install"),I=200,p=new Map;let u=null;function c(){return new Date().toISOString()}function w(){return process.platform==="win32"?"npm.cmd":"npm"}function f(t,r){for(const e of r.split(/\r?\n/)){const n=e.trim();n&&t.logs.push(n)}for(;t.logs.length>I;)t.logs.shift()}function h(t){const r=P(t);if(!r)throw new Error(`unknown lsp provider: ${t}`);if(r.kind!=="npm"||!r.npmPackage)throw new Error(r.kind==="builtin"?`${r.label} \u5DF2\u5185\u7F6E\uFF0C\u65E0\u9700\u5B89\u88C5`:`${r.label} \u9700\u8981\u5728\u672C\u673A\u5B89\u88C5\u539F\u751F\u8BED\u8A00\u670D\u52A1\uFF1A${(r.systemBinaries??[]).join(" / ")}`);return r}async function b(t,r,e){const n={...process.env};e.registry&&(n.npm_config_registry=e.registry),await new Promise((i,a)=>{const o=x(w(),r,{env:n,shell:process.platform==="win32",stdio:["ignore","pipe","pipe"]});o.stdout?.on("data",s=>f(t,s.toString("utf8"))),o.stderr?.on("data",s=>f(t,s.toString("utf8"))),o.on("error",s=>a(s)),o.on("exit",s=>{s===0?i():a(new Error(`npm ${r[0]??""} exited with code ${s}`))})})}async function B(t,r={}){const e=h(t),n=p.get(e.id);if(n&&(n.phase==="installing"||n.phase==="queued")||n&&n.phase==="done")return n;const i={providerId:e.id,phase:"queued",startedAt:c(),logs:[],error:null};return p.set(e.id,i),u=(async()=>{i.phase="installing";const o=d(e.id);await l.mkdir(o,{recursive:!0}),f(i,`\u5B89\u88C5 ${e.npmPackage}@${e.npmVersion} \u2192 ${o}`);try{await b(i,["install","--prefix",o,"--no-audit","--no-fund","--loglevel","error",`${e.npmPackage}@${e.npmVersion}`],r),i.phase="done",i.finishedAt=c(),m.info(`[lsp-install] \u5B89\u88C5\u5B8C\u6210 provider=${e.id}`)}catch(s){i.phase="error",i.error=s.message,i.finishedAt=c(),m.warn(`[lsp-install] \u5B89\u88C5\u5931\u8D25 provider=${e.id}: ${i.error}`)}finally{u=null}})(),await u,i}async function M(t){const r=h(t),e={providerId:r.id,phase:"removing",startedAt:c(),logs:[],error:null};p.set(r.id,e);const n=d(r.id);return await l.rm(n,{recursive:!0,force:!0}),e.phase="done",e.finishedAt=c(),f(e,`\u5DF2\u5220\u9664 ${n}`),m.info(`[lsp-install] \u5378\u8F7D\u5B8C\u6210 provider=${r.id}`),e}function D(t){return p.get(String(t||"").trim().toLowerCase())??null}function O(){return[...p.values()]}async function V(t){const r=d(t);try{if(!(await l.stat(r)).isDirectory())return null;let n=0;const i=async a=>{const o=await l.readdir(a,{withFileTypes:!0});for(const s of o){const g=$.join(a,s.name);if(s.isDirectory())await i(g);else if(s.isFile()){const y=await l.stat(g);n+=y.size}}};return await i(r),n}catch{return null}}async function j(){try{const{stdout:t}=await A(w(),["config","get","registry"],{timeout:1e4});return String(t||"").trim()||null}catch{return null}}function z(t){return{providerId:t,task:D(t)}}function C(){return u!==null}function G(){return S().filter(t=>t.kind==="npm")}export{z as describeInstallStatus,j as detectNpmRegistry,D as getLspInstallTask,V as getProviderDiskUsage,B as installLspProvider,C as isInstallBusy,O as listLspInstallTasks,G as listNpmProviders,M as uninstallLspProvider};
|
|
2
|
+
|
|
@@ -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
|
-
|
|
38
|
-
|
|
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
|
|
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(
|
|
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(
|
|
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
|
|
44
|
-
static
|
|
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
|
-
|
|
84
|
-
export declare
|
|
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
|
|
2
|
-
`,"utf8")}saveMcp(e,r,t=!0,i){if(!
|
|
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),
|
|
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(!
|
|
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
|
|