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,7 +1,7 @@
|
|
|
1
|
-
import{spawnSync as
|
|
2
|
-
`)}function
|
|
3
|
-
`)}function
|
|
4
|
-
`)}function y(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function
|
|
5
|
-
`)}function C(e,r){return e("systemctl",r)}function x(e,r){return r.error?`[runtime-bridge] ${e}\u5931\u8D25: ${r.error.message}`:`[runtime-bridge] ${e}\u5931\u8D25\uFF0Csystemctl \u9000\u51FA\u7801: ${r.status??"unknown"}`}function o(e){return!e.error&&e.status===0}function $(e,r){return e==="linux"?!0:(r("[runtime-bridge] service \u547D\u4EE4\u4EC5\u652F\u6301 Linux systemd \u73AF\u5883\u3002"),!1)}function
|
|
6
|
-
npm install -g aws-runtime-bridge`),{handled:!0,exitCode:1}}async function j(e){const r=e.windowsServiceManager;if(!r&&!ae())return ye(e.stderr);const t=e.windowsServiceLogPath||Y,i=c.dirname(e.executablePath),s=W.homedir();try{await(r||se()).install({name:K,description:"awsb runtime bridge",script:e.executablePath,workingDirectory:i,env:[{name:"AWS_BRIDGE_SKIP_SETUP",value:"true"},{name:"AWS_RUNTIME_HOME_DIR",value:s}],logpath:A()})}catch(u){const m=u instanceof Error?u:new Error(String(u));return e.stderr(`[runtime-bridge] \u5B89\u88C5 Windows \u670D\u52A1\u5931\u8D25: ${m.message}`),{handled:!0,exitCode:1}}const n=e.runCommand("sc.exe",["start",l]);if(!o(n))return e.stderr(`[runtime-bridge] \u542F\u52A8 Windows \u670D\u52A1\u5931\u8D25: ${n.error?.message??`\u9000\u51FA\u7801 ${n.status??"unknown"}`}`),{handled:!0,exitCode:n.status??1};const a=["failure",l,"reset=","86400","actions=","restart/5000/restart/10000/restart/30000"],d=e.runCommand("sc.exe",a);return o(d)?e.stdout("[runtime-bridge] \u5DF2\u914D\u7F6E awsb \u670D\u52A1\u5931\u8D25\u81EA\u52A8\u91CD\u542F\uFF085s/10s/30s\uFF09\u3002"):e.stderr(`[runtime-bridge] \u914D\u7F6E\u670D\u52A1\u5931\u8D25\u81EA\u52A8\u91CD\u542F\u672A\u751F\u6548\uFF08\u53EF\u5FFD\u7565\uFF09: ${d.error?.message??`\u9000\u51FA\u7801 ${d.status??"unknown"}`}`),e.stdout(`[runtime-bridge] awsb Windows \u670D\u52A1\u5DF2\u5B89\u88C5\u5E76\u5DF2\u542F\u52A8\uFF08\u65E5\u5FD7: ${t}\uFF09\u3002`),{handled:!0,exitCode:0}}function Pe(e){const r=i=>e.runCommand("sc.exe",i);r(["stop",l]);const t=r(["delete",l]);return o(t)?(e.stdout("[runtime-bridge] awsb Windows \u670D\u52A1\u5DF2\u5378\u8F7D\u3002"),{handled:!0,exitCode:0}):(e.stderr(`[runtime-bridge] \u5378\u8F7D Windows \u670D\u52A1\u5931\u8D25: ${t.error?.message??`\u9000\u51FA\u7801 ${t.status??"unknown"}`}`),{handled:!0,exitCode:t.status??1})}async function Ee(e){e.runCommand("sc.exe",["stop",l]);const r=e.queryWindowsServiceState||O;return J(r,l)||e.stdout("[runtime-bridge] \u7B49\u5F85 Windows \u670D\u52A1\u505C\u6B62\u8D85\u65F6\uFF0C\u4ECD\u5C1D\u8BD5\u542F\u52A8\uFF08\u53EF\u80FD\u62A5 1056\uFF09\u3002"),X(e,"\u91CD\u542F")}async function $e(e){return X(e,"\u542F\u52A8")}const pe=2,Re=1056;async function X(e,r){const t=e.runCommand("sc.exe",["start",l]);if(o(t))return e.stdout(`[runtime-bridge] awsb Windows \u670D\u52A1\u5DF2${r}\u3002`),{handled:!0,exitCode:0};if(t.status===Re)return e.stdout(`[runtime-bridge] awsb Windows \u670D\u52A1\u5DF2\u5728\u8FD0\u884C\u4E2D\uFF08\u65E0\u9700${r}\uFF09\u3002`),{handled:!0,exitCode:0};if(t.status===pe){e.stdout("[runtime-bridge] \u68C0\u6D4B\u5230 Windows \u670D\u52A1\u4E8C\u8FDB\u5236\u6587\u4EF6\u4E22\u5931\uFF08winsw.exe\uFF09\uFF0C\u6B63\u5728\u91CD\u5EFA..."),e.runCommand("sc.exe",["delete",l]);try{const i=await j(e);return i.exitCode!==0&&e.stderr(`[runtime-bridge] ${r} Windows \u670D\u52A1\u5931\u8D25\u4E14\u81EA\u52A8\u91CD\u5EFA\u5931\u8D25\u3002\u8BF7\u624B\u52A8\u6267\u884C \`awsb service uninstall && awsb service install\` \u4FEE\u590D\u3002`),i}catch(i){const s=i instanceof Error?i:new Error(String(i));return e.stderr(`[runtime-bridge] ${r} Windows \u670D\u52A1\u5931\u8D25\u4E14\u81EA\u52A8\u91CD\u5EFA\u5F02\u5E38: ${s.message}\u3002\u8BF7\u624B\u52A8\u6267\u884C \`awsb service uninstall && awsb service install\` \u4FEE\u590D\u3002`),{handled:!0,exitCode:1}}}return e.stderr(`[runtime-bridge] ${r} Windows \u670D\u52A1\u5931\u8D25: ${t.error?.message??`\u9000\u51FA\u7801 ${t.status??"unknown"}`}`),{handled:!0,exitCode:t.status??1}}function ke(e){const r=e.runCommand("sc.exe",["stop",l]);return o(r)?(e.stdout("[runtime-bridge] awsb Windows \u670D\u52A1\u5DF2\u505C\u6B62\u3002"),{handled:!0,exitCode:0}):(e.stderr(`[runtime-bridge] \u505C\u6B62 Windows \u670D\u52A1\u5931\u8D25: ${r.error?.message??`\u9000\u51FA\u7801 ${r.status??"unknown"}`}`),{handled:!0,exitCode:r.status??1})}function De(){return`gui/${process.getuid?.()??0}`}function R(e){return e.launchdDomainTarget||De()}function k(e){return`${e}/${U}`}function D(e,r){return r.error?`[runtime-bridge] ${e}\u5931\u8D25: ${r.error.message}`:`[runtime-bridge] ${e}\u5931\u8D25\uFF0Claunchctl \u9000\u51FA\u7801: ${r.status??"unknown"}`}function We(e){if(!p(e.platform,e.stderr))return{handled:!0,exitCode:1};const r=e.launchdPlistPath||_,t=e.launchdLogPath||M,i=he(e.executablePath,{userHomeDir:W.homedir(),logPath:t});try{I(c.dirname(r),{recursive:!0}),I(c.dirname(t),{recursive:!0}),B(r,i,{encoding:"utf-8",mode:420})}catch(a){const d=a instanceof Error?a:new Error(String(a));return e.stderr(`[runtime-bridge] \u5199\u5165 launchd plist \u5931\u8D25: ${d.message}`),{handled:!0,exitCode:1}}const s=R(e);e.runCommand("launchctl",["bootout",k(s)]);const n=e.runCommand("launchctl",["bootstrap",s,r]);return o(n)?(e.stdout(`[runtime-bridge] awsb launchd \u670D\u52A1\u5DF2\u5B89\u88C5\u5E76\u5DF2\u542F\u52A8\uFF08\u65E5\u5FD7: ${t}\uFF09\u3002`),{handled:!0,exitCode:0}):(e.stderr(D("\u5B89\u88C5 awsb \u670D\u52A1",n)),{handled:!0,exitCode:n.status??1})}function _e(e){if(!p(e.platform,e.stderr))return{handled:!0,exitCode:1};const r=e.launchdPlistPath||_,t=R(e),i=k(t),s=e.runCommand("launchctl",["bootout",i]);if(s.error)return e.stderr(D("\u5378\u8F7D awsb \u670D\u52A1",s)),{handled:!0,exitCode:1};if(f(r))try{N(r)}catch(n){const a=n instanceof Error?n:new Error(String(n));return e.stderr(`[runtime-bridge] \u5220\u9664 launchd plist \u5931\u8D25: ${a.message}`),{handled:!0,exitCode:1}}else e.stdout("[runtime-bridge] awsb launchd plist \u4E0D\u5B58\u5728\uFF0C\u8DF3\u8FC7\u5220\u9664\u3002");return e.stdout("[runtime-bridge] awsb launchd \u670D\u52A1\u5DF2\u5378\u8F7D\u3002"),{handled:!0,exitCode:0}}function Te(e){if(!p(e.platform,e.stderr))return{handled:!0,exitCode:1};const r=e.launchdPlistPath||_;if(!f(r))return e.stderr("[runtime-bridge] awsb launchd \u670D\u52A1\u5C1A\u672A\u5B89\u88C5\uFF0C\u8BF7\u5148\u6267\u884C `awsb service install`\u3002"),{handled:!0,exitCode:1};const t=R(e),i=k(t),s=e.runCommand("launchctl",["kickstart",i]);if(o(s))return e.stdout("[runtime-bridge] awsb launchd \u670D\u52A1\u5DF2\u542F\u52A8\u3002"),{handled:!0,exitCode:0};const n=e.runCommand("launchctl",["bootstrap",t,r]);return o(n)?(e.stdout("[runtime-bridge] awsb launchd \u670D\u52A1\u5DF2\u542F\u52A8\u3002"),{handled:!0,exitCode:0}):(e.stderr(D("\u542F\u52A8 awsb \u670D\u52A1",n)),{handled:!0,exitCode:n.status??1})}function Ie(e){if(!p(e.platform,e.stderr))return{handled:!0,exitCode:1};const r=R(e),t=e.runCommand("launchctl",["bootout",k(r)]);return o(t)?(e.stdout("[runtime-bridge] awsb launchd \u670D\u52A1\u5DF2\u505C\u6B62\u3002"),{handled:!0,exitCode:0}):(e.stderr(D("\u505C\u6B62 awsb \u670D\u52A1",t)),{handled:!0,exitCode:t.status??1})}function Ne(e){if(!p(e.platform,e.stderr))return{handled:!0,exitCode:1};const r=e.launchdPlistPath||_;if(!f(r))return e.stderr("[runtime-bridge] awsb launchd \u670D\u52A1\u5C1A\u672A\u5B89\u88C5\uFF0C\u8BF7\u5148\u6267\u884C `awsb service install`\u3002"),{handled:!0,exitCode:1};const t=R(e);e.runCommand("launchctl",["bootout",k(t)]);const i=e.runCommand("launchctl",["bootstrap",t,r]);return o(i)?(e.stdout("[runtime-bridge] awsb launchd \u670D\u52A1\u5DF2\u91CD\u542F\u3002"),{handled:!0,exitCode:0}):(e.stderr(D("\u91CD\u542F awsb \u670D\u52A1",i)),{handled:!0,exitCode:i.status??1})}async function Le(e,r,t,i){const s=e[1];if(!s||s==="-h"||s==="--help"||s==="help")return z(t),{handled:!0,exitCode:s?0:1};const n={stdout:t,stderr:i,runCommand:r.runCommand||T,platform:r.platform||process.platform,serviceUnitPath:r.serviceUnitPath||L,executablePath:r.executablePath||Q(),windowsServiceManager:r.windowsServiceManager,launchdPlistPath:r.launchdPlistPath,launchdLogPath:r.launchdLogPath,launchdDomainTarget:r.launchdDomainTarget,queryWindowsServiceState:r.queryWindowsServiceState||O};return n.platform!=="linux"&&n.platform!=="win32"&&n.platform!=="darwin"?(i("[runtime-bridge] service \u547D\u4EE4\u4EC5\u652F\u6301 Linux systemd\u3001Windows \u670D\u52A1\u4E0E macOS launchd \u73AF\u5883\u3002"),{handled:!0,exitCode:1}):s==="install"?n.platform==="win32"?await j(n):n.platform==="darwin"?We(n):be(n):s==="uninstall"?n.platform==="win32"?Pe(n):n.platform==="darwin"?_e(n):Ce(n):s==="restart"?n.platform==="win32"?Ee(n):n.platform==="darwin"?Ne(n):xe(n):s==="start"?n.platform==="win32"?$e(n):n.platform==="darwin"?Te(n):Se(n):s==="stop"?n.platform==="win32"?ke(n):n.platform==="darwin"?Ie(n):ve(n):(i(`[runtime-bridge] \u672A\u77E5 service \u5B50\u547D\u4EE4: ${s}`),z(t),{handled:!0,exitCode:1})}function Z(e){return e?e.split(/\r?\n/).map(r=>r.trim()).filter(r=>/^\d+$/.test(r)).map(Number):[]}function Ae(e){try{if(e==="win32"){const t=h("powershell",["-NoProfile","-Command",`Get-CimInstance Win32_Process -Filter "Name='node.exe'" | Where-Object { $_.CommandLine -like '*aws-runtime-bridge*' -and $_.ProcessId -ne ${process.pid} } | ForEach-Object { $_.ProcessId }`],{encoding:"utf-8"}),i=Ue(e);return Me([...Z(t.stdout),...i]).filter(s=>s!==process.pid)}const r=h("pgrep",["-f","aws-runtime-bridge"],{encoding:"utf-8"});return Z(r.stdout).filter(t=>t!==process.pid)}catch{return[]}}function Ue(e){if(e!=="win32")return[];try{const r=h("sc.exe",["query",l],{encoding:"utf-8",shell:!0,stdio:["ignore","pipe","ignore"]});if(r.status!==0||!r.stdout)return[];const t=r.stdout.match(/STATE\s*:\s*\d+\s+(\S+)/);if(!t)return[];const i=t[1];if(i!=="RUNNING"&&i!=="START_PENDING"&&i!=="STOP_PENDING")return[];const s=h("tasklist",["/FI","IMAGENAME eq awsb.exe","/FO","CSV","/NH"],{encoding:"utf-8",shell:!0,stdio:["ignore","pipe","ignore"]});return s.status!==0||!s.stdout?[]:s.stdout.split(/\r?\n/).map(n=>n.trim()).filter(n=>n.length>0).map(n=>{const a=n.match(/^"awsb\.exe","(\d+)"/i);return a?Number(a[1]):NaN}).filter(n=>Number.isFinite(n)&&n>0)}catch{return[]}}function Me(e){const r=new Set,t=[];for(const i of e)r.has(i)||(r.add(i),t.push(i));return t}function Fe(e,r,t=1e4,i=250){if(r==="win32"){if(He(e,r)){h("sc.exe",["stop",l],{stdio:"ignore",shell:!0}),J(O,l);return}h("taskkill",["/PID",String(e),"/F","/T"],{stdio:"ignore"}),je(Oe,e,r,t,i);return}h("kill",["-9",String(e)],{stdio:"ignore"})}function Oe(e,r){if(r!=="win32"||!Number.isFinite(e)||e<=0)return!0;try{const t=h("tasklist",["/FI",`PID eq ${e}`,"/NH"],{encoding:"utf-8",stdio:["ignore","pipe","ignore"]});return t.status!==0||!t.stdout?!0:!t.stdout.includes(String(e))}catch{return!0}}function je(e,r,t,i=1e4,s=250){const n=Date.now()+i;for(;Date.now()<n;){if(e(r,t))return!0;F(s)}return e(r,t)}function He(e,r){if(r!=="win32"||!Number.isFinite(e)||e<=0)return!1;try{const t=h("powershell",["-NoProfile","-Command",`(Get-CimInstance Win32_Process -Filter "ProcessId=${e}" -ErrorAction SilentlyContinue).Name`],{encoding:"utf-8",stdio:["ignore","pipe","ignore"]});return t.status!==0||!t.stdout?!1:/^awsb\.exe$/i.test(t.stdout.trim())}catch{return!1}}function Ge(e){if(!process.stdin.isTTY)return Promise.resolve("n");const r=re({input:process.stdin,output:process.stdout});return r.question(e).finally(()=>r.close())}function qe(e,r=3,t=500){let i;for(let s=0;s<=r;s+=1)try{q(e,{recursive:!0,force:!0});return}catch(n){i=n instanceof Error?n:new Error(String(n)),s<r&&F(t*2**s)}throw i??new Error(`\u65E0\u6CD5\u5220\u9664\u76EE\u5F55: ${e}`)}function Be(e){const r=c.join(e,"aws-runtime-bridge","node_modules"),t=c.join(r,"fsevents");if(f(t))try{q(t,{recursive:!0,force:!0})}catch{}const i=c.join(r,".package-lock.json");if(f(i))try{G(i,"utf-8").includes("fsevents")&&N(i)}catch{}}async function Ve(e,r,t){const i=e.runCommand||T,s=e.platform||process.platform,n=e.findRunningBridgeProcesses||Ae,a=e.prompt||Ge,d=e.killBridgeProcess||Fe,u=e.globalModulePath||oe;r("[runtime-bridge] \u6B63\u5728\u66F4\u65B0 aws-runtime-bridge \u5230\u6700\u65B0\u7248\u672C...");let m=!1;if(e.skipKill)m=!0,r("[runtime-bridge] \u5DF2\u6307\u5B9A --no-kill\uFF0C\u8DF3\u8FC7\u8FD0\u884C\u8FDB\u7A0B\u68C0\u6D4B\uFF0C\u5C06\u4EE5 --force \u65B9\u5F0F\u5B89\u88C5\u3002");else{const S=n(s).filter(g=>g!==process.pid);if(S.length>0)if(r(`[runtime-bridge] \u68C0\u6D4B\u5230 aws-runtime-bridge \u6B63\u5728\u8FD0\u884C (PID: ${S.join(", ")})\uFF0C\u66F4\u65B0\u65F6\u8FD9\u4E9B\u8FDB\u7A0B\u53EF\u80FD\u5360\u7528\u6587\u4EF6\u5BFC\u81F4\u8986\u76D6\u5931\u8D25\u3002`),e.assumeYes){r("[runtime-bridge] \u975E\u4EA4\u4E92\u6A21\u5F0F(--yes)\uFF0C\u81EA\u52A8\u5173\u95ED\u4E0A\u8FF0\u8FDB\u7A0B\u4EE5\u7EE7\u7EED\u66F4\u65B0...");for(const g of S)try{d(g,s),r(`[runtime-bridge] \u5DF2\u5173\u95ED\u8FDB\u7A0B PID: ${g}`)}catch(v){const E=v instanceof Error?v:new Error(String(v));t(`[runtime-bridge] \u5173\u95ED\u8FDB\u7A0B PID ${g} \u5931\u8D25: ${E.message}`)}}else{const g=(await a("\u662F\u5426\u5173\u95ED\u4E0A\u8FF0\u8FDB\u7A0B\u4EE5\u7EE7\u7EED\u66F4\u65B0? (y/N) ")).trim().toLowerCase();if(g==="y"||g==="yes")for(const v of S)try{d(v,s),r(`[runtime-bridge] \u5DF2\u5173\u95ED\u8FDB\u7A0B PID: ${v}`)}catch(E){const ee=E instanceof Error?E:new Error(String(E));t(`[runtime-bridge] \u5173\u95ED\u8FDB\u7A0B PID ${v} \u5931\u8D25: ${ee.message}`)}else m=!0,r("[runtime-bridge] \u5DF2\u9009\u62E9\u4E0D\u5173\u95ED\u8FDB\u7A0B\uFF0C\u5C06\u4EE5 --force \u65B9\u5F0F\u5F3A\u5236\u5B89\u88C5\uFF08\u82E5\u6587\u4EF6\u4ECD\u88AB\u5360\u7528\u53EF\u80FD\u4F1A\u6709\u8B66\u544A\uFF09\u3002")}}const w=u();if(w){const S=c.join(w,"aws-runtime-bridge");if(f(S)){r("[runtime-bridge] \u6E05\u7406\u65E7\u7248\u672C\u6B8B\u7559\u76EE\u5F55...");try{qe(S)}catch(g){const v=g instanceof Error?g:new Error(String(g));t(`[runtime-bridge] \u6E05\u7406\u6B8B\u7559\u76EE\u5F55\u5931\u8D25\uFF08\u5C06\u5C1D\u8BD5\u7EE7\u7EED\u5B89\u88C5\uFF09: ${v.message}`),Be(w)}}}const H=["install","-g","aws-runtime-bridge@latest","--omit=optional"];m&&H.push("--force");const P=i("npm",H);if(P.error)return t(`[runtime-bridge] \u66F4\u65B0\u5931\u8D25: ${P.error.message}`),{handled:!0,exitCode:1};if(P.status!==0)return t(`[runtime-bridge] \u66F4\u65B0\u5931\u8D25\uFF0Cnpm \u9000\u51FA\u7801: ${P.status??"unknown"}`),{handled:!0,exitCode:P.status??1};if(s==="win32"){const S=await Ke(e,r,t);if(S.exitCode!==0)return S}return r("[runtime-bridge] \u66F4\u65B0\u5B8C\u6210\u3002\u8BF7\u91CD\u65B0\u8FD0\u884C awsb -v \u67E5\u770B\u5F53\u524D\u7248\u672C\u3002"),{handled:!0,exitCode:0}}async function Ke(e,r,t){const i=e.runCommand||T,s=i("sc.exe",["query",l]);if(!o(s))return{handled:!0,exitCode:0};r("[runtime-bridge] \u68C0\u6D4B\u5230 Windows \u670D\u52A1\u5DF2\u6CE8\u518C\uFF0C\u6B63\u5728\u91CD\u5EFA\u670D\u52A1\u6587\u4EF6\uFF08daemon/winsw.exe\uFF09..."),i("sc.exe",["stop",l]);const n=i("sc.exe",["delete",l]);o(n)||t(`[runtime-bridge] \u5220\u9664\u65E7 SCM \u8BB0\u5F55\u5931\u8D25: ${n.error?.message??`\u9000\u51FA\u7801 ${n.status??"unknown"}`}\uFF08\u5C1D\u8BD5\u7EE7\u7EED\u5B89\u88C5\uFF09`);const a={stdout:r,stderr:t,runCommand:i,platform:"win32",serviceUnitPath:e.serviceUnitPath||L,executablePath:e.executablePath||Q(),windowsServiceManager:e.windowsServiceManager};try{return(await j(a)).exitCode!==0?(t("[runtime-bridge] \u91CD\u5EFA Windows \u670D\u52A1\u6587\u4EF6\u5931\u8D25\u3002\u5305\u5DF2\u66F4\u65B0\uFF0C\u8BF7\u624B\u52A8\u6267\u884C `awsb service uninstall && awsb service install` \u4FEE\u590D\u670D\u52A1\u3002"),{handled:!0,exitCode:0}):(r("[runtime-bridge] Windows \u670D\u52A1\u6587\u4EF6\u5DF2\u91CD\u5EFA\u3002"),{handled:!0,exitCode:0})}catch(d){const u=d instanceof Error?d:new Error(String(d));return t(`[runtime-bridge] \u91CD\u5EFA Windows \u670D\u52A1\u6587\u4EF6\u5F02\u5E38: ${u.message}\u3002\u5305\u5DF2\u66F4\u65B0\uFF0C\u8BF7\u624B\u52A8\u6267\u884C \`awsb service uninstall && awsb service install\` \u4FEE\u590D\u670D\u52A1\u3002`),{handled:!0,exitCode:0}}}function Ye(e,r,t){const s=(e.argv||process.argv.slice(2)).slice(1).some(u=>u==="--follow"||u==="-f"),n=e.platform||process.platform,a=e.runCommand||T,d=e.serviceUnitPath||L;if(n==="linux"){if(!f(d))return t("[runtime-bridge] awsb \u670D\u52A1\u5C1A\u672A\u5B89\u88C5\uFF08awsb service install\uFF09\uFF0C\u65E0\u65E5\u5FD7\u53EF\u67E5\u770B\u3002"),{handled:!0,exitCode:1};const u=["-u",b];s?u.push("-f"):u.push("-n","200","--no-pager");const m=a("journalctl",u);return m.error?(t(`[runtime-bridge] \u8BFB\u53D6\u65E5\u5FD7\u5931\u8D25: ${m.error.message}`),{handled:!0,exitCode:1}):{handled:!0,exitCode:m.status??0}}if(n==="win32"){const u=e.windowsServiceLogPath||Y;if(!f(u))return t(`[runtime-bridge] \u5C1A\u672A\u751F\u6210\u65E5\u5FD7\u6587\u4EF6: ${u}\u3002\u8BF7\u5148\u6267\u884C \`awsb service install\` \u5E76\u8FD0\u884C\u670D\u52A1\u3002`),{handled:!0,exitCode:1};const m=`Get-Content -Encoding UTF8 -Tail 200 "${u}"`+(s?" -Wait":""),w=a("powershell",["-NoProfile","-Command",m]);return w.error?(t(`[runtime-bridge] \u8BFB\u53D6\u65E5\u5FD7\u5931\u8D25: ${w.error.message}`),{handled:!0,exitCode:1}):{handled:!0,exitCode:w.status??0}}if(n==="darwin"){const u=e.launchdLogPath||M;if(!f(u))return t(`[runtime-bridge] \u5C1A\u672A\u751F\u6210\u65E5\u5FD7\u6587\u4EF6: ${u}\u3002\u8BF7\u5148\u6267\u884C \`awsb service install\` \u5E76\u8FD0\u884C\u670D\u52A1\u3002`),{handled:!0,exitCode:1};const w=a("tail",s?["-f",u]:["-n","200",u]);return w.error?(t(`[runtime-bridge] \u8BFB\u53D6\u65E5\u5FD7\u5931\u8D25: ${w.error.message}`),{handled:!0,exitCode:1}):{handled:!0,exitCode:w.status??0}}return t("[runtime-bridge] awsb log \u4EC5\u652F\u6301 Linux systemd\u3001Windows \u670D\u52A1\u4E0E macOS launchd \u73AF\u5883\u3002"),{handled:!0,exitCode:1}}async function ir(e={}){const r=e.argv||process.argv.slice(2),t=r[0],i=e.stdout||ce,s=e.stderr||le;if(t===void 0)return{handled:!1,exitCode:0};if(t==="-h"||t==="--help"||t==="help")return we(i),{handled:!0,exitCode:0};if(me(t))return i(`aws-runtime-bridge ${de(e.packageRoot)}`),{handled:!0,exitCode:0};if(t==="update"){const n=r.includes("--yes")||r.includes("-y"),a=r.includes("--no-kill"),d=n||a?{...e,assumeYes:n,skipKill:a}:e;return await Ve(d,i,s)}if(t==="config"){const n=r[1];if(n==="example"||n==="minimal"||n==="--minimal"||n==="-m")return{handled:!0,exitCode:await(e.configureExample||ie)()==="created"?0:1};const d=await(e.configure||ne)();return{handled:!0,exitCode:d==="configured"||d==="created"?0:1}}return t==="service"?await Le(r,e,i,s):t==="log"?Ye(e,i,s):(s(`[runtime-bridge] \u672A\u77E5\u547D\u4EE4: ${t}`),s("[runtime-bridge] \u8BF7\u8FD0\u884C `awsb --help` \u67E5\u770B\u652F\u6301\u7684\u547D\u4EE4\u3002"),{handled:!0,exitCode:1})}export{he as createLaunchdPlistContent,ge as createSystemdUnitContent,Ae as defaultFindRunningBridgeProcesses,Fe as defaultKillBridgeProcess,Oe as defaultProcessIsGone,ir as handleCliCommand,de as readPackageVersion,qe as removeDirWithRetry,Be as removeUpdateFseventsResidue,je as waitForProcessGone};
|
|
1
|
+
import{spawnSync as w}from"node:child_process";import{existsSync as g,mkdirSync as T,readFileSync as G,rmSync as q,unlinkSync as N,writeFileSync as B}from"node:fs";import W from"node:os";import l from"node:path";import{createInterface as te}from"node:readline/promises";import{fileURLToPath as V}from"node:url";import{getRuntimeHomeDir as ne,isDesktopAppMode as K}from"../config.js";import{pairBridge as ie}from"./bridge-pairing.js";import{configureStartupConfig as se,printConfigExampleCommand as ae}from"./startup-config-wizard.js";import{createWindowsServiceManager as ue,isNodeWindowsAvailable as de}from"./windows-service-manager.js";const b="awsb.service",A=`/etc/systemd/system/${b}`,Y="awsb",m=`${Y}.exe`;function L(){return l.join(ne(),".aws-bridge","log")}const J=l.join(L(),"awsb.out.log"),U="com.agentsworkstudio.awsb",_=l.join(W.homedir(),"Library","LaunchAgents",`${U}.plist`),M=l.join(L(),"awsb.out.log");function oe(){const e=V(import.meta.url);return l.resolve(l.dirname(e),"..","..")}function ce(e=oe()){const r=l.join(e,"package.json");return JSON.parse(G(r,"utf-8")).version||"unknown"}function I(e,r){const t=w(e,r,{shell:process.platform==="win32",stdio:"inherit"});return{status:t.status,error:t.error}}function le(){try{const e=w("npm",["root","-g"],{shell:process.platform==="win32",encoding:"utf-8",stdio:["ignore","pipe","ignore"]});if(e.status===0&&e.stdout){const r=e.stdout.trim();if(r)return r}}catch{}return null}function O(e){try{const r=new SharedArrayBuffer(4);Atomics.wait(new Int32Array(r),0,0,e)}catch{const r=Date.now()+e;for(;Date.now()<r;);}}function F(e){if(process.platform!=="win32")return null;try{const r=w("sc.exe",["query",e],{shell:!0,encoding:"utf-8",stdio:["ignore","pipe","ignore"]});if(r.status!==0||!r.stdout)return null;const t=r.stdout.match(/STATE\s*:\s*\d+\s+(\S+)/);return t?t[1]:null}catch{return null}}function Q(e,r,t=15e3,i=500){const s=Date.now()+t;for(;Date.now()<s;){const n=e(r);if(n===null||n==="STOPPED")return!0;O(i)}return!1}function me(e){process.stdout.write(`${e}
|
|
2
|
+
`)}function fe(e){process.stderr.write(`${e}
|
|
3
|
+
`)}function ge(e){return e==="-v"||e==="--version"||e==="version"}function he(e){return`"${e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}function z(){return process.argv[1]?l.resolve(process.argv[1]):V(import.meta.url)}function we(e){return["[Unit]","Description=AgentsWorkStudio Runtime Bridge","After=network-online.target","Wants=network-online.target","","[Service]","Type=simple","Environment=AWS_BRIDGE_SKIP_SETUP=true",`ExecStart=${[process.execPath,e].map(t=>he(t)).join(" ")}`,"Restart=on-failure","RestartSec=5s","","[Install]","WantedBy=multi-user.target",""].join(`
|
|
4
|
+
`)}function y(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function be(e,r={}){const t=r.userHomeDir??W.homedir(),i=r.logPath??M,s=i.replace(/\.out\.log$/,".err.log");return['<?xml version="1.0" encoding="UTF-8"?>','<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">','<plist version="1.0">',"<dict>"," <key>Label</key>",` <string>${y(U)}</string>`," <key>ProgramArguments</key>"," <array>",` <string>${y(process.execPath)}</string>`,` <string>${y(e)}</string>`," </array>"," <key>EnvironmentVariables</key>"," <dict>"," <key>AWS_BRIDGE_SKIP_SETUP</key>"," <string>true</string>"," <key>AWS_RUNTIME_HOME_DIR</key>",` <string>${y(t)}</string>`," </dict>"," <key>RunAtLoad</key>"," <true/>"," <key>KeepAlive</key>"," <true/>"," <key>StandardOutPath</key>",` <string>${y(i)}</string>`," <key>StandardErrorPath</key>",` <string>${y(s)}</string>`,"</dict>","</plist>",""].join(`
|
|
5
|
+
`)}function C(e,r){return e("systemctl",r)}function x(e,r){return r.error?`[runtime-bridge] ${e}\u5931\u8D25: ${r.error.message}`:`[runtime-bridge] ${e}\u5931\u8D25\uFF0Csystemctl \u9000\u51FA\u7801: ${r.status??"unknown"}`}function o(e){return!e.error&&e.status===0}function $(e,r){return e==="linux"?!0:(r("[runtime-bridge] service \u547D\u4EE4\u4EC5\u652F\u6301 Linux systemd \u73AF\u5883\u3002"),!1)}function E(e,r){return e==="darwin"?!0:(r("[runtime-bridge] service \u547D\u4EE4\u4EC5\u652F\u6301 macOS launchd \u73AF\u5883\u3002"),!1)}function X(e){e("Usage: awsb service <install|uninstall|start|stop|restart>")}function Ce(e){e("Usage: awsb <command> [options]"),e(""),e("\u547D\u4EE4:"),e(" -v, --version, version \u663E\u793A\u7248\u672C\u53F7"),e(" update [--yes|-y|--no-kill] \u66F4\u65B0\u5230\u6700\u65B0\u7248\u672C"),e(" config [example|minimal] \u914D\u7F6E\u8FD0\u884C\u53C2\u6570"),e(" pair --ticket <ticket> \u7528\u7BA1\u7406\u9875\u7684\u4E00\u6B21\u6027\u7968\u636E\u914D\u5BF9\uFF0C\u6362\u53D6\u673A\u5668\u51ED\u636E"),e(" service <install|uninstall|start|stop|restart> \u7BA1\u7406\u7CFB\u7EDF\u670D\u52A1"),e(" log [--follow|-f] \u67E5\u770B\u670D\u52A1\u65E5\u5FD7"),e(" -h, --help, help \u663E\u793A\u672C\u5E2E\u52A9")}async function xe(e,r,t,i){const s=e.slice(1);if(s.includes("-h")||s.includes("--help"))return t("\u7528\u6CD5: awsb pair --ticket awsp_xxx [--server-url http://host:port] [--instance-id bridge-xxx] [--target-identity credential-id] [--instance-name name] [--register-addr host:port]"),{handled:!0,exitCode:0};const n=c=>{const f=s.indexOf(c);if(!(f<0))return s[f+1]?.trim()||void 0},u=n("--ticket")||s.find(c=>c.startsWith("awsp_"));if(!u)return i("\u7F3A\u5C11\u914D\u5BF9\u7968\u636E\u3002\u7528\u6CD5: awsb pair --ticket awsp_xxx [--server-url URL]"),{handled:!0,exitCode:1};const d=r.pair||ie;let a;try{a=await d({ticket:u,serverUrl:n("--server-url"),instanceId:n("--instance-id"),targetIdentity:n("--target-identity"),instanceName:n("--instance-name"),registerAddr:n("--register-addr")})}catch(c){return i(`\u914D\u5BF9\u5931\u8D25: ${c.message}`),{handled:!0,exitCode:1}}return a.success?(t("\u2713 \u914D\u5BF9\u6210\u529F\uFF0C\u673A\u5668\u51ED\u636E\u5DF2\u5199\u5165 config.json\uFF08\u660E\u6587\u4E0D\u663E\u793A\uFF09"),t(` \u5B9E\u4F8B ID: ${a.instanceId||"(\u672A\u77E5)"}`),t(` \u8C03\u5EA6\u4E2D\u5FC3: ${a.serverUrl||"(\u672A\u77E5)"}`),t(" \u8BF7\u91CD\u542F Bridge \u4F7F\u65B0\u914D\u7F6E\u751F\u6548\uFF1Aawsb service restart\uFF08\u6216\u91CD\u65B0\u542F\u52A8 awsb\uFF09"),{handled:!0,exitCode:0}):(i(`\u914D\u5BF9\u5931\u8D25: ${a.error||"\u672A\u77E5\u9519\u8BEF"}`),{handled:!0,exitCode:1})}function ve(e){if(!$(e.platform,e.stderr))return{handled:!0,exitCode:1};const r=we(e.executablePath);try{T(l.dirname(e.serviceUnitPath),{recursive:!0}),B(e.serviceUnitPath,r,{encoding:"utf-8",mode:420})}catch(n){const u=n instanceof Error?n:new Error(String(n));return e.stderr(`[runtime-bridge] \u5199\u5165 systemd unit \u5931\u8D25: ${u.message}`),{handled:!0,exitCode:1}}const t=C(e.runCommand,["daemon-reload"]);if(!o(t))return e.stderr(x("\u91CD\u8F7D systemd",t)),{handled:!0,exitCode:t.status??1};const i=C(e.runCommand,["enable",b]);if(!o(i))return e.stderr(x("\u542F\u7528 awsb \u5F00\u673A\u81EA\u542F",i)),{handled:!0,exitCode:i.status??1};const s=C(e.runCommand,["is-active","--quiet",b]);if(s.error)return e.stderr(x("\u68C0\u67E5 awsb \u670D\u52A1\u72B6\u6001",s)),{handled:!0,exitCode:1};if(s.status!==0){const n=C(e.runCommand,["start",b]);return o(n)?(e.stdout("[runtime-bridge] awsb systemd \u670D\u52A1\u5DF2\u5B89\u88C5\u3001\u5DF2\u542F\u7528\u5F00\u673A\u81EA\u542F\u5E76\u5DF2\u542F\u52A8\u3002"),{handled:!0,exitCode:0}):(e.stderr(x("\u542F\u52A8 awsb \u670D\u52A1",n)),{handled:!0,exitCode:n.status??1})}return e.stdout("[runtime-bridge] awsb systemd \u670D\u52A1\u5DF2\u5B89\u88C5\u5E76\u5DF2\u542F\u7528\u5F00\u673A\u81EA\u542F\uFF1B\u670D\u52A1\u5DF2\u5728\u8FD0\u884C\u3002"),{handled:!0,exitCode:0}}function Se(e){if(!$(e.platform,e.stderr))return{handled:!0,exitCode:1};const r=g(e.serviceUnitPath),t=C(e.runCommand,["is-active","--quiet",b]);if(t.error)return e.stderr(x("\u68C0\u67E5 awsb \u670D\u52A1\u72B6\u6001",t)),{handled:!0,exitCode:1};if(t.status===0){const n=C(e.runCommand,["stop",b]);if(!o(n))return e.stderr(x("\u505C\u6B62 awsb \u670D\u52A1",n)),{handled:!0,exitCode:n.status??1}}const i=C(e.runCommand,["disable",b]);if(i.error||i.status!==0&&r)return e.stderr(x("\u7981\u7528 awsb \u5F00\u673A\u81EA\u542F",i)),{handled:!0,exitCode:i.status??1};if(r)try{N(e.serviceUnitPath)}catch(n){const u=n instanceof Error?n:new Error(String(n));return e.stderr(`[runtime-bridge] \u5220\u9664 systemd unit \u5931\u8D25: ${u.message}`),{handled:!0,exitCode:1}}else e.stdout("[runtime-bridge] awsb systemd unit \u4E0D\u5B58\u5728\uFF0C\u8DF3\u8FC7\u5220\u9664\u3002");const s=C(e.runCommand,["daemon-reload"]);return o(s)?(e.stdout("[runtime-bridge] awsb systemd \u670D\u52A1\u5DF2\u5378\u8F7D\u3002"),{handled:!0,exitCode:0}):(e.stderr(x("\u91CD\u8F7D systemd",s)),{handled:!0,exitCode:s.status??1})}function ye(e){if(!$(e.platform,e.stderr))return{handled:!0,exitCode:1};if(!g(e.serviceUnitPath))return e.stderr("[runtime-bridge] awsb systemd \u670D\u52A1\u5C1A\u672A\u5B89\u88C5\uFF0C\u8BF7\u5148\u6267\u884C `awsb service install`\u3002"),{handled:!0,exitCode:1};const r=C(e.runCommand,["restart",b]);return o(r)?(e.stdout("[runtime-bridge] awsb systemd \u670D\u52A1\u5DF2\u91CD\u542F\u3002"),{handled:!0,exitCode:0}):(e.stderr(x("\u91CD\u542F awsb \u670D\u52A1",r)),{handled:!0,exitCode:r.status??1})}function Pe(e){if(!$(e.platform,e.stderr))return{handled:!0,exitCode:1};if(!g(e.serviceUnitPath))return e.stderr("[runtime-bridge] awsb systemd \u670D\u52A1\u5C1A\u672A\u5B89\u88C5\uFF0C\u8BF7\u5148\u6267\u884C `awsb service install`\u3002"),{handled:!0,exitCode:1};const r=C(e.runCommand,["start",b]);return o(r)?(e.stdout("[runtime-bridge] awsb systemd \u670D\u52A1\u5DF2\u542F\u52A8\u3002"),{handled:!0,exitCode:0}):(e.stderr(x("\u542F\u52A8 awsb \u670D\u52A1",r)),{handled:!0,exitCode:r.status??1})}function pe(e){if(!$(e.platform,e.stderr))return{handled:!0,exitCode:1};if(!g(e.serviceUnitPath))return e.stderr("[runtime-bridge] awsb systemd \u670D\u52A1\u5C1A\u672A\u5B89\u88C5\uFF0C\u8BF7\u5148\u6267\u884C `awsb service install`\u3002"),{handled:!0,exitCode:1};const r=C(e.runCommand,["stop",b]);return o(r)?(e.stdout("[runtime-bridge] awsb systemd \u670D\u52A1\u5DF2\u505C\u6B62\u3002"),{handled:!0,exitCode:0}):(e.stderr(x("\u505C\u6B62 awsb \u670D\u52A1",r)),{handled:!0,exitCode:r.status??1})}function $e(e){return e(`[runtime-bridge] \u672A\u68C0\u6D4B\u5230 node-windows \u6A21\u5757\u3002\u8BF7\u91CD\u65B0\u5B89\u88C5 aws-runtime-bridge\uFF1A
|
|
6
|
+
npm install -g aws-runtime-bridge`),{handled:!0,exitCode:1}}async function j(e){const r=e.windowsServiceManager;if(!r&&!de())return $e(e.stderr);const t=e.windowsServiceLogPath||J,i=l.dirname(e.executablePath),s=W.homedir();try{await(r||ue()).install({name:Y,description:"awsb runtime bridge",script:e.executablePath,workingDirectory:i,env:[{name:"AWS_BRIDGE_SKIP_SETUP",value:"true"},{name:"AWS_RUNTIME_HOME_DIR",value:s}],logpath:L()})}catch(a){const c=a instanceof Error?a:new Error(String(a));return e.stderr(`[runtime-bridge] \u5B89\u88C5 Windows \u670D\u52A1\u5931\u8D25: ${c.message}`),{handled:!0,exitCode:1}}const n=e.runCommand("sc.exe",["start",m]);if(!o(n))return e.stderr(`[runtime-bridge] \u542F\u52A8 Windows \u670D\u52A1\u5931\u8D25: ${n.error?.message??`\u9000\u51FA\u7801 ${n.status??"unknown"}`}`),{handled:!0,exitCode:n.status??1};const u=["failure",m,"reset=","86400","actions=","restart/5000/restart/10000/restart/30000"],d=e.runCommand("sc.exe",u);return o(d)?e.stdout("[runtime-bridge] \u5DF2\u914D\u7F6E awsb \u670D\u52A1\u5931\u8D25\u81EA\u52A8\u91CD\u542F\uFF085s/10s/30s\uFF09\u3002"):e.stderr(`[runtime-bridge] \u914D\u7F6E\u670D\u52A1\u5931\u8D25\u81EA\u52A8\u91CD\u542F\u672A\u751F\u6548\uFF08\u53EF\u5FFD\u7565\uFF09: ${d.error?.message??`\u9000\u51FA\u7801 ${d.status??"unknown"}`}`),e.stdout(`[runtime-bridge] awsb Windows \u670D\u52A1\u5DF2\u5B89\u88C5\u5E76\u5DF2\u542F\u52A8\uFF08\u65E5\u5FD7: ${t}\uFF09\u3002`),{handled:!0,exitCode:0}}function Ee(e){const r=i=>e.runCommand("sc.exe",i);r(["stop",m]);const t=r(["delete",m]);return o(t)?(e.stdout("[runtime-bridge] awsb Windows \u670D\u52A1\u5DF2\u5378\u8F7D\u3002"),{handled:!0,exitCode:0}):(e.stderr(`[runtime-bridge] \u5378\u8F7D Windows \u670D\u52A1\u5931\u8D25: ${t.error?.message??`\u9000\u51FA\u7801 ${t.status??"unknown"}`}`),{handled:!0,exitCode:t.status??1})}async function ke(e){e.runCommand("sc.exe",["stop",m]);const r=e.queryWindowsServiceState||F;return Q(r,m)||e.stdout("[runtime-bridge] \u7B49\u5F85 Windows \u670D\u52A1\u505C\u6B62\u8D85\u65F6\uFF0C\u4ECD\u5C1D\u8BD5\u542F\u52A8\uFF08\u53EF\u80FD\u62A5 1056\uFF09\u3002"),Z(e,"\u91CD\u542F")}async function Re(e){return Z(e,"\u542F\u52A8")}const De=2,We=1056;async function Z(e,r){const t=e.runCommand("sc.exe",["start",m]);if(o(t))return e.stdout(`[runtime-bridge] awsb Windows \u670D\u52A1\u5DF2${r}\u3002`),{handled:!0,exitCode:0};if(t.status===We)return e.stdout(`[runtime-bridge] awsb Windows \u670D\u52A1\u5DF2\u5728\u8FD0\u884C\u4E2D\uFF08\u65E0\u9700${r}\uFF09\u3002`),{handled:!0,exitCode:0};if(t.status===De){e.stdout("[runtime-bridge] \u68C0\u6D4B\u5230 Windows \u670D\u52A1\u4E8C\u8FDB\u5236\u6587\u4EF6\u4E22\u5931\uFF08winsw.exe\uFF09\uFF0C\u6B63\u5728\u91CD\u5EFA..."),e.runCommand("sc.exe",["delete",m]);try{const i=await j(e);return i.exitCode!==0&&e.stderr(`[runtime-bridge] ${r} Windows \u670D\u52A1\u5931\u8D25\u4E14\u81EA\u52A8\u91CD\u5EFA\u5931\u8D25\u3002\u8BF7\u624B\u52A8\u6267\u884C \`awsb service uninstall && awsb service install\` \u4FEE\u590D\u3002`),i}catch(i){const s=i instanceof Error?i:new Error(String(i));return e.stderr(`[runtime-bridge] ${r} Windows \u670D\u52A1\u5931\u8D25\u4E14\u81EA\u52A8\u91CD\u5EFA\u5F02\u5E38: ${s.message}\u3002\u8BF7\u624B\u52A8\u6267\u884C \`awsb service uninstall && awsb service install\` \u4FEE\u590D\u3002`),{handled:!0,exitCode:1}}}return e.stderr(`[runtime-bridge] ${r} Windows \u670D\u52A1\u5931\u8D25: ${t.error?.message??`\u9000\u51FA\u7801 ${t.status??"unknown"}`}`),{handled:!0,exitCode:t.status??1}}function _e(e){const r=e.runCommand("sc.exe",["stop",m]);return o(r)?(e.stdout("[runtime-bridge] awsb Windows \u670D\u52A1\u5DF2\u505C\u6B62\u3002"),{handled:!0,exitCode:0}):(e.stderr(`[runtime-bridge] \u505C\u6B62 Windows \u670D\u52A1\u5931\u8D25: ${r.error?.message??`\u9000\u51FA\u7801 ${r.status??"unknown"}`}`),{handled:!0,exitCode:r.status??1})}function Ie(){return`gui/${process.getuid?.()??0}`}function k(e){return e.launchdDomainTarget||Ie()}function R(e){return`${e}/${U}`}function D(e,r){return r.error?`[runtime-bridge] ${e}\u5931\u8D25: ${r.error.message}`:`[runtime-bridge] ${e}\u5931\u8D25\uFF0Claunchctl \u9000\u51FA\u7801: ${r.status??"unknown"}`}function Te(e){if(!E(e.platform,e.stderr))return{handled:!0,exitCode:1};const r=e.launchdPlistPath||_,t=e.launchdLogPath||M,i=be(e.executablePath,{userHomeDir:W.homedir(),logPath:t});try{T(l.dirname(r),{recursive:!0}),T(l.dirname(t),{recursive:!0}),B(r,i,{encoding:"utf-8",mode:420})}catch(u){const d=u instanceof Error?u:new Error(String(u));return e.stderr(`[runtime-bridge] \u5199\u5165 launchd plist \u5931\u8D25: ${d.message}`),{handled:!0,exitCode:1}}const s=k(e);e.runCommand("launchctl",["bootout",R(s)]);const n=e.runCommand("launchctl",["bootstrap",s,r]);return o(n)?(e.stdout(`[runtime-bridge] awsb launchd \u670D\u52A1\u5DF2\u5B89\u88C5\u5E76\u5DF2\u542F\u52A8\uFF08\u65E5\u5FD7: ${t}\uFF09\u3002`),{handled:!0,exitCode:0}):(e.stderr(D("\u5B89\u88C5 awsb \u670D\u52A1",n)),{handled:!0,exitCode:n.status??1})}function Ne(e){if(!E(e.platform,e.stderr))return{handled:!0,exitCode:1};const r=e.launchdPlistPath||_,t=k(e),i=R(t),s=e.runCommand("launchctl",["bootout",i]);if(s.error)return e.stderr(D("\u5378\u8F7D awsb \u670D\u52A1",s)),{handled:!0,exitCode:1};if(g(r))try{N(r)}catch(n){const u=n instanceof Error?n:new Error(String(n));return e.stderr(`[runtime-bridge] \u5220\u9664 launchd plist \u5931\u8D25: ${u.message}`),{handled:!0,exitCode:1}}else e.stdout("[runtime-bridge] awsb launchd plist \u4E0D\u5B58\u5728\uFF0C\u8DF3\u8FC7\u5220\u9664\u3002");return e.stdout("[runtime-bridge] awsb launchd \u670D\u52A1\u5DF2\u5378\u8F7D\u3002"),{handled:!0,exitCode:0}}function Ae(e){if(!E(e.platform,e.stderr))return{handled:!0,exitCode:1};const r=e.launchdPlistPath||_;if(!g(r))return e.stderr("[runtime-bridge] awsb launchd \u670D\u52A1\u5C1A\u672A\u5B89\u88C5\uFF0C\u8BF7\u5148\u6267\u884C `awsb service install`\u3002"),{handled:!0,exitCode:1};const t=k(e),i=R(t),s=e.runCommand("launchctl",["kickstart",i]);if(o(s))return e.stdout("[runtime-bridge] awsb launchd \u670D\u52A1\u5DF2\u542F\u52A8\u3002"),{handled:!0,exitCode:0};const n=e.runCommand("launchctl",["bootstrap",t,r]);return o(n)?(e.stdout("[runtime-bridge] awsb launchd \u670D\u52A1\u5DF2\u542F\u52A8\u3002"),{handled:!0,exitCode:0}):(e.stderr(D("\u542F\u52A8 awsb \u670D\u52A1",n)),{handled:!0,exitCode:n.status??1})}function Le(e){if(!E(e.platform,e.stderr))return{handled:!0,exitCode:1};const r=k(e),t=e.runCommand("launchctl",["bootout",R(r)]);return o(t)?(e.stdout("[runtime-bridge] awsb launchd \u670D\u52A1\u5DF2\u505C\u6B62\u3002"),{handled:!0,exitCode:0}):(e.stderr(D("\u505C\u6B62 awsb \u670D\u52A1",t)),{handled:!0,exitCode:t.status??1})}function Ue(e){if(!E(e.platform,e.stderr))return{handled:!0,exitCode:1};const r=e.launchdPlistPath||_;if(!g(r))return e.stderr("[runtime-bridge] awsb launchd \u670D\u52A1\u5C1A\u672A\u5B89\u88C5\uFF0C\u8BF7\u5148\u6267\u884C `awsb service install`\u3002"),{handled:!0,exitCode:1};const t=k(e);e.runCommand("launchctl",["bootout",R(t)]);const i=e.runCommand("launchctl",["bootstrap",t,r]);return o(i)?(e.stdout("[runtime-bridge] awsb launchd \u670D\u52A1\u5DF2\u91CD\u542F\u3002"),{handled:!0,exitCode:0}):(e.stderr(D("\u91CD\u542F awsb \u670D\u52A1",i)),{handled:!0,exitCode:i.status??1})}async function Me(e,r,t,i){const s=e[1];if(K())return i("[runtime-bridge] \u684C\u9762\u7248\u4E0D\u652F\u6301 service \u547D\u4EE4\uFF0C\u8BF7\u4F7F\u7528\u684C\u9762\u5E94\u7528\u7684\u6258\u76D8\u83DC\u5355\u7BA1\u7406\u542F\u52A8\u4E0E\u5F00\u673A\u81EA\u542F\u3002"),{handled:!0,exitCode:1};if(!s||s==="-h"||s==="--help"||s==="help")return X(t),{handled:!0,exitCode:s?0:1};const n={stdout:t,stderr:i,runCommand:r.runCommand||I,platform:r.platform||process.platform,serviceUnitPath:r.serviceUnitPath||A,executablePath:r.executablePath||z(),windowsServiceManager:r.windowsServiceManager,launchdPlistPath:r.launchdPlistPath,launchdLogPath:r.launchdLogPath,launchdDomainTarget:r.launchdDomainTarget,queryWindowsServiceState:r.queryWindowsServiceState||F};return n.platform!=="linux"&&n.platform!=="win32"&&n.platform!=="darwin"?(i("[runtime-bridge] service \u547D\u4EE4\u4EC5\u652F\u6301 Linux systemd\u3001Windows \u670D\u52A1\u4E0E macOS launchd \u73AF\u5883\u3002"),{handled:!0,exitCode:1}):s==="install"?n.platform==="win32"?await j(n):n.platform==="darwin"?Te(n):ve(n):s==="uninstall"?n.platform==="win32"?Ee(n):n.platform==="darwin"?Ne(n):Se(n):s==="restart"?n.platform==="win32"?ke(n):n.platform==="darwin"?Ue(n):ye(n):s==="start"?n.platform==="win32"?Re(n):n.platform==="darwin"?Ae(n):Pe(n):s==="stop"?n.platform==="win32"?_e(n):n.platform==="darwin"?Le(n):pe(n):(i(`[runtime-bridge] \u672A\u77E5 service \u5B50\u547D\u4EE4: ${s}`),X(t),{handled:!0,exitCode:1})}function ee(e){return e?e.split(/\r?\n/).map(r=>r.trim()).filter(r=>/^\d+$/.test(r)).map(Number):[]}function Oe(e){try{if(e==="win32"){const t=w("powershell",["-NoProfile","-Command",`Get-CimInstance Win32_Process -Filter "Name='node.exe'" | Where-Object { $_.CommandLine -like '*aws-runtime-bridge*' -and $_.ProcessId -ne ${process.pid} } | ForEach-Object { $_.ProcessId }`],{encoding:"utf-8"}),i=Fe(e);return je([...ee(t.stdout),...i]).filter(s=>s!==process.pid)}const r=w("pgrep",["-f","aws-runtime-bridge"],{encoding:"utf-8"});return ee(r.stdout).filter(t=>t!==process.pid)}catch{return[]}}function Fe(e){if(e!=="win32")return[];try{const r=w("sc.exe",["query",m],{encoding:"utf-8",shell:!0,stdio:["ignore","pipe","ignore"]});if(r.status!==0||!r.stdout)return[];const t=r.stdout.match(/STATE\s*:\s*\d+\s+(\S+)/);if(!t)return[];const i=t[1];if(i!=="RUNNING"&&i!=="START_PENDING"&&i!=="STOP_PENDING")return[];const s=w("tasklist",["/FI","IMAGENAME eq awsb.exe","/FO","CSV","/NH"],{encoding:"utf-8",shell:!0,stdio:["ignore","pipe","ignore"]});return s.status!==0||!s.stdout?[]:s.stdout.split(/\r?\n/).map(n=>n.trim()).filter(n=>n.length>0).map(n=>{const u=n.match(/^"awsb\.exe","(\d+)"/i);return u?Number(u[1]):NaN}).filter(n=>Number.isFinite(n)&&n>0)}catch{return[]}}function je(e){const r=new Set,t=[];for(const i of e)r.has(i)||(r.add(i),t.push(i));return t}function He(e,r,t=1e4,i=250){if(r==="win32"){if(Be(e,r)){w("sc.exe",["stop",m],{stdio:"ignore",shell:!0}),Q(F,m);return}w("taskkill",["/PID",String(e),"/F","/T"],{stdio:"ignore"}),qe(Ge,e,r,t,i);return}w("kill",["-9",String(e)],{stdio:"ignore"})}function Ge(e,r){if(r!=="win32"||!Number.isFinite(e)||e<=0)return!0;try{const t=w("tasklist",["/FI",`PID eq ${e}`,"/NH"],{encoding:"utf-8",stdio:["ignore","pipe","ignore"]});return t.status!==0||!t.stdout?!0:!t.stdout.includes(String(e))}catch{return!0}}function qe(e,r,t,i=1e4,s=250){const n=Date.now()+i;for(;Date.now()<n;){if(e(r,t))return!0;O(s)}return e(r,t)}function Be(e,r){if(r!=="win32"||!Number.isFinite(e)||e<=0)return!1;try{const t=w("powershell",["-NoProfile","-Command",`(Get-CimInstance Win32_Process -Filter "ProcessId=${e}" -ErrorAction SilentlyContinue).Name`],{encoding:"utf-8",stdio:["ignore","pipe","ignore"]});return t.status!==0||!t.stdout?!1:/^awsb\.exe$/i.test(t.stdout.trim())}catch{return!1}}function Ve(e){if(!process.stdin.isTTY)return Promise.resolve("n");const r=te({input:process.stdin,output:process.stdout});return r.question(e).finally(()=>r.close())}function Ke(e,r=3,t=500){let i;for(let s=0;s<=r;s+=1)try{q(e,{recursive:!0,force:!0});return}catch(n){i=n instanceof Error?n:new Error(String(n)),s<r&&O(t*2**s)}throw i??new Error(`\u65E0\u6CD5\u5220\u9664\u76EE\u5F55: ${e}`)}function Ye(e){const r=l.join(e,"aws-runtime-bridge","node_modules"),t=l.join(r,"fsevents");if(g(t))try{q(t,{recursive:!0,force:!0})}catch{}const i=l.join(r,".package-lock.json");if(g(i))try{G(i,"utf-8").includes("fsevents")&&N(i)}catch{}}async function Je(e,r,t){const i=e.runCommand||I,s=e.platform||process.platform,n=e.findRunningBridgeProcesses||Oe,u=e.prompt||Ve,d=e.killBridgeProcess||He,a=e.globalModulePath||le;r("[runtime-bridge] \u6B63\u5728\u66F4\u65B0 aws-runtime-bridge \u5230\u6700\u65B0\u7248\u672C...");let c=!1;if(e.skipKill)c=!0,r("[runtime-bridge] \u5DF2\u6307\u5B9A --no-kill\uFF0C\u8DF3\u8FC7\u8FD0\u884C\u8FDB\u7A0B\u68C0\u6D4B\uFF0C\u5C06\u4EE5 --force \u65B9\u5F0F\u5B89\u88C5\u3002");else{const v=n(s).filter(h=>h!==process.pid);if(v.length>0)if(r(`[runtime-bridge] \u68C0\u6D4B\u5230 aws-runtime-bridge \u6B63\u5728\u8FD0\u884C (PID: ${v.join(", ")})\uFF0C\u66F4\u65B0\u65F6\u8FD9\u4E9B\u8FDB\u7A0B\u53EF\u80FD\u5360\u7528\u6587\u4EF6\u5BFC\u81F4\u8986\u76D6\u5931\u8D25\u3002`),e.assumeYes){r("[runtime-bridge] \u975E\u4EA4\u4E92\u6A21\u5F0F(--yes)\uFF0C\u81EA\u52A8\u5173\u95ED\u4E0A\u8FF0\u8FDB\u7A0B\u4EE5\u7EE7\u7EED\u66F4\u65B0...");for(const h of v)try{d(h,s),r(`[runtime-bridge] \u5DF2\u5173\u95ED\u8FDB\u7A0B PID: ${h}`)}catch(S){const p=S instanceof Error?S:new Error(String(S));t(`[runtime-bridge] \u5173\u95ED\u8FDB\u7A0B PID ${h} \u5931\u8D25: ${p.message}`)}}else{const h=(await u("\u662F\u5426\u5173\u95ED\u4E0A\u8FF0\u8FDB\u7A0B\u4EE5\u7EE7\u7EED\u66F4\u65B0? (y/N) ")).trim().toLowerCase();if(h==="y"||h==="yes")for(const S of v)try{d(S,s),r(`[runtime-bridge] \u5DF2\u5173\u95ED\u8FDB\u7A0B PID: ${S}`)}catch(p){const re=p instanceof Error?p:new Error(String(p));t(`[runtime-bridge] \u5173\u95ED\u8FDB\u7A0B PID ${S} \u5931\u8D25: ${re.message}`)}else c=!0,r("[runtime-bridge] \u5DF2\u9009\u62E9\u4E0D\u5173\u95ED\u8FDB\u7A0B\uFF0C\u5C06\u4EE5 --force \u65B9\u5F0F\u5F3A\u5236\u5B89\u88C5\uFF08\u82E5\u6587\u4EF6\u4ECD\u88AB\u5360\u7528\u53EF\u80FD\u4F1A\u6709\u8B66\u544A\uFF09\u3002")}}const f=a();if(f){const v=l.join(f,"aws-runtime-bridge");if(g(v)){r("[runtime-bridge] \u6E05\u7406\u65E7\u7248\u672C\u6B8B\u7559\u76EE\u5F55...");try{Ke(v)}catch(h){const S=h instanceof Error?h:new Error(String(h));t(`[runtime-bridge] \u6E05\u7406\u6B8B\u7559\u76EE\u5F55\u5931\u8D25\uFF08\u5C06\u5C1D\u8BD5\u7EE7\u7EED\u5B89\u88C5\uFF09: ${S.message}`),Ye(f)}}}const H=["install","-g","aws-runtime-bridge@latest","--omit=optional"];c&&H.push("--force");const P=i("npm",H);if(P.error)return t(`[runtime-bridge] \u66F4\u65B0\u5931\u8D25: ${P.error.message}`),{handled:!0,exitCode:1};if(P.status!==0)return t(`[runtime-bridge] \u66F4\u65B0\u5931\u8D25\uFF0Cnpm \u9000\u51FA\u7801: ${P.status??"unknown"}`),{handled:!0,exitCode:P.status??1};if(s==="win32"){const v=await Qe(e,r,t);if(v.exitCode!==0)return v}return r("[runtime-bridge] \u66F4\u65B0\u5B8C\u6210\u3002\u8BF7\u91CD\u65B0\u8FD0\u884C awsb -v \u67E5\u770B\u5F53\u524D\u7248\u672C\u3002"),{handled:!0,exitCode:0}}async function Qe(e,r,t){const i=e.runCommand||I,s=i("sc.exe",["query",m]);if(!o(s))return{handled:!0,exitCode:0};r("[runtime-bridge] \u68C0\u6D4B\u5230 Windows \u670D\u52A1\u5DF2\u6CE8\u518C\uFF0C\u6B63\u5728\u91CD\u5EFA\u670D\u52A1\u6587\u4EF6\uFF08daemon/winsw.exe\uFF09..."),i("sc.exe",["stop",m]);const n=i("sc.exe",["delete",m]);o(n)||t(`[runtime-bridge] \u5220\u9664\u65E7 SCM \u8BB0\u5F55\u5931\u8D25: ${n.error?.message??`\u9000\u51FA\u7801 ${n.status??"unknown"}`}\uFF08\u5C1D\u8BD5\u7EE7\u7EED\u5B89\u88C5\uFF09`);const u={stdout:r,stderr:t,runCommand:i,platform:"win32",serviceUnitPath:e.serviceUnitPath||A,executablePath:e.executablePath||z(),windowsServiceManager:e.windowsServiceManager};try{return(await j(u)).exitCode!==0?(t("[runtime-bridge] \u91CD\u5EFA Windows \u670D\u52A1\u6587\u4EF6\u5931\u8D25\u3002\u5305\u5DF2\u66F4\u65B0\uFF0C\u8BF7\u624B\u52A8\u6267\u884C `awsb service uninstall && awsb service install` \u4FEE\u590D\u670D\u52A1\u3002"),{handled:!0,exitCode:0}):(r("[runtime-bridge] Windows \u670D\u52A1\u6587\u4EF6\u5DF2\u91CD\u5EFA\u3002"),{handled:!0,exitCode:0})}catch(d){const a=d instanceof Error?d:new Error(String(d));return t(`[runtime-bridge] \u91CD\u5EFA Windows \u670D\u52A1\u6587\u4EF6\u5F02\u5E38: ${a.message}\u3002\u5305\u5DF2\u66F4\u65B0\uFF0C\u8BF7\u624B\u52A8\u6267\u884C \`awsb service uninstall && awsb service install\` \u4FEE\u590D\u670D\u52A1\u3002`),{handled:!0,exitCode:0}}}function ze(e,r,t){const s=(e.argv||process.argv.slice(2)).slice(1).some(a=>a==="--follow"||a==="-f"),n=e.platform||process.platform,u=e.runCommand||I,d=e.serviceUnitPath||A;if(n==="linux"){if(!g(d))return t("[runtime-bridge] awsb \u670D\u52A1\u5C1A\u672A\u5B89\u88C5\uFF08awsb service install\uFF09\uFF0C\u65E0\u65E5\u5FD7\u53EF\u67E5\u770B\u3002"),{handled:!0,exitCode:1};const a=["-u",b];s?a.push("-f"):a.push("-n","200","--no-pager");const c=u("journalctl",a);return c.error?(t(`[runtime-bridge] \u8BFB\u53D6\u65E5\u5FD7\u5931\u8D25: ${c.error.message}`),{handled:!0,exitCode:1}):{handled:!0,exitCode:c.status??0}}if(n==="win32"){const a=e.windowsServiceLogPath||J;if(!g(a))return t(`[runtime-bridge] \u5C1A\u672A\u751F\u6210\u65E5\u5FD7\u6587\u4EF6: ${a}\u3002\u8BF7\u5148\u6267\u884C \`awsb service install\` \u5E76\u8FD0\u884C\u670D\u52A1\u3002`),{handled:!0,exitCode:1};const c=`Get-Content -Encoding UTF8 -Tail 200 "${a}"`+(s?" -Wait":""),f=u("powershell",["-NoProfile","-Command",c]);return f.error?(t(`[runtime-bridge] \u8BFB\u53D6\u65E5\u5FD7\u5931\u8D25: ${f.error.message}`),{handled:!0,exitCode:1}):{handled:!0,exitCode:f.status??0}}if(n==="darwin"){const a=e.launchdLogPath||M;if(!g(a))return t(`[runtime-bridge] \u5C1A\u672A\u751F\u6210\u65E5\u5FD7\u6587\u4EF6: ${a}\u3002\u8BF7\u5148\u6267\u884C \`awsb service install\` \u5E76\u8FD0\u884C\u670D\u52A1\u3002`),{handled:!0,exitCode:1};const f=u("tail",s?["-f",a]:["-n","200",a]);return f.error?(t(`[runtime-bridge] \u8BFB\u53D6\u65E5\u5FD7\u5931\u8D25: ${f.error.message}`),{handled:!0,exitCode:1}):{handled:!0,exitCode:f.status??0}}return t("[runtime-bridge] awsb log \u4EC5\u652F\u6301 Linux systemd\u3001Windows \u670D\u52A1\u4E0E macOS launchd \u73AF\u5883\u3002"),{handled:!0,exitCode:1}}async function dr(e={}){const r=e.argv||process.argv.slice(2),t=r[0],i=e.stdout||me,s=e.stderr||fe;if(t===void 0)return{handled:!1,exitCode:0};if(t==="-h"||t==="--help"||t==="help")return Ce(i),{handled:!0,exitCode:0};if(ge(t))return i(`aws-runtime-bridge ${ce(e.packageRoot)}`),{handled:!0,exitCode:0};if(t==="update"){if(K())return s("[runtime-bridge] \u684C\u9762\u7248\u4E0D\u652F\u6301 awsb update\uFF0C\u8BF7\u901A\u8FC7\u684C\u9762\u5E94\u7528\u7684\u66F4\u65B0\u63D0\u793A\u5347\u7EA7\u3002"),{handled:!0,exitCode:1};const n=r.includes("--yes")||r.includes("-y"),u=r.includes("--no-kill"),d=n||u?{...e,assumeYes:n,skipKill:u}:e;return await Je(d,i,s)}if(t==="config"){const n=r[1];if(n==="example"||n==="minimal"||n==="--minimal"||n==="-m")return{handled:!0,exitCode:await(e.configureExample||ae)()==="created"?0:1};const d=await(e.configure||se)();return{handled:!0,exitCode:d==="configured"||d==="created"?0:1}}return t==="pair"?await xe(r,e,i,s):t==="service"?await Me(r,e,i,s):t==="log"?ze(e,i,s):(s(`[runtime-bridge] \u672A\u77E5\u547D\u4EE4: ${t}`),s("[runtime-bridge] \u8BF7\u8FD0\u884C `awsb --help` \u67E5\u770B\u652F\u6301\u7684\u547D\u4EE4\u3002"),{handled:!0,exitCode:1})}export{be as createLaunchdPlistContent,we as createSystemdUnitContent,Oe as defaultFindRunningBridgeProcesses,He as defaultKillBridgeProcess,Ge as defaultProcessIsGone,dr as handleCliCommand,ce as readPackageVersion,Ke as removeDirWithRetry,Ye as removeUpdateFseventsResidue,qe as waitForProcessGone};
|
|
7
7
|
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
export interface ConnectionKeyRotationResult {
|
|
8
|
+
status: number;
|
|
9
|
+
body: Record<string, unknown>;
|
|
10
|
+
}
|
|
11
|
+
export interface ConnectionKeyRotationTarget {
|
|
12
|
+
|
|
13
|
+
serverUrl?: string;
|
|
14
|
+
|
|
15
|
+
instanceId?: string;
|
|
16
|
+
|
|
17
|
+
credentialId?: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
export declare function rotateConnectionKeyFromServer(requestedKey: unknown, target?: ConnectionKeyRotationTarget): Promise<ConnectionKeyRotationResult>;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{replaceConfiguredConnectionKey as s}from"./auto-register.js";async function i(n,o){const e=String(n||"").trim();if(!e)return{status:400,body:{ok:!1,error:"connectionKey is required"}};if(e.length<8||e.length>256||/\s/.test(e))return{status:400,body:{ok:!1,error:"invalid connectionKey format"}};if(!String(o?.serverUrl||"").trim())return{status:400,body:{ok:!1,error:"serverUrl is required to rotate a target connectionKey"}};try{const r=await s(e,o);return{status:200,body:{ok:!0,rotated:r.rotated,envOverrideWarning:r.envOverrideWarning}}}catch(r){const t=r;return(t.message||"").startsWith("\u65E0\u6CD5\u552F\u4E00\u5B9A\u4F4D")?{status:400,body:{ok:!1,error:t.message}}:{status:500,body:{ok:!1,error:t.message||"rotate connection key failed"}}}}export{i as rotateConnectionKeyFromServer};
|
|
2
|
+
|
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
2
16
|
import type { FSWatcher } from "node:fs";
|
|
3
17
|
import { RingBuffer } from "./ring-buffer.js";
|
|
4
18
|
export type DebugItemKind = "mcp" | "plugin";
|
|
@@ -20,6 +34,10 @@ export interface McpHotMounter {
|
|
|
20
34
|
sessions: number;
|
|
21
35
|
}>;
|
|
22
36
|
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
23
41
|
getMcpServerStderr?(agentId: string, name: string, tail: number): string[];
|
|
24
42
|
}
|
|
25
43
|
|
|
@@ -64,6 +82,11 @@ export interface DebugMountResult {
|
|
|
64
82
|
error?: string;
|
|
65
83
|
}
|
|
66
84
|
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
|
|
67
90
|
export declare function assertWithinWorkspace(workspacePath: string | undefined, targetPath: string): {
|
|
68
91
|
ok: true;
|
|
69
92
|
resolved: string;
|
|
@@ -73,10 +96,17 @@ export declare function assertWithinWorkspace(workspacePath: string | undefined,
|
|
|
73
96
|
};
|
|
74
97
|
export declare function isValidDebugName(name: string): boolean;
|
|
75
98
|
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
76
102
|
export declare function debugMountPlugin(agentId: string, workspacePath: string | undefined, pluginPath: string, hotMounter?: McpHotMounter): Promise<DebugMountResult>;
|
|
77
103
|
|
|
78
104
|
export declare function debugUnmountPlugin(agentId: string, name: string): Promise<DebugMountResult>;
|
|
79
105
|
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
|
|
80
110
|
export declare function debugMountMcp(agentId: string, workspacePath: string | undefined, mcpPath: string, hotMounter: McpHotMounter, nameOverride?: string): Promise<DebugMountResult>;
|
|
81
111
|
|
|
82
112
|
export declare function debugUnmountMcp(agentId: string, name: string, hotMounter: McpHotMounter): Promise<DebugMountResult>;
|
|
@@ -92,11 +122,21 @@ export interface DebugMountListItem {
|
|
|
92
122
|
mountedAt: number;
|
|
93
123
|
}
|
|
94
124
|
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
|
|
95
130
|
export declare function listDebugMounts(agentId: string): {
|
|
96
131
|
mcp: DebugMountListItem[];
|
|
97
132
|
plugin: DebugMountListItem[];
|
|
98
133
|
};
|
|
99
134
|
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
100
140
|
export declare function getDebugItemLogs(agentId: string, kind: DebugItemKind, name: string, tail?: number, hotMounter?: McpHotMounter): Promise<{
|
|
101
141
|
ok: boolean;
|
|
102
142
|
kind: DebugItemKind;
|
|
@@ -119,4 +159,13 @@ export interface DebugPackageResult {
|
|
|
119
159
|
error?: string;
|
|
120
160
|
}
|
|
121
161
|
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
|
|
122
171
|
export declare function packageDebugItem(workspacePath: string | undefined, itemPath: string, kind: DebugItemKind | "skill"): Promise<DebugPackageResult>;
|
|
@@ -1,4 +1,50 @@
|
|
|
1
1
|
|
|
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
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
2
48
|
import { type ACodeBuiltInToolLike } from "../desktop/built-in-desktop-tools.js";
|
|
3
49
|
import { DesktopMcpConnection, type DesktopMcpToolInfo } from "../desktop/desktop-mcp-client.js";
|
|
4
50
|
|
|
@@ -25,16 +71,72 @@ export interface DesktopAgentAiInfo {
|
|
|
25
71
|
baseURL?: string;
|
|
26
72
|
apiKey?: string;
|
|
27
73
|
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
28
78
|
supportsImage?: boolean;
|
|
29
79
|
}
|
|
30
80
|
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
31
86
|
export declare function resolveDesktopMcpBinary(): Promise<string | null>;
|
|
32
87
|
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
|
|
33
96
|
export declare function startDesktopMcpManager(agentId?: string): Promise<DesktopMcpManagerState | null>;
|
|
34
97
|
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
|
|
35
107
|
export declare function getDesktopTools(agentId: string | undefined, agentAi?: DesktopAgentAiInfo): Promise<ACodeBuiltInToolLike[]>;
|
|
36
108
|
|
|
37
|
-
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
export declare function forwardDesktopToolGuarded(agentId: string, name: string, args: Record<string, unknown>, baseForward: (name: string, args: Record<string, unknown>) => Promise<string>): Promise<string>;
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
export declare function getDesktopToolsIfReady(agentId?: string): ACodeBuiltInToolLike[];
|
|
38
140
|
|
|
39
141
|
export declare function disposeDesktopMcpManager(): Promise<void>;
|
|
40
142
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{access as
|
|
1
|
+
import{access as g,constants as U}from"node:fs/promises";import{join as y,resolve as N}from"node:path";import{createBuiltInDesktopTools as v}from"../desktop/built-in-desktop-tools.js";import{DESKTOP_INPUT_TOOLS as R,describeDesktopAction as h,emitDesktopAction as _,isHumanControlActive as $,isPaused as x}from"../desktop/desktop-control.js";import{DesktopMcpConnection as F}from"../desktop/desktop-mcp-client.js";import{logger as K}from"../utils/logger.js";import{DESKTOP_FEATURE_KEY as L,isFeatureEnabled as W}from"./instance-features.js";import{buildAgentMetaEnv as B}from"./mcp-env-injector.js";import{getPanelEnvVars as H,getAgentMeta as V}from"./panel-env.js";const f=K.child("desktop-mcp");let s=null,p=null,c=null,d,k="none";const b=process.platform==="win32"?"nuphus-mcp.exe":"nuphus-mcp",j=12e4,Y=6e4;function z(){const t=process.env.AWS_DESKTOP_MCP_TIMEOUT_MS;if(t){const e=parseInt(t,10);if(Number.isFinite(e)&&e>0)return e}return j}function G(){const t=process.env.AWS_DESKTOP_MCP_RETRY_BACKOFF_MS;if(t){const e=parseInt(t,10);if(Number.isFinite(e)&&e>=0)return e}return Y}async function I(){const t=process.env.AWS_DESKTOP_MCP_BIN;if(t){const o=N(t);return await M(o)?o:null}const e=y(process.cwd(),".desktop-mcp","bin",b);return await M(e)?e:null}async function M(t){try{return await g(t,U.F_OK),!0}catch{return!1}}function J(){const t={},e="AWS_DESKTOP_MCP_ENV_";for(const[o,n]of Object.entries(process.env))o.startsWith(e)&&n!==void 0&&(t[o.slice(e.length)]=n);return t}function P(t){const e={...J(),...H(t),...B(V(t))},o=e.NUPHUS_MCP_VISION_API_KEY!==void 0||e.NUPHUS_MCP_VISION_MODEL!==void 0;return!o&&d?.apiKey&&d.supportsImage===!0?(k="agent-fallback",e.NUPHUS_MCP_VISION_API_KEY=d.apiKey,e.NUPHUS_MCP_VISION_MODEL=d.model,d.baseURL&&(e.NUPHUS_MCP_VISION_BASE_URL=d.baseURL),f.info(`vision model fallback: reusing agent model ${d.model} for desktop_vision`)):o?k="panel-env":k="none",e}function T(t){return Object.keys(t).sort().map(e=>`${e}=${t[e]}`).join("\0")}async function O(t){if(s){if(s.connection.isConnected())return s;await m(s.connection),s=null}if(p)return p;if(c){if(c.reason==="binary-missing"||Date.now()-c.at<G())return null;c=null}return p=(async()=>{const e=await I();if(!e)return c={reason:"binary-missing",message:`nuphus-mcp binary not found. Set AWS_DESKTOP_MCP_BIN or place it at ${y(process.cwd(),".desktop-mcp","bin",b)}`,at:Date.now()},w(`desktop tools unavailable: ${c.message}`),null;const o=P(t),n=new F({command:e,env:o,onUnexpectedClose:()=>{w("nuphus-mcp process exited unexpectedly; will restart on next use"),s?.connection===n&&(s=null)}});try{const r=await n.start(),a=z();c=null;const i={connection:n,tools:r,binaryPath:e,envSig:T(o),ownerAgentId:t,forwarder:(u,l)=>X(n,u,l,a,t)};return s=i,w(`nuphus-mcp started (${e}), ${r.filter(u=>u.name.startsWith("desktop_")).length} desktop tools available`),i}catch(r){return await m(n),c={reason:"start-failed",message:r.message,at:Date.now()},C(`nuphus-mcp start failed: ${c.message}`),null}finally{p=null}})(),p}async function X(t,e,o,n,r){try{return await t.callTool(e,o,n)}catch(a){if(t.isConnected())throw a;C(`nuphus-mcp connection lost during ${e}: ${a.message}; restarting`),s?.connection===t&&(s=null),await m(t);const i=await O(r);if(!i)throw new Error(`nuphus-mcp restart failed: ${c?.message??"unknown"}`);return i.connection.callTool(e,o,n)}}async function ut(t,e){if(!t)return[];e?.model&&(d=e);const o=P(t),n=T(o);s&&s.connection.isConnected()&&s.envSig!==n&&(w("nuphus-mcp env changed; restarting to apply new env"),await tt());const r=await O(t);return r?v({tools:r.tools,agentId:t,forwarder:(a,i)=>E(t,a,i,(u,l)=>r.forwarder(u,l)),internalForwarder:(a,i)=>r.forwarder(a,i)}):[]}const D="nuphus-mcp tool error:",q="desktop control is PAUSED by the human operator (kill switch). Stop calling desktop_* tools immediately and inform the user; the operator will resume control when ready.",Q="desktop input is currently held by the human operator via remote desktop; AI input actions are suspended (read-only tools still work). Wait and retry later, or ask the user to release desktop control.";async function E(t,e,o,n){if(!W(t,L))return f.warn(`tool ${e} blocked: desktop capability disabled for ${t}`),"desktop capability is disabled for this agent (toggled off while tools were exposed); stop calling desktop_* tools";if(x(t))return f.warn(`tool ${e} blocked: desktop control paused (kill switch) for ${t}`),_(t,e,h(t,e,o),"rejected",{reason:"paused"}),q;if($(t)&&R.has(e))return f.warn(`tool ${e} blocked: human operator holds desktop control for ${t}`),_(t,e,h(t,e,o),"rejected",{reason:"human-control"}),Q;const r=h(t,e,o),i=r.action==="move"?null:_(t,e,r,"started"),u=Date.now();try{const l=await n(e,o),S=l.startsWith(D);return i&&_(t,e,r,S?"error":"done",{id:i.id,durationMs:Date.now()-u,...S&&{error:A(l.slice(D.length))}}),l}catch(l){throw i&&_(t,e,r,"error",{id:i.id,durationMs:Date.now()-u,error:A(l.message)}),l}}function A(t,e=200){const o=t.trim();return o.length<=e?o:`${o.slice(0,e)}\u2026`}function pt(t){const e=s;if(!e||!e.connection.isConnected())return Z.map(n=>({kind:"builtin",toolName:n,exposedName:n,description:`${n}\uFF08\u684C\u9762\u81EA\u52A8\u5316\u5DE5\u5177\uFF0Cnuphus-mcp \u672A\u8FD0\u884C\uFF09\u3002\u5206\u914D desktop \u5206\u7C7B\u540E\u6309\u9700\u542F\u52A8\u540E\u7AEF\uFF0C\u5177\u4F53\u5DE5\u5177\u4EE5\u542F\u52A8\u540E\u76EE\u5F55\u4E3A\u51C6\u3002`,inputSchema:{type:"object",properties:{}},category:"desktop",async execute(){const r=`${n} is not ready: nuphus-mcp backend is not running. Allocate the desktop catalog to lazily start it, then retry.`;return t?E(t,n,{},async()=>r):r}}));const o=e;return v({tools:o.tools,agentId:t,forwarder:(n,r)=>t?E(t,n,r,(a,i)=>o.forwarder(a,i)):o.forwarder(n,r),internalForwarder:(n,r)=>o.forwarder(n,r)})}const Z=["desktop_screenshot","desktop_window_screenshot","desktop_perceive","desktop_vision","desktop_input","desktop_mouse","desktop_mouse_drag","desktop_screen_size","desktop_clipboard_write","desktop_clipboard_clean","desktop_config","desktop_uia_tree","desktop_uia_click","desktop_window_activate","desktop_window_info","desktop_window_move","desktop_window_resize","desktop_windows_list"];async function tt(){const t=s;if(s=null,c=null,p){try{await p}catch{}p=null}t&&(await m(t.connection),w("nuphus-mcp stopped"))}function dt(){return{started:s!==null,binaryPath:s?.binaryPath??null,toolCount:s?s.tools.filter(t=>t.name.startsWith("desktop_")).length:0,failure:c,visionSource:k}}async function m(t){try{await t.close()}catch{}}function w(t){f.info(t)}function C(t){f.warn(t)}export{tt as disposeDesktopMcpManager,E as forwardDesktopToolGuarded,dt as getDesktopMcpStatus,ut as getDesktopTools,pt as getDesktopToolsIfReady,I as resolveDesktopMcpBinary,O as startDesktopMcpManager};
|
|
2
2
|
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
2
7
|
import { type BridgeEventPayload } from "./agent-event-store.js";
|
|
3
8
|
import { type RingBufferEntry } from "./ring-buffer.js";
|
|
4
9
|
export interface RuntimeCallbackAuthOptions {
|
|
@@ -15,10 +20,20 @@ export interface PushStatEntry {
|
|
|
15
20
|
lastError?: string;
|
|
16
21
|
}
|
|
17
22
|
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
18
26
|
export declare function scheduleEventPush(agentId: string, _entry: RingBufferEntry<BridgeEventPayload>, _authOptions?: RuntimeCallbackAuthOptions): Promise<void>;
|
|
19
27
|
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
20
31
|
export declare function startHeartbeatScheduler(): void;
|
|
21
32
|
|
|
33
|
+
|
|
34
|
+
|
|
22
35
|
export declare function stopHeartbeatScheduler(): void;
|
|
23
36
|
|
|
37
|
+
|
|
38
|
+
|
|
24
39
|
export declare function getAllPushStats(): PushStatEntry[];
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
2
9
|
export interface SnapshotIndexEntry {
|
|
3
10
|
|
|
4
11
|
backupName: string;
|
|
@@ -44,6 +51,13 @@ export interface SnapshotListItem {
|
|
|
44
51
|
totalBytes: number;
|
|
45
52
|
}
|
|
46
53
|
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
47
61
|
export declare function createSnapshot(params: {
|
|
48
62
|
workspacePath: string;
|
|
49
63
|
snapshotId?: string;
|
|
@@ -51,19 +65,33 @@ export declare function createSnapshot(params: {
|
|
|
51
65
|
triggerType?: string;
|
|
52
66
|
}): Promise<CreateSnapshotResult>;
|
|
53
67
|
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
54
76
|
export declare function restoreSnapshot(params: {
|
|
55
77
|
workspacePath: string;
|
|
56
78
|
snapshotKey: string;
|
|
57
79
|
preRestoreBackup?: boolean;
|
|
58
80
|
}): Promise<RestoreSnapshotResult>;
|
|
59
81
|
|
|
82
|
+
|
|
83
|
+
|
|
60
84
|
export declare function listSnapshots(workspacePath: string): Promise<SnapshotListItem[]>;
|
|
61
85
|
|
|
86
|
+
|
|
87
|
+
|
|
62
88
|
export declare function deleteSnapshot(snapshotKey: string): Promise<{
|
|
63
89
|
ok: boolean;
|
|
64
90
|
error?: string;
|
|
65
91
|
}>;
|
|
66
92
|
|
|
93
|
+
|
|
94
|
+
|
|
67
95
|
export declare function getSnapshotRootPath(): string;
|
|
68
96
|
export interface SnapshotRetentionSweepResult {
|
|
69
97
|
retentionDays: number | null;
|
|
@@ -73,4 +101,9 @@ export interface SnapshotRetentionSweepResult {
|
|
|
73
101
|
bytesFreed: number;
|
|
74
102
|
}
|
|
75
103
|
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
|
|
76
109
|
export declare function sweepExpiredSnapshots(retentionDays: number | null): Promise<SnapshotRetentionSweepResult>;
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
2
7
|
export interface GitIgnoreRule {
|
|
3
8
|
pattern: string;
|
|
4
9
|
negated: boolean;
|
|
@@ -8,5 +13,9 @@ export interface GitIgnoreRule {
|
|
|
8
13
|
}
|
|
9
14
|
export declare function parseGitIgnoreRules(content: string): GitIgnoreRule[];
|
|
10
15
|
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
11
20
|
export declare function loadGitIgnoreRules(rootPath: string): Promise<GitIgnoreRule[]>;
|
|
12
21
|
export declare function isIgnoredByGitIgnore(relativePath: string, isDirectory: boolean, rules: GitIgnoreRule[]): boolean;
|
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
2
8
|
export interface AdapterInstanceAiConfig {
|
|
3
9
|
model?: string;
|
|
4
10
|
baseURL?: string;
|
|
@@ -25,6 +31,9 @@ interface PrepareResult {
|
|
|
25
31
|
perInstanceConfigPath: string;
|
|
26
32
|
}
|
|
27
33
|
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
28
37
|
export declare function redactForLog(obj: Record<string, unknown>): Record<string, unknown>;
|
|
29
38
|
|
|
30
39
|
export declare function getAgentMcpExtraFilePath(agentId: string): string;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
1
|
+
import l from"node:fs/promises";import M from"node:path";import{getBridgeInstanceConfigFile as D,getBridgeInstanceMcpExtraFile as _,getBridgeTemplateConfigFile as U}from"../config.js";import{getInstanceAiConfigDebugLogger as k}from"../utils/instance-ai-config-debug-logger.js";import{getAgentOwner as K}from"./agent-ownership.js";import{McpDeployManager as P}from"./mcp-deploy.js";import{injectEffectiveEnvIntoMcpServers as x,isBuiltinMcpName as N}from"./mcp-env-injector.js";import{getPanelEnvVars as j,getAgentMeta as B}from"./panel-env.js";import{getUserAiConfigFile as J,isLegacyFallbackDisabled as T}from"./user-scope.js";const $=new Set(["apiKey","api_key","apikey","key","secret","token","password"]);function Y(e){const r={...e};for(const t of Object.keys(r))if($.has(t)){const a=r[t];typeof a=="string"&&a.length>0&&(r[t]=a.length>8?`${a.slice(0,4)}...${a.slice(-4)}`:"***")}else typeof r[t]=="object"&&r[t]!==null&&(r[t]=Y(r[t]));return r}function V(){return{...process.env.ACODE_MODEL?{model:process.env.ACODE_MODEL}:{},...process.env.ACODE_BASE_URL?{baseURL:process.env.ACODE_BASE_URL}:{},...process.env.ACODE_API_KEY?{apiKey:process.env.ACODE_API_KEY}:{},...process.env.ACODE_EFFORT?{effort:process.env.ACODE_EFFORT}:{}}}async function H(e){try{const r=await l.readFile(e,"utf-8"),o=JSON.parse(r).provider?.default,n=o?.options;return{...o?.model?{model:o.model}:{},...n?.baseURL||n?.baseUrl?{baseURL:n.baseURL||n.baseUrl}:{},...n?.apiKey?{apiKey:n.apiKey}:{}}}catch{return{}}}function L(e,r,t,a){return r!==void 0?"api":t!==void 0?"env":a!==void 0?"file":"default"}function w(e){return _(e)}async function q(e){try{const r=await l.readFile(w(e),"utf-8"),t=JSON.parse(r);return t.servers&&typeof t.servers=="object"?t.servers:{}}catch{return{}}}function ae(e){return w(e)}async function ne(e){const r=K(e.agentId);let a=r?J(r):"";if(!a)a=U();else try{await l.access(a)}catch{T()||(a=U())}const o=D(e.agentId),n=e.apiOverrides??{},s=V(),f=await H(a),m=n.model??s.model??f.model,v=n.baseURL??s.baseURL??f.baseURL,b=n.apiKey??s.apiKey??f.apiKey,E=n.effort??s.effort,g={};m&&(g.model=m),v&&(g.baseURL=v),b&&(g.apiKey=b),E&&(g.effort=E);const S={model:L("model",n.model,s.model,f.model),baseURL:L("baseURL",n.baseURL,s.baseURL,f.baseURL),apiKey:L("apiKey",n.apiKey,s.apiKey,f.apiKey),effort:L("effort",n.effort,s.effort,void 0)},I=k();try{await l.mkdir(M.dirname(o),{recursive:!0});let d={};try{const i=await l.readFile(a,"utf-8");d=JSON.parse(i)}catch{}const c=JSON.parse(JSON.stringify(d)),A=c.provider??{},C=A.default??{},p=C.options??{};m&&(p.model=m),v&&(p.baseURL=v),b&&(p.apiKey=b),E&&(p.effort=E),C.options=p,A.default=C,c.provider=A;try{const i=c.mcpServers??{},R=K(e.agentId),u=R?P.forScope(R):null,O=u?u.resolveEnabledMcp(e.agentId,i):i,F=await q(e.agentId);for(const[y,h]of Object.entries(F))N(y)||(O[y]=h);x(O,j(e.agentId),{resolvePackageDir:y=>u&&u.isPackageHealthy(y)?u.packageDir(y):void 0,agentMeta:B(e.agentId)}),c.mcpServers=O}catch(i){I.log({level:"error",category:"apply",message:`MCP \u80FD\u529B\u8FC7\u6EE4/\u79C1\u6709\u5408\u5E76\u5931\u8D25\uFF08fail-open\uFF0C\u4FDD\u6301\u539F\u914D\u7F6E\uFF09: ${i instanceof Error?i.message:String(i)}`,source:"bridge",agentId:e.agentId,sessionId:e.sessionId})}await l.writeFile(o,JSON.stringify(c,null,2),"utf-8"),I.log({level:"info",category:"apply",message:"per-instance acode.json \u5DF2\u5199\u5165",source:"bridge",agentId:e.agentId,sessionId:e.sessionId,details:{perInstanceConfigPath:o,source:S}})}catch(d){const c=d instanceof Error?d.message:String(d);I.log({level:"error",category:"apply",message:`per-instance acode.json \u5199\u5165\u5931\u8D25: ${c}`,source:"bridge",agentId:e.agentId})}return{instanceConfig:{config:g,source:S},perInstanceConfigPath:o}}export{ae as getAgentMcpExtraFilePath,ne as prepareAcodeInstanceConfig,Y as redactForLog};
|
|
2
2
|
|