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
|
@@ -2,6 +2,11 @@ import type { RemoteDesktopQuality, ScreenInfo, CaptureFrame } from "./types.js"
|
|
|
2
2
|
|
|
3
3
|
export declare function getSharpLoadStatus(): string;
|
|
4
4
|
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
5
10
|
export declare function extractRawRegion(raw: Buffer, srcWidth: number, left: number, top: number, w: number, h: number): Buffer | null;
|
|
6
11
|
export declare class ScreenCapture {
|
|
7
12
|
|
|
@@ -11,6 +16,11 @@ export declare class ScreenCapture {
|
|
|
11
16
|
|
|
12
17
|
private static readonly IDLE_INTERVAL_MS;
|
|
13
18
|
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
14
24
|
private static readonly PERIODIC_FULL_FRAME_INTERVAL_MS;
|
|
15
25
|
private screens;
|
|
16
26
|
|
|
@@ -33,10 +43,18 @@ export declare class ScreenCapture {
|
|
|
33
43
|
|
|
34
44
|
private inputBoostFrames;
|
|
35
45
|
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
36
49
|
private lastRaw;
|
|
37
50
|
private lastRawWidth;
|
|
38
51
|
private lastRawHeight;
|
|
39
52
|
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
40
58
|
private pendingReference;
|
|
41
59
|
frameStats: {
|
|
42
60
|
full: number;
|
|
@@ -48,54 +66,127 @@ export declare class ScreenCapture {
|
|
|
48
66
|
resetFrameStats(): void;
|
|
49
67
|
listScreens(): Promise<ScreenInfo[]>;
|
|
50
68
|
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
|
|
51
74
|
private cachedMonitors;
|
|
52
75
|
private getActiveMonitor;
|
|
53
76
|
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
54
81
|
private acquireShot;
|
|
55
82
|
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
56
86
|
private encodeShot;
|
|
57
87
|
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
|
|
58
94
|
captureVirtualDesktop(force?: boolean): Promise<CaptureFrame | null>;
|
|
59
95
|
|
|
60
96
|
private totalTileCount;
|
|
61
97
|
|
|
62
98
|
private mapLimit;
|
|
63
99
|
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
|
|
64
106
|
private outputRectToSource;
|
|
65
107
|
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
|
|
66
116
|
private detectChangedTiles;
|
|
67
117
|
|
|
68
118
|
private commitReferenceFrame;
|
|
69
119
|
|
|
70
120
|
private discardReferenceFrame;
|
|
71
121
|
|
|
122
|
+
|
|
123
|
+
|
|
72
124
|
setActiveScreen(screenId: string | null): void;
|
|
73
125
|
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
|
|
74
130
|
startLoop(onFrame: (frame: CaptureFrame) => boolean | void): void;
|
|
75
131
|
|
|
132
|
+
|
|
76
133
|
private scheduleLoop;
|
|
77
134
|
|
|
78
135
|
private lastFullFrameAt;
|
|
79
136
|
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
|
|
80
142
|
private captureOnce;
|
|
81
143
|
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
|
|
82
148
|
private drainEncode;
|
|
83
149
|
|
|
84
150
|
private consecutiveNullCaptures;
|
|
85
151
|
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
|
|
86
157
|
private captureSafeFullFrame;
|
|
87
158
|
|
|
88
159
|
private currentIntervalMs;
|
|
89
160
|
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
|
|
90
165
|
requestFrame(): void;
|
|
91
166
|
|
|
92
167
|
private backpressureThrottleUntil;
|
|
93
168
|
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
|
|
94
174
|
notifyFrameDropped(): void;
|
|
95
175
|
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
|
|
96
180
|
requestFullFrame(): void;
|
|
97
181
|
stopLoop(): void;
|
|
98
182
|
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
|
|
99
190
|
setQuality(quality?: RemoteDesktopQuality, fps?: number): void;
|
|
100
191
|
getQuality(): RemoteDesktopQuality;
|
|
101
192
|
getScreens(): ScreenInfo[];
|
|
@@ -15,6 +15,11 @@ export declare class RemoteDesktopSession {
|
|
|
15
15
|
computerControl: ComputerControl;
|
|
16
16
|
state: "active" | "closed" | "error";
|
|
17
17
|
ws: WebSocket | null;
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
controlEnabled: boolean;
|
|
18
23
|
private inputBackend;
|
|
19
24
|
|
|
20
25
|
private onFrame;
|
|
@@ -27,23 +32,53 @@ export declare class RemoteDesktopSession {
|
|
|
27
32
|
screens: ScreenInfo[];
|
|
28
33
|
}>;
|
|
29
34
|
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
30
39
|
switchScreen(screenId: string | null): Promise<void>;
|
|
31
40
|
|
|
41
|
+
|
|
42
|
+
|
|
32
43
|
startInputBackend(): void;
|
|
33
44
|
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
34
50
|
enableControl(): Promise<void>;
|
|
35
51
|
|
|
52
|
+
|
|
53
|
+
|
|
36
54
|
stopInputBackend(): void;
|
|
37
55
|
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
38
60
|
private startFocusPolling;
|
|
39
61
|
|
|
40
62
|
private stopFocusPolling;
|
|
41
63
|
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
42
67
|
private sendFocusState;
|
|
43
68
|
attachWebSocket(ws: WebSocket): void;
|
|
44
69
|
startFrameLoop(onFrame: (frame: CaptureFrame) => boolean | void): void;
|
|
45
70
|
stopFrameLoop(): void;
|
|
46
71
|
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
|
|
47
82
|
handleInput(message: InputMessage): Promise<void>;
|
|
48
83
|
close(): void;
|
|
49
84
|
}
|
|
@@ -54,6 +89,18 @@ export declare class SessionManager {
|
|
|
54
89
|
constructor(permissionManager: PermissionManager);
|
|
55
90
|
createSession(agentId: string, token: string): Promise<StartResult>;
|
|
56
91
|
getSession(sessionId: string): RemoteDesktopSession | undefined;
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
isHumanControlling(agentId: string): boolean;
|
|
97
|
+
|
|
98
|
+
getScreensFor(agentId: string): ScreenInfo[] | null;
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
broadcastToAgent(agentId: string, type: string, data: unknown): boolean;
|
|
57
104
|
handleInput(sessionId: string, message: InputMessage): Promise<void>;
|
|
58
105
|
closeSession(sessionId: string): void;
|
|
59
106
|
closeAll(): void;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{randomUUID as a}from"node:crypto";import{ComputerControl as c}from"./computer-control.js";import{InputDispatcher as h}from"./input-dispatcher.js";import{ScreenCapture as u}from"./screen-capture.js";import{SystemBackend as
|
|
1
|
+
import{randomUUID as a}from"node:crypto";import{ComputerControl as c}from"./computer-control.js";import{InputDispatcher as h}from"./input-dispatcher.js";import{ScreenCapture as u}from"./screen-capture.js";import{SystemBackend as l}from"./system-backend.js";class o{constructor(s,t,e){this.inputDispatcher=null,this.state="active",this.ws=null,this.controlEnabled=!1,this.onFrame=null,this.focusPollTimer=null,this.lastFocusState=null,this.inputChain=Promise.resolve(),this.id=s,this.agentId=t,this.permissions=e,this.screenCapture=new u,this.inputBackend=new l,this.computerControl=new c(this.screenCapture,this.inputBackend)}async init(){const s=await this.screenCapture.listScreens(),t=s[0];return t&&(this.inputDispatcher=new h(this.inputBackend,this.permissions,t),this.inputBackend.setScreenSize(t.width,t.height),this.inputBackend.setActiveScreen(t)),{screens:s}}async switchScreen(s){this.screenCapture.setActiveScreen(s);const t=this.screenCapture.getScreens(),e=s?t.find(n=>n.id===s):t[0];e&&this.inputDispatcher&&(this.inputDispatcher.setScreen(e),this.inputBackend.setScreenSize(e.width,e.height),this.inputBackend.setActiveScreen(e))}startInputBackend(){this.inputBackend.startPersistentProcess()}async enableControl(){this.controlEnabled=!0,this.inputBackend.startPersistentProcess(),this.startFocusPolling(),await this.inputBackend.centerMouse()}stopInputBackend(){this.controlEnabled=!1,this.stopFocusPolling(),this.inputBackend.stopPersistentProcess()}startFocusPolling(){this.stopFocusPolling(),this.focusPollTimer=setInterval(()=>{const s=this.inputBackend.isInputFocused();s!==this.lastFocusState&&(this.lastFocusState=s,this.sendFocusState(s))},o.FOCUS_POLL_INTERVAL_MS)}stopFocusPolling(){this.focusPollTimer&&(clearInterval(this.focusPollTimer),this.focusPollTimer=null),this.lastFocusState=null}sendFocusState(s){!this.ws||this.ws.readyState!==this.ws.OPEN||this.ws.send(JSON.stringify({type:"remote-desktop:focus-state",sessionId:this.id,data:{hasInputFocus:s}}))}attachWebSocket(s){this.ws=s}startFrameLoop(s){this.onFrame=s,this.screenCapture.startLoop(s)}stopFrameLoop(){this.screenCapture.stopLoop(),this.onFrame=null}handleInput(s){const t=this.inputDispatcher;if(!t)return Promise.resolve();this.screenCapture.requestFrame();const e=this.inputChain.then(async()=>{await t.handle(s),this.screenCapture.requestFrame()});return this.inputChain=e.catch(()=>{}),e}close(){this.state="closed",this.controlEnabled=!1,this.stopFocusPolling(),this.stopFrameLoop(),this.inputBackend.stopPersistentProcess(),this.ws=null}}o.FOCUS_POLL_INTERVAL_MS=1e3;class w{constructor(s){this.sessions=new Map,this.agentSessions=new Map,this.permissionManager=s}async createSession(s,t){if(!this.permissionManager.validateToken(t))throw new Error("Invalid token");const e=this.agentSessions.get(s);e&&this.closeSession(e);const n=this.permissionManager.resolvePermissions(t),i=a(),r=new o(i,s,n);return await r.init(),this.sessions.set(i,r),this.agentSessions.set(s,i),{sessionId:i,screens:r.screenCapture.getScreens(),permissions:Array.from(n)}}getSession(s){return this.sessions.get(s)}isHumanControlling(s){const t=this.agentSessions.get(s);if(!t)return!1;const e=this.sessions.get(t);return!!e&&e.state==="active"&&e.controlEnabled}getScreensFor(s){const t=this.agentSessions.get(s);if(!t)return null;const e=this.sessions.get(t);return e&&e.state==="active"?e.screenCapture.getScreens():null}broadcastToAgent(s,t,e){const n=this.agentSessions.get(s);if(!n)return!1;const i=this.sessions.get(n);return!i||i.state!=="active"||!i.ws||i.ws.readyState!==i.ws.OPEN?!1:(i.ws.send(JSON.stringify({type:t,sessionId:n,data:e})),!0)}async handleInput(s,t){const e=this.sessions.get(s);!e||e.state!=="active"||await e.handleInput(t)}closeSession(s){const t=this.sessions.get(s);if(t){t.close(),this.sessions.delete(s);for(const[e,n]of this.agentSessions)if(n===s){this.agentSessions.delete(e);break}}}closeAll(){for(const s of this.sessions.values())s.close();this.sessions.clear(),this.agentSessions.clear()}}export{o as RemoteDesktopSession,w as SessionManager};
|
|
2
2
|
|
|
@@ -6,10 +6,18 @@ export declare class SystemBackend implements InputBackend {
|
|
|
6
6
|
|
|
7
7
|
private activeScreen;
|
|
8
8
|
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
9
13
|
private win32Api;
|
|
10
14
|
|
|
15
|
+
|
|
16
|
+
|
|
11
17
|
constructor(platformOverride?: "windows" | "macos" | "linux");
|
|
12
18
|
|
|
19
|
+
|
|
20
|
+
|
|
13
21
|
private static readonly WIN32_INIT_TYPES;
|
|
14
22
|
private psProcess;
|
|
15
23
|
private psReady;
|
|
@@ -18,29 +26,71 @@ export declare class SystemBackend implements InputBackend {
|
|
|
18
26
|
private cliclickProcess;
|
|
19
27
|
private xdotoolProcess;
|
|
20
28
|
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
21
34
|
startPersistentProcess(): void;
|
|
22
35
|
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
23
40
|
private startPowerShellProcess;
|
|
24
41
|
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
25
46
|
private ensurePowerShell;
|
|
26
47
|
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
27
51
|
stopPersistentProcess(): void;
|
|
28
52
|
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
29
58
|
private psCmd;
|
|
30
59
|
|
|
60
|
+
|
|
61
|
+
|
|
31
62
|
moveMouse(x: number, y: number): Promise<void>;
|
|
32
63
|
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
|
|
33
71
|
moveMouseRelative(dx: number, dy: number): Promise<void>;
|
|
34
72
|
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
35
78
|
centerMouse(): Promise<void>;
|
|
36
79
|
|
|
80
|
+
|
|
81
|
+
|
|
37
82
|
click(x: number, y: number, button: 'left' | 'right'): Promise<void>;
|
|
38
83
|
|
|
84
|
+
|
|
85
|
+
|
|
39
86
|
doubleClick(x: number, y: number): Promise<void>;
|
|
40
87
|
mouseDown(button: 'left' | 'right'): Promise<void>;
|
|
41
88
|
mouseUp(button: 'left' | 'right'): Promise<void>;
|
|
42
89
|
scroll(direction: 'up' | 'down' | 'left' | 'right', amount: number): Promise<void>;
|
|
43
90
|
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
|
|
44
94
|
type(text: string): Promise<void>;
|
|
45
95
|
keyPress(keys: string[]): Promise<void>;
|
|
46
96
|
keyDown(key: string): Promise<void>;
|
|
@@ -51,15 +101,29 @@ export declare class SystemBackend implements InputBackend {
|
|
|
51
101
|
};
|
|
52
102
|
setScreenSize(width: number, height: number): void;
|
|
53
103
|
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
|
|
54
107
|
setActiveScreen(screen: ScreenInfo): void;
|
|
55
108
|
getMousePos(): Promise<{
|
|
56
109
|
x: number;
|
|
57
110
|
y: number;
|
|
58
111
|
}>;
|
|
59
112
|
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
|
|
60
118
|
isInputFocused(): boolean;
|
|
61
119
|
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
|
|
62
124
|
private warnInputErr;
|
|
63
125
|
|
|
126
|
+
|
|
127
|
+
|
|
64
128
|
private getVirtualKeyCode;
|
|
65
129
|
}
|
|
@@ -31,6 +31,9 @@ export interface ScreenshotResult {
|
|
|
31
31
|
height: number;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
34
37
|
export interface TileRect {
|
|
35
38
|
|
|
36
39
|
x: number;
|
|
@@ -44,6 +47,10 @@ export interface TileRect {
|
|
|
44
47
|
data: Buffer;
|
|
45
48
|
}
|
|
46
49
|
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
|
|
47
54
|
export type CaptureFrame = {
|
|
48
55
|
kind: "full";
|
|
49
56
|
data: Buffer;
|
|
@@ -64,6 +71,10 @@ export interface StartResult {
|
|
|
64
71
|
}
|
|
65
72
|
export type ConnectionState = 'idle' | 'connecting' | 'authenticating' | 'connected' | 'disconnected' | 'error';
|
|
66
73
|
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
67
78
|
export interface DesktopWindowInfo {
|
|
68
79
|
hwnd: string;
|
|
69
80
|
title: string;
|
|
@@ -71,6 +82,13 @@ export interface DesktopWindowInfo {
|
|
|
71
82
|
processName?: string;
|
|
72
83
|
}
|
|
73
84
|
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
|
|
74
92
|
export interface OpenWithApp {
|
|
75
93
|
|
|
76
94
|
name: string;
|
|
@@ -80,6 +98,10 @@ export interface OpenWithApp {
|
|
|
80
98
|
isDefault?: boolean;
|
|
81
99
|
}
|
|
82
100
|
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
83
105
|
export interface DesktopFileEntry {
|
|
84
106
|
|
|
85
107
|
name: string;
|
|
@@ -127,6 +149,9 @@ export interface UIElement {
|
|
|
127
149
|
isEditable?: boolean;
|
|
128
150
|
}
|
|
129
151
|
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
|
|
130
155
|
export interface FlatNode {
|
|
131
156
|
path: string;
|
|
132
157
|
role: string;
|
|
@@ -28,12 +28,23 @@ export interface UIElement {
|
|
|
28
28
|
}
|
|
29
29
|
export declare class UIAutomation {
|
|
30
30
|
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
31
36
|
listApplications(): Promise<AppInfo[]>;
|
|
32
37
|
|
|
38
|
+
|
|
39
|
+
|
|
33
40
|
getUIElements(pid: number): Promise<UIElement[]>;
|
|
34
41
|
|
|
42
|
+
|
|
43
|
+
|
|
35
44
|
clickElement(_elementId: string): Promise<void>;
|
|
36
45
|
|
|
46
|
+
|
|
47
|
+
|
|
37
48
|
setElementValue(_elementId: string, _value: string): Promise<void>;
|
|
38
49
|
private listAppsWindows;
|
|
39
50
|
private parseWindowsApps;
|
|
@@ -7,6 +7,9 @@ export declare const MOUSEEVENTF_WHEEL = 2048;
|
|
|
7
7
|
export declare const MOUSEEVENTF_HWHEEL = 4096;
|
|
8
8
|
export declare const KEYEVENTF_KEYUP = 2;
|
|
9
9
|
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
10
13
|
export declare function isInputControlClassName(className: string): boolean;
|
|
11
14
|
export interface Win32Api {
|
|
12
15
|
|
|
@@ -21,9 +24,16 @@ export interface Win32Api {
|
|
|
21
24
|
|
|
22
25
|
keybdEvent(vk: number, flags: number): void;
|
|
23
26
|
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
24
30
|
isInputFocused(): boolean;
|
|
25
31
|
}
|
|
26
32
|
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
27
37
|
export declare function initWin32Api(): Win32Api | null;
|
|
28
38
|
|
|
29
39
|
export declare function resetWin32ApiForTest(): void;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import
|
|
1
|
+
import p from"axios";import{Router as v}from"express";import{validateToken as f}from"../middleware/auth.js";import{createAiConfigService as x}from"../services/ai-config-service.js";import{applyCurrentAiConfigToInstalledTools as $}from"../services/ai-source-apply.js";import{detectToolStatuses as k}from"../services/tool-installer.js";import{getUserScopeOrThrow as z,requireAgentOwnership as q,requireUserScope as u}from"../services/user-scope.js";import{createLogger as C}from"../utils/logger.js";import{ensureEnabledTools as F}from"../utils/validation.js";const g=C("ai-sources"),S=v();function y(r){if(!r||typeof r!="object"||Array.isArray(r))return[];const e=r,s=Array.isArray(e.data)?e.data:[],o=new Set;for(const a of s){if(!a||typeof a!="object"||Array.isArray(a))continue;const t=String(a.id||"").trim();t&&o.add(t)}return[...o]}async function R(r,e,s){const o=r.replace(/\/+$/,"");if(s==="anthropic-compatible"){const t=`${o.endsWith("/v1")?o.replace(/\/v1$/,""):o}/v1/models`,i=await p.get(t,{headers:{"x-api-key":e,"anthropic-version":"2023-06-01"},timeout:1e4});return y(i.data)}const a=o.endsWith("/v1")?[`${o}/models`]:[`${o}/models`,`${o}/v1/models`];for(const t of a)try{const i=await p.get(t,{headers:{Authorization:`Bearer ${e}`},timeout:1e4}),n=y(i.data);if(n.length>0)return n}catch{}return[]}S.post("/cc-switch/apply-ai-sources",f,u,q,async(r,e)=>{const{agentId:s,template:o,ccSwitchEnabledTools:a,acodeTemplateId:t,claudecodeTemplateId:i,codexTemplateId:n,opencodeTemplateId:c,acodeModelEffort:h,claudecodeModelEffort:T,codexModelEffort:A,opencodeModelEffort:I,acodeSubAgentTemplateId:b,acodeSubAgentModel:M,acodeSubAgentModelEffort:w,acode:E}=r.body||{};if(!s){e.status(400).json({error:"agentId is required"});return}try{const l=z(r),d=x(l),U=F(a),j=await k(U),m=await $({template:o,requestedSources:{acode:E},toolStatus:j,aiConfigService:d});e.json({ok:!0,agentId:String(s),acodeTemplateId:String(t||""),claudecodeTemplateId:String(i||""),codexTemplateId:String(n||""),opencodeTemplateId:String(c||""),acodeModelEffort:String(h||""),claudecodeModelEffort:String(T||""),codexModelEffort:String(A||""),opencodeModelEffort:String(I||""),acodeSubAgentTemplateId:String(b||""),acodeSubAgentModel:String(M||""),acodeSubAgentModelEffort:String(w||""),generatedFromUnifiedTemplate:m.generatedFromUnifiedTemplate,applied:m.applied,skippedTools:m.skippedTools})}catch(l){const d=l;if(g.error("Failed to apply AI sources",{error:d?.message,agentId:String(s||"")}),d?.message?.includes("agent-ownership-mismatch")){e.status(403).json({error:"agent-ownership-mismatch"});return}e.status(400).json({error:d?.message||"apply ai sources failed"})}}),S.post("/cc-switch/list-ai-models",f,u,async(r,e)=>{const{baseUrl:s,apiKey:o,protocolType:a}=r.body||{},t=String(s||"").trim(),i=String(o||"").trim();if(!t||!i){e.status(400).json({error:"baseUrl and apiKey are required"});return}try{const n=await R(t,i,a);e.json({ok:!0,models:n})}catch(n){const c=n;g.error("Failed to list remote AI models",{error:c?.message,baseUrl:t}),e.status(400).json({error:c?.message||"list ai models failed"})}});export{S as aiSourcesRouter};
|
|
2
2
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{promises as S}from"node:fs";import y from"node:path";import{pathToFileURL as C}from"node:url";import{Router as j}from"express";import{getAcodeDataHome as T}from"../config.js";import{validateToken as k}from"../middleware/auth.js";import{
|
|
2
|
-
`);return n>0&&a.shift(),{text:a.slice(-t),fileExists:!0,truncated:r<s}}finally{await o.close()}}p.get("/acode-bg-tasks/:agentId/:taskId/output",k,(e,t)=>{(async()=>{const d=String(e.params.agentId),o=String(e.params.taskId),i=Math.min(2e3,Math.max(100,Number(e.query.tailLines)||500));try{const s=await h();if(s){const r=s.getTaskOutputSnapshot(d,o);if(r){t.json({ok:!0,source:"memory",...w(r)});return}}}catch(s){l.warn("[acode-bg-tasks] \u5185\u5B58\u5FEB\u7167\u8BFB\u53D6\u5931\u8D25,\u964D\u7EA7\u8D70\u78C1\u76D8: %s",s?.message)}try{const s=await I();if(!s){t.status(503).json({ok:!1,error:"store unavailable"});return}const r=await s.readSession(d);if(!r){t.status(404).json({ok:!1,error:"task_not_found"});return}const n=r.tasks.find(f=>f.taskId===o);if(!n){t.status(404).json({ok:!1,error:"task_not_found"});return}const{text:u,fileExists:c,truncated:a}=await x(n.outputPath,i);t.json({ok:!0,source:"file",taskId:n.taskId,status:n.status,exitCode:n.exitCode,signal:n.signal,startedAt:n.startedAt,finishedAt:n.finishedAt,command:n.command,lines:u,nextSeq:0,totalLines:n.outputLineCount,totalBytes:n.outputBytes,truncated:a||!c})}catch(s){l.error("[acode-bg-tasks] \u78C1\u76D8\u515C\u5E95\u8BFB\u53D6\u5931\u8D25: %s",s?.message),t.status(500).json({ok:!1,error:"internal_error"})}})().catch(d=>{l.error("[acode-bg-tasks] output \u8BFB\u53D6\u5931\u8D25: %s",d?.message),t.status(500).json({ok:!1,error:"internal_error"})})}),p.get("/acode-bg-tasks/:agentId/:taskId/stream",k,(e,t)=>{
|
|
1
|
+
import{promises as S}from"node:fs";import y from"node:path";import{pathToFileURL as C}from"node:url";import{Router as j}from"express";import{getAcodeDataHome as T}from"../config.js";import{validateToken as k}from"../middleware/auth.js";import{getAcodeBgManager as h}from"../services/acode-bg-manager.js";import{getReleasedAcodeEntryPath as B}from"../services/acode-package.js";import{createLogger as E}from"../utils/logger.js";import{noteDashboardActivity as _}from"./dashboard.js";import{listPtySessions as L}from"./pty.js";let m=null;function I(){return m||(m=(async()=>{try{const e=B(),t=y.join(y.dirname(e),"background-command-store.js"),d=await import(C(t).href);return d.BackgroundCommandStore?new d.BackgroundCommandStore:(l.warn("[acode-bg-tasks] BackgroundCommandStore \u4E0D\u53EF\u7528,\u78C1\u76D8\u515C\u5E95\u7981\u7528"),null)}catch(e){return l.warn("[acode-bg-tasks] \u52A0\u8F7D BackgroundCommandStore \u5931\u8D25: %s",e?.message),null}})().then(e=>(e||(m=null),e)),m)}const l=E("acode-bg-tasks"),p=j();function v(e){return String(e).replace(/[^a-zA-Z0-9_-]/g,"_")}function P(e){return y.join(T(),"bg-tasks",v(e),"state.json")}p.get("/acode-bg-tasks/:agentId",k,async(e,t)=>{const d=e.params.agentId,o=Array.isArray(d)?d[0]:d;if(!o||!String(o).trim()){t.status(400).json({ok:!1,error:"agentId is required"});return}try{const s=await h();if(s&&typeof s.listTasksWithReconcile=="function"){const r=e.query.status&&String(e.query.status)!=="all"?String(e.query.status):void 0,n=await s.listTasksWithReconcile(String(o),r);t.json({ok:!0,agentId:String(o),updatedAt:Date.now(),tasks:n});return}}catch(s){l.warn("[acode-bg-tasks] \u5185\u5B58\u5BF9\u8D26\u5217\u8868\u5931\u8D25\uFF0C\u964D\u7EA7\u78C1\u76D8\u8BFB\u53D6: %s",s?.message)}const i=P(String(o));try{const s=await S.readFile(i,"utf-8"),r=JSON.parse(s),u=(Array.isArray(r.tasks)?r.tasks:[]).map(c=>{const a=c;return{taskId:a.taskId,status:a.status,command:a.commandPreview??a.command,commandPreview:a.commandPreview,description:typeof a.description=="string"?a.description:void 0,cwd:a.cwd,startedAt:a.startedAt,finishedAt:a.finishedAt,exitCode:a.exitCode,signal:a.signal,outputLineCount:a.outputLineCount,outputBytes:a.outputBytes}});t.json({ok:!0,agentId:String(o),updatedAt:typeof r.updatedAt=="number"?r.updatedAt:null,tasks:u})}catch(s){if((typeof s=="object"&&s!==null?Reflect.get(s,"code"):void 0)==="ENOENT"){t.json({ok:!0,agentId:String(o),updatedAt:null,tasks:[]});return}if(s instanceof SyntaxError){l.warn("[acode-bg-tasks] \u6587\u4EF6\u635F\u574F\uFF08JSON \u89E3\u6790\u5931\u8D25\uFF09: %s",i),t.json({ok:!0,agentId:String(o),updatedAt:null,tasks:[]});return}const n=s;l.error("[acode-bg-tasks] \u8BFB\u53D6\u5931\u8D25: %s",n.message),t.status(500).json({ok:!1,error:n.message})}}),p.get("/acode-agent-pty-sessions/:agentId",k,(e,t)=>{const d=e.params.agentId,o=Array.isArray(d)?d[0]:d;if(!o||!String(o).trim()){t.status(400).json({ok:!1,error:"agentId is required"});return}const i=String(o),r=L().filter(n=>n.ownerUserId===i);t.json({ok:!0,agentId:i,sessions:r})});const N=15e3;function w(e){return{taskId:e.taskId,status:e.status,exitCode:e.exitCode,signal:e.signal,startedAt:e.startedAt,finishedAt:e.finishedAt,command:e.command,lines:e.lines,nextSeq:e.nextSeq,totalLines:e.totalLines,totalBytes:e.totalBytes,truncated:e.truncated}}async function x(e,t){let o=null;try{o=await S.open(e,"r")}catch(i){if(i?.code==="ENOENT")return{text:[],fileExists:!1,truncated:!1};throw i}try{const s=(await o.stat()).size;if(s===0)return{text:[],fileExists:!0,truncated:!1};const r=Math.min(s,2097152),n=s-r,u=Buffer.alloc(r);await o.read(u,0,r,n);const a=u.toString("utf-8").split(`
|
|
2
|
+
`);return n>0&&a.shift(),{text:a.slice(-t),fileExists:!0,truncated:r<s}}finally{await o.close()}}p.get("/acode-bg-tasks/:agentId/:taskId/output",k,(e,t)=>{(async()=>{const d=String(e.params.agentId),o=String(e.params.taskId),i=Math.min(2e3,Math.max(100,Number(e.query.tailLines)||500));try{const s=await h();if(s){const r=s.getTaskOutputSnapshot(d,o);if(r){t.json({ok:!0,source:"memory",...w(r)});return}}}catch(s){l.warn("[acode-bg-tasks] \u5185\u5B58\u5FEB\u7167\u8BFB\u53D6\u5931\u8D25,\u964D\u7EA7\u8D70\u78C1\u76D8: %s",s?.message)}try{const s=await I();if(!s){t.status(503).json({ok:!1,error:"store unavailable"});return}const r=await s.readSession(d);if(!r){t.status(404).json({ok:!1,error:"task_not_found"});return}const n=r.tasks.find(f=>f.taskId===o);if(!n){t.status(404).json({ok:!1,error:"task_not_found"});return}const{text:u,fileExists:c,truncated:a}=await x(n.outputPath,i);t.json({ok:!0,source:"file",taskId:n.taskId,status:n.status,exitCode:n.exitCode,signal:n.signal,startedAt:n.startedAt,finishedAt:n.finishedAt,command:n.command,lines:u,nextSeq:0,totalLines:n.outputLineCount,totalBytes:n.outputBytes,truncated:a||!c})}catch(s){l.error("[acode-bg-tasks] \u78C1\u76D8\u515C\u5E95\u8BFB\u53D6\u5931\u8D25: %s",s?.message),t.status(500).json({ok:!1,error:"internal_error"})}})().catch(d=>{l.error("[acode-bg-tasks] output \u8BFB\u53D6\u5931\u8D25: %s",d?.message),t.status(500).json({ok:!1,error:"internal_error"})})}),p.get("/acode-bg-tasks/:agentId/:taskId/stream",k,(e,t)=>{_(),(async()=>{const d=String(e.params.agentId),o=String(e.params.taskId);t.status(200),t.set({"Content-Type":"text/event-stream","Cache-Control":"no-cache, no-transform",Connection:"keep-alive","X-Accel-Buffering":"no"}),t.flushHeaders?.();const i=(u,c)=>{t.writableEnded||t.destroyed||(c!==void 0&&t.write(`id: ${c}
|
|
3
3
|
`),t.write(`data: ${JSON.stringify(u)}
|
|
4
4
|
|
|
5
5
|
`))};let s,r=null,n=null;try{s=await h(),s&&(r=s,n=s.getTaskOutputSnapshot(d,o))}catch(u){l.warn("[acode-bg-tasks] \u5185\u5B58\u8BFB\u53D6\u5931\u8D25,\u964D\u7EA7\u8D70\u78C1\u76D8: %s",u?.message)}if(n){if(!r){i({type:"done",status:"killed",exitCode:null,signal:null}),t.end();return}if(i({type:"snapshot",source:"memory",...w(n)}),n.status!=="running"){i({type:"done",status:n.status,exitCode:n.exitCode,signal:n.signal}),t.end();return}let u=null,c=!1;const a=()=>{c||(c=!0,u?.(),clearInterval(f))},f=setInterval(()=>{if(t.writableEnded||t.destroyed){a();return}try{t.write(`: ping
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{readFileSync as
|
|
1
|
+
import{readFileSync as v}from"node:fs";import{Router as M}from"express";import{getBridgeInstanceMcpExtraFile as w}from"../config.js";import{validateToken as N}from"../middleware/auth.js";import{getEffective as h,getEffectiveSource as j}from"../services/capability-config.js";import{McpDeployManager as E}from"../services/mcp-deploy.js";import{pluginManager as b}from"../services/plugin-manager.js";import{SkillManager as D}from"../services/skill-manager.js";import{getUserScopeOrThrow as O,requireAgentOwnership as P,requireUserScope as q}from"../services/user-scope.js";import{createLogger as I}from"../utils/logger.js";const T=I("capabilities"),x=M();function l(s){return[...new Set(s.filter(t=>!!t))]}function B(s){try{const t=JSON.parse(v(w(s),"utf8"));return t.servers&&typeof t.servers=="object"?Object.keys(t.servers):[]}catch{return[]}}function c(s,t,r,o,n={}){const a={};for(const i of o){if(n[i]){a[i]=n[i];continue}a[i]={enabled:h(s,t,r,i),source:j(s,t,r,i)}}return a}x.post("/capabilities/state",N,q,P,async(s,t)=>{const r=String((s.body??{})?.agentId??"").trim();if(!r){t.status(400).json({ok:!1,error:"agentId is required"});return}try{const o=O(s),n=D.forScope(o),a=E.forScope(o),p=n.listPrivateSkills(r).filter(e=>e.deployed!==!1).map(e=>e.skillName),m=l([...n.listDeployed().map(e=>e.skillName),...p]),f=B(r),u=l([...a.listDeployed().map(e=>e.name),...f]),g=await b.list(r),d=l([...(await b.listDeployed(o)).map(e=>e.pluginName),...g.map(e=>e.name)]),S={};for(const e of p)S[e]={enabled:!0,source:"agent"};const k={};for(const e of f)k[e]={enabled:!0,source:"agent"};const y={};for(const e of g)String(e.source||"").startsWith("shared:")||(y[e.name]={enabled:e.enabled,source:"agent"});t.json({ok:!0,agentId:r,skills:c(o,r,"skills",m,S),mcp:c(o,r,"mcp",u,k),plugins:c(o,r,"plugins",d,y),deployedSkills:m,deployedMcp:u,deployedPlugins:d})}catch(o){T.warn("[capabilities/state] \u8BFB\u53D6\u80FD\u529B\u72B6\u6001\u5931\u8D25: %s",o.message),t.status(500).json({ok:!1,error:o.message||"read capability state failed"})}});export{x as capabilitiesRouter};
|
|
2
2
|
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
export declare const DASHBOARD_FAVICON_DATA_URI = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTYgMjU2IiByb2xlPSJpbWciIGFyaWEtbGFiZWw9IkFnZW50c1dvcmtTdHVkaW8gQnJpZGdlIj48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9ImF3YkJnIiB4MT0iMCIgeTE9IjAiIHgyPSIxIiB5Mj0iMSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzI1NjNlYiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzFkNGVkOCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJhd2JNYXJrIiB4MT0iMCIgeTE9IjAiIHgyPSIxIiB5Mj0iMSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmZmZiIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2RiZWFmZSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIyNTYiIGhlaWdodD0iMjU2IiByeD0iNjQiIGZpbGw9InVybCgjYXdiQmcpIi8+PGcgZmlsbD0idXJsKCNhd2JNYXJrKSIgZmlsbC1ydWxlPSJldmVub2RkIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjkuMDkgMTcuODIpIHNjYWxlKDAuODYwNzYpIj48cGF0aCBkPSJNNjQgMTc2TDEwMiA4MEgxMjhMMTY2IDE3NkgxNDJMMTM0IDE1Mkg5NUw4OCAxNzZINjRaTTEwMSAxMzJIMTI4TDExNCA5NUwxMDEgMTMyWiIvPjxwYXRoIGQ9Ik0xNjggODBIMTkyTDIwNCAxMjlMMjE2IDgwSDI0MEwyMTkgMTc2SDE5NEwxODAgMTI1TDE2NiAxNzZIMTQxTDEyMCA4MEgxNDRMMTU2IDEyOUwxNjggODBaIi8+PHBhdGggZD0iTTAgODBINDBMNTYgOThWMTEyTDQ0IDEyNEw1NiAxMzZWMTU4TDQwIDE3NkgwWk0xOCA5NkgzNEw0MiAxMDRWMTA4TDM0IDExNkgxOFpNMTggMTQwSDM0TDQyIDE0OFYxNTJMMzQgMTYwSDE4WiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjUzIDApIHRyYW5zbGF0ZSgwIDgwKSBza2V3WCgtMjEuNTk1KSB0cmFuc2xhdGUoMCAtODApIi8+PC9nPjwvc3ZnPg==";
|
|
8
|
+
|
|
9
|
+
export declare const DASHBOARD_FAVICON_LINK: string;
|