@cjhyy/code-shell-core 0.5.0-rc.2 → 0.6.0-rc.10
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 +3 -0
- package/dist/agent/agent-definition-registry.js +3 -1
- package/dist/agent/agent-definition.d.ts +15 -0
- package/dist/agent/agent-definition.js +27 -3
- package/dist/arena/context/context-tools.js +47 -4
- package/dist/arena/ledger.js +9 -1
- package/dist/arena/strategies/utils.d.ts +1 -4
- package/dist/arena/strategies/utils.js +7 -84
- package/dist/automation/cron-expr.d.ts +10 -0
- package/dist/automation/cron-expr.js +23 -5
- package/dist/automation/runner.d.ts +21 -4
- package/dist/automation/runner.js +48 -12
- package/dist/automation/scheduler.d.ts +38 -0
- package/dist/automation/scheduler.js +89 -12
- package/dist/automation/store.js +5 -2
- package/dist/capability-control/disabled-lists.d.ts +25 -0
- package/dist/capability-control/disabled-lists.js +57 -0
- package/dist/capability-control/overlay.d.ts +15 -0
- package/dist/capability-control/overlay.js +27 -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 +15 -1
- package/dist/cli/agent-server-stdio.js +115 -17
- package/dist/cli/agent-server-tcp.js +40 -26
- package/dist/context/compaction.d.ts +86 -0
- package/dist/context/compaction.js +279 -0
- package/dist/context/manager.d.ts +18 -0
- package/dist/context/manager.js +181 -48
- package/dist/context/token-counter.js +13 -0
- 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/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/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 +280 -141
- package/dist/engine/engine.js +1193 -245
- package/dist/engine/friendly-error.d.ts +18 -0
- package/dist/engine/friendly-error.js +63 -0
- package/dist/engine/goal.d.ts +145 -0
- package/dist/engine/goal.js +144 -0
- package/dist/engine/image-policy.d.ts +13 -0
- package/dist/engine/image-policy.js +24 -0
- package/dist/engine/model-connections-pool.d.ts +17 -0
- package/dist/engine/model-connections-pool.js +67 -0
- package/dist/engine/model-facade.d.ts +10 -0
- package/dist/engine/model-facade.js +15 -0
- package/dist/engine/patch-orphaned-tools.js +3 -0
- package/dist/engine/query.js +2 -0
- package/dist/engine/resolve-llm-config.d.ts +16 -0
- package/dist/engine/resolve-llm-config.js +44 -0
- package/dist/engine/runtime.d.ts +2 -0
- package/dist/engine/runtime.js +27 -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-usage.d.ts +31 -0
- package/dist/engine/session-usage.js +81 -0
- package/dist/engine/steer-queue.d.ts +33 -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 -4
- package/dist/engine/turn-loop.js +432 -54
- 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/utils.d.ts +12 -0
- package/dist/git/utils.js +38 -6
- package/dist/git/worktree.d.ts +48 -0
- package/dist/git/worktree.js +86 -10
- package/dist/hooks/goal-stop-hook.d.ts +28 -0
- package/dist/hooks/goal-stop-hook.js +186 -9
- package/dist/hooks/registry.d.ts +8 -0
- package/dist/hooks/registry.js +19 -0
- package/dist/hooks/shell-runner.js +10 -21
- package/dist/index.d.ts +51 -7
- package/dist/index.js +62 -5
- package/dist/llm/capabilities/param-specs.d.ts +14 -0
- package/dist/llm/capabilities/param-specs.js +62 -0
- package/dist/llm/capabilities/rules.js +5 -1
- package/dist/llm/capabilities/types.d.ts +10 -0
- package/dist/llm/client-base.d.ts +28 -1
- package/dist/llm/client-base.js +119 -13
- package/dist/llm/model-cache.js +4 -2
- package/dist/llm/model-pool.d.ts +21 -0
- package/dist/llm/model-pool.js +21 -1
- package/dist/llm/provider-auth.d.ts +41 -0
- package/dist/llm/provider-auth.js +76 -0
- package/dist/llm/provider-catalog.d.ts +4 -0
- package/dist/llm/providers/anthropic.js +64 -14
- package/dist/llm/providers/openai.d.ts +36 -0
- package/dist/llm/providers/openai.js +257 -51
- package/dist/llm/reasoning-setting.d.ts +3 -3
- package/dist/llm/reasoning-setting.js +9 -1
- package/dist/llm/stream-watchdog.js +5 -1
- package/dist/llm/token-counter.js +9 -2
- package/dist/llm/types.d.ts +4 -0
- package/dist/logging/sanitize-messages.js +22 -0
- package/dist/lsp/manager.d.ts +1 -1
- package/dist/lsp/manager.js +40 -10
- package/dist/model-catalog/builtin.d.ts +12 -0
- package/dist/model-catalog/builtin.js +412 -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 +61 -326
- package/dist/plugins/gitOps.d.ts +19 -0
- package/dist/plugins/gitOps.js +73 -4
- package/dist/plugins/installer/checkUpdate.d.ts +16 -0
- package/dist/plugins/installer/checkUpdate.js +32 -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 +5 -2
- package/dist/plugins/installer/codex/convertMcp.js +45 -5
- package/dist/plugins/installer/install.js +25 -1
- package/dist/plugins/installer/installFromArchive.d.ts +43 -0
- package/dist/plugins/installer/installFromArchive.js +134 -0
- package/dist/plugins/installer/installFromSource.js +8 -2
- package/dist/plugins/installer/loadPluginAgents.js +6 -2
- package/dist/plugins/installer/loadPluginMcp.d.ts +9 -2
- package/dist/plugins/installer/loadPluginMcp.js +35 -2
- package/dist/plugins/installer/pruneDisabled.d.ts +24 -0
- package/dist/plugins/installer/pruneDisabled.js +73 -0
- package/dist/plugins/installer/types.d.ts +5 -2
- package/dist/plugins/installer/types.js +1 -0
- package/dist/plugins/installer/uninstall.js +4 -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 +14 -0
- package/dist/plugins/installer/update.js +53 -21
- package/dist/plugins/loadPluginHooks.d.ts +47 -1
- package/dist/plugins/loadPluginHooks.js +73 -1
- package/dist/plugins/marketplaceManager.d.ts +7 -0
- package/dist/plugins/marketplaceManager.js +20 -0
- package/dist/plugins/pluginCommandHook.js +4 -18
- package/dist/plugins/pluginContent.d.ts +30 -0
- package/dist/plugins/pluginContent.js +83 -0
- package/dist/plugins/pluginInstaller.d.ts +13 -0
- package/dist/plugins/pluginInstaller.js +42 -8
- package/dist/plugins/schemas.js +1 -0
- package/dist/plugins/types.d.ts +6 -0
- package/dist/preset/index.d.ts +11 -1
- package/dist/preset/index.js +115 -6
- package/dist/product/types.d.ts +1 -1
- package/dist/prompt/composer.d.ts +32 -0
- package/dist/prompt/composer.js +75 -21
- package/dist/prompt/instruction-scanner.js +5 -3
- package/dist/prompt/section-loader.js +1 -0
- package/dist/prompt/sections/base.md +2 -0
- package/dist/prompt/sections/browser.md +10 -0
- package/dist/prompt/sections/coding.md +4 -0
- package/dist/protocol/chat-session-manager.d.ts +9 -2
- package/dist/protocol/chat-session-manager.js +38 -0
- package/dist/protocol/chat-session.d.ts +69 -1
- package/dist/protocol/chat-session.js +102 -4
- package/dist/protocol/client.d.ts +31 -0
- package/dist/protocol/client.js +44 -0
- package/dist/protocol/server.d.ts +120 -7
- package/dist/protocol/server.js +753 -51
- package/dist/protocol/transport.js +3 -2
- package/dist/protocol/types.d.ts +60 -0
- package/dist/protocol/types.js +16 -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/review/review-prompt.d.ts +28 -0
- package/dist/review/review-prompt.js +81 -0
- package/dist/run/FileRunStore.js +8 -3
- package/dist/run/RunApprovalBackend.js +25 -5
- package/dist/run/RunManager.d.ts +12 -0
- package/dist/run/RunManager.js +35 -0
- package/dist/run/factory.d.ts +1 -1
- package/dist/runtime/background-shell.d.ts +139 -0
- package/dist/runtime/background-shell.js +509 -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 +98 -39
- package/dist/runtime/spawn-common.d.ts +159 -0
- package/dist/runtime/spawn-common.js +404 -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/diagnostics.d.ts +1 -2
- package/dist/services/diagnostics.js +12 -7
- 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 -50
- package/dist/services/session-memory.js +24 -12
- package/dist/session/file-history.d.ts +124 -1
- package/dist/session/file-history.js +222 -6
- package/dist/session/memory.d.ts +116 -2
- package/dist/session/memory.js +250 -28
- package/dist/session/session-manager.d.ts +40 -0
- package/dist/session/session-manager.js +119 -3
- package/dist/session/simple-diff.d.ts +23 -0
- package/dist/session/simple-diff.js +84 -0
- package/dist/session/transcript.d.ts +29 -1
- package/dist/session/transcript.js +56 -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 +9 -2
- package/dist/settings/disk-defaults.js +11 -2
- package/dist/settings/feature-flags.d.ts +64 -0
- package/dist/settings/feature-flags.js +61 -0
- package/dist/settings/manager.d.ts +68 -1
- package/dist/settings/manager.js +266 -29
- package/dist/settings/migrate-config.d.ts +45 -0
- package/dist/settings/migrate-config.js +125 -0
- package/dist/settings/schema-export.d.ts +25 -0
- package/dist/settings/schema-export.js +38 -0
- package/dist/settings/schema.d.ts +1186 -771
- package/dist/settings/schema.js +268 -97
- 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/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 +12 -0
- package/dist/tool-system/builtin/agent-registry.js +8 -0
- package/dist/tool-system/builtin/agent.d.ts +21 -1
- package/dist/tool-system/builtin/agent.js +489 -42
- 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 +0 -15
- 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 +101 -64
- 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/config.js +7 -0
- package/dist/tool-system/builtin/cron.d.ts +7 -0
- package/dist/tool-system/builtin/cron.js +64 -4
- 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 +104 -0
- package/dist/tool-system/builtin/edit.js +20 -16
- 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 +35 -0
- package/dist/tool-system/builtin/generate-image.js +278 -50
- package/dist/tool-system/builtin/generate-video.d.ts +55 -0
- package/dist/tool-system/builtin/generate-video.js +364 -0
- package/dist/tool-system/builtin/glob.js +0 -7
- package/dist/tool-system/builtin/grep.d.ts +9 -0
- package/dist/tool-system/builtin/grep.js +106 -11
- 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 +10 -2
- package/dist/tool-system/builtin/index.js +251 -27
- 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.js +0 -7
- package/dist/tool-system/builtin/powershell.js +8 -2
- package/dist/tool-system/builtin/read.js +10 -10
- 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 +8 -2
- package/dist/tool-system/builtin/tool-search.js +25 -7
- 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/web-fetch.js +12 -2
- package/dist/tool-system/builtin/web-search.js +21 -7
- 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.js +0 -6
- package/dist/tool-system/context.d.ts +164 -6
- package/dist/tool-system/executor.d.ts +3 -1
- package/dist/tool-system/executor.js +197 -90
- package/dist/tool-system/investigation-guard.js +1 -1
- package/dist/tool-system/mcp-manager.d.ts +42 -4
- package/dist/tool-system/mcp-manager.js +203 -20
- package/dist/tool-system/mcp-stdio-diagnostics.d.ts +9 -0
- package/dist/tool-system/mcp-stdio-diagnostics.js +93 -0
- package/dist/tool-system/path-policy.d.ts +5 -0
- package/dist/tool-system/path-policy.js +307 -8
- package/dist/tool-system/permission.d.ts +39 -2
- package/dist/tool-system/permission.js +283 -70
- package/dist/tool-system/plan-mode-allowlist.d.ts +13 -2
- package/dist/tool-system/plan-mode-allowlist.js +24 -2
- package/dist/tool-system/registry.d.ts +1 -0
- package/dist/tool-system/registry.js +16 -2
- package/dist/tool-system/sandbox/index.d.ts +8 -0
- package/dist/tool-system/sandbox/index.js +7 -2
- package/dist/tool-system/sandbox/off.js +7 -1
- package/dist/tool-system/validate-tool-metadata.d.ts +36 -0
- package/dist/tool-system/validate-tool-metadata.js +63 -0
- package/dist/types.d.ts +252 -7
- 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 +48 -0
- package/dist/utils/exec.js +154 -0
- package/dist/utils/json.d.ts +12 -0
- package/dist/utils/json.js +92 -0
- package/dist/utils/theme.d.ts +1 -1
- package/dist/utils/theme.js +1 -1
- package/dist/utils/toolDisplay.js +0 -1
- package/package.json +13 -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
package/dist/engine/engine.d.ts
CHANGED
|
@@ -1,22 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Engine — the main facade that wires all components together.
|
|
3
3
|
*/
|
|
4
|
-
import type {
|
|
4
|
+
import type { LLMConfig, StreamCallback } from "../types.js";
|
|
5
5
|
import { ToolRegistry } from "../tool-system/registry.js";
|
|
6
6
|
import { type BuiltinToolFn } from "../tool-system/builtin/index.js";
|
|
7
|
-
import { type ApprovalBackend } from "../tool-system/permission.js";
|
|
8
7
|
import { HookRegistry } from "../hooks/registry.js";
|
|
9
|
-
import type
|
|
10
|
-
import type
|
|
11
|
-
import { type GoalConfig } from "./goal.js";
|
|
8
|
+
import { type GoalConfig, type GoalExtension } from "./goal.js";
|
|
9
|
+
import { type CompactStrategy } from "../context/manager.js";
|
|
12
10
|
import { SessionManager } from "../session/session-manager.js";
|
|
13
|
-
import type { CostStateStore } from "./cost-store.js";
|
|
14
11
|
import type { AskUserFn } from "../tool-system/builtin/ask-user.js";
|
|
15
|
-
import { type SettingsScope } from "../settings/manager.js";
|
|
16
12
|
import type { CapabilityOverride } from "../settings/schema.js";
|
|
13
|
+
import { type FeatureFlagName } from "../settings/feature-flags.js";
|
|
17
14
|
import type { ToolContext } from "../tool-system/context.js";
|
|
18
|
-
import { type SandboxConfig } from "../tool-system/sandbox/index.js";
|
|
19
|
-
import { type AgentPresetName } from "../preset/index.js";
|
|
20
15
|
import { ModelPool, type ModelEntry } from "../llm/model-pool.js";
|
|
21
16
|
import { AgentDefinitionRegistry } from "../agent/agent-definition-registry.js";
|
|
22
17
|
import { EngineRuntime } from "./runtime.js";
|
|
@@ -31,118 +26,13 @@ export declare function compatFileNamesFrom(instructions?: {
|
|
|
31
26
|
compatClaude?: boolean;
|
|
32
27
|
compatCodex?: boolean;
|
|
33
28
|
}): string[];
|
|
34
|
-
export
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
* Engine reads settings.json (model.temperature, images.detail) on construction.
|
|
40
|
-
*/
|
|
41
|
-
clientDefaults?: ClientDefaults;
|
|
42
|
-
cwd?: string;
|
|
43
|
-
maxTurns?: number;
|
|
44
|
-
maxToolCallsPerTurn?: number;
|
|
45
|
-
permissionMode?: "default" | "acceptEdits" | "dontAsk" | "bypassPermissions" | "auto" | "plan";
|
|
46
|
-
preset?: AgentPresetName;
|
|
47
|
-
enabledBuiltinTools?: string[];
|
|
48
|
-
disabledBuiltinTools?: string[];
|
|
49
|
-
customSystemPrompt?: string;
|
|
50
|
-
appendSystemPrompt?: string;
|
|
51
|
-
responseLanguage?: string;
|
|
52
|
-
userProfile?: string;
|
|
53
|
-
instructions?: {
|
|
54
|
-
compatClaude?: boolean;
|
|
55
|
-
compatCodex?: boolean;
|
|
56
|
-
};
|
|
57
|
-
/**
|
|
58
|
-
* Goal mode: when set, the engine registers a GoalStopHook on `on_stop`
|
|
59
|
-
* so the turn loop runs until the session model judges this goal met
|
|
60
|
-
* (bounded by maxStopBlocks + maxTurns). Orthogonal to permissionMode —
|
|
61
|
-
* the desktop UI defaults permission to bypass when a goal is set, but
|
|
62
|
-
* the engine treats the two independently.
|
|
63
|
-
*
|
|
64
|
-
* Accepts a raw string (objective only) or a full GoalConfig (objective +
|
|
65
|
-
* optional token/time budgets); the run boundary normalizes it once.
|
|
66
|
-
*/
|
|
67
|
-
goal?: string | GoalConfig;
|
|
68
|
-
sessionStorageDir?: string;
|
|
69
|
-
maxContextTokens?: number;
|
|
70
|
-
approvalBackend?: ApprovalBackend;
|
|
71
|
-
hooks?: EngineHookConfig[];
|
|
72
|
-
askUser?: AskUserFn;
|
|
73
|
-
mcpServers?: Record<string, import("../types.js").MCPServerConfig>;
|
|
74
|
-
/**
|
|
75
|
-
* Optional opaque store for per-session cost/usage state. When provided,
|
|
76
|
-
* Engine calls `restore()` on session resume and `serialize()` at the end
|
|
77
|
-
* of each `run()` and stores the blob on the session. Without this the
|
|
78
|
-
* Engine doesn't persist cost state — it's a UI concern.
|
|
79
|
-
*/
|
|
80
|
-
costStore?: CostStateStore;
|
|
81
|
-
/**
|
|
82
|
-
* True when the Engine runs in a no-UI / one-shot context (e.g. the `run`
|
|
83
|
-
* command). Currently controls InvestigationGuard soft-mode: in headless
|
|
84
|
-
* we never hard-block a tool call because there is no human to retry.
|
|
85
|
-
* Defaults to false.
|
|
86
|
-
*/
|
|
87
|
-
headless?: boolean;
|
|
88
|
-
/**
|
|
89
|
-
* When true, treat like headless for InvestigationGuard soft-mode — a
|
|
90
|
-
* read-only session should never be hard-blocked for repeated reads.
|
|
91
|
-
*/
|
|
92
|
-
readOnlySession?: boolean;
|
|
93
|
-
/**
|
|
94
|
-
* Sandbox configuration for shell-tool execution. When omitted, headless
|
|
95
|
-
* runs default to "auto" (Seatbelt on macOS / bwrap on Linux when
|
|
96
|
-
* available) and interactive runs default to "off" because a human is in
|
|
97
|
-
* the loop to approve commands.
|
|
98
|
-
*/
|
|
99
|
-
sandbox?: SandboxConfig;
|
|
100
|
-
/**
|
|
101
|
-
* True when this Engine is itself a sub-agent (spawned by another
|
|
102
|
-
* Engine's Agent tool). Threaded into ToolContext so the Agent tool can
|
|
103
|
-
* refuse re-entry — defense in depth against the tool-list strip in
|
|
104
|
-
* spawn(): if a tool registry regression ever leaks Agent into a child's
|
|
105
|
-
* pool, the runtime check still blocks the call.
|
|
106
|
-
*/
|
|
107
|
-
isSubAgent?: boolean;
|
|
108
|
-
/**
|
|
109
|
-
* Host/context that created this Engine's sessions — written to state.json's
|
|
110
|
-
* `origin` so the desktop disk-rebuild can filter the sidebar (desktop +
|
|
111
|
-
* automation shown; tui hidden). Sub-agents override to "subagent".
|
|
112
|
-
*/
|
|
113
|
-
origin?: SessionOrigin;
|
|
114
|
-
/**
|
|
115
|
-
* Optional shared EngineRuntime providing pre-constructed shared resources
|
|
116
|
-
* (modelPool, toolRegistry, etc.). When provided, Engine uses these instead
|
|
117
|
-
* of constructing its own. Existing callers that omit this field continue to
|
|
118
|
-
* work unchanged — T11 will migrate them.
|
|
119
|
-
*/
|
|
120
|
-
runtime?: EngineRuntime;
|
|
121
|
-
/**
|
|
122
|
-
* Which disk config layers this Engine may read. Defaults to 'project' —
|
|
123
|
-
* the safe default: a library/SDK embedding never silently inherits the
|
|
124
|
-
* host user's personal ~/.code-shell config (keys, models, MCP, hooks); it
|
|
125
|
-
* only reads the project-level ${cwd}/.code-shell that travels with a repo.
|
|
126
|
-
* Host-terminal entrypoints (TUI/desktop/CLI) pass 'full' to restore the
|
|
127
|
-
* managed+user+project+local behavior. 'isolated' reads no disk at all.
|
|
128
|
-
* Subagents inherit the parent Engine's scope. See SettingsScope.
|
|
129
|
-
*/
|
|
130
|
-
settingsScope?: SettingsScope;
|
|
29
|
+
export type { EngineConfig, EngineHookConfig, EngineResult } from "./types.js";
|
|
30
|
+
import type { EngineConfig, EngineResult } from "./types.js";
|
|
31
|
+
export interface EnqueueSteerResult {
|
|
32
|
+
accepted: boolean;
|
|
33
|
+
id: string;
|
|
131
34
|
}
|
|
132
35
|
export { diskDefaultsFrom, type DiskDefaultPatch } from "../settings/disk-defaults.js";
|
|
133
|
-
export interface EngineHookConfig {
|
|
134
|
-
event: HookEventName;
|
|
135
|
-
handler: HookHandler;
|
|
136
|
-
priority?: number;
|
|
137
|
-
name?: string;
|
|
138
|
-
}
|
|
139
|
-
export interface EngineResult {
|
|
140
|
-
text: string;
|
|
141
|
-
reason: TerminalReason;
|
|
142
|
-
sessionId: string;
|
|
143
|
-
turnCount: number;
|
|
144
|
-
usage: TokenUsage;
|
|
145
|
-
}
|
|
146
36
|
/**
|
|
147
37
|
* Resolve the LLM config for a spawned child Engine.
|
|
148
38
|
* - `modelKey` set + present in pool → that model's config (pure entry-derived
|
|
@@ -162,6 +52,23 @@ export declare function resolveChildLlm(modelKey: string | undefined, pool: Mode
|
|
|
162
52
|
* 2. user-level ~/.code-shell/agents/*.md (user wins on name)
|
|
163
53
|
* Names in `disabledAgents` are filtered out so the LLM never sees them.
|
|
164
54
|
*/
|
|
55
|
+
/**
|
|
56
|
+
* Resolve the working directory for a run. Precedence:
|
|
57
|
+
* options.cwd > resumed session's state.cwd > config.cwd > process.cwd()
|
|
58
|
+
*
|
|
59
|
+
* The session-cwd tier is what stops a project-bound session from being
|
|
60
|
+
* resumed against the wrong directory: when a host omits options.cwd (e.g. its
|
|
61
|
+
* sidebar repo selection drifted to null), the session's own recorded cwd is
|
|
62
|
+
* recovered so the engine still loads THAT project's agents/settings/memory,
|
|
63
|
+
* not whatever process.cwd() happens to be. Pure so the precedence is testable
|
|
64
|
+
* without standing up an Engine.
|
|
65
|
+
*/
|
|
66
|
+
export declare function resolveRunCwd(args: {
|
|
67
|
+
optionCwd?: string;
|
|
68
|
+
sessionCwd?: string;
|
|
69
|
+
configCwd?: string;
|
|
70
|
+
processCwd: string;
|
|
71
|
+
}): string;
|
|
165
72
|
export declare function loadAgentDefinitionsForCwd(cwd: string, disabledAgents?: string[], disabledPlugins?: string[]): AgentDefinitionRegistry;
|
|
166
73
|
/**
|
|
167
74
|
* #7: apply a project's per-turn builtin capability override to a tool list.
|
|
@@ -245,10 +152,49 @@ export declare class Engine {
|
|
|
245
152
|
* LLM response arrives.
|
|
246
153
|
*/
|
|
247
154
|
private ctxOverheadBySid;
|
|
155
|
+
/**
|
|
156
|
+
* Step-gap steering queue (per sessionId, in-memory). Host pushes user
|
|
157
|
+
* messages here via enqueueSteer while a run is in flight; the turn loop
|
|
158
|
+
* drains it at each step boundary and splices them into the next LLM request
|
|
159
|
+
* WITHOUT aborting (the 不打断 path, vs cancel+resend). Pure memory, forgotten
|
|
160
|
+
* on process exit — same model as the credential session-allow set, so
|
|
161
|
+
* multiple Engines don't interfere and it stays cleanly extractable.
|
|
162
|
+
*/
|
|
163
|
+
private steerQueueBySid;
|
|
248
164
|
private activePermission;
|
|
165
|
+
/**
|
|
166
|
+
* The TurnLoop of the in-flight run(), exposed so extendGoalRun() can bump a
|
|
167
|
+
* running goal's turn/budget ceilings mid-run (TODO 3.1). Null when idle.
|
|
168
|
+
*/
|
|
169
|
+
private activeTurnLoop;
|
|
170
|
+
/**
|
|
171
|
+
* The goal-stop hook of the in-flight goal run, exposed so clearGoal() can
|
|
172
|
+
* unregister it mid-run (the closure holds the now-cleared goal and would
|
|
173
|
+
* otherwise keep re-blocking the stop). Null when no goal run is active.
|
|
174
|
+
*/
|
|
175
|
+
private activeGoalHook;
|
|
176
|
+
/**
|
|
177
|
+
* The in-flight run's session bundle, held so clearGoal() can wipe the goal
|
|
178
|
+
* on the SAME instance the run loop is persisting each turn — not a fresh
|
|
179
|
+
* detached copy from resume(). Without this, a mid-run 清除 clears disk, but
|
|
180
|
+
* the still-running loop's next saveState(bundle.state) resurrects the goal
|
|
181
|
+
* (bundle.state.activeGoal was never dropped). A never-completing goal run
|
|
182
|
+
* (judge keeps returning not_met → continueSession) stays live for a long
|
|
183
|
+
* time, so this write-back race is the norm, not an edge case, for such runs.
|
|
184
|
+
* Single-valued like activeTurnLoop — one top-level run per engine at a time.
|
|
185
|
+
* Null when idle; set at run start, cleared in run's finally.
|
|
186
|
+
*/
|
|
187
|
+
private activeRunSession;
|
|
249
188
|
/** Public accessor so UI/clients can read the resolved per-model window. */
|
|
250
189
|
get maxContextTokens(): number;
|
|
251
190
|
private resolveMaxContextTokens;
|
|
191
|
+
/**
|
|
192
|
+
* Compaction thresholds from settings.context, clamped so they keep the
|
|
193
|
+
* required ordering floor < compact < summarize even if the user configures
|
|
194
|
+
* conflicting values (e.g. summarize below compact). Falls back to the
|
|
195
|
+
* ContextManager defaults when a field is absent.
|
|
196
|
+
*/
|
|
197
|
+
private resolveContextRatios;
|
|
252
198
|
/**
|
|
253
199
|
* Emit a lifecycle hook with isSubAgent auto-merged into data so handlers
|
|
254
200
|
* can skip noisy injections for spawned children. All Engine-side hook
|
|
@@ -279,20 +225,20 @@ export declare class Engine {
|
|
|
279
225
|
reloadHooks(): void;
|
|
280
226
|
constructor(config: EngineConfig);
|
|
281
227
|
/**
|
|
282
|
-
* Load
|
|
228
|
+
* Load modelConnections[] from settings into the active ModelPool and
|
|
283
229
|
* resync this.config.llm with the matching entry. Called from the ctor and
|
|
284
230
|
* from reloadModelPool() (e.g. after onboarding writes new entries to disk).
|
|
285
231
|
*/
|
|
286
232
|
private populateModelPoolFromSettings;
|
|
287
233
|
/**
|
|
288
234
|
* Re-read settings and refresh the model pool. Used after onboarding /login
|
|
289
|
-
* writes new
|
|
235
|
+
* writes new modelConnections[] to disk so the running engine picks them
|
|
290
236
|
* up without a process restart. Existing pool entries are kept (re-registering
|
|
291
237
|
* the same key overwrites them), so callers don't need to clear first.
|
|
292
238
|
*/
|
|
293
239
|
reloadModelPool(): void;
|
|
294
240
|
/**
|
|
295
|
-
* Auto-populate the model pool when
|
|
241
|
+
* Auto-populate the model pool when no modelConnections[] are configured but
|
|
296
242
|
* the user has configured an API key. Detects the provider from the
|
|
297
243
|
* key prefix / baseUrl and registers all its known models.
|
|
298
244
|
*/
|
|
@@ -308,11 +254,51 @@ export declare class Engine {
|
|
|
308
254
|
* before the server existed (chicken-and-egg: server takes engine in ctor).
|
|
309
255
|
*/
|
|
310
256
|
setAskUser(fn: AskUserFn | undefined): void;
|
|
257
|
+
/**
|
|
258
|
+
* Inject the browser automation bridge after construction (same chicken-and-egg
|
|
259
|
+
* as setAskUser: the desktop host builds the bridge — which drives a webview —
|
|
260
|
+
* after the Engine exists). Undefined → the browser_* tools degrade with a
|
|
261
|
+
* clear "no browser panel" error.
|
|
262
|
+
*/
|
|
263
|
+
setBrowserBridge(bridge: import("../tool-system/browser-bridge.js").BrowserBridge | undefined): void;
|
|
264
|
+
/**
|
|
265
|
+
* Queue a user message to be spliced into the in-flight run for `sessionId`
|
|
266
|
+
* at the next turn-loop step boundary — the 不打断 steering path (vs cancel +
|
|
267
|
+
* resend). General-purpose: any host path (UI 引导, future agent coordination,
|
|
268
|
+
* external triggers) can call it. If no run is active for this session, reject
|
|
269
|
+
* without queueing so the host can downgrade to a normal run immediately.
|
|
270
|
+
* No-op on blank text.
|
|
271
|
+
*
|
|
272
|
+
* `id` is the host's stable queue-entry id. It rides through to the
|
|
273
|
+
* `steer_injected` event (so the host can match the injected bubble back to
|
|
274
|
+
* the queued draft) and is the handle `unsteer` uses to revoke a still-pending
|
|
275
|
+
* entry. A blank id is tolerated but means the entry can't be revoked.
|
|
276
|
+
*/
|
|
277
|
+
enqueueSteer(sessionId: string, text: string, id?: string, clientMessageId?: string): EnqueueSteerResult;
|
|
278
|
+
/**
|
|
279
|
+
* Revoke a still-pending steer entry (the 撤回 path). Returns true if it was
|
|
280
|
+
* removed, false if it was already consumed by the turn loop (can't take it
|
|
281
|
+
* back — it has been spliced into the run).
|
|
282
|
+
*/
|
|
283
|
+
unsteer(sessionId: string, id: string): boolean;
|
|
284
|
+
/** Drain + clear the steer queue for a session (turn loop consumes per step). */
|
|
285
|
+
private consumeSteer;
|
|
286
|
+
/** Wire the cookie→browser injection callback (InjectCredential tool). Same
|
|
287
|
+
* post-construction injection model as setBrowserBridge. */
|
|
288
|
+
setInjectCredential(fn: import("../tool-system/context.js").InjectCredentialFn | undefined): void;
|
|
311
289
|
/**
|
|
312
290
|
* Whether this engine runs unattended (no interactive human). Used by the
|
|
313
291
|
* in-process AgentServer to decide whether to wire an interactive askUser.
|
|
314
292
|
*/
|
|
315
293
|
isHeadless(): boolean;
|
|
294
|
+
/**
|
|
295
|
+
* Probe whether a session already exists on disk (its state/transcript dir is
|
|
296
|
+
* present). Used by the protocol server to distinguish "resume an existing
|
|
297
|
+
* session" from "silently create a fresh empty one" — e.g. a cron resume job
|
|
298
|
+
* whose target session the user deleted must fail loudly, not run its prompt
|
|
299
|
+
* against a blank session. A stat probe, not a load.
|
|
300
|
+
*/
|
|
301
|
+
sessionExistsOnDisk(sessionId: string): boolean;
|
|
316
302
|
/**
|
|
317
303
|
* Run a task from start to finish.
|
|
318
304
|
*/
|
|
@@ -328,6 +314,17 @@ export declare class Engine {
|
|
|
328
314
|
* string or a full GoalConfig; normalized once at the run boundary.
|
|
329
315
|
*/
|
|
330
316
|
goal?: string | GoalConfig;
|
|
317
|
+
/**
|
|
318
|
+
* Marks this turn's task as a SYNTHETIC system-reminder injection (e.g. a
|
|
319
|
+
* background-job completion notification the server re-injects to wake an
|
|
320
|
+
* idle session) rather than the user's own input. The task is still sent
|
|
321
|
+
* to the model as a `role:"user"` message, but it is persisted with an
|
|
322
|
+
* `injected` flag so the disk reader skips rendering it as a user bubble
|
|
323
|
+
* on replay (matching the live UI, which shows only the assistant reply).
|
|
324
|
+
*/
|
|
325
|
+
injected?: boolean;
|
|
326
|
+
/** Stable id for this user-intent, used to make duplicate submits idempotent. */
|
|
327
|
+
clientMessageId?: string;
|
|
331
328
|
}): Promise<EngineResult>;
|
|
332
329
|
/**
|
|
333
330
|
* Run the end-of-session memory pipeline as a fire-and-forget background
|
|
@@ -336,12 +333,17 @@ export declare class Engine {
|
|
|
336
333
|
*/
|
|
337
334
|
/**
|
|
338
335
|
* Resolve the LLM client for background/auxiliary work (memory extraction,
|
|
339
|
-
* auto-dream). When settings.
|
|
340
|
-
* cache) a dedicated client for it so per-turn book-keeping runs on a cheap
|
|
336
|
+
* auto-dream). When settings.defaults.auxText names a valid pool model, build
|
|
337
|
+
* (and cache) a dedicated client for it so per-turn book-keeping runs on a cheap
|
|
341
338
|
* fast model instead of the expensive primary. Falls back to `fallback` (the
|
|
342
339
|
* active run's client) when unset, unknown, or on any build failure — aux
|
|
343
340
|
* work is best-effort and must never break a run.
|
|
344
341
|
*/
|
|
342
|
+
/**
|
|
343
|
+
* Build the SummarizeFn used for context compaction. Extracted so both the
|
|
344
|
+
* run path and forceCompact share one definition of the summarization call.
|
|
345
|
+
*/
|
|
346
|
+
private buildSummarizeFn;
|
|
345
347
|
private resolveAuxClient;
|
|
346
348
|
private runMemoryPipeline;
|
|
347
349
|
/**
|
|
@@ -366,20 +368,24 @@ export declare class Engine {
|
|
|
366
368
|
* Switch the active model by pool key. Takes effect on the next run() call.
|
|
367
369
|
* Returns the new model entry.
|
|
368
370
|
*
|
|
369
|
-
* Persists settings.
|
|
371
|
+
* Persists settings.defaults.text (= the connection id / pool key) so the
|
|
370
372
|
* next process startup defaults to the same model — without this, switches
|
|
371
373
|
* only live in memory and every restart reverts to the previously persisted
|
|
372
|
-
*
|
|
374
|
+
* defaults.text.
|
|
373
375
|
*/
|
|
374
376
|
switchModel(key: string): ModelEntry;
|
|
377
|
+
/**
|
|
378
|
+
* Zero the legacy/model-scoped token/cache usage window on disk. The
|
|
379
|
+
* whole-session cumulative counters are intentionally left alone.
|
|
380
|
+
*/
|
|
381
|
+
resetSessionUsage(sessionId: string): void;
|
|
375
382
|
/**
|
|
376
383
|
* Write the active model selection to ~/.code-shell/settings.json.
|
|
377
384
|
*
|
|
378
|
-
*
|
|
379
|
-
*
|
|
380
|
-
*
|
|
381
|
-
*
|
|
382
|
-
* undefined when the entry resolves via providerCatalog.
|
|
385
|
+
* Persists settings.defaults.text = entry.key (the connection id == pool
|
|
386
|
+
* key). That is the single field the boot path reads to restore the active
|
|
387
|
+
* text model on the next startup (see ctor: settings.defaults.text → pool
|
|
388
|
+
* switch). No legacy activeKey/model.* mirror is written.
|
|
383
389
|
*/
|
|
384
390
|
private persistActiveModel;
|
|
385
391
|
/** Get the model pool. */
|
|
@@ -401,12 +407,10 @@ export declare class Engine {
|
|
|
401
407
|
* payloads are dropped so out-of-order reload deliveries can't let an older
|
|
402
408
|
* config clobber a newer one (Q5).
|
|
403
409
|
*
|
|
404
|
-
* MCP:
|
|
405
|
-
*
|
|
406
|
-
*
|
|
407
|
-
*
|
|
408
|
-
* new servers will be connected on the next run via the existing per-run
|
|
409
|
-
* connectAll path — so we skip the connect here.
|
|
410
|
+
* MCP: reconciles the shared MCP pool against the new disk-default server
|
|
411
|
+
* set. Added servers connect idempotently; removed/disabled servers are
|
|
412
|
+
* disconnected and their registered MCP tools are unregistered so plugin
|
|
413
|
+
* disable takes effect without an Electron restart.
|
|
410
414
|
*
|
|
411
415
|
* Preset (#2): a preset hot-reload re-resolves `this.preset` so the next-turn
|
|
412
416
|
* PromptComposer picks up the new preset's system prompt / behavior — that's
|
|
@@ -436,16 +440,36 @@ export declare class Engine {
|
|
|
436
440
|
* engine.run() call for this session picks up the injected content
|
|
437
441
|
* instead of a stale snapshot from the previous run.
|
|
438
442
|
*/
|
|
443
|
+
/**
|
|
444
|
+
* Read a session's persisted active goal WITHOUT resuming it (cheap — reads
|
|
445
|
+
* only state.json via SessionManager.readActiveGoal). The desktop host calls
|
|
446
|
+
* this on session load to re-surface the goal block + its Cancel button: a
|
|
447
|
+
* persistent goal lives only in state.activeGoal and is never replayed from
|
|
448
|
+
* the transcript, so after a reload of an aborted goal run the UI would
|
|
449
|
+
* otherwise show nothing (the "goal 还在但页面不显示、取消不了" bug). Returns
|
|
450
|
+
* undefined when the session is unknown or has no active goal.
|
|
451
|
+
*/
|
|
452
|
+
getGoal(sessionId: string): GoalConfig | undefined;
|
|
453
|
+
/**
|
|
454
|
+
* Clear a session's persisted active goal (CC `/goal clear`). Works whether
|
|
455
|
+
* the session is idle or its goal run is in flight: it wipes
|
|
456
|
+
* `state.activeGoal` (so the next bare send won't re-inherit it) and, if a
|
|
457
|
+
* goal hook is currently registered for this engine, unregisters it so an
|
|
458
|
+
* in-flight run can stop instead of being re-blocked by the now-cleared goal.
|
|
459
|
+
* Returns true if a goal was actually cleared. Idempotent — clearing a
|
|
460
|
+
* session with no active goal is a no-op returning false.
|
|
461
|
+
*/
|
|
462
|
+
clearGoal(sessionId: string): boolean;
|
|
439
463
|
injectContext(sessionId: string, content: string): void;
|
|
440
464
|
/**
|
|
441
|
-
* Force context compaction on
|
|
465
|
+
* Force context compaction on a session.
|
|
442
466
|
* Returns token stats before/after.
|
|
443
467
|
*/
|
|
444
|
-
forceCompact(): {
|
|
468
|
+
forceCompact(sessionId?: string): Promise<{
|
|
445
469
|
before: number;
|
|
446
470
|
after: number;
|
|
447
|
-
strategy:
|
|
448
|
-
}
|
|
471
|
+
strategy: "none (no active session)" | "no compaction needed" | "compacted" | CompactStrategy;
|
|
472
|
+
}>;
|
|
449
473
|
private stripUserContextMessage;
|
|
450
474
|
private getSettingsManager;
|
|
451
475
|
/**
|
|
@@ -466,6 +490,25 @@ export declare class Engine {
|
|
|
466
490
|
*/
|
|
467
491
|
setPermissionMode(mode: NonNullable<EngineConfig["permissionMode"]>): void;
|
|
468
492
|
getPermissionMode(): NonNullable<EngineConfig["permissionMode"]>;
|
|
493
|
+
/**
|
|
494
|
+
* Extend the in-flight run's turn ceiling and/or goal budgets (TODO 3.1 —
|
|
495
|
+
* 运行中续轮/加预算). No-op (returns null) when no run is active. Lets a user
|
|
496
|
+
* keep an unattended goal going past its original cap instead of restarting.
|
|
497
|
+
*/
|
|
498
|
+
extendGoalRun(opts: GoalExtension): {
|
|
499
|
+
maxTurns: number;
|
|
500
|
+
tokenBudget?: number;
|
|
501
|
+
timeBudgetMs?: number;
|
|
502
|
+
maxStopBlocks: number;
|
|
503
|
+
} | null;
|
|
504
|
+
/**
|
|
505
|
+
* The effective permission rules for the current mode + cwd (TODO 5.1) —
|
|
506
|
+
* preset defaults + mode-derived + settings.permissions.rules, in the same
|
|
507
|
+
* order the classifier evaluates them. Exposed read-only so `/permissions`
|
|
508
|
+
* (and any UI) can list what's actually in force. Pure read; builds the same
|
|
509
|
+
* rule set buildPermissionConfig does, without constructing a backend.
|
|
510
|
+
*/
|
|
511
|
+
getPermissionRules(): import("../types.js").PermissionRule[];
|
|
469
512
|
/**
|
|
470
513
|
* Toggle plan mode directly. Called by the Plan tool (Task 7) via ToolContext.engine.
|
|
471
514
|
* Also syncs permissionMode to keep both fields consistent.
|
|
@@ -489,6 +532,14 @@ export declare class Engine {
|
|
|
489
532
|
* both. Subscribe-before-await closes the check/wait race either way.
|
|
490
533
|
*/
|
|
491
534
|
private waitForBackgroundAgentChange;
|
|
535
|
+
/**
|
|
536
|
+
* Like waitForBackgroundAgentChange but with no abort signal and a hard
|
|
537
|
+
* timeout. Resolves `true` on a registry/queue change, `false` if `timeoutMs`
|
|
538
|
+
* elapses first. Used only by the headless abort-drain cleanup, where we want
|
|
539
|
+
* to catch a completing agent's just-about-to-enqueue notification without
|
|
540
|
+
* risking a permanent hang on an agent that never completes.
|
|
541
|
+
*/
|
|
542
|
+
private waitForBackgroundAgentChangeOrTimeout;
|
|
492
543
|
/**
|
|
493
544
|
* Sub-agent role registry for the given cwd, memoized per-cwd so the
|
|
494
545
|
* directory is read once rather than every turn. A new cwd (e.g. via
|
|
@@ -519,6 +570,58 @@ export declare class Engine {
|
|
|
519
570
|
* by tests that want a ToolContext without a full run() cycle.
|
|
520
571
|
*/
|
|
521
572
|
private resolveSandboxWithoutRuntime;
|
|
573
|
+
/**
|
|
574
|
+
* Build the shell env layered onto the Bash tool / background shells (see
|
|
575
|
+
* mergeShellEnv). Three user-configured sources, merged lowest → highest:
|
|
576
|
+
*
|
|
577
|
+
* 1. project `localEnvironment.env` — the per-project "local environment"
|
|
578
|
+
* panel (DATABASE_URL etc.); the floor, so a project's own panel values
|
|
579
|
+
* can be overridden by an explicit top-level `env`.
|
|
580
|
+
* 2. global top-level `env` — ~/.code-shell/settings.json; the
|
|
581
|
+
* canonical home for API keys (OPENAI_API_KEY) a skill script reads —
|
|
582
|
+
* configure once, every project's skills get it.
|
|
583
|
+
* 3. project top-level `env` — .code-shell/settings.json; a project
|
|
584
|
+
* that wants to override a global key wins.
|
|
585
|
+
*
|
|
586
|
+
* Each scope is read UNMERGED so the layering here is the single source of
|
|
587
|
+
* precedence (getForScope merges nothing). Returns undefined when no layer
|
|
588
|
+
* contributes a key, so the caller passes it through unchanged for projects
|
|
589
|
+
* that configure none.
|
|
590
|
+
*
|
|
591
|
+
* Sub-agents: a sub-agent is the user's OWN agent doing the user's work
|
|
592
|
+
* (mirrors Claude Code, where sub-agents inherit the parent environment), so
|
|
593
|
+
* it now reads the SAME env as the parent. The sub-agent branch is kept as an
|
|
594
|
+
* explicit seam (`filterSubagentEnv`) rather than removed — a future policy
|
|
595
|
+
* could narrow what a sub-agent sees (e.g. drop credential secrets) by
|
|
596
|
+
* changing that one hook; today it passes everything through unchanged.
|
|
597
|
+
* A no-cwd context still gets nothing (there is genuinely no project to read).
|
|
598
|
+
*
|
|
599
|
+
* None of these is filtered through the deny regex (mergeShellEnv): the user
|
|
600
|
+
* put them there deliberately. The allowlist/deny machinery only guards the
|
|
601
|
+
* host's process.env from a tainted model exfiltrating it via `env | curl`.
|
|
602
|
+
*/
|
|
603
|
+
private readShellEnv;
|
|
604
|
+
/**
|
|
605
|
+
* Policy seam for what a sub-agent's shell sees. A sub-agent inherits the
|
|
606
|
+
* parent environment by default (mirrors Claude Code), so this is the
|
|
607
|
+
* identity function today. It exists so a future policy can narrow the set
|
|
608
|
+
* (e.g. strip credential `exposeAsEnv` secrets, or allowlist by name) in ONE
|
|
609
|
+
* place instead of scattering `isSubAgent` checks through readShellEnv.
|
|
610
|
+
*/
|
|
611
|
+
private filterSubagentEnv;
|
|
612
|
+
/**
|
|
613
|
+
* Read the project's `localEnvironment.setupScripts` for this cwd (the raw
|
|
614
|
+
* per-platform map). Used by EnterWorktree to run setup once in a freshly
|
|
615
|
+
* created worktree. Returns undefined for sub-agents / no cwd (same minimal
|
|
616
|
+
* surface as readShellEnv). The platform selection + run live in
|
|
617
|
+
* git/worktree.ts; this only fetches the configured scripts.
|
|
618
|
+
*/
|
|
619
|
+
readWorktreeSetupScripts(cwd?: string): {
|
|
620
|
+
default?: string;
|
|
621
|
+
macos?: string;
|
|
622
|
+
linux?: string;
|
|
623
|
+
windows?: string;
|
|
624
|
+
} | undefined;
|
|
522
625
|
buildToolContext(): ToolContext;
|
|
523
626
|
/**
|
|
524
627
|
* Read settings.disabledSkills + settings.disabledPlugins in a single
|
|
@@ -532,4 +635,40 @@ export declare class Engine {
|
|
|
532
635
|
* the same snapshot.
|
|
533
636
|
*/
|
|
534
637
|
private readDisabledLists;
|
|
638
|
+
/**
|
|
639
|
+
* Public view of the folded disabled lists, for hosts that need the
|
|
640
|
+
* EFFECTIVE state (e.g. the protocol server's settings hot-reload rebuilds
|
|
641
|
+
* the plugin-MCP merge per session — a project-level "on" must override the
|
|
642
|
+
* global disabledPlugins there too).
|
|
643
|
+
*/
|
|
644
|
+
getEffectiveDisabledLists(): {
|
|
645
|
+
disabledSkills: string[];
|
|
646
|
+
disabledPlugins: string[];
|
|
647
|
+
};
|
|
648
|
+
/**
|
|
649
|
+
* Public: resolve every known feature flag to its effective boolean (the
|
|
650
|
+
* settings overlay merged over the compiled-in defaults). Used by the
|
|
651
|
+
* `config` protocol query so the `/features` command can list flag state.
|
|
652
|
+
*/
|
|
653
|
+
getFeatureFlags(): Record<FeatureFlagName, boolean>;
|
|
654
|
+
/**
|
|
655
|
+
* Read the merged `settings.featureFlags` overlay for this cwd. Project
|
|
656
|
+
* settings override user settings via the normal SettingsManager merge.
|
|
657
|
+
* Returns undefined (→ all defaults) on any read error or for sub-agents,
|
|
658
|
+
* so a flag check never throws and a child runs with default behavior.
|
|
659
|
+
*/
|
|
660
|
+
private readFeatureFlags;
|
|
661
|
+
/**
|
|
662
|
+
* Read settings.memories ({ maxCount, maxAge, extractionModel, autoExtract }).
|
|
663
|
+
* Returns undefined on any error or when absent, so the memory pipeline
|
|
664
|
+
* falls back to its built-in defaults.
|
|
665
|
+
*/
|
|
666
|
+
private readMemoriesConfig;
|
|
667
|
+
/**
|
|
668
|
+
* LLM client for memory extraction (TODO 8.1). Prefers
|
|
669
|
+
* settings.memories.extractionModel when it names a valid pool model;
|
|
670
|
+
* otherwise falls back to the aux client (which itself falls back to the
|
|
671
|
+
* passed primary). Build failures fall back too — extraction is best-effort.
|
|
672
|
+
*/
|
|
673
|
+
private resolveExtractionClient;
|
|
535
674
|
}
|