aws-runtime-bridge 1.0.0
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/README.md +56 -0
- package/dist/adapter/AdapterRegistry.d.ts +53 -0
- package/dist/adapter/AdapterRegistry.d.ts.map +1 -0
- package/dist/adapter/AdapterRegistry.js +100 -0
- package/dist/adapter/AdapterRegistry.test.d.ts +5 -0
- package/dist/adapter/AdapterRegistry.test.d.ts.map +1 -0
- package/dist/adapter/AdapterRegistry.test.js +109 -0
- package/dist/adapter/ClaudeSdkAdapter.d.ts +120 -0
- package/dist/adapter/ClaudeSdkAdapter.d.ts.map +1 -0
- package/dist/adapter/ClaudeSdkAdapter.js +1140 -0
- package/dist/adapter/ClaudeSdkAdapter.test.d.ts +2 -0
- package/dist/adapter/ClaudeSdkAdapter.test.d.ts.map +1 -0
- package/dist/adapter/ClaudeSdkAdapter.test.js +95 -0
- package/dist/adapter/CodexSdkAdapter.d.ts +48 -0
- package/dist/adapter/CodexSdkAdapter.d.ts.map +1 -0
- package/dist/adapter/CodexSdkAdapter.js +750 -0
- package/dist/adapter/CodexSdkAdapter.test.d.ts +2 -0
- package/dist/adapter/CodexSdkAdapter.test.d.ts.map +1 -0
- package/dist/adapter/CodexSdkAdapter.test.js +245 -0
- package/dist/adapter/OpencodeSdkAdapter.d.ts +45 -0
- package/dist/adapter/OpencodeSdkAdapter.d.ts.map +1 -0
- package/dist/adapter/OpencodeSdkAdapter.js +622 -0
- package/dist/adapter/OpencodeSdkAdapter.test.d.ts +2 -0
- package/dist/adapter/OpencodeSdkAdapter.test.d.ts.map +1 -0
- package/dist/adapter/OpencodeSdkAdapter.test.js +14 -0
- package/dist/adapter/SdkProviderSpi.d.ts +15 -0
- package/dist/adapter/SdkProviderSpi.d.ts.map +1 -0
- package/dist/adapter/SdkProviderSpi.js +46 -0
- package/dist/adapter/adapter.test.d.ts +5 -0
- package/dist/adapter/adapter.test.d.ts.map +1 -0
- package/dist/adapter/adapter.test.js +180 -0
- package/dist/adapter/index.d.ts +11 -0
- package/dist/adapter/index.d.ts.map +1 -0
- package/dist/adapter/index.js +10 -0
- package/dist/adapter/types.d.ts +278 -0
- package/dist/adapter/types.d.ts.map +1 -0
- package/dist/adapter/types.js +278 -0
- package/dist/adapter/types.test.d.ts +2 -0
- package/dist/adapter/types.test.d.ts.map +1 -0
- package/dist/adapter/types.test.js +59 -0
- package/dist/adapters/cc-switch/common.d.ts +52 -0
- package/dist/adapters/cc-switch/common.d.ts.map +1 -0
- package/dist/adapters/cc-switch/common.js +61 -0
- package/dist/adapters/cc-switch/index.d.ts +25 -0
- package/dist/adapters/cc-switch/index.d.ts.map +1 -0
- package/dist/adapters/cc-switch/index.js +51 -0
- package/dist/adapters/cc-switch/mcp-claude.d.ts +15 -0
- package/dist/adapters/cc-switch/mcp-claude.d.ts.map +1 -0
- package/dist/adapters/cc-switch/mcp-claude.js +88 -0
- package/dist/adapters/cc-switch/mcp-claudecode.d.ts +15 -0
- package/dist/adapters/cc-switch/mcp-claudecode.d.ts.map +1 -0
- package/dist/adapters/cc-switch/mcp-claudecode.js +77 -0
- package/dist/adapters/cc-switch/mcp-codex.d.ts +17 -0
- package/dist/adapters/cc-switch/mcp-codex.d.ts.map +1 -0
- package/dist/adapters/cc-switch/mcp-codex.js +248 -0
- package/dist/adapters/cc-switch/mcp-codex.test.d.ts +2 -0
- package/dist/adapters/cc-switch/mcp-codex.test.d.ts.map +1 -0
- package/dist/adapters/cc-switch/mcp-codex.test.js +125 -0
- package/dist/adapters/cc-switch/mcp-opencode.d.ts +23 -0
- package/dist/adapters/cc-switch/mcp-opencode.d.ts.map +1 -0
- package/dist/adapters/cc-switch/mcp-opencode.js +100 -0
- package/dist/adapters/cc-switch/mcp-placeholder.d.ts +14 -0
- package/dist/adapters/cc-switch/mcp-placeholder.d.ts.map +1 -0
- package/dist/adapters/cc-switch/mcp-placeholder.js +19 -0
- package/dist/adapters/cc-switch/skill-claude.d.ts +15 -0
- package/dist/adapters/cc-switch/skill-claude.d.ts.map +1 -0
- package/dist/adapters/cc-switch/skill-claude.js +91 -0
- package/dist/adapters/cc-switch/skill-claudecode.d.ts +15 -0
- package/dist/adapters/cc-switch/skill-claudecode.d.ts.map +1 -0
- package/dist/adapters/cc-switch/skill-claudecode.js +91 -0
- package/dist/adapters/cc-switch/skill-opencode.d.ts +15 -0
- package/dist/adapters/cc-switch/skill-opencode.d.ts.map +1 -0
- package/dist/adapters/cc-switch/skill-opencode.js +95 -0
- package/dist/adapters/cc-switch/skill-placeholder.d.ts +14 -0
- package/dist/adapters/cc-switch/skill-placeholder.d.ts.map +1 -0
- package/dist/adapters/cc-switch/skill-placeholder.js +19 -0
- package/dist/config.d.ts +76 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +109 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +503 -0
- package/dist/middleware/auth.d.ts +12 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +18 -0
- package/dist/routes/ai-sources.d.ts +2 -0
- package/dist/routes/ai-sources.d.ts.map +1 -0
- package/dist/routes/ai-sources.js +136 -0
- package/dist/routes/ai-sources.test.d.ts +2 -0
- package/dist/routes/ai-sources.test.d.ts.map +1 -0
- package/dist/routes/ai-sources.test.js +148 -0
- package/dist/routes/aws-mcp.d.ts +10 -0
- package/dist/routes/aws-mcp.d.ts.map +1 -0
- package/dist/routes/aws-mcp.js +74 -0
- package/dist/routes/aws-mcp.test.d.ts +2 -0
- package/dist/routes/aws-mcp.test.d.ts.map +1 -0
- package/dist/routes/aws-mcp.test.js +42 -0
- package/dist/routes/file-browser.d.ts +7 -0
- package/dist/routes/file-browser.d.ts.map +1 -0
- package/dist/routes/file-browser.js +227 -0
- package/dist/routes/file-browser.test.d.ts +5 -0
- package/dist/routes/file-browser.test.d.ts.map +1 -0
- package/dist/routes/file-browser.test.js +88 -0
- package/dist/routes/git.d.ts +7 -0
- package/dist/routes/git.d.ts.map +1 -0
- package/dist/routes/git.js +470 -0
- package/dist/routes/git.test.d.ts +5 -0
- package/dist/routes/git.test.d.ts.map +1 -0
- package/dist/routes/git.test.js +87 -0
- package/dist/routes/instance.d.ts +3 -0
- package/dist/routes/instance.d.ts.map +1 -0
- package/dist/routes/instance.js +170 -0
- package/dist/routes/instance.test.d.ts +5 -0
- package/dist/routes/instance.test.d.ts.map +1 -0
- package/dist/routes/instance.test.js +64 -0
- package/dist/routes/mcp.d.ts +2 -0
- package/dist/routes/mcp.d.ts.map +1 -0
- package/dist/routes/mcp.js +171 -0
- package/dist/routes/mcp.test.d.ts +5 -0
- package/dist/routes/mcp.test.d.ts.map +1 -0
- package/dist/routes/mcp.test.js +84 -0
- package/dist/routes/memory.d.ts +13 -0
- package/dist/routes/memory.d.ts.map +1 -0
- package/dist/routes/memory.js +429 -0
- package/dist/routes/processes.d.ts +7 -0
- package/dist/routes/processes.d.ts.map +1 -0
- package/dist/routes/processes.js +245 -0
- package/dist/routes/properties.d.ts +7 -0
- package/dist/routes/properties.d.ts.map +1 -0
- package/dist/routes/properties.js +72 -0
- package/dist/routes/properties.test.d.ts +5 -0
- package/dist/routes/properties.test.d.ts.map +1 -0
- package/dist/routes/properties.test.js +72 -0
- package/dist/routes/sessions.d.ts +7 -0
- package/dist/routes/sessions.d.ts.map +1 -0
- package/dist/routes/sessions.js +808 -0
- package/dist/routes/sessions.test.d.ts +5 -0
- package/dist/routes/sessions.test.d.ts.map +1 -0
- package/dist/routes/sessions.test.js +70 -0
- package/dist/routes/skills.d.ts +2 -0
- package/dist/routes/skills.d.ts.map +1 -0
- package/dist/routes/skills.js +162 -0
- package/dist/routes/skills.test.d.ts +5 -0
- package/dist/routes/skills.test.d.ts.map +1 -0
- package/dist/routes/skills.test.js +42 -0
- package/dist/routes/terminal.d.ts +18 -0
- package/dist/routes/terminal.d.ts.map +1 -0
- package/dist/routes/terminal.js +663 -0
- package/dist/routes/terminal.test.d.ts +2 -0
- package/dist/routes/terminal.test.d.ts.map +1 -0
- package/dist/routes/terminal.test.js +91 -0
- package/dist/routes/yml.d.ts +7 -0
- package/dist/routes/yml.d.ts.map +1 -0
- package/dist/routes/yml.js +223 -0
- package/dist/routes/yml.test.d.ts +5 -0
- package/dist/routes/yml.test.d.ts.map +1 -0
- package/dist/routes/yml.test.js +58 -0
- package/dist/services/agent-process-manager.d.ts +241 -0
- package/dist/services/agent-process-manager.d.ts.map +1 -0
- package/dist/services/agent-process-manager.js +762 -0
- package/dist/services/auto-register.d.ts +94 -0
- package/dist/services/auto-register.d.ts.map +1 -0
- package/dist/services/auto-register.js +510 -0
- package/dist/services/aws-client-agent-mcp.d.ts +26 -0
- package/dist/services/aws-client-agent-mcp.d.ts.map +1 -0
- package/dist/services/aws-client-agent-mcp.js +142 -0
- package/dist/services/aws-client-agent-mcp.test.d.ts +2 -0
- package/dist/services/aws-client-agent-mcp.test.d.ts.map +1 -0
- package/dist/services/aws-client-agent-mcp.test.js +89 -0
- package/dist/services/aws-mcp-http.d.ts +11 -0
- package/dist/services/aws-mcp-http.d.ts.map +1 -0
- package/dist/services/aws-mcp-http.js +225 -0
- package/dist/services/aws-mcp-http.test.d.ts +2 -0
- package/dist/services/aws-mcp-http.test.d.ts.map +1 -0
- package/dist/services/aws-mcp-http.test.js +27 -0
- package/dist/services/cc-switch-sdk.d.ts +18 -0
- package/dist/services/cc-switch-sdk.d.ts.map +1 -0
- package/dist/services/cc-switch-sdk.js +117 -0
- package/dist/services/easytier-manager.d.ts +106 -0
- package/dist/services/easytier-manager.d.ts.map +1 -0
- package/dist/services/easytier-manager.js +331 -0
- package/dist/services/easytier-manager.test.d.ts +5 -0
- package/dist/services/easytier-manager.test.d.ts.map +1 -0
- package/dist/services/easytier-manager.test.js +98 -0
- package/dist/services/instance-init-service.d.ts +35 -0
- package/dist/services/instance-init-service.d.ts.map +1 -0
- package/dist/services/instance-init-service.js +190 -0
- package/dist/services/instance-service.d.ts +88 -0
- package/dist/services/instance-service.d.ts.map +1 -0
- package/dist/services/instance-service.js +236 -0
- package/dist/services/instance-state.d.ts +36 -0
- package/dist/services/instance-state.d.ts.map +1 -0
- package/dist/services/instance-state.js +79 -0
- package/dist/services/instance-state.test.d.ts +2 -0
- package/dist/services/instance-state.test.d.ts.map +1 -0
- package/dist/services/instance-state.test.js +213 -0
- package/dist/services/memory-service.d.ts +195 -0
- package/dist/services/memory-service.d.ts.map +1 -0
- package/dist/services/memory-service.js +650 -0
- package/dist/services/orphan-monitor.d.ts +94 -0
- package/dist/services/orphan-monitor.d.ts.map +1 -0
- package/dist/services/orphan-monitor.js +321 -0
- package/dist/services/process-detector.d.ts +175 -0
- package/dist/services/process-detector.d.ts.map +1 -0
- package/dist/services/process-detector.js +992 -0
- package/dist/services/process-registry.d.ts +208 -0
- package/dist/services/process-registry.d.ts.map +1 -0
- package/dist/services/process-registry.js +354 -0
- package/dist/services/session-lookup.d.ts +20 -0
- package/dist/services/session-lookup.d.ts.map +1 -0
- package/dist/services/session-lookup.js +43 -0
- package/dist/services/session-output.d.ts +56 -0
- package/dist/services/session-output.d.ts.map +1 -0
- package/dist/services/session-output.js +122 -0
- package/dist/services/session-output.test.d.ts +5 -0
- package/dist/services/session-output.test.d.ts.map +1 -0
- package/dist/services/session-output.test.js +68 -0
- package/dist/services/terminal-persistence.d.ts +51 -0
- package/dist/services/terminal-persistence.d.ts.map +1 -0
- package/dist/services/terminal-persistence.js +125 -0
- package/dist/services/terminal-persistence.test.d.ts +5 -0
- package/dist/services/terminal-persistence.test.d.ts.map +1 -0
- package/dist/services/terminal-persistence.test.js +88 -0
- package/dist/services/tool-installer.d.ts +15 -0
- package/dist/services/tool-installer.d.ts.map +1 -0
- package/dist/services/tool-installer.js +297 -0
- package/dist/services/tool-installer.test.d.ts +2 -0
- package/dist/services/tool-installer.test.d.ts.map +1 -0
- package/dist/services/tool-installer.test.js +102 -0
- package/dist/services/user-api-key-service.d.ts +28 -0
- package/dist/services/user-api-key-service.d.ts.map +1 -0
- package/dist/services/user-api-key-service.js +75 -0
- package/dist/services/workspace-files.d.ts +85 -0
- package/dist/services/workspace-files.d.ts.map +1 -0
- package/dist/services/workspace-files.js +224 -0
- package/dist/services/workspace-files.test.d.ts +2 -0
- package/dist/services/workspace-files.test.d.ts.map +1 -0
- package/dist/services/workspace-files.test.js +117 -0
- package/dist/types.d.ts +233 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/dist/utils/file-utils.d.ts +13 -0
- package/dist/utils/file-utils.d.ts.map +1 -0
- package/dist/utils/file-utils.js +140 -0
- package/dist/utils/file-utils.test.d.ts +2 -0
- package/dist/utils/file-utils.test.d.ts.map +1 -0
- package/dist/utils/file-utils.test.js +201 -0
- package/dist/utils/logger.d.ts +39 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +110 -0
- package/dist/utils/logger.test.d.ts +2 -0
- package/dist/utils/logger.test.d.ts.map +1 -0
- package/dist/utils/logger.test.js +93 -0
- package/dist/utils/mcp-utils.d.ts +73 -0
- package/dist/utils/mcp-utils.d.ts.map +1 -0
- package/dist/utils/mcp-utils.js +165 -0
- package/dist/utils/path-utils.d.ts +24 -0
- package/dist/utils/path-utils.d.ts.map +1 -0
- package/dist/utils/path-utils.js +44 -0
- package/dist/utils/validation.d.ts +23 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +53 -0
- package/dist/utils/validation.test.d.ts +2 -0
- package/dist/utils/validation.test.d.ts.map +1 -0
- package/dist/utils/validation.test.js +88 -0
- package/dist/utils/yaml-utils.d.ts +73 -0
- package/dist/utils/yaml-utils.d.ts.map +1 -0
- package/dist/utils/yaml-utils.js +309 -0
- package/dist/utils/yaml-utils.test.d.ts +2 -0
- package/dist/utils/yaml-utils.test.d.ts.map +1 -0
- package/dist/utils/yaml-utils.test.js +363 -0
- package/package/aws-client-agent-mcp/README.md +288 -0
- package/package/aws-client-agent-mcp/dist/activity-reporter.d.ts +150 -0
- package/package/aws-client-agent-mcp/dist/activity-reporter.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/activity-reporter.js +353 -0
- package/package/aws-client-agent-mcp/dist/activity-reporter.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/activity-reporter.test.d.ts +2 -0
- package/package/aws-client-agent-mcp/dist/activity-reporter.test.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/activity-reporter.test.js +75 -0
- package/package/aws-client-agent-mcp/dist/activity-reporter.test.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/activity-types.d.ts +96 -0
- package/package/aws-client-agent-mcp/dist/activity-types.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/activity-types.js +141 -0
- package/package/aws-client-agent-mcp/dist/activity-types.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/agent-client.d.ts +165 -0
- package/package/aws-client-agent-mcp/dist/agent-client.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/agent-client.js +588 -0
- package/package/aws-client-agent-mcp/dist/agent-client.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/agent-client.test.d.ts +2 -0
- package/package/aws-client-agent-mcp/dist/agent-client.test.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/agent-client.test.js +534 -0
- package/package/aws-client-agent-mcp/dist/agent-client.test.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/config.d.ts +21 -0
- package/package/aws-client-agent-mcp/dist/config.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/config.js +67 -0
- package/package/aws-client-agent-mcp/dist/config.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/config.test.d.ts +2 -0
- package/package/aws-client-agent-mcp/dist/config.test.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/config.test.js +139 -0
- package/package/aws-client-agent-mcp/dist/config.test.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/constants.d.ts +15 -0
- package/package/aws-client-agent-mcp/dist/constants.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/constants.js +19 -0
- package/package/aws-client-agent-mcp/dist/constants.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/http-client.d.ts +27 -0
- package/package/aws-client-agent-mcp/dist/http-client.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/http-client.js +65 -0
- package/package/aws-client-agent-mcp/dist/http-client.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/http-client.test.d.ts +2 -0
- package/package/aws-client-agent-mcp/dist/http-client.test.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/http-client.test.js +228 -0
- package/package/aws-client-agent-mcp/dist/http-client.test.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/index.d.ts +14 -0
- package/package/aws-client-agent-mcp/dist/index.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/index.js +30 -0
- package/package/aws-client-agent-mcp/dist/index.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/logger.d.ts +7 -0
- package/package/aws-client-agent-mcp/dist/logger.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/logger.js +19 -0
- package/package/aws-client-agent-mcp/dist/logger.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/mcp-server.d.ts +77 -0
- package/package/aws-client-agent-mcp/dist/mcp-server.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/mcp-server.js +427 -0
- package/package/aws-client-agent-mcp/dist/mcp-server.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/mcp-server.test.d.ts +2 -0
- package/package/aws-client-agent-mcp/dist/mcp-server.test.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/mcp-server.test.js +624 -0
- package/package/aws-client-agent-mcp/dist/mcp-server.test.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts +78 -0
- package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/mcp-tools.js +420 -0
- package/package/aws-client-agent-mcp/dist/mcp-tools.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/memory-store.d.ts +61 -0
- package/package/aws-client-agent-mcp/dist/memory-store.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/memory-store.js +268 -0
- package/package/aws-client-agent-mcp/dist/memory-store.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/memory-store.test.d.ts +2 -0
- package/package/aws-client-agent-mcp/dist/memory-store.test.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/memory-store.test.js +164 -0
- package/package/aws-client-agent-mcp/dist/memory-store.test.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/message-buffer.d.ts +74 -0
- package/package/aws-client-agent-mcp/dist/message-buffer.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/message-buffer.js +159 -0
- package/package/aws-client-agent-mcp/dist/message-buffer.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/message-buffer.test.d.ts +2 -0
- package/package/aws-client-agent-mcp/dist/message-buffer.test.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/message-buffer.test.js +44 -0
- package/package/aws-client-agent-mcp/dist/message-buffer.test.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/messageContent.d.ts +53 -0
- package/package/aws-client-agent-mcp/dist/messageContent.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/messageContent.js +125 -0
- package/package/aws-client-agent-mcp/dist/messageContent.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/orchestration-tools.d.ts +19 -0
- package/package/aws-client-agent-mcp/dist/orchestration-tools.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/orchestration-tools.js +317 -0
- package/package/aws-client-agent-mcp/dist/orchestration-tools.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/status-reporter.d.ts +66 -0
- package/package/aws-client-agent-mcp/dist/status-reporter.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/status-reporter.js +220 -0
- package/package/aws-client-agent-mcp/dist/status-reporter.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/status-reporter.test.d.ts +2 -0
- package/package/aws-client-agent-mcp/dist/status-reporter.test.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/status-reporter.test.js +45 -0
- package/package/aws-client-agent-mcp/dist/status-reporter.test.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/types.d.ts +286 -0
- package/package/aws-client-agent-mcp/dist/types.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/types.js +9 -0
- package/package/aws-client-agent-mcp/dist/types.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/user-config-reader.d.ts +63 -0
- package/package/aws-client-agent-mcp/dist/user-config-reader.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/user-config-reader.js +161 -0
- package/package/aws-client-agent-mcp/dist/user-config-reader.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/websocket-client.d.ts +94 -0
- package/package/aws-client-agent-mcp/dist/websocket-client.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/websocket-client.js +316 -0
- package/package/aws-client-agent-mcp/dist/websocket-client.js.map +1 -0
- package/package/aws-client-agent-mcp/dist/websocket-client.test.d.ts +2 -0
- package/package/aws-client-agent-mcp/dist/websocket-client.test.d.ts.map +1 -0
- package/package/aws-client-agent-mcp/dist/websocket-client.test.js +191 -0
- package/package/aws-client-agent-mcp/dist/websocket-client.test.js.map +1 -0
- package/package/aws-client-agent-mcp/package.json +51 -0
- package/package/cc-switch-sdk/README.md +541 -0
- package/package/cc-switch-sdk/dist/adapters/common.d.ts +38 -0
- package/package/cc-switch-sdk/dist/adapters/common.d.ts.map +1 -0
- package/package/cc-switch-sdk/dist/adapters/common.js +47 -0
- package/package/cc-switch-sdk/dist/adapters/index.d.ts +5 -0
- package/package/cc-switch-sdk/dist/adapters/index.d.ts.map +1 -0
- package/package/cc-switch-sdk/dist/adapters/index.js +28 -0
- package/package/cc-switch-sdk/dist/adapters/mcp-claude.d.ts +10 -0
- package/package/cc-switch-sdk/dist/adapters/mcp-claude.d.ts.map +1 -0
- package/package/cc-switch-sdk/dist/adapters/mcp-claude.js +39 -0
- package/package/cc-switch-sdk/dist/adapters/mcp-claudecode.d.ts +10 -0
- package/package/cc-switch-sdk/dist/adapters/mcp-claudecode.d.ts.map +1 -0
- package/package/cc-switch-sdk/dist/adapters/mcp-claudecode.js +40 -0
- package/package/cc-switch-sdk/dist/adapters/mcp-opencode.d.ts +18 -0
- package/package/cc-switch-sdk/dist/adapters/mcp-opencode.d.ts.map +1 -0
- package/package/cc-switch-sdk/dist/adapters/mcp-opencode.js +63 -0
- package/package/cc-switch-sdk/dist/adapters/mcp-opencode.test.d.ts +2 -0
- package/package/cc-switch-sdk/dist/adapters/mcp-opencode.test.d.ts.map +1 -0
- package/package/cc-switch-sdk/dist/adapters/mcp-opencode.test.js +86 -0
- package/package/cc-switch-sdk/dist/adapters/mcp-placeholder.d.ts +9 -0
- package/package/cc-switch-sdk/dist/adapters/mcp-placeholder.d.ts.map +1 -0
- package/package/cc-switch-sdk/dist/adapters/mcp-placeholder.js +14 -0
- package/package/cc-switch-sdk/dist/adapters/skill-claude.d.ts +10 -0
- package/package/cc-switch-sdk/dist/adapters/skill-claude.d.ts.map +1 -0
- package/package/cc-switch-sdk/dist/adapters/skill-claude.js +51 -0
- package/package/cc-switch-sdk/dist/adapters/skill-claudecode.d.ts +10 -0
- package/package/cc-switch-sdk/dist/adapters/skill-claudecode.d.ts.map +1 -0
- package/package/cc-switch-sdk/dist/adapters/skill-claudecode.js +51 -0
- package/package/cc-switch-sdk/dist/adapters/skill-opencode.d.ts +10 -0
- package/package/cc-switch-sdk/dist/adapters/skill-opencode.d.ts.map +1 -0
- package/package/cc-switch-sdk/dist/adapters/skill-opencode.js +51 -0
- package/package/cc-switch-sdk/dist/adapters/skill-placeholder.d.ts +9 -0
- package/package/cc-switch-sdk/dist/adapters/skill-placeholder.d.ts.map +1 -0
- package/package/cc-switch-sdk/dist/adapters/skill-placeholder.js +14 -0
- package/package/cc-switch-sdk/dist/constants.d.ts +9 -0
- package/package/cc-switch-sdk/dist/constants.d.ts.map +1 -0
- package/package/cc-switch-sdk/dist/constants.js +54 -0
- package/package/cc-switch-sdk/dist/errors.d.ts +6 -0
- package/package/cc-switch-sdk/dist/errors.d.ts.map +1 -0
- package/package/cc-switch-sdk/dist/errors.js +8 -0
- package/package/cc-switch-sdk/dist/index.d.ts +11 -0
- package/package/cc-switch-sdk/dist/index.d.ts.map +1 -0
- package/package/cc-switch-sdk/dist/index.js +9 -0
- package/package/cc-switch-sdk/dist/schemas.d.ts +8 -0
- package/package/cc-switch-sdk/dist/schemas.d.ts.map +1 -0
- package/package/cc-switch-sdk/dist/schemas.js +37 -0
- package/package/cc-switch-sdk/dist/sdk.d.ts +91 -0
- package/package/cc-switch-sdk/dist/sdk.d.ts.map +1 -0
- package/package/cc-switch-sdk/dist/sdk.js +427 -0
- package/package/cc-switch-sdk/dist/services/ai-config-service.d.ts +75 -0
- package/package/cc-switch-sdk/dist/services/ai-config-service.d.ts.map +1 -0
- package/package/cc-switch-sdk/dist/services/ai-config-service.js +280 -0
- package/package/cc-switch-sdk/dist/services/instance-service.d.ts +78 -0
- package/package/cc-switch-sdk/dist/services/instance-service.d.ts.map +1 -0
- package/package/cc-switch-sdk/dist/services/instance-service.js +180 -0
- package/package/cc-switch-sdk/dist/services/mcp-model.d.ts +17 -0
- package/package/cc-switch-sdk/dist/services/mcp-model.d.ts.map +1 -0
- package/package/cc-switch-sdk/dist/services/mcp-model.js +34 -0
- package/package/cc-switch-sdk/dist/services/mcp-service.d.ts +18 -0
- package/package/cc-switch-sdk/dist/services/mcp-service.d.ts.map +1 -0
- package/package/cc-switch-sdk/dist/services/mcp-service.js +9 -0
- package/package/cc-switch-sdk/dist/services/skill-model.d.ts +17 -0
- package/package/cc-switch-sdk/dist/services/skill-model.d.ts.map +1 -0
- package/package/cc-switch-sdk/dist/services/skill-model.js +38 -0
- package/package/cc-switch-sdk/dist/services/skill-service.d.ts +17 -0
- package/package/cc-switch-sdk/dist/services/skill-service.d.ts.map +1 -0
- package/package/cc-switch-sdk/dist/services/skill-service.js +9 -0
- package/package/cc-switch-sdk/dist/state.d.ts +4 -0
- package/package/cc-switch-sdk/dist/state.d.ts.map +1 -0
- package/package/cc-switch-sdk/dist/state.js +19 -0
- package/package/cc-switch-sdk/dist/types.d.ts +75 -0
- package/package/cc-switch-sdk/dist/types.d.ts.map +1 -0
- package/package/cc-switch-sdk/dist/types.js +1 -0
- package/package/cc-switch-sdk/dist/utils/fs.d.ts +10 -0
- package/package/cc-switch-sdk/dist/utils/fs.d.ts.map +1 -0
- package/package/cc-switch-sdk/dist/utils/fs.js +91 -0
- package/package/cc-switch-sdk/dist/utils/id.d.ts +4 -0
- package/package/cc-switch-sdk/dist/utils/id.d.ts.map +1 -0
- package/package/cc-switch-sdk/dist/utils/id.js +12 -0
- package/package/cc-switch-sdk/package.json +31 -0
- package/package.json +73 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAS,SAAQ,KAAK;IACjC,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,OAAO,CAAC,EAAE,OAAO,CAAC;gBAEtB,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAM7D"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @cc-switch/sdk - 纯配置管理 SDK
|
|
3
|
+
*
|
|
4
|
+
* 负责 MCP/Skill 的 CRUD 操作和状态管理。
|
|
5
|
+
* 注意:adapters 需要外部注入,SDK 不提供默认实现。
|
|
6
|
+
*/
|
|
7
|
+
import type { AppId, AppFlags, McpServer, McpServerSpec, InstalledSkill, SkillSyncMethod, SdkOptions, SdkPaths, SdkState, IMcpAdapter, ISkillAdapter, AdapterOverrides } from "./types.js";
|
|
8
|
+
import { CcSwitchSdk } from "./sdk.js";
|
|
9
|
+
import { AiConfigService, buildToolSpecificAiConfig, type AiConfigTemplate, type ClaudeCodeConfig, type CodexConfig, type OpenCodeConfig, type AiConfigPaths } from "./services/ai-config-service.js";
|
|
10
|
+
export { CcSwitchSdk, AiConfigService, buildToolSpecificAiConfig, type AppId, type AppFlags, type McpServer, type McpServerSpec, type InstalledSkill, type SkillSyncMethod, type SdkOptions, type SdkPaths, type SdkState, type IMcpAdapter, type ISkillAdapter, type AdapterOverrides, type AiConfigTemplate, type ClaudeCodeConfig, type CodexConfig, type OpenCodeConfig, type AiConfigPaths, };
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,KAAK,EACL,QAAQ,EACR,SAAS,EACT,aAAa,EACb,cAAc,EACd,eAAe,EACf,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,aAAa,EACb,gBAAgB,EACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACL,WAAW,EACX,eAAe,EACf,yBAAyB,EAEzB,KAAK,KAAK,EACV,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,QAAQ,EAEb,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EAErB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,aAAa,GACnB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @cc-switch/sdk - 纯配置管理 SDK
|
|
3
|
+
*
|
|
4
|
+
* 负责 MCP/Skill 的 CRUD 操作和状态管理。
|
|
5
|
+
* 注意:adapters 需要外部注入,SDK 不提供默认实现。
|
|
6
|
+
*/
|
|
7
|
+
import { CcSwitchSdk } from "./sdk.js";
|
|
8
|
+
import { AiConfigService, buildToolSpecificAiConfig, } from "./services/ai-config-service.js";
|
|
9
|
+
export { CcSwitchSdk, AiConfigService, buildToolSpecificAiConfig, };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { AppFlags, InstalledSkill, McpServer, McpServerSpec, SdkState } from "./types.js";
|
|
3
|
+
export declare const appFlagsSchema: z.ZodType<AppFlags>;
|
|
4
|
+
export declare const mcpServerSpecSchema: z.ZodType<McpServerSpec>;
|
|
5
|
+
export declare const mcpServerSchema: z.ZodType<McpServer>;
|
|
6
|
+
export declare const installedSkillSchema: z.ZodType<InstalledSkill>;
|
|
7
|
+
export declare const sdkStateSchema: z.ZodType<SdkState>;
|
|
8
|
+
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EACd,SAAS,EACT,aAAa,EACb,QAAQ,EACT,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAO7C,CAAC;AAEH,eAAO,MAAM,mBAAmB,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAQ3B,CAAC;AAE/B,eAAO,MAAM,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,CAMvB,CAAC;AAE3B,eAAO,MAAM,oBAAoB,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAO5B,CAAC;AAEhC,eAAO,MAAM,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAGtB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const appFlagsSchema = z.object({
|
|
3
|
+
claude: z.boolean(),
|
|
4
|
+
claudecode: z.boolean(),
|
|
5
|
+
codex: z.boolean(),
|
|
6
|
+
gemini: z.boolean(),
|
|
7
|
+
opencode: z.boolean(),
|
|
8
|
+
openclaw: z.boolean(),
|
|
9
|
+
});
|
|
10
|
+
export const mcpServerSpecSchema = z.object({
|
|
11
|
+
type: z.enum(["stdio", "sse", "http"]).optional(),
|
|
12
|
+
command: z.string().optional(),
|
|
13
|
+
args: z.array(z.string()).optional(),
|
|
14
|
+
env: z.record(z.string(), z.string()).optional(),
|
|
15
|
+
cwd: z.string().optional(),
|
|
16
|
+
url: z.string().optional(),
|
|
17
|
+
headers: z.record(z.string(), z.string()).optional(),
|
|
18
|
+
});
|
|
19
|
+
export const mcpServerSchema = z.object({
|
|
20
|
+
id: z.string(),
|
|
21
|
+
name: z.string(),
|
|
22
|
+
server: mcpServerSpecSchema,
|
|
23
|
+
description: z.string().optional(),
|
|
24
|
+
apps: appFlagsSchema,
|
|
25
|
+
});
|
|
26
|
+
export const installedSkillSchema = z.object({
|
|
27
|
+
id: z.string(),
|
|
28
|
+
name: z.string(),
|
|
29
|
+
directory: z.string(),
|
|
30
|
+
description: z.string().optional(),
|
|
31
|
+
apps: appFlagsSchema,
|
|
32
|
+
installedAt: z.number(),
|
|
33
|
+
});
|
|
34
|
+
export const sdkStateSchema = z.object({
|
|
35
|
+
mcpServers: z.record(z.string(), mcpServerSchema),
|
|
36
|
+
skills: z.record(z.string(), installedSkillSchema),
|
|
37
|
+
});
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import type { AppId, InstalledSkill, McpServer, SdkOptions, SdkPaths } from "./types.js";
|
|
2
|
+
import type { CreateMcpInput, UpdateMcpInput } from "./services/mcp-model.js";
|
|
3
|
+
import type { CreateSkillInput, UpdateSkillInput } from "./services/skill-model.js";
|
|
4
|
+
export declare class CcSwitchSdk {
|
|
5
|
+
private readonly paths;
|
|
6
|
+
private readonly skillSyncMethod;
|
|
7
|
+
private readonly mcpAdapters;
|
|
8
|
+
private readonly skillAdapters;
|
|
9
|
+
private state;
|
|
10
|
+
private operationQueue;
|
|
11
|
+
/**
|
|
12
|
+
* 创建 CcSwitchSdk 实例
|
|
13
|
+
*
|
|
14
|
+
* 注意:adapters 必须通过 options.adapters 注入,
|
|
15
|
+
* cc-switch-sdk 不再提供默认的 adapter 实现。
|
|
16
|
+
*
|
|
17
|
+
* @param options - SDK 配置选项
|
|
18
|
+
* @param options.adapters.mcp - MCP 适配器映射(必需)
|
|
19
|
+
* @param options.adapters.skill - Skill 适配器映射(必需)
|
|
20
|
+
*/
|
|
21
|
+
constructor(options: SdkOptions);
|
|
22
|
+
private executeExclusive;
|
|
23
|
+
load(): Promise<void>;
|
|
24
|
+
save(): Promise<void>;
|
|
25
|
+
private getAiConfigPath;
|
|
26
|
+
private getAiBackupPath;
|
|
27
|
+
private backupAiConfigIfNeeded;
|
|
28
|
+
private backupBeforeMcpSyncByApps;
|
|
29
|
+
private backupBeforeMcpSync;
|
|
30
|
+
backupAiConfigs(appIds?: AppId[]): Promise<void>;
|
|
31
|
+
restoreAiConfig(appId: AppId): Promise<boolean>;
|
|
32
|
+
restoreAiConfigs(appIds?: AppId[]): Promise<Record<string, boolean>>;
|
|
33
|
+
getAllMcpServers(): McpServer[];
|
|
34
|
+
getMcpServerById(id: string): McpServer | undefined;
|
|
35
|
+
createMcpServer(input: CreateMcpInput): Promise<McpServer>;
|
|
36
|
+
updateMcpServer(id: string, patch: UpdateMcpInput): Promise<McpServer>;
|
|
37
|
+
deleteMcpServer(id: string): Promise<void>;
|
|
38
|
+
toggleMcpApp(serverId: string, appId: AppId, enabled: boolean): Promise<McpServer>;
|
|
39
|
+
importMcpFromApps(): Promise<number>;
|
|
40
|
+
/**
|
|
41
|
+
* 从单个应用导入 MCP 服务器
|
|
42
|
+
*/
|
|
43
|
+
private importMcpFromApp;
|
|
44
|
+
/**
|
|
45
|
+
* 处理导入的 MCP 服务器(合并或创建)
|
|
46
|
+
* @returns 是否为新创建的 MCP
|
|
47
|
+
*/
|
|
48
|
+
private processImportedMcp;
|
|
49
|
+
/**
|
|
50
|
+
* 根据名称查找 MCP 服务器
|
|
51
|
+
*/
|
|
52
|
+
private findMcpServerByName;
|
|
53
|
+
/**
|
|
54
|
+
* 创建带有应用标记的 MCP 服务器
|
|
55
|
+
*/
|
|
56
|
+
private createMcpWithAppFlag;
|
|
57
|
+
getAllSkills(): InstalledSkill[];
|
|
58
|
+
getSkillById(id: string): InstalledSkill | undefined;
|
|
59
|
+
installSkill(input: CreateSkillInput): Promise<InstalledSkill>;
|
|
60
|
+
updateSkill(id: string, patch: UpdateSkillInput): Promise<InstalledSkill>;
|
|
61
|
+
uninstallSkill(id: string): Promise<void>;
|
|
62
|
+
toggleSkillApp(skillId: string, appId: AppId, enabled: boolean): Promise<InstalledSkill>;
|
|
63
|
+
importSkillsFromApps(): Promise<number>;
|
|
64
|
+
/**
|
|
65
|
+
* 从单个应用导入 Skills
|
|
66
|
+
*/
|
|
67
|
+
private importSkillsFromApp;
|
|
68
|
+
/**
|
|
69
|
+
* 处理导入的 Skill(合并或创建)
|
|
70
|
+
* @returns 是否为新创建的 Skill
|
|
71
|
+
*/
|
|
72
|
+
private processImportedSkill;
|
|
73
|
+
/**
|
|
74
|
+
* 根据名称查找 Skill
|
|
75
|
+
*/
|
|
76
|
+
private findSkillByName;
|
|
77
|
+
/**
|
|
78
|
+
* 合并已存在的 Skill
|
|
79
|
+
*/
|
|
80
|
+
private mergeExistingSkill;
|
|
81
|
+
/**
|
|
82
|
+
* 创建新导入的 Skill
|
|
83
|
+
*/
|
|
84
|
+
private createNewImportedSkill;
|
|
85
|
+
/**
|
|
86
|
+
* 创建带有应用标记的 Skill
|
|
87
|
+
*/
|
|
88
|
+
private createSkillWithAppFlag;
|
|
89
|
+
getPaths(): SdkPaths;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=sdk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,KAAK,EAEL,cAAc,EAEd,SAAS,EACT,UAAU,EACV,QAAQ,EAGT,MAAM,YAAY,CAAC;AAQpB,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAQ9E,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,2BAA2B,CAAC;AA2BnC,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;IACjC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;IACzD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA+B;IAC7D,OAAO,CAAC,KAAK,CAA4C;IACzD,OAAO,CAAC,cAAc,CAAoC;IAE1D;;;;;;;;;OASG;gBACS,OAAO,EAAE,UAAU;YAiBjB,gBAAgB;IAexB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,eAAe;YAKT,sBAAsB;YAgBtB,yBAAyB;YAWzB,mBAAmB;IAI3B,eAAe,CAAC,MAAM,GAAE,KAAK,EAAwC,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrF,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;IAe/C,gBAAgB,CAAC,MAAM,GAAE,KAAK,EAAwC,GAAG,OAAO,CACpF,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CACxB;IAQD,gBAAgB,IAAI,SAAS,EAAE;IAI/B,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI7C,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC;IAW1D,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC;IAetE,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB1C,YAAY,CAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,SAAS,CAAC;IAiBf,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAc1C;;OAEG;YACW,gBAAgB;IAc9B;;;OAGG;YACW,kBAAkB;IAgBhC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAe5B,YAAY,IAAI,cAAc,EAAE;IAIhC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI9C,YAAY,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC;IAmB9D,WAAW,CACf,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,cAAc,CAAC;IAoBpB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiCzC,cAAc,CAClB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,cAAc,CAAC;IAsBpB,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAc7C;;OAEG;YACW,mBAAmB;IAcjC;;;OAGG;YACW,oBAAoB;IAelC;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;YACW,kBAAkB;IAUhC;;OAEG;YACW,sBAAsB;IAWpC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAuB9B,QAAQ,IAAI,QAAQ;CAGrB"}
|
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { resolvePaths } from "./constants.js";
|
|
3
|
+
import { loadState, saveState } from "./state.js";
|
|
4
|
+
import { buildMcpFromInput, mergeMcp, applyMcpAppFlag, } from "./services/mcp-model.js";
|
|
5
|
+
import { syncMcpServerToApps } from "./services/mcp-service.js";
|
|
6
|
+
import { buildSkillFromInput, mergeSkill, applySkillAppFlag, skillSourceDir, } from "./services/skill-model.js";
|
|
7
|
+
import { syncSkillToApps } from "./services/skill-service.js";
|
|
8
|
+
import { copyDir, copyFile, pathExists, removeIfExists, } from "./utils/fs.js";
|
|
9
|
+
import { SdkError } from "./errors.js";
|
|
10
|
+
/**
|
|
11
|
+
* 导入时合并 App 标记
|
|
12
|
+
* 注意:此函数移到 sdk.ts 中,因为它是导入逻辑的一部分
|
|
13
|
+
*/
|
|
14
|
+
function mergeAppFlagOnImport(server, appId) {
|
|
15
|
+
return {
|
|
16
|
+
...server,
|
|
17
|
+
apps: {
|
|
18
|
+
...server.apps,
|
|
19
|
+
[appId]: true,
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export class CcSwitchSdk {
|
|
24
|
+
/**
|
|
25
|
+
* 创建 CcSwitchSdk 实例
|
|
26
|
+
*
|
|
27
|
+
* 注意:adapters 必须通过 options.adapters 注入,
|
|
28
|
+
* cc-switch-sdk 不再提供默认的 adapter 实现。
|
|
29
|
+
*
|
|
30
|
+
* @param options - SDK 配置选项
|
|
31
|
+
* @param options.adapters.mcp - MCP 适配器映射(必需)
|
|
32
|
+
* @param options.adapters.skill - Skill 适配器映射(必需)
|
|
33
|
+
*/
|
|
34
|
+
constructor(options) {
|
|
35
|
+
this.state = { mcpServers: {}, skills: {} };
|
|
36
|
+
this.operationQueue = Promise.resolve();
|
|
37
|
+
if (!options.adapters?.mcp || !options.adapters?.skill) {
|
|
38
|
+
throw new SdkError("ADAPTERS_REQUIRED", "Adapters are required. Please provide mcp and skill adapters via options.adapters.", { hasMcp: !!options.adapters?.mcp, hasSkill: !!options.adapters?.skill });
|
|
39
|
+
}
|
|
40
|
+
const resolved = resolvePaths(options);
|
|
41
|
+
this.paths = resolved.paths;
|
|
42
|
+
this.skillSyncMethod = resolved.skillSyncMethod;
|
|
43
|
+
this.mcpAdapters = options.adapters.mcp;
|
|
44
|
+
this.skillAdapters = options.adapters.skill;
|
|
45
|
+
}
|
|
46
|
+
async executeExclusive(operation) {
|
|
47
|
+
const previous = this.operationQueue;
|
|
48
|
+
let release;
|
|
49
|
+
this.operationQueue = new Promise((resolve) => {
|
|
50
|
+
release = resolve;
|
|
51
|
+
});
|
|
52
|
+
await previous;
|
|
53
|
+
try {
|
|
54
|
+
return await operation();
|
|
55
|
+
}
|
|
56
|
+
finally {
|
|
57
|
+
release();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async load() {
|
|
61
|
+
this.state = await loadState(this.paths.stateFile);
|
|
62
|
+
}
|
|
63
|
+
async save() {
|
|
64
|
+
await saveState(this.paths.stateFile, this.state);
|
|
65
|
+
}
|
|
66
|
+
getAiConfigPath(appId) {
|
|
67
|
+
if (appId === "opencode") {
|
|
68
|
+
return this.paths.opencodeConfigFile;
|
|
69
|
+
}
|
|
70
|
+
if (appId === "claudecode") {
|
|
71
|
+
return this.paths.claudecodeConfigFile;
|
|
72
|
+
}
|
|
73
|
+
if (appId === "codex") {
|
|
74
|
+
return this.paths.codexConfigFile;
|
|
75
|
+
}
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
getAiBackupPath(appId) {
|
|
79
|
+
const extension = appId === "codex" ? "toml" : "json";
|
|
80
|
+
return path.join(this.paths.backupDir, `${appId}.config.backup.${extension}`);
|
|
81
|
+
}
|
|
82
|
+
async backupAiConfigIfNeeded(appId) {
|
|
83
|
+
const configPath = this.getAiConfigPath(appId);
|
|
84
|
+
if (!configPath) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
const backupPath = this.getAiBackupPath(appId);
|
|
88
|
+
if (await pathExists(backupPath)) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (await pathExists(configPath)) {
|
|
92
|
+
await copyFile(configPath, backupPath);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
async backupBeforeMcpSyncByApps(apps) {
|
|
96
|
+
const targets = ["opencode", "claudecode", "codex"];
|
|
97
|
+
for (const appId of targets) {
|
|
98
|
+
if (apps[appId]) {
|
|
99
|
+
await this.backupAiConfigIfNeeded(appId);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async backupBeforeMcpSync(server) {
|
|
104
|
+
await this.backupBeforeMcpSyncByApps(server.apps);
|
|
105
|
+
}
|
|
106
|
+
async backupAiConfigs(appIds = ["opencode", "claudecode", "codex"]) {
|
|
107
|
+
for (const appId of appIds) {
|
|
108
|
+
await this.backupAiConfigIfNeeded(appId);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
async restoreAiConfig(appId) {
|
|
112
|
+
const configPath = this.getAiConfigPath(appId);
|
|
113
|
+
if (!configPath) {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
const backupPath = this.getAiBackupPath(appId);
|
|
117
|
+
if (!(await pathExists(backupPath))) {
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
await copyFile(backupPath, configPath);
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
async restoreAiConfigs(appIds = ["opencode", "claudecode", "codex"]) {
|
|
124
|
+
const result = {};
|
|
125
|
+
for (const appId of appIds) {
|
|
126
|
+
result[appId] = await this.restoreAiConfig(appId);
|
|
127
|
+
}
|
|
128
|
+
return result;
|
|
129
|
+
}
|
|
130
|
+
getAllMcpServers() {
|
|
131
|
+
return Object.values(this.state.mcpServers);
|
|
132
|
+
}
|
|
133
|
+
getMcpServerById(id) {
|
|
134
|
+
return this.state.mcpServers[id];
|
|
135
|
+
}
|
|
136
|
+
async createMcpServer(input) {
|
|
137
|
+
return this.executeExclusive(async () => {
|
|
138
|
+
const server = buildMcpFromInput(input);
|
|
139
|
+
this.state.mcpServers[server.id] = server;
|
|
140
|
+
await this.backupBeforeMcpSync(server);
|
|
141
|
+
await syncMcpServerToApps(server, this.mcpAdapters);
|
|
142
|
+
await this.save();
|
|
143
|
+
return server;
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
async updateMcpServer(id, patch) {
|
|
147
|
+
return this.executeExclusive(async () => {
|
|
148
|
+
const current = this.state.mcpServers[id];
|
|
149
|
+
if (!current) {
|
|
150
|
+
throw new SdkError("MCP_NOT_FOUND", `MCP server not found: ${id}`, { id });
|
|
151
|
+
}
|
|
152
|
+
const updated = mergeMcp(current, patch);
|
|
153
|
+
this.state.mcpServers[id] = updated;
|
|
154
|
+
await this.backupBeforeMcpSync(updated);
|
|
155
|
+
await syncMcpServerToApps(updated, this.mcpAdapters);
|
|
156
|
+
await this.save();
|
|
157
|
+
return updated;
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
async deleteMcpServer(id) {
|
|
161
|
+
return this.executeExclusive(async () => {
|
|
162
|
+
const server = this.state.mcpServers[id];
|
|
163
|
+
if (!server) {
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const disabled = {
|
|
167
|
+
...server,
|
|
168
|
+
apps: {
|
|
169
|
+
claude: false,
|
|
170
|
+
claudecode: false,
|
|
171
|
+
codex: false,
|
|
172
|
+
gemini: false,
|
|
173
|
+
opencode: false,
|
|
174
|
+
openclaw: false,
|
|
175
|
+
},
|
|
176
|
+
};
|
|
177
|
+
await syncMcpServerToApps(disabled, this.mcpAdapters);
|
|
178
|
+
delete this.state.mcpServers[id];
|
|
179
|
+
await this.save();
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
async toggleMcpApp(serverId, appId, enabled) {
|
|
183
|
+
return this.executeExclusive(async () => {
|
|
184
|
+
const current = this.state.mcpServers[serverId];
|
|
185
|
+
if (!current) {
|
|
186
|
+
throw new SdkError("MCP_NOT_FOUND", `MCP server not found: ${serverId}`, {
|
|
187
|
+
serverId,
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
const updated = applyMcpAppFlag(current, appId, enabled);
|
|
191
|
+
this.state.mcpServers[serverId] = updated;
|
|
192
|
+
await this.backupBeforeMcpSyncByApps({ [appId]: enabled });
|
|
193
|
+
await syncMcpServerToApps(updated, this.mcpAdapters);
|
|
194
|
+
await this.save();
|
|
195
|
+
return updated;
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
async importMcpFromApps() {
|
|
199
|
+
return this.executeExclusive(async () => {
|
|
200
|
+
let count = 0;
|
|
201
|
+
const apps = ["claude", "claudecode", "opencode", "codex", "gemini", "openclaw"];
|
|
202
|
+
for (const appId of apps) {
|
|
203
|
+
count += await this.importMcpFromApp(appId);
|
|
204
|
+
}
|
|
205
|
+
await this.save();
|
|
206
|
+
return count;
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* 从单个应用导入 MCP 服务器
|
|
211
|
+
*/
|
|
212
|
+
async importMcpFromApp(appId) {
|
|
213
|
+
let count = 0;
|
|
214
|
+
const imported = await this.mcpAdapters[appId].importServers();
|
|
215
|
+
for (const imp of imported) {
|
|
216
|
+
const isNew = await this.processImportedMcp(imp, appId);
|
|
217
|
+
if (isNew) {
|
|
218
|
+
count++;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return count;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* 处理导入的 MCP 服务器(合并或创建)
|
|
225
|
+
* @returns 是否为新创建的 MCP
|
|
226
|
+
*/
|
|
227
|
+
async processImportedMcp(imp, appId) {
|
|
228
|
+
const existing = this.findMcpServerByName(imp.name);
|
|
229
|
+
if (existing) {
|
|
230
|
+
const merged = mergeAppFlagOnImport(existing, appId);
|
|
231
|
+
this.state.mcpServers[existing.id] = merged;
|
|
232
|
+
await syncMcpServerToApps(merged, this.mcpAdapters);
|
|
233
|
+
return false;
|
|
234
|
+
}
|
|
235
|
+
const withFlag = this.createMcpWithAppFlag(imp, appId);
|
|
236
|
+
this.state.mcpServers[withFlag.id] = withFlag;
|
|
237
|
+
await syncMcpServerToApps(withFlag, this.mcpAdapters);
|
|
238
|
+
return true;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* 根据名称查找 MCP 服务器
|
|
242
|
+
*/
|
|
243
|
+
findMcpServerByName(name) {
|
|
244
|
+
return Object.values(this.state.mcpServers).find((s) => s.name === name);
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* 创建带有应用标记的 MCP 服务器
|
|
248
|
+
*/
|
|
249
|
+
createMcpWithAppFlag(imp, appId) {
|
|
250
|
+
return {
|
|
251
|
+
...imp,
|
|
252
|
+
apps: {
|
|
253
|
+
claude: false,
|
|
254
|
+
claudecode: false,
|
|
255
|
+
codex: false,
|
|
256
|
+
gemini: false,
|
|
257
|
+
opencode: false,
|
|
258
|
+
openclaw: false,
|
|
259
|
+
[appId]: true,
|
|
260
|
+
},
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
getAllSkills() {
|
|
264
|
+
return Object.values(this.state.skills);
|
|
265
|
+
}
|
|
266
|
+
getSkillById(id) {
|
|
267
|
+
return this.state.skills[id];
|
|
268
|
+
}
|
|
269
|
+
async installSkill(input) {
|
|
270
|
+
return this.executeExclusive(async () => {
|
|
271
|
+
const ssotDir = this.paths.ssotSkillsDir;
|
|
272
|
+
const skill = buildSkillFromInput(input);
|
|
273
|
+
const targetSource = skillSourceDir(ssotDir, skill);
|
|
274
|
+
await copyDir(input.sourceDir, targetSource);
|
|
275
|
+
this.state.skills[skill.id] = skill;
|
|
276
|
+
await syncSkillToApps(skill, targetSource, this.skillSyncMethod, this.skillAdapters);
|
|
277
|
+
await this.save();
|
|
278
|
+
return skill;
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
async updateSkill(id, patch) {
|
|
282
|
+
return this.executeExclusive(async () => {
|
|
283
|
+
const current = this.state.skills[id];
|
|
284
|
+
if (!current) {
|
|
285
|
+
throw new SdkError("SKILL_NOT_FOUND", `Skill not found: ${id}`, { id });
|
|
286
|
+
}
|
|
287
|
+
const updated = mergeSkill(current, patch);
|
|
288
|
+
this.state.skills[id] = updated;
|
|
289
|
+
const source = skillSourceDir(this.paths.ssotSkillsDir, updated);
|
|
290
|
+
await syncSkillToApps(updated, source, this.skillSyncMethod, this.skillAdapters);
|
|
291
|
+
await this.save();
|
|
292
|
+
return updated;
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
async uninstallSkill(id) {
|
|
296
|
+
return this.executeExclusive(async () => {
|
|
297
|
+
const skill = this.state.skills[id];
|
|
298
|
+
if (!skill) {
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
const disabled = {
|
|
302
|
+
...skill,
|
|
303
|
+
apps: {
|
|
304
|
+
claude: false,
|
|
305
|
+
claudecode: false,
|
|
306
|
+
codex: false,
|
|
307
|
+
gemini: false,
|
|
308
|
+
opencode: false,
|
|
309
|
+
openclaw: false,
|
|
310
|
+
},
|
|
311
|
+
};
|
|
312
|
+
const source = skillSourceDir(this.paths.ssotSkillsDir, skill);
|
|
313
|
+
await syncSkillToApps(disabled, source, this.skillSyncMethod, this.skillAdapters);
|
|
314
|
+
delete this.state.skills[id];
|
|
315
|
+
const sourceDir = skillSourceDir(this.paths.ssotSkillsDir, skill);
|
|
316
|
+
await removeIfExists(sourceDir);
|
|
317
|
+
await this.save();
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
async toggleSkillApp(skillId, appId, enabled) {
|
|
321
|
+
return this.executeExclusive(async () => {
|
|
322
|
+
const current = this.state.skills[skillId];
|
|
323
|
+
if (!current) {
|
|
324
|
+
throw new SdkError("SKILL_NOT_FOUND", `Skill not found: ${skillId}`, {
|
|
325
|
+
skillId,
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
const updated = applySkillAppFlag(current, appId, enabled);
|
|
329
|
+
this.state.skills[skillId] = updated;
|
|
330
|
+
const source = skillSourceDir(this.paths.ssotSkillsDir, updated);
|
|
331
|
+
await syncSkillToApps(updated, source, this.skillSyncMethod, this.skillAdapters);
|
|
332
|
+
await this.save();
|
|
333
|
+
return updated;
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
async importSkillsFromApps() {
|
|
337
|
+
return this.executeExclusive(async () => {
|
|
338
|
+
let count = 0;
|
|
339
|
+
const apps = ["claude", "claudecode", "opencode", "codex", "gemini", "openclaw"];
|
|
340
|
+
for (const appId of apps) {
|
|
341
|
+
count += await this.importSkillsFromApp(appId);
|
|
342
|
+
}
|
|
343
|
+
await this.save();
|
|
344
|
+
return count;
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* 从单个应用导入 Skills
|
|
349
|
+
*/
|
|
350
|
+
async importSkillsFromApp(appId) {
|
|
351
|
+
let count = 0;
|
|
352
|
+
const imported = await this.skillAdapters[appId].importSkills();
|
|
353
|
+
for (const imp of imported) {
|
|
354
|
+
const isNew = await this.processImportedSkill(imp, appId);
|
|
355
|
+
if (isNew) {
|
|
356
|
+
count++;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
return count;
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* 处理导入的 Skill(合并或创建)
|
|
363
|
+
* @returns 是否为新创建的 Skill
|
|
364
|
+
*/
|
|
365
|
+
async processImportedSkill(imp, appId) {
|
|
366
|
+
const existing = this.findSkillByName(imp.name);
|
|
367
|
+
if (existing) {
|
|
368
|
+
await this.mergeExistingSkill(existing, appId);
|
|
369
|
+
return false;
|
|
370
|
+
}
|
|
371
|
+
await this.createNewImportedSkill(imp, appId);
|
|
372
|
+
return true;
|
|
373
|
+
}
|
|
374
|
+
/**
|
|
375
|
+
* 根据名称查找 Skill
|
|
376
|
+
*/
|
|
377
|
+
findSkillByName(name) {
|
|
378
|
+
return Object.values(this.state.skills).find((s) => s.name === name);
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* 合并已存在的 Skill
|
|
382
|
+
*/
|
|
383
|
+
async mergeExistingSkill(existing, appId) {
|
|
384
|
+
const merged = {
|
|
385
|
+
...existing,
|
|
386
|
+
apps: { ...existing.apps, [appId]: true },
|
|
387
|
+
};
|
|
388
|
+
this.state.skills[existing.id] = merged;
|
|
389
|
+
const source = skillSourceDir(this.paths.ssotSkillsDir, merged);
|
|
390
|
+
await syncSkillToApps(merged, source, this.skillSyncMethod, this.skillAdapters);
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* 创建新导入的 Skill
|
|
394
|
+
*/
|
|
395
|
+
async createNewImportedSkill(imp, appId) {
|
|
396
|
+
const withFlag = this.createSkillWithAppFlag(imp, appId);
|
|
397
|
+
this.state.skills[withFlag.id] = withFlag;
|
|
398
|
+
const source = skillSourceDir(this.paths.ssotSkillsDir, withFlag);
|
|
399
|
+
await copyDir(imp.directory, source);
|
|
400
|
+
await syncSkillToApps(withFlag, source, this.skillSyncMethod, this.skillAdapters);
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* 创建带有应用标记的 Skill
|
|
404
|
+
*/
|
|
405
|
+
createSkillWithAppFlag(imp, appId) {
|
|
406
|
+
const now = Date.now();
|
|
407
|
+
return {
|
|
408
|
+
id: imp.id,
|
|
409
|
+
name: imp.name,
|
|
410
|
+
directory: imp.directory,
|
|
411
|
+
description: imp.description,
|
|
412
|
+
apps: {
|
|
413
|
+
claude: false,
|
|
414
|
+
claudecode: false,
|
|
415
|
+
codex: false,
|
|
416
|
+
gemini: false,
|
|
417
|
+
opencode: false,
|
|
418
|
+
openclaw: false,
|
|
419
|
+
[appId]: true,
|
|
420
|
+
},
|
|
421
|
+
installedAt: now,
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
getPaths() {
|
|
425
|
+
return this.paths;
|
|
426
|
+
}
|
|
427
|
+
}
|