@cjhyy/code-shell-core 0.5.0-rc.2 → 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 +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 +56 -0
- package/dist/context/compaction.js +186 -0
- package/dist/context/manager.js +25 -4
- 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 +267 -138
- package/dist/engine/engine.js +957 -191
- 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 +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/resolve-llm-config.d.ts +16 -0
- package/dist/engine/resolve-llm-config.js +44 -0
- package/dist/engine/runtime.js +2 -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 +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 +67 -3
- package/dist/engine/turn-loop.js +292 -41
- 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.js +11 -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 +49 -6
- package/dist/index.js +60 -4
- 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 +4 -0
- 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 +14 -0
- package/dist/llm/model-pool.js +13 -0
- 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 +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 +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 +7 -1
- package/dist/preset/index.js +96 -6
- package/dist/product/types.d.ts +1 -1
- package/dist/prompt/composer.d.ts +27 -0
- package/dist/prompt/composer.js +67 -21
- 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/protocol/chat-session-manager.d.ts +8 -2
- package/dist/protocol/chat-session-manager.js +36 -0
- package/dist/protocol/chat-session.d.ts +65 -0
- package/dist/protocol/chat-session.js +94 -2
- package/dist/protocol/client.d.ts +27 -0
- package/dist/protocol/client.js +38 -0
- package/dist/protocol/server.d.ts +112 -0
- package/dist/protocol/server.js +586 -16
- package/dist/protocol/transport.js +3 -2
- package/dist/protocol/types.d.ts +46 -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 +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/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 +113 -3
- 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 +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 +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/config.js +7 -0
- package/dist/tool-system/builtin/cron.d.ts +7 -0
- package/dist/tool-system/builtin/cron.js +55 -3
- 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.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 +361 -0
- package/dist/tool-system/builtin/glob.js +0 -7
- package/dist/tool-system/builtin/grep.js +6 -8
- 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 +7 -1
- package/dist/tool-system/builtin/index.js +249 -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.js +0 -7
- package/dist/tool-system/builtin/powershell.js +4 -1
- 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 +3 -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 +154 -6
- package/dist/tool-system/executor.d.ts +3 -1
- package/dist/tool-system/executor.js +172 -88
- 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 +186 -20
- 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 +36 -1
- package/dist/tool-system/permission.js +281 -69
- 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/validate-tool-metadata.d.ts +36 -0
- package/dist/tool-system/validate-tool-metadata.js +63 -0
- package/dist/types.d.ts +217 -6
- 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/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,16 @@
|
|
|
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 { HookHandler } from "../hooks/registry.js";
|
|
11
|
-
import { type GoalConfig } from "./goal.js";
|
|
8
|
+
import { type GoalConfig, type GoalExtension } from "./goal.js";
|
|
12
9
|
import { SessionManager } from "../session/session-manager.js";
|
|
13
|
-
import type { CostStateStore } from "./cost-store.js";
|
|
14
10
|
import type { AskUserFn } from "../tool-system/builtin/ask-user.js";
|
|
15
|
-
import { type SettingsScope } from "../settings/manager.js";
|
|
16
11
|
import type { CapabilityOverride } from "../settings/schema.js";
|
|
12
|
+
import { type FeatureFlagName } from "../settings/feature-flags.js";
|
|
17
13
|
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
14
|
import { ModelPool, type ModelEntry } from "../llm/model-pool.js";
|
|
21
15
|
import { AgentDefinitionRegistry } from "../agent/agent-definition-registry.js";
|
|
22
16
|
import { EngineRuntime } from "./runtime.js";
|
|
@@ -31,118 +25,9 @@ export declare function compatFileNamesFrom(instructions?: {
|
|
|
31
25
|
compatClaude?: boolean;
|
|
32
26
|
compatCodex?: boolean;
|
|
33
27
|
}): string[];
|
|
34
|
-
export
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Cross-model runtime knobs (temperature/timeout/retryMaxAttempts/imageDetail).
|
|
38
|
-
* Stays stable across hot model switches — only `llm` rotates. When omitted,
|
|
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;
|
|
131
|
-
}
|
|
28
|
+
export type { EngineConfig, EngineHookConfig, EngineResult } from "./types.js";
|
|
29
|
+
import type { EngineConfig, EngineResult } from "./types.js";
|
|
132
30
|
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
31
|
/**
|
|
147
32
|
* Resolve the LLM config for a spawned child Engine.
|
|
148
33
|
* - `modelKey` set + present in pool → that model's config (pure entry-derived
|
|
@@ -162,6 +47,23 @@ export declare function resolveChildLlm(modelKey: string | undefined, pool: Mode
|
|
|
162
47
|
* 2. user-level ~/.code-shell/agents/*.md (user wins on name)
|
|
163
48
|
* Names in `disabledAgents` are filtered out so the LLM never sees them.
|
|
164
49
|
*/
|
|
50
|
+
/**
|
|
51
|
+
* Resolve the working directory for a run. Precedence:
|
|
52
|
+
* options.cwd > resumed session's state.cwd > config.cwd > process.cwd()
|
|
53
|
+
*
|
|
54
|
+
* The session-cwd tier is what stops a project-bound session from being
|
|
55
|
+
* resumed against the wrong directory: when a host omits options.cwd (e.g. its
|
|
56
|
+
* sidebar repo selection drifted to null), the session's own recorded cwd is
|
|
57
|
+
* recovered so the engine still loads THAT project's agents/settings/memory,
|
|
58
|
+
* not whatever process.cwd() happens to be. Pure so the precedence is testable
|
|
59
|
+
* without standing up an Engine.
|
|
60
|
+
*/
|
|
61
|
+
export declare function resolveRunCwd(args: {
|
|
62
|
+
optionCwd?: string;
|
|
63
|
+
sessionCwd?: string;
|
|
64
|
+
configCwd?: string;
|
|
65
|
+
processCwd: string;
|
|
66
|
+
}): string;
|
|
165
67
|
export declare function loadAgentDefinitionsForCwd(cwd: string, disabledAgents?: string[], disabledPlugins?: string[]): AgentDefinitionRegistry;
|
|
166
68
|
/**
|
|
167
69
|
* #7: apply a project's per-turn builtin capability override to a tool list.
|
|
@@ -245,10 +147,49 @@ export declare class Engine {
|
|
|
245
147
|
* LLM response arrives.
|
|
246
148
|
*/
|
|
247
149
|
private ctxOverheadBySid;
|
|
150
|
+
/**
|
|
151
|
+
* Step-gap steering queue (per sessionId, in-memory). Host pushes user
|
|
152
|
+
* messages here via enqueueSteer while a run is in flight; the turn loop
|
|
153
|
+
* drains it at each step boundary and splices them into the next LLM request
|
|
154
|
+
* WITHOUT aborting (the 不打断 path, vs cancel+resend). Pure memory, forgotten
|
|
155
|
+
* on process exit — same model as the credential session-allow set, so
|
|
156
|
+
* multiple Engines don't interfere and it stays cleanly extractable.
|
|
157
|
+
*/
|
|
158
|
+
private steerQueueBySid;
|
|
248
159
|
private activePermission;
|
|
160
|
+
/**
|
|
161
|
+
* The TurnLoop of the in-flight run(), exposed so extendGoalRun() can bump a
|
|
162
|
+
* running goal's turn/budget ceilings mid-run (TODO 3.1). Null when idle.
|
|
163
|
+
*/
|
|
164
|
+
private activeTurnLoop;
|
|
165
|
+
/**
|
|
166
|
+
* The goal-stop hook of the in-flight goal run, exposed so clearGoal() can
|
|
167
|
+
* unregister it mid-run (the closure holds the now-cleared goal and would
|
|
168
|
+
* otherwise keep re-blocking the stop). Null when no goal run is active.
|
|
169
|
+
*/
|
|
170
|
+
private activeGoalHook;
|
|
171
|
+
/**
|
|
172
|
+
* The in-flight run's session bundle, held so clearGoal() can wipe the goal
|
|
173
|
+
* on the SAME instance the run loop is persisting each turn — not a fresh
|
|
174
|
+
* detached copy from resume(). Without this, a mid-run 清除 clears disk, but
|
|
175
|
+
* the still-running loop's next saveState(bundle.state) resurrects the goal
|
|
176
|
+
* (bundle.state.activeGoal was never dropped). A never-completing goal run
|
|
177
|
+
* (judge keeps returning not_met → continueSession) stays live for a long
|
|
178
|
+
* time, so this write-back race is the norm, not an edge case, for such runs.
|
|
179
|
+
* Single-valued like activeTurnLoop — one top-level run per engine at a time.
|
|
180
|
+
* Null when idle; set at run start, cleared in run's finally.
|
|
181
|
+
*/
|
|
182
|
+
private activeRunSession;
|
|
249
183
|
/** Public accessor so UI/clients can read the resolved per-model window. */
|
|
250
184
|
get maxContextTokens(): number;
|
|
251
185
|
private resolveMaxContextTokens;
|
|
186
|
+
/**
|
|
187
|
+
* Compaction thresholds from settings.context, clamped so they keep the
|
|
188
|
+
* required ordering floor < compact < summarize even if the user configures
|
|
189
|
+
* conflicting values (e.g. summarize below compact). Falls back to the
|
|
190
|
+
* ContextManager defaults when a field is absent.
|
|
191
|
+
*/
|
|
192
|
+
private resolveContextRatios;
|
|
252
193
|
/**
|
|
253
194
|
* Emit a lifecycle hook with isSubAgent auto-merged into data so handlers
|
|
254
195
|
* can skip noisy injections for spawned children. All Engine-side hook
|
|
@@ -279,20 +220,20 @@ export declare class Engine {
|
|
|
279
220
|
reloadHooks(): void;
|
|
280
221
|
constructor(config: EngineConfig);
|
|
281
222
|
/**
|
|
282
|
-
* Load
|
|
223
|
+
* Load modelConnections[] from settings into the active ModelPool and
|
|
283
224
|
* resync this.config.llm with the matching entry. Called from the ctor and
|
|
284
225
|
* from reloadModelPool() (e.g. after onboarding writes new entries to disk).
|
|
285
226
|
*/
|
|
286
227
|
private populateModelPoolFromSettings;
|
|
287
228
|
/**
|
|
288
229
|
* Re-read settings and refresh the model pool. Used after onboarding /login
|
|
289
|
-
* writes new
|
|
230
|
+
* writes new modelConnections[] to disk so the running engine picks them
|
|
290
231
|
* up without a process restart. Existing pool entries are kept (re-registering
|
|
291
232
|
* the same key overwrites them), so callers don't need to clear first.
|
|
292
233
|
*/
|
|
293
234
|
reloadModelPool(): void;
|
|
294
235
|
/**
|
|
295
|
-
* Auto-populate the model pool when
|
|
236
|
+
* Auto-populate the model pool when no modelConnections[] are configured but
|
|
296
237
|
* the user has configured an API key. Detects the provider from the
|
|
297
238
|
* key prefix / baseUrl and registers all its known models.
|
|
298
239
|
*/
|
|
@@ -308,11 +249,51 @@ export declare class Engine {
|
|
|
308
249
|
* before the server existed (chicken-and-egg: server takes engine in ctor).
|
|
309
250
|
*/
|
|
310
251
|
setAskUser(fn: AskUserFn | undefined): void;
|
|
252
|
+
/**
|
|
253
|
+
* Inject the browser automation bridge after construction (same chicken-and-egg
|
|
254
|
+
* as setAskUser: the desktop host builds the bridge — which drives a webview —
|
|
255
|
+
* after the Engine exists). Undefined → the browser_* tools degrade with a
|
|
256
|
+
* clear "no browser panel" error.
|
|
257
|
+
*/
|
|
258
|
+
setBrowserBridge(bridge: import("../tool-system/browser-bridge.js").BrowserBridge | undefined): void;
|
|
259
|
+
/**
|
|
260
|
+
* Queue a user message to be spliced into the in-flight run for `sessionId`
|
|
261
|
+
* at the next turn-loop step boundary — the 不打断 steering path (vs cancel +
|
|
262
|
+
* resend). General-purpose: any host path (UI 引导, future agent coordination,
|
|
263
|
+
* external triggers) can call it. If no run is active for the session the
|
|
264
|
+
* message simply waits in the queue and is consumed when that session next
|
|
265
|
+
* runs (rare race; host normally only steers while busy). No-op on blank text.
|
|
266
|
+
*
|
|
267
|
+
* `id` is the host's stable queue-entry id. It rides through to the
|
|
268
|
+
* `steer_injected` event (so the host can match the injected bubble back to
|
|
269
|
+
* the queued draft) and is the handle `unsteer` uses to revoke a still-pending
|
|
270
|
+
* entry. A blank id is tolerated but means the entry can't be revoked.
|
|
271
|
+
*/
|
|
272
|
+
enqueueSteer(sessionId: string, text: string, id?: string): void;
|
|
273
|
+
/**
|
|
274
|
+
* Revoke a still-pending steer entry (the 撤回 path). Returns true if it was
|
|
275
|
+
* removed, false if it was already consumed by the turn loop (can't take it
|
|
276
|
+
* back — it has been spliced into the run).
|
|
277
|
+
*/
|
|
278
|
+
unsteer(sessionId: string, id: string): boolean;
|
|
279
|
+
/** Drain + clear the steer queue for a session (turn loop consumes per step). */
|
|
280
|
+
private consumeSteer;
|
|
281
|
+
/** Wire the cookie→browser injection callback (InjectCredential tool). Same
|
|
282
|
+
* post-construction injection model as setBrowserBridge. */
|
|
283
|
+
setInjectCredential(fn: import("../tool-system/context.js").InjectCredentialFn | undefined): void;
|
|
311
284
|
/**
|
|
312
285
|
* Whether this engine runs unattended (no interactive human). Used by the
|
|
313
286
|
* in-process AgentServer to decide whether to wire an interactive askUser.
|
|
314
287
|
*/
|
|
315
288
|
isHeadless(): boolean;
|
|
289
|
+
/**
|
|
290
|
+
* Probe whether a session already exists on disk (its state/transcript dir is
|
|
291
|
+
* present). Used by the protocol server to distinguish "resume an existing
|
|
292
|
+
* session" from "silently create a fresh empty one" — e.g. a cron resume job
|
|
293
|
+
* whose target session the user deleted must fail loudly, not run its prompt
|
|
294
|
+
* against a blank session. A stat probe, not a load.
|
|
295
|
+
*/
|
|
296
|
+
sessionExistsOnDisk(sessionId: string): boolean;
|
|
316
297
|
/**
|
|
317
298
|
* Run a task from start to finish.
|
|
318
299
|
*/
|
|
@@ -328,6 +309,15 @@ export declare class Engine {
|
|
|
328
309
|
* string or a full GoalConfig; normalized once at the run boundary.
|
|
329
310
|
*/
|
|
330
311
|
goal?: string | GoalConfig;
|
|
312
|
+
/**
|
|
313
|
+
* Marks this turn's task as a SYNTHETIC system-reminder injection (e.g. a
|
|
314
|
+
* background-job completion notification the server re-injects to wake an
|
|
315
|
+
* idle session) rather than the user's own input. The task is still sent
|
|
316
|
+
* to the model as a `role:"user"` message, but it is persisted with an
|
|
317
|
+
* `injected` flag so the disk reader skips rendering it as a user bubble
|
|
318
|
+
* on replay (matching the live UI, which shows only the assistant reply).
|
|
319
|
+
*/
|
|
320
|
+
injected?: boolean;
|
|
331
321
|
}): Promise<EngineResult>;
|
|
332
322
|
/**
|
|
333
323
|
* Run the end-of-session memory pipeline as a fire-and-forget background
|
|
@@ -336,8 +326,8 @@ export declare class Engine {
|
|
|
336
326
|
*/
|
|
337
327
|
/**
|
|
338
328
|
* 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
|
|
329
|
+
* auto-dream). When settings.defaults.auxText names a valid pool model, build
|
|
330
|
+
* (and cache) a dedicated client for it so per-turn book-keeping runs on a cheap
|
|
341
331
|
* fast model instead of the expensive primary. Falls back to `fallback` (the
|
|
342
332
|
* active run's client) when unset, unknown, or on any build failure — aux
|
|
343
333
|
* work is best-effort and must never break a run.
|
|
@@ -366,20 +356,26 @@ export declare class Engine {
|
|
|
366
356
|
* Switch the active model by pool key. Takes effect on the next run() call.
|
|
367
357
|
* Returns the new model entry.
|
|
368
358
|
*
|
|
369
|
-
* Persists settings.
|
|
359
|
+
* Persists settings.defaults.text (= the connection id / pool key) so the
|
|
370
360
|
* next process startup defaults to the same model — without this, switches
|
|
371
361
|
* only live in memory and every restart reverts to the previously persisted
|
|
372
|
-
*
|
|
362
|
+
* defaults.text.
|
|
373
363
|
*/
|
|
374
364
|
switchModel(key: string): ModelEntry;
|
|
365
|
+
/**
|
|
366
|
+
* Zero a session's cumulative token/cache usage on disk. Called on a model
|
|
367
|
+
* switch: a different model has its own prompt cache, so the accumulated
|
|
368
|
+
* cache-hit stats from the prior model are no longer meaningful. The next
|
|
369
|
+
* run's baseline (snapshotted from state.tokenUsage) then starts from zero.
|
|
370
|
+
*/
|
|
371
|
+
resetSessionUsage(sessionId: string): void;
|
|
375
372
|
/**
|
|
376
373
|
* Write the active model selection to ~/.code-shell/settings.json.
|
|
377
374
|
*
|
|
378
|
-
*
|
|
379
|
-
*
|
|
380
|
-
*
|
|
381
|
-
*
|
|
382
|
-
* undefined when the entry resolves via providerCatalog.
|
|
375
|
+
* Persists settings.defaults.text = entry.key (the connection id == pool
|
|
376
|
+
* key). That is the single field the boot path reads to restore the active
|
|
377
|
+
* text model on the next startup (see ctor: settings.defaults.text → pool
|
|
378
|
+
* switch). No legacy activeKey/model.* mirror is written.
|
|
383
379
|
*/
|
|
384
380
|
private persistActiveModel;
|
|
385
381
|
/** Get the model pool. */
|
|
@@ -401,12 +397,10 @@ export declare class Engine {
|
|
|
401
397
|
* payloads are dropped so out-of-order reload deliveries can't let an older
|
|
402
398
|
* config clobber a newer one (Q5).
|
|
403
399
|
*
|
|
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.
|
|
400
|
+
* MCP: reconciles the shared MCP pool against the new disk-default server
|
|
401
|
+
* set. Added servers connect idempotently; removed/disabled servers are
|
|
402
|
+
* disconnected and their registered MCP tools are unregistered so plugin
|
|
403
|
+
* disable takes effect without an Electron restart.
|
|
410
404
|
*
|
|
411
405
|
* Preset (#2): a preset hot-reload re-resolves `this.preset` so the next-turn
|
|
412
406
|
* PromptComposer picks up the new preset's system prompt / behavior — that's
|
|
@@ -436,6 +430,26 @@ export declare class Engine {
|
|
|
436
430
|
* engine.run() call for this session picks up the injected content
|
|
437
431
|
* instead of a stale snapshot from the previous run.
|
|
438
432
|
*/
|
|
433
|
+
/**
|
|
434
|
+
* Read a session's persisted active goal WITHOUT resuming it (cheap — reads
|
|
435
|
+
* only state.json via SessionManager.readActiveGoal). The desktop host calls
|
|
436
|
+
* this on session load to re-surface the goal block + its Cancel button: a
|
|
437
|
+
* persistent goal lives only in state.activeGoal and is never replayed from
|
|
438
|
+
* the transcript, so after a reload of an aborted goal run the UI would
|
|
439
|
+
* otherwise show nothing (the "goal 还在但页面不显示、取消不了" bug). Returns
|
|
440
|
+
* undefined when the session is unknown or has no active goal.
|
|
441
|
+
*/
|
|
442
|
+
getGoal(sessionId: string): GoalConfig | undefined;
|
|
443
|
+
/**
|
|
444
|
+
* Clear a session's persisted active goal (CC `/goal clear`). Works whether
|
|
445
|
+
* the session is idle or its goal run is in flight: it wipes
|
|
446
|
+
* `state.activeGoal` (so the next bare send won't re-inherit it) and, if a
|
|
447
|
+
* goal hook is currently registered for this engine, unregisters it so an
|
|
448
|
+
* in-flight run can stop instead of being re-blocked by the now-cleared goal.
|
|
449
|
+
* Returns true if a goal was actually cleared. Idempotent — clearing a
|
|
450
|
+
* session with no active goal is a no-op returning false.
|
|
451
|
+
*/
|
|
452
|
+
clearGoal(sessionId: string): boolean;
|
|
439
453
|
injectContext(sessionId: string, content: string): void;
|
|
440
454
|
/**
|
|
441
455
|
* Force context compaction on the current session.
|
|
@@ -466,6 +480,25 @@ export declare class Engine {
|
|
|
466
480
|
*/
|
|
467
481
|
setPermissionMode(mode: NonNullable<EngineConfig["permissionMode"]>): void;
|
|
468
482
|
getPermissionMode(): NonNullable<EngineConfig["permissionMode"]>;
|
|
483
|
+
/**
|
|
484
|
+
* Extend the in-flight run's turn ceiling and/or goal budgets (TODO 3.1 —
|
|
485
|
+
* 运行中续轮/加预算). No-op (returns null) when no run is active. Lets a user
|
|
486
|
+
* keep an unattended goal going past its original cap instead of restarting.
|
|
487
|
+
*/
|
|
488
|
+
extendGoalRun(opts: GoalExtension): {
|
|
489
|
+
maxTurns: number;
|
|
490
|
+
tokenBudget?: number;
|
|
491
|
+
timeBudgetMs?: number;
|
|
492
|
+
maxStopBlocks: number;
|
|
493
|
+
} | null;
|
|
494
|
+
/**
|
|
495
|
+
* The effective permission rules for the current mode + cwd (TODO 5.1) —
|
|
496
|
+
* preset defaults + mode-derived + settings.permissions.rules, in the same
|
|
497
|
+
* order the classifier evaluates them. Exposed read-only so `/permissions`
|
|
498
|
+
* (and any UI) can list what's actually in force. Pure read; builds the same
|
|
499
|
+
* rule set buildPermissionConfig does, without constructing a backend.
|
|
500
|
+
*/
|
|
501
|
+
getPermissionRules(): import("../types.js").PermissionRule[];
|
|
469
502
|
/**
|
|
470
503
|
* Toggle plan mode directly. Called by the Plan tool (Task 7) via ToolContext.engine.
|
|
471
504
|
* Also syncs permissionMode to keep both fields consistent.
|
|
@@ -489,6 +522,14 @@ export declare class Engine {
|
|
|
489
522
|
* both. Subscribe-before-await closes the check/wait race either way.
|
|
490
523
|
*/
|
|
491
524
|
private waitForBackgroundAgentChange;
|
|
525
|
+
/**
|
|
526
|
+
* Like waitForBackgroundAgentChange but with no abort signal and a hard
|
|
527
|
+
* timeout. Resolves `true` on a registry/queue change, `false` if `timeoutMs`
|
|
528
|
+
* elapses first. Used only by the headless abort-drain cleanup, where we want
|
|
529
|
+
* to catch a completing agent's just-about-to-enqueue notification without
|
|
530
|
+
* risking a permanent hang on an agent that never completes.
|
|
531
|
+
*/
|
|
532
|
+
private waitForBackgroundAgentChangeOrTimeout;
|
|
492
533
|
/**
|
|
493
534
|
* Sub-agent role registry for the given cwd, memoized per-cwd so the
|
|
494
535
|
* directory is read once rather than every turn. A new cwd (e.g. via
|
|
@@ -519,6 +560,58 @@ export declare class Engine {
|
|
|
519
560
|
* by tests that want a ToolContext without a full run() cycle.
|
|
520
561
|
*/
|
|
521
562
|
private resolveSandboxWithoutRuntime;
|
|
563
|
+
/**
|
|
564
|
+
* Build the shell env layered onto the Bash tool / background shells (see
|
|
565
|
+
* mergeShellEnv). Three user-configured sources, merged lowest → highest:
|
|
566
|
+
*
|
|
567
|
+
* 1. project `localEnvironment.env` — the per-project "local environment"
|
|
568
|
+
* panel (DATABASE_URL etc.); the floor, so a project's own panel values
|
|
569
|
+
* can be overridden by an explicit top-level `env`.
|
|
570
|
+
* 2. global top-level `env` — ~/.code-shell/settings.json; the
|
|
571
|
+
* canonical home for API keys (OPENAI_API_KEY) a skill script reads —
|
|
572
|
+
* configure once, every project's skills get it.
|
|
573
|
+
* 3. project top-level `env` — .code-shell/settings.json; a project
|
|
574
|
+
* that wants to override a global key wins.
|
|
575
|
+
*
|
|
576
|
+
* Each scope is read UNMERGED so the layering here is the single source of
|
|
577
|
+
* precedence (getForScope merges nothing). Returns undefined when no layer
|
|
578
|
+
* contributes a key, so the caller passes it through unchanged for projects
|
|
579
|
+
* that configure none.
|
|
580
|
+
*
|
|
581
|
+
* Sub-agents: a sub-agent is the user's OWN agent doing the user's work
|
|
582
|
+
* (mirrors Claude Code, where sub-agents inherit the parent environment), so
|
|
583
|
+
* it now reads the SAME env as the parent. The sub-agent branch is kept as an
|
|
584
|
+
* explicit seam (`filterSubagentEnv`) rather than removed — a future policy
|
|
585
|
+
* could narrow what a sub-agent sees (e.g. drop credential secrets) by
|
|
586
|
+
* changing that one hook; today it passes everything through unchanged.
|
|
587
|
+
* A no-cwd context still gets nothing (there is genuinely no project to read).
|
|
588
|
+
*
|
|
589
|
+
* None of these is filtered through the deny regex (mergeShellEnv): the user
|
|
590
|
+
* put them there deliberately. The allowlist/deny machinery only guards the
|
|
591
|
+
* host's process.env from a tainted model exfiltrating it via `env | curl`.
|
|
592
|
+
*/
|
|
593
|
+
private readShellEnv;
|
|
594
|
+
/**
|
|
595
|
+
* Policy seam for what a sub-agent's shell sees. A sub-agent inherits the
|
|
596
|
+
* parent environment by default (mirrors Claude Code), so this is the
|
|
597
|
+
* identity function today. It exists so a future policy can narrow the set
|
|
598
|
+
* (e.g. strip credential `exposeAsEnv` secrets, or allowlist by name) in ONE
|
|
599
|
+
* place instead of scattering `isSubAgent` checks through readShellEnv.
|
|
600
|
+
*/
|
|
601
|
+
private filterSubagentEnv;
|
|
602
|
+
/**
|
|
603
|
+
* Read the project's `localEnvironment.setupScripts` for this cwd (the raw
|
|
604
|
+
* per-platform map). Used by EnterWorktree to run setup once in a freshly
|
|
605
|
+
* created worktree. Returns undefined for sub-agents / no cwd (same minimal
|
|
606
|
+
* surface as readShellEnv). The platform selection + run live in
|
|
607
|
+
* git/worktree.ts; this only fetches the configured scripts.
|
|
608
|
+
*/
|
|
609
|
+
readWorktreeSetupScripts(cwd?: string): {
|
|
610
|
+
default?: string;
|
|
611
|
+
macos?: string;
|
|
612
|
+
linux?: string;
|
|
613
|
+
windows?: string;
|
|
614
|
+
} | undefined;
|
|
522
615
|
buildToolContext(): ToolContext;
|
|
523
616
|
/**
|
|
524
617
|
* Read settings.disabledSkills + settings.disabledPlugins in a single
|
|
@@ -532,4 +625,40 @@ export declare class Engine {
|
|
|
532
625
|
* the same snapshot.
|
|
533
626
|
*/
|
|
534
627
|
private readDisabledLists;
|
|
628
|
+
/**
|
|
629
|
+
* Public view of the folded disabled lists, for hosts that need the
|
|
630
|
+
* EFFECTIVE state (e.g. the protocol server's settings hot-reload rebuilds
|
|
631
|
+
* the plugin-MCP merge per session — a project-level "on" must override the
|
|
632
|
+
* global disabledPlugins there too).
|
|
633
|
+
*/
|
|
634
|
+
getEffectiveDisabledLists(): {
|
|
635
|
+
disabledSkills: string[];
|
|
636
|
+
disabledPlugins: string[];
|
|
637
|
+
};
|
|
638
|
+
/**
|
|
639
|
+
* Public: resolve every known feature flag to its effective boolean (the
|
|
640
|
+
* settings overlay merged over the compiled-in defaults). Used by the
|
|
641
|
+
* `config` protocol query so the `/features` command can list flag state.
|
|
642
|
+
*/
|
|
643
|
+
getFeatureFlags(): Record<FeatureFlagName, boolean>;
|
|
644
|
+
/**
|
|
645
|
+
* Read the merged `settings.featureFlags` overlay for this cwd. Project
|
|
646
|
+
* settings override user settings via the normal SettingsManager merge.
|
|
647
|
+
* Returns undefined (→ all defaults) on any read error or for sub-agents,
|
|
648
|
+
* so a flag check never throws and a child runs with default behavior.
|
|
649
|
+
*/
|
|
650
|
+
private readFeatureFlags;
|
|
651
|
+
/**
|
|
652
|
+
* Read settings.memories ({ maxCount, maxAge, extractionModel, autoExtract }).
|
|
653
|
+
* Returns undefined on any error or when absent, so the memory pipeline
|
|
654
|
+
* falls back to its built-in defaults.
|
|
655
|
+
*/
|
|
656
|
+
private readMemoriesConfig;
|
|
657
|
+
/**
|
|
658
|
+
* LLM client for memory extraction (TODO 8.1). Prefers
|
|
659
|
+
* settings.memories.extractionModel when it names a valid pool model;
|
|
660
|
+
* otherwise falls back to the aux client (which itself falls back to the
|
|
661
|
+
* passed primary). Build failures fall back too — extraction is best-effort.
|
|
662
|
+
*/
|
|
663
|
+
private resolveExtractionClient;
|
|
535
664
|
}
|