axon-code 2.4.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/LICENSE +661 -0
- package/README.md +261 -0
- package/README.zh-CN.md +261 -0
- package/dist/agents/context.d.ts +289 -0
- package/dist/agents/context.d.ts.map +1 -0
- package/dist/agents/context.js +944 -0
- package/dist/agents/context.js.map +1 -0
- package/dist/agents/explore.d.ts +190 -0
- package/dist/agents/explore.d.ts.map +1 -0
- package/dist/agents/explore.js +582 -0
- package/dist/agents/explore.js.map +1 -0
- package/dist/agents/guide.d.ts +117 -0
- package/dist/agents/guide.d.ts.map +1 -0
- package/dist/agents/guide.js +690 -0
- package/dist/agents/guide.js.map +1 -0
- package/dist/agents/index.d.ts +11 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +17 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/monitor.d.ts +343 -0
- package/dist/agents/monitor.d.ts.map +1 -0
- package/dist/agents/monitor.js +963 -0
- package/dist/agents/monitor.js.map +1 -0
- package/dist/agents/parallel.d.ts +305 -0
- package/dist/agents/parallel.d.ts.map +1 -0
- package/dist/agents/parallel.js +717 -0
- package/dist/agents/parallel.js.map +1 -0
- package/dist/agents/plan.d.ts +236 -0
- package/dist/agents/plan.d.ts.map +1 -0
- package/dist/agents/plan.js +292 -0
- package/dist/agents/plan.js.map +1 -0
- package/dist/agents/resume.d.ts +209 -0
- package/dist/agents/resume.d.ts.map +1 -0
- package/dist/agents/resume.js +520 -0
- package/dist/agents/resume.js.map +1 -0
- package/dist/agents/statusline.d.ts +167 -0
- package/dist/agents/statusline.d.ts.map +1 -0
- package/dist/agents/statusline.js +546 -0
- package/dist/agents/statusline.js.map +1 -0
- package/dist/agents/teammate-context.d.ts +163 -0
- package/dist/agents/teammate-context.d.ts.map +1 -0
- package/dist/agents/teammate-context.js +272 -0
- package/dist/agents/teammate-context.js.map +1 -0
- package/dist/agents/tools.d.ts +30 -0
- package/dist/agents/tools.d.ts.map +1 -0
- package/dist/agents/tools.js +116 -0
- package/dist/agents/tools.js.map +1 -0
- package/dist/auth/index.d.ts +204 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +1266 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/keychain.d.ts +74 -0
- package/dist/auth/keychain.d.ts.map +1 -0
- package/dist/auth/keychain.js +181 -0
- package/dist/auth/keychain.js.map +1 -0
- package/dist/auth/settings.d.ts +58 -0
- package/dist/auth/settings.d.ts.map +1 -0
- package/dist/auth/settings.js +260 -0
- package/dist/auth/settings.js.map +1 -0
- package/dist/background/index.d.ts +83 -0
- package/dist/background/index.d.ts.map +1 -0
- package/dist/background/index.js +106 -0
- package/dist/background/index.js.map +1 -0
- package/dist/background/persistence.d.ts +146 -0
- package/dist/background/persistence.d.ts.map +1 -0
- package/dist/background/persistence.js +347 -0
- package/dist/background/persistence.js.map +1 -0
- package/dist/background/shell-manager.d.ts +130 -0
- package/dist/background/shell-manager.d.ts.map +1 -0
- package/dist/background/shell-manager.js +401 -0
- package/dist/background/shell-manager.js.map +1 -0
- package/dist/background/task-queue.d.ts +96 -0
- package/dist/background/task-queue.d.ts.map +1 -0
- package/dist/background/task-queue.js +199 -0
- package/dist/background/task-queue.js.map +1 -0
- package/dist/background/timeout.d.ts +122 -0
- package/dist/background/timeout.d.ts.map +1 -0
- package/dist/background/timeout.js +247 -0
- package/dist/background/timeout.js.map +1 -0
- package/dist/blueprint/agent-decision-maker.d.ts +126 -0
- package/dist/blueprint/agent-decision-maker.d.ts.map +1 -0
- package/dist/blueprint/agent-decision-maker.js +433 -0
- package/dist/blueprint/agent-decision-maker.js.map +1 -0
- package/dist/blueprint/autonomous-worker.d.ts +182 -0
- package/dist/blueprint/autonomous-worker.d.ts.map +1 -0
- package/dist/blueprint/autonomous-worker.js +808 -0
- package/dist/blueprint/autonomous-worker.js.map +1 -0
- package/dist/blueprint/browser-test-tools.d.ts +277 -0
- package/dist/blueprint/browser-test-tools.d.ts.map +1 -0
- package/dist/blueprint/browser-test-tools.js +645 -0
- package/dist/blueprint/browser-test-tools.js.map +1 -0
- package/dist/blueprint/e2e-agent-registry.d.ts +27 -0
- package/dist/blueprint/e2e-agent-registry.d.ts.map +1 -0
- package/dist/blueprint/e2e-agent-registry.js +39 -0
- package/dist/blueprint/e2e-agent-registry.js.map +1 -0
- package/dist/blueprint/e2e-test-agent.d.ts +151 -0
- package/dist/blueprint/e2e-test-agent.d.ts.map +1 -0
- package/dist/blueprint/e2e-test-agent.js +612 -0
- package/dist/blueprint/e2e-test-agent.js.map +1 -0
- package/dist/blueprint/environment-checker.d.ts +113 -0
- package/dist/blueprint/environment-checker.d.ts.map +1 -0
- package/dist/blueprint/environment-checker.js +409 -0
- package/dist/blueprint/environment-checker.js.map +1 -0
- package/dist/blueprint/index.d.ts +26 -0
- package/dist/blueprint/index.d.ts.map +1 -0
- package/dist/blueprint/index.js +50 -0
- package/dist/blueprint/index.js.map +1 -0
- package/dist/blueprint/lead-agent.d.ts +97 -0
- package/dist/blueprint/lead-agent.d.ts.map +1 -0
- package/dist/blueprint/lead-agent.js +905 -0
- package/dist/blueprint/lead-agent.js.map +1 -0
- package/dist/blueprint/model-selector.d.ts +34 -0
- package/dist/blueprint/model-selector.d.ts.map +1 -0
- package/dist/blueprint/model-selector.js +83 -0
- package/dist/blueprint/model-selector.js.map +1 -0
- package/dist/blueprint/planner-session.d.ts +130 -0
- package/dist/blueprint/planner-session.d.ts.map +1 -0
- package/dist/blueprint/planner-session.js +479 -0
- package/dist/blueprint/planner-session.js.map +1 -0
- package/dist/blueprint/realtime-coordinator.d.ts +373 -0
- package/dist/blueprint/realtime-coordinator.d.ts.map +1 -0
- package/dist/blueprint/realtime-coordinator.js +1454 -0
- package/dist/blueprint/realtime-coordinator.js.map +1 -0
- package/dist/blueprint/smart-planner.d.ts +346 -0
- package/dist/blueprint/smart-planner.d.ts.map +1 -0
- package/dist/blueprint/smart-planner.js +2426 -0
- package/dist/blueprint/smart-planner.js.map +1 -0
- package/dist/blueprint/task-queue.d.ts +62 -0
- package/dist/blueprint/task-queue.d.ts.map +1 -0
- package/dist/blueprint/task-queue.js +185 -0
- package/dist/blueprint/task-queue.js.map +1 -0
- package/dist/blueprint/task-reviewer.d.ts +168 -0
- package/dist/blueprint/task-reviewer.d.ts.map +1 -0
- package/dist/blueprint/task-reviewer.js +570 -0
- package/dist/blueprint/task-reviewer.js.map +1 -0
- package/dist/blueprint/types.d.ts +1054 -0
- package/dist/blueprint/types.d.ts.map +1 -0
- package/dist/blueprint/types.js +49 -0
- package/dist/blueprint/types.js.map +1 -0
- package/dist/blueprint/verification-service.d.ts +134 -0
- package/dist/blueprint/verification-service.d.ts.map +1 -0
- package/dist/blueprint/verification-service.js +315 -0
- package/dist/blueprint/verification-service.js.map +1 -0
- package/dist/blueprint/visual-comparator.d.ts +112 -0
- package/dist/blueprint/visual-comparator.d.ts.map +1 -0
- package/dist/blueprint/visual-comparator.js +309 -0
- package/dist/blueprint/visual-comparator.js.map +1 -0
- package/dist/browser/controller.d.ts +188 -0
- package/dist/browser/controller.d.ts.map +1 -0
- package/dist/browser/controller.js +1256 -0
- package/dist/browser/controller.js.map +1 -0
- package/dist/browser/detect.d.ts +14 -0
- package/dist/browser/detect.d.ts.map +1 -0
- package/dist/browser/detect.js +93 -0
- package/dist/browser/detect.js.map +1 -0
- package/dist/browser/errors.d.ts +14 -0
- package/dist/browser/errors.d.ts.map +1 -0
- package/dist/browser/errors.js +45 -0
- package/dist/browser/errors.js.map +1 -0
- package/dist/browser/extension/background-utils.js +53 -0
- package/dist/browser/extension/background.js +895 -0
- package/dist/browser/extension/manifest.json +28 -0
- package/dist/browser/extension/options.html +214 -0
- package/dist/browser/extension/options.js +201 -0
- package/dist/browser/extension-relay-auth.d.ts +18 -0
- package/dist/browser/extension-relay-auth.d.ts.map +1 -0
- package/dist/browser/extension-relay-auth.js +53 -0
- package/dist/browser/extension-relay-auth.js.map +1 -0
- package/dist/browser/extension-relay.d.ts +39 -0
- package/dist/browser/extension-relay.d.ts.map +1 -0
- package/dist/browser/extension-relay.js +855 -0
- package/dist/browser/extension-relay.js.map +1 -0
- package/dist/browser/index.d.ts +11 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +11 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/manager.d.ts +77 -0
- package/dist/browser/manager.d.ts.map +1 -0
- package/dist/browser/manager.js +911 -0
- package/dist/browser/manager.js.map +1 -0
- package/dist/browser/navigation-guard.d.ts +15 -0
- package/dist/browser/navigation-guard.d.ts.map +1 -0
- package/dist/browser/navigation-guard.js +163 -0
- package/dist/browser/navigation-guard.js.map +1 -0
- package/dist/browser/profiles.d.ts +49 -0
- package/dist/browser/profiles.d.ts.map +1 -0
- package/dist/browser/profiles.js +211 -0
- package/dist/browser/profiles.js.map +1 -0
- package/dist/browser/types.d.ts +96 -0
- package/dist/browser/types.d.ts.map +1 -0
- package/dist/browser/types.js +5 -0
- package/dist/browser/types.js.map +1 -0
- package/dist/checkpoint/index.d.ts +289 -0
- package/dist/checkpoint/index.d.ts.map +1 -0
- package/dist/checkpoint/index.js +1424 -0
- package/dist/checkpoint/index.js.map +1 -0
- package/dist/chrome/index.d.ts +31 -0
- package/dist/chrome/index.d.ts.map +1 -0
- package/dist/chrome/index.js +41 -0
- package/dist/chrome/index.js.map +1 -0
- package/dist/chrome-mcp/index.d.ts +84 -0
- package/dist/chrome-mcp/index.d.ts.map +1 -0
- package/dist/chrome-mcp/index.js +192 -0
- package/dist/chrome-mcp/index.js.map +1 -0
- package/dist/chrome-mcp/mcp-server.d.ts +115 -0
- package/dist/chrome-mcp/mcp-server.d.ts.map +1 -0
- package/dist/chrome-mcp/mcp-server.js +312 -0
- package/dist/chrome-mcp/mcp-server.js.map +1 -0
- package/dist/chrome-mcp/native-host.d.ts +65 -0
- package/dist/chrome-mcp/native-host.d.ts.map +1 -0
- package/dist/chrome-mcp/native-host.js +357 -0
- package/dist/chrome-mcp/native-host.js.map +1 -0
- package/dist/chrome-mcp/socket-client.d.ts +105 -0
- package/dist/chrome-mcp/socket-client.d.ts.map +1 -0
- package/dist/chrome-mcp/socket-client.js +325 -0
- package/dist/chrome-mcp/socket-client.js.map +1 -0
- package/dist/chrome-mcp/socket-server.d.ts +65 -0
- package/dist/chrome-mcp/socket-server.d.ts.map +1 -0
- package/dist/chrome-mcp/socket-server.js +354 -0
- package/dist/chrome-mcp/socket-server.js.map +1 -0
- package/dist/chrome-mcp/tools.d.ts +22 -0
- package/dist/chrome-mcp/tools.d.ts.map +1 -0
- package/dist/chrome-mcp/tools.js +372 -0
- package/dist/chrome-mcp/tools.js.map +1 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +3302 -0
- package/dist/cli.js.map +1 -0
- package/dist/codesign/index.d.ts +84 -0
- package/dist/codesign/index.d.ts.map +1 -0
- package/dist/codesign/index.js +289 -0
- package/dist/codesign/index.js.map +1 -0
- package/dist/commands/api.d.ts +8 -0
- package/dist/commands/api.d.ts.map +1 -0
- package/dist/commands/api.js +510 -0
- package/dist/commands/api.js.map +1 -0
- package/dist/commands/auth.d.ts +13 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +713 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/config-cmd.d.ts +12 -0
- package/dist/commands/config-cmd.d.ts.map +1 -0
- package/dist/commands/config-cmd.js +578 -0
- package/dist/commands/config-cmd.js.map +1 -0
- package/dist/commands/config.d.ts +22 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +2457 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/development.d.ts +14 -0
- package/dist/commands/development.d.ts.map +1 -0
- package/dist/commands/development.js +905 -0
- package/dist/commands/development.js.map +1 -0
- package/dist/commands/general.d.ts +15 -0
- package/dist/commands/general.d.ts.map +1 -0
- package/dist/commands/general.js +620 -0
- package/dist/commands/general.js.map +1 -0
- package/dist/commands/index.d.ts +28 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +70 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/registry.d.ts +16 -0
- package/dist/commands/registry.d.ts.map +1 -0
- package/dist/commands/registry.js +55 -0
- package/dist/commands/registry.js.map +1 -0
- package/dist/commands/session.d.ts +14 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +1256 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/settings.d.ts +15 -0
- package/dist/commands/settings.d.ts.map +1 -0
- package/dist/commands/settings.js +439 -0
- package/dist/commands/settings.js.map +1 -0
- package/dist/commands/tools.d.ts +14 -0
- package/dist/commands/tools.d.ts.map +1 -0
- package/dist/commands/tools.js +1579 -0
- package/dist/commands/tools.js.map +1 -0
- package/dist/commands/types.d.ts +82 -0
- package/dist/commands/types.d.ts.map +1 -0
- package/dist/commands/types.js +5 -0
- package/dist/commands/types.js.map +1 -0
- package/dist/commands/utility.d.ts +19 -0
- package/dist/commands/utility.d.ts.map +1 -0
- package/dist/commands/utility.js +738 -0
- package/dist/commands/utility.js.map +1 -0
- package/dist/config/axon-md-parser.d.ts +167 -0
- package/dist/config/axon-md-parser.d.ts.map +1 -0
- package/dist/config/axon-md-parser.js +472 -0
- package/dist/config/axon-md-parser.js.map +1 -0
- package/dist/config/builtin-api.d.ts +2 -0
- package/dist/config/builtin-api.d.ts.map +1 -0
- package/dist/config/builtin-api.js +2 -0
- package/dist/config/builtin-api.js.map +1 -0
- package/dist/config/config-command.d.ts +81 -0
- package/dist/config/config-command.d.ts.map +1 -0
- package/dist/config/config-command.js +292 -0
- package/dist/config/config-command.js.map +1 -0
- package/dist/config/index.d.ts +1700 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +1677 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/keybindings.d.ts +141 -0
- package/dist/config/keybindings.d.ts.map +1 -0
- package/dist/config/keybindings.js +708 -0
- package/dist/config/keybindings.js.map +1 -0
- package/dist/context/__tests__/enhanced.test.d.ts +5 -0
- package/dist/context/__tests__/enhanced.test.d.ts.map +1 -0
- package/dist/context/__tests__/enhanced.test.js +298 -0
- package/dist/context/__tests__/enhanced.test.js.map +1 -0
- package/dist/context/enhanced.d.ts +244 -0
- package/dist/context/enhanced.d.ts.map +1 -0
- package/dist/context/enhanced.js +527 -0
- package/dist/context/enhanced.js.map +1 -0
- package/dist/context/index.d.ts +249 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +1043 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/intent-enricher.d.ts +38 -0
- package/dist/context/intent-enricher.d.ts.map +1 -0
- package/dist/context/intent-enricher.js +212 -0
- package/dist/context/intent-enricher.js.map +1 -0
- package/dist/context/link-detector.d.ts +20 -0
- package/dist/context/link-detector.d.ts.map +1 -0
- package/dist/context/link-detector.js +99 -0
- package/dist/context/link-detector.js.map +1 -0
- package/dist/context/session-memory.d.ts +206 -0
- package/dist/context/session-memory.d.ts.map +1 -0
- package/dist/context/session-memory.js +542 -0
- package/dist/context/session-memory.js.map +1 -0
- package/dist/context/summarizer.d.ts +27 -0
- package/dist/context/summarizer.d.ts.map +1 -0
- package/dist/context/summarizer.js +157 -0
- package/dist/context/summarizer.js.map +1 -0
- package/dist/context/window.d.ts +104 -0
- package/dist/context/window.d.ts.map +1 -0
- package/dist/context/window.js +140 -0
- package/dist/context/window.js.map +1 -0
- package/dist/core/backgroundTasks.d.ts +87 -0
- package/dist/core/backgroundTasks.d.ts.map +1 -0
- package/dist/core/backgroundTasks.js +229 -0
- package/dist/core/backgroundTasks.js.map +1 -0
- package/dist/core/cache-keepalive.d.ts +37 -0
- package/dist/core/cache-keepalive.d.ts.map +1 -0
- package/dist/core/cache-keepalive.js +130 -0
- package/dist/core/cache-keepalive.js.map +1 -0
- package/dist/core/client.cache.test.d.ts +13 -0
- package/dist/core/client.cache.test.d.ts.map +1 -0
- package/dist/core/client.cache.test.js +315 -0
- package/dist/core/client.cache.test.js.map +1 -0
- package/dist/core/client.d.ts +306 -0
- package/dist/core/client.d.ts.map +1 -0
- package/dist/core/client.js +1930 -0
- package/dist/core/client.js.map +1 -0
- package/dist/core/cwd-context.d.ts +53 -0
- package/dist/core/cwd-context.d.ts.map +1 -0
- package/dist/core/cwd-context.js +102 -0
- package/dist/core/cwd-context.js.map +1 -0
- package/dist/core/index.d.ts +9 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +9 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/loop.d.ts +401 -0
- package/dist/core/loop.d.ts.map +1 -0
- package/dist/core/loop.js +3375 -0
- package/dist/core/loop.js.map +1 -0
- package/dist/core/retryLogic.d.ts +84 -0
- package/dist/core/retryLogic.d.ts.map +1 -0
- package/dist/core/retryLogic.js +157 -0
- package/dist/core/retryLogic.js.map +1 -0
- package/dist/core/session-context.d.ts +24 -0
- package/dist/core/session-context.d.ts.map +1 -0
- package/dist/core/session-context.js +35 -0
- package/dist/core/session-context.js.map +1 -0
- package/dist/core/session.d.ts +229 -0
- package/dist/core/session.d.ts.map +1 -0
- package/dist/core/session.js +729 -0
- package/dist/core/session.js.map +1 -0
- package/dist/core/validateToolResults.test.d.ts +6 -0
- package/dist/core/validateToolResults.test.d.ts.map +1 -0
- package/dist/core/validateToolResults.test.js +303 -0
- package/dist/core/validateToolResults.test.js.map +1 -0
- package/dist/daemon/alarm.d.ts +62 -0
- package/dist/daemon/alarm.d.ts.map +1 -0
- package/dist/daemon/alarm.js +145 -0
- package/dist/daemon/alarm.js.map +1 -0
- package/dist/daemon/config.d.ts +225 -0
- package/dist/daemon/config.d.ts.map +1 -0
- package/dist/daemon/config.js +104 -0
- package/dist/daemon/config.js.map +1 -0
- package/dist/daemon/executor.d.ts +52 -0
- package/dist/daemon/executor.d.ts.map +1 -0
- package/dist/daemon/executor.js +288 -0
- package/dist/daemon/executor.js.map +1 -0
- package/dist/daemon/index.d.ts +72 -0
- package/dist/daemon/index.d.ts.map +1 -0
- package/dist/daemon/index.js +394 -0
- package/dist/daemon/index.js.map +1 -0
- package/dist/daemon/locked.d.ts +15 -0
- package/dist/daemon/locked.d.ts.map +1 -0
- package/dist/daemon/locked.js +16 -0
- package/dist/daemon/locked.js.map +1 -0
- package/dist/daemon/notifier.d.ts +25 -0
- package/dist/daemon/notifier.d.ts.map +1 -0
- package/dist/daemon/notifier.js +87 -0
- package/dist/daemon/notifier.js.map +1 -0
- package/dist/daemon/run-log.d.ts +43 -0
- package/dist/daemon/run-log.d.ts.map +1 -0
- package/dist/daemon/run-log.js +126 -0
- package/dist/daemon/run-log.js.map +1 -0
- package/dist/daemon/scheduler.d.ts +85 -0
- package/dist/daemon/scheduler.d.ts.map +1 -0
- package/dist/daemon/scheduler.js +379 -0
- package/dist/daemon/scheduler.js.map +1 -0
- package/dist/daemon/store.d.ts +94 -0
- package/dist/daemon/store.d.ts.map +1 -0
- package/dist/daemon/store.js +121 -0
- package/dist/daemon/store.js.map +1 -0
- package/dist/daemon/time-parser.d.ts +15 -0
- package/dist/daemon/time-parser.d.ts.map +1 -0
- package/dist/daemon/time-parser.js +68 -0
- package/dist/daemon/time-parser.js.map +1 -0
- package/dist/daemon/watcher.d.ts +34 -0
- package/dist/daemon/watcher.d.ts.map +1 -0
- package/dist/daemon/watcher.js +105 -0
- package/dist/daemon/watcher.js.map +1 -0
- package/dist/database/drivers/mongo.d.ts +14 -0
- package/dist/database/drivers/mongo.d.ts.map +1 -0
- package/dist/database/drivers/mongo.js +112 -0
- package/dist/database/drivers/mongo.js.map +1 -0
- package/dist/database/drivers/mysql.d.ts +13 -0
- package/dist/database/drivers/mysql.d.ts.map +1 -0
- package/dist/database/drivers/mysql.js +76 -0
- package/dist/database/drivers/mysql.js.map +1 -0
- package/dist/database/drivers/postgres.d.ts +13 -0
- package/dist/database/drivers/postgres.d.ts.map +1 -0
- package/dist/database/drivers/postgres.js +79 -0
- package/dist/database/drivers/postgres.js.map +1 -0
- package/dist/database/drivers/redis.d.ts +13 -0
- package/dist/database/drivers/redis.d.ts.map +1 -0
- package/dist/database/drivers/redis.js +100 -0
- package/dist/database/drivers/redis.js.map +1 -0
- package/dist/database/drivers/sqlite.d.ts +13 -0
- package/dist/database/drivers/sqlite.d.ts.map +1 -0
- package/dist/database/drivers/sqlite.js +89 -0
- package/dist/database/drivers/sqlite.js.map +1 -0
- package/dist/database/index.d.ts +21 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +97 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/types.d.ts +54 -0
- package/dist/database/types.d.ts.map +1 -0
- package/dist/database/types.js +2 -0
- package/dist/database/types.js.map +1 -0
- package/dist/debugger/dap-client.d.ts +32 -0
- package/dist/debugger/dap-client.d.ts.map +1 -0
- package/dist/debugger/dap-client.js +108 -0
- package/dist/debugger/dap-client.js.map +1 -0
- package/dist/debugger/index.d.ts +30 -0
- package/dist/debugger/index.d.ts.map +1 -0
- package/dist/debugger/index.js +574 -0
- package/dist/debugger/index.js.map +1 -0
- package/dist/debugger/types.d.ts +59 -0
- package/dist/debugger/types.d.ts.map +1 -0
- package/dist/debugger/types.js +2 -0
- package/dist/debugger/types.js.map +1 -0
- package/dist/diagnostics/index.d.ts +72 -0
- package/dist/diagnostics/index.d.ts.map +1 -0
- package/dist/diagnostics/index.js +1013 -0
- package/dist/diagnostics/index.js.map +1 -0
- package/dist/ear/index.d.ts +73 -0
- package/dist/ear/index.d.ts.map +1 -0
- package/dist/ear/index.js +114 -0
- package/dist/ear/index.js.map +1 -0
- package/dist/email-mcp/index.d.ts +12 -0
- package/dist/email-mcp/index.d.ts.map +1 -0
- package/dist/email-mcp/index.js +11 -0
- package/dist/email-mcp/index.js.map +1 -0
- package/dist/email-mcp/mcp-server.d.ts +18 -0
- package/dist/email-mcp/mcp-server.d.ts.map +1 -0
- package/dist/email-mcp/mcp-server.js +381 -0
- package/dist/email-mcp/mcp-server.js.map +1 -0
- package/dist/email-mcp/tools.d.ts +22 -0
- package/dist/email-mcp/tools.d.ts.map +1 -0
- package/dist/email-mcp/tools.js +251 -0
- package/dist/email-mcp/tools.js.map +1 -0
- package/dist/env/index.d.ts +27 -0
- package/dist/env/index.d.ts.map +1 -0
- package/dist/env/index.js +31 -0
- package/dist/env/index.js.map +1 -0
- package/dist/env/manager.d.ts +150 -0
- package/dist/env/manager.d.ts.map +1 -0
- package/dist/env/manager.js +290 -0
- package/dist/env/manager.js.map +1 -0
- package/dist/env/sensitive.d.ts +134 -0
- package/dist/env/sensitive.d.ts.map +1 -0
- package/dist/env/sensitive.js +255 -0
- package/dist/env/sensitive.js.map +1 -0
- package/dist/env/validator.d.ts +93 -0
- package/dist/env/validator.d.ts.map +1 -0
- package/dist/env/validator.js +122 -0
- package/dist/env/validator.js.map +1 -0
- package/dist/env/validators/builtin.d.ts +68 -0
- package/dist/env/validators/builtin.d.ts.map +1 -0
- package/dist/env/validators/builtin.js +294 -0
- package/dist/env/validators/builtin.js.map +1 -0
- package/dist/eye/camera.py +396 -0
- package/dist/eye/index.d.ts +70 -0
- package/dist/eye/index.d.ts.map +1 -0
- package/dist/eye/index.js +356 -0
- package/dist/eye/index.js.map +1 -0
- package/dist/fast-mode/index.d.ts +136 -0
- package/dist/fast-mode/index.d.ts.map +1 -0
- package/dist/fast-mode/index.js +390 -0
- package/dist/fast-mode/index.js.map +1 -0
- package/dist/fast-mode/provider.d.ts +10 -0
- package/dist/fast-mode/provider.d.ts.map +1 -0
- package/dist/fast-mode/provider.js +23 -0
- package/dist/fast-mode/provider.js.map +1 -0
- package/dist/feishu/bot.d.ts +71 -0
- package/dist/feishu/bot.d.ts.map +1 -0
- package/dist/feishu/bot.js +287 -0
- package/dist/feishu/bot.js.map +1 -0
- package/dist/feishu/config.d.ts +54 -0
- package/dist/feishu/config.d.ts.map +1 -0
- package/dist/feishu/config.js +100 -0
- package/dist/feishu/config.js.map +1 -0
- package/dist/feishu/index.d.ts +7 -0
- package/dist/feishu/index.d.ts.map +1 -0
- package/dist/feishu/index.js +5 -0
- package/dist/feishu/index.js.map +1 -0
- package/dist/feishu/message-handler.d.ts +42 -0
- package/dist/feishu/message-handler.d.ts.map +1 -0
- package/dist/feishu/message-handler.js +112 -0
- package/dist/feishu/message-handler.js.map +1 -0
- package/dist/feishu/session-manager.d.ts +57 -0
- package/dist/feishu/session-manager.d.ts.map +1 -0
- package/dist/feishu/session-manager.js +179 -0
- package/dist/feishu/session-manager.js.map +1 -0
- package/dist/feishu-cli.d.ts +34 -0
- package/dist/feishu-cli.d.ts.map +1 -0
- package/dist/feishu-cli.js +132 -0
- package/dist/feishu-cli.js.map +1 -0
- package/dist/git/analysis.d.ts +135 -0
- package/dist/git/analysis.d.ts.map +1 -0
- package/dist/git/analysis.js +259 -0
- package/dist/git/analysis.js.map +1 -0
- package/dist/git/core.d.ts +175 -0
- package/dist/git/core.d.ts.map +1 -0
- package/dist/git/core.js +349 -0
- package/dist/git/core.js.map +1 -0
- package/dist/git/ignore.d.ts +74 -0
- package/dist/git/ignore.d.ts.map +1 -0
- package/dist/git/ignore.js +257 -0
- package/dist/git/ignore.js.map +1 -0
- package/dist/git/index.d.ts +37 -0
- package/dist/git/index.d.ts.map +1 -0
- package/dist/git/index.js +48 -0
- package/dist/git/index.js.map +1 -0
- package/dist/git/operations.d.ts +96 -0
- package/dist/git/operations.d.ts.map +1 -0
- package/dist/git/operations.js +288 -0
- package/dist/git/operations.js.map +1 -0
- package/dist/git/safety.d.ts +107 -0
- package/dist/git/safety.d.ts.map +1 -0
- package/dist/git/safety.js +293 -0
- package/dist/git/safety.js.map +1 -0
- package/dist/github/index.d.ts +58 -0
- package/dist/github/index.d.ts.map +1 -0
- package/dist/github/index.js +246 -0
- package/dist/github/index.js.map +1 -0
- package/dist/goals/goal-daemon.d.ts +54 -0
- package/dist/goals/goal-daemon.d.ts.map +1 -0
- package/dist/goals/goal-daemon.js +171 -0
- package/dist/goals/goal-daemon.js.map +1 -0
- package/dist/goals/goal-evaluator.d.ts +28 -0
- package/dist/goals/goal-evaluator.d.ts.map +1 -0
- package/dist/goals/goal-evaluator.js +117 -0
- package/dist/goals/goal-evaluator.js.map +1 -0
- package/dist/goals/goal-planner.d.ts +21 -0
- package/dist/goals/goal-planner.d.ts.map +1 -0
- package/dist/goals/goal-planner.js +80 -0
- package/dist/goals/goal-planner.js.map +1 -0
- package/dist/goals/goal-store.d.ts +31 -0
- package/dist/goals/goal-store.d.ts.map +1 -0
- package/dist/goals/goal-store.js +238 -0
- package/dist/goals/goal-store.js.map +1 -0
- package/dist/goals/index.d.ts +15 -0
- package/dist/goals/index.d.ts.map +1 -0
- package/dist/goals/index.js +22 -0
- package/dist/goals/index.js.map +1 -0
- package/dist/goals/storage.d.ts +83 -0
- package/dist/goals/storage.d.ts.map +1 -0
- package/dist/goals/storage.js +235 -0
- package/dist/goals/storage.js.map +1 -0
- package/dist/goals/types.d.ts +138 -0
- package/dist/goals/types.d.ts.map +1 -0
- package/dist/goals/types.js +5 -0
- package/dist/goals/types.js.map +1 -0
- package/dist/hooks/blueprint-hooks.d.ts +52 -0
- package/dist/hooks/blueprint-hooks.d.ts.map +1 -0
- package/dist/hooks/blueprint-hooks.js +75 -0
- package/dist/hooks/blueprint-hooks.js.map +1 -0
- package/dist/hooks/index.d.ts +421 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +1225 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/index.test.d.ts +33 -0
- package/dist/hooks/index.test.d.ts.map +1 -0
- package/dist/hooks/index.test.js +199 -0
- package/dist/hooks/index.test.js.map +1 -0
- package/dist/i18n/index.d.ts +25 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +96 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/locales/en.d.ts +786 -0
- package/dist/i18n/locales/en.d.ts.map +1 -0
- package/dist/i18n/locales/en.js +865 -0
- package/dist/i18n/locales/en.js.map +1 -0
- package/dist/i18n/locales/zh.d.ts +7 -0
- package/dist/i18n/locales/zh.d.ts.map +1 -0
- package/dist/i18n/locales/zh.js +862 -0
- package/dist/i18n/locales/zh.js.map +1 -0
- package/dist/ide/index.d.ts +81 -0
- package/dist/ide/index.d.ts.map +1 -0
- package/dist/ide/index.js +371 -0
- package/dist/ide/index.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +63 -0
- package/dist/index.js.map +1 -0
- package/dist/lifecycle/index.d.ts +120 -0
- package/dist/lifecycle/index.d.ts.map +1 -0
- package/dist/lifecycle/index.js +178 -0
- package/dist/lifecycle/index.js.map +1 -0
- package/dist/lsp/index.d.ts +12 -0
- package/dist/lsp/index.d.ts.map +1 -0
- package/dist/lsp/index.js +20 -0
- package/dist/lsp/index.js.map +1 -0
- package/dist/lsp/manager.d.ts +307 -0
- package/dist/lsp/manager.d.ts.map +1 -0
- package/dist/lsp/manager.js +1012 -0
- package/dist/lsp/manager.js.map +1 -0
- package/dist/map/index.d.ts +2 -0
- package/dist/map/index.d.ts.map +1 -0
- package/dist/map/index.js +2 -0
- package/dist/map/index.js.map +1 -0
- package/dist/map/types.d.ts +264 -0
- package/dist/map/types.d.ts.map +1 -0
- package/dist/map/types.js +6 -0
- package/dist/map/types.js.map +1 -0
- package/dist/mcp/adapter.d.ts +217 -0
- package/dist/mcp/adapter.d.ts.map +1 -0
- package/dist/mcp/adapter.js +527 -0
- package/dist/mcp/adapter.js.map +1 -0
- package/dist/mcp/auto-discovery.d.ts +303 -0
- package/dist/mcp/auto-discovery.d.ts.map +1 -0
- package/dist/mcp/auto-discovery.js +1009 -0
- package/dist/mcp/auto-discovery.js.map +1 -0
- package/dist/mcp/cancellation.d.ts +258 -0
- package/dist/mcp/cancellation.d.ts.map +1 -0
- package/dist/mcp/cancellation.js +478 -0
- package/dist/mcp/cancellation.js.map +1 -0
- package/dist/mcp/config.d.ts +521 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +694 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/connection.d.ts +228 -0
- package/dist/mcp/connection.d.ts.map +1 -0
- package/dist/mcp/connection.js +707 -0
- package/dist/mcp/connection.js.map +1 -0
- package/dist/mcp/discovery.d.ts +128 -0
- package/dist/mcp/discovery.d.ts.map +1 -0
- package/dist/mcp/discovery.js +577 -0
- package/dist/mcp/discovery.js.map +1 -0
- package/dist/mcp/errors.d.ts +273 -0
- package/dist/mcp/errors.d.ts.map +1 -0
- package/dist/mcp/errors.js +566 -0
- package/dist/mcp/errors.js.map +1 -0
- package/dist/mcp/index.d.ts +10 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +29 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/integration.d.ts +71 -0
- package/dist/mcp/integration.d.ts.map +1 -0
- package/dist/mcp/integration.js +198 -0
- package/dist/mcp/integration.js.map +1 -0
- package/dist/mcp/lifecycle.d.ts +261 -0
- package/dist/mcp/lifecycle.d.ts.map +1 -0
- package/dist/mcp/lifecycle.js +714 -0
- package/dist/mcp/lifecycle.js.map +1 -0
- package/dist/mcp/logging.d.ts +166 -0
- package/dist/mcp/logging.d.ts.map +1 -0
- package/dist/mcp/logging.js +346 -0
- package/dist/mcp/logging.js.map +1 -0
- package/dist/mcp/notifications.d.ts +221 -0
- package/dist/mcp/notifications.d.ts.map +1 -0
- package/dist/mcp/notifications.js +356 -0
- package/dist/mcp/notifications.js.map +1 -0
- package/dist/mcp/protocol.d.ts +516 -0
- package/dist/mcp/protocol.d.ts.map +1 -0
- package/dist/mcp/protocol.js +490 -0
- package/dist/mcp/protocol.js.map +1 -0
- package/dist/mcp/resources.d.ts +197 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +432 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/roots.d.ts +149 -0
- package/dist/mcp/roots.d.ts.map +1 -0
- package/dist/mcp/roots.js +368 -0
- package/dist/mcp/roots.js.map +1 -0
- package/dist/mcp/sampling.d.ts +170 -0
- package/dist/mcp/sampling.d.ts.map +1 -0
- package/dist/mcp/sampling.js +373 -0
- package/dist/mcp/sampling.js.map +1 -0
- package/dist/mcp/tools.d.ts +347 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +773 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/mcp/websocket-connection.d.ts +164 -0
- package/dist/mcp/websocket-connection.d.ts.map +1 -0
- package/dist/mcp/websocket-connection.js +503 -0
- package/dist/mcp/websocket-connection.js.map +1 -0
- package/dist/mcp-cli.d.ts +26 -0
- package/dist/mcp-cli.d.ts.map +1 -0
- package/dist/mcp-cli.js +366 -0
- package/dist/mcp-cli.js.map +1 -0
- package/dist/media/image.d.ts +91 -0
- package/dist/media/image.d.ts.map +1 -0
- package/dist/media/image.js +400 -0
- package/dist/media/image.js.map +1 -0
- package/dist/media/index.d.ts +66 -0
- package/dist/media/index.d.ts.map +1 -0
- package/dist/media/index.js +122 -0
- package/dist/media/index.js.map +1 -0
- package/dist/media/mime.d.ts +23 -0
- package/dist/media/mime.d.ts.map +1 -0
- package/dist/media/mime.js +110 -0
- package/dist/media/mime.js.map +1 -0
- package/dist/media/office.d.ts +93 -0
- package/dist/media/office.d.ts.map +1 -0
- package/dist/media/office.js +735 -0
- package/dist/media/office.js.map +1 -0
- package/dist/media/pdf.d.ts +132 -0
- package/dist/media/pdf.d.ts.map +1 -0
- package/dist/media/pdf.js +281 -0
- package/dist/media/pdf.js.map +1 -0
- package/dist/media/svg.d.ts +55 -0
- package/dist/media/svg.d.ts.map +1 -0
- package/dist/media/svg.js +217 -0
- package/dist/media/svg.js.map +1 -0
- package/dist/memory/embedding-cache.d.ts +40 -0
- package/dist/memory/embedding-cache.d.ts.map +1 -0
- package/dist/memory/embedding-cache.js +105 -0
- package/dist/memory/embedding-cache.js.map +1 -0
- package/dist/memory/embedding-provider.d.ts +36 -0
- package/dist/memory/embedding-provider.d.ts.map +1 -0
- package/dist/memory/embedding-provider.js +105 -0
- package/dist/memory/embedding-provider.js.map +1 -0
- package/dist/memory/hybrid-search.d.ts +58 -0
- package/dist/memory/hybrid-search.d.ts.map +1 -0
- package/dist/memory/hybrid-search.js +68 -0
- package/dist/memory/hybrid-search.js.map +1 -0
- package/dist/memory/index.d.ts +15 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +12 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/long-term-store.d.ts +131 -0
- package/dist/memory/long-term-store.d.ts.map +1 -0
- package/dist/memory/long-term-store.js +701 -0
- package/dist/memory/long-term-store.js.map +1 -0
- package/dist/memory/memory-search.d.ts +134 -0
- package/dist/memory/memory-search.d.ts.map +1 -0
- package/dist/memory/memory-search.js +338 -0
- package/dist/memory/memory-search.js.map +1 -0
- package/dist/memory/memory-sync.d.ts +66 -0
- package/dist/memory/memory-sync.d.ts.map +1 -0
- package/dist/memory/memory-sync.js +429 -0
- package/dist/memory/memory-sync.js.map +1 -0
- package/dist/memory/mmr.d.ts +34 -0
- package/dist/memory/mmr.d.ts.map +1 -0
- package/dist/memory/mmr.js +101 -0
- package/dist/memory/mmr.js.map +1 -0
- package/dist/memory/notebook.d.ts +80 -0
- package/dist/memory/notebook.d.ts.map +1 -0
- package/dist/memory/notebook.js +320 -0
- package/dist/memory/notebook.js.map +1 -0
- package/dist/memory/query-expansion.d.ts +22 -0
- package/dist/memory/query-expansion.d.ts.map +1 -0
- package/dist/memory/query-expansion.js +60 -0
- package/dist/memory/query-expansion.js.map +1 -0
- package/dist/memory/types.d.ts +16 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +5 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/models/config.d.ts +85 -0
- package/dist/models/config.d.ts.map +1 -0
- package/dist/models/config.js +427 -0
- package/dist/models/config.js.map +1 -0
- package/dist/models/fallback.d.ts +80 -0
- package/dist/models/fallback.d.ts.map +1 -0
- package/dist/models/fallback.js +215 -0
- package/dist/models/fallback.js.map +1 -0
- package/dist/models/index.d.ts +12 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/index.js +11 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/quota.d.ts +121 -0
- package/dist/models/quota.d.ts.map +1 -0
- package/dist/models/quota.js +397 -0
- package/dist/models/quota.js.map +1 -0
- package/dist/models/stats.d.ts +96 -0
- package/dist/models/stats.d.ts.map +1 -0
- package/dist/models/stats.js +224 -0
- package/dist/models/stats.js.map +1 -0
- package/dist/models/subagent-config.d.ts +119 -0
- package/dist/models/subagent-config.d.ts.map +1 -0
- package/dist/models/subagent-config.js +267 -0
- package/dist/models/subagent-config.js.map +1 -0
- package/dist/models/thinking.d.ts +102 -0
- package/dist/models/thinking.d.ts.map +1 -0
- package/dist/models/thinking.js +213 -0
- package/dist/models/thinking.js.map +1 -0
- package/dist/models/types.d.ts +250 -0
- package/dist/models/types.d.ts.map +1 -0
- package/dist/models/types.js +33 -0
- package/dist/models/types.js.map +1 -0
- package/dist/network/audit-log.d.ts +93 -0
- package/dist/network/audit-log.d.ts.map +1 -0
- package/dist/network/audit-log.js +319 -0
- package/dist/network/audit-log.js.map +1 -0
- package/dist/network/discovery.d.ts +91 -0
- package/dist/network/discovery.d.ts.map +1 -0
- package/dist/network/discovery.js +398 -0
- package/dist/network/discovery.js.map +1 -0
- package/dist/network/global-proxy.d.ts +19 -0
- package/dist/network/global-proxy.d.ts.map +1 -0
- package/dist/network/global-proxy.js +81 -0
- package/dist/network/global-proxy.js.map +1 -0
- package/dist/network/identity.d.ts +58 -0
- package/dist/network/identity.d.ts.map +1 -0
- package/dist/network/identity.js +267 -0
- package/dist/network/identity.js.map +1 -0
- package/dist/network/index.d.ts +153 -0
- package/dist/network/index.d.ts.map +1 -0
- package/dist/network/index.js +916 -0
- package/dist/network/index.js.map +1 -0
- package/dist/network/permission.d.ts +60 -0
- package/dist/network/permission.d.ts.map +1 -0
- package/dist/network/permission.js +124 -0
- package/dist/network/permission.js.map +1 -0
- package/dist/network/project-probe.d.ts +12 -0
- package/dist/network/project-probe.d.ts.map +1 -0
- package/dist/network/project-probe.js +74 -0
- package/dist/network/project-probe.js.map +1 -0
- package/dist/network/protocol.d.ts +59 -0
- package/dist/network/protocol.d.ts.map +1 -0
- package/dist/network/protocol.js +158 -0
- package/dist/network/protocol.js.map +1 -0
- package/dist/network/proxy.d.ts +93 -0
- package/dist/network/proxy.d.ts.map +1 -0
- package/dist/network/proxy.js +228 -0
- package/dist/network/proxy.js.map +1 -0
- package/dist/network/retry.d.ts +44 -0
- package/dist/network/retry.d.ts.map +1 -0
- package/dist/network/retry.js +110 -0
- package/dist/network/retry.js.map +1 -0
- package/dist/network/router.d.ts +36 -0
- package/dist/network/router.d.ts.map +1 -0
- package/dist/network/router.js +73 -0
- package/dist/network/router.js.map +1 -0
- package/dist/network/timeout.d.ts +59 -0
- package/dist/network/timeout.d.ts.map +1 -0
- package/dist/network/timeout.js +120 -0
- package/dist/network/timeout.js.map +1 -0
- package/dist/network/transport.d.ts +97 -0
- package/dist/network/transport.d.ts.map +1 -0
- package/dist/network/transport.js +397 -0
- package/dist/network/transport.js.map +1 -0
- package/dist/network/types.d.ts +282 -0
- package/dist/network/types.d.ts.map +1 -0
- package/dist/network/types.js +31 -0
- package/dist/network/types.js.map +1 -0
- package/dist/notifications/index.d.ts +161 -0
- package/dist/notifications/index.d.ts.map +1 -0
- package/dist/notifications/index.js +341 -0
- package/dist/notifications/index.js.map +1 -0
- package/dist/organization/index.d.ts +125 -0
- package/dist/organization/index.d.ts.map +1 -0
- package/dist/organization/index.js +237 -0
- package/dist/organization/index.js.map +1 -0
- package/dist/permissions/elevated-commands.d.ts +38 -0
- package/dist/permissions/elevated-commands.d.ts.map +1 -0
- package/dist/permissions/elevated-commands.js +256 -0
- package/dist/permissions/elevated-commands.js.map +1 -0
- package/dist/permissions/index.d.ts +120 -0
- package/dist/permissions/index.d.ts.map +1 -0
- package/dist/permissions/index.js +689 -0
- package/dist/permissions/index.js.map +1 -0
- package/dist/permissions/rule-parser.d.ts +396 -0
- package/dist/permissions/rule-parser.d.ts.map +1 -0
- package/dist/permissions/rule-parser.js +990 -0
- package/dist/permissions/rule-parser.js.map +1 -0
- package/dist/permissions/rule-parser.test.d.ts +15 -0
- package/dist/permissions/rule-parser.test.d.ts.map +1 -0
- package/dist/permissions/rule-parser.test.js +489 -0
- package/dist/permissions/rule-parser.test.js.map +1 -0
- package/dist/permissions/shell-security.d.ts +128 -0
- package/dist/permissions/shell-security.d.ts.map +1 -0
- package/dist/permissions/shell-security.js +669 -0
- package/dist/permissions/shell-security.js.map +1 -0
- package/dist/permissions/shell-security.test.d.ts +7 -0
- package/dist/permissions/shell-security.test.d.ts.map +1 -0
- package/dist/permissions/shell-security.test.js +286 -0
- package/dist/permissions/shell-security.test.js.map +1 -0
- package/dist/permissions/tools.d.ts +255 -0
- package/dist/permissions/tools.d.ts.map +1 -0
- package/dist/permissions/tools.js +733 -0
- package/dist/permissions/tools.js.map +1 -0
- package/dist/permissions/tools.test.d.ts +11 -0
- package/dist/permissions/tools.test.d.ts.map +1 -0
- package/dist/permissions/tools.test.js +530 -0
- package/dist/permissions/tools.test.js.map +1 -0
- package/dist/permissions/ui-integration.d.ts +69 -0
- package/dist/permissions/ui-integration.d.ts.map +1 -0
- package/dist/permissions/ui-integration.js +129 -0
- package/dist/permissions/ui-integration.js.map +1 -0
- package/dist/permissions/ui.d.ts +188 -0
- package/dist/permissions/ui.d.ts.map +1 -0
- package/dist/permissions/ui.js +590 -0
- package/dist/permissions/ui.js.map +1 -0
- package/dist/plan/comparison.d.ts +67 -0
- package/dist/plan/comparison.d.ts.map +1 -0
- package/dist/plan/comparison.js +451 -0
- package/dist/plan/comparison.js.map +1 -0
- package/dist/plan/index.d.ts +91 -0
- package/dist/plan/index.d.ts.map +1 -0
- package/dist/plan/index.js +151 -0
- package/dist/plan/index.js.map +1 -0
- package/dist/plan/persistence.d.ts +131 -0
- package/dist/plan/persistence.d.ts.map +1 -0
- package/dist/plan/persistence.js +781 -0
- package/dist/plan/persistence.js.map +1 -0
- package/dist/plan/types.d.ts +353 -0
- package/dist/plan/types.d.ts.map +1 -0
- package/dist/plan/types.js +6 -0
- package/dist/plan/types.js.map +1 -0
- package/dist/plugins/cli.d.ts +14 -0
- package/dist/plugins/cli.d.ts.map +1 -0
- package/dist/plugins/cli.js +1050 -0
- package/dist/plugins/cli.js.map +1 -0
- package/dist/plugins/index.d.ts +621 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +1978 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/marketplace.d.ts +120 -0
- package/dist/plugins/marketplace.d.ts.map +1 -0
- package/dist/plugins/marketplace.js +630 -0
- package/dist/plugins/marketplace.js.map +1 -0
- package/dist/prompt/attachments.d.ts +94 -0
- package/dist/prompt/attachments.d.ts.map +1 -0
- package/dist/prompt/attachments.js +486 -0
- package/dist/prompt/attachments.js.map +1 -0
- package/dist/prompt/builder.d.ts +45 -0
- package/dist/prompt/builder.d.ts.map +1 -0
- package/dist/prompt/builder.js +298 -0
- package/dist/prompt/builder.js.map +1 -0
- package/dist/prompt/cache.d.ts +71 -0
- package/dist/prompt/cache.d.ts.map +1 -0
- package/dist/prompt/cache.js +150 -0
- package/dist/prompt/cache.js.map +1 -0
- package/dist/prompt/index.d.ts +10 -0
- package/dist/prompt/index.d.ts.map +1 -0
- package/dist/prompt/index.js +9 -0
- package/dist/prompt/index.js.map +1 -0
- package/dist/prompt/templates.d.ts +216 -0
- package/dist/prompt/templates.d.ts.map +1 -0
- package/dist/prompt/templates.js +670 -0
- package/dist/prompt/templates.js.map +1 -0
- package/dist/prompt/types.d.ts +234 -0
- package/dist/prompt/types.d.ts.map +1 -0
- package/dist/prompt/types.js +19 -0
- package/dist/prompt/types.js.map +1 -0
- package/dist/providers/cli.d.ts +14 -0
- package/dist/providers/cli.d.ts.map +1 -0
- package/dist/providers/cli.js +466 -0
- package/dist/providers/cli.js.map +1 -0
- package/dist/providers/index.d.ts +128 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +662 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/vertex.d.ts +174 -0
- package/dist/providers/vertex.d.ts.map +1 -0
- package/dist/providers/vertex.js +499 -0
- package/dist/providers/vertex.js.map +1 -0
- package/dist/proxy/ollama-adapter.d.ts +41 -0
- package/dist/proxy/ollama-adapter.d.ts.map +1 -0
- package/dist/proxy/ollama-adapter.js +669 -0
- package/dist/proxy/ollama-adapter.js.map +1 -0
- package/dist/proxy/server.d.ts +63 -0
- package/dist/proxy/server.d.ts.map +1 -0
- package/dist/proxy/server.js +1160 -0
- package/dist/proxy/server.js.map +1 -0
- package/dist/proxy-cli.d.ts +19 -0
- package/dist/proxy-cli.d.ts.map +1 -0
- package/dist/proxy-cli.js +308 -0
- package/dist/proxy-cli.js.map +1 -0
- package/dist/ratelimit/index.d.ts +252 -0
- package/dist/ratelimit/index.d.ts.map +1 -0
- package/dist/ratelimit/index.js +580 -0
- package/dist/ratelimit/index.js.map +1 -0
- package/dist/renderer/index.d.ts +75 -0
- package/dist/renderer/index.d.ts.map +1 -0
- package/dist/renderer/index.js +383 -0
- package/dist/renderer/index.js.map +1 -0
- package/dist/renderer/tree-render.d.ts +172 -0
- package/dist/renderer/tree-render.d.ts.map +1 -0
- package/dist/renderer/tree-render.js +397 -0
- package/dist/renderer/tree-render.js.map +1 -0
- package/dist/rewind/fileHistory.d.ts +140 -0
- package/dist/rewind/fileHistory.d.ts.map +1 -0
- package/dist/rewind/fileHistory.js +326 -0
- package/dist/rewind/fileHistory.js.map +1 -0
- package/dist/rewind/index.d.ts +8 -0
- package/dist/rewind/index.d.ts.map +1 -0
- package/dist/rewind/index.js +8 -0
- package/dist/rewind/index.js.map +1 -0
- package/dist/rewind/rewindManager.d.ts +98 -0
- package/dist/rewind/rewindManager.d.ts.map +1 -0
- package/dist/rewind/rewindManager.js +199 -0
- package/dist/rewind/rewindManager.js.map +1 -0
- package/dist/rules/index.d.ts +69 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +410 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/sandbox/bubblewrap.d.ts +157 -0
- package/dist/sandbox/bubblewrap.d.ts.map +1 -0
- package/dist/sandbox/bubblewrap.js +637 -0
- package/dist/sandbox/bubblewrap.js.map +1 -0
- package/dist/sandbox/config.d.ts +497 -0
- package/dist/sandbox/config.d.ts.map +1 -0
- package/dist/sandbox/config.js +696 -0
- package/dist/sandbox/config.js.map +1 -0
- package/dist/sandbox/docker.d.ts +104 -0
- package/dist/sandbox/docker.d.ts.map +1 -0
- package/dist/sandbox/docker.js +347 -0
- package/dist/sandbox/docker.js.map +1 -0
- package/dist/sandbox/executor.d.ts +68 -0
- package/dist/sandbox/executor.d.ts.map +1 -0
- package/dist/sandbox/executor.js +341 -0
- package/dist/sandbox/executor.js.map +1 -0
- package/dist/sandbox/filesystem.d.ts +146 -0
- package/dist/sandbox/filesystem.d.ts.map +1 -0
- package/dist/sandbox/filesystem.js +501 -0
- package/dist/sandbox/filesystem.js.map +1 -0
- package/dist/sandbox/index.d.ts +21 -0
- package/dist/sandbox/index.d.ts.map +1 -0
- package/dist/sandbox/index.js +21 -0
- package/dist/sandbox/index.js.map +1 -0
- package/dist/sandbox/network.d.ts +174 -0
- package/dist/sandbox/network.d.ts.map +1 -0
- package/dist/sandbox/network.js +487 -0
- package/dist/sandbox/network.js.map +1 -0
- package/dist/sandbox/resource-limits.d.ts +83 -0
- package/dist/sandbox/resource-limits.d.ts.map +1 -0
- package/dist/sandbox/resource-limits.js +305 -0
- package/dist/sandbox/resource-limits.js.map +1 -0
- package/dist/sandbox/seatbelt.d.ts +70 -0
- package/dist/sandbox/seatbelt.d.ts.map +1 -0
- package/dist/sandbox/seatbelt.js +256 -0
- package/dist/sandbox/seatbelt.js.map +1 -0
- package/dist/search/ripgrep.d.ts +82 -0
- package/dist/search/ripgrep.d.ts.map +1 -0
- package/dist/search/ripgrep.js +399 -0
- package/dist/search/ripgrep.js.map +1 -0
- package/dist/security/skill-scanner.d.ts +18 -0
- package/dist/security/skill-scanner.d.ts.map +1 -0
- package/dist/security/skill-scanner.js +115 -0
- package/dist/security/skill-scanner.js.map +1 -0
- package/dist/session/cleanup.d.ts +62 -0
- package/dist/session/cleanup.d.ts.map +1 -0
- package/dist/session/cleanup.js +218 -0
- package/dist/session/cleanup.js.map +1 -0
- package/dist/session/index.d.ts +584 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +1910 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/list.d.ts +150 -0
- package/dist/session/list.d.ts.map +1 -0
- package/dist/session/list.js +807 -0
- package/dist/session/list.js.map +1 -0
- package/dist/session/resume.d.ts +103 -0
- package/dist/session/resume.d.ts.map +1 -0
- package/dist/session/resume.js +173 -0
- package/dist/session/resume.js.map +1 -0
- package/dist/skills/builtin/skill-hub/SKILL.md +51 -0
- package/dist/skills/builtin/tool-discovery/SKILL.md +194 -0
- package/dist/skills/hub.d.ts +54 -0
- package/dist/skills/hub.d.ts.map +1 -0
- package/dist/skills/hub.js +251 -0
- package/dist/skills/hub.js.map +1 -0
- package/dist/streaming/index.d.ts +115 -0
- package/dist/streaming/index.d.ts.map +1 -0
- package/dist/streaming/index.js +249 -0
- package/dist/streaming/index.js.map +1 -0
- package/dist/streaming/message-stream.d.ts +237 -0
- package/dist/streaming/message-stream.d.ts.map +1 -0
- package/dist/streaming/message-stream.js +480 -0
- package/dist/streaming/message-stream.js.map +1 -0
- package/dist/streaming/sse.d.ts +94 -0
- package/dist/streaming/sse.d.ts.map +1 -0
- package/dist/streaming/sse.js +314 -0
- package/dist/streaming/sse.js.map +1 -0
- package/dist/teams/index.d.ts +7 -0
- package/dist/teams/index.d.ts.map +1 -0
- package/dist/teams/index.js +7 -0
- package/dist/teams/index.js.map +1 -0
- package/dist/teams/storage.d.ts +94 -0
- package/dist/teams/storage.d.ts.map +1 -0
- package/dist/teams/storage.js +350 -0
- package/dist/teams/storage.js.map +1 -0
- package/dist/teams/tmux.d.ts +122 -0
- package/dist/teams/tmux.d.ts.map +1 -0
- package/dist/teams/tmux.js +419 -0
- package/dist/teams/tmux.js.map +1 -0
- package/dist/teams/types.d.ts +139 -0
- package/dist/teams/types.d.ts.map +1 -0
- package/dist/teams/types.js +8 -0
- package/dist/teams/types.js.map +1 -0
- package/dist/telemetry/index.d.ts +215 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +776 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/teleport/index.d.ts +43 -0
- package/dist/teleport/index.d.ts.map +1 -0
- package/dist/teleport/index.js +71 -0
- package/dist/teleport/index.js.map +1 -0
- package/dist/teleport/session.d.ts +78 -0
- package/dist/teleport/session.d.ts.map +1 -0
- package/dist/teleport/session.js +273 -0
- package/dist/teleport/session.js.map +1 -0
- package/dist/teleport/types.d.ts +93 -0
- package/dist/teleport/types.d.ts.map +1 -0
- package/dist/teleport/types.js +6 -0
- package/dist/teleport/types.js.map +1 -0
- package/dist/teleport/validation.d.ts +30 -0
- package/dist/teleport/validation.d.ts.map +1 -0
- package/dist/teleport/validation.js +124 -0
- package/dist/teleport/validation.js.map +1 -0
- package/dist/tools/agent-teams.d.ts +26 -0
- package/dist/tools/agent-teams.d.ts.map +1 -0
- package/dist/tools/agent-teams.js +171 -0
- package/dist/tools/agent-teams.js.map +1 -0
- package/dist/tools/agent.d.ts +223 -0
- package/dist/tools/agent.d.ts.map +1 -0
- package/dist/tools/agent.js +1540 -0
- package/dist/tools/agent.js.map +1 -0
- package/dist/tools/ask.d.ts +87 -0
- package/dist/tools/ask.d.ts.map +1 -0
- package/dist/tools/ask.js +572 -0
- package/dist/tools/ask.js.map +1 -0
- package/dist/tools/base.d.ts +89 -0
- package/dist/tools/base.d.ts.map +1 -0
- package/dist/tools/base.js +199 -0
- package/dist/tools/base.js.map +1 -0
- package/dist/tools/bash-history.d.ts +83 -0
- package/dist/tools/bash-history.d.ts.map +1 -0
- package/dist/tools/bash-history.js +245 -0
- package/dist/tools/bash-history.js.map +1 -0
- package/dist/tools/bash.d.ts +214 -0
- package/dist/tools/bash.d.ts.map +1 -0
- package/dist/tools/bash.js +1823 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/blueprint.d.ts +91 -0
- package/dist/tools/blueprint.d.ts.map +1 -0
- package/dist/tools/blueprint.js +618 -0
- package/dist/tools/blueprint.js.map +1 -0
- package/dist/tools/browser.d.ts +28 -0
- package/dist/tools/browser.d.ts.map +1 -0
- package/dist/tools/browser.js +776 -0
- package/dist/tools/browser.js.map +1 -0
- package/dist/tools/create-tool.d.ts +63 -0
- package/dist/tools/create-tool.d.ts.map +1 -0
- package/dist/tools/create-tool.js +230 -0
- package/dist/tools/create-tool.js.map +1 -0
- package/dist/tools/database.d.ts +12 -0
- package/dist/tools/database.d.ts.map +1 -0
- package/dist/tools/database.js +223 -0
- package/dist/tools/database.js.map +1 -0
- package/dist/tools/dispatch-worker.d.ts +46 -0
- package/dist/tools/dispatch-worker.d.ts.map +1 -0
- package/dist/tools/dispatch-worker.js +276 -0
- package/dist/tools/dispatch-worker.js.map +1 -0
- package/dist/tools/ear.d.ts +25 -0
- package/dist/tools/ear.d.ts.map +1 -0
- package/dist/tools/ear.js +43 -0
- package/dist/tools/ear.js.map +1 -0
- package/dist/tools/eye.d.ts +29 -0
- package/dist/tools/eye.d.ts.map +1 -0
- package/dist/tools/eye.js +104 -0
- package/dist/tools/eye.js.map +1 -0
- package/dist/tools/file.d.ts +164 -0
- package/dist/tools/file.d.ts.map +1 -0
- package/dist/tools/file.js +1638 -0
- package/dist/tools/file.js.map +1 -0
- package/dist/tools/generate-blueprint.d.ts +62 -0
- package/dist/tools/generate-blueprint.d.ts.map +1 -0
- package/dist/tools/generate-blueprint.js +141 -0
- package/dist/tools/generate-blueprint.js.map +1 -0
- package/dist/tools/generate-design.d.ts +27 -0
- package/dist/tools/generate-design.d.ts.map +1 -0
- package/dist/tools/generate-design.js +66 -0
- package/dist/tools/generate-design.js.map +1 -0
- package/dist/tools/goal.d.ts +56 -0
- package/dist/tools/goal.d.ts.map +1 -0
- package/dist/tools/goal.js +298 -0
- package/dist/tools/goal.js.map +1 -0
- package/dist/tools/index.d.ts +53 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +183 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/mcp-manage.d.ts +32 -0
- package/dist/tools/mcp-manage.d.ts.map +1 -0
- package/dist/tools/mcp-manage.js +61 -0
- package/dist/tools/mcp-manage.js.map +1 -0
- package/dist/tools/mcp.d.ts +311 -0
- package/dist/tools/mcp.d.ts.map +1 -0
- package/dist/tools/mcp.js +1696 -0
- package/dist/tools/mcp.js.map +1 -0
- package/dist/tools/memory-search.d.ts +26 -0
- package/dist/tools/memory-search.d.ts.map +1 -0
- package/dist/tools/memory-search.js +89 -0
- package/dist/tools/memory-search.js.map +1 -0
- package/dist/tools/network-agent.d.ts +55 -0
- package/dist/tools/network-agent.d.ts.map +1 -0
- package/dist/tools/network-agent.js +349 -0
- package/dist/tools/network-agent.js.map +1 -0
- package/dist/tools/notebook-write.d.ts +23 -0
- package/dist/tools/notebook-write.d.ts.map +1 -0
- package/dist/tools/notebook-write.js +86 -0
- package/dist/tools/notebook-write.js.map +1 -0
- package/dist/tools/notebook.d.ts +46 -0
- package/dist/tools/notebook.d.ts.map +1 -0
- package/dist/tools/notebook.js +335 -0
- package/dist/tools/notebook.js.map +1 -0
- package/dist/tools/output-persistence.d.ts +73 -0
- package/dist/tools/output-persistence.d.ts.map +1 -0
- package/dist/tools/output-persistence.js +258 -0
- package/dist/tools/output-persistence.js.map +1 -0
- package/dist/tools/planmode.d.ts +73 -0
- package/dist/tools/planmode.d.ts.map +1 -0
- package/dist/tools/planmode.js +464 -0
- package/dist/tools/planmode.js.map +1 -0
- package/dist/tools/sandbox.d.ts +192 -0
- package/dist/tools/sandbox.d.ts.map +1 -0
- package/dist/tools/sandbox.js +932 -0
- package/dist/tools/sandbox.js.map +1 -0
- package/dist/tools/schedule.d.ts +65 -0
- package/dist/tools/schedule.d.ts.map +1 -0
- package/dist/tools/schedule.js +537 -0
- package/dist/tools/schedule.js.map +1 -0
- package/dist/tools/search.d.ts +48 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +568 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/self-evolve.d.ts +53 -0
- package/dist/tools/self-evolve.d.ts.map +1 -0
- package/dist/tools/self-evolve.js +241 -0
- package/dist/tools/self-evolve.js.map +1 -0
- package/dist/tools/skill.d.ts +182 -0
- package/dist/tools/skill.d.ts.map +1 -0
- package/dist/tools/skill.js +1274 -0
- package/dist/tools/skill.js.map +1 -0
- package/dist/tools/start-lead-agent.d.ts +103 -0
- package/dist/tools/start-lead-agent.d.ts.map +1 -0
- package/dist/tools/start-lead-agent.js +243 -0
- package/dist/tools/start-lead-agent.js.map +1 -0
- package/dist/tools/structured-output.d.ts +80 -0
- package/dist/tools/structured-output.d.ts.map +1 -0
- package/dist/tools/structured-output.js +113 -0
- package/dist/tools/structured-output.js.map +1 -0
- package/dist/tools/submit-e2e-result.d.ts +57 -0
- package/dist/tools/submit-e2e-result.d.ts.map +1 -0
- package/dist/tools/submit-e2e-result.js +161 -0
- package/dist/tools/submit-e2e-result.js.map +1 -0
- package/dist/tools/submit-review.d.ts +42 -0
- package/dist/tools/submit-review.d.ts.map +1 -0
- package/dist/tools/submit-review.js +122 -0
- package/dist/tools/submit-review.js.map +1 -0
- package/dist/tools/task-status.d.ts +33 -0
- package/dist/tools/task-status.d.ts.map +1 -0
- package/dist/tools/task-status.js +86 -0
- package/dist/tools/task-status.js.map +1 -0
- package/dist/tools/task-storage.d.ts +165 -0
- package/dist/tools/task-storage.d.ts.map +1 -0
- package/dist/tools/task-storage.js +354 -0
- package/dist/tools/task-storage.js.map +1 -0
- package/dist/tools/task-v2.d.ts +38 -0
- package/dist/tools/task-v2.d.ts.map +1 -0
- package/dist/tools/task-v2.js +472 -0
- package/dist/tools/task-v2.js.map +1 -0
- package/dist/tools/team.d.ts +51 -0
- package/dist/tools/team.d.ts.map +1 -0
- package/dist/tools/team.js +441 -0
- package/dist/tools/team.js.map +1 -0
- package/dist/tools/todo.d.ts +30 -0
- package/dist/tools/todo.d.ts.map +1 -0
- package/dist/tools/todo.js +204 -0
- package/dist/tools/todo.js.map +1 -0
- package/dist/tools/trigger-e2e-test.d.ts +62 -0
- package/dist/tools/trigger-e2e-test.d.ts.map +1 -0
- package/dist/tools/trigger-e2e-test.js +228 -0
- package/dist/tools/trigger-e2e-test.js.map +1 -0
- package/dist/tools/update-task-plan.d.ts +43 -0
- package/dist/tools/update-task-plan.d.ts.map +1 -0
- package/dist/tools/update-task-plan.js +214 -0
- package/dist/tools/update-task-plan.js.map +1 -0
- package/dist/tools/web.d.ts +78 -0
- package/dist/tools/web.d.ts.map +1 -0
- package/dist/tools/web.js +535 -0
- package/dist/tools/web.js.map +1 -0
- package/dist/trust/index.d.ts +165 -0
- package/dist/trust/index.d.ts.map +1 -0
- package/dist/trust/index.js +408 -0
- package/dist/trust/index.js.map +1 -0
- package/dist/types/config.d.ts +1259 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +245 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/errors.d.ts +389 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +670 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/index.d.ts +30 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +26 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/messages.d.ts +761 -0
- package/dist/types/messages.d.ts.map +1 -0
- package/dist/types/messages.js +10 -0
- package/dist/types/messages.js.map +1 -0
- package/dist/types/results.d.ts +583 -0
- package/dist/types/results.d.ts.map +1 -0
- package/dist/types/results.js +111 -0
- package/dist/types/results.js.map +1 -0
- package/dist/types/tools.d.ts +734 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +9 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/ui/App.d.ts +17 -0
- package/dist/ui/App.d.ts.map +1 -0
- package/dist/ui/App.js +977 -0
- package/dist/ui/App.js.map +1 -0
- package/dist/ui/ChromeSettings.d.ts +18 -0
- package/dist/ui/ChromeSettings.d.ts.map +1 -0
- package/dist/ui/ChromeSettings.js +224 -0
- package/dist/ui/ChromeSettings.js.map +1 -0
- package/dist/ui/LoginSelector.d.ts +29 -0
- package/dist/ui/LoginSelector.d.ts.map +1 -0
- package/dist/ui/LoginSelector.js +168 -0
- package/dist/ui/LoginSelector.js.map +1 -0
- package/dist/ui/McpSettings.d.ts +29 -0
- package/dist/ui/McpSettings.d.ts.map +1 -0
- package/dist/ui/McpSettings.js +689 -0
- package/dist/ui/McpSettings.js.map +1 -0
- package/dist/ui/PluginsDialog.d.ts +21 -0
- package/dist/ui/PluginsDialog.d.ts.map +1 -0
- package/dist/ui/PluginsDialog.js +923 -0
- package/dist/ui/PluginsDialog.js.map +1 -0
- package/dist/ui/autocomplete/bash-history.d.ts +58 -0
- package/dist/ui/autocomplete/bash-history.d.ts.map +1 -0
- package/dist/ui/autocomplete/bash-history.js +196 -0
- package/dist/ui/autocomplete/bash-history.js.map +1 -0
- package/dist/ui/autocomplete/commands.d.ts +25 -0
- package/dist/ui/autocomplete/commands.d.ts.map +1 -0
- package/dist/ui/autocomplete/commands.js +535 -0
- package/dist/ui/autocomplete/commands.js.map +1 -0
- package/dist/ui/autocomplete/example.d.ts +10 -0
- package/dist/ui/autocomplete/example.d.ts.map +1 -0
- package/dist/ui/autocomplete/example.js +118 -0
- package/dist/ui/autocomplete/example.js.map +1 -0
- package/dist/ui/autocomplete/files.d.ts +27 -0
- package/dist/ui/autocomplete/files.d.ts.map +1 -0
- package/dist/ui/autocomplete/files.js +127 -0
- package/dist/ui/autocomplete/files.js.map +1 -0
- package/dist/ui/autocomplete/index.d.ts +25 -0
- package/dist/ui/autocomplete/index.d.ts.map +1 -0
- package/dist/ui/autocomplete/index.js +85 -0
- package/dist/ui/autocomplete/index.js.map +1 -0
- package/dist/ui/autocomplete/mentions.d.ts +29 -0
- package/dist/ui/autocomplete/mentions.d.ts.map +1 -0
- package/dist/ui/autocomplete/mentions.js +170 -0
- package/dist/ui/autocomplete/mentions.js.map +1 -0
- package/dist/ui/autocomplete/types.d.ts +58 -0
- package/dist/ui/autocomplete/types.d.ts.map +1 -0
- package/dist/ui/autocomplete/types.js +110 -0
- package/dist/ui/autocomplete/types.js.map +1 -0
- package/dist/ui/components/AxonMdImportDialog.d.ts +79 -0
- package/dist/ui/components/AxonMdImportDialog.d.ts.map +1 -0
- package/dist/ui/components/AxonMdImportDialog.js +420 -0
- package/dist/ui/components/AxonMdImportDialog.js.map +1 -0
- package/dist/ui/components/BackgroundTasksPanel.d.ts +16 -0
- package/dist/ui/components/BackgroundTasksPanel.d.ts.map +1 -0
- package/dist/ui/components/BackgroundTasksPanel.js +90 -0
- package/dist/ui/components/BackgroundTasksPanel.js.map +1 -0
- package/dist/ui/components/BreathingLight.d.ts +68 -0
- package/dist/ui/components/BreathingLight.d.ts.map +1 -0
- package/dist/ui/components/BreathingLight.js +110 -0
- package/dist/ui/components/BreathingLight.js.map +1 -0
- package/dist/ui/components/DiffView.d.ts +21 -0
- package/dist/ui/components/DiffView.d.ts.map +1 -0
- package/dist/ui/components/DiffView.js +387 -0
- package/dist/ui/components/DiffView.js.map +1 -0
- package/dist/ui/components/Header.d.ts +38 -0
- package/dist/ui/components/Header.d.ts.map +1 -0
- package/dist/ui/components/Header.js +163 -0
- package/dist/ui/components/Header.js.map +1 -0
- package/dist/ui/components/HistorySearch.d.ts +18 -0
- package/dist/ui/components/HistorySearch.d.ts.map +1 -0
- package/dist/ui/components/HistorySearch.js +59 -0
- package/dist/ui/components/HistorySearch.js.map +1 -0
- package/dist/ui/components/HiveConsole.d.ts +45 -0
- package/dist/ui/components/HiveConsole.d.ts.map +1 -0
- package/dist/ui/components/HiveConsole.js +166 -0
- package/dist/ui/components/HiveConsole.js.map +1 -0
- package/dist/ui/components/HiveConsole.test.d.ts +8 -0
- package/dist/ui/components/HiveConsole.test.d.ts.map +1 -0
- package/dist/ui/components/HiveConsole.test.js +330 -0
- package/dist/ui/components/HiveConsole.test.js.map +1 -0
- package/dist/ui/components/Input.d.ts +25 -0
- package/dist/ui/components/Input.d.ts.map +1 -0
- package/dist/ui/components/Input.js +1097 -0
- package/dist/ui/components/Input.js.map +1 -0
- package/dist/ui/components/Message.d.ts +18 -0
- package/dist/ui/components/Message.d.ts.map +1 -0
- package/dist/ui/components/Message.js +212 -0
- package/dist/ui/components/Message.js.map +1 -0
- package/dist/ui/components/MessageSelector.d.ts +66 -0
- package/dist/ui/components/MessageSelector.d.ts.map +1 -0
- package/dist/ui/components/MessageSelector.js +272 -0
- package/dist/ui/components/MessageSelector.js.map +1 -0
- package/dist/ui/components/ModelSelector.d.ts +27 -0
- package/dist/ui/components/ModelSelector.d.ts.map +1 -0
- package/dist/ui/components/ModelSelector.js +135 -0
- package/dist/ui/components/ModelSelector.js.map +1 -0
- package/dist/ui/components/PermissionPrompt.d.ts +44 -0
- package/dist/ui/components/PermissionPrompt.d.ts.map +1 -0
- package/dist/ui/components/PermissionPrompt.js +416 -0
- package/dist/ui/components/PermissionPrompt.js.map +1 -0
- package/dist/ui/components/ProgressBar.d.ts +61 -0
- package/dist/ui/components/ProgressBar.d.ts.map +1 -0
- package/dist/ui/components/ProgressBar.js +174 -0
- package/dist/ui/components/ProgressBar.js.map +1 -0
- package/dist/ui/components/ResumeSession.d.ts +27 -0
- package/dist/ui/components/ResumeSession.d.ts.map +1 -0
- package/dist/ui/components/ResumeSession.js +330 -0
- package/dist/ui/components/ResumeSession.js.map +1 -0
- package/dist/ui/components/SelectInput.d.ts +22 -0
- package/dist/ui/components/SelectInput.d.ts.map +1 -0
- package/dist/ui/components/SelectInput.js +84 -0
- package/dist/ui/components/SelectInput.js.map +1 -0
- package/dist/ui/components/ShortcutHelp.d.ts +12 -0
- package/dist/ui/components/ShortcutHelp.d.ts.map +1 -0
- package/dist/ui/components/ShortcutHelp.js +55 -0
- package/dist/ui/components/ShortcutHelp.js.map +1 -0
- package/dist/ui/components/SkillsDialog.d.ts +12 -0
- package/dist/ui/components/SkillsDialog.d.ts.map +1 -0
- package/dist/ui/components/SkillsDialog.js +239 -0
- package/dist/ui/components/SkillsDialog.js.map +1 -0
- package/dist/ui/components/Spinner.d.ts +81 -0
- package/dist/ui/components/Spinner.d.ts.map +1 -0
- package/dist/ui/components/Spinner.js +165 -0
- package/dist/ui/components/Spinner.js.map +1 -0
- package/dist/ui/components/StatsPanel.d.ts +20 -0
- package/dist/ui/components/StatsPanel.d.ts.map +1 -0
- package/dist/ui/components/StatsPanel.js +584 -0
- package/dist/ui/components/StatsPanel.js.map +1 -0
- package/dist/ui/components/StatusBar.d.ts +43 -0
- package/dist/ui/components/StatusBar.d.ts.map +1 -0
- package/dist/ui/components/StatusBar.js +160 -0
- package/dist/ui/components/StatusBar.js.map +1 -0
- package/dist/ui/components/StatusBar.test.d.ts +10 -0
- package/dist/ui/components/StatusBar.test.d.ts.map +1 -0
- package/dist/ui/components/StatusBar.test.js +70 -0
- package/dist/ui/components/StatusBar.test.js.map +1 -0
- package/dist/ui/components/TodoList.d.ts +25 -0
- package/dist/ui/components/TodoList.d.ts.map +1 -0
- package/dist/ui/components/TodoList.js +146 -0
- package/dist/ui/components/TodoList.js.map +1 -0
- package/dist/ui/components/ToolCall.d.ts +19 -0
- package/dist/ui/components/ToolCall.d.ts.map +1 -0
- package/dist/ui/components/ToolCall.js +196 -0
- package/dist/ui/components/ToolCall.js.map +1 -0
- package/dist/ui/components/TrustDialog.d.ts +35 -0
- package/dist/ui/components/TrustDialog.d.ts.map +1 -0
- package/dist/ui/components/TrustDialog.js +163 -0
- package/dist/ui/components/TrustDialog.js.map +1 -0
- package/dist/ui/components/UpdateNotification.d.ts +11 -0
- package/dist/ui/components/UpdateNotification.d.ts.map +1 -0
- package/dist/ui/components/UpdateNotification.js +66 -0
- package/dist/ui/components/UpdateNotification.js.map +1 -0
- package/dist/ui/components/WelcomeScreen.d.ts +22 -0
- package/dist/ui/components/WelcomeScreen.d.ts.map +1 -0
- package/dist/ui/components/WelcomeScreen.js +156 -0
- package/dist/ui/components/WelcomeScreen.js.map +1 -0
- package/dist/ui/components/index.d.ts +35 -0
- package/dist/ui/components/index.d.ts.map +1 -0
- package/dist/ui/components/index.js +25 -0
- package/dist/ui/components/index.js.map +1 -0
- package/dist/ui/hooks/index.d.ts +12 -0
- package/dist/ui/hooks/index.d.ts.map +1 -0
- package/dist/ui/hooks/index.js +9 -0
- package/dist/ui/hooks/index.js.map +1 -0
- package/dist/ui/hooks/useAutoScroll.d.ts +22 -0
- package/dist/ui/hooks/useAutoScroll.d.ts.map +1 -0
- package/dist/ui/hooks/useAutoScroll.js +46 -0
- package/dist/ui/hooks/useAutoScroll.js.map +1 -0
- package/dist/ui/hooks/useAxonMdImport.d.ts +57 -0
- package/dist/ui/hooks/useAxonMdImport.d.ts.map +1 -0
- package/dist/ui/hooks/useAxonMdImport.js +248 -0
- package/dist/ui/hooks/useAxonMdImport.js.map +1 -0
- package/dist/ui/hooks/useGlobalKeybindings.d.ts +60 -0
- package/dist/ui/hooks/useGlobalKeybindings.d.ts.map +1 -0
- package/dist/ui/hooks/useGlobalKeybindings.js +460 -0
- package/dist/ui/hooks/useGlobalKeybindings.js.map +1 -0
- package/dist/ui/hooks/useRewind.d.ts +44 -0
- package/dist/ui/hooks/useRewind.d.ts.map +1 -0
- package/dist/ui/hooks/useRewind.js +67 -0
- package/dist/ui/hooks/useRewind.js.map +1 -0
- package/dist/ui/hooks/useTerminalSize.d.ts +32 -0
- package/dist/ui/hooks/useTerminalSize.d.ts.map +1 -0
- package/dist/ui/hooks/useTerminalSize.js +70 -0
- package/dist/ui/hooks/useTerminalSize.js.map +1 -0
- package/dist/ui/index.d.ts +29 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +42 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/ink-v2/dom-renderer.d.ts +58 -0
- package/dist/ui/ink-v2/dom-renderer.d.ts.map +1 -0
- package/dist/ui/ink-v2/dom-renderer.js +295 -0
- package/dist/ui/ink-v2/dom-renderer.js.map +1 -0
- package/dist/ui/ink-v2/frame.d.ts +25 -0
- package/dist/ui/ink-v2/frame.d.ts.map +1 -0
- package/dist/ui/ink-v2/frame.js +120 -0
- package/dist/ui/ink-v2/frame.js.map +1 -0
- package/dist/ui/ink-v2/index.d.ts +92 -0
- package/dist/ui/ink-v2/index.d.ts.map +1 -0
- package/dist/ui/ink-v2/index.js +185 -0
- package/dist/ui/ink-v2/index.js.map +1 -0
- package/dist/ui/ink-v2/output.d.ts +43 -0
- package/dist/ui/ink-v2/output.d.ts.map +1 -0
- package/dist/ui/ink-v2/output.js +154 -0
- package/dist/ui/ink-v2/output.js.map +1 -0
- package/dist/ui/ink-v2/renderer.d.ts +49 -0
- package/dist/ui/ink-v2/renderer.d.ts.map +1 -0
- package/dist/ui/ink-v2/renderer.js +411 -0
- package/dist/ui/ink-v2/renderer.js.map +1 -0
- package/dist/ui/ink-v2/screen.d.ts +65 -0
- package/dist/ui/ink-v2/screen.d.ts.map +1 -0
- package/dist/ui/ink-v2/screen.js +260 -0
- package/dist/ui/ink-v2/screen.js.map +1 -0
- package/dist/ui/ink-v2/style-pool.d.ts +28 -0
- package/dist/ui/ink-v2/style-pool.d.ts.map +1 -0
- package/dist/ui/ink-v2/style-pool.js +50 -0
- package/dist/ui/ink-v2/style-pool.js.map +1 -0
- package/dist/ui/ink-v2/types.d.ts +138 -0
- package/dist/ui/ink-v2/types.d.ts.map +1 -0
- package/dist/ui/ink-v2/types.js +11 -0
- package/dist/ui/ink-v2/types.js.map +1 -0
- package/dist/ui/markdown-renderer.d.ts +35 -0
- package/dist/ui/markdown-renderer.d.ts.map +1 -0
- package/dist/ui/markdown-renderer.js +369 -0
- package/dist/ui/markdown-renderer.js.map +1 -0
- package/dist/ui/spinner-verbs.d.ts +15 -0
- package/dist/ui/spinner-verbs.d.ts.map +1 -0
- package/dist/ui/spinner-verbs.js +75 -0
- package/dist/ui/spinner-verbs.js.map +1 -0
- package/dist/ui/utils/history-manager.d.ts +41 -0
- package/dist/ui/utils/history-manager.d.ts.map +1 -0
- package/dist/ui/utils/history-manager.js +109 -0
- package/dist/ui/utils/history-manager.js.map +1 -0
- package/dist/ui/utils/index.d.ts +9 -0
- package/dist/ui/utils/index.d.ts.map +1 -0
- package/dist/ui/utils/index.js +10 -0
- package/dist/ui/utils/index.js.map +1 -0
- package/dist/ui/utils/kitty-keyboard.d.ts +239 -0
- package/dist/ui/utils/kitty-keyboard.d.ts.map +1 -0
- package/dist/ui/utils/kitty-keyboard.js +341 -0
- package/dist/ui/utils/kitty-keyboard.js.map +1 -0
- package/dist/ui/utils/string-width.d.ts +36 -0
- package/dist/ui/utils/string-width.d.ts.map +1 -0
- package/dist/ui/utils/string-width.js +339 -0
- package/dist/ui/utils/string-width.js.map +1 -0
- package/dist/ui/utils/syntaxHighlight.d.ts +94 -0
- package/dist/ui/utils/syntaxHighlight.d.ts.map +1 -0
- package/dist/ui/utils/syntaxHighlight.js +415 -0
- package/dist/ui/utils/syntaxHighlight.js.map +1 -0
- package/dist/ui/utils/terminal.d.ts +145 -0
- package/dist/ui/utils/terminal.d.ts.map +1 -0
- package/dist/ui/utils/terminal.js +229 -0
- package/dist/ui/utils/terminal.js.map +1 -0
- package/dist/updater/index.d.ts +115 -0
- package/dist/updater/index.d.ts.map +1 -0
- package/dist/updater/index.js +546 -0
- package/dist/updater/index.js.map +1 -0
- package/dist/utils/AppError.d.ts +24 -0
- package/dist/utils/AppError.d.ts.map +1 -0
- package/dist/utils/AppError.js +33 -0
- package/dist/utils/AppError.js.map +1 -0
- package/dist/utils/AppError.test.d.ts +2 -0
- package/dist/utils/AppError.test.d.ts.map +1 -0
- package/dist/utils/AppError.test.js +257 -0
- package/dist/utils/AppError.test.js.map +1 -0
- package/dist/utils/attribution.d.ts +111 -0
- package/dist/utils/attribution.d.ts.map +1 -0
- package/dist/utils/attribution.js +219 -0
- package/dist/utils/attribution.js.map +1 -0
- package/dist/utils/editor.d.ts +19 -0
- package/dist/utils/editor.d.ts.map +1 -0
- package/dist/utils/editor.js +115 -0
- package/dist/utils/editor.js.map +1 -0
- package/dist/utils/env-check.d.ts +78 -0
- package/dist/utils/env-check.d.ts.map +1 -0
- package/dist/utils/env-check.js +114 -0
- package/dist/utils/env-check.js.map +1 -0
- package/dist/utils/error-watcher.d.ts +78 -0
- package/dist/utils/error-watcher.d.ts.map +1 -0
- package/dist/utils/error-watcher.js +355 -0
- package/dist/utils/error-watcher.js.map +1 -0
- package/dist/utils/git-helper.d.ts +55 -0
- package/dist/utils/git-helper.d.ts.map +1 -0
- package/dist/utils/git-helper.js +238 -0
- package/dist/utils/git-helper.js.map +1 -0
- package/dist/utils/index.d.ts +188 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +472 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +117 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +458 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/package-manager.d.ts +134 -0
- package/dist/utils/package-manager.d.ts.map +1 -0
- package/dist/utils/package-manager.js +325 -0
- package/dist/utils/package-manager.js.map +1 -0
- package/dist/utils/platform.d.ts +283 -0
- package/dist/utils/platform.d.ts.map +1 -0
- package/dist/utils/platform.js +748 -0
- package/dist/utils/platform.js.map +1 -0
- package/dist/utils/pr-status.d.ts +50 -0
- package/dist/utils/pr-status.d.ts.map +1 -0
- package/dist/utils/pr-status.js +182 -0
- package/dist/utils/pr-status.js.map +1 -0
- package/dist/utils/retry.d.ts +86 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +202 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/temp-dir.d.ts +31 -0
- package/dist/utils/temp-dir.d.ts.map +1 -0
- package/dist/utils/temp-dir.js +141 -0
- package/dist/utils/temp-dir.js.map +1 -0
- package/dist/utils/terminal-setup.d.ts +31 -0
- package/dist/utils/terminal-setup.d.ts.map +1 -0
- package/dist/utils/terminal-setup.js +224 -0
- package/dist/utils/terminal-setup.js.map +1 -0
- package/dist/utils/terminal-tab.d.ts +15 -0
- package/dist/utils/terminal-tab.d.ts.map +1 -0
- package/dist/utils/terminal-tab.js +173 -0
- package/dist/utils/terminal-tab.js.map +1 -0
- package/dist/utils/token-estimate.d.ts +26 -0
- package/dist/utils/token-estimate.d.ts.map +1 -0
- package/dist/utils/token-estimate.js +62 -0
- package/dist/utils/token-estimate.js.map +1 -0
- package/dist/utils/truncated-buffer.d.ts +70 -0
- package/dist/utils/truncated-buffer.d.ts.map +1 -0
- package/dist/utils/truncated-buffer.js +124 -0
- package/dist/utils/truncated-buffer.js.map +1 -0
- package/dist/version.d.ts +30 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +32 -0
- package/dist/version.js.map +1 -0
- package/dist/web/index.d.ts +7 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +7 -0
- package/dist/web/index.js.map +1 -0
- package/dist/web/server/api-manager.d.ts +53 -0
- package/dist/web/server/api-manager.d.ts.map +1 -0
- package/dist/web/server/api-manager.js +271 -0
- package/dist/web/server/api-manager.js.map +1 -0
- package/dist/web/server/channels/adapters/discord.d.ts +41 -0
- package/dist/web/server/channels/adapters/discord.d.ts.map +1 -0
- package/dist/web/server/channels/adapters/discord.js +326 -0
- package/dist/web/server/channels/adapters/discord.js.map +1 -0
- package/dist/web/server/channels/adapters/feishu.d.ts +38 -0
- package/dist/web/server/channels/adapters/feishu.d.ts.map +1 -0
- package/dist/web/server/channels/adapters/feishu.js +442 -0
- package/dist/web/server/channels/adapters/feishu.js.map +1 -0
- package/dist/web/server/channels/adapters/slack-bot.d.ts +30 -0
- package/dist/web/server/channels/adapters/slack-bot.d.ts.map +1 -0
- package/dist/web/server/channels/adapters/slack-bot.js +226 -0
- package/dist/web/server/channels/adapters/slack-bot.js.map +1 -0
- package/dist/web/server/channels/adapters/telegram.d.ts +32 -0
- package/dist/web/server/channels/adapters/telegram.d.ts.map +1 -0
- package/dist/web/server/channels/adapters/telegram.js +261 -0
- package/dist/web/server/channels/adapters/telegram.js.map +1 -0
- package/dist/web/server/channels/adapters/whatsapp.d.ts +48 -0
- package/dist/web/server/channels/adapters/whatsapp.d.ts.map +1 -0
- package/dist/web/server/channels/adapters/whatsapp.js +316 -0
- package/dist/web/server/channels/adapters/whatsapp.js.map +1 -0
- package/dist/web/server/channels/bridge.d.ts +103 -0
- package/dist/web/server/channels/bridge.d.ts.map +1 -0
- package/dist/web/server/channels/bridge.js +728 -0
- package/dist/web/server/channels/bridge.js.map +1 -0
- package/dist/web/server/channels/index.d.ts +71 -0
- package/dist/web/server/channels/index.d.ts.map +1 -0
- package/dist/web/server/channels/index.js +307 -0
- package/dist/web/server/channels/index.js.map +1 -0
- package/dist/web/server/channels/types.d.ts +249 -0
- package/dist/web/server/channels/types.d.ts.map +1 -0
- package/dist/web/server/channels/types.js +8 -0
- package/dist/web/server/channels/types.js.map +1 -0
- package/dist/web/server/checkpoint-manager.d.ts +152 -0
- package/dist/web/server/checkpoint-manager.d.ts.map +1 -0
- package/dist/web/server/checkpoint-manager.js +359 -0
- package/dist/web/server/checkpoint-manager.js.map +1 -0
- package/dist/web/server/connectors/index.d.ts +115 -0
- package/dist/web/server/connectors/index.d.ts.map +1 -0
- package/dist/web/server/connectors/index.js +759 -0
- package/dist/web/server/connectors/index.js.map +1 -0
- package/dist/web/server/connectors/providers.d.ts +6 -0
- package/dist/web/server/connectors/providers.d.ts.map +1 -0
- package/dist/web/server/connectors/providers.js +238 -0
- package/dist/web/server/connectors/providers.js.map +1 -0
- package/dist/web/server/connectors/types.d.ts +79 -0
- package/dist/web/server/connectors/types.d.ts.map +1 -0
- package/dist/web/server/connectors/types.js +5 -0
- package/dist/web/server/connectors/types.js.map +1 -0
- package/dist/web/server/conversation.d.ts +593 -0
- package/dist/web/server/conversation.d.ts.map +1 -0
- package/dist/web/server/conversation.js +5170 -0
- package/dist/web/server/conversation.js.map +1 -0
- package/dist/web/server/database/swarm-logs.d.ts +150 -0
- package/dist/web/server/database/swarm-logs.d.ts.map +1 -0
- package/dist/web/server/database/swarm-logs.js +456 -0
- package/dist/web/server/database/swarm-logs.js.map +1 -0
- package/dist/web/server/doctor.d.ts +59 -0
- package/dist/web/server/doctor.d.ts.map +1 -0
- package/dist/web/server/doctor.js +666 -0
- package/dist/web/server/doctor.js.map +1 -0
- package/dist/web/server/evolve-state.d.ts +30 -0
- package/dist/web/server/evolve-state.d.ts.map +1 -0
- package/dist/web/server/evolve-state.js +54 -0
- package/dist/web/server/evolve-state.js.map +1 -0
- package/dist/web/server/git-manager.d.ts +373 -0
- package/dist/web/server/git-manager.d.ts.map +1 -0
- package/dist/web/server/git-manager.js +1556 -0
- package/dist/web/server/git-manager.js.map +1 -0
- package/dist/web/server/handlers/types.d.ts +95 -0
- package/dist/web/server/handlers/types.d.ts.map +1 -0
- package/dist/web/server/handlers/types.js +22 -0
- package/dist/web/server/handlers/types.js.map +1 -0
- package/dist/web/server/index.d.ts +41 -0
- package/dist/web/server/index.d.ts.map +1 -0
- package/dist/web/server/index.js +935 -0
- package/dist/web/server/index.js.map +1 -0
- package/dist/web/server/oauth-manager.d.ts +89 -0
- package/dist/web/server/oauth-manager.d.ts.map +1 -0
- package/dist/web/server/oauth-manager.js +361 -0
- package/dist/web/server/oauth-manager.js.map +1 -0
- package/dist/web/server/permission-handler.d.ts +170 -0
- package/dist/web/server/permission-handler.d.ts.map +1 -0
- package/dist/web/server/permission-handler.js +591 -0
- package/dist/web/server/permission-handler.js.map +1 -0
- package/dist/web/server/project-suggestions.d.ts +39 -0
- package/dist/web/server/project-suggestions.d.ts.map +1 -0
- package/dist/web/server/project-suggestions.js +365 -0
- package/dist/web/server/project-suggestions.js.map +1 -0
- package/dist/web/server/prompt-snippets.d.ts +92 -0
- package/dist/web/server/prompt-snippets.d.ts.map +1 -0
- package/dist/web/server/prompt-snippets.js +206 -0
- package/dist/web/server/prompt-snippets.js.map +1 -0
- package/dist/web/server/routes/__tests__/artifacts-api.test.d.ts +2 -0
- package/dist/web/server/routes/__tests__/artifacts-api.test.d.ts.map +1 -0
- package/dist/web/server/routes/__tests__/artifacts-api.test.js +572 -0
- package/dist/web/server/routes/__tests__/artifacts-api.test.js.map +1 -0
- package/dist/web/server/routes/agent-api.d.ts +7 -0
- package/dist/web/server/routes/agent-api.d.ts.map +1 -0
- package/dist/web/server/routes/agent-api.js +225 -0
- package/dist/web/server/routes/agent-api.js.map +1 -0
- package/dist/web/server/routes/ai-editor.d.ts +13 -0
- package/dist/web/server/routes/ai-editor.d.ts.map +1 -0
- package/dist/web/server/routes/ai-editor.js +2079 -0
- package/dist/web/server/routes/ai-editor.js.map +1 -0
- package/dist/web/server/routes/ai-hover.d.ts +10 -0
- package/dist/web/server/routes/ai-hover.d.ts.map +1 -0
- package/dist/web/server/routes/ai-hover.js +359 -0
- package/dist/web/server/routes/ai-hover.js.map +1 -0
- package/dist/web/server/routes/api.d.ts +7 -0
- package/dist/web/server/routes/api.d.ts.map +1 -0
- package/dist/web/server/routes/api.js +1200 -0
- package/dist/web/server/routes/api.js.map +1 -0
- package/dist/web/server/routes/artifacts-api.d.ts +15 -0
- package/dist/web/server/routes/artifacts-api.d.ts.map +1 -0
- package/dist/web/server/routes/artifacts-api.js +231 -0
- package/dist/web/server/routes/artifacts-api.js.map +1 -0
- package/dist/web/server/routes/auth.d.ts +7 -0
- package/dist/web/server/routes/auth.d.ts.map +1 -0
- package/dist/web/server/routes/auth.js +292 -0
- package/dist/web/server/routes/auth.js.map +1 -0
- package/dist/web/server/routes/autocomplete-api.d.ts +10 -0
- package/dist/web/server/routes/autocomplete-api.d.ts.map +1 -0
- package/dist/web/server/routes/autocomplete-api.js +302 -0
- package/dist/web/server/routes/autocomplete-api.js.map +1 -0
- package/dist/web/server/routes/axon-cloud.d.ts +7 -0
- package/dist/web/server/routes/axon-cloud.d.ts.map +1 -0
- package/dist/web/server/routes/axon-cloud.js +160 -0
- package/dist/web/server/routes/axon-cloud.js.map +1 -0
- package/dist/web/server/routes/blueprint-api.d.ts +459 -0
- package/dist/web/server/routes/blueprint-api.d.ts.map +1 -0
- package/dist/web/server/routes/blueprint-api.js +6057 -0
- package/dist/web/server/routes/blueprint-api.js.map +1 -0
- package/dist/web/server/routes/blueprint-requirement-api.d.ts +11 -0
- package/dist/web/server/routes/blueprint-requirement-api.d.ts.map +1 -0
- package/dist/web/server/routes/blueprint-requirement-api.js +91 -0
- package/dist/web/server/routes/blueprint-requirement-api.js.map +1 -0
- package/dist/web/server/routes/code-parser.d.ts +14 -0
- package/dist/web/server/routes/code-parser.d.ts.map +1 -0
- package/dist/web/server/routes/code-parser.js +191 -0
- package/dist/web/server/routes/code-parser.js.map +1 -0
- package/dist/web/server/routes/config-api.d.ts +14 -0
- package/dist/web/server/routes/config-api.d.ts.map +1 -0
- package/dist/web/server/routes/config-api.js +670 -0
- package/dist/web/server/routes/config-api.js.map +1 -0
- package/dist/web/server/routes/connectors-api.d.ts +7 -0
- package/dist/web/server/routes/connectors-api.d.ts.map +1 -0
- package/dist/web/server/routes/connectors-api.js +267 -0
- package/dist/web/server/routes/connectors-api.js.map +1 -0
- package/dist/web/server/routes/data-flow-analyzer.d.ts +60 -0
- package/dist/web/server/routes/data-flow-analyzer.d.ts.map +1 -0
- package/dist/web/server/routes/data-flow-analyzer.js +220 -0
- package/dist/web/server/routes/data-flow-analyzer.js.map +1 -0
- package/dist/web/server/routes/download-proxy.d.ts +16 -0
- package/dist/web/server/routes/download-proxy.d.ts.map +1 -0
- package/dist/web/server/routes/download-proxy.js +114 -0
- package/dist/web/server/routes/download-proxy.js.map +1 -0
- package/dist/web/server/routes/file-api.d.ts +18 -0
- package/dist/web/server/routes/file-api.d.ts.map +1 -0
- package/dist/web/server/routes/file-api.js +1514 -0
- package/dist/web/server/routes/file-api.js.map +1 -0
- package/dist/web/server/routes/lsp-analyzer.d.ts +76 -0
- package/dist/web/server/routes/lsp-analyzer.d.ts.map +1 -0
- package/dist/web/server/routes/lsp-analyzer.js +457 -0
- package/dist/web/server/routes/lsp-analyzer.js.map +1 -0
- package/dist/web/server/routes/lsp-api.d.ts +8 -0
- package/dist/web/server/routes/lsp-api.d.ts.map +1 -0
- package/dist/web/server/routes/lsp-api.js +283 -0
- package/dist/web/server/routes/lsp-api.js.map +1 -0
- package/dist/web/server/routes/mcp-cli-api.d.ts +19 -0
- package/dist/web/server/routes/mcp-cli-api.d.ts.map +1 -0
- package/dist/web/server/routes/mcp-cli-api.js +223 -0
- package/dist/web/server/routes/mcp-cli-api.js.map +1 -0
- package/dist/web/server/routes/network-api.d.ts +8 -0
- package/dist/web/server/routes/network-api.d.ts.map +1 -0
- package/dist/web/server/routes/network-api.js +367 -0
- package/dist/web/server/routes/network-api.js.map +1 -0
- package/dist/web/server/routes/notebook-api.d.ts +12 -0
- package/dist/web/server/routes/notebook-api.d.ts.map +1 -0
- package/dist/web/server/routes/notebook-api.js +164 -0
- package/dist/web/server/routes/notebook-api.js.map +1 -0
- package/dist/web/server/routes/port-forward.d.ts +20 -0
- package/dist/web/server/routes/port-forward.d.ts.map +1 -0
- package/dist/web/server/routes/port-forward.js +155 -0
- package/dist/web/server/routes/port-forward.js.map +1 -0
- package/dist/web/server/routes/project-map-generator.d.ts +126 -0
- package/dist/web/server/routes/project-map-generator.d.ts.map +1 -0
- package/dist/web/server/routes/project-map-generator.js +800 -0
- package/dist/web/server/routes/project-map-generator.js.map +1 -0
- package/dist/web/server/routes/schedule-api.d.ts +7 -0
- package/dist/web/server/routes/schedule-api.d.ts.map +1 -0
- package/dist/web/server/routes/schedule-api.js +324 -0
- package/dist/web/server/routes/schedule-api.js.map +1 -0
- package/dist/web/server/routes/symbol-classifier.d.ts +71 -0
- package/dist/web/server/routes/symbol-classifier.d.ts.map +1 -0
- package/dist/web/server/routes/symbol-classifier.js +190 -0
- package/dist/web/server/routes/symbol-classifier.js.map +1 -0
- package/dist/web/server/services/axon-cloud-service.d.ts +95 -0
- package/dist/web/server/services/axon-cloud-service.d.ts.map +1 -0
- package/dist/web/server/services/axon-cloud-service.js +210 -0
- package/dist/web/server/services/axon-cloud-service.js.map +1 -0
- package/dist/web/server/services/config-service.d.ts +436 -0
- package/dist/web/server/services/config-service.d.ts.map +1 -0
- package/dist/web/server/services/config-service.js +872 -0
- package/dist/web/server/services/config-service.js.map +1 -0
- package/dist/web/server/services/gemini-image-service.d.ts +80 -0
- package/dist/web/server/services/gemini-image-service.d.ts.map +1 -0
- package/dist/web/server/services/gemini-image-service.js +373 -0
- package/dist/web/server/services/gemini-image-service.js.map +1 -0
- package/dist/web/server/services/mode-presets.d.ts +40 -0
- package/dist/web/server/services/mode-presets.d.ts.map +1 -0
- package/dist/web/server/services/mode-presets.js +167 -0
- package/dist/web/server/services/mode-presets.js.map +1 -0
- package/dist/web/server/services/proxy-service.d.ts +59 -0
- package/dist/web/server/services/proxy-service.d.ts.map +1 -0
- package/dist/web/server/services/proxy-service.js +132 -0
- package/dist/web/server/services/proxy-service.js.map +1 -0
- package/dist/web/server/session-manager.d.ts +152 -0
- package/dist/web/server/session-manager.d.ts.map +1 -0
- package/dist/web/server/session-manager.js +421 -0
- package/dist/web/server/session-manager.js.map +1 -0
- package/dist/web/server/slash-commands.d.ts +46 -0
- package/dist/web/server/slash-commands.d.ts.map +1 -0
- package/dist/web/server/slash-commands.js +774 -0
- package/dist/web/server/slash-commands.js.map +1 -0
- package/dist/web/server/task-manager.d.ts +190 -0
- package/dist/web/server/task-manager.d.ts.map +1 -0
- package/dist/web/server/task-manager.js +596 -0
- package/dist/web/server/task-manager.js.map +1 -0
- package/dist/web/server/terminal-manager.d.ts +50 -0
- package/dist/web/server/terminal-manager.d.ts.map +1 -0
- package/dist/web/server/terminal-manager.js +274 -0
- package/dist/web/server/terminal-manager.js.map +1 -0
- package/dist/web/server/trpc/appRouter.d.ts +429 -0
- package/dist/web/server/trpc/appRouter.d.ts.map +1 -0
- package/dist/web/server/trpc/appRouter.js +18 -0
- package/dist/web/server/trpc/appRouter.js.map +1 -0
- package/dist/web/server/trpc/index.d.ts +29 -0
- package/dist/web/server/trpc/index.d.ts.map +1 -0
- package/dist/web/server/trpc/index.js +25 -0
- package/dist/web/server/trpc/index.js.map +1 -0
- package/dist/web/server/trpc/routers/blueprint.d.ts +162 -0
- package/dist/web/server/trpc/routers/blueprint.d.ts.map +1 -0
- package/dist/web/server/trpc/routers/blueprint.js +225 -0
- package/dist/web/server/trpc/routers/blueprint.js.map +1 -0
- package/dist/web/server/trpc/routers/coordinator.d.ts +247 -0
- package/dist/web/server/trpc/routers/coordinator.d.ts.map +1 -0
- package/dist/web/server/trpc/routers/coordinator.js +363 -0
- package/dist/web/server/trpc/routers/coordinator.js.map +1 -0
- package/dist/web/server/trpc/routers/execution.d.ts +106 -0
- package/dist/web/server/trpc/routers/execution.d.ts.map +1 -0
- package/dist/web/server/trpc/routers/execution.js +176 -0
- package/dist/web/server/trpc/routers/execution.js.map +1 -0
- package/dist/web/server/user-interaction.d.ts +61 -0
- package/dist/web/server/user-interaction.d.ts.map +1 -0
- package/dist/web/server/user-interaction.js +133 -0
- package/dist/web/server/user-interaction.js.map +1 -0
- package/dist/web/server/web-auth.d.ts +125 -0
- package/dist/web/server/web-auth.d.ts.map +1 -0
- package/dist/web/server/web-auth.js +364 -0
- package/dist/web/server/web-auth.js.map +1 -0
- package/dist/web/server/web-scheduler.d.ts +96 -0
- package/dist/web/server/web-scheduler.d.ts.map +1 -0
- package/dist/web/server/web-scheduler.js +762 -0
- package/dist/web/server/web-scheduler.js.map +1 -0
- package/dist/web/server/websocket-git-handlers.d.ts +107 -0
- package/dist/web/server/websocket-git-handlers.d.ts.map +1 -0
- package/dist/web/server/websocket-git-handlers.js +855 -0
- package/dist/web/server/websocket-git-handlers.js.map +1 -0
- package/dist/web/server/websocket.d.ts +18 -0
- package/dist/web/server/websocket.d.ts.map +1 -0
- package/dist/web/server/websocket.js +6158 -0
- package/dist/web/server/websocket.js.map +1 -0
- package/dist/web/shared/types.d.ts +4100 -0
- package/dist/web/shared/types.d.ts.map +1 -0
- package/dist/web/shared/types.js +123 -0
- package/dist/web/shared/types.js.map +1 -0
- package/dist/web-cli.d.ts +11 -0
- package/dist/web-cli.d.ts.map +1 -0
- package/dist/web-cli.js +196 -0
- package/dist/web-cli.js.map +1 -0
- package/dist/wizard/onboarding.d.ts +13 -0
- package/dist/wizard/onboarding.d.ts.map +1 -0
- package/dist/wizard/onboarding.js +196 -0
- package/dist/wizard/onboarding.js.map +1 -0
- package/electron/README.md +41 -0
- package/electron/main.cjs +341 -0
- package/package.json +236 -0
- package/scripts/postinstall.js +110 -0
|
@@ -0,0 +1,1696 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP (Model Context Protocol) 工具
|
|
3
|
+
* 支持连接和调用 MCP 服务器
|
|
4
|
+
*/
|
|
5
|
+
import { spawn } from 'child_process';
|
|
6
|
+
import { BaseTool } from './base.js';
|
|
7
|
+
import { MAX_MCP_OUTPUT_TOKENS } from '../utils/index.js';
|
|
8
|
+
import { persistLargeOutputSync } from './output-persistence.js';
|
|
9
|
+
import { t } from '../i18n/index.js';
|
|
10
|
+
import { VERSION } from '../version.js';
|
|
11
|
+
const mcpServers = new Map();
|
|
12
|
+
let messageId = 1;
|
|
13
|
+
// 配置常量
|
|
14
|
+
const MCP_TIMEOUT = parseInt(process.env.MCP_TIMEOUT || '30000', 10); // 默认 30 秒超时(npx 首次下载需要更长时间)
|
|
15
|
+
const MCP_REMOTE_TIMEOUT = 300000; // mcp-remote OAuth 场景:5 分钟超时(用户需要手动在浏览器授权)
|
|
16
|
+
const RESOURCE_CACHE_TTL = 60000; // 资源缓存 1 分钟
|
|
17
|
+
const HEALTH_CHECK_INTERVAL = 30000; // 健康检查间隔 30 秒
|
|
18
|
+
const MAX_RECONNECT_ATTEMPTS = 3; // 最大重连次数
|
|
19
|
+
const RECONNECT_DELAY_BASE = 1000; // 重连延迟基数(毫秒)
|
|
20
|
+
/**
|
|
21
|
+
* 注册 MCP 服务器配置
|
|
22
|
+
*
|
|
23
|
+
* @param name 服务器名称
|
|
24
|
+
* @param config 服务器配置
|
|
25
|
+
* @param preloadedTools 预加载的工具定义(可选,用于不需要连接就能发现的工具)
|
|
26
|
+
*/
|
|
27
|
+
export function registerMcpServer(name, config, preloadedTools) {
|
|
28
|
+
mcpServers.set(name, {
|
|
29
|
+
config,
|
|
30
|
+
connected: false,
|
|
31
|
+
connecting: false,
|
|
32
|
+
reconnectAttempts: 0,
|
|
33
|
+
permanentlyFailed: false,
|
|
34
|
+
capabilities: preloadedTools ? { tools: true } : {},
|
|
35
|
+
tools: preloadedTools || [],
|
|
36
|
+
resources: [],
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 注销 MCP 服务器(从 mcpServers Map 中移除)
|
|
41
|
+
* 用于禁用 MCP 服务器时彻底清除,防止 MCPSearchTool 仍能搜索到已禁用的工具
|
|
42
|
+
*/
|
|
43
|
+
export function unregisterMcpServer(name) {
|
|
44
|
+
mcpServers.delete(name);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* 获取所有已注册的 MCP 服务器
|
|
48
|
+
*/
|
|
49
|
+
export function getMcpServers() {
|
|
50
|
+
return mcpServers;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* 延迟函数
|
|
54
|
+
*/
|
|
55
|
+
function sleep(ms) {
|
|
56
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* 优雅地终止 MCP 服务器进程
|
|
60
|
+
*
|
|
61
|
+
* 按照官方实现,使用 SIGINT -> SIGTERM -> SIGKILL 的优雅关闭序列
|
|
62
|
+
* 这确保 MCP 服务器有机会清理资源并正常退出
|
|
63
|
+
*
|
|
64
|
+
* 注意:Windows 上的信号处理与 Unix 不同:
|
|
65
|
+
* - SIGINT: Windows 上会终止进程(类似 Ctrl+C)
|
|
66
|
+
* - SIGTERM: Windows 上等同于 SIGINT
|
|
67
|
+
* - SIGKILL: Windows 上强制终止进程
|
|
68
|
+
*
|
|
69
|
+
* @param name 服务器名称
|
|
70
|
+
* @param pid 进程 ID
|
|
71
|
+
*/
|
|
72
|
+
async function gracefullyTerminateProcess(name, pid) {
|
|
73
|
+
const CLEANUP_TIMEOUT = 600; // 600ms 总超时
|
|
74
|
+
const isWindows = process.platform === 'win32';
|
|
75
|
+
return new Promise((resolve) => {
|
|
76
|
+
let terminated = false;
|
|
77
|
+
// 定期检查进程是否已退出
|
|
78
|
+
const checkInterval = setInterval(() => {
|
|
79
|
+
try {
|
|
80
|
+
// process.kill(pid, 0) 不发送信号,只检查进程是否存在
|
|
81
|
+
process.kill(pid, 0);
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// 进程不存在,已退出
|
|
85
|
+
if (!terminated) {
|
|
86
|
+
terminated = true;
|
|
87
|
+
clearInterval(checkInterval);
|
|
88
|
+
clearTimeout(cleanupTimeout);
|
|
89
|
+
if (process.env.DEBUG) {
|
|
90
|
+
console.log(`[MCP] ${name}: Process exited cleanly`);
|
|
91
|
+
}
|
|
92
|
+
resolve();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}, 50);
|
|
96
|
+
// 总超时,防止无限等待
|
|
97
|
+
const cleanupTimeout = setTimeout(() => {
|
|
98
|
+
if (!terminated) {
|
|
99
|
+
terminated = true;
|
|
100
|
+
clearInterval(checkInterval);
|
|
101
|
+
if (process.env.DEBUG) {
|
|
102
|
+
console.log(`[MCP] ${name}: Cleanup timeout reached, stopping process monitoring`);
|
|
103
|
+
}
|
|
104
|
+
resolve();
|
|
105
|
+
}
|
|
106
|
+
}, CLEANUP_TIMEOUT);
|
|
107
|
+
// 开始优雅关闭序列
|
|
108
|
+
(async () => {
|
|
109
|
+
try {
|
|
110
|
+
// Windows 上直接使用 SIGTERM 终止进程(Node.js 在 Windows 上会映射到 TerminateProcess)
|
|
111
|
+
if (isWindows) {
|
|
112
|
+
if (process.env.DEBUG) {
|
|
113
|
+
console.log(`[MCP] ${name}: Terminating process (Windows)`);
|
|
114
|
+
}
|
|
115
|
+
try {
|
|
116
|
+
// Windows 上 SIGTERM 会调用 TerminateProcess API
|
|
117
|
+
process.kill(pid, 'SIGTERM');
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
if (process.env.DEBUG) {
|
|
121
|
+
console.log(`[MCP] ${name}: Error terminating: ${err}`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
// Unix 系统使用标准的 SIGINT -> SIGTERM -> SIGKILL 序列
|
|
127
|
+
// 1. 发送 SIGINT
|
|
128
|
+
if (process.env.DEBUG) {
|
|
129
|
+
console.log(`[MCP] ${name}: Sending SIGINT`);
|
|
130
|
+
}
|
|
131
|
+
try {
|
|
132
|
+
process.kill(pid, 'SIGINT');
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
if (process.env.DEBUG) {
|
|
136
|
+
console.log(`[MCP] ${name}: Error sending SIGINT: ${err}`);
|
|
137
|
+
}
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
// 等待 100ms
|
|
141
|
+
await sleep(100);
|
|
142
|
+
if (terminated)
|
|
143
|
+
return;
|
|
144
|
+
// 2. 检查是否退出,如果没有发送 SIGTERM
|
|
145
|
+
try {
|
|
146
|
+
process.kill(pid, 0);
|
|
147
|
+
if (process.env.DEBUG) {
|
|
148
|
+
console.log(`[MCP] ${name}: SIGINT failed, sending SIGTERM`);
|
|
149
|
+
}
|
|
150
|
+
try {
|
|
151
|
+
process.kill(pid, 'SIGTERM');
|
|
152
|
+
}
|
|
153
|
+
catch (err) {
|
|
154
|
+
if (process.env.DEBUG) {
|
|
155
|
+
console.log(`[MCP] ${name}: Error sending SIGTERM: ${err}`);
|
|
156
|
+
}
|
|
157
|
+
terminated = true;
|
|
158
|
+
clearInterval(checkInterval);
|
|
159
|
+
clearTimeout(cleanupTimeout);
|
|
160
|
+
resolve();
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
// 进程已退出
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
// 等待 400ms
|
|
169
|
+
await sleep(400);
|
|
170
|
+
if (terminated)
|
|
171
|
+
return;
|
|
172
|
+
// 3. 检查是否退出,如果没有发送 SIGKILL
|
|
173
|
+
try {
|
|
174
|
+
process.kill(pid, 0);
|
|
175
|
+
if (process.env.DEBUG) {
|
|
176
|
+
console.log(`[MCP] ${name}: SIGTERM failed, sending SIGKILL`);
|
|
177
|
+
}
|
|
178
|
+
try {
|
|
179
|
+
process.kill(pid, 'SIGKILL');
|
|
180
|
+
}
|
|
181
|
+
catch (err) {
|
|
182
|
+
if (process.env.DEBUG) {
|
|
183
|
+
console.log(`[MCP] ${name}: Error sending SIGKILL: ${err}`);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
// 进程已退出
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
// 忽略错误,让超时机制处理
|
|
194
|
+
}
|
|
195
|
+
})();
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* 断开 MCP 服务器连接
|
|
200
|
+
*
|
|
201
|
+
* 使用优雅关闭序列,确保 MCP 服务器进程被正确清理,
|
|
202
|
+
* 防止出现孤儿进程
|
|
203
|
+
*/
|
|
204
|
+
export async function disconnectMcpServer(name) {
|
|
205
|
+
const server = mcpServers.get(name);
|
|
206
|
+
if (!server)
|
|
207
|
+
return;
|
|
208
|
+
if (server.process) {
|
|
209
|
+
const pid = server.process.pid;
|
|
210
|
+
if (pid) {
|
|
211
|
+
try {
|
|
212
|
+
// 使用优雅关闭序列
|
|
213
|
+
await gracefullyTerminateProcess(name, pid);
|
|
214
|
+
}
|
|
215
|
+
catch (err) {
|
|
216
|
+
console.error(`[MCP] Failed to gracefully terminate ${name}:`, err);
|
|
217
|
+
// 如果优雅关闭失败,尝试强制 kill
|
|
218
|
+
try {
|
|
219
|
+
server.process.kill('SIGKILL');
|
|
220
|
+
}
|
|
221
|
+
catch { }
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
// 没有 pid,直接 kill
|
|
226
|
+
try {
|
|
227
|
+
server.process.kill();
|
|
228
|
+
}
|
|
229
|
+
catch (err) {
|
|
230
|
+
console.error(`[MCP] Failed to kill ${name}:`, err);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
server.process = undefined;
|
|
234
|
+
}
|
|
235
|
+
server.connected = false;
|
|
236
|
+
server.connecting = false;
|
|
237
|
+
server.reconnectAttempts = 0;
|
|
238
|
+
server.permanentlyFailed = false; // 允许手动重连
|
|
239
|
+
// v2.1.63: 清除工具和资源缓存,防止 reconnect 时内存泄漏
|
|
240
|
+
server.tools = [];
|
|
241
|
+
server.resources = [];
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* 检查服务器健康状态
|
|
245
|
+
*/
|
|
246
|
+
async function checkServerHealth(name) {
|
|
247
|
+
const server = mcpServers.get(name);
|
|
248
|
+
if (!server || !server.connected)
|
|
249
|
+
return false;
|
|
250
|
+
const now = Date.now();
|
|
251
|
+
if (server.lastHealthCheck && now - server.lastHealthCheck < HEALTH_CHECK_INTERVAL) {
|
|
252
|
+
return true; // 最近检查过,认为是健康的
|
|
253
|
+
}
|
|
254
|
+
try {
|
|
255
|
+
// 发送 ping 请求(如果服务器支持)
|
|
256
|
+
const result = await sendMcpMessage(name, 'ping', {});
|
|
257
|
+
server.lastHealthCheck = now;
|
|
258
|
+
return result !== null;
|
|
259
|
+
}
|
|
260
|
+
catch {
|
|
261
|
+
return false;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* 连接到 MCP 服务器(带重试机制)
|
|
266
|
+
*
|
|
267
|
+
* v2.1.9: 使用 connectionPromise 缓存机制防止重连挂起
|
|
268
|
+
* 修复了缓存的连接 promise 永不 resolve 导致的问题
|
|
269
|
+
*/
|
|
270
|
+
export async function connectMcpServer(name, retry = true) {
|
|
271
|
+
const server = mcpServers.get(name);
|
|
272
|
+
if (!server)
|
|
273
|
+
return false;
|
|
274
|
+
// 所有重试均已耗尽,不再自动重连
|
|
275
|
+
if (server.permanentlyFailed)
|
|
276
|
+
return false;
|
|
277
|
+
// 如果已连接且健康,直接返回
|
|
278
|
+
if (server.connected && server.process) {
|
|
279
|
+
const healthy = await checkServerHealth(name);
|
|
280
|
+
if (healthy)
|
|
281
|
+
return true;
|
|
282
|
+
// 不健康,需要重连 - 先清除缓存的 promise
|
|
283
|
+
server.connectionPromise = undefined;
|
|
284
|
+
await disconnectMcpServer(name);
|
|
285
|
+
}
|
|
286
|
+
// v2.1.9: 如果已有连接 Promise 在进行,复用它
|
|
287
|
+
// 这样多个调用者可以共享同一个连接结果
|
|
288
|
+
if (server.connectionPromise) {
|
|
289
|
+
try {
|
|
290
|
+
return await server.connectionPromise;
|
|
291
|
+
}
|
|
292
|
+
catch {
|
|
293
|
+
// 如果缓存的 promise 失败了,清除它并继续创建新连接
|
|
294
|
+
server.connectionPromise = undefined;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
// 创建新的连接 Promise 并缓存(带超时保护,防止永不 settle)
|
|
298
|
+
// mcp-remote 需要用户在浏览器做 OAuth,超时设为 5 分钟
|
|
299
|
+
const isMcpRemote = (server.config.args || []).some((arg) => arg === 'mcp-remote');
|
|
300
|
+
const CONNECTION_TIMEOUT = isMcpRemote ? MCP_REMOTE_TIMEOUT + 30000 : 120000;
|
|
301
|
+
let timeoutId;
|
|
302
|
+
server.connectionPromise = Promise.race([
|
|
303
|
+
doConnect(name, server, retry),
|
|
304
|
+
new Promise((_, reject) => {
|
|
305
|
+
timeoutId = setTimeout(() => reject(new Error(`MCP connection to "${name}" timed out after ${CONNECTION_TIMEOUT}ms`)), CONNECTION_TIMEOUT);
|
|
306
|
+
}),
|
|
307
|
+
]);
|
|
308
|
+
try {
|
|
309
|
+
return await server.connectionPromise;
|
|
310
|
+
}
|
|
311
|
+
finally {
|
|
312
|
+
clearTimeout(timeoutId);
|
|
313
|
+
// 连接完成后清除缓存,允许后续重连
|
|
314
|
+
server.connectionPromise = undefined;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* v2.1.9: 实际执行连接的内部函数
|
|
319
|
+
*/
|
|
320
|
+
async function doConnect(name, server, retry) {
|
|
321
|
+
server.connecting = true;
|
|
322
|
+
server.lastConnectAttempt = Date.now();
|
|
323
|
+
const { config } = server;
|
|
324
|
+
if (config.type === 'stdio' && config.command) {
|
|
325
|
+
let attempt = 0;
|
|
326
|
+
const maxAttempts = retry ? MAX_RECONNECT_ATTEMPTS : 1;
|
|
327
|
+
while (attempt < maxAttempts) {
|
|
328
|
+
try {
|
|
329
|
+
// 如果不是第一次尝试,等待一段时间(指数退避)
|
|
330
|
+
if (attempt > 0) {
|
|
331
|
+
const delay = RECONNECT_DELAY_BASE * Math.pow(2, attempt - 1);
|
|
332
|
+
console.log(`Retrying connection to ${name} in ${delay}ms (attempt ${attempt + 1}/${maxAttempts})...`);
|
|
333
|
+
await sleep(delay);
|
|
334
|
+
}
|
|
335
|
+
// Windows 上需要特殊处理,使用 cmd.exe 启动以避免 Git Bash 兼容性问题
|
|
336
|
+
// Git Bash/MSYS2 环境下无法正确访问 Windows Named Pipes
|
|
337
|
+
let spawnCommand;
|
|
338
|
+
let spawnArgs;
|
|
339
|
+
const isWindows = process.platform === 'win32';
|
|
340
|
+
if (isWindows && config.command !== 'cmd' && config.command !== 'cmd.exe') {
|
|
341
|
+
// 将命令和参数组合成一个完整的命令行
|
|
342
|
+
const fullCommand = [config.command, ...(config.args || [])].join(' ');
|
|
343
|
+
spawnCommand = 'cmd';
|
|
344
|
+
spawnArgs = ['/c', fullCommand];
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
spawnCommand = config.command;
|
|
348
|
+
spawnArgs = config.args || [];
|
|
349
|
+
}
|
|
350
|
+
const proc = spawn(spawnCommand, spawnArgs, {
|
|
351
|
+
env: { ...process.env, ...config.env },
|
|
352
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
353
|
+
shell: isWindows, // Windows 上使用 shell 以确保命令正确解析
|
|
354
|
+
});
|
|
355
|
+
server.process = proc;
|
|
356
|
+
// 防止 EPIPE 等 stdin 错误使进程崩溃
|
|
357
|
+
proc.stdin?.on('error', (err) => {
|
|
358
|
+
if (err.code !== 'EPIPE') {
|
|
359
|
+
console.error(`MCP server ${name} stdin error:`, err);
|
|
360
|
+
}
|
|
361
|
+
});
|
|
362
|
+
// 监听进程错误和退出
|
|
363
|
+
let processExited = false;
|
|
364
|
+
let processError = null;
|
|
365
|
+
proc.on('error', (err) => {
|
|
366
|
+
console.error(`MCP server ${name} process error:`, err);
|
|
367
|
+
processError = err;
|
|
368
|
+
processExited = true;
|
|
369
|
+
server.connected = false;
|
|
370
|
+
server.connecting = false;
|
|
371
|
+
});
|
|
372
|
+
proc.on('exit', (code) => {
|
|
373
|
+
console.log(`MCP server ${name} exited with code ${code}`);
|
|
374
|
+
processExited = true;
|
|
375
|
+
server.connected = false;
|
|
376
|
+
server.connecting = false;
|
|
377
|
+
server.process = undefined;
|
|
378
|
+
});
|
|
379
|
+
// 等待进程启动稳定 - 关键!
|
|
380
|
+
// 如果进程在此期间退出,说明启动失败
|
|
381
|
+
await sleep(500);
|
|
382
|
+
// 检查进程是否已退出
|
|
383
|
+
if (processExited) {
|
|
384
|
+
const errorMsg = processError ? processError.message : 'Process exited during startup';
|
|
385
|
+
console.error(`MCP server ${name} failed to start: ${errorMsg}`);
|
|
386
|
+
continue; // 尝试下一次重试
|
|
387
|
+
}
|
|
388
|
+
// 确保 stdin/stdout 可用
|
|
389
|
+
if (!proc.stdin || !proc.stdout) {
|
|
390
|
+
console.error(`MCP server ${name} stdio not available`);
|
|
391
|
+
proc.kill();
|
|
392
|
+
server.process = undefined;
|
|
393
|
+
continue;
|
|
394
|
+
}
|
|
395
|
+
// 发送初始化消息
|
|
396
|
+
// mcp-remote 需要用户在浏览器完成 OAuth 授权,可能需要几分钟
|
|
397
|
+
const isMcpRemote = (config.args || []).some(arg => arg === 'mcp-remote');
|
|
398
|
+
const initTimeout = isMcpRemote ? MCP_REMOTE_TIMEOUT : MCP_TIMEOUT;
|
|
399
|
+
const initResult = await sendMcpMessage(name, 'initialize', {
|
|
400
|
+
protocolVersion: '2024-11-05',
|
|
401
|
+
capabilities: {},
|
|
402
|
+
clientInfo: {
|
|
403
|
+
name: 'axon',
|
|
404
|
+
version: VERSION,
|
|
405
|
+
},
|
|
406
|
+
}, initTimeout);
|
|
407
|
+
if (initResult) {
|
|
408
|
+
server.connected = true;
|
|
409
|
+
server.connecting = false;
|
|
410
|
+
server.reconnectAttempts = 0;
|
|
411
|
+
const initResponse = initResult;
|
|
412
|
+
server.capabilities = initResponse.capabilities || {};
|
|
413
|
+
// 发送 initialized 通知
|
|
414
|
+
await sendMcpNotification(name, 'notifications/initialized', {});
|
|
415
|
+
// 获取工具列表
|
|
416
|
+
if (server.capabilities.tools) {
|
|
417
|
+
const toolsResult = await sendMcpMessage(name, 'tools/list', {});
|
|
418
|
+
if (toolsResult?.tools) {
|
|
419
|
+
server.tools = toolsResult.tools;
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
// 获取资源列表(使用缓存)
|
|
423
|
+
if (server.capabilities.resources) {
|
|
424
|
+
await refreshResourceCache(name);
|
|
425
|
+
}
|
|
426
|
+
console.log(`Successfully connected to MCP server: ${name}`);
|
|
427
|
+
return true;
|
|
428
|
+
}
|
|
429
|
+
// 初始化失败,清理进程
|
|
430
|
+
if (server.process) {
|
|
431
|
+
server.process.kill();
|
|
432
|
+
server.process = undefined;
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
catch (err) {
|
|
436
|
+
console.error(`Failed to connect to MCP server ${name} (attempt ${attempt + 1}/${maxAttempts}):`, err);
|
|
437
|
+
// 清理失败的进程
|
|
438
|
+
if (server.process) {
|
|
439
|
+
try {
|
|
440
|
+
server.process.kill();
|
|
441
|
+
}
|
|
442
|
+
catch { }
|
|
443
|
+
server.process = undefined;
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
attempt++;
|
|
447
|
+
server.reconnectAttempts = attempt;
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
server.connecting = false;
|
|
451
|
+
// 所有重试均失败,标记为永久失败,避免后续继续重试
|
|
452
|
+
server.permanentlyFailed = true;
|
|
453
|
+
return false;
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* 刷新资源缓存
|
|
457
|
+
*/
|
|
458
|
+
async function refreshResourceCache(name) {
|
|
459
|
+
const server = mcpServers.get(name);
|
|
460
|
+
if (!server)
|
|
461
|
+
return false;
|
|
462
|
+
try {
|
|
463
|
+
const resourcesResult = await sendMcpMessage(name, 'resources/list', {});
|
|
464
|
+
if (resourcesResult?.resources) {
|
|
465
|
+
server.resources = resourcesResult.resources;
|
|
466
|
+
server.resourcesCache = {
|
|
467
|
+
data: resourcesResult.resources,
|
|
468
|
+
timestamp: Date.now(),
|
|
469
|
+
};
|
|
470
|
+
return true;
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
catch (err) {
|
|
474
|
+
console.error(`Failed to refresh resource cache for ${name}:`, err);
|
|
475
|
+
}
|
|
476
|
+
return false;
|
|
477
|
+
}
|
|
478
|
+
/**
|
|
479
|
+
* 获取资源列表(带缓存)
|
|
480
|
+
*/
|
|
481
|
+
async function getResources(name, forceRefresh = false) {
|
|
482
|
+
const server = mcpServers.get(name);
|
|
483
|
+
if (!server)
|
|
484
|
+
return [];
|
|
485
|
+
// 检查缓存是否有效
|
|
486
|
+
if (!forceRefresh && server.resourcesCache) {
|
|
487
|
+
const cacheAge = Date.now() - server.resourcesCache.timestamp;
|
|
488
|
+
if (cacheAge < RESOURCE_CACHE_TTL) {
|
|
489
|
+
return server.resourcesCache.data;
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
// 刷新缓存
|
|
493
|
+
await refreshResourceCache(name);
|
|
494
|
+
return server.resources;
|
|
495
|
+
}
|
|
496
|
+
/**
|
|
497
|
+
* 发送 MCP 消息并等待响应(带重试机制)
|
|
498
|
+
*/
|
|
499
|
+
async function sendMcpMessage(serverName, method, params, timeout = MCP_TIMEOUT, retries = 1 // 减少重试次数,让失败更快返回
|
|
500
|
+
) {
|
|
501
|
+
const server = mcpServers.get(serverName);
|
|
502
|
+
if (!server?.process?.stdin || !server.process.stdout) {
|
|
503
|
+
return null;
|
|
504
|
+
}
|
|
505
|
+
let lastError = null;
|
|
506
|
+
for (let attempt = 0; attempt <= retries; attempt++) {
|
|
507
|
+
try {
|
|
508
|
+
// 每次尝试前检查进程状态
|
|
509
|
+
if (!server?.process?.stdin || !server.process.stdout) {
|
|
510
|
+
// 尝试重新连接
|
|
511
|
+
const reconnected = await connectMcpServer(serverName);
|
|
512
|
+
if (!reconnected || !server?.process?.stdin || !server.process.stdout) {
|
|
513
|
+
throw new Error(t('mcp.serverNotConnected', { name: serverName }));
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
const id = messageId++;
|
|
517
|
+
const message = {
|
|
518
|
+
jsonrpc: '2.0',
|
|
519
|
+
id,
|
|
520
|
+
method,
|
|
521
|
+
params,
|
|
522
|
+
};
|
|
523
|
+
const result = await new Promise((resolve, reject) => {
|
|
524
|
+
const timeoutHandle = setTimeout(() => {
|
|
525
|
+
reject(new Error(`Timeout waiting for response to ${method}`));
|
|
526
|
+
}, timeout);
|
|
527
|
+
// 再次检查,因为可能在等待期间断开
|
|
528
|
+
if (!server.process?.stdout) {
|
|
529
|
+
clearTimeout(timeoutHandle);
|
|
530
|
+
reject(new Error(`MCP server ${serverName} disconnected`));
|
|
531
|
+
return;
|
|
532
|
+
}
|
|
533
|
+
// 缓冲区:TCP 可能将一条大 JSON 分成多个 chunk 传输
|
|
534
|
+
let buffer = '';
|
|
535
|
+
const onData = (data) => {
|
|
536
|
+
buffer += data.toString();
|
|
537
|
+
// 按换行符分割,最后一段可能不完整
|
|
538
|
+
const parts = buffer.split('\n');
|
|
539
|
+
buffer = parts.pop() || ''; // 保留最后不完整的部分
|
|
540
|
+
for (const line of parts) {
|
|
541
|
+
const trimmed = line.trim();
|
|
542
|
+
if (!trimmed)
|
|
543
|
+
continue;
|
|
544
|
+
try {
|
|
545
|
+
const response = JSON.parse(trimmed);
|
|
546
|
+
if (response.id === id) {
|
|
547
|
+
clearTimeout(timeoutHandle);
|
|
548
|
+
server.process?.stdout?.removeListener('data', onData);
|
|
549
|
+
if (response.error) {
|
|
550
|
+
reject(new Error(response.error.message));
|
|
551
|
+
}
|
|
552
|
+
else {
|
|
553
|
+
resolve(response.result);
|
|
554
|
+
}
|
|
555
|
+
return;
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
catch (err) {
|
|
559
|
+
// 不是有效 JSON,忽略(可能是 stderr 混入或其他非 JSON 输出)
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
};
|
|
563
|
+
server.process.stdout.on('data', onData);
|
|
564
|
+
try {
|
|
565
|
+
if (!server.process?.stdin || !server.process.stdin.writable) {
|
|
566
|
+
clearTimeout(timeoutHandle);
|
|
567
|
+
server.process?.stdout?.removeListener('data', onData);
|
|
568
|
+
reject(new Error(`MCP server ${serverName} stdin not available`));
|
|
569
|
+
return;
|
|
570
|
+
}
|
|
571
|
+
server.process.stdin.write(JSON.stringify(message) + '\n');
|
|
572
|
+
}
|
|
573
|
+
catch (err) {
|
|
574
|
+
clearTimeout(timeoutHandle);
|
|
575
|
+
server.process?.stdout?.removeListener('data', onData);
|
|
576
|
+
reject(err);
|
|
577
|
+
}
|
|
578
|
+
});
|
|
579
|
+
return result;
|
|
580
|
+
}
|
|
581
|
+
catch (err) {
|
|
582
|
+
lastError = err;
|
|
583
|
+
console.error(`MCP message ${method} failed (attempt ${attempt + 1}/${retries + 1}):`, err);
|
|
584
|
+
// 如果不是最后一次尝试,等待一小段时间再重试
|
|
585
|
+
if (attempt < retries) {
|
|
586
|
+
await sleep(500 * Math.pow(2, attempt));
|
|
587
|
+
}
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
// 所有重试都失败了
|
|
591
|
+
if (lastError) {
|
|
592
|
+
console.error(`All retries failed for MCP message ${method}:`, lastError);
|
|
593
|
+
}
|
|
594
|
+
return null;
|
|
595
|
+
}
|
|
596
|
+
/**
|
|
597
|
+
* 发送 MCP 通知(无响应)
|
|
598
|
+
*/
|
|
599
|
+
async function sendMcpNotification(serverName, method, params) {
|
|
600
|
+
const server = mcpServers.get(serverName);
|
|
601
|
+
if (!server?.process?.stdin) {
|
|
602
|
+
return;
|
|
603
|
+
}
|
|
604
|
+
const message = {
|
|
605
|
+
jsonrpc: '2.0',
|
|
606
|
+
method,
|
|
607
|
+
params,
|
|
608
|
+
};
|
|
609
|
+
server.process.stdin.write(JSON.stringify(message) + '\n');
|
|
610
|
+
}
|
|
611
|
+
/**
|
|
612
|
+
* 调用 MCP 工具(带重试和错误处理)
|
|
613
|
+
*/
|
|
614
|
+
export async function callMcpTool(serverName, toolName, args) {
|
|
615
|
+
const server = mcpServers.get(serverName);
|
|
616
|
+
if (!server) {
|
|
617
|
+
return {
|
|
618
|
+
success: false,
|
|
619
|
+
error: t('mcp.serverNotFound', { name: serverName, available: Array.from(mcpServers.keys()).join(', ') || 'none' })
|
|
620
|
+
};
|
|
621
|
+
}
|
|
622
|
+
// 确保连接
|
|
623
|
+
if (!server.connected) {
|
|
624
|
+
const connected = await connectMcpServer(serverName);
|
|
625
|
+
if (!connected) {
|
|
626
|
+
return {
|
|
627
|
+
success: false,
|
|
628
|
+
error: t('mcp.connectFailed', { name: serverName })
|
|
629
|
+
};
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
// 检查服务器是否支持工具
|
|
633
|
+
if (!server.capabilities.tools) {
|
|
634
|
+
return {
|
|
635
|
+
success: false,
|
|
636
|
+
error: t('mcp.noToolSupport', { name: serverName })
|
|
637
|
+
};
|
|
638
|
+
}
|
|
639
|
+
// 验证工具是否存在
|
|
640
|
+
const toolExists = server.tools.some((tt) => tt.name === toolName);
|
|
641
|
+
if (!toolExists) {
|
|
642
|
+
return {
|
|
643
|
+
success: false,
|
|
644
|
+
error: t('mcp.toolNotFound', { name: toolName, available: server.tools.map((tt) => tt.name).join(', ') || 'none' })
|
|
645
|
+
};
|
|
646
|
+
}
|
|
647
|
+
try {
|
|
648
|
+
// 调用工具,带重试
|
|
649
|
+
const result = await sendMcpMessage(serverName, 'tools/call', {
|
|
650
|
+
name: toolName,
|
|
651
|
+
arguments: args,
|
|
652
|
+
});
|
|
653
|
+
if (!result) {
|
|
654
|
+
return {
|
|
655
|
+
success: false,
|
|
656
|
+
error: t('mcp.toolCallFailed', { tool: toolName })
|
|
657
|
+
};
|
|
658
|
+
}
|
|
659
|
+
// 解析结果
|
|
660
|
+
const content = result.content;
|
|
661
|
+
let output;
|
|
662
|
+
if (content && Array.isArray(content)) {
|
|
663
|
+
const textContent = content
|
|
664
|
+
.filter((c) => c.type === 'text')
|
|
665
|
+
.map((c) => c.text || '')
|
|
666
|
+
.join('\n');
|
|
667
|
+
output = textContent || JSON.stringify(result);
|
|
668
|
+
}
|
|
669
|
+
else {
|
|
670
|
+
output = JSON.stringify(result, null, 2);
|
|
671
|
+
}
|
|
672
|
+
// 使用统一的输出持久化机制(MCP 工具特殊处理:基于 token 限制)
|
|
673
|
+
const maxTokens = MAX_MCP_OUTPUT_TOKENS();
|
|
674
|
+
const maxChars = maxTokens * 4; // 大约 4 字符/token
|
|
675
|
+
const persistResult = persistLargeOutputSync(output, {
|
|
676
|
+
toolName: 'MCP',
|
|
677
|
+
maxLength: maxChars,
|
|
678
|
+
});
|
|
679
|
+
return { success: true, output: persistResult.content };
|
|
680
|
+
}
|
|
681
|
+
catch (err) {
|
|
682
|
+
return {
|
|
683
|
+
success: false,
|
|
684
|
+
error: t('mcp.callError', { error: err instanceof Error ? err.message : 'Unknown error' })
|
|
685
|
+
};
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
/**
|
|
689
|
+
* 断开所有 MCP 服务器
|
|
690
|
+
*/
|
|
691
|
+
export async function disconnectAllMcpServers() {
|
|
692
|
+
for (const name of mcpServers.keys()) {
|
|
693
|
+
await disconnectMcpServer(name);
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
/**
|
|
697
|
+
* 获取服务器连接状态
|
|
698
|
+
*/
|
|
699
|
+
export function getServerStatus(name) {
|
|
700
|
+
const server = mcpServers.get(name);
|
|
701
|
+
if (!server)
|
|
702
|
+
return null;
|
|
703
|
+
return {
|
|
704
|
+
connected: server.connected,
|
|
705
|
+
connecting: server.connecting,
|
|
706
|
+
capabilities: Object.keys(server.capabilities).filter((k) => server.capabilities[k]),
|
|
707
|
+
toolCount: server.tools.length,
|
|
708
|
+
resourceCount: server.resources.length,
|
|
709
|
+
lastConnectAttempt: server.lastConnectAttempt,
|
|
710
|
+
reconnectAttempts: server.reconnectAttempts,
|
|
711
|
+
};
|
|
712
|
+
}
|
|
713
|
+
// ============ MCP Tool Search 自动模式常量(v2.1.7) ============
|
|
714
|
+
/**
|
|
715
|
+
* MCP 工具描述阈值百分比(对齐官方 heB 常量)
|
|
716
|
+
* 当 MCP 工具描述的字符数超过上下文窗口的 10% 时,启用延迟加载模式
|
|
717
|
+
*/
|
|
718
|
+
const MCP_TOOL_THRESHOLD_PERCENT = 0.1; // 10%
|
|
719
|
+
/**
|
|
720
|
+
* 阈值乘数(对齐官方 At8 常量)
|
|
721
|
+
* 实际阈值 = contextWindowSize * MCP_TOOL_THRESHOLD_PERCENT * MCP_THRESHOLD_MULTIPLIER
|
|
722
|
+
* = contextWindowSize * 0.1 * 2.5 = contextWindowSize * 0.25 (25%)
|
|
723
|
+
*/
|
|
724
|
+
const MCP_THRESHOLD_MULTIPLIER = 2.5;
|
|
725
|
+
/**
|
|
726
|
+
* 默认上下文窗口大小(tokens)
|
|
727
|
+
* 对齐官方 VT9 常量
|
|
728
|
+
*/
|
|
729
|
+
const DEFAULT_CONTEXT_WINDOW = 200000;
|
|
730
|
+
/**
|
|
731
|
+
* 1M 上下文窗口大小
|
|
732
|
+
*/
|
|
733
|
+
const LARGE_CONTEXT_WINDOW = 1000000;
|
|
734
|
+
/**
|
|
735
|
+
* 不支持 tool_reference 的模型列表(对齐官方 Bt8 常量)
|
|
736
|
+
* 这些模型不支持延迟加载模式
|
|
737
|
+
*/
|
|
738
|
+
const TOOL_SEARCH_UNSUPPORTED_MODELS = ['haiku'];
|
|
739
|
+
/**
|
|
740
|
+
* 获取上下文窗口大小(字符数)
|
|
741
|
+
* 对齐官方 Jq 函数
|
|
742
|
+
* @param model 模型名称
|
|
743
|
+
* @param betas Beta 功能列表(可选)
|
|
744
|
+
* @returns 上下文窗口大小(tokens)
|
|
745
|
+
*/
|
|
746
|
+
export function getContextWindowSize(model, betas) {
|
|
747
|
+
// 检查是否是 1M 模型
|
|
748
|
+
if (model.includes('[1m]') || (betas?.includes('max-tokens-1m') && model.includes('claude-sonnet-4-5'))) {
|
|
749
|
+
return LARGE_CONTEXT_WINDOW;
|
|
750
|
+
}
|
|
751
|
+
return DEFAULT_CONTEXT_WINDOW;
|
|
752
|
+
}
|
|
753
|
+
/**
|
|
754
|
+
* 获取自动工具搜索阈值(字符数)
|
|
755
|
+
* 对齐官方 geB 函数
|
|
756
|
+
* @param model 模型名称
|
|
757
|
+
* @returns 阈值(字符数)
|
|
758
|
+
*/
|
|
759
|
+
export function getAutoToolSearchCharThreshold(model) {
|
|
760
|
+
const contextWindow = getContextWindowSize(model);
|
|
761
|
+
// 阈值 = 上下文窗口 * 10% * 2.5 = 上下文窗口 * 25%
|
|
762
|
+
return Math.floor(contextWindow * MCP_TOOL_THRESHOLD_PERCENT * MCP_THRESHOLD_MULTIPLIER);
|
|
763
|
+
}
|
|
764
|
+
/**
|
|
765
|
+
* 获取 MCP 模式(对齐官方 Qt8 / k9A 函数)
|
|
766
|
+
* @returns MCP 模式
|
|
767
|
+
*/
|
|
768
|
+
export function getMcpMode() {
|
|
769
|
+
// 环境变量控制
|
|
770
|
+
if (process.env.ENABLE_TOOL_SEARCH === 'auto') {
|
|
771
|
+
return 'tst-auto';
|
|
772
|
+
}
|
|
773
|
+
if (process.env.ENABLE_TOOL_SEARCH === '1' || process.env.ENABLE_TOOL_SEARCH === 'true') {
|
|
774
|
+
return 'tst';
|
|
775
|
+
}
|
|
776
|
+
if (process.env.ENABLE_MCP_CLI === '1' || process.env.ENABLE_MCP_CLI === 'true') {
|
|
777
|
+
return 'mcp-cli';
|
|
778
|
+
}
|
|
779
|
+
if (process.env.ENABLE_MCP_CLI === '0' || process.env.ENABLE_MCP_CLI === 'false') {
|
|
780
|
+
return 'standard';
|
|
781
|
+
}
|
|
782
|
+
if (process.env.ENABLE_TOOL_SEARCH === '0' || process.env.ENABLE_TOOL_SEARCH === 'false') {
|
|
783
|
+
return 'standard';
|
|
784
|
+
}
|
|
785
|
+
// 默认使用自动模式
|
|
786
|
+
return 'tst-auto';
|
|
787
|
+
}
|
|
788
|
+
/**
|
|
789
|
+
* 检查模型是否支持 tool_reference 块
|
|
790
|
+
* 对齐官方 ueB 函数
|
|
791
|
+
* @param model 模型名称
|
|
792
|
+
* @returns 是否支持
|
|
793
|
+
*/
|
|
794
|
+
export function modelSupportsToolReference(model) {
|
|
795
|
+
const modelLower = model.toLowerCase();
|
|
796
|
+
for (const unsupported of TOOL_SEARCH_UNSUPPORTED_MODELS) {
|
|
797
|
+
if (modelLower.includes(unsupported.toLowerCase())) {
|
|
798
|
+
return false;
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
return true;
|
|
802
|
+
}
|
|
803
|
+
/**
|
|
804
|
+
* v2.1.70: 检查是否使用第三方 API 网关(非 Anthropic 官方端点)
|
|
805
|
+
* 第三方网关不支持 tool_reference blocks,需要禁用 tool search
|
|
806
|
+
*/
|
|
807
|
+
export function isThirdPartyApiEndpoint() {
|
|
808
|
+
const baseUrl = process.env.ANTHROPIC_BASE_URL || process.env.AXON_BASE_URL || '';
|
|
809
|
+
if (!baseUrl)
|
|
810
|
+
return false;
|
|
811
|
+
return !baseUrl.includes('api.anthropic.com') && !baseUrl.includes('anthropic.com');
|
|
812
|
+
}
|
|
813
|
+
/**
|
|
814
|
+
* 检查 MCPSearch 工具是否可用
|
|
815
|
+
* 对齐官方 meB 函数
|
|
816
|
+
* @param tools 工具列表
|
|
817
|
+
* @returns 是否可用
|
|
818
|
+
*/
|
|
819
|
+
export function isMcpSearchToolAvailable(tools) {
|
|
820
|
+
return tools.some((t) => t.name === 'Mcp');
|
|
821
|
+
}
|
|
822
|
+
/**
|
|
823
|
+
* 计算所有 MCP 工具描述的字符数
|
|
824
|
+
* 对齐官方 Zt8 函数
|
|
825
|
+
* @returns 总字符数
|
|
826
|
+
*/
|
|
827
|
+
export function calculateMcpToolDescriptionChars() {
|
|
828
|
+
let totalChars = 0;
|
|
829
|
+
for (const server of mcpServers.values()) {
|
|
830
|
+
for (const tool of server.tools) {
|
|
831
|
+
// 计算工具描述的字符数
|
|
832
|
+
// 官方实现调用 tool.prompt(),这里简化为使用 description
|
|
833
|
+
const description = tool.description || '';
|
|
834
|
+
const inputSchemaStr = JSON.stringify(tool.inputSchema || {});
|
|
835
|
+
// 估算完整的工具 prompt 大小
|
|
836
|
+
// 包括:工具名、描述、输入 schema
|
|
837
|
+
const fullToolPrompt = `${tool.name}\n${description}\n${inputSchemaStr}`;
|
|
838
|
+
totalChars += fullToolPrompt.length;
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
return totalChars;
|
|
842
|
+
}
|
|
843
|
+
/**
|
|
844
|
+
* 判断是否应该启用 MCP 工具搜索(延迟加载)
|
|
845
|
+
* 对齐官方 RZ0 / isToolSearchEnabled 函数
|
|
846
|
+
*
|
|
847
|
+
* 逻辑:
|
|
848
|
+
* 1. 检查模型是否支持 tool_reference 块
|
|
849
|
+
* 2. 检查 MCPSearch 工具是否可用
|
|
850
|
+
* 3. 根据 MCP 模式决定:
|
|
851
|
+
* - tst: 强制启用
|
|
852
|
+
* - tst-auto: 自动判断(MCP 工具描述超过阈值时启用)
|
|
853
|
+
* - mcp-cli/standard: 不启用
|
|
854
|
+
*
|
|
855
|
+
* @param model 模型名称
|
|
856
|
+
* @param tools 工具列表
|
|
857
|
+
* @returns 是否启用延迟加载
|
|
858
|
+
*/
|
|
859
|
+
export function isToolSearchEnabled(model, tools) {
|
|
860
|
+
const mcpToolCount = Array.from(mcpServers.values()).reduce((sum, s) => sum + s.tools.length, 0);
|
|
861
|
+
// v2.1.70: 第三方 API 网关不支持 tool_reference blocks
|
|
862
|
+
if (isThirdPartyApiEndpoint()) {
|
|
863
|
+
if (process.env.DEBUG) {
|
|
864
|
+
console.log('[MCP] Tool search disabled: third-party API endpoint detected (ANTHROPIC_BASE_URL).');
|
|
865
|
+
}
|
|
866
|
+
return false;
|
|
867
|
+
}
|
|
868
|
+
// 1. 检查模型是否支持 tool_reference 块
|
|
869
|
+
if (!modelSupportsToolReference(model)) {
|
|
870
|
+
if (process.env.DEBUG) {
|
|
871
|
+
console.log(`[MCP] Tool search disabled for model '${model}': model does not support tool_reference blocks.`);
|
|
872
|
+
}
|
|
873
|
+
return false;
|
|
874
|
+
}
|
|
875
|
+
// 2. 检查 Mcp 工具是否可用
|
|
876
|
+
if (!isMcpSearchToolAvailable(tools)) {
|
|
877
|
+
if (process.env.DEBUG) {
|
|
878
|
+
console.log('[MCP] Tool search disabled: Mcp tool is not available (may have been disallowed via disallowedTools).');
|
|
879
|
+
}
|
|
880
|
+
return false;
|
|
881
|
+
}
|
|
882
|
+
// 3. 根据 MCP 模式决定
|
|
883
|
+
const mode = getMcpMode();
|
|
884
|
+
switch (mode) {
|
|
885
|
+
case 'tst':
|
|
886
|
+
// 强制启用
|
|
887
|
+
if (process.env.DEBUG) {
|
|
888
|
+
console.log(`[MCP] Tool search enabled (tst mode), mcpToolCount=${mcpToolCount}`);
|
|
889
|
+
}
|
|
890
|
+
return true;
|
|
891
|
+
case 'tst-auto': {
|
|
892
|
+
// 自动判断:计算 MCP 工具描述总字符数
|
|
893
|
+
const mcpToolDescriptionChars = calculateMcpToolDescriptionChars();
|
|
894
|
+
const threshold = getAutoToolSearchCharThreshold(model);
|
|
895
|
+
const mcpOverThreshold = mcpToolDescriptionChars >= threshold;
|
|
896
|
+
// 对齐官方 tengu_tst_kx7:即使 MCP 描述未达阈值,
|
|
897
|
+
// 只要有内置 deferred 工具就启用 ToolSearch
|
|
898
|
+
const hasBuiltinDeferred = tools.some(t => t.shouldDefer === true);
|
|
899
|
+
const enabled = mcpOverThreshold || hasBuiltinDeferred;
|
|
900
|
+
if (process.env.DEBUG) {
|
|
901
|
+
console.log(`[MCP] Auto tool search ${enabled ? 'enabled' : 'disabled'}: mcpChars=${mcpToolDescriptionChars} (threshold: ${threshold}), hasBuiltinDeferred=${hasBuiltinDeferred}`);
|
|
902
|
+
}
|
|
903
|
+
return enabled;
|
|
904
|
+
}
|
|
905
|
+
case 'mcp-cli':
|
|
906
|
+
case 'standard':
|
|
907
|
+
// 不启用
|
|
908
|
+
if (process.env.DEBUG) {
|
|
909
|
+
console.log(`[MCP] Tool search disabled (${mode} mode)`);
|
|
910
|
+
}
|
|
911
|
+
return false;
|
|
912
|
+
}
|
|
913
|
+
}
|
|
914
|
+
/**
|
|
915
|
+
* 乐观检查是否启用工具搜索(不进行实际计算)
|
|
916
|
+
* 对齐官方 Zd / isToolSearchEnabledOptimistic 函数
|
|
917
|
+
* @returns 是否可能启用
|
|
918
|
+
*/
|
|
919
|
+
export function isToolSearchEnabledOptimistic() {
|
|
920
|
+
const mode = getMcpMode();
|
|
921
|
+
switch (mode) {
|
|
922
|
+
case 'tst':
|
|
923
|
+
case 'tst-auto':
|
|
924
|
+
return true;
|
|
925
|
+
case 'mcp-cli':
|
|
926
|
+
case 'standard':
|
|
927
|
+
return false;
|
|
928
|
+
}
|
|
929
|
+
}
|
|
930
|
+
/**
|
|
931
|
+
* 生成 MCPSearch 工具的动态描述(对齐官方 F9A 函数)
|
|
932
|
+
* 包含所有可用的 MCP 工具列表
|
|
933
|
+
* @param tools MCP 工具列表
|
|
934
|
+
* @returns 描述字符串
|
|
935
|
+
*/
|
|
936
|
+
export function generateMcpSearchDescription(tools) {
|
|
937
|
+
const baseDescription = `Search for or select MCP tools to make them available for use.
|
|
938
|
+
|
|
939
|
+
**MANDATORY PREREQUISITE - THIS IS A HARD REQUIREMENT**
|
|
940
|
+
|
|
941
|
+
You MUST use this tool to load MCP tools BEFORE calling them directly.
|
|
942
|
+
|
|
943
|
+
This is a BLOCKING REQUIREMENT - MCP tools listed below are NOT available until you load them using this tool.
|
|
944
|
+
|
|
945
|
+
**Why this is non-negotiable:**
|
|
946
|
+
- MCP tools are deferred and not loaded until discovered via this tool
|
|
947
|
+
- Calling an MCP tool without first loading it will fail
|
|
948
|
+
|
|
949
|
+
**Query modes:**
|
|
950
|
+
|
|
951
|
+
1. **Direct selection** - Use \`select:<tool_name>\` when you know exactly which tool you need:
|
|
952
|
+
- "select:mcp__slack__read_channel"
|
|
953
|
+
- "select:mcp__filesystem__list_directory"
|
|
954
|
+
- Returns just that tool if it exists
|
|
955
|
+
|
|
956
|
+
2. **Keyword search** - Use keywords when you're unsure which tool to use:
|
|
957
|
+
- "list directory" - find tools for listing directories
|
|
958
|
+
- "read file" - find tools for reading files
|
|
959
|
+
- "slack message" - find slack messaging tools
|
|
960
|
+
- Returns up to 5 matching tools ranked by relevance
|
|
961
|
+
|
|
962
|
+
**CORRECT Usage Patterns:**
|
|
963
|
+
|
|
964
|
+
<example>
|
|
965
|
+
User: List files in the src directory
|
|
966
|
+
Assistant: I can see mcp__filesystem__list_directory in the available tools. Let me select it.
|
|
967
|
+
[Calls MCPSearch with query: "select:mcp__filesystem__list_directory"]
|
|
968
|
+
[Calls the MCP tool]
|
|
969
|
+
</example>
|
|
970
|
+
|
|
971
|
+
<example>
|
|
972
|
+
User: I need to work with slack somehow
|
|
973
|
+
Assistant: Let me search for slack tools.
|
|
974
|
+
[Calls MCPSearch with query: "slack"]
|
|
975
|
+
Assistant: Found several options including mcp__slack__read_channel.
|
|
976
|
+
[Calls the MCP tool]
|
|
977
|
+
</example>
|
|
978
|
+
|
|
979
|
+
**INCORRECT Usage Pattern - NEVER DO THIS:**
|
|
980
|
+
|
|
981
|
+
<bad-example>
|
|
982
|
+
User: Read my slack messages
|
|
983
|
+
Assistant: [Directly calls mcp__slack__read_channel without loading it first]
|
|
984
|
+
WRONG - You must load the tool FIRST using this tool
|
|
985
|
+
</bad-example>`;
|
|
986
|
+
// 如果有 MCP 工具,添加可用工具列表
|
|
987
|
+
if (tools.length > 0) {
|
|
988
|
+
const toolList = tools.map((t) => t.name).join('\n');
|
|
989
|
+
return `${baseDescription}
|
|
990
|
+
|
|
991
|
+
Available MCP tools (must be loaded before use):
|
|
992
|
+
${toolList}`;
|
|
993
|
+
}
|
|
994
|
+
return baseDescription;
|
|
995
|
+
}
|
|
996
|
+
// ============ MCP Search 工具 ============
|
|
997
|
+
/**
|
|
998
|
+
* MCP工具搜索工具 - 用于查找和加载MCP工具
|
|
999
|
+
* 这是官方强制要求的工具,必须在调用MCP工具前使用
|
|
1000
|
+
*/
|
|
1001
|
+
export class MCPSearchTool extends BaseTool {
|
|
1002
|
+
name = 'Mcp';
|
|
1003
|
+
/**
|
|
1004
|
+
* 已配置但被禁用的 MCP 服务器名称列表
|
|
1005
|
+
* 由外部(conversation.ts)在初始化和状态变更时更新
|
|
1006
|
+
* 当搜索无结果时用于提示用户可以启用哪些服务器
|
|
1007
|
+
*/
|
|
1008
|
+
static disabledServers = [];
|
|
1009
|
+
/**
|
|
1010
|
+
* MCP 服务器能力摘要缓存
|
|
1011
|
+
* key: server name, value: 一行描述(从工具名称自动生成)
|
|
1012
|
+
* 首次连接成功后缓存,disable 后保留,使 AI 知道 disabled server 能做什么
|
|
1013
|
+
*/
|
|
1014
|
+
static serverCapabilitySummaries = new Map();
|
|
1015
|
+
/**
|
|
1016
|
+
* 内置 deferred 工具定义列表
|
|
1017
|
+
* 由 ConversationLoop 初始化时注入,用于搜索内置 deferred 工具
|
|
1018
|
+
*/
|
|
1019
|
+
static builtinDeferredTools = [];
|
|
1020
|
+
// 静态描述(不包含工具列表)
|
|
1021
|
+
static baseDescription = `Search for or select MCP tools to make them available for use.
|
|
1022
|
+
|
|
1023
|
+
**MANDATORY PREREQUISITE - THIS IS A HARD REQUIREMENT**
|
|
1024
|
+
|
|
1025
|
+
You MUST use this tool to load MCP tools BEFORE calling them directly.
|
|
1026
|
+
|
|
1027
|
+
This is a BLOCKING REQUIREMENT - MCP tools listed below are NOT available until you load them using this tool.
|
|
1028
|
+
|
|
1029
|
+
**Why this is non-negotiable:**
|
|
1030
|
+
- MCP tools are deferred and not loaded until discovered via this tool
|
|
1031
|
+
- Calling an MCP tool without first loading it will fail
|
|
1032
|
+
|
|
1033
|
+
**Query modes:**
|
|
1034
|
+
|
|
1035
|
+
1. **Direct selection** - Use \`select:<tool_name>\` when you know exactly which tool you need:
|
|
1036
|
+
- "select:mcp__slack__read_channel"
|
|
1037
|
+
- "select:mcp__filesystem__list_directory"
|
|
1038
|
+
- Returns just that tool if it exists
|
|
1039
|
+
|
|
1040
|
+
2. **Keyword search** - Use keywords when you're unsure which tool to use:
|
|
1041
|
+
- "list directory" - find tools for listing directories
|
|
1042
|
+
- "read file" - find tools for reading files
|
|
1043
|
+
- "slack message" - find slack messaging tools
|
|
1044
|
+
- Returns up to 5 matching tools ranked by relevance
|
|
1045
|
+
|
|
1046
|
+
**CORRECT Usage Patterns:**
|
|
1047
|
+
|
|
1048
|
+
<example>
|
|
1049
|
+
User: List files in the src directory
|
|
1050
|
+
Assistant: I can see mcp__filesystem__list_directory in the available tools. Let me select it.
|
|
1051
|
+
[Calls MCPSearch with query: "select:mcp__filesystem__list_directory"]
|
|
1052
|
+
[Calls the MCP tool]
|
|
1053
|
+
</example>
|
|
1054
|
+
|
|
1055
|
+
<example>
|
|
1056
|
+
User: I need to work with slack somehow
|
|
1057
|
+
Assistant: Let me search for slack tools.
|
|
1058
|
+
[Calls MCPSearch with query: "slack"]
|
|
1059
|
+
Assistant: Found several options including mcp__slack__read_channel.
|
|
1060
|
+
[Calls the MCP tool]
|
|
1061
|
+
</example>
|
|
1062
|
+
|
|
1063
|
+
**INCORRECT Usage Pattern - NEVER DO THIS:**
|
|
1064
|
+
|
|
1065
|
+
<bad-example>
|
|
1066
|
+
User: Read my slack messages
|
|
1067
|
+
Assistant: [Directly calls mcp__slack__read_channel without loading it first]
|
|
1068
|
+
WRONG - You must load the tool FIRST using this tool
|
|
1069
|
+
</bad-example>
|
|
1070
|
+
|
|
1071
|
+
**MCP Server Management:**
|
|
1072
|
+
|
|
1073
|
+
Use the \`action\` parameter to manage MCP server lifecycle:
|
|
1074
|
+
- \`action: "list"\` - Show all configured MCP servers with their status (enabled/disabled), type, and tool count
|
|
1075
|
+
- \`action: "enable", name: "server-name"\` - Enable a disabled MCP server to access its tools
|
|
1076
|
+
- \`action: "disable", name: "server-name"\` - Disable an enabled MCP server
|
|
1077
|
+
|
|
1078
|
+
IMPORTANT: After you finish using an MCP server's tools, you MUST disable it to prevent polluting other parallel sessions. Follow the pattern: enable -> use tools -> disable.`;
|
|
1079
|
+
/**
|
|
1080
|
+
* 获取动态描述(包含可用工具列表)
|
|
1081
|
+
*/
|
|
1082
|
+
get description() {
|
|
1083
|
+
// 生成可用工具列表
|
|
1084
|
+
const tools = [];
|
|
1085
|
+
for (const [serverName, server] of mcpServers) {
|
|
1086
|
+
for (const tool of server.tools) {
|
|
1087
|
+
tools.push(`mcp__${serverName}__${tool.name}`);
|
|
1088
|
+
}
|
|
1089
|
+
}
|
|
1090
|
+
const disabled = MCPSearchTool.disabledServers;
|
|
1091
|
+
const disabledHint = disabled.length > 0
|
|
1092
|
+
? `\n\nDisabled MCP servers (use action="enable" to enable):\n${disabled.map(name => {
|
|
1093
|
+
const summary = MCPSearchTool.serverCapabilitySummaries.get(name);
|
|
1094
|
+
return summary ? `${name} — ${summary}` : name;
|
|
1095
|
+
}).join('\n')}`
|
|
1096
|
+
: '';
|
|
1097
|
+
if (tools.length > 0) {
|
|
1098
|
+
return `${MCPSearchTool.baseDescription}
|
|
1099
|
+
|
|
1100
|
+
Available MCP tools (must be loaded before use):
|
|
1101
|
+
${tools.join('\n')}${disabledHint}`;
|
|
1102
|
+
}
|
|
1103
|
+
if (disabledHint) {
|
|
1104
|
+
return `${MCPSearchTool.baseDescription}${disabledHint}`;
|
|
1105
|
+
}
|
|
1106
|
+
return MCPSearchTool.baseDescription;
|
|
1107
|
+
}
|
|
1108
|
+
getInputSchema() {
|
|
1109
|
+
return {
|
|
1110
|
+
type: 'object',
|
|
1111
|
+
properties: {
|
|
1112
|
+
query: {
|
|
1113
|
+
type: 'string',
|
|
1114
|
+
description: 'Query to find MCP tools. Use "select:<tool_name>" for direct selection, or keywords to search.',
|
|
1115
|
+
},
|
|
1116
|
+
max_results: {
|
|
1117
|
+
type: 'number',
|
|
1118
|
+
description: 'Maximum number of results to return (default: 5)',
|
|
1119
|
+
},
|
|
1120
|
+
action: {
|
|
1121
|
+
type: 'string',
|
|
1122
|
+
enum: ['list', 'enable', 'disable'],
|
|
1123
|
+
description: 'Action to perform: list all servers, enable a server, or disable a server. When set, query is not required.',
|
|
1124
|
+
},
|
|
1125
|
+
name: {
|
|
1126
|
+
type: 'string',
|
|
1127
|
+
description: 'MCP server name (required for enable/disable actions).',
|
|
1128
|
+
},
|
|
1129
|
+
},
|
|
1130
|
+
required: [],
|
|
1131
|
+
};
|
|
1132
|
+
}
|
|
1133
|
+
/**
|
|
1134
|
+
* 获取所有可用的MCP工具列表
|
|
1135
|
+
*/
|
|
1136
|
+
getAvailableMcpTools() {
|
|
1137
|
+
const tools = [];
|
|
1138
|
+
for (const [serverName, server] of mcpServers) {
|
|
1139
|
+
for (const tool of server.tools) {
|
|
1140
|
+
tools.push(`mcp__${serverName}__${tool.name}`);
|
|
1141
|
+
}
|
|
1142
|
+
}
|
|
1143
|
+
return tools.join('\n');
|
|
1144
|
+
}
|
|
1145
|
+
/**
|
|
1146
|
+
* 获取禁用服务器的提示信息
|
|
1147
|
+
* 当搜索无结果且有禁用服务器时,提示用户可以用 action=enable 启用
|
|
1148
|
+
*/
|
|
1149
|
+
getDisabledServersHint() {
|
|
1150
|
+
const disabled = MCPSearchTool.disabledServers;
|
|
1151
|
+
if (disabled.length === 0)
|
|
1152
|
+
return '';
|
|
1153
|
+
return `\n\nNote: The following MCP servers are installed but DISABLED. Use the Mcp tool with action="enable" and name="server-name" to activate them:\n${disabled.map(name => {
|
|
1154
|
+
const summary = MCPSearchTool.serverCapabilitySummaries.get(name);
|
|
1155
|
+
return summary ? `- ${name} — ${summary}` : `- ${name}`;
|
|
1156
|
+
}).join('\n')}`;
|
|
1157
|
+
}
|
|
1158
|
+
/**
|
|
1159
|
+
* 从工具列表生成 MCP 服务器能力摘要并缓存
|
|
1160
|
+
* 在服务器首次连接成功后调用
|
|
1161
|
+
*/
|
|
1162
|
+
static cacheServerCapability(serverName, tools) {
|
|
1163
|
+
if (tools.length === 0)
|
|
1164
|
+
return;
|
|
1165
|
+
// 取前 5 个工具名作为能力概览,超过 5 个则加 "+N more"
|
|
1166
|
+
const toolNames = tools.map(t => t.name.replace(/_/g, ' '));
|
|
1167
|
+
const shown = toolNames.slice(0, 5);
|
|
1168
|
+
const suffix = toolNames.length > 5 ? ` +${toolNames.length - 5} more` : '';
|
|
1169
|
+
MCPSearchTool.serverCapabilitySummaries.set(serverName, shown.join(', ') + suffix);
|
|
1170
|
+
}
|
|
1171
|
+
/**
|
|
1172
|
+
* 执行关键词搜索(同时搜索 MCP 工具和内置 deferred 工具)
|
|
1173
|
+
*/
|
|
1174
|
+
async keywordSearch(query, maxResults) {
|
|
1175
|
+
const keywords = query.toLowerCase().split(/\s+/).filter((k) => k.length > 0);
|
|
1176
|
+
const results = [];
|
|
1177
|
+
// 搜索 MCP 工具
|
|
1178
|
+
for (const [serverName, server] of mcpServers) {
|
|
1179
|
+
for (const tool of server.tools) {
|
|
1180
|
+
const fullName = `mcp__${serverName}__${tool.name}`;
|
|
1181
|
+
const searchableName = fullName.toLowerCase().replace(/__/g, ' ');
|
|
1182
|
+
const searchableDesc = tool.description.toLowerCase();
|
|
1183
|
+
let score = 0;
|
|
1184
|
+
for (const keyword of keywords) {
|
|
1185
|
+
if (searchableName === keyword) {
|
|
1186
|
+
score += 10;
|
|
1187
|
+
}
|
|
1188
|
+
else if (searchableName.includes(keyword)) {
|
|
1189
|
+
score += 5;
|
|
1190
|
+
}
|
|
1191
|
+
if (searchableDesc.includes(keyword)) {
|
|
1192
|
+
score += 2;
|
|
1193
|
+
}
|
|
1194
|
+
}
|
|
1195
|
+
if (score > 0) {
|
|
1196
|
+
results.push({ name: fullName, score });
|
|
1197
|
+
}
|
|
1198
|
+
}
|
|
1199
|
+
}
|
|
1200
|
+
// 搜索内置 deferred 工具
|
|
1201
|
+
for (const tool of MCPSearchTool.builtinDeferredTools) {
|
|
1202
|
+
const searchableName = tool.name.toLowerCase();
|
|
1203
|
+
const searchableDesc = tool.description.toLowerCase();
|
|
1204
|
+
const searchableHint = (tool.searchHint || '').toLowerCase();
|
|
1205
|
+
let score = 0;
|
|
1206
|
+
for (const keyword of keywords) {
|
|
1207
|
+
if (searchableName === keyword) {
|
|
1208
|
+
score += 10;
|
|
1209
|
+
}
|
|
1210
|
+
else if (searchableName.includes(keyword)) {
|
|
1211
|
+
score += 5;
|
|
1212
|
+
}
|
|
1213
|
+
if (searchableHint.includes(keyword)) {
|
|
1214
|
+
score += 3;
|
|
1215
|
+
}
|
|
1216
|
+
if (searchableDesc.includes(keyword)) {
|
|
1217
|
+
score += 2;
|
|
1218
|
+
}
|
|
1219
|
+
}
|
|
1220
|
+
if (score > 0) {
|
|
1221
|
+
results.push({ name: tool.name, score });
|
|
1222
|
+
}
|
|
1223
|
+
}
|
|
1224
|
+
// 按分数排序并返回前N个
|
|
1225
|
+
return results
|
|
1226
|
+
.sort((a, b) => b.score - a.score)
|
|
1227
|
+
.slice(0, maxResults)
|
|
1228
|
+
.map((r) => r.name);
|
|
1229
|
+
}
|
|
1230
|
+
async execute(input) {
|
|
1231
|
+
// Handle MCP server management actions (merged from McpManage)
|
|
1232
|
+
if (input.action) {
|
|
1233
|
+
return this.handleManageAction(input.action, input.name);
|
|
1234
|
+
}
|
|
1235
|
+
const { query, max_results = 5 } = input;
|
|
1236
|
+
if (!query) {
|
|
1237
|
+
return {
|
|
1238
|
+
success: false,
|
|
1239
|
+
output: 'Either "query" (for tool search) or "action" (for server management) is required.',
|
|
1240
|
+
matches: [],
|
|
1241
|
+
query: '',
|
|
1242
|
+
total_mcp_tools: 0,
|
|
1243
|
+
};
|
|
1244
|
+
}
|
|
1245
|
+
// 获取所有MCP工具数量
|
|
1246
|
+
let totalMcpTools = 0;
|
|
1247
|
+
for (const server of mcpServers.values()) {
|
|
1248
|
+
totalMcpTools += server.tools.length;
|
|
1249
|
+
}
|
|
1250
|
+
// 检查是否是 select: 语法
|
|
1251
|
+
const selectMatch = query.match(/^select:(.+)$/i);
|
|
1252
|
+
if (selectMatch) {
|
|
1253
|
+
const toolName = selectMatch[1].trim();
|
|
1254
|
+
// 验证工具是否存在(MCP 工具或内置 deferred 工具)
|
|
1255
|
+
let found = false;
|
|
1256
|
+
for (const [serverName, server] of mcpServers) {
|
|
1257
|
+
for (const tool of server.tools) {
|
|
1258
|
+
const fullName = `mcp__${serverName}__${tool.name}`;
|
|
1259
|
+
if (fullName === toolName) {
|
|
1260
|
+
found = true;
|
|
1261
|
+
break;
|
|
1262
|
+
}
|
|
1263
|
+
}
|
|
1264
|
+
if (found)
|
|
1265
|
+
break;
|
|
1266
|
+
}
|
|
1267
|
+
// 也检查内置 deferred 工具
|
|
1268
|
+
if (!found) {
|
|
1269
|
+
found = MCPSearchTool.builtinDeferredTools.some(t => t.name === toolName);
|
|
1270
|
+
}
|
|
1271
|
+
if (!found) {
|
|
1272
|
+
return {
|
|
1273
|
+
success: true,
|
|
1274
|
+
output: `${t('mcp.toolNotFound', { name: toolName, available: '' })}\n\nAvailable tools:\n${this.getAvailableMcpTools()}${this.getDisabledServersHint()}`,
|
|
1275
|
+
matches: [],
|
|
1276
|
+
query,
|
|
1277
|
+
total_mcp_tools: totalMcpTools,
|
|
1278
|
+
};
|
|
1279
|
+
}
|
|
1280
|
+
if (process.env.DEBUG) {
|
|
1281
|
+
const isBuiltin = MCPSearchTool.builtinDeferredTools.some(t => t.name === toolName);
|
|
1282
|
+
console.log(`[Harness] ToolSearch select: ${toolName} (${isBuiltin ? 'builtin-deferred' : 'mcp'})`);
|
|
1283
|
+
}
|
|
1284
|
+
return {
|
|
1285
|
+
success: true,
|
|
1286
|
+
output: t('mcp.toolSelected', { name: toolName }),
|
|
1287
|
+
matches: [toolName],
|
|
1288
|
+
query,
|
|
1289
|
+
total_mcp_tools: totalMcpTools,
|
|
1290
|
+
};
|
|
1291
|
+
}
|
|
1292
|
+
// 关键词搜索
|
|
1293
|
+
const matches = await this.keywordSearch(query, max_results);
|
|
1294
|
+
if (matches.length === 0) {
|
|
1295
|
+
return {
|
|
1296
|
+
success: true,
|
|
1297
|
+
output: `${t('mcp.noMatchingTools', { query })}\n\nAvailable tools:\n${this.getAvailableMcpTools()}${this.getDisabledServersHint()}`,
|
|
1298
|
+
matches: [],
|
|
1299
|
+
query,
|
|
1300
|
+
total_mcp_tools: totalMcpTools,
|
|
1301
|
+
};
|
|
1302
|
+
}
|
|
1303
|
+
if (process.env.DEBUG) {
|
|
1304
|
+
console.log(`[Harness] ToolSearch keyword "${query}": ${matches.length} matches`);
|
|
1305
|
+
}
|
|
1306
|
+
const output = `Found ${matches.length} MCP tool${matches.length === 1 ? '' : 's'} matching "${query}":\n\n${matches.map((m, i) => `${i + 1}. ${m}`).join('\n')}\n\nThese tools are now loaded and ready to use.`;
|
|
1307
|
+
return {
|
|
1308
|
+
success: true,
|
|
1309
|
+
output,
|
|
1310
|
+
matches,
|
|
1311
|
+
query,
|
|
1312
|
+
total_mcp_tools: totalMcpTools,
|
|
1313
|
+
};
|
|
1314
|
+
}
|
|
1315
|
+
/**
|
|
1316
|
+
* Handle MCP server management actions (merged from McpManage tool).
|
|
1317
|
+
* The actual execution is intercepted by ConversationManager.executeTool() in web mode.
|
|
1318
|
+
* This fallback handles CLI mode or unintercepted calls.
|
|
1319
|
+
*/
|
|
1320
|
+
async handleManageAction(action, name) {
|
|
1321
|
+
// In web mode, this is intercepted by ConversationManager before reaching here.
|
|
1322
|
+
// This is a fallback for CLI mode.
|
|
1323
|
+
return {
|
|
1324
|
+
success: false,
|
|
1325
|
+
output: `MCP server management (action="${action}") requires Web server mode. It is intercepted by ConversationManager.executeTool().`,
|
|
1326
|
+
matches: [],
|
|
1327
|
+
query: '',
|
|
1328
|
+
total_mcp_tools: 0,
|
|
1329
|
+
};
|
|
1330
|
+
}
|
|
1331
|
+
}
|
|
1332
|
+
// ============ MCP 工具类 ============
|
|
1333
|
+
export class McpTool extends BaseTool {
|
|
1334
|
+
serverName;
|
|
1335
|
+
toolName;
|
|
1336
|
+
toolDescription;
|
|
1337
|
+
toolInputSchema;
|
|
1338
|
+
constructor(serverName, toolDef) {
|
|
1339
|
+
// MCP 工具启用重试机制
|
|
1340
|
+
super({
|
|
1341
|
+
maxRetries: 3,
|
|
1342
|
+
baseTimeout: 300000, // 5分钟超时
|
|
1343
|
+
retryableErrors: [
|
|
1344
|
+
4000, // NETWORK_CONNECTION_FAILED
|
|
1345
|
+
4001, // NETWORK_TIMEOUT
|
|
1346
|
+
4005, // NETWORK_RATE_LIMITED
|
|
1347
|
+
],
|
|
1348
|
+
});
|
|
1349
|
+
this.serverName = serverName;
|
|
1350
|
+
this.toolName = toolDef.name;
|
|
1351
|
+
this.toolDescription = toolDef.description;
|
|
1352
|
+
this.toolInputSchema = toolDef.inputSchema;
|
|
1353
|
+
}
|
|
1354
|
+
get name() {
|
|
1355
|
+
return `mcp__${this.serverName}__${this.toolName}`;
|
|
1356
|
+
}
|
|
1357
|
+
get description() {
|
|
1358
|
+
return this.toolDescription;
|
|
1359
|
+
}
|
|
1360
|
+
getInputSchema() {
|
|
1361
|
+
return this.toolInputSchema;
|
|
1362
|
+
}
|
|
1363
|
+
async execute(input) {
|
|
1364
|
+
// 使用重试和超时包装器
|
|
1365
|
+
return this.executeWithRetryAndTimeout(async () => {
|
|
1366
|
+
return callMcpTool(this.serverName, this.toolName, input);
|
|
1367
|
+
});
|
|
1368
|
+
}
|
|
1369
|
+
}
|
|
1370
|
+
/**
|
|
1371
|
+
* 创建 MCP 服务器的所有工具
|
|
1372
|
+
*/
|
|
1373
|
+
export async function createMcpTools(serverName) {
|
|
1374
|
+
const server = mcpServers.get(serverName);
|
|
1375
|
+
if (!server)
|
|
1376
|
+
return [];
|
|
1377
|
+
if (!server.connected) {
|
|
1378
|
+
await connectMcpServer(serverName);
|
|
1379
|
+
}
|
|
1380
|
+
return server.tools.map((tool) => new McpTool(serverName, tool));
|
|
1381
|
+
}
|
|
1382
|
+
/**
|
|
1383
|
+
* 将预加载的 MCP 工具直接注册到 ToolRegistry
|
|
1384
|
+
*
|
|
1385
|
+
* 这允许在不连接 MCP 服务器的情况下注册工具,
|
|
1386
|
+
* 工具会在实际调用时才尝试连接服务器。
|
|
1387
|
+
*
|
|
1388
|
+
* @param serverName MCP 服务器名称
|
|
1389
|
+
* @param tools 预加载的工具定义
|
|
1390
|
+
* @param registry ToolRegistry 实例
|
|
1391
|
+
*/
|
|
1392
|
+
export function registerMcpToolsToRegistry(serverName, tools, registry) {
|
|
1393
|
+
for (const toolDef of tools) {
|
|
1394
|
+
const mcpTool = new McpTool(serverName, toolDef);
|
|
1395
|
+
registry.register(mcpTool);
|
|
1396
|
+
}
|
|
1397
|
+
}
|
|
1398
|
+
// ============ MCP Resource 工具 ============
|
|
1399
|
+
/**
|
|
1400
|
+
* 列出 MCP 资源工具
|
|
1401
|
+
* 列出已配置 MCP 服务器中的可用资源
|
|
1402
|
+
*/
|
|
1403
|
+
export class ListMcpResourcesTool extends BaseTool {
|
|
1404
|
+
name = 'ListMcpResources';
|
|
1405
|
+
description = `List available resources from configured MCP servers.
|
|
1406
|
+
Each resource object includes a 'server' field indicating which server it's from.
|
|
1407
|
+
|
|
1408
|
+
Usage examples:
|
|
1409
|
+
- List all resources from all servers: \`listMcpResources\`
|
|
1410
|
+
- List resources from a specific server: \`listMcpResources({ server: "myserver" })\`
|
|
1411
|
+
|
|
1412
|
+
List available resources from configured MCP servers.
|
|
1413
|
+
Each returned resource will include all standard MCP resource fields plus a 'server' field
|
|
1414
|
+
indicating which server the resource belongs to.
|
|
1415
|
+
|
|
1416
|
+
Parameters:
|
|
1417
|
+
- server (optional): The name of a specific MCP server to get resources from. If not provided,
|
|
1418
|
+
resources from all servers will be returned.`;
|
|
1419
|
+
getInputSchema() {
|
|
1420
|
+
return {
|
|
1421
|
+
type: 'object',
|
|
1422
|
+
properties: {
|
|
1423
|
+
server: {
|
|
1424
|
+
type: 'string',
|
|
1425
|
+
description: 'Optional server name to filter resources by',
|
|
1426
|
+
},
|
|
1427
|
+
refresh: {
|
|
1428
|
+
type: 'boolean',
|
|
1429
|
+
description: 'Whether to refresh the resource list from the server',
|
|
1430
|
+
},
|
|
1431
|
+
},
|
|
1432
|
+
required: [],
|
|
1433
|
+
};
|
|
1434
|
+
}
|
|
1435
|
+
async execute(input) {
|
|
1436
|
+
const { server, refresh = false } = input;
|
|
1437
|
+
const results = [];
|
|
1438
|
+
// 确定要查询的服务器列表
|
|
1439
|
+
const serversToQuery = [];
|
|
1440
|
+
if (server) {
|
|
1441
|
+
if (!mcpServers.has(server)) {
|
|
1442
|
+
return {
|
|
1443
|
+
success: false,
|
|
1444
|
+
error: t('mcp.serverNotFound', { name: server, available: Array.from(mcpServers.keys()).join(', ') || 'none' }),
|
|
1445
|
+
};
|
|
1446
|
+
}
|
|
1447
|
+
serversToQuery.push(server);
|
|
1448
|
+
}
|
|
1449
|
+
else {
|
|
1450
|
+
serversToQuery.push(...mcpServers.keys());
|
|
1451
|
+
}
|
|
1452
|
+
// 遍历服务器获取资源
|
|
1453
|
+
for (const serverName of serversToQuery) {
|
|
1454
|
+
const serverState = mcpServers.get(serverName);
|
|
1455
|
+
if (!serverState)
|
|
1456
|
+
continue;
|
|
1457
|
+
// 确保服务器已连接
|
|
1458
|
+
if (!serverState.connected) {
|
|
1459
|
+
const connected = await connectMcpServer(serverName);
|
|
1460
|
+
if (!connected) {
|
|
1461
|
+
console.error(`Failed to connect to MCP server: ${serverName}`);
|
|
1462
|
+
continue;
|
|
1463
|
+
}
|
|
1464
|
+
}
|
|
1465
|
+
// 检查服务器是否支持资源
|
|
1466
|
+
if (!serverState.capabilities.resources) {
|
|
1467
|
+
continue;
|
|
1468
|
+
}
|
|
1469
|
+
// 获取资源列表(可选刷新缓存)
|
|
1470
|
+
let resources;
|
|
1471
|
+
if (refresh) {
|
|
1472
|
+
await refreshResourceCache(serverName);
|
|
1473
|
+
resources = serverState.resources;
|
|
1474
|
+
}
|
|
1475
|
+
else {
|
|
1476
|
+
// 检查缓存
|
|
1477
|
+
if (serverState.resourcesCache && Date.now() - serverState.resourcesCache.timestamp < RESOURCE_CACHE_TTL) {
|
|
1478
|
+
resources = serverState.resourcesCache.data;
|
|
1479
|
+
}
|
|
1480
|
+
else {
|
|
1481
|
+
await refreshResourceCache(serverName);
|
|
1482
|
+
resources = serverState.resources;
|
|
1483
|
+
}
|
|
1484
|
+
}
|
|
1485
|
+
// 添加服务器信息到每个资源
|
|
1486
|
+
for (const resource of resources) {
|
|
1487
|
+
results.push({
|
|
1488
|
+
server: serverName,
|
|
1489
|
+
...resource,
|
|
1490
|
+
});
|
|
1491
|
+
}
|
|
1492
|
+
}
|
|
1493
|
+
if (results.length === 0) {
|
|
1494
|
+
return {
|
|
1495
|
+
success: true,
|
|
1496
|
+
output: server
|
|
1497
|
+
? `No resources found for server: ${server}`
|
|
1498
|
+
: 'No resources found from any MCP server.',
|
|
1499
|
+
};
|
|
1500
|
+
}
|
|
1501
|
+
const output = results
|
|
1502
|
+
.map((r) => `[${r.server}] ${r.name}: ${r.uri}${r.description ? ` - ${r.description}` : ''}`)
|
|
1503
|
+
.join('\n');
|
|
1504
|
+
return {
|
|
1505
|
+
success: true,
|
|
1506
|
+
output: `${t('mcp.resourcesFound', { count: results.length })}:\n\n${output}`,
|
|
1507
|
+
};
|
|
1508
|
+
}
|
|
1509
|
+
}
|
|
1510
|
+
/**
|
|
1511
|
+
* 读取 MCP 资源工具
|
|
1512
|
+
* 从 MCP 服务器读取特定资源
|
|
1513
|
+
*/
|
|
1514
|
+
export class ReadMcpResourceTool extends BaseTool {
|
|
1515
|
+
name = 'ReadMcpResource';
|
|
1516
|
+
description = `Reads a specific resource from an MCP server.
|
|
1517
|
+
- server: The name of the MCP server to read from
|
|
1518
|
+
- uri: The URI of the resource to read
|
|
1519
|
+
|
|
1520
|
+
Usage examples:
|
|
1521
|
+
- Read a resource from a server: \`readMcpResource({ server: "myserver", uri: "my-resource-uri" })\`
|
|
1522
|
+
|
|
1523
|
+
Reads a specific resource from an MCP server, identified by server name and resource URI.
|
|
1524
|
+
|
|
1525
|
+
Parameters:
|
|
1526
|
+
- server (required): The name of the MCP server from which to read the resource
|
|
1527
|
+
- uri (required): The URI of the resource to read`;
|
|
1528
|
+
getInputSchema() {
|
|
1529
|
+
return {
|
|
1530
|
+
type: 'object',
|
|
1531
|
+
properties: {
|
|
1532
|
+
server: {
|
|
1533
|
+
type: 'string',
|
|
1534
|
+
description: 'The MCP server name',
|
|
1535
|
+
},
|
|
1536
|
+
uri: {
|
|
1537
|
+
type: 'string',
|
|
1538
|
+
description: 'The resource URI to read',
|
|
1539
|
+
},
|
|
1540
|
+
},
|
|
1541
|
+
required: ['server', 'uri'],
|
|
1542
|
+
};
|
|
1543
|
+
}
|
|
1544
|
+
async execute(input) {
|
|
1545
|
+
const { server, uri } = input;
|
|
1546
|
+
// 验证服务器存在
|
|
1547
|
+
const serverState = mcpServers.get(server);
|
|
1548
|
+
if (!serverState) {
|
|
1549
|
+
return {
|
|
1550
|
+
success: false,
|
|
1551
|
+
error: t('mcp.resourceServerNotFound', { name: server, available: Array.from(mcpServers.keys()).join(', ') || 'none' }),
|
|
1552
|
+
};
|
|
1553
|
+
}
|
|
1554
|
+
// 确保服务器已连接
|
|
1555
|
+
if (!serverState.connected) {
|
|
1556
|
+
const connected = await connectMcpServer(server);
|
|
1557
|
+
if (!connected) {
|
|
1558
|
+
return {
|
|
1559
|
+
success: false,
|
|
1560
|
+
error: t('mcp.resourceConnectFailed', { name: server }),
|
|
1561
|
+
};
|
|
1562
|
+
}
|
|
1563
|
+
}
|
|
1564
|
+
// 检查服务器是否支持资源
|
|
1565
|
+
if (!serverState.capabilities.resources) {
|
|
1566
|
+
return {
|
|
1567
|
+
success: false,
|
|
1568
|
+
error: t('mcp.noResourceSupport', { name: server }),
|
|
1569
|
+
};
|
|
1570
|
+
}
|
|
1571
|
+
try {
|
|
1572
|
+
// 调用 resources/read
|
|
1573
|
+
const result = await sendMcpMessage(server, 'resources/read', {
|
|
1574
|
+
uri,
|
|
1575
|
+
});
|
|
1576
|
+
if (!result) {
|
|
1577
|
+
return {
|
|
1578
|
+
success: false,
|
|
1579
|
+
error: t('mcp.resourceReadFailed', { uri, server }),
|
|
1580
|
+
};
|
|
1581
|
+
}
|
|
1582
|
+
// 解析结果
|
|
1583
|
+
const resourceResult = result;
|
|
1584
|
+
if (!resourceResult.contents || resourceResult.contents.length === 0) {
|
|
1585
|
+
return {
|
|
1586
|
+
success: false,
|
|
1587
|
+
error: t('mcp.resourceNotFound', { uri }),
|
|
1588
|
+
};
|
|
1589
|
+
}
|
|
1590
|
+
// 处理内容
|
|
1591
|
+
const contents = resourceResult.contents;
|
|
1592
|
+
let output = '';
|
|
1593
|
+
for (const content of contents) {
|
|
1594
|
+
if (content.text) {
|
|
1595
|
+
output += content.text;
|
|
1596
|
+
}
|
|
1597
|
+
else if (content.blob) {
|
|
1598
|
+
// 对于二进制内容,返回 base64 信息
|
|
1599
|
+
output += `[Binary content: ${content.mimeType || 'application/octet-stream'}, ${content.blob.length} bytes (base64)]`;
|
|
1600
|
+
}
|
|
1601
|
+
}
|
|
1602
|
+
// 使用统一的输出持久化机制
|
|
1603
|
+
const maxTokens = MAX_MCP_OUTPUT_TOKENS();
|
|
1604
|
+
const maxChars = maxTokens * 4;
|
|
1605
|
+
const persistResult = persistLargeOutputSync(output, {
|
|
1606
|
+
toolName: 'ReadMcpResource',
|
|
1607
|
+
maxLength: maxChars,
|
|
1608
|
+
});
|
|
1609
|
+
return { success: true, output: persistResult.content };
|
|
1610
|
+
}
|
|
1611
|
+
catch (err) {
|
|
1612
|
+
return {
|
|
1613
|
+
success: false,
|
|
1614
|
+
error: t('mcp.resourceReadError', { error: err instanceof Error ? err.message : 'Unknown error' }),
|
|
1615
|
+
};
|
|
1616
|
+
}
|
|
1617
|
+
}
|
|
1618
|
+
}
|
|
1619
|
+
// ============ 合并的 MCP Resource 工具 ============
|
|
1620
|
+
/**
|
|
1621
|
+
* 合并的 MCP 资源工具
|
|
1622
|
+
* 替代 ListMcpResourcesTool 和 ReadMcpResourceTool
|
|
1623
|
+
*/
|
|
1624
|
+
export class McpResourceTool extends BaseTool {
|
|
1625
|
+
name = 'McpResource';
|
|
1626
|
+
shouldDefer = true;
|
|
1627
|
+
searchHint = 'MCP resources, read server data, list available resources, external data source';
|
|
1628
|
+
description = `List available resources from configured MCP servers or read a specific resource.
|
|
1629
|
+
|
|
1630
|
+
Parameters:
|
|
1631
|
+
- action (required): 'list' or 'read'
|
|
1632
|
+
- server (optional for list, required for read): MCP server name
|
|
1633
|
+
- uri (required for read): The resource URI to read
|
|
1634
|
+
- refresh (optional, for list): Whether to refresh the resource list`;
|
|
1635
|
+
getInputSchema() {
|
|
1636
|
+
return {
|
|
1637
|
+
type: 'object',
|
|
1638
|
+
properties: {
|
|
1639
|
+
action: {
|
|
1640
|
+
type: 'string',
|
|
1641
|
+
enum: ['list', 'read'],
|
|
1642
|
+
description: 'Action to perform: list available resources or read a specific resource',
|
|
1643
|
+
},
|
|
1644
|
+
server: {
|
|
1645
|
+
type: 'string',
|
|
1646
|
+
description: 'MCP server name (optional for list, required for read)',
|
|
1647
|
+
},
|
|
1648
|
+
uri: {
|
|
1649
|
+
type: 'string',
|
|
1650
|
+
description: 'The resource URI to read (required for action=read)',
|
|
1651
|
+
},
|
|
1652
|
+
refresh: {
|
|
1653
|
+
type: 'boolean',
|
|
1654
|
+
description: 'Whether to refresh the resource list from the server (for action=list)',
|
|
1655
|
+
},
|
|
1656
|
+
},
|
|
1657
|
+
required: ['action'],
|
|
1658
|
+
};
|
|
1659
|
+
}
|
|
1660
|
+
listTool = new ListMcpResourcesTool();
|
|
1661
|
+
readTool = new ReadMcpResourceTool();
|
|
1662
|
+
async execute(input) {
|
|
1663
|
+
if (input.action === 'list') {
|
|
1664
|
+
return this.listTool.execute({
|
|
1665
|
+
server: input.server,
|
|
1666
|
+
refresh: input.refresh,
|
|
1667
|
+
});
|
|
1668
|
+
}
|
|
1669
|
+
if (input.action === 'read') {
|
|
1670
|
+
if (!input.server || !input.uri) {
|
|
1671
|
+
return {
|
|
1672
|
+
success: false,
|
|
1673
|
+
error: t('mcp.serverAndUriRequired'),
|
|
1674
|
+
};
|
|
1675
|
+
}
|
|
1676
|
+
return this.readTool.execute({
|
|
1677
|
+
server: input.server,
|
|
1678
|
+
uri: input.uri,
|
|
1679
|
+
});
|
|
1680
|
+
}
|
|
1681
|
+
return {
|
|
1682
|
+
success: false,
|
|
1683
|
+
error: t('mcp.unknownAction', { action: input.action }),
|
|
1684
|
+
};
|
|
1685
|
+
}
|
|
1686
|
+
}
|
|
1687
|
+
// ============ MCP CLI Bridge ============
|
|
1688
|
+
/**
|
|
1689
|
+
* Exported wrapper for sendMcpMessage, used by mcp-cli API routes.
|
|
1690
|
+
* sendMcpMessage itself is a module-private function, so we expose
|
|
1691
|
+
* a public facade for the CLI bridge.
|
|
1692
|
+
*/
|
|
1693
|
+
export async function sendMcpMessageForCli(serverName, method, params, timeout) {
|
|
1694
|
+
return sendMcpMessage(serverName, method, params, timeout);
|
|
1695
|
+
}
|
|
1696
|
+
//# sourceMappingURL=mcp.js.map
|