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,1823 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bash 工具
|
|
3
|
+
* 执行 shell 命令,支持沙箱隔离
|
|
4
|
+
* 跨平台支持: Windows (git-bash), macOS, Linux
|
|
5
|
+
* 注意: Windows 上需要安装 Git for Windows,使用 git-bash 执行命令
|
|
6
|
+
*/
|
|
7
|
+
import { spawn, exec, spawnSync } from 'child_process';
|
|
8
|
+
import { promisify } from 'util';
|
|
9
|
+
import * as fs from 'fs';
|
|
10
|
+
import * as path from 'path';
|
|
11
|
+
import * as os from 'os';
|
|
12
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
13
|
+
import { BaseTool } from './base.js';
|
|
14
|
+
import { executeInSandbox, isSandboxingEnabled, isAutoAllowBashIfSandboxedEnabled, willCommandRunInSandbox, } from './sandbox.js';
|
|
15
|
+
import { runPreToolUseHooks, runPostToolUseHooks } from '../hooks/index.js';
|
|
16
|
+
import { processGitCommitCommand } from '../utils/git-helper.js';
|
|
17
|
+
import { configManager } from '../config/index.js';
|
|
18
|
+
import { isBackgroundTasksDisabled } from '../utils/env-check.js';
|
|
19
|
+
import { escapePathForShell } from '../utils/platform.js';
|
|
20
|
+
import { getCurrentCwd } from '../core/cwd-context.js';
|
|
21
|
+
import { parsePrCreateOutput, linkSessionToPr } from '../session/index.js';
|
|
22
|
+
import { getCurrentSessionId } from '../core/session.js';
|
|
23
|
+
import { needsElevation, getElevationReason, executeElevated } from '../permissions/elevated-commands.js';
|
|
24
|
+
import { truncateString } from '../utils/truncated-buffer.js';
|
|
25
|
+
import { t } from '../i18n/index.js';
|
|
26
|
+
// WebUI 模式下的 WebSocket 广播(可选依赖)
|
|
27
|
+
// 仅在 WebUI 服务器模式下加载,通过 setBroadcastMessage() 注入
|
|
28
|
+
let broadcastMessage = null;
|
|
29
|
+
/**
|
|
30
|
+
* 设置 WebSocket 广播函数(由 WebUI 服务器启动时调用)
|
|
31
|
+
*/
|
|
32
|
+
export function setBroadcastMessage(fn) {
|
|
33
|
+
broadcastMessage = fn;
|
|
34
|
+
}
|
|
35
|
+
const execAsync = promisify(exec);
|
|
36
|
+
// ============================================================================
|
|
37
|
+
// 跨平台支持
|
|
38
|
+
// ============================================================================
|
|
39
|
+
/** 平台检测 */
|
|
40
|
+
const IS_WINDOWS = os.platform() === 'win32';
|
|
41
|
+
const IS_WSL = os.platform() === 'linux' &&
|
|
42
|
+
fs.existsSync('/proc/version') &&
|
|
43
|
+
fs.readFileSync('/proc/version', 'utf-8').toLowerCase().includes('microsoft');
|
|
44
|
+
/**
|
|
45
|
+
* 查找命令的路径 (类似 which/where)
|
|
46
|
+
* 官方实现: g1K 函数
|
|
47
|
+
*/
|
|
48
|
+
function which(command) {
|
|
49
|
+
try {
|
|
50
|
+
const result = spawnSync(IS_WINDOWS ? 'where' : 'which', [command], {
|
|
51
|
+
encoding: 'utf-8',
|
|
52
|
+
timeout: 5000,
|
|
53
|
+
windowsHide: true,
|
|
54
|
+
});
|
|
55
|
+
if (result.status === 0 && result.stdout) {
|
|
56
|
+
// where 在 Windows 上可能返回多行,取第一行
|
|
57
|
+
const firstLine = result.stdout.trim().split(/\r?\n/)[0];
|
|
58
|
+
return firstLine || null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// 命令不可用
|
|
63
|
+
}
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* 从 git.exe 路径中找到 Git 安装根目录
|
|
68
|
+
* Git 安装结构可能是:
|
|
69
|
+
* - Git/cmd/git.exe -> 根目录是往上两级
|
|
70
|
+
* - Git/bin/git.exe -> 根目录是往上一级
|
|
71
|
+
* - Git/mingw64/bin/git.exe -> 根目录是往上三级
|
|
72
|
+
*/
|
|
73
|
+
function findGitRoot(gitExePath) {
|
|
74
|
+
// 标准化路径
|
|
75
|
+
const normalized = path.normalize(gitExePath);
|
|
76
|
+
const parts = normalized.split(path.sep);
|
|
77
|
+
// 查找包含 'Git' 的目录部分
|
|
78
|
+
for (let i = parts.length - 1; i >= 0; i--) {
|
|
79
|
+
if (parts[i].toLowerCase() === 'git') {
|
|
80
|
+
return parts.slice(0, i + 1).join(path.sep);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// 回退: 尝试往上几级查找 bin/bash.exe
|
|
84
|
+
let dir = path.dirname(gitExePath);
|
|
85
|
+
for (let i = 0; i < 4; i++) {
|
|
86
|
+
const bashPath = path.join(dir, 'bin', 'bash.exe');
|
|
87
|
+
if (fs.existsSync(bashPath)) {
|
|
88
|
+
return dir;
|
|
89
|
+
}
|
|
90
|
+
dir = path.dirname(dir);
|
|
91
|
+
}
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* 查找 Windows 上的 git-bash 路径
|
|
96
|
+
* 官方逻辑:
|
|
97
|
+
* 1. 检查 AXON_GIT_BASH_PATH 环境变量
|
|
98
|
+
* 2. 通过 git 命令路径推断 bash.exe 位置
|
|
99
|
+
*/
|
|
100
|
+
function findGitBash() {
|
|
101
|
+
// 1. 检查环境变量
|
|
102
|
+
const envPath = process.env.AXON_GIT_BASH_PATH;
|
|
103
|
+
if (envPath) {
|
|
104
|
+
if (fs.existsSync(envPath)) {
|
|
105
|
+
return envPath;
|
|
106
|
+
}
|
|
107
|
+
console.error(t('bash.gitBashNotFound', { path: envPath }));
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
// 2. 通过 git 命令查找
|
|
111
|
+
const gitPath = which('git');
|
|
112
|
+
if (gitPath) {
|
|
113
|
+
const gitRoot = findGitRoot(gitPath);
|
|
114
|
+
if (gitRoot) {
|
|
115
|
+
// bash.exe 通常在 Git/bin/bash.exe 或 Git/usr/bin/bash.exe
|
|
116
|
+
const bashPath = path.join(gitRoot, 'bin', 'bash.exe');
|
|
117
|
+
if (fs.existsSync(bashPath)) {
|
|
118
|
+
return bashPath;
|
|
119
|
+
}
|
|
120
|
+
const bashPath2 = path.join(gitRoot, 'usr', 'bin', 'bash.exe');
|
|
121
|
+
if (fs.existsSync(bashPath2)) {
|
|
122
|
+
return bashPath2;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// 3. 常见安装路径
|
|
127
|
+
const commonPaths = [
|
|
128
|
+
'C:\\Program Files\\Git\\bin\\bash.exe',
|
|
129
|
+
'C:\\Program Files (x86)\\Git\\bin\\bash.exe',
|
|
130
|
+
'D:\\Program Files\\Git\\bin\\bash.exe',
|
|
131
|
+
path.join(os.homedir(), 'scoop', 'apps', 'git', 'current', 'bin', 'bash.exe'),
|
|
132
|
+
];
|
|
133
|
+
for (const p of commonPaths) {
|
|
134
|
+
if (fs.existsSync(p)) {
|
|
135
|
+
return p;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
/** 缓存的 git-bash 路径 */
|
|
141
|
+
let cachedGitBashPath = undefined;
|
|
142
|
+
function getGitBashPath() {
|
|
143
|
+
if (cachedGitBashPath === undefined) {
|
|
144
|
+
cachedGitBashPath = findGitBash();
|
|
145
|
+
}
|
|
146
|
+
return cachedGitBashPath;
|
|
147
|
+
}
|
|
148
|
+
/** 获取平台适配的 Shell 配置 */
|
|
149
|
+
function getPlatformShell() {
|
|
150
|
+
if (IS_WINDOWS) {
|
|
151
|
+
// Windows: 必须使用 git-bash (官方要求,无降级方案)
|
|
152
|
+
const gitBashPath = getGitBashPath();
|
|
153
|
+
if (gitBashPath) {
|
|
154
|
+
return {
|
|
155
|
+
shell: gitBashPath,
|
|
156
|
+
args: ['-c'],
|
|
157
|
+
isCmd: false,
|
|
158
|
+
isPowerShell: false,
|
|
159
|
+
isGitBash: true,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
// git-bash 未找到,按官方行为直接退出
|
|
163
|
+
console.error('Axon on Windows requires git-bash (https://git-scm.com/downloads/win). ' +
|
|
164
|
+
'If installed but not in PATH, set environment variable pointing to your bash.exe, similar to: ' +
|
|
165
|
+
'AXON_GIT_BASH_PATH=C:\\Program Files\\Git\\bin\\bash.exe');
|
|
166
|
+
process.exit(1);
|
|
167
|
+
}
|
|
168
|
+
// Unix 系统: 使用 bash 或 sh
|
|
169
|
+
const shell = process.env.SHELL || '/bin/bash';
|
|
170
|
+
return {
|
|
171
|
+
shell,
|
|
172
|
+
args: ['-c'],
|
|
173
|
+
isCmd: false,
|
|
174
|
+
isPowerShell: false,
|
|
175
|
+
isGitBash: false,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
/** 缓存的 Shell 配置 */
|
|
179
|
+
let cachedShellConfig = null;
|
|
180
|
+
function getShellConfig() {
|
|
181
|
+
if (!cachedShellConfig) {
|
|
182
|
+
cachedShellConfig = getPlatformShell();
|
|
183
|
+
}
|
|
184
|
+
return cachedShellConfig;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* v2.1.32: 修复 heredoc 中 JavaScript 模板字面量导致 "Bad substitution" 错误
|
|
188
|
+
* 对齐官方 mV6() 函数
|
|
189
|
+
*
|
|
190
|
+
* 问题:当 heredoc 使用未引用定界符 (<<EOF) 且内容包含 ${index + 1} 等
|
|
191
|
+
* JS 模板字面量时,bash 会尝试变量展开,导致 "Bad substitution" 错误。
|
|
192
|
+
*
|
|
193
|
+
* 修复:检测未引用定界符的 heredoc,如果其内容包含 ${...} 模式,
|
|
194
|
+
* 自动将定界符改为引用形式 (<<'EOF'),阻止 bash 变量展开。
|
|
195
|
+
*
|
|
196
|
+
* 官方正则: /(?<!<)<<(?!<)(-)?[ \t]*(['"])?\\?(\w+)\2?/
|
|
197
|
+
*/
|
|
198
|
+
function fixHeredocTemplateLiterals(command) {
|
|
199
|
+
if (!command.includes('<<'))
|
|
200
|
+
return command;
|
|
201
|
+
// 匹配 heredoc 操作符: <<[-]?[QUOTE]?DELIMITER[QUOTE]?
|
|
202
|
+
const heredocRegex = /(?<!<)<<(-?)[ \t]*(['"])?\\?(\w+)\2?/g;
|
|
203
|
+
let result = command;
|
|
204
|
+
let match;
|
|
205
|
+
const replacements = [];
|
|
206
|
+
while ((match = heredocRegex.exec(command)) !== null) {
|
|
207
|
+
const fullMatch = match[0];
|
|
208
|
+
const dash = match[1] || '';
|
|
209
|
+
const quote = match[2]; // 引号类型 (' 或 ")
|
|
210
|
+
const delimiter = match[3]; // 定界符名称
|
|
211
|
+
// 如果已经有引号,跳过(已经是安全的)
|
|
212
|
+
if (quote)
|
|
213
|
+
continue;
|
|
214
|
+
// 查找 heredoc 内容(从定界符后到匹配的结束定界符)
|
|
215
|
+
const afterMatch = command.slice(match.index + fullMatch.length);
|
|
216
|
+
const contentStart = afterMatch.indexOf('\n');
|
|
217
|
+
if (contentStart === -1)
|
|
218
|
+
continue;
|
|
219
|
+
const contentAfterNewline = afterMatch.slice(contentStart + 1);
|
|
220
|
+
const lines = contentAfterNewline.split('\n');
|
|
221
|
+
// 查找结束定界符
|
|
222
|
+
let endIndex = -1;
|
|
223
|
+
let heredocContent = '';
|
|
224
|
+
for (let i = 0; i < lines.length; i++) {
|
|
225
|
+
if (lines[i].trim() === delimiter) {
|
|
226
|
+
endIndex = i;
|
|
227
|
+
break;
|
|
228
|
+
}
|
|
229
|
+
heredocContent += lines[i] + '\n';
|
|
230
|
+
}
|
|
231
|
+
if (endIndex === -1)
|
|
232
|
+
continue;
|
|
233
|
+
// 检查 heredoc 内容是否包含 ${...} 模式(JS 模板字面量)
|
|
234
|
+
// 排除纯 shell 变量引用如 ${HOME}, ${PATH} 等
|
|
235
|
+
const templateLiteralPattern = /\$\{[^}]*[+\-*/% ][^}]*\}/;
|
|
236
|
+
if (templateLiteralPattern.test(heredocContent)) {
|
|
237
|
+
// 将 <<DELIMITER 改为 <<'DELIMITER'
|
|
238
|
+
replacements.push({
|
|
239
|
+
from: fullMatch,
|
|
240
|
+
to: `<<${dash}'${delimiter}'`,
|
|
241
|
+
index: match.index,
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
// 从后往前替换,避免索引偏移
|
|
246
|
+
for (let i = replacements.length - 1; i >= 0; i--) {
|
|
247
|
+
const r = replacements[i];
|
|
248
|
+
result = result.slice(0, r.index) + r.to + result.slice(r.index + r.from.length);
|
|
249
|
+
}
|
|
250
|
+
return result;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Windows 路径反斜杠修复
|
|
254
|
+
*
|
|
255
|
+
* 问题:AI 模型有时会在 bash 命令中使用 Windows 反斜杠路径(如 F:\dir\file),
|
|
256
|
+
* 但命令是通过 Git Bash 执行的。bash 会将 \d、\f、\t 等视为转义序列,
|
|
257
|
+
* 导致路径被损坏(反斜杠被吞掉),文件创建在错误位置。
|
|
258
|
+
*
|
|
259
|
+
* 修复:在 Windows + Git Bash 环境下,将命令中 Windows 风格的路径
|
|
260
|
+
* (驱动器号 + 反斜杠)转换为正斜杠。
|
|
261
|
+
*
|
|
262
|
+
* 匹配模式:[A-Z]:\ 开头的路径片段,将后续连续的 \ 都替换为 /
|
|
263
|
+
* 不处理引号内的 \n \t 等显式转义(这些是用户有意的)
|
|
264
|
+
*/
|
|
265
|
+
function fixWindowsPathsForBash(command) {
|
|
266
|
+
if (!IS_WINDOWS)
|
|
267
|
+
return command;
|
|
268
|
+
// 匹配 Windows 驱动器路径:X:\ 后面跟着路径字符(字母、数字、下划线、点、横杠和反斜杠)
|
|
269
|
+
// 例如:F:\axon\tests\file.ts → F:/axon/tests/file.ts
|
|
270
|
+
// 注意:不匹配空格,因为空格在 bash 中是分词符。
|
|
271
|
+
// 带空格的路径应该用引号括起来,引号内的反斜杠由 bash 自己处理。
|
|
272
|
+
return command.replace(/([A-Za-z]):\\([\w.\-\\]+)/g, (_match, drive, rest) => {
|
|
273
|
+
return drive + ':/' + rest.replace(/\\/g, '/');
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* v2.1.69: 修复 Windows CMD 风格的 nul 重定向在 Git Bash 中创建真实文件
|
|
278
|
+
*
|
|
279
|
+
* 问题:模型有时会使用 CMD 风格的 `2>nul` 重定向(Windows 的 /dev/null),
|
|
280
|
+
* 但在 Git Bash 中 `nul` 不是特殊设备,会创建一个名为 "nul" 的真实文件。
|
|
281
|
+
*
|
|
282
|
+
* 修复:将 `>nul`、`2>nul`、`>NUL` 等替换为 `>/dev/null`。
|
|
283
|
+
*/
|
|
284
|
+
function fixWindowsNulRedirection(command) {
|
|
285
|
+
if (!IS_WINDOWS)
|
|
286
|
+
return command;
|
|
287
|
+
// 匹配 [fd]>nul 或 [fd]>NUL(不在引号内)
|
|
288
|
+
// 支持 >nul, 2>nul, 1>nul, >NUL, 2>NUL 等
|
|
289
|
+
return command.replace(/(\d?)>(nul|NUL)\b/g, (_match, fd) => {
|
|
290
|
+
return `${fd}>/dev/null`;
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* 安全地终止进程(跨平台)
|
|
295
|
+
*/
|
|
296
|
+
function killProcessSafely(proc, signal = 'SIGTERM') {
|
|
297
|
+
try {
|
|
298
|
+
if (IS_WINDOWS && proc.pid) {
|
|
299
|
+
// Windows: 使用 taskkill 终止进程树
|
|
300
|
+
try {
|
|
301
|
+
spawn('taskkill', ['/PID', String(proc.pid), '/T', '/F'], {
|
|
302
|
+
stdio: 'ignore',
|
|
303
|
+
windowsHide: true,
|
|
304
|
+
});
|
|
305
|
+
return true;
|
|
306
|
+
}
|
|
307
|
+
catch {
|
|
308
|
+
// 回退到标准方法
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
proc.kill(signal);
|
|
312
|
+
return true;
|
|
313
|
+
}
|
|
314
|
+
catch {
|
|
315
|
+
return false;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* 获取平台适配的 spawn 选项
|
|
320
|
+
*/
|
|
321
|
+
function getPlatformSpawnOptions(cwd) {
|
|
322
|
+
const options = {
|
|
323
|
+
shell: false,
|
|
324
|
+
cwd,
|
|
325
|
+
env: { ...process.env },
|
|
326
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
327
|
+
};
|
|
328
|
+
if (IS_WINDOWS) {
|
|
329
|
+
options.windowsHide = true;
|
|
330
|
+
}
|
|
331
|
+
return options;
|
|
332
|
+
}
|
|
333
|
+
// 使用 task_id 作为键,兼容官方格式
|
|
334
|
+
const backgroundTasks = new Map();
|
|
335
|
+
// 向后兼容:保留旧的变量名作为别名
|
|
336
|
+
const backgroundShells = backgroundTasks;
|
|
337
|
+
// 定时清理已完成的后台任务,防止 Map 无限增长
|
|
338
|
+
const CLEANUP_INTERVAL_MS = 5 * 60 * 1000; // 5 分钟
|
|
339
|
+
let _cleanupTimer = null;
|
|
340
|
+
function ensureCleanupTimer() {
|
|
341
|
+
if (_cleanupTimer)
|
|
342
|
+
return;
|
|
343
|
+
_cleanupTimer = setInterval(() => {
|
|
344
|
+
cleanupCompletedTasks();
|
|
345
|
+
cleanupTimedOutTasks();
|
|
346
|
+
// 如果 Map 空了,停止定时器
|
|
347
|
+
if (backgroundTasks.size === 0 && _cleanupTimer) {
|
|
348
|
+
clearInterval(_cleanupTimer);
|
|
349
|
+
_cleanupTimer = null;
|
|
350
|
+
}
|
|
351
|
+
}, CLEANUP_INTERVAL_MS);
|
|
352
|
+
// 不阻止进程退出
|
|
353
|
+
if (_cleanupTimer && typeof _cleanupTimer === 'object' && 'unref' in _cleanupTimer) {
|
|
354
|
+
_cleanupTimer.unref();
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* 获取后台任务信息(供 TaskOutput 工具使用)
|
|
359
|
+
*/
|
|
360
|
+
export function getBackgroundTask(taskId) {
|
|
361
|
+
return backgroundTasks.get(taskId);
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* 向后兼容:获取后台 shell 信息
|
|
365
|
+
*/
|
|
366
|
+
export function getBackgroundShell(taskId) {
|
|
367
|
+
return getBackgroundTask(taskId);
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* 检查 ID 是否是任务 ID(支持 UUID 和旧格式)
|
|
371
|
+
*/
|
|
372
|
+
export function isTaskId(id) {
|
|
373
|
+
// 支持 UUID 格式和旧的 bash_ 格式
|
|
374
|
+
return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(id) || id.startsWith('bash_');
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* 向后兼容:检查 ID 是否是 shell ID
|
|
378
|
+
*/
|
|
379
|
+
export function isShellId(id) {
|
|
380
|
+
return isTaskId(id);
|
|
381
|
+
}
|
|
382
|
+
// 获取任务输出文件路径(使用官方的 tasks 目录)
|
|
383
|
+
export function getTaskOutputPath(taskId) {
|
|
384
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE || '/tmp';
|
|
385
|
+
const tasksDir = path.join(homeDir, '.axon', 'tasks');
|
|
386
|
+
// 确保目录存在
|
|
387
|
+
if (!fs.existsSync(tasksDir)) {
|
|
388
|
+
fs.mkdirSync(tasksDir, { recursive: true });
|
|
389
|
+
}
|
|
390
|
+
return path.join(tasksDir, `${taskId}.log`);
|
|
391
|
+
}
|
|
392
|
+
// 获取任务元数据文件路径
|
|
393
|
+
export function getTaskMetaPath(taskId) {
|
|
394
|
+
const logPath = getTaskOutputPath(taskId);
|
|
395
|
+
return logPath.replace(/\.log$/, '.meta.json');
|
|
396
|
+
}
|
|
397
|
+
// 保存后台任务元数据到磁盘(进程重启后可恢复)
|
|
398
|
+
function saveTaskMeta(taskId, meta) {
|
|
399
|
+
try {
|
|
400
|
+
const metaPath = getTaskMetaPath(taskId);
|
|
401
|
+
fs.writeFileSync(metaPath, JSON.stringify(meta, null, 2));
|
|
402
|
+
}
|
|
403
|
+
catch {
|
|
404
|
+
// 写入失败不影响主流程
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
// 更新磁盘上的任务元数据状态
|
|
408
|
+
function updateTaskMeta(taskId, updates) {
|
|
409
|
+
try {
|
|
410
|
+
const metaPath = getTaskMetaPath(taskId);
|
|
411
|
+
if (!fs.existsSync(metaPath))
|
|
412
|
+
return;
|
|
413
|
+
const existing = JSON.parse(fs.readFileSync(metaPath, 'utf-8'));
|
|
414
|
+
fs.writeFileSync(metaPath, JSON.stringify({ ...existing, ...updates }, null, 2));
|
|
415
|
+
}
|
|
416
|
+
catch {
|
|
417
|
+
// 更新失败不影响主流程
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
// 从磁盘加载后台任务元数据(进程重启后的 fallback)
|
|
421
|
+
export function loadTaskMeta(taskId) {
|
|
422
|
+
try {
|
|
423
|
+
const metaPath = getTaskMetaPath(taskId);
|
|
424
|
+
if (!fs.existsSync(metaPath))
|
|
425
|
+
return null;
|
|
426
|
+
return JSON.parse(fs.readFileSync(metaPath, 'utf-8'));
|
|
427
|
+
}
|
|
428
|
+
catch {
|
|
429
|
+
return null;
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
// 向后兼容:保留旧的函数名
|
|
433
|
+
function getBackgroundOutputPath(taskId) {
|
|
434
|
+
return getTaskOutputPath(taskId);
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* 启动时清理僵尸任务文件
|
|
438
|
+
* - 将 status=running 的 meta 标记为 failed(进程已不存在)
|
|
439
|
+
* - 删除空 log 文件和对应的 meta(无有效数据)
|
|
440
|
+
*/
|
|
441
|
+
export function cleanupStaleTasks() {
|
|
442
|
+
let cleaned = 0;
|
|
443
|
+
let errors = 0;
|
|
444
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE || '/tmp';
|
|
445
|
+
for (const subDir of ['tasks', path.join('tasks', 'conversations')]) {
|
|
446
|
+
const dir = path.join(homeDir, '.axon', subDir);
|
|
447
|
+
if (!fs.existsSync(dir))
|
|
448
|
+
continue;
|
|
449
|
+
try {
|
|
450
|
+
const files = fs.readdirSync(dir);
|
|
451
|
+
for (const file of files) {
|
|
452
|
+
if (!file.endsWith('.log'))
|
|
453
|
+
continue;
|
|
454
|
+
const logPath = path.join(dir, file);
|
|
455
|
+
const metaPath = logPath.replace(/\.log$/, '.meta.json');
|
|
456
|
+
try {
|
|
457
|
+
const stat = fs.statSync(logPath);
|
|
458
|
+
if (stat.size === 0) {
|
|
459
|
+
// 空 log 文件:删除 log + meta
|
|
460
|
+
fs.unlinkSync(logPath);
|
|
461
|
+
if (fs.existsSync(metaPath))
|
|
462
|
+
fs.unlinkSync(metaPath);
|
|
463
|
+
cleaned++;
|
|
464
|
+
}
|
|
465
|
+
else if (fs.existsSync(metaPath)) {
|
|
466
|
+
// 非空 log:检查 meta status
|
|
467
|
+
const meta = JSON.parse(fs.readFileSync(metaPath, 'utf-8'));
|
|
468
|
+
if (meta.status === 'running') {
|
|
469
|
+
meta.status = 'failed';
|
|
470
|
+
meta.endTime = Date.now();
|
|
471
|
+
meta.error = 'Process lost (cleaned up on startup)';
|
|
472
|
+
fs.writeFileSync(metaPath, JSON.stringify(meta, null, 2));
|
|
473
|
+
cleaned++;
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
catch {
|
|
478
|
+
errors++;
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
catch {
|
|
483
|
+
errors++;
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
return { cleaned, errors };
|
|
487
|
+
}
|
|
488
|
+
// 配置(从 settings.json 读取,不再依赖环境变量)
|
|
489
|
+
const MAX_OUTPUT_LENGTH = (() => {
|
|
490
|
+
try {
|
|
491
|
+
return configManager.get('bashMaxOutputLength') || 30000;
|
|
492
|
+
}
|
|
493
|
+
catch {
|
|
494
|
+
return 30000;
|
|
495
|
+
}
|
|
496
|
+
})();
|
|
497
|
+
const DEFAULT_TIMEOUT = parseInt(process.env.BASH_DEFAULT_TIMEOUT_MS || '120000', 10); // 默认 2 分钟
|
|
498
|
+
const MAX_TIMEOUT = 600000;
|
|
499
|
+
const MAX_BACKGROUND_OUTPUT = 10 * 1024 * 1024; // 10MB per background shell
|
|
500
|
+
const MAX_BACKGROUND_SHELLS = parseInt(process.env.BASH_MAX_BACKGROUND_SHELLS || '10', 10);
|
|
501
|
+
const BACKGROUND_SHELL_MAX_RUNTIME = parseInt(process.env.BASH_BACKGROUND_MAX_RUNTIME || '3600000', 10); // 1 hour
|
|
502
|
+
// 危险命令黑名单
|
|
503
|
+
const DANGEROUS_COMMANDS = [
|
|
504
|
+
'rm -rf /',
|
|
505
|
+
'mkfs',
|
|
506
|
+
'dd if=/dev/zero',
|
|
507
|
+
'fork bomb',
|
|
508
|
+
':(){ :|:& };:',
|
|
509
|
+
'chmod -R 777 /',
|
|
510
|
+
'chown -R',
|
|
511
|
+
];
|
|
512
|
+
// 需要警告的命令模式
|
|
513
|
+
const WARNING_PATTERNS = [
|
|
514
|
+
/rm\s+-rf/,
|
|
515
|
+
/sudo\s+rm/,
|
|
516
|
+
/chmod\s+777/,
|
|
517
|
+
/eval\s+/,
|
|
518
|
+
/exec\s+/,
|
|
519
|
+
/\|\s*sh/,
|
|
520
|
+
/curl.*\|\s*bash/,
|
|
521
|
+
/wget.*\|\s*sh/,
|
|
522
|
+
];
|
|
523
|
+
const auditLogs = [];
|
|
524
|
+
const MAX_AUDIT_LOGS = 1000;
|
|
525
|
+
/**
|
|
526
|
+
* 检查命令是否安全
|
|
527
|
+
*/
|
|
528
|
+
function checkCommandSafety(command) {
|
|
529
|
+
// 检查危险命令
|
|
530
|
+
for (const dangerous of DANGEROUS_COMMANDS) {
|
|
531
|
+
if (command.includes(dangerous)) {
|
|
532
|
+
return { safe: false, reason: `Dangerous command detected: ${dangerous}` };
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
// 检查警告模式
|
|
536
|
+
for (const pattern of WARNING_PATTERNS) {
|
|
537
|
+
if (pattern.test(command)) {
|
|
538
|
+
return {
|
|
539
|
+
safe: true,
|
|
540
|
+
warning: `Potentially dangerous command pattern detected: ${pattern}. Use with caution.`,
|
|
541
|
+
};
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
return { safe: true };
|
|
545
|
+
}
|
|
546
|
+
/**
|
|
547
|
+
* 记录审计日志
|
|
548
|
+
*/
|
|
549
|
+
function recordAudit(log) {
|
|
550
|
+
auditLogs.push(log);
|
|
551
|
+
// 限制日志大小
|
|
552
|
+
if (auditLogs.length > MAX_AUDIT_LOGS) {
|
|
553
|
+
auditLogs.splice(0, auditLogs.length - MAX_AUDIT_LOGS);
|
|
554
|
+
}
|
|
555
|
+
// 可选:写入文件
|
|
556
|
+
if (process.env.BASH_AUDIT_LOG_FILE) {
|
|
557
|
+
try {
|
|
558
|
+
const logLine = JSON.stringify(log) + '\n';
|
|
559
|
+
fs.appendFileSync(process.env.BASH_AUDIT_LOG_FILE, logLine);
|
|
560
|
+
}
|
|
561
|
+
catch (err) {
|
|
562
|
+
// 忽略日志写入错误
|
|
563
|
+
console.error('Failed to write audit log:', err);
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
/**
|
|
568
|
+
* 清理超时的后台任务
|
|
569
|
+
*/
|
|
570
|
+
function cleanupTimedOutTasks() {
|
|
571
|
+
let cleaned = 0;
|
|
572
|
+
const now = Date.now();
|
|
573
|
+
Array.from(backgroundTasks.entries()).forEach(([id, task]) => {
|
|
574
|
+
if (task.maxRuntime && now - task.startTime > task.maxRuntime) {
|
|
575
|
+
try {
|
|
576
|
+
task.process.kill('SIGTERM');
|
|
577
|
+
// 关闭输出流
|
|
578
|
+
task.outputStream?.end();
|
|
579
|
+
setTimeout(() => {
|
|
580
|
+
if (task.status === 'running') {
|
|
581
|
+
task.process.kill('SIGKILL');
|
|
582
|
+
}
|
|
583
|
+
}, 1000);
|
|
584
|
+
backgroundTasks.delete(id);
|
|
585
|
+
cleaned++;
|
|
586
|
+
}
|
|
587
|
+
catch (err) {
|
|
588
|
+
console.error(`Failed to cleanup task ${id}:`, err);
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
});
|
|
592
|
+
return cleaned;
|
|
593
|
+
}
|
|
594
|
+
// 向后兼容
|
|
595
|
+
const cleanupTimedOutShells = cleanupTimedOutTasks;
|
|
596
|
+
// 不支持自动超时转后台的命令列表(与官方对齐:IgY=["sleep"])
|
|
597
|
+
const NON_BACKGROUNDABLE_COMMANDS = ['sleep'];
|
|
598
|
+
/**
|
|
599
|
+
* 判断命令是否支持自动超时转后台执行
|
|
600
|
+
* 与官方 mgY() 函数对齐:
|
|
601
|
+
* function mgY(A) { let q=vX(A); if(q.length===0) return true;
|
|
602
|
+
* let K=q[0]?.trim(); if(!K) return true; return !IgY.includes(K); }
|
|
603
|
+
* IgY=["sleep"]
|
|
604
|
+
*/
|
|
605
|
+
function isBackgroundable(command) {
|
|
606
|
+
const trimmed = command.trim();
|
|
607
|
+
if (!trimmed)
|
|
608
|
+
return true;
|
|
609
|
+
// 提取第一个命令词(处理路径前缀如 /usr/bin/sleep)
|
|
610
|
+
const firstWord = trimmed.split(/\s+/)[0];
|
|
611
|
+
if (!firstWord)
|
|
612
|
+
return true;
|
|
613
|
+
const baseName = firstWord.split('/').pop() || firstWord;
|
|
614
|
+
return !NON_BACKGROUNDABLE_COMMANDS.includes(baseName);
|
|
615
|
+
}
|
|
616
|
+
/**
|
|
617
|
+
* 生成后台任务相关提示文本(条件性)
|
|
618
|
+
* 根据 AXON_DISABLE_BACKGROUND_TASKS 环境变量决定是否显示
|
|
619
|
+
*/
|
|
620
|
+
function getBackgroundTasksPrompt() {
|
|
621
|
+
if (isBackgroundTasksDisabled()) {
|
|
622
|
+
return '';
|
|
623
|
+
}
|
|
624
|
+
return 'You can use the `run_in_background` parameter to run the command in the background. You do not need to use \'&\' at the end of the command when using this parameter.';
|
|
625
|
+
}
|
|
626
|
+
/**
|
|
627
|
+
* Git commit/PR 指令 — 对齐官方 XEq() 函数
|
|
628
|
+
* 条件注入:只在 git 相关场景生成
|
|
629
|
+
*/
|
|
630
|
+
function getGitInstructions() {
|
|
631
|
+
return `
|
|
632
|
+
# Committing changes with git
|
|
633
|
+
|
|
634
|
+
Only create commits when requested by the user. If unclear, ask first. When the user asks you to create a new git commit, follow these steps carefully:
|
|
635
|
+
|
|
636
|
+
Git Safety Protocol:
|
|
637
|
+
- NEVER update the git config
|
|
638
|
+
- NEVER run destructive git commands (push --force, reset --hard, checkout ., restore ., clean -f, branch -D) unless the user explicitly requests these actions
|
|
639
|
+
- NEVER skip hooks (--no-verify, --no-gpg-sign, etc) unless the user explicitly requests it
|
|
640
|
+
- NEVER run force push to main/master, warn the user if they request it
|
|
641
|
+
- CRITICAL: Always create NEW commits rather than amending, unless the user explicitly requests a git amend. When a pre-commit hook fails, the commit did NOT happen — so --amend would modify the PREVIOUS commit. Instead, fix the issue, re-stage, and create a NEW commit
|
|
642
|
+
- NEVER commit changes unless the user explicitly asks you to
|
|
643
|
+
|
|
644
|
+
1. Run in parallel: git status (see untracked files), git diff (staged and unstaged changes), git log (recent commit style).
|
|
645
|
+
2. Analyze all staged changes and draft a concise commit message focusing on the "why". Do not commit files that likely contain secrets (.env, credentials.json, etc).
|
|
646
|
+
3. Add relevant files to staging, create the commit, then run git status to verify success.
|
|
647
|
+
4. If the commit fails due to pre-commit hook, fix the issue and create a NEW commit.
|
|
648
|
+
|
|
649
|
+
Important:
|
|
650
|
+
- Never use git commands with the -i flag (like git rebase -i or git add -i) since they require interactive input
|
|
651
|
+
- Do NOT push to remote unless the user explicitly asks
|
|
652
|
+
- ALWAYS pass the commit message via a HEREDOC for correct formatting
|
|
653
|
+
|
|
654
|
+
# Creating pull requests
|
|
655
|
+
Use the gh command for ALL GitHub-related tasks.
|
|
656
|
+
|
|
657
|
+
1. Run in parallel: git status, git diff, check remote tracking, git log + git diff [base-branch]...HEAD.
|
|
658
|
+
2. Analyze ALL commits (not just latest) and draft PR title (under 70 chars) and summary.
|
|
659
|
+
3. Create branch if needed, push with -u flag, create PR using gh pr create.
|
|
660
|
+
4. Return the PR URL when done.`;
|
|
661
|
+
}
|
|
662
|
+
export class BashTool extends BaseTool {
|
|
663
|
+
name = 'Bash';
|
|
664
|
+
/**
|
|
665
|
+
* Bash description — 对齐官方 PEq() + XEq() 结构
|
|
666
|
+
* 静态部分 + getGitInstructions() 条件注入
|
|
667
|
+
*/
|
|
668
|
+
get description() {
|
|
669
|
+
const toolAlternatives = [
|
|
670
|
+
'File search: Use Glob (NOT find or ls)',
|
|
671
|
+
'Content search: Use Grep (NOT grep or rg)',
|
|
672
|
+
'Read files: Use Read (NOT cat/head/tail)',
|
|
673
|
+
'Edit files: Use Edit (NOT sed/awk)',
|
|
674
|
+
'Write files: Use Write (NOT echo >/cat <<EOF)',
|
|
675
|
+
'Communication: Output text directly (NOT echo/printf)',
|
|
676
|
+
];
|
|
677
|
+
const multipleCommands = [
|
|
678
|
+
'If the commands are independent and can run in parallel, make multiple Bash tool calls in a single message. Example: if you need to run "git status" and "git diff", send a single message with two Bash tool calls in parallel.',
|
|
679
|
+
"If the commands depend on each other and must run sequentially, use a single Bash call with '&&' to chain them together.",
|
|
680
|
+
"Use ';' only when you need to run commands sequentially but don't care if earlier commands fail.",
|
|
681
|
+
'DO NOT use newlines to separate commands (newlines are ok in quoted strings).',
|
|
682
|
+
];
|
|
683
|
+
const gitCommands = [
|
|
684
|
+
'Prefer to create a new commit rather than amending an existing commit.',
|
|
685
|
+
'Before running destructive operations (e.g., git reset --hard, git push --force, git checkout --), consider whether there is a safer alternative that achieves the same goal. Only use destructive operations when they are truly the best approach.',
|
|
686
|
+
'Never skip hooks (--no-verify) or bypass signing (--no-gpg-sign, -c commit.gpgsign=false) unless the user has explicitly asked for it. If a hook fails, investigate and fix the underlying issue.',
|
|
687
|
+
];
|
|
688
|
+
const sleepRules = [
|
|
689
|
+
'Do not sleep between commands that can run immediately — just run them.',
|
|
690
|
+
'If your command is long running and you would like to be notified when it finishes – simply run your command using `run_in_background`. There is no need to sleep in this case.',
|
|
691
|
+
'Do not retry failing commands in a sleep loop — diagnose the root cause or consider an alternative approach.',
|
|
692
|
+
];
|
|
693
|
+
const instructions = [
|
|
694
|
+
'If your command will create new directories or files, first use this tool to run `ls` to verify the parent directory exists and is the correct location.',
|
|
695
|
+
'Always quote file paths that contain spaces with double quotes in your command (e.g., cd "path with spaces/file.txt")',
|
|
696
|
+
'Try to maintain your current working directory throughout the session by using absolute paths and avoiding usage of `cd`. You may use `cd` if the User explicitly requests it.',
|
|
697
|
+
`You may specify an optional timeout in milliseconds (up to ${MAX_TIMEOUT}ms / ${MAX_TIMEOUT / 60000} minutes). By default, your command will timeout after ${DEFAULT_TIMEOUT}ms (${DEFAULT_TIMEOUT / 60000} minutes).`,
|
|
698
|
+
'Write a clear, concise description of what your command does. For simple commands, keep it brief (5-10 words). For complex commands (piped commands, obscure flags, or anything hard to understand at a glance), include enough context so that the user can understand what your command will do.',
|
|
699
|
+
'When issuing multiple commands:',
|
|
700
|
+
multipleCommands,
|
|
701
|
+
'For git commands:',
|
|
702
|
+
gitCommands,
|
|
703
|
+
'Avoid unnecessary `sleep` commands:',
|
|
704
|
+
sleepRules,
|
|
705
|
+
];
|
|
706
|
+
const parts = [
|
|
707
|
+
'Executes a given bash command and returns its output.',
|
|
708
|
+
'',
|
|
709
|
+
'The working directory persists between commands, but shell state does not.',
|
|
710
|
+
'',
|
|
711
|
+
'IMPORTANT: Avoid using this tool to run `find`, `grep`, `cat`, `head`, `tail`, `sed`, `awk`, or `echo` commands, unless explicitly instructed or after you have verified that a dedicated tool cannot accomplish your task. Instead, use the appropriate dedicated tool as this will provide a much better experience for the user:',
|
|
712
|
+
'',
|
|
713
|
+
...toolAlternatives.map(s => ` - ${s}`),
|
|
714
|
+
'',
|
|
715
|
+
'# Instructions',
|
|
716
|
+
...instructions.flatMap(item => Array.isArray(item) ? item.map(sub => ` - ${sub}`) : [`- ${item}`]),
|
|
717
|
+
getBackgroundTasksPrompt(),
|
|
718
|
+
getGitInstructions(),
|
|
719
|
+
].filter(Boolean);
|
|
720
|
+
return parts.join('\n');
|
|
721
|
+
}
|
|
722
|
+
getInputSchema() {
|
|
723
|
+
return {
|
|
724
|
+
type: 'object',
|
|
725
|
+
properties: {
|
|
726
|
+
command: {
|
|
727
|
+
type: 'string',
|
|
728
|
+
description: 'The command to execute',
|
|
729
|
+
},
|
|
730
|
+
timeout: {
|
|
731
|
+
type: 'number',
|
|
732
|
+
description: 'Optional timeout in milliseconds (max 600000)',
|
|
733
|
+
},
|
|
734
|
+
description: {
|
|
735
|
+
type: 'string',
|
|
736
|
+
description: 'Clear, concise description of what this command does in 5-10 words',
|
|
737
|
+
},
|
|
738
|
+
run_in_background: {
|
|
739
|
+
type: 'boolean',
|
|
740
|
+
description: 'Run command in the background',
|
|
741
|
+
},
|
|
742
|
+
dangerouslyDisableSandbox: {
|
|
743
|
+
type: 'boolean',
|
|
744
|
+
description: 'Disable sandbox mode (dangerous)',
|
|
745
|
+
},
|
|
746
|
+
echoOutput: {
|
|
747
|
+
type: 'boolean',
|
|
748
|
+
description: 'Echo output to terminal in real-time (only with run_in_background)',
|
|
749
|
+
},
|
|
750
|
+
},
|
|
751
|
+
required: ['command'],
|
|
752
|
+
};
|
|
753
|
+
}
|
|
754
|
+
/**
|
|
755
|
+
* v2.1.34: Bash 工具权限检查 - 实现 autoAllowBashIfSandboxed 逻辑
|
|
756
|
+
*
|
|
757
|
+
* 对齐官方 EuA / E5z 函数:
|
|
758
|
+
* - 当沙箱启用 + autoAllowBashIfSandboxed=true + 命令确实在沙箱中运行时 → 自动允许
|
|
759
|
+
* - 当命令被 excludedCommands 排除或使用 dangerouslyDisableSandbox 时 → 需要正常权限检查(ask)
|
|
760
|
+
*
|
|
761
|
+
* 关键修复: 之前 excludedCommands 和 dangerouslyDisableSandbox 的命令
|
|
762
|
+
* 在 autoAllowBashIfSandboxed 启用时也被自动允许了(绕过了 ask 权限),这是安全漏洞
|
|
763
|
+
*/
|
|
764
|
+
async checkPermissions(input) {
|
|
765
|
+
const command = input.command;
|
|
766
|
+
const disableSandbox = input.dangerouslyDisableSandbox ?? false;
|
|
767
|
+
// 检查是否满足 autoAllowBashIfSandboxed 条件
|
|
768
|
+
if (isSandboxingEnabled() && isAutoAllowBashIfSandboxedEnabled()) {
|
|
769
|
+
// 关键: 只有命令确实会在沙箱中运行时,才自动允许
|
|
770
|
+
if (willCommandRunInSandbox(command, disableSandbox)) {
|
|
771
|
+
// 命令会在沙箱中运行 → 自动允许(默认安全)
|
|
772
|
+
return {
|
|
773
|
+
behavior: 'allow',
|
|
774
|
+
updatedInput: input,
|
|
775
|
+
};
|
|
776
|
+
}
|
|
777
|
+
else {
|
|
778
|
+
// v2.1.34 修复: 命令不会在沙箱中运行(被 excludedCommands 排除或 dangerouslyDisableSandbox)
|
|
779
|
+
// 此时不能享受 autoAllow,必须走正常的 ask 流程
|
|
780
|
+
return {
|
|
781
|
+
behavior: 'ask',
|
|
782
|
+
message: `Command "${command.substring(0, 80)}${command.length > 80 ? '...' : ''}" will run outside the sandbox. Allow?`,
|
|
783
|
+
updatedInput: input,
|
|
784
|
+
};
|
|
785
|
+
}
|
|
786
|
+
}
|
|
787
|
+
// 未启用 autoAllowBashIfSandboxed 或沙箱未启用 → 默认行为(allow,由 loop 层决定是否 ask)
|
|
788
|
+
return {
|
|
789
|
+
behavior: 'allow',
|
|
790
|
+
updatedInput: input,
|
|
791
|
+
};
|
|
792
|
+
}
|
|
793
|
+
async execute(input) {
|
|
794
|
+
let { command, timeout = DEFAULT_TIMEOUT, run_in_background = false, dangerouslyDisableSandbox = false, echoOutput = false, _toolUseId, } = input;
|
|
795
|
+
const startTime = Date.now();
|
|
796
|
+
const maxTimeout = Math.min(timeout, MAX_TIMEOUT);
|
|
797
|
+
// Git commit 命令预处理:自动添加署名
|
|
798
|
+
// 获取当前配置的模型ID用于署名
|
|
799
|
+
const config = configManager.getAll();
|
|
800
|
+
const modelId = config.model;
|
|
801
|
+
// Windows 路径修复:将命令中的 Windows 反斜杠路径转为正斜杠
|
|
802
|
+
// 防止 Git Bash 将 \t \n 等视为转义序列导致路径损坏
|
|
803
|
+
command = fixWindowsPathsForBash(command);
|
|
804
|
+
// v2.1.69: 修复 CMD 风格 2>nul 在 Git Bash 中创建真实 nul 文件
|
|
805
|
+
command = fixWindowsNulRedirection(command);
|
|
806
|
+
// v2.1.32: 修复 heredoc 中 JavaScript 模板字面量导致的 "Bad substitution" 错误
|
|
807
|
+
// 当 heredoc 使用未引用的定界符且内容包含 ${...} 时,bash 会尝试变量展开
|
|
808
|
+
// 修复方法:自动将未引用的定界符加上引号(如 <<EOF 变为 <<'EOF')
|
|
809
|
+
command = fixHeredocTemplateLiterals(command);
|
|
810
|
+
// 处理 git commit 命令以添加署名
|
|
811
|
+
// 修复 2.1.3: 添加友好的错误处理,防止命令注入异常导致不友好的错误消息
|
|
812
|
+
try {
|
|
813
|
+
command = processGitCommitCommand(command, modelId);
|
|
814
|
+
}
|
|
815
|
+
catch (error) {
|
|
816
|
+
if (error instanceof Error && error.message.includes('Command injection detected')) {
|
|
817
|
+
// 返回友好的安全错误消息
|
|
818
|
+
const auditLog = {
|
|
819
|
+
timestamp: Date.now(),
|
|
820
|
+
command,
|
|
821
|
+
cwd: getCurrentCwd(),
|
|
822
|
+
sandboxed: false,
|
|
823
|
+
success: false,
|
|
824
|
+
duration: 0,
|
|
825
|
+
outputSize: 0,
|
|
826
|
+
background: run_in_background,
|
|
827
|
+
};
|
|
828
|
+
recordAudit(auditLog);
|
|
829
|
+
return {
|
|
830
|
+
success: false,
|
|
831
|
+
error: t('bash.gitCommitBlocked', { message: error.message }),
|
|
832
|
+
blocked: true,
|
|
833
|
+
};
|
|
834
|
+
}
|
|
835
|
+
// 其他错误向上传播
|
|
836
|
+
throw error;
|
|
837
|
+
}
|
|
838
|
+
// 安全检查
|
|
839
|
+
const safetyCheck = checkCommandSafety(command);
|
|
840
|
+
if (!safetyCheck.safe) {
|
|
841
|
+
const auditLog = {
|
|
842
|
+
timestamp: Date.now(),
|
|
843
|
+
command,
|
|
844
|
+
cwd: getCurrentCwd(),
|
|
845
|
+
sandboxed: false,
|
|
846
|
+
success: false,
|
|
847
|
+
duration: 0,
|
|
848
|
+
outputSize: 0,
|
|
849
|
+
background: run_in_background,
|
|
850
|
+
};
|
|
851
|
+
recordAudit(auditLog);
|
|
852
|
+
return {
|
|
853
|
+
success: false,
|
|
854
|
+
error: t('bash.commandBlocked', { reason: safetyCheck.reason }),
|
|
855
|
+
};
|
|
856
|
+
}
|
|
857
|
+
// 记录警告
|
|
858
|
+
if (safetyCheck.warning) {
|
|
859
|
+
console.warn(`[Bash Security Warning] ${safetyCheck.warning}`);
|
|
860
|
+
}
|
|
861
|
+
// v2.1.28: 检测是否需要管理员权限
|
|
862
|
+
// 如果命令需要提升权限,会触发权限请求弹框
|
|
863
|
+
// 用户确认后才会执行,被拒绝则返回错误
|
|
864
|
+
if (needsElevation(command)) {
|
|
865
|
+
const reason = getElevationReason(command);
|
|
866
|
+
console.log(`\n${t('bash.adminRequired', { command })}`);
|
|
867
|
+
console.log(` ${t('bash.adminReason', { reason })}`);
|
|
868
|
+
console.log(` ${t('bash.waitingConfirm')}`);
|
|
869
|
+
// 这里会触发权限弹框(通过 hook 机制)
|
|
870
|
+
// 用户可以选择: 批准(会触发 UAC/sudo)、拒绝、手动处理
|
|
871
|
+
const hookResult = await runPreToolUseHooks('Bash', {
|
|
872
|
+
...input,
|
|
873
|
+
_elevatedCommand: true,
|
|
874
|
+
_elevationReason: reason,
|
|
875
|
+
});
|
|
876
|
+
if (!hookResult.allowed) {
|
|
877
|
+
return {
|
|
878
|
+
success: false,
|
|
879
|
+
error: t('bash.adminDenied', { message: hookResult.message || t('bash.userCancelled') }) + '\n\n' + t('bash.adminDeniedHint'),
|
|
880
|
+
};
|
|
881
|
+
}
|
|
882
|
+
// 用户批准,以提升权限执行
|
|
883
|
+
try {
|
|
884
|
+
const elevatedResult = await executeElevated(command, getCurrentCwd(), maxTimeout);
|
|
885
|
+
const duration = Date.now() - startTime;
|
|
886
|
+
const auditLog = {
|
|
887
|
+
timestamp: Date.now(),
|
|
888
|
+
command,
|
|
889
|
+
cwd: getCurrentCwd(),
|
|
890
|
+
sandboxed: false,
|
|
891
|
+
success: elevatedResult.success,
|
|
892
|
+
duration,
|
|
893
|
+
outputSize: (elevatedResult.stdout?.length || 0) + (elevatedResult.stderr?.length || 0),
|
|
894
|
+
background: false,
|
|
895
|
+
elevated: true, // 标记为提升权限执行
|
|
896
|
+
};
|
|
897
|
+
recordAudit(auditLog);
|
|
898
|
+
let output = elevatedResult.stdout + (elevatedResult.stderr ? `\nSTDERR:\n${elevatedResult.stderr}` : '');
|
|
899
|
+
output = truncateString(output, MAX_OUTPUT_LENGTH);
|
|
900
|
+
return {
|
|
901
|
+
success: elevatedResult.success,
|
|
902
|
+
output: `${t('bash.adminExecOutput')}\n${output}`,
|
|
903
|
+
stdout: elevatedResult.stdout,
|
|
904
|
+
stderr: elevatedResult.stderr,
|
|
905
|
+
exitCode: elevatedResult.exitCode,
|
|
906
|
+
error: elevatedResult.error,
|
|
907
|
+
};
|
|
908
|
+
}
|
|
909
|
+
catch (error) {
|
|
910
|
+
return {
|
|
911
|
+
success: false,
|
|
912
|
+
error: t('bash.adminExecFailed', { error: error instanceof Error ? error.message : String(error) }),
|
|
913
|
+
};
|
|
914
|
+
}
|
|
915
|
+
}
|
|
916
|
+
// 运行 pre-tool hooks(普通命令)
|
|
917
|
+
const hookResult = await runPreToolUseHooks('Bash', input);
|
|
918
|
+
if (!hookResult.allowed) {
|
|
919
|
+
return {
|
|
920
|
+
success: false,
|
|
921
|
+
error: t('bash.blockedByHook', { message: hookResult.message || 'Operation not allowed' }),
|
|
922
|
+
};
|
|
923
|
+
}
|
|
924
|
+
// 后台执行(用户显式指定 run_in_background=true)
|
|
925
|
+
if (run_in_background) {
|
|
926
|
+
return this.executeBackground(command, maxTimeout, echoOutput);
|
|
927
|
+
}
|
|
928
|
+
// 自动超时转后台执行(与官方 djA 类对齐)
|
|
929
|
+
// 条件:后台任务未禁用 且 命令可后台化(排除 sleep 等)
|
|
930
|
+
// 官方逻辑:W = !oP6 && mgY(w) → pP6(w, signal, timeout, cb, preventCwd, sandbox, backgroundable)
|
|
931
|
+
// onTimeout 回调将前台命令自动转为后台任务,进程不被杀死
|
|
932
|
+
if (!isBackgroundTasksDisabled() && isBackgroundable(command)) {
|
|
933
|
+
return this.executeWithTimeoutToBackground(command, maxTimeout, input, _toolUseId);
|
|
934
|
+
}
|
|
935
|
+
// 不可后台化的命令(如 sleep)或后台任务被禁用时,使用沙箱执行
|
|
936
|
+
// 超时将直接杀死进程
|
|
937
|
+
// 如果禁用沙箱,记录警告
|
|
938
|
+
if (dangerouslyDisableSandbox) {
|
|
939
|
+
console.warn('[Bash Security Warning] Sandbox disabled for command:', command);
|
|
940
|
+
}
|
|
941
|
+
try {
|
|
942
|
+
let result;
|
|
943
|
+
// 统一使用 executeInSandbox 来执行命令
|
|
944
|
+
// 它会根据各种条件自动决定是否真正使用沙箱
|
|
945
|
+
const sandboxResult = await executeInSandbox(command, {
|
|
946
|
+
cwd: getCurrentCwd(),
|
|
947
|
+
timeout: maxTimeout,
|
|
948
|
+
disableSandbox: dangerouslyDisableSandbox,
|
|
949
|
+
command, // 传递命令用于特殊处理(如 MCP 检测)
|
|
950
|
+
// 可选:传递权限上下文(暂时不传,使用全局状态)
|
|
951
|
+
// permissionContext: getGlobalAppState()?.toolPermissionContext,
|
|
952
|
+
});
|
|
953
|
+
// v2.1.31: 过滤 sandbox 产生的 "Read-only file system" 伪错误
|
|
954
|
+
// 当 sandbox 模式启用时,某些命令的 stderr 会包含 "Read-only file system" 错误
|
|
955
|
+
// 但实际上命令可能已成功执行(exitCode === 0)。这些错误不应影响命令的成功判定。
|
|
956
|
+
let filteredStderr = sandboxResult.stderr;
|
|
957
|
+
if (sandboxResult.sandboxed && filteredStderr) {
|
|
958
|
+
const lines = filteredStderr.split('\n');
|
|
959
|
+
const filtered = lines.filter(line => !(/read-only file system/i.test(line)));
|
|
960
|
+
filteredStderr = filtered.join('\n').trim();
|
|
961
|
+
}
|
|
962
|
+
let output = sandboxResult.stdout + (filteredStderr ? `\nSTDERR:\n${filteredStderr}` : '');
|
|
963
|
+
output = truncateString(output, MAX_OUTPUT_LENGTH);
|
|
964
|
+
// v2.1.23: 计算执行时间
|
|
965
|
+
const duration = Date.now() - startTime;
|
|
966
|
+
const elapsedTimeSeconds = Math.round(duration / 1000 * 10) / 10; // 保留一位小数
|
|
967
|
+
// v2.1.31: 如果在 sandbox 中执行且失败原因仅是 "Read-only file system"
|
|
968
|
+
// 则将命令视为成功
|
|
969
|
+
let isSuccess = sandboxResult.exitCode === 0;
|
|
970
|
+
if (!isSuccess && sandboxResult.sandboxed && sandboxResult.stderr) {
|
|
971
|
+
const isOnlyErofsError = sandboxResult.stderr.split('\n')
|
|
972
|
+
.filter(l => l.trim().length > 0)
|
|
973
|
+
.every(l => /read-only file system/i.test(l));
|
|
974
|
+
if (isOnlyErofsError && sandboxResult.stdout.trim().length > 0) {
|
|
975
|
+
isSuccess = true;
|
|
976
|
+
}
|
|
977
|
+
}
|
|
978
|
+
result = {
|
|
979
|
+
success: isSuccess,
|
|
980
|
+
output,
|
|
981
|
+
stdout: sandboxResult.stdout,
|
|
982
|
+
stderr: filteredStderr,
|
|
983
|
+
exitCode: sandboxResult.exitCode ?? 1,
|
|
984
|
+
error: sandboxResult.error,
|
|
985
|
+
// v2.1.23: 添加超时时长显示
|
|
986
|
+
elapsedTimeSeconds,
|
|
987
|
+
timeoutMs: maxTimeout,
|
|
988
|
+
};
|
|
989
|
+
// v2.1.27: 检测 gh pr create 命令,自动链接 PR 到当前会话
|
|
990
|
+
if (command.includes('gh pr create') && result.success && result.output) {
|
|
991
|
+
const prInfo = parsePrCreateOutput(result.output);
|
|
992
|
+
if (prInfo) {
|
|
993
|
+
const sessionId = getCurrentSessionId();
|
|
994
|
+
if (sessionId) {
|
|
995
|
+
linkSessionToPr(sessionId, prInfo.prNumber, prInfo.prUrl, prInfo.prRepository);
|
|
996
|
+
if (process.env.DEBUG) {
|
|
997
|
+
console.log(`[Bash] Auto-linked session to PR #${prInfo.prNumber}`);
|
|
998
|
+
}
|
|
999
|
+
}
|
|
1000
|
+
}
|
|
1001
|
+
}
|
|
1002
|
+
// 运行 post-tool hooks
|
|
1003
|
+
await runPostToolUseHooks('Bash', input, result.output || '');
|
|
1004
|
+
const auditLog = {
|
|
1005
|
+
timestamp: Date.now(),
|
|
1006
|
+
command,
|
|
1007
|
+
cwd: getCurrentCwd(),
|
|
1008
|
+
sandboxed: sandboxResult.sandboxed, // 从 sandboxResult 中获取实际的沙箱状态
|
|
1009
|
+
success: result.success,
|
|
1010
|
+
exitCode: result.exitCode,
|
|
1011
|
+
duration,
|
|
1012
|
+
outputSize: (result.output || '').length,
|
|
1013
|
+
background: false,
|
|
1014
|
+
};
|
|
1015
|
+
recordAudit(auditLog);
|
|
1016
|
+
// 意图增强:记录终端输出到缓冲区(供下次模糊提问时注入上下文)
|
|
1017
|
+
if (result.output) {
|
|
1018
|
+
try {
|
|
1019
|
+
const { terminalOutputBuffer } = await import('../context/intent-enricher.js');
|
|
1020
|
+
terminalOutputBuffer.push(result.output, !result.success);
|
|
1021
|
+
}
|
|
1022
|
+
catch { /* 缓冲失败不影响主流程 */ }
|
|
1023
|
+
}
|
|
1024
|
+
return result;
|
|
1025
|
+
}
|
|
1026
|
+
catch (err) {
|
|
1027
|
+
const exitCode = err.code || 1;
|
|
1028
|
+
const output = (err.stdout || '') + (err.stderr ? `\nSTDERR:\n${err.stderr}` : '');
|
|
1029
|
+
const result = {
|
|
1030
|
+
success: false,
|
|
1031
|
+
error: err.message,
|
|
1032
|
+
output,
|
|
1033
|
+
stdout: err.stdout,
|
|
1034
|
+
stderr: err.stderr,
|
|
1035
|
+
exitCode,
|
|
1036
|
+
};
|
|
1037
|
+
// 运行 post-tool hooks
|
|
1038
|
+
await runPostToolUseHooks('Bash', input, result.output || result.error || '');
|
|
1039
|
+
// 记录审计日志
|
|
1040
|
+
const duration = Date.now() - startTime;
|
|
1041
|
+
const auditLog = {
|
|
1042
|
+
timestamp: Date.now(),
|
|
1043
|
+
command,
|
|
1044
|
+
cwd: getCurrentCwd(),
|
|
1045
|
+
sandboxed: false, // 发生错误时默认为 false
|
|
1046
|
+
success: false,
|
|
1047
|
+
exitCode,
|
|
1048
|
+
duration,
|
|
1049
|
+
outputSize: output.length,
|
|
1050
|
+
background: false,
|
|
1051
|
+
};
|
|
1052
|
+
recordAudit(auditLog);
|
|
1053
|
+
// 意图增强:记录错误输出到缓冲区
|
|
1054
|
+
if (output) {
|
|
1055
|
+
try {
|
|
1056
|
+
const { terminalOutputBuffer } = await import('../context/intent-enricher.js');
|
|
1057
|
+
terminalOutputBuffer.push(output, true);
|
|
1058
|
+
}
|
|
1059
|
+
catch { /* 缓冲失败不影响主流程 */ }
|
|
1060
|
+
}
|
|
1061
|
+
return result;
|
|
1062
|
+
}
|
|
1063
|
+
}
|
|
1064
|
+
executeBackground(command, maxRuntime, echoOutput = false) {
|
|
1065
|
+
// 启动定时清理(懒初始化,首次创建后台任务时才启动)
|
|
1066
|
+
ensureCleanupTimer();
|
|
1067
|
+
// 检查后台任务数量限制
|
|
1068
|
+
if (backgroundTasks.size >= MAX_BACKGROUND_SHELLS) {
|
|
1069
|
+
// 尝试清理已完成的任务
|
|
1070
|
+
const cleaned = cleanupCompletedTasks();
|
|
1071
|
+
if (cleaned === 0 && backgroundTasks.size >= MAX_BACKGROUND_SHELLS) {
|
|
1072
|
+
return {
|
|
1073
|
+
success: false,
|
|
1074
|
+
error: t('bash.maxBackgroundTasks', { max: MAX_BACKGROUND_SHELLS }),
|
|
1075
|
+
};
|
|
1076
|
+
}
|
|
1077
|
+
}
|
|
1078
|
+
// 定期清理超时的任务
|
|
1079
|
+
cleanupTimedOutTasks();
|
|
1080
|
+
// 使用 UUID 作为 task_id,与官方一致
|
|
1081
|
+
const taskId = uuidv4();
|
|
1082
|
+
const outputFile = getTaskOutputPath(taskId);
|
|
1083
|
+
// 准备环境变量,确保临时目录路径在 Windows 上是安全的
|
|
1084
|
+
const safeEnv = { ...process.env };
|
|
1085
|
+
if (IS_WINDOWS) {
|
|
1086
|
+
if (safeEnv.TMPDIR) {
|
|
1087
|
+
safeEnv.TMPDIR = escapePathForShell(safeEnv.TMPDIR);
|
|
1088
|
+
}
|
|
1089
|
+
if (safeEnv.TEMP) {
|
|
1090
|
+
safeEnv.TEMP = escapePathForShell(safeEnv.TEMP);
|
|
1091
|
+
}
|
|
1092
|
+
if (safeEnv.TMP) {
|
|
1093
|
+
safeEnv.TMP = escapePathForShell(safeEnv.TMP);
|
|
1094
|
+
}
|
|
1095
|
+
}
|
|
1096
|
+
// 获取当前工作目录,确保路径在 Windows 上是安全的
|
|
1097
|
+
const safeCwd = IS_WINDOWS ? escapePathForShell(getCurrentCwd()) : getCurrentCwd();
|
|
1098
|
+
// 跨平台命令执行
|
|
1099
|
+
let proc;
|
|
1100
|
+
if (IS_WINDOWS) {
|
|
1101
|
+
// Windows: 使用 shell: true 让 Node.js 自动选择合适的 shell
|
|
1102
|
+
proc = spawn(command, [], {
|
|
1103
|
+
cwd: safeCwd,
|
|
1104
|
+
env: safeEnv,
|
|
1105
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
1106
|
+
shell: true,
|
|
1107
|
+
});
|
|
1108
|
+
}
|
|
1109
|
+
else {
|
|
1110
|
+
// Unix: 使用 bash -c
|
|
1111
|
+
proc = spawn('bash', ['-c', command], {
|
|
1112
|
+
cwd: getCurrentCwd(),
|
|
1113
|
+
env: safeEnv,
|
|
1114
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
1115
|
+
});
|
|
1116
|
+
}
|
|
1117
|
+
// 创建输出文件流
|
|
1118
|
+
const outputStream = fs.createWriteStream(outputFile, { flags: 'w' });
|
|
1119
|
+
const taskState = {
|
|
1120
|
+
taskId,
|
|
1121
|
+
process: proc,
|
|
1122
|
+
output: [],
|
|
1123
|
+
outputFile,
|
|
1124
|
+
outputStream,
|
|
1125
|
+
status: 'running',
|
|
1126
|
+
startTime: Date.now(),
|
|
1127
|
+
maxRuntime: Math.min(maxRuntime, BACKGROUND_SHELL_MAX_RUNTIME),
|
|
1128
|
+
outputSize: 0,
|
|
1129
|
+
command,
|
|
1130
|
+
lastReadPosition: 0,
|
|
1131
|
+
};
|
|
1132
|
+
// 设置超时清理
|
|
1133
|
+
const timeout = setTimeout(() => {
|
|
1134
|
+
if (taskState.status === 'running') {
|
|
1135
|
+
console.warn(`[Bash] Background task ${taskId} exceeded max runtime, terminating...`);
|
|
1136
|
+
try {
|
|
1137
|
+
proc.kill('SIGTERM');
|
|
1138
|
+
setTimeout(() => {
|
|
1139
|
+
if (taskState.status === 'running') {
|
|
1140
|
+
proc.kill('SIGKILL');
|
|
1141
|
+
}
|
|
1142
|
+
}, 1000);
|
|
1143
|
+
}
|
|
1144
|
+
catch (err) {
|
|
1145
|
+
console.error(`Failed to kill task ${taskId}:`, err);
|
|
1146
|
+
}
|
|
1147
|
+
}
|
|
1148
|
+
}, taskState.maxRuntime);
|
|
1149
|
+
taskState.timeout = timeout;
|
|
1150
|
+
proc.stdout?.on('data', (data) => {
|
|
1151
|
+
const dataStr = data.toString();
|
|
1152
|
+
taskState.outputSize += dataStr.length;
|
|
1153
|
+
// 实时输出到终端(如果启用)
|
|
1154
|
+
if (echoOutput) {
|
|
1155
|
+
process.stdout.write(dataStr);
|
|
1156
|
+
}
|
|
1157
|
+
// 写入文件
|
|
1158
|
+
taskState.outputStream?.write(dataStr);
|
|
1159
|
+
// WebUI: 向前端发送输出消息
|
|
1160
|
+
if (broadcastMessage) {
|
|
1161
|
+
broadcastMessage({
|
|
1162
|
+
type: 'bash:task-output',
|
|
1163
|
+
payload: {
|
|
1164
|
+
taskId,
|
|
1165
|
+
data: dataStr,
|
|
1166
|
+
stream: 'stdout',
|
|
1167
|
+
},
|
|
1168
|
+
});
|
|
1169
|
+
}
|
|
1170
|
+
// 同时保存在内存中(用于 TaskOutput 工具)
|
|
1171
|
+
if (taskState.outputSize < MAX_BACKGROUND_OUTPUT) {
|
|
1172
|
+
taskState.output.push(dataStr);
|
|
1173
|
+
}
|
|
1174
|
+
else if (taskState.output[taskState.output.length - 1] !== '[Output limit reached]') {
|
|
1175
|
+
taskState.output.push('[Output limit reached - further output discarded]');
|
|
1176
|
+
}
|
|
1177
|
+
});
|
|
1178
|
+
proc.stderr?.on('data', (data) => {
|
|
1179
|
+
const dataStr = data.toString();
|
|
1180
|
+
const stderrStr = `STDERR: ${dataStr}`;
|
|
1181
|
+
taskState.outputSize += dataStr.length;
|
|
1182
|
+
// 实时输出到终端(如果启用)
|
|
1183
|
+
if (echoOutput) {
|
|
1184
|
+
process.stderr.write(dataStr);
|
|
1185
|
+
}
|
|
1186
|
+
// 写入文件
|
|
1187
|
+
taskState.outputStream?.write(stderrStr);
|
|
1188
|
+
// WebUI: 向前端发送输出消息
|
|
1189
|
+
if (broadcastMessage) {
|
|
1190
|
+
broadcastMessage({
|
|
1191
|
+
type: 'bash:task-output',
|
|
1192
|
+
payload: {
|
|
1193
|
+
taskId,
|
|
1194
|
+
data: dataStr,
|
|
1195
|
+
stream: 'stderr',
|
|
1196
|
+
},
|
|
1197
|
+
});
|
|
1198
|
+
}
|
|
1199
|
+
// 同时保存在内存中
|
|
1200
|
+
if (taskState.outputSize < MAX_BACKGROUND_OUTPUT) {
|
|
1201
|
+
taskState.output.push(stderrStr);
|
|
1202
|
+
}
|
|
1203
|
+
else if (taskState.output[taskState.output.length - 1] !== '[Output limit reached]') {
|
|
1204
|
+
taskState.output.push('[Output limit reached - further output discarded]');
|
|
1205
|
+
}
|
|
1206
|
+
});
|
|
1207
|
+
proc.on('close', (code) => {
|
|
1208
|
+
taskState.status = code === 0 ? 'completed' : 'failed';
|
|
1209
|
+
taskState.exitCode = code ?? undefined;
|
|
1210
|
+
taskState.endTime = Date.now();
|
|
1211
|
+
// 同步更新磁盘元数据
|
|
1212
|
+
updateTaskMeta(taskId, {
|
|
1213
|
+
status: taskState.status,
|
|
1214
|
+
exitCode: taskState.exitCode,
|
|
1215
|
+
endTime: taskState.endTime,
|
|
1216
|
+
});
|
|
1217
|
+
if (taskState.timeout) {
|
|
1218
|
+
clearTimeout(taskState.timeout);
|
|
1219
|
+
}
|
|
1220
|
+
// 关闭输出文件流
|
|
1221
|
+
taskState.outputStream?.end();
|
|
1222
|
+
// WebUI: 向前端发送任务完成消息
|
|
1223
|
+
if (broadcastMessage) {
|
|
1224
|
+
broadcastMessage({
|
|
1225
|
+
type: 'bash:task-completed',
|
|
1226
|
+
payload: {
|
|
1227
|
+
taskId,
|
|
1228
|
+
exitCode: code ?? 1,
|
|
1229
|
+
success: code === 0,
|
|
1230
|
+
duration: Date.now() - taskState.startTime,
|
|
1231
|
+
},
|
|
1232
|
+
});
|
|
1233
|
+
}
|
|
1234
|
+
// 记录审计日志
|
|
1235
|
+
const auditLog = {
|
|
1236
|
+
timestamp: Date.now(),
|
|
1237
|
+
command,
|
|
1238
|
+
cwd: getCurrentCwd(),
|
|
1239
|
+
sandboxed: false,
|
|
1240
|
+
success: code === 0,
|
|
1241
|
+
exitCode: code ?? undefined,
|
|
1242
|
+
duration: Date.now() - taskState.startTime,
|
|
1243
|
+
outputSize: taskState.outputSize,
|
|
1244
|
+
background: true,
|
|
1245
|
+
};
|
|
1246
|
+
recordAudit(auditLog);
|
|
1247
|
+
});
|
|
1248
|
+
proc.on('error', (err) => {
|
|
1249
|
+
taskState.status = 'failed';
|
|
1250
|
+
const errorMsg = `ERROR: ${err.message}`;
|
|
1251
|
+
taskState.output.push(errorMsg);
|
|
1252
|
+
taskState.outputStream?.write(errorMsg + '\n');
|
|
1253
|
+
taskState.outputStream?.end();
|
|
1254
|
+
if (taskState.timeout) {
|
|
1255
|
+
clearTimeout(taskState.timeout);
|
|
1256
|
+
}
|
|
1257
|
+
});
|
|
1258
|
+
backgroundTasks.set(taskId, taskState);
|
|
1259
|
+
// 持久化元数据到磁盘(进程重启后 TaskOutput 可通过 fallback 恢复)
|
|
1260
|
+
saveTaskMeta(taskId, {
|
|
1261
|
+
command,
|
|
1262
|
+
startTime: taskState.startTime,
|
|
1263
|
+
outputFile,
|
|
1264
|
+
status: 'running',
|
|
1265
|
+
});
|
|
1266
|
+
// WebUI: 向前端发送任务启动消息
|
|
1267
|
+
if (broadcastMessage) {
|
|
1268
|
+
broadcastMessage({
|
|
1269
|
+
type: 'bash:task-started',
|
|
1270
|
+
payload: {
|
|
1271
|
+
taskId,
|
|
1272
|
+
command: command.substring(0, 200), // 限制长度避免消息过大
|
|
1273
|
+
cwd: getCurrentCwd(),
|
|
1274
|
+
},
|
|
1275
|
+
});
|
|
1276
|
+
}
|
|
1277
|
+
// 返回与官方一致的格式(使用 task_id)
|
|
1278
|
+
const statusMsg = `<task-id>${taskId}</task-id>
|
|
1279
|
+
<task-type>bash</task-type>
|
|
1280
|
+
<output-file>${outputFile}</output-file>
|
|
1281
|
+
<status>running</status>
|
|
1282
|
+
<summary>Background command "${command.substring(0, 50)}${command.length > 50 ? '...' : ''}" started.</summary>
|
|
1283
|
+
Use TaskOutput tool with task_id="${taskId}" to retrieve the output.`;
|
|
1284
|
+
return {
|
|
1285
|
+
success: true,
|
|
1286
|
+
output: statusMsg,
|
|
1287
|
+
task_id: taskId, // 官方字段名
|
|
1288
|
+
shell_id: taskId, // 向后兼容
|
|
1289
|
+
bash_id: taskId, // 向后兼容
|
|
1290
|
+
};
|
|
1291
|
+
}
|
|
1292
|
+
/**
|
|
1293
|
+
* 带超时自动转后台的执行方法
|
|
1294
|
+
*
|
|
1295
|
+
* 与官方实现对齐(cli.js djA 类):
|
|
1296
|
+
* 1. 前台执行命令,设置超时
|
|
1297
|
+
* 2. 如果命令在超时前完成 → 正常返回结果
|
|
1298
|
+
* 3. 如果超时触发 → 进程不被杀死,自动转为后台任务继续运行
|
|
1299
|
+
* 4. 返回 backgroundTaskId,用户可通过 TaskOutput 工具查询进度
|
|
1300
|
+
*
|
|
1301
|
+
* 官方关键代码:
|
|
1302
|
+
* static #G(A) { if(A.#$ && A.#_) A.#_(A.background.bind(A)); else A.#P(Q94); }
|
|
1303
|
+
* background(A) { this.#q=A; this.#A="backgrounded"; this.#Z(); return {stdoutStream, stderrStream}; }
|
|
1304
|
+
*/
|
|
1305
|
+
async executeWithTimeoutToBackground(command, timeout, input, toolUseId) {
|
|
1306
|
+
const startTime = Date.now();
|
|
1307
|
+
const cwd = getCurrentCwd();
|
|
1308
|
+
// 获取 shell 配置并 spawn 进程(与 executeBackground 保持一致)
|
|
1309
|
+
const shellConfig = getShellConfig();
|
|
1310
|
+
const proc = spawn(shellConfig.shell, [...shellConfig.args, command], {
|
|
1311
|
+
cwd,
|
|
1312
|
+
env: { ...process.env },
|
|
1313
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
1314
|
+
detached: !IS_WINDOWS,
|
|
1315
|
+
windowsHide: IS_WINDOWS,
|
|
1316
|
+
});
|
|
1317
|
+
let stdout = '';
|
|
1318
|
+
let stderr = '';
|
|
1319
|
+
let processExited = false;
|
|
1320
|
+
// 缓冲区:攒一段时间后批量推送,避免高频 data 事件压垮 WebSocket/React
|
|
1321
|
+
let outputBuffer = '';
|
|
1322
|
+
let flushTimer = null;
|
|
1323
|
+
const FLUSH_INTERVAL = 150; // ms
|
|
1324
|
+
const flushOutputBuffer = () => {
|
|
1325
|
+
flushTimer = null;
|
|
1326
|
+
if (outputBuffer && broadcastMessage && toolUseId) {
|
|
1327
|
+
broadcastMessage({
|
|
1328
|
+
type: 'bash:foreground-output',
|
|
1329
|
+
payload: { toolUseId, data: outputBuffer, stream: 'stdout' },
|
|
1330
|
+
});
|
|
1331
|
+
outputBuffer = '';
|
|
1332
|
+
}
|
|
1333
|
+
};
|
|
1334
|
+
const bufferAndBroadcast = (text) => {
|
|
1335
|
+
outputBuffer += text;
|
|
1336
|
+
if (!flushTimer) {
|
|
1337
|
+
flushTimer = setTimeout(flushOutputBuffer, FLUSH_INTERVAL);
|
|
1338
|
+
}
|
|
1339
|
+
};
|
|
1340
|
+
const stdoutHandler = (data) => {
|
|
1341
|
+
const text = data.toString();
|
|
1342
|
+
stdout += text;
|
|
1343
|
+
bufferAndBroadcast(text);
|
|
1344
|
+
};
|
|
1345
|
+
const stderrHandler = (data) => {
|
|
1346
|
+
const text = data.toString();
|
|
1347
|
+
stderr += text;
|
|
1348
|
+
bufferAndBroadcast(text);
|
|
1349
|
+
};
|
|
1350
|
+
proc.stdout?.on('data', stdoutHandler);
|
|
1351
|
+
proc.stderr?.on('data', stderrHandler);
|
|
1352
|
+
// 进程完成的 Promise
|
|
1353
|
+
const processComplete = new Promise((resolve) => {
|
|
1354
|
+
proc.on('close', (code) => {
|
|
1355
|
+
processExited = true;
|
|
1356
|
+
// 刷新残余缓冲
|
|
1357
|
+
if (flushTimer) {
|
|
1358
|
+
clearTimeout(flushTimer);
|
|
1359
|
+
flushOutputBuffer();
|
|
1360
|
+
}
|
|
1361
|
+
resolve({ code });
|
|
1362
|
+
});
|
|
1363
|
+
proc.on('error', (err) => {
|
|
1364
|
+
processExited = true;
|
|
1365
|
+
if (flushTimer) {
|
|
1366
|
+
clearTimeout(flushTimer);
|
|
1367
|
+
flushOutputBuffer();
|
|
1368
|
+
}
|
|
1369
|
+
resolve({ code: null, error: err.message });
|
|
1370
|
+
});
|
|
1371
|
+
});
|
|
1372
|
+
// 超时 Promise
|
|
1373
|
+
const timeoutPromise = new Promise((resolve) => {
|
|
1374
|
+
setTimeout(() => resolve('timeout'), timeout);
|
|
1375
|
+
});
|
|
1376
|
+
// 竞争:进程完成 vs 超时
|
|
1377
|
+
const raceResult = await Promise.race([processComplete, timeoutPromise]);
|
|
1378
|
+
if (raceResult !== 'timeout') {
|
|
1379
|
+
// 进程在超时前完成 → 正常返回结果
|
|
1380
|
+
const duration = Date.now() - startTime;
|
|
1381
|
+
let output = stdout + (stderr ? `\nSTDERR:\n${stderr}` : '');
|
|
1382
|
+
output = truncateString(output, MAX_OUTPUT_LENGTH);
|
|
1383
|
+
const elapsedTimeSeconds = Math.round(duration / 1000 * 10) / 10;
|
|
1384
|
+
const result = {
|
|
1385
|
+
success: raceResult.code === 0,
|
|
1386
|
+
output,
|
|
1387
|
+
stdout,
|
|
1388
|
+
stderr,
|
|
1389
|
+
exitCode: raceResult.code ?? 1,
|
|
1390
|
+
error: raceResult.error,
|
|
1391
|
+
elapsedTimeSeconds,
|
|
1392
|
+
timeoutMs: timeout,
|
|
1393
|
+
};
|
|
1394
|
+
await runPostToolUseHooks('Bash', input, result.output || '');
|
|
1395
|
+
recordAudit({
|
|
1396
|
+
timestamp: Date.now(),
|
|
1397
|
+
command,
|
|
1398
|
+
cwd,
|
|
1399
|
+
sandboxed: false,
|
|
1400
|
+
success: result.success,
|
|
1401
|
+
exitCode: result.exitCode,
|
|
1402
|
+
duration,
|
|
1403
|
+
outputSize: (result.output || '').length,
|
|
1404
|
+
background: false,
|
|
1405
|
+
});
|
|
1406
|
+
return result;
|
|
1407
|
+
}
|
|
1408
|
+
// === 超时触发:自动转后台 ===
|
|
1409
|
+
// 进程有可能在超时竞争中刚好退出(边界情况)
|
|
1410
|
+
if (processExited) {
|
|
1411
|
+
const exitResult = await processComplete;
|
|
1412
|
+
const duration = Date.now() - startTime;
|
|
1413
|
+
let output = stdout + (stderr ? `\nSTDERR:\n${stderr}` : '');
|
|
1414
|
+
output = truncateString(output, MAX_OUTPUT_LENGTH);
|
|
1415
|
+
const result = {
|
|
1416
|
+
success: exitResult.code === 0,
|
|
1417
|
+
output,
|
|
1418
|
+
stdout,
|
|
1419
|
+
stderr,
|
|
1420
|
+
exitCode: exitResult.code ?? 1,
|
|
1421
|
+
error: exitResult.error,
|
|
1422
|
+
elapsedTimeSeconds: Math.round(duration / 1000 * 10) / 10,
|
|
1423
|
+
timeoutMs: timeout,
|
|
1424
|
+
};
|
|
1425
|
+
await runPostToolUseHooks('Bash', input, result.output || '');
|
|
1426
|
+
recordAudit({
|
|
1427
|
+
timestamp: Date.now(),
|
|
1428
|
+
command,
|
|
1429
|
+
cwd,
|
|
1430
|
+
sandboxed: false,
|
|
1431
|
+
success: result.success,
|
|
1432
|
+
exitCode: result.exitCode,
|
|
1433
|
+
duration,
|
|
1434
|
+
outputSize: (result.output || '').length,
|
|
1435
|
+
background: false,
|
|
1436
|
+
});
|
|
1437
|
+
return result;
|
|
1438
|
+
}
|
|
1439
|
+
// 进程仍在运行 → 转为后台任务(不杀死进程)
|
|
1440
|
+
const taskId = uuidv4();
|
|
1441
|
+
const outputFile = getTaskOutputPath(taskId);
|
|
1442
|
+
const outputStream = fs.createWriteStream(outputFile, { flags: 'w' });
|
|
1443
|
+
// 写入已捕获的输出到文件
|
|
1444
|
+
const existingOutput = stdout + (stderr ? `\nSTDERR:\n${stderr}` : '');
|
|
1445
|
+
if (existingOutput) {
|
|
1446
|
+
outputStream.write(existingOutput);
|
|
1447
|
+
}
|
|
1448
|
+
// 创建后台任务状态
|
|
1449
|
+
const taskState = {
|
|
1450
|
+
taskId,
|
|
1451
|
+
process: proc,
|
|
1452
|
+
output: existingOutput ? [existingOutput] : [],
|
|
1453
|
+
outputFile,
|
|
1454
|
+
outputStream,
|
|
1455
|
+
status: 'running',
|
|
1456
|
+
startTime,
|
|
1457
|
+
maxRuntime: BACKGROUND_SHELL_MAX_RUNTIME,
|
|
1458
|
+
outputSize: existingOutput.length,
|
|
1459
|
+
command,
|
|
1460
|
+
lastReadPosition: 0,
|
|
1461
|
+
};
|
|
1462
|
+
// 替换 stdout/stderr 监听器:将后续输出重定向到文件
|
|
1463
|
+
proc.stdout?.removeListener('data', stdoutHandler);
|
|
1464
|
+
proc.stderr?.removeListener('data', stderrHandler);
|
|
1465
|
+
proc.stdout?.on('data', (data) => {
|
|
1466
|
+
const text = data.toString();
|
|
1467
|
+
taskState.output.push(text);
|
|
1468
|
+
taskState.outputSize += text.length;
|
|
1469
|
+
if (taskState.outputSize <= MAX_BACKGROUND_OUTPUT) {
|
|
1470
|
+
outputStream.write(text);
|
|
1471
|
+
}
|
|
1472
|
+
else if (taskState.output[taskState.output.length - 1] !== '[Output limit reached]') {
|
|
1473
|
+
outputStream.write('\n[Output limit reached]\n');
|
|
1474
|
+
taskState.output.push('[Output limit reached]');
|
|
1475
|
+
}
|
|
1476
|
+
// 推送到 WebUI(复用已有的 bash:task-output 通道)
|
|
1477
|
+
if (broadcastMessage) {
|
|
1478
|
+
broadcastMessage({
|
|
1479
|
+
type: 'bash:task-output',
|
|
1480
|
+
payload: { taskId, data: text, stream: 'stdout' },
|
|
1481
|
+
});
|
|
1482
|
+
}
|
|
1483
|
+
});
|
|
1484
|
+
proc.stderr?.on('data', (data) => {
|
|
1485
|
+
const text = `STDERR: ${data.toString()}`;
|
|
1486
|
+
taskState.output.push(text);
|
|
1487
|
+
taskState.outputSize += text.length;
|
|
1488
|
+
if (taskState.outputSize <= MAX_BACKGROUND_OUTPUT) {
|
|
1489
|
+
outputStream.write(text);
|
|
1490
|
+
}
|
|
1491
|
+
// 推送到 WebUI
|
|
1492
|
+
if (broadcastMessage) {
|
|
1493
|
+
broadcastMessage({
|
|
1494
|
+
type: 'bash:task-output',
|
|
1495
|
+
payload: { taskId, data: text, stream: 'stderr' },
|
|
1496
|
+
});
|
|
1497
|
+
}
|
|
1498
|
+
});
|
|
1499
|
+
// 后台任务的进程生命周期管理
|
|
1500
|
+
proc.on('close', (code) => {
|
|
1501
|
+
if (taskState.timeout)
|
|
1502
|
+
clearTimeout(taskState.timeout);
|
|
1503
|
+
taskState.status = code === 0 ? 'completed' : 'failed';
|
|
1504
|
+
taskState.exitCode = code ?? undefined;
|
|
1505
|
+
taskState.endTime = Date.now();
|
|
1506
|
+
outputStream.end();
|
|
1507
|
+
// 同步更新磁盘元数据
|
|
1508
|
+
updateTaskMeta(taskId, {
|
|
1509
|
+
status: taskState.status,
|
|
1510
|
+
exitCode: taskState.exitCode,
|
|
1511
|
+
endTime: taskState.endTime,
|
|
1512
|
+
});
|
|
1513
|
+
const duration = Date.now() - startTime;
|
|
1514
|
+
recordAudit({
|
|
1515
|
+
timestamp: Date.now(),
|
|
1516
|
+
command,
|
|
1517
|
+
cwd,
|
|
1518
|
+
sandboxed: false,
|
|
1519
|
+
success: code === 0,
|
|
1520
|
+
exitCode: code ?? undefined,
|
|
1521
|
+
duration,
|
|
1522
|
+
outputSize: taskState.outputSize,
|
|
1523
|
+
background: true,
|
|
1524
|
+
});
|
|
1525
|
+
});
|
|
1526
|
+
proc.on('error', (err) => {
|
|
1527
|
+
taskState.status = 'failed';
|
|
1528
|
+
taskState.endTime = Date.now();
|
|
1529
|
+
outputStream.write(`\nERROR: ${err.message}\n`);
|
|
1530
|
+
outputStream.end();
|
|
1531
|
+
updateTaskMeta(taskId, { status: 'failed', endTime: taskState.endTime });
|
|
1532
|
+
});
|
|
1533
|
+
// 设置后台最大运行时间超时
|
|
1534
|
+
taskState.timeout = setTimeout(() => {
|
|
1535
|
+
if (taskState.status === 'running') {
|
|
1536
|
+
console.warn(`[Bash] Background task ${taskId} exceeded max runtime, terminating...`);
|
|
1537
|
+
try {
|
|
1538
|
+
proc.kill('SIGTERM');
|
|
1539
|
+
setTimeout(() => {
|
|
1540
|
+
if (taskState.status === 'running') {
|
|
1541
|
+
proc.kill('SIGKILL');
|
|
1542
|
+
}
|
|
1543
|
+
}, 1000);
|
|
1544
|
+
}
|
|
1545
|
+
catch (err) {
|
|
1546
|
+
console.error(`Failed to kill task ${taskId}:`, err);
|
|
1547
|
+
}
|
|
1548
|
+
}
|
|
1549
|
+
}, BACKGROUND_SHELL_MAX_RUNTIME);
|
|
1550
|
+
backgroundTasks.set(taskId, taskState);
|
|
1551
|
+
// 持久化元数据到磁盘(进程重启后 TaskOutput 可通过 fallback 恢复)
|
|
1552
|
+
saveTaskMeta(taskId, {
|
|
1553
|
+
command,
|
|
1554
|
+
startTime,
|
|
1555
|
+
outputFile,
|
|
1556
|
+
status: 'running',
|
|
1557
|
+
});
|
|
1558
|
+
// 记录审计日志
|
|
1559
|
+
const duration = Date.now() - startTime;
|
|
1560
|
+
const elapsedSeconds = Math.round(duration / 1000 * 10) / 10;
|
|
1561
|
+
recordAudit({
|
|
1562
|
+
timestamp: Date.now(),
|
|
1563
|
+
command,
|
|
1564
|
+
cwd,
|
|
1565
|
+
sandboxed: false,
|
|
1566
|
+
success: true,
|
|
1567
|
+
duration,
|
|
1568
|
+
outputSize: existingOutput.length,
|
|
1569
|
+
background: true,
|
|
1570
|
+
});
|
|
1571
|
+
// 返回结果(与官方格式对齐)
|
|
1572
|
+
// 官方: { stdout: "", stderr: "", code: 0, interrupted: false, backgroundTaskId: M }
|
|
1573
|
+
const statusMsg = `Command timed out after ${elapsedSeconds}s and was automatically moved to background execution.
|
|
1574
|
+
<task-id>${taskId}</task-id>
|
|
1575
|
+
<task-type>bash</task-type>
|
|
1576
|
+
<output-file>${outputFile}</output-file>
|
|
1577
|
+
<status>running</status>
|
|
1578
|
+
<summary>Command "${command.substring(0, 50)}${command.length > 50 ? '...' : ''}" moved to background after timeout.</summary>
|
|
1579
|
+
Use TaskOutput tool with task_id="${taskId}" to retrieve the output.`;
|
|
1580
|
+
return {
|
|
1581
|
+
success: true,
|
|
1582
|
+
output: statusMsg,
|
|
1583
|
+
task_id: taskId,
|
|
1584
|
+
shell_id: taskId,
|
|
1585
|
+
bash_id: taskId,
|
|
1586
|
+
backgroundTaskId: taskId,
|
|
1587
|
+
elapsedTimeSeconds: elapsedSeconds,
|
|
1588
|
+
timeoutMs: timeout,
|
|
1589
|
+
};
|
|
1590
|
+
}
|
|
1591
|
+
}
|
|
1592
|
+
export class KillShellTool extends BaseTool {
|
|
1593
|
+
name = 'TaskStop';
|
|
1594
|
+
shouldDefer = true;
|
|
1595
|
+
searchHint = 'stop process, kill background task, terminate shell, cancel running command';
|
|
1596
|
+
description = `
|
|
1597
|
+
- Kills a running background bash shell by its ID
|
|
1598
|
+
- Takes a shell_id parameter identifying the shell to kill
|
|
1599
|
+
- Returns a success or failure status
|
|
1600
|
+
- Use this tool when you need to terminate a long-running shell
|
|
1601
|
+
- Shell IDs can be found using the /tasks command`.trim();
|
|
1602
|
+
getInputSchema() {
|
|
1603
|
+
return {
|
|
1604
|
+
type: 'object',
|
|
1605
|
+
properties: {
|
|
1606
|
+
shell_id: {
|
|
1607
|
+
type: 'string',
|
|
1608
|
+
description: 'The ID of the background shell to kill',
|
|
1609
|
+
},
|
|
1610
|
+
},
|
|
1611
|
+
required: ['shell_id'],
|
|
1612
|
+
};
|
|
1613
|
+
}
|
|
1614
|
+
async execute(input) {
|
|
1615
|
+
const task = backgroundTasks.get(input.shell_id);
|
|
1616
|
+
if (!task) {
|
|
1617
|
+
return { success: false, error: t('bash.shellNotFound', { id: input.shell_id }) };
|
|
1618
|
+
}
|
|
1619
|
+
try {
|
|
1620
|
+
task.process.kill('SIGTERM');
|
|
1621
|
+
// 关闭输出流
|
|
1622
|
+
task.outputStream?.end();
|
|
1623
|
+
// 等待一秒,如果还在运行则强制杀死
|
|
1624
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
1625
|
+
if (task.status === 'running') {
|
|
1626
|
+
task.process.kill('SIGKILL');
|
|
1627
|
+
}
|
|
1628
|
+
backgroundTasks.delete(input.shell_id);
|
|
1629
|
+
// v2.1.30: 显示被停止任务的命令/描述,而不是通用消息
|
|
1630
|
+
return {
|
|
1631
|
+
success: true,
|
|
1632
|
+
output: t('bash.taskStopped', { id: input.shell_id, command: task.command }),
|
|
1633
|
+
};
|
|
1634
|
+
}
|
|
1635
|
+
catch (err) {
|
|
1636
|
+
return { success: false, error: t('bash.taskStopFailed', { error: err }) };
|
|
1637
|
+
}
|
|
1638
|
+
}
|
|
1639
|
+
}
|
|
1640
|
+
/**
|
|
1641
|
+
* Kill a background task by ID (extracted from KillShellTool for reuse by TaskOutputTool)
|
|
1642
|
+
*/
|
|
1643
|
+
export async function killBackgroundTask(taskId) {
|
|
1644
|
+
const task = backgroundTasks.get(taskId);
|
|
1645
|
+
if (!task) {
|
|
1646
|
+
return { success: false, error: t('bash.shellNotFound', { id: taskId }) };
|
|
1647
|
+
}
|
|
1648
|
+
try {
|
|
1649
|
+
task.process.kill('SIGTERM');
|
|
1650
|
+
task.outputStream?.end();
|
|
1651
|
+
await new Promise((resolve) => setTimeout(resolve, 1000));
|
|
1652
|
+
if (task.status === 'running') {
|
|
1653
|
+
task.process.kill('SIGKILL');
|
|
1654
|
+
}
|
|
1655
|
+
backgroundTasks.delete(taskId);
|
|
1656
|
+
return {
|
|
1657
|
+
success: true,
|
|
1658
|
+
output: t('bash.taskStopped', { id: taskId, command: task.command }),
|
|
1659
|
+
};
|
|
1660
|
+
}
|
|
1661
|
+
catch (err) {
|
|
1662
|
+
return { success: false, error: t('bash.taskStopFailed', { error: err }) };
|
|
1663
|
+
}
|
|
1664
|
+
}
|
|
1665
|
+
/**
|
|
1666
|
+
* 获取所有后台任务的状态
|
|
1667
|
+
*/
|
|
1668
|
+
export function getBackgroundTasks() {
|
|
1669
|
+
const result = [];
|
|
1670
|
+
Array.from(backgroundTasks.entries()).forEach(([id, task]) => {
|
|
1671
|
+
result.push({
|
|
1672
|
+
id,
|
|
1673
|
+
status: task.status,
|
|
1674
|
+
duration: Date.now() - task.startTime,
|
|
1675
|
+
});
|
|
1676
|
+
});
|
|
1677
|
+
return result;
|
|
1678
|
+
}
|
|
1679
|
+
/**
|
|
1680
|
+
* 向后兼容:获取所有后台 shell 的状态
|
|
1681
|
+
*/
|
|
1682
|
+
export function getBackgroundShells() {
|
|
1683
|
+
return getBackgroundTasks();
|
|
1684
|
+
}
|
|
1685
|
+
/**
|
|
1686
|
+
* 清理已完成的后台任务
|
|
1687
|
+
*/
|
|
1688
|
+
export function cleanupCompletedTasks() {
|
|
1689
|
+
let cleaned = 0;
|
|
1690
|
+
Array.from(backgroundTasks.entries()).forEach(([id, task]) => {
|
|
1691
|
+
if (task.status !== 'running') {
|
|
1692
|
+
// 清理超时定时器
|
|
1693
|
+
if (task.timeout) {
|
|
1694
|
+
clearTimeout(task.timeout);
|
|
1695
|
+
}
|
|
1696
|
+
// 关闭输出流
|
|
1697
|
+
task.outputStream?.end();
|
|
1698
|
+
backgroundTasks.delete(id);
|
|
1699
|
+
cleaned++;
|
|
1700
|
+
}
|
|
1701
|
+
});
|
|
1702
|
+
return cleaned;
|
|
1703
|
+
}
|
|
1704
|
+
/**
|
|
1705
|
+
* 向后兼容:清理已完成的后台 shell
|
|
1706
|
+
*/
|
|
1707
|
+
export function cleanupCompletedShells() {
|
|
1708
|
+
return cleanupCompletedTasks();
|
|
1709
|
+
}
|
|
1710
|
+
/**
|
|
1711
|
+
* 获取审计日志
|
|
1712
|
+
*/
|
|
1713
|
+
export function getAuditLogs(options) {
|
|
1714
|
+
let logs = [...auditLogs];
|
|
1715
|
+
// 按时间筛选
|
|
1716
|
+
if (options?.since) {
|
|
1717
|
+
logs = logs.filter((log) => log.timestamp >= options.since);
|
|
1718
|
+
}
|
|
1719
|
+
// 按成功状态筛选
|
|
1720
|
+
if (options?.success !== undefined) {
|
|
1721
|
+
logs = logs.filter((log) => log.success === options.success);
|
|
1722
|
+
}
|
|
1723
|
+
// 限制数量
|
|
1724
|
+
if (options?.limit) {
|
|
1725
|
+
logs = logs.slice(-options.limit);
|
|
1726
|
+
}
|
|
1727
|
+
return logs;
|
|
1728
|
+
}
|
|
1729
|
+
/**
|
|
1730
|
+
* 获取审计统计
|
|
1731
|
+
*/
|
|
1732
|
+
export function getAuditStats() {
|
|
1733
|
+
const total = auditLogs.length;
|
|
1734
|
+
const success = auditLogs.filter((log) => log.success).length;
|
|
1735
|
+
const failed = total - success;
|
|
1736
|
+
const sandboxed = auditLogs.filter((log) => log.sandboxed).length;
|
|
1737
|
+
const background = auditLogs.filter((log) => log.background).length;
|
|
1738
|
+
const totalDuration = auditLogs.reduce((sum, log) => sum + log.duration, 0);
|
|
1739
|
+
const avgDuration = total > 0 ? totalDuration / total : 0;
|
|
1740
|
+
const totalOutputSize = auditLogs.reduce((sum, log) => sum + log.outputSize, 0);
|
|
1741
|
+
return {
|
|
1742
|
+
total,
|
|
1743
|
+
success,
|
|
1744
|
+
failed,
|
|
1745
|
+
sandboxed,
|
|
1746
|
+
background,
|
|
1747
|
+
avgDuration,
|
|
1748
|
+
totalOutputSize,
|
|
1749
|
+
};
|
|
1750
|
+
}
|
|
1751
|
+
/**
|
|
1752
|
+
* 清除审计日志
|
|
1753
|
+
*/
|
|
1754
|
+
export function clearAuditLogs() {
|
|
1755
|
+
const count = auditLogs.length;
|
|
1756
|
+
auditLogs.length = 0;
|
|
1757
|
+
return count;
|
|
1758
|
+
}
|
|
1759
|
+
/**
|
|
1760
|
+
* 列出所有后台任务详细信息
|
|
1761
|
+
*/
|
|
1762
|
+
export function listBackgroundTasks() {
|
|
1763
|
+
const result = [];
|
|
1764
|
+
Array.from(backgroundTasks.entries()).forEach(([id, task]) => {
|
|
1765
|
+
result.push({
|
|
1766
|
+
id,
|
|
1767
|
+
command: task.command.substring(0, 100) + (task.command.length > 100 ? '...' : ''),
|
|
1768
|
+
status: task.status,
|
|
1769
|
+
duration: Date.now() - task.startTime,
|
|
1770
|
+
outputSize: task.outputSize,
|
|
1771
|
+
maxRuntime: task.maxRuntime,
|
|
1772
|
+
});
|
|
1773
|
+
});
|
|
1774
|
+
return result;
|
|
1775
|
+
}
|
|
1776
|
+
/**
|
|
1777
|
+
* 向后兼容:列出所有后台 shell 详细信息
|
|
1778
|
+
*/
|
|
1779
|
+
export function listBackgroundShells() {
|
|
1780
|
+
return listBackgroundTasks();
|
|
1781
|
+
}
|
|
1782
|
+
/**
|
|
1783
|
+
* 强制终止所有后台任务
|
|
1784
|
+
*/
|
|
1785
|
+
export function killAllBackgroundTasks() {
|
|
1786
|
+
let killed = 0;
|
|
1787
|
+
const entries = Array.from(backgroundTasks.entries());
|
|
1788
|
+
for (const [id, task] of entries) {
|
|
1789
|
+
try {
|
|
1790
|
+
task.process.kill('SIGTERM');
|
|
1791
|
+
if (task.timeout) {
|
|
1792
|
+
clearTimeout(task.timeout);
|
|
1793
|
+
}
|
|
1794
|
+
// 关闭输出流
|
|
1795
|
+
task.outputStream?.end();
|
|
1796
|
+
task.status = 'failed';
|
|
1797
|
+
killed++;
|
|
1798
|
+
}
|
|
1799
|
+
catch (err) {
|
|
1800
|
+
console.error(`Failed to kill task ${id}:`, err);
|
|
1801
|
+
}
|
|
1802
|
+
}
|
|
1803
|
+
// 延迟 SIGKILL,确保顽固进程被强杀(只清理本次 entries,不影响新建任务)
|
|
1804
|
+
setTimeout(() => {
|
|
1805
|
+
for (const [id, task] of entries) {
|
|
1806
|
+
try {
|
|
1807
|
+
if (!task.process.killed) {
|
|
1808
|
+
task.process.kill('SIGKILL');
|
|
1809
|
+
}
|
|
1810
|
+
}
|
|
1811
|
+
catch { /* ignore */ }
|
|
1812
|
+
backgroundTasks.delete(id);
|
|
1813
|
+
}
|
|
1814
|
+
}, 1000);
|
|
1815
|
+
return killed;
|
|
1816
|
+
}
|
|
1817
|
+
/**
|
|
1818
|
+
* 向后兼容:强制终止所有后台 shell
|
|
1819
|
+
*/
|
|
1820
|
+
export function killAllBackgroundShells() {
|
|
1821
|
+
return killAllBackgroundTasks();
|
|
1822
|
+
}
|
|
1823
|
+
//# sourceMappingURL=bash.js.map
|