aws-runtime-bridge 1.9.175 → 1.9.179
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +188 -0
- package/README.md +61 -2
- package/dist/adapter/AcodeSdkAdapter.d.ts +369 -0
- package/dist/adapter/AcodeSdkAdapter.js +2 -2
- 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 +182 -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 +122 -0
- package/dist/routes/terminal.js +16 -16
- 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 +21 -21
- 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 +179 -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
package/dist/routes/lsp.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import $ from"node:path";import u,{WebSocketServer as b}from"ws";import{isRuntimeTokenValid as y}from"../middleware/auth.js";import{isUpgradeAllowed as A}from"../services/access-control.js";import{buildLaunchSpec as g,checkProviderAvailability as T,getProvider as f,resolveLanguageId as E,resolveProviderForFile as L}from"../services/lsp/provider-registry.js";import{buildUriRewriteRules as R,canonicalizePath as v,invertRules as N,rewriteMessageUris as h}from"../services/lsp/uri-rewrite.js";import{LspProcessBridge as z}from"../services/lsp-stdio-bridge.js";import{createLogger as O}from"../utils/logger.js";const a=O("lsp-ws"),M=6e4,_=Number(process.env.AWS_LSP_MAX_PROCESSES||6),d=new Map;function W(e){return $.resolve(e)}function m(e){return[W(e.workspacePath),e.providerId||"typescript",e.clientId||"default"].join("::")}function C(e){const r=e.toString("utf8");if(!r.trim())return null;try{return JSON.parse(r)}catch{return null}}function w(e){e.idleTimer&&(clearTimeout(e.idleTimer),e.idleTimer=null)}function F(e){w(e),e.idleTimer=setTimeout(()=>{if(!(e.ws!==null&&e.ws.readyState===u.OPEN)){for(const[i,o]of d)if(o===e){d.delete(i);break}e.bridge.dispose(),a.info(`[lsp-ws] \u7A7A\u95F2\u56DE\u6536\u8BED\u8A00\u670D\u52A1 provider=${e.providerId}`)}},M)}function U(){for(;d.size>_;){let e=null,r=Number.POSITIVE_INFINITY;for(const[o,t]of d)t.ws!==null&&t.ws.readyState===u.OPEN||t.lastActiveAt<r&&(r=t.lastActiveAt,e=o);if(!e)break;const i=d.get(e);d.delete(e),i?.bridge.dispose(),a.info(`[lsp-ws] \u8FDB\u7A0B\u4E0A\u9650\u6DD8\u6C70 provider=${i?.providerId} key=${e}`)}}function P(e,r,i,o=[]){const t=new z({workspacePath:r.workspacePath,language:r.language,providerId:r.providerId,launch:i},{onMessage:s=>{const n=d.get(e)?.ws;if(n&&n.readyState===u.OPEN)try{const l=o.length>0?h(s,o):s;n.send(JSON.stringify(l))}catch(l){a.warn(`[lsp-ws] \u8F6C\u53D1 server \u6D88\u606F\u5931\u8D25: ${l.message}`)}},onExit:()=>{d.get(e)?.bridge===t&&d.delete(e)},onError:s=>{a.warn(`[lsp-ws] \u8BED\u8A00\u670D\u52A1\u9519\u8BEF provider=${r.providerId} ${r.workspacePath}: ${s.message}`)}});return t.start(),t}async function B(e,r,i){const o=await g(i,{workspacePath:r.workspacePath,filePath:r.filePath});if(!o){const p=T(i);return a.warn(`[lsp-ws] provider \u4E0D\u53EF\u7528 provider=${i.id} reason=${p.reason??"unknown"}`),null}const t=await v(r.workspacePath),s=await v(r.filePath),n=R(r.workspacePath,t,r.filePath,s),l=N(n);return n.length>0&&a.info(`[lsp-ws] URI \u89C4\u8303\u5316\u542F\u7528 workspace=${r.workspacePath} -> ${t}`),U(),{bridge:P(e,r,o,l),ws:null,idleTimer:null,initialized:!1,lastActiveAt:Date.now(),providerId:i.id,toServerRules:n,toClientRules:l}}function D(e){const r=e.searchParams.get("workspacePath")||"",i=e.searchParams.get("file")||"",o=e.searchParams.get("language")||"",t=(e.searchParams.get("provider")||"").trim().toLowerCase(),s=(e.searchParams.get("clientId")||"default").trim()||"default";if(!r||!i)return{ctx:{workspacePath:r,filePath:i,language:"plaintext",providerId:"",clientId:s},provider:null,error:"workspacePath and file are required"};let n=t?f(t):null;if(n||(n=L(i)),n||(o==="typescript"||o==="javascript")&&(n=f("typescript")),!n)return{ctx:{workspacePath:r,filePath:i,language:o||"plaintext",providerId:"",clientId:s},provider:null,error:`no lsp provider for file: ${i}`};const l=E(n,i);return{ctx:{workspacePath:r,filePath:i,language:l,providerId:n.id,clientId:s},provider:n}}function J(e,r,i){const o=m(r),t=d.get(o);if(!t){B(o,r,i).then(s=>{if(!s){e.close(1011,"lsp provider unavailable");return}d.set(o,s),I(s,e,r)}).catch(s=>{a.warn(`[lsp-ws] \u521B\u5EFA\u8BED\u8A00\u670D\u52A1\u5931\u8D25 provider=${r.providerId}: ${s.message}`),e.close(1011,"lsp provider start failed")});return}I(t,e,r)}function I(e,r,i){const o=m(i);w(e);const t=e;t.ws&&t.ws!==r&&t.ws.readyState===u.OPEN&&(a.info(`[lsp-ws] \u6324\u5360\u65E7\u8FDE\u63A5 workspace=${i.workspacePath} provider=${i.providerId}`),t.ws.close(1e3,"superseded by new lsp connection")),t.ws=r,t.lastActiveAt=Date.now(),r.on("message",s=>{t.lastActiveAt=Date.now();const n=C(s);if(n===null){a.warn(`[lsp-ws] \u5FFD\u7565\u65E0\u6CD5\u89E3\u6790\u7684\u6D88\u606F: ${s.toString("utf8").slice(0,200)}`);return}const l=h(n,t.toServerRules);if(l.method==="initialize"){if(t.initialized){a.info(`[lsp-ws] \u590D\u7528\u8FDB\u7A0B\u6536\u5230\u4E8C\u6B21 initialize\uFF0C\u91CD\u5EFA\u8BED\u8A00\u670D\u52A1\u8FDB\u7A0B workspace=${i.workspacePath} provider=${i.providerId}`);const p=t.bridge;g(f(i.providerId)??f("typescript"),{workspacePath:i.workspacePath,filePath:i.filePath}).then(c=>{if(!c){r.close(1011,"lsp provider unavailable");return}p.dispose(),t.bridge=P(o,i,c,t.toClientRules),t.bridge.send(l)}).catch(c=>{a.warn(`[lsp-ws] \u91CD\u5EFA\u8BED\u8A00\u670D\u52A1\u5931\u8D25: ${c.message}`),r.close(1011,"lsp provider restart failed")});return}t.initialized=!0}t.bridge.send(l)}),r.on("close",()=>{t.ws===r&&(t.ws=null),F(t)}),r.on("error",s=>{a.warn(`[lsp-ws] \u8FDE\u63A5\u5F02\u5E38 workspace=${i.workspacePath} provider=${i.providerId}: ${s.message}`)}),a.info(`[lsp-ws] \u8FDE\u63A5\u5EFA\u7ACB workspace=${i.workspacePath} file=${i.filePath} provider=${i.providerId} language=${i.language} client=${i.clientId} reused=${e.bridge.running}`)}function K(e,r){const i=r.searchParams.get("token")||"";if(i.trim())return i.trim();const o=e.headers["x-runtime-token"];return Array.isArray(o)?o[0]?.trim()||"":typeof o=="string"?o.trim():String(e.headers.authorization||"").match(/^Bearer\s+(.+)$/i)?.[1]?.trim()||""}function V(e){const r=String(e.socket?.remoteAddress||"");return r==="127.0.0.1"||r==="::1"||r==="::ffff:127.0.0.1"||r.startsWith("127.")}function x(e){const r=new b({noServer:!0});e.on("upgrade",(i,o,t)=>{if(!A(i,o))return;const s=i.headers.host||"localhost",n=new URL(i.url||"/",`http://${s}`);if(n.pathname!=="/ws/lsp")return;const l=K(i,n);if(!y(l)&&!V(i)){a.warn("[lsp-ws] upgrade \u9274\u6743\u5931\u8D25\uFF1A\u7F3A\u5C11\u6216\u975E\u6CD5 runtime token"),o.write(`HTTP/1.1 401 Unauthorized\r
|
|
2
2
|
\r
|
|
3
|
-
`),
|
|
3
|
+
`),o.destroy();return}const p=D(n);if(!p.provider){a.warn(`[lsp-ws] upgrade \u53C2\u6570\u65E0\u6548: ${p.error}`),o.write(`HTTP/1.1 400 Bad Request\r
|
|
4
|
+
\r
|
|
5
|
+
`),o.destroy();return}const{ctx:c,provider:k}=p;r.handleUpgrade(i,o,t,S=>{J(S,c,k)})})}function ee(){return[...d.entries()].map(([e,r])=>({key:e,providerId:r.providerId,running:r.bridge.running,connected:r.ws!==null&&r.ws.readyState===u.OPEN}))}function re(){for(const e of d.values())w(e),e.bridge.dispose();d.clear()}export{x as attachLspWebSocketServer,re as disposeAllLspProcesses,ee as listLspProcesses,D as resolveLspSocketContext};
|
|
4
6
|
|
package/dist/routes/mcp.d.ts
CHANGED
|
@@ -1,6 +1,22 @@
|
|
|
1
1
|
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
2
13
|
import { type McpDeploySpec } from "../services/mcp-deploy.js";
|
|
3
14
|
export declare const mcpRouter: import("express-serve-static-core").Router;
|
|
4
15
|
export declare function normalizeSpec(raw: unknown): McpDeploySpec | null;
|
|
5
16
|
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
6
22
|
export declare function stripBuiltinMcpDisable(map: Record<string, unknown>): Record<string, unknown>;
|
package/dist/routes/mcp.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Router as
|
|
1
|
+
import{Router as h}from"express";import{validateToken as a}from"../middleware/auth.js";import{assertAgentOwnership as g}from"../services/agent-ownership.js";import{getEffective as b,setDefault as S,setInherited as k,setOverride as v}from"../services/capability-config.js";import{McpDeployManager as l}from"../services/mcp-deploy.js";import{isBuiltinMcpName as u}from"../services/mcp-env-injector.js";import{probeDeployedMcp as M}from"../services/mcp-probe-client.js";import{getPanelEnvVars as w,getAgentMeta as I}from"../services/panel-env.js";import{getUserScopeOrThrow as d,requireAgentOwnership as O,requireUserScope as m}from"../services/user-scope.js";import{sanitizeEnvForChild as A}from"../utils/env-safety.js";import{createLogger as E}from"../utils/logger.js";const C=E("mcp"),c=h();function p(n){return(e,t)=>{n(e,t).catch(o=>{if(C.error("[mcp] %s %s \u5931\u8D25: %s",e.method,e.path,o.message),!t.headersSent){const s=o.message.includes("agent-ownership-mismatch")?403:500;t.status(s).json({ok:!1,error:o.message})}})}}function D(n){if(!n||typeof n!="object")return null;const e=n,o={type:String(e.type||e.transport||"stdio").trim().toLowerCase()||"stdio"};e.command!==null&&e.command!==void 0&&String(e.command).trim()&&(o.command=String(e.command).trim()),e.url!==null&&e.url!==void 0&&String(e.url).trim()&&(o.url=String(e.url).trim()),Array.isArray(e.args)&&(o.args=e.args.map(r=>String(r))),e.env&&typeof e.env=="object"&&(o.env=e.env),e.headers&&typeof e.headers=="object"&&(o.headers=e.headers),e.collapsed===!0&&(o.collapsed=!0);const s=e.description===null||e.description===void 0?"":String(e.description).trim();return s&&(o.description=s),o}function P(n){const e={};for(const[t,o]of Object.entries(n))u(t)&&o===!1||(e[t]=o);return e}c.post("/mcp/deployed/list",a,m,p(async(n,e)=>{const t=d(n),s=l.forScope(t).listDeployed().map(r=>({...r,enabled:b(t,"","mcp",r.name)}));e.json({ok:!0,deployedMcp:s})})),c.get("/mcp/deployed",a,m,p(async(n,e)=>{const t=d(n),s=l.forScope(t).listDeployed().map(r=>({...r,enabled:b(t,"","mcp",r.name)}));e.json({ok:!0,deployedMcp:s})})),c.post("/mcp/deployed/default",a,m,p(async(n,e)=>{const t=String((n.body??{})?.name??"").trim();if(!t){e.status(400).json({ok:!1,error:"name is required"});return}const o=String((n.body??{})?.agentId??"").trim(),s=(n.body??{})?.enabled,r=s==null?null:!!s;if(u(t)&&r===!1){e.status(400).json({ok:!1,error:`\u300C${t}\u300D\u662F\u5185\u7F6E\u901A\u8BAF MCP\uFF0C\u6052\u4E3A\u9ED8\u8BA4\u542F\u7528\uFF0C\u4E0D\u53EF\u5173\u95ED`});return}const i=d(n);if(o){if(!g(o,i)){e.status(403).json({ok:!1,error:"agent-ownership-mismatch"});return}v(i,o,"mcp",t,r)}else S(i,"mcp",t,r);e.json({ok:!0,name:t,agentId:o,enabled:r})})),c.post("/mcp/deployed/inherited",a,m,p(async(n,e)=>{const t=String((n.body??{})?.agentId??"").trim();if(!t){e.status(400).json({ok:!1,error:"agentId is required"});return}const o=d(n);if(!g(t,o)){e.status(403).json({ok:!1,error:"agent-ownership-mismatch"});return}const s=(n.body??{})?.map,r=s&&typeof s=="object"&&!Array.isArray(s)?P(s):s??null;k(o,t,"mcp",r),e.json({ok:!0,agentId:t,count:r&&typeof r=="object"?Object.keys(r).length:0})})),c.post("/mcp/deployed/save",a,m,p(async(n,e)=>{const{name:t,spec:o,defaultEnabled:s,sha256:r}=n.body??{},i=String(t??"").trim();if(!i){e.status(400).json({ok:!1,error:"name is required"});return}const f=D(o);if(!f){e.status(400).json({ok:!1,error:"spec \u975E\u6CD5"});return}if(u(i)){e.status(400).json({ok:!1,error:`\u300C${i}\u300D\u662F\u5185\u7F6E\u901A\u8BAF MCP\uFF0C\u7531\u5B9E\u4F8B\u521D\u59CB\u5316\u81EA\u52A8\u90E8\u7F72\uFF0C\u4E0D\u53EF\u8986\u76D6`});return}const j=d(n),y=l.forScope(j).saveMcp(i,f,s!==!1,r?String(r):void 0);e.status(y.ok?200:400).json(y)})),c.post("/mcp/deployed/remove",a,m,p(async(n,e)=>{const t=String((n.body??{})?.name??"").trim(),o=d(n),s=l.forScope(o).removeMcp(t);e.status(s.ok?200:400).json(s)})),c.post("/mcp/probe",a,m,O,p(async(n,e)=>{const t=n.body??{},o=String(t.name??"").trim();if(!o){e.status(400).json({ok:!1,error:"name is required"});return}if(Object.prototype.hasOwnProperty.call(t,"spec")){e.status(400).json({ok:!1,error:"probe \u53EA\u63A5\u53D7\u5DF2\u90E8\u7F72 MCP \u7684 name\uFF0C\u4E0D\u63A5\u53D7\u8C03\u7528\u65B9\u4F20\u5165 spec"});return}const s=String(t.agentId??"").trim(),r={...s?w(s):{},...A(t.env)},i=await M(o,{scope:d(n),effectiveEnv:r,agentMeta:s?I(s):void 0});e.json(i)})),c.post("/mcp/cc-switch/list",a,p(async(n,e)=>{e.json({ok:!0,mcpServers:[],state:{skills:[],mcpServers:[]}})}));export{c as mcpRouter,D as normalizeSpec,P as stripBuiltinMcpDisable};
|
|
2
2
|
|
package/dist/routes/plugins.d.ts
CHANGED
package/dist/routes/plugins.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Router as
|
|
1
|
+
import{Router as S}from"express";import{raw as w}from"express";import{validateToken as g,validateTokenOrLoopback as I}from"../middleware/auth.js";import{assertAgentOwnership as j}from"../services/agent-ownership.js";import{getEffective as h,setDefault as N,setInherited as v,setOverride as O}from"../services/capability-config.js";import{isValidPluginName as f,pluginManager as u}from"../services/plugin-manager.js";import{getUserScopeOrThrow as y,requireAgentOwnership as m,requireUserScope as l}from"../services/user-scope.js";import{createLogger as E}from"../utils/logger.js";const P=E("plugins"),r=S();function i(s){return(n,e)=>{s(n,e).catch(t=>{if(P.error("[plugins] %s %s \u5931\u8D25: %s",n.method,n.path,t.message),!e.headersSent){const a=t.message.includes("agent-ownership-mismatch")?403:500;e.status(a).json({ok:!1,error:t.message})}})}}r.get("/plugins/deployed",g,l,i(async(s,n)=>{const e=y(s),a=(await u.listDeployed(e)).map(o=>({...o,enabled:h(e,"","plugins",o.pluginName)}));n.json({ok:!0,deployedPlugins:a})})),r.post("/plugins/deployed/default",g,l,i(async(s,n)=>{const e=String((s.body??{})?.pluginName??"").trim();if(!f(e)){n.status(400).json({ok:!1,error:"pluginName \u975E\u6CD5\uFF08\u987B\u4E3A kebab-case\uFF0C1~64 \u5B57\u7B26\uFF09"});return}const t=String((s.body??{})?.agentId??"").trim(),a=(s.body??{})?.enabled,o=a==null?null:!!a,c=y(s);if(t){if(!j(t,c)){n.status(403).json({ok:!1,error:"agent-ownership-mismatch"});return}O(c,t,"plugins",e,o)}else N(c,"plugins",e,o);n.json({ok:!0,pluginName:e,agentId:t,enabled:o})})),r.post("/plugins/deployed/inherited",g,l,i(async(s,n)=>{const e=String((s.body??{})?.agentId??"").trim();if(!e){n.status(400).json({ok:!1,error:"agentId is required"});return}const t=y(s);if(!j(e,t)){n.status(403).json({ok:!1,error:"agent-ownership-mismatch"});return}const a=(s.body??{})?.map;v(t,e,"plugins",a??null),n.json({ok:!0,agentId:e,count:Object.keys(a??{}).length})})),r.post("/plugins/deployed/remove",g,l,i(async(s,n)=>{const e=String((s.body??{})?.pluginName??"").trim();if(!f(e)){n.status(400).json({ok:!1,error:"pluginName \u975E\u6CD5\uFF08\u987B\u4E3A kebab-case\uFF0C1~64 \u5B57\u7B26\uFF09"});return}const t=y(s),a=await u.removeDeployedPlugin(e,t);n.status(a.ok?200:400).json(a)})),r.get("/plugins/:agentId",g,l,m,i(async(s,n)=>{const e=String(s.params.agentId??"").trim();if(!e){n.status(400).json({ok:!1,error:"agentId is required"});return}const t=await u.list(e);n.json({ok:!0,agentId:e,plugins:t})})),r.post("/plugins/:agentId/install",g,l,m,i(async(s,n)=>{const e=String(s.params.agentId??"").trim(),t=s.body??{},a=typeof t.source=="string"?t.source:"",o=t.config&&typeof t.config=="object"&&!Array.isArray(t.config)?Object.fromEntries(Object.entries(t.config).filter(d=>typeof d[1]=="string")):void 0;if(!e){n.status(400).json({ok:!1,error:"agentId is required"});return}const c={action:"install",source:a,...o?{config:o}:{}},p=await u.manage(e,c);n.status(p.ok?200:400).json(p)}));function b(s){return[g,l,m,i(async(n,e)=>{const t=String(n.params.agentId??"").trim(),a=String(n.params.name??"").trim();if(!t||t==="deployed"||!f(a)){e.status(400).json({ok:!1,error:"agentId \u4E14 name \u987B\u4E3A\u5408\u6CD5\u63D2\u4EF6\u540D\uFF08kebab-case\uFF0C1~64 \u5B57\u7B26\uFF09"});return}const o=await u.manage(t,{action:s,name:a});e.status(o.ok?200:400).json(o)})]}r.post("/plugins/:agentId/:name/reload",...b("reload")),r.post("/plugins/:agentId/:name/enable",...b("enable")),r.post("/plugins/:agentId/:name/disable",...b("disable")),r.delete("/plugins/:agentId/:name",...b("uninstall")),r.get("/plugins/:agentId/:name/logs",g,l,m,i(async(s,n)=>{const e=String(s.params.agentId??"").trim(),t=String(s.params.name??"").trim();if(!e||!f(t)){n.status(400).json({ok:!1,error:"agentId \u4E14 name \u987B\u4E3A\u5408\u6CD5\u63D2\u4EF6\u540D\uFF08kebab-case\uFF0C1~64 \u5B57\u7B26\uFF09"});return}const a=await u.getLogs(e,t);n.status(a.ok?200:404).json(a)})),r.get("/plugins/:agentId/commands",g,l,m,i(async(s,n)=>{const e=String(s.params.agentId??"").trim();if(!e){n.status(400).json({ok:!1,error:"agentId is required"});return}const t=await u.getPluginCommands(e);n.json({ok:!0,agentId:e,commands:t.map(a=>({name:a.name,description:a.description??"",argumentHint:a.argumentHint??"",sourcePath:a.sourcePath,plugin:a.plugin}))})})),r.get("/plugin-events/:agentId/events",I,i(async(s,n)=>{const e=String(s.params.agentId??"").trim();if(!e){n.status(400).json({ok:!1,error:"agentId is required"});return}const t=Number(s.query.maxPerKey),a=Number.isFinite(t)&&t>0?t:void 0,o=await u.drainEvents(e,{maxPerKey:a});n.json({ok:!0,agentId:e,...o})})),r.post("/plugin-events/:agentId/callback/:plugin",I,i(async(s,n)=>{const e=String(s.params.agentId??"").trim(),t=String(s.params.plugin??"").trim(),a=s.body??{};if(!e||!t){n.status(400).json({ok:!1,error:"agentId and plugin are required"});return}const o=await u.enqueueExternalEvent(e,t,a);n.status(o.ok?200:400).json(o)})),r.post("/plugins/:agentId/private-save",g,l,m,i(async(s,n)=>{const e=String(s.params.agentId??"").trim();if(!e){n.status(400).json({ok:!1,error:"agentId is required"});return}const t=s.body??{},a=Buffer.from(String(t.contentBase64??""),"base64");if(a.length===0){n.status(400).json({ok:!1,error:"contentBase64 \u4E3A\u7A7A"});return}const o=String(t.fileName??"plugin.zip"),c=t.config&&typeof t.config=="object"&&!Array.isArray(t.config)?Object.fromEntries(Object.entries(t.config).filter(d=>typeof d[1]=="string")):void 0,p=await u.installFromZip(e,a,o,c);n.status(p.ok?200:400).json(p)})),r.post("/plugins/:agentId/private-remove",g,l,m,i(async(s,n)=>{const e=String(s.params.agentId??"").trim(),t=String((s.body??{})?.pluginName??"").trim();if(!e||!f(t)){n.status(400).json({ok:!1,error:"agentId \u4E0E pluginName \u5FC5\u586B\uFF08kebab-case\uFF09"});return}const a=await u.manage(e,{action:"uninstall",name:t});n.status(a.ok?200:400).json(a)})),r.post("/plugins/:agentId/upload",g,l,m,w({type:()=>!0,limit:"100mb"}),i(async(s,n)=>{const e=String(s.params.agentId??"").trim();if(!e){n.status(400).json({ok:!1,error:"agentId is required"});return}const t=s.body;if(!Buffer.isBuffer(t)||t.length===0){n.status(400).json({ok:!1,error:"\u7F3A\u5C11 zip \u5185\u5BB9\uFF08raw body, Content-Type: application/zip\uFF09"});return}const a=String(s.query.filename??"plugin.zip");if(!a.toLowerCase().endsWith(".zip")){n.status(400).json({ok:!1,error:"\u4EC5\u652F\u6301 .zip \u63D2\u4EF6\u5305"});return}let o;const c=String(s.query.config??"").trim();if(c)try{const d=JSON.parse(c);if(d&&typeof d=="object"&&!Array.isArray(d))o=Object.fromEntries(Object.entries(d).filter(k=>typeof k[1]=="string"));else{n.status(400).json({ok:!1,error:"config \u5FC5\u987B\u662F JSON \u5BF9\u8C61"});return}}catch{n.status(400).json({ok:!1,error:"config \u4E0D\u662F\u5408\u6CD5\u7684 JSON \u5BF9\u8C61"});return}const p=await u.installFromZip(e,t,a,o);n.status(p.ok?200:400).json(p)}));export{r as pluginsRouter};
|
|
2
2
|
|
package/dist/routes/pty.d.ts
CHANGED
|
@@ -38,24 +38,44 @@ export interface PtySessionEntry extends PtySessionSummary {
|
|
|
38
38
|
}
|
|
39
39
|
export declare const ptySessions: Map<string, PtySessionEntry>;
|
|
40
40
|
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
41
44
|
export declare function resolvePtyIdleTtlMs(env?: NodeJS.ProcessEnv): number;
|
|
42
45
|
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
43
51
|
export declare function resolveDefaultShell(platform?: NodeJS.Platform, env?: NodeJS.ProcessEnv, existsSync?: (path: fs.PathLike) => boolean): {
|
|
44
52
|
shell: string;
|
|
45
53
|
args: string[];
|
|
46
54
|
};
|
|
47
55
|
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
48
59
|
export declare function resolveRequestedShell(requestedShell: unknown, platform?: NodeJS.Platform, env?: NodeJS.ProcessEnv): {
|
|
49
60
|
shell: string;
|
|
50
61
|
args: string[];
|
|
51
62
|
};
|
|
52
63
|
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
53
67
|
export declare function isPathInsideRoot(candidatePath: string, rootPath: string): boolean;
|
|
54
68
|
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
|
|
55
72
|
export declare function resolvePtyWorkspacePath(workspacePath: unknown, env?: NodeJS.ProcessEnv): string;
|
|
56
73
|
|
|
57
74
|
export declare function readPtyOutputBuffer(session: PtySessionEntry): string;
|
|
58
75
|
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
59
79
|
export declare function createPtySession(input: {
|
|
60
80
|
workspacePath: unknown;
|
|
61
81
|
title?: unknown;
|
|
@@ -73,15 +93,24 @@ export declare function resolveMaxPtySessions(env?: NodeJS.ProcessEnv): number;
|
|
|
73
93
|
export declare function listPtySessions(): PtySessionSummary[];
|
|
74
94
|
export declare function getPtySessionSummary(id: string): PtySessionSummary | undefined;
|
|
75
95
|
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
76
99
|
export declare function createPtyConnectToken(sessionId: string): {
|
|
77
100
|
token: string;
|
|
78
101
|
expiresAt: string;
|
|
79
102
|
} | undefined;
|
|
80
103
|
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
|
|
81
107
|
export declare function closePtySession(id: string, reason?: string): boolean;
|
|
82
108
|
export declare function closeAllPtySessions(reason?: string): void;
|
|
83
109
|
export declare const ptyRouter: Router;
|
|
84
110
|
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
|
|
85
114
|
export declare function attachPtyWebSocketServer(server: {
|
|
86
115
|
on: (event: "upgrade", listener: (request: IncomingMessage, socket: Socket, head: Buffer) => void) => unknown;
|
|
87
116
|
}): void;
|
|
@@ -13,5 +13,8 @@ export interface RuntimeTokenRequestResult {
|
|
|
13
13
|
error?: string;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
16
19
|
export declare function resolveRuntimeTokenRequest(input: RuntimeTokenRequestInput): RuntimeTokenRequestResult;
|
|
17
20
|
export declare function logRuntimeBindingStartupState(): void;
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
2
6
|
export declare const sessionsRouter: import("express-serve-static-core").Router;
|
|
3
7
|
export interface HandleCapabilityToolsRequestInput {
|
|
4
8
|
agentId: string;
|
|
@@ -11,6 +15,14 @@ export interface HandleCapabilityToolsRequestInput {
|
|
|
11
15
|
resolveAdapter?: (providerId: string) => unknown;
|
|
12
16
|
}
|
|
13
17
|
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
14
26
|
export declare function handleCapabilityToolsRequest(input: HandleCapabilityToolsRequestInput): Promise<{
|
|
15
27
|
status: number;
|
|
16
28
|
body: Record<string, unknown>;
|
|
@@ -27,9 +39,19 @@ export interface HandleCapabilityToolCallRequestInput {
|
|
|
27
39
|
resolveAdapter?: (providerId: string) => unknown;
|
|
28
40
|
}
|
|
29
41
|
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
30
49
|
export declare function handleCapabilityToolCallRequest(input: HandleCapabilityToolCallRequestInput): Promise<{
|
|
31
50
|
status: number;
|
|
32
51
|
body: Record<string, unknown>;
|
|
33
52
|
}>;
|
|
34
53
|
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
35
57
|
export declare function resolveActiveSdkSessionSnapshotStatus(adapterStatus?: string, currentRuntimeStatus?: string, currentRuntimeActionType?: string): string;
|
package/dist/routes/skills.d.ts
CHANGED
package/dist/routes/skills.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Router as
|
|
1
|
+
import{Router as j}from"express";import{raw as h}from"express";import{validateToken as a}from"../middleware/auth.js";import{assertAgentOwnership as v}from"../services/agent-ownership.js";import{getEffective as b,setDefault as I,setInherited as N,setOverride as w}from"../services/capability-config.js";import{SkillManager as u,isValidSkillName as y}from"../services/skill-manager.js";import{getUserScopeOrThrow as r,requireUserScope as c}from"../services/user-scope.js";import{createLogger as B}from"../utils/logger.js";const z=B("skills"),d=j();function f(s){return(e,t)=>{s(e,t).catch(o=>{if(z.error("[skills] %s %s \u5931\u8D25: %s",e.method,e.path,o.message),!t.headersSent){const n=o.message.includes("agent-ownership-mismatch")?403:500;t.status(n).json({ok:!1,error:o.message})}})}}function m(s,e,t){const o=r(s);return v(t,o)?!0:(e.status(403).json({ok:!1,error:"agent-ownership-mismatch",message:"\u8BE5\u5B9E\u4F8B\u4E0D\u5C5E\u4E8E\u5F53\u524D\u7528\u6237"}),!1)}d.post("/skills/deployed/list",a,c,f(async(s,e)=>{const t=r(s),i=u.forScope(t).listDeployed().map(l=>({...l,enabled:b(t,"","skills",l.skillName)}));e.json({ok:!0,deployedSkills:i})})),d.get("/skills/deployed",a,c,f(async(s,e)=>{const t=r(s),i=u.forScope(t).listDeployed().map(l=>({...l,enabled:b(t,"","skills",l.skillName)}));e.json({ok:!0,deployedSkills:i})})),d.post("/skills/deployed/default",a,c,f(async(s,e)=>{const t=r(s),o=String((s.body??{})?.skillName??"").trim();if(!y(o)){e.status(400).json({ok:!1,error:"skillName \u975E\u6CD5"});return}const n=String((s.body??{})?.agentId??"").trim();if(n&&!m(s,e,n))return;const i=(s.body??{})?.enabled,l=i==null?null:!!i;n?w(t,n,"skills",o,l):I(t,"skills",o,l),e.json({ok:!0,skillName:o,agentId:n,enabled:l})})),d.post("/skills/deployed/inherited",a,c,f(async(s,e)=>{const t=r(s),o=String((s.body??{})?.agentId??"").trim();if(!o){e.status(400).json({ok:!1,error:"agentId is required"});return}if(!m(s,e,o))return;const n=(s.body??{})?.map;N(t,o,"skills",n??null),e.json({ok:!0,agentId:o,count:Object.keys(n??{}).length})})),d.post("/skills/deployed/upload",a,c,h({type:"application/zip",limit:"200mb"}),f(async(s,e)=>{const t=r(s),o=s.body??{},n=Buffer.isBuffer(o)?o:Buffer.from(o??"");if(!n||n.length===0){e.status(400).json({ok:!1,error:"zip \u5185\u5BB9\u4E3A\u7A7A"});return}const i=String(s.query.filename??s.headers["x-filename"]??"skill.zip"),l=String(s.query.sha256??"").trim()||void 0,k=s.query.defaultEnabled!=="false",p=await u.forScope(t).saveSharedSkill(n,String(i),k,l);e.status(p.ok?200:400).json(p)})),d.post("/skills/deployed/remove",a,c,f(async(s,e)=>{const t=r(s),o=String((s.body??{})?.skillName??"").trim();if(!y(o)){e.status(400).json({ok:!1,error:"skillName \u975E\u6CD5"});return}const n=await u.forScope(t).removeDeployedSkill(o);e.status(n.ok?200:400).json(n)})),d.post("/skills/private/:agentId/upload",a,c,h({type:()=>!0,limit:"200mb"}),f(async(s,e)=>{const t=String(s.params.agentId??"").trim();if(!t){e.status(400).json({ok:!1,error:"agentId is required"});return}if(!m(s,e,t))return;const o=r(s),n=s.body;if(!Buffer.isBuffer(n)||n.length===0){e.status(400).json({ok:!1,error:"zip \u5185\u5BB9\u4E3A\u7A7A"});return}const i=s.query,l=String(i.filename??s.headers["x-filename"]??"skill.zip"),k=String(i.sha256??"").trim()||void 0,p=String(i.skillName??"").trim()||void 0,g=await u.forScope(o).savePrivateSkill(t,n,l,k,p);e.status(g.ok?200:400).json(g)})),d.post("/skills/private/:agentId/save",a,c,f(async(s,e)=>{const t=String(s.params.agentId??"").trim();if(!t){e.status(400).json({ok:!1,error:"agentId is required"});return}if(!m(s,e,t))return;const o=r(s),n=s.body??{},i=String(n.contentBase64??""),l=Buffer.from(i,"base64");if(l.length===0){e.status(400).json({ok:!1,error:"contentBase64 \u4E3A\u7A7A"});return}const k=String(n.fileName??"skill.zip"),p=String(n.sha256??"").trim()||void 0,g=String(n.skillName??"").trim()||void 0,S=await u.forScope(o).savePrivateSkill(t,l,k,p,g);e.status(S.ok?200:400).json(S)})),d.post("/skills/private/:agentId/remove",a,c,f(async(s,e)=>{const t=String(s.params.agentId??"").trim(),o=String((s.body??{})?.skillName??"").trim();if(!t||!y(o)){e.status(400).json({ok:!1,error:"agentId \u4E0E skillName \u5FC5\u586B"});return}if(!m(s,e,t))return;const n=r(s),i=await u.forScope(n).removePrivateSkill(t,o);e.status(i.ok?200:400).json(i)})),d.post("/skills/private/:agentId/list",a,c,f(async(s,e)=>{const t=String(s.params.agentId??"").trim();if(!t){e.status(400).json({ok:!1,error:"agentId is required"});return}if(!m(s,e,t))return;const o=r(s);e.json({ok:!0,agentId:t,privateSkills:u.forScope(o).listPrivateSkills(t)})})),d.post("/skills/cc-switch/list",a,c,f(async(s,e)=>{e.json({ok:!0,skills:[],state:{skills:[],mcpServers:[]}})}));export{d as skillsRouter};
|
|
2
2
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{Router as m}from"express";import{validateToken as c}from"../middleware/auth.js";import{
|
|
1
|
+
import{Router as m}from"express";import{validateToken as c}from"../middleware/auth.js";import{subAgentManager as u,subAgentStore as g}from"../services/sub-agent-manager-instance.js";import{createLogger as f}from"../utils/logger.js";import{noteDashboardActivity as l}from"./dashboard.js";const b=f("sub-agents"),p=m();p.get("/sub-agents/:agentId",c,async(r,t)=>{const s=String(r.params.agentId??"");if(!s.trim()){t.status(400).json({ok:!1,error:"agentId is required"});return}try{const e=await g.list(s),n=u.listActiveByParent(s),o=new Set(n.map(a=>a.subId)),i=n.map(a=>({subId:a.subId,parentAgentId:a.parentAgentId,parentSessionId:a.parentSessionId,subagentType:a.subagentType,description:a.description,prompt:a.prompt,status:a.status,startedAt:a.startedAt,contextSnapshot:a.contextSnapshot,availableTools:a.availableTools})),d=e.filter(a=>!o.has(a.subId)&&a.status!=="running"&&a.status!=="pending"),I=await g.read(s);t.json({ok:!0,agentId:s,updatedAt:I.updatedAt,running:i,history:d})}catch(e){const n=e;b.error("[sub-agents] \u5217\u8868\u5931\u8D25: %s",n.message),t.status(500).json({ok:!1,error:n.message})}}),p.get("/sub-agents/:agentId/events",c,async(r,t)=>{l();const s=String(r.params.agentId??"");if(!s.trim()){t.status(400).json({ok:!1,error:"agentId is required"});return}t.writeHead(200,{"Content-Type":"text/event-stream","Cache-Control":"no-cache",Connection:"keep-alive","X-Accel-Buffering":"no"}),t.write(`: connected
|
|
2
2
|
|
|
3
3
|
`);const e=u.listActiveByParent(s);e.length>0&&t.write(`data: ${JSON.stringify({type:"snapshot",agentId:s,timestamp:new Date().toISOString(),data:{running:e.map(i=>({subId:i.subId,subagentType:i.subagentType,description:i.description,status:i.status,startedAt:i.startedAt}))}})}
|
|
4
4
|
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
2
7
|
import { TextDecoder } from "node:util";
|
|
3
8
|
import { type AdapterSessionConfig, type ProviderEvent, type RuntimeStatusActionInfo } from "../adapter/index.js";
|
|
4
9
|
import { type RuntimeOutputMetadata } from "../services/session-output.js";
|
|
@@ -19,10 +24,27 @@ export interface SdkSessionEntry {
|
|
|
19
24
|
currentRuntimeActionDetail?: string;
|
|
20
25
|
currentRuntimeActionInput?: string;
|
|
21
26
|
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
22
33
|
cachedCapabilitiesActionDetail?: string;
|
|
23
34
|
}
|
|
24
35
|
export declare const sdkSessions: Map<string, SdkSessionEntry>;
|
|
25
36
|
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
26
48
|
export declare function renderSessionSnapshot(messages: Array<{
|
|
27
49
|
role: string;
|
|
28
50
|
content: string;
|
|
@@ -33,6 +55,15 @@ export declare function renderSessionSnapshot(messages: Array<{
|
|
|
33
55
|
truncated: boolean;
|
|
34
56
|
};
|
|
35
57
|
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
36
67
|
export declare function parseResumeTranscript(raw: unknown): unknown[] | undefined;
|
|
37
68
|
export interface RuntimeStopOptions {
|
|
38
69
|
statusNotified: boolean;
|
|
@@ -47,8 +78,14 @@ export type RuntimeContextResetSupport = {
|
|
|
47
78
|
};
|
|
48
79
|
export declare function resolveRuntimeContextResetSupport(providerId: string, hasResetContext: boolean): RuntimeContextResetSupport;
|
|
49
80
|
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
|
|
50
84
|
export declare function shouldProbeSdkProcessPid(providerId: string): boolean;
|
|
51
85
|
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
|
|
52
89
|
export declare function parseRuntimeStopOptions(body: unknown): RuntimeStopOptions;
|
|
53
90
|
export declare function resolveStatusChangeUsage(actionInfo?: RuntimeStatusActionInfo): {
|
|
54
91
|
inputTokens: number;
|
|
@@ -65,6 +102,14 @@ export declare function resolveStatusChangeRuntimeState(status: string, actionIn
|
|
|
65
102
|
actionInfo?: RuntimeStatusActionInfo;
|
|
66
103
|
};
|
|
67
104
|
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
68
113
|
export declare function isIdleStatusChangeRetryable(params: {
|
|
69
114
|
status: string;
|
|
70
115
|
actionInfo?: RuntimeStatusActionInfo;
|
|
@@ -73,6 +118,17 @@ export declare function isIdleStatusChangeRetryable(params: {
|
|
|
73
118
|
shouldPreservePrevAction: boolean;
|
|
74
119
|
}): boolean;
|
|
75
120
|
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
|
|
76
132
|
export declare function isUsageOnlyStatusChange(params: {
|
|
77
133
|
actionInfo?: RuntimeStatusActionInfo;
|
|
78
134
|
usage?: ReturnType<typeof resolveStatusChangeUsage>;
|
|
@@ -82,45 +138,87 @@ export declare function countTerminalOutputLines(output: string): number;
|
|
|
82
138
|
export declare function formatCommandOutputSpilloverNotice(outputPath: string, lineLimit?: number): string;
|
|
83
139
|
export declare function formatCommandInactivityTimeoutNotice(timeoutMs?: number): string;
|
|
84
140
|
|
|
141
|
+
|
|
142
|
+
|
|
85
143
|
export declare function normalizeTerminalCommandInput(value: unknown): string;
|
|
86
144
|
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
|
|
87
148
|
export declare function resolveTerminalOutputEncoding(platform?: NodeJS.Platform, env?: NodeJS.ProcessEnv): string;
|
|
88
149
|
|
|
150
|
+
|
|
151
|
+
|
|
89
152
|
interface TerminalOutputDecoder {
|
|
90
153
|
decode(chunk?: Uint8Array | ArrayBuffer | null, options?: {
|
|
91
154
|
stream?: boolean;
|
|
92
155
|
}): string;
|
|
93
156
|
}
|
|
94
157
|
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
|
|
95
163
|
export declare function createTerminalOutputDecoder(encoding?: string): TerminalOutputDecoder;
|
|
96
164
|
|
|
165
|
+
|
|
166
|
+
|
|
97
167
|
export declare function decodeTerminalOutputChunk(decoder: TerminalOutputDecoder | TextDecoder, chunk?: Buffer, end?: boolean): string;
|
|
98
168
|
|
|
169
|
+
|
|
170
|
+
|
|
99
171
|
export declare function parseTerminalDirectoryChangeTarget(command: string): string | null | undefined;
|
|
100
172
|
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
|
|
101
176
|
export declare function resolveSdkSessionDisplayStatus(adapterStatus?: string, currentRuntimeStatus?: string, currentRuntimeActionType?: string): string;
|
|
102
177
|
export interface PersistedSessionReuseDecision {
|
|
103
178
|
reusable: boolean;
|
|
104
179
|
reason: "active-pid" | "missing-pid" | "dead-pid" | "in-process-provider";
|
|
105
180
|
}
|
|
106
181
|
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
|
|
107
185
|
export declare function evaluatePersistedSessionReuse(session: Pick<PersistedSession, "pid"> & Partial<Pick<PersistedSession, "command">>, isPidRunning?: (pid: number) => boolean | Promise<boolean>): Promise<PersistedSessionReuseDecision>;
|
|
108
186
|
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
|
|
109
197
|
export declare function cleanupSdkSessionByAgentId(agentId: string): string | undefined;
|
|
110
198
|
|
|
199
|
+
|
|
200
|
+
|
|
111
201
|
export declare function formatTerminalPrompt(currentDirectory: string): string;
|
|
112
202
|
export declare function buildRuntimeEnv(agentId: string, workspacePath: string | undefined, baseEnv: NodeJS.ProcessEnv, envOverrides?: Record<string, unknown>, projectRoot?: string | undefined): Record<string, string>;
|
|
113
203
|
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
|
|
114
207
|
export declare function resolveSdkInputMessage(input: unknown): Promise<string>;
|
|
115
208
|
export interface ClaudeCodeLaunchConfig {
|
|
116
209
|
envOverrides: Record<string, string>;
|
|
117
210
|
model?: string;
|
|
118
211
|
}
|
|
119
212
|
|
|
213
|
+
|
|
214
|
+
|
|
120
215
|
export declare function buildClaudeCodeLaunchConfig(savedClaudeConfig: {
|
|
121
216
|
env?: Record<string, unknown>;
|
|
122
217
|
} | null | undefined, requestEnvOverrides?: Record<string, unknown>): ClaudeCodeLaunchConfig;
|
|
123
218
|
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
|
|
124
222
|
export declare function buildToolResultTimelineActionInfo(event: ProviderEvent): RuntimeStatusActionInfo | undefined;
|
|
125
223
|
export declare function formatSdkOutputEvent(event: ProviderEvent): string | undefined;
|
|
126
224
|
export declare function buildSdkOutputMetadata(event: ProviderEvent): RuntimeOutputMetadata;
|
|
@@ -129,11 +227,35 @@ export declare function resolveRuntimeStatusFromProviderEvent(event: ProviderEve
|
|
|
129
227
|
actionInfo?: RuntimeStatusActionInfo;
|
|
130
228
|
} | undefined;
|
|
131
229
|
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
|
|
132
245
|
export declare function raceSendOutputWithRetry(factory: (signal: AbortSignal) => Promise<void>, timeoutMs?: number, maxRetries?: number): Promise<void>;
|
|
133
246
|
export declare function enqueueCompactionSummaryChunk(entry: SdkSessionEntry, sessionId: string, output: string, seq: number): void;
|
|
134
247
|
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
|
|
135
251
|
export declare function flushCompactionSummaryAccumulator(sessionId: string): void;
|
|
136
252
|
export declare function resolveSdkProviderId(command?: string): string;
|
|
137
253
|
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
|
|
138
260
|
export declare function withSenderSignature(input: unknown, sender: unknown): unknown;
|
|
139
261
|
export {};
|