@cjhyy/code-shell-core 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -23
- package/dist/agent/agent-definition-registry.d.ts +2 -2
- package/dist/agent/agent-definition-registry.js +47 -10
- package/dist/agent/agent-definition.d.ts +5 -0
- package/dist/agent/agent-definition.js +14 -0
- package/dist/automation/index.d.ts +7 -4
- package/dist/automation/index.js +4 -2
- package/dist/automation/runner.js +3 -1
- package/dist/automation/scheduler.d.ts +57 -1
- package/dist/automation/scheduler.js +123 -23
- package/dist/automation/store.d.ts +6 -2
- package/dist/automation/store.js +7 -3
- package/dist/capabilities/index.d.ts +109 -0
- package/dist/capabilities/index.js +80 -0
- package/dist/capability-control/disabled-lists.d.ts +2 -1
- package/dist/capability-control/disabled-lists.js +3 -5
- package/dist/capability-control/overlay.d.ts +14 -1
- package/dist/capability-control/overlay.js +40 -0
- package/dist/capability-control/service.js +6 -4
- package/dist/cli/agent-server-stdio.d.ts +1 -1
- package/dist/cli/agent-server-stdio.js +66 -6
- package/dist/cli/agent-server-tcp.js +20 -5
- package/dist/context/compaction.d.ts +39 -3
- package/dist/context/compaction.js +151 -39
- package/dist/context/manager.d.ts +20 -4
- package/dist/context/manager.js +42 -7
- package/dist/context/token-counter.js +5 -3
- package/dist/context/tool-result-storage.d.ts +6 -0
- package/dist/context/tool-result-storage.js +25 -4
- package/dist/credentials/access.d.ts +13 -2
- package/dist/credentials/access.js +99 -4
- package/dist/credentials/index.d.ts +3 -2
- package/dist/credentials/index.js +2 -1
- package/dist/credentials/oauth.d.ts +9 -1
- package/dist/credentials/oauth.js +80 -1
- package/dist/credentials/store.d.ts +16 -2
- package/dist/credentials/store.js +33 -11
- package/dist/credentials/types.d.ts +62 -1
- package/dist/credentials/types.js +16 -1
- package/dist/credentials/use-credential-tool.js +15 -1
- package/dist/engine/auxiliary-pipeline.d.ts +40 -0
- package/dist/engine/auxiliary-pipeline.js +181 -0
- package/dist/{settings → engine}/disk-defaults.d.ts +2 -2
- package/dist/{settings → engine}/disk-defaults.js +5 -2
- package/dist/engine/dynamic-tool-defs.d.ts +4 -0
- package/dist/engine/dynamic-tool-defs.js +4 -0
- package/dist/engine/engine.d.ts +272 -184
- package/dist/engine/engine.js +1869 -1864
- package/dist/engine/file-history-hook.d.ts +11 -0
- package/dist/engine/file-history-hook.js +31 -0
- package/dist/engine/goal-judge-context.d.ts +9 -0
- package/dist/engine/goal-judge-context.js +234 -0
- package/dist/engine/injected-context-cache.d.ts +6 -0
- package/dist/engine/injected-context-cache.js +13 -0
- package/dist/engine/input-attachments.d.ts +1 -1
- package/dist/engine/model-facade.d.ts +3 -3
- package/dist/engine/model-facade.js +15 -14
- package/dist/engine/permission-controller.d.ts +55 -0
- package/dist/engine/permission-controller.js +148 -0
- package/dist/engine/prompt-cache-diagnostics.d.ts +58 -0
- package/dist/engine/prompt-cache-diagnostics.js +178 -0
- package/dist/engine/run-accounting.d.ts +41 -0
- package/dist/engine/run-accounting.js +126 -0
- package/dist/engine/run-context.d.ts +44 -0
- package/dist/engine/run-context.js +88 -0
- package/dist/engine/run-environment.d.ts +30 -0
- package/dist/engine/run-environment.js +77 -0
- package/dist/engine/run-finalize.d.ts +58 -0
- package/dist/engine/run-finalize.js +245 -0
- package/dist/engine/run-goal.d.ts +58 -0
- package/dist/engine/run-goal.js +188 -0
- package/dist/engine/run-image-input.d.ts +1 -1
- package/dist/engine/run-image-input.js +5 -3
- package/dist/engine/run-session-open.d.ts +41 -0
- package/dist/engine/run-session-open.js +186 -0
- package/dist/engine/run-setup.d.ts +42 -0
- package/dist/engine/run-setup.js +58 -0
- package/dist/engine/run-tooling.d.ts +125 -0
- package/dist/engine/run-tooling.js +283 -0
- package/dist/engine/run-types.d.ts +139 -0
- package/dist/engine/run-types.js +12 -0
- package/dist/engine/run-workspace.d.ts +50 -0
- package/dist/engine/run-workspace.js +114 -0
- package/dist/engine/session-title.d.ts +2 -1
- package/dist/engine/session-title.js +4 -1
- package/dist/engine/steer-queue.d.ts +1 -1
- package/dist/engine/subagent-spawner.d.ts +32 -0
- package/dist/engine/subagent-spawner.js +287 -0
- package/dist/engine/tool-summary.d.ts +2 -2
- package/dist/engine/tool-summary.js +2 -2
- package/dist/engine/turn-loop.d.ts +67 -10
- package/dist/engine/turn-loop.js +538 -97
- package/dist/engine/types.d.ts +35 -4
- package/dist/engine/types.js +1 -1
- package/dist/{engine/goal.d.ts → goal/lifecycle.d.ts} +80 -6
- package/dist/goal/lifecycle.js +482 -0
- package/dist/hooks/events.d.ts +26 -9
- package/dist/hooks/events.js +0 -3
- package/dist/hooks/goal-stop-hook.d.ts +28 -29
- package/dist/hooks/goal-stop-hook.js +344 -144
- package/dist/hooks/registry.js +4 -1
- package/dist/hooks/shell-runner.d.ts +12 -1
- package/dist/hooks/shell-runner.js +160 -9
- package/dist/index.d.ts +51 -110
- package/dist/index.extension.d.ts +51 -0
- package/dist/index.extension.js +39 -0
- package/dist/index.internal.d.ts +86 -0
- package/dist/index.internal.js +92 -0
- package/dist/index.js +37 -125
- package/dist/links/cli.d.ts +48 -0
- package/dist/links/cli.js +617 -0
- package/dist/links/http.d.ts +40 -0
- package/dist/links/http.js +166 -0
- package/dist/links/index.d.ts +4 -0
- package/dist/links/index.js +3 -0
- package/dist/links/link-action-tool.d.ts +5 -0
- package/dist/links/link-action-tool.js +241 -0
- package/dist/links/providers.d.ts +8 -0
- package/dist/links/providers.js +665 -0
- package/dist/links/types.d.ts +44 -0
- package/dist/llm/client-base.d.ts +7 -0
- package/dist/llm/client-base.js +72 -10
- package/dist/llm/model-pool.d.ts +1 -1
- package/dist/llm/model-pool.js +1 -1
- package/dist/llm/providers/anthropic.d.ts +1 -0
- package/dist/llm/providers/anthropic.js +9 -0
- package/dist/llm/providers/openai.d.ts +1 -0
- package/dist/llm/providers/openai.js +17 -0
- package/dist/llm/types.d.ts +12 -5
- package/dist/model-catalog/index.js +15 -2
- package/dist/model-catalog/resolve.d.ts +13 -1
- package/dist/model-catalog/resolve.js +37 -2
- package/dist/model-catalog/types.d.ts +74 -48
- package/dist/model-catalog/types.js +16 -5
- package/dist/model-catalog/upsert.d.ts +3 -1
- package/dist/model-catalog/upsert.js +9 -0
- package/dist/onboarding.d.ts +0 -1
- package/dist/onboarding.js +1 -22
- package/dist/panel-apps/bindings.d.ts +24 -0
- package/dist/panel-apps/bindings.js +69 -0
- package/dist/panel-apps/github-archive.d.ts +21 -0
- package/dist/panel-apps/github-archive.js +98 -0
- package/dist/panel-apps/index.d.ts +4 -0
- package/dist/panel-apps/index.js +4 -0
- package/dist/panel-apps/installer.d.ts +68 -0
- package/dist/panel-apps/installer.js +622 -0
- package/dist/panel-apps/manifest.d.ts +364 -0
- package/dist/panel-apps/manifest.js +189 -0
- package/dist/panel-apps/paths.d.ts +13 -0
- package/dist/panel-apps/paths.js +38 -0
- package/dist/panel-apps/registry.d.ts +51 -0
- package/dist/panel-apps/registry.js +99 -0
- package/dist/panel-apps/runtime.d.ts +80 -0
- package/dist/panel-apps/runtime.js +154 -0
- package/dist/plugins/gitOps.js +8 -1
- package/dist/plugins/installedPlugins.d.ts +2 -1
- package/dist/plugins/installedPlugins.js +146 -8
- package/dist/plugins/installer/codex/convertAgents.d.ts +4 -1
- package/dist/plugins/installer/codex/convertAgents.js +62 -8
- package/dist/plugins/installer/codex/convertCommands.d.ts +5 -5
- package/dist/plugins/installer/codex/convertCommands.js +35 -12
- package/dist/plugins/installer/codex/convertHooks.d.ts +10 -0
- package/dist/plugins/installer/codex/convertHooks.js +82 -0
- package/dist/plugins/installer/codex/convertSkills.js +41 -6
- package/dist/plugins/installer/install.d.ts +7 -1
- package/dist/plugins/installer/install.js +21 -87
- package/dist/plugins/installer/installFromArchive.d.ts +26 -4
- package/dist/plugins/installer/installFromArchive.js +44 -27
- package/dist/plugins/installer/installFromNpm.d.ts +31 -0
- package/dist/plugins/installer/installFromNpm.js +273 -0
- package/dist/plugins/installer/loadPluginAgents.js +17 -4
- package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
- package/dist/plugins/installer/loadPluginMcp.js +245 -35
- package/dist/plugins/installer/normalizeManifest.d.ts +13 -0
- package/dist/plugins/installer/normalizeManifest.js +306 -0
- package/dist/plugins/installer/npmTar.d.ts +13 -0
- package/dist/plugins/installer/npmTar.js +321 -0
- package/dist/plugins/installer/parseSource.d.ts +11 -0
- package/dist/plugins/installer/parseSource.js +48 -0
- package/dist/plugins/installer/preview.d.ts +101 -0
- package/dist/plugins/installer/preview.js +336 -0
- package/dist/plugins/installer/projectPluginSource.d.ts +14 -0
- package/dist/plugins/installer/projectPluginSource.js +140 -0
- package/dist/plugins/installer/types.d.ts +775 -0
- package/dist/plugins/installer/types.js +100 -0
- package/dist/plugins/installer/unzip.d.ts +11 -0
- package/dist/plugins/installer/unzip.js +123 -9
- package/dist/plugins/installer/update.d.ts +2 -2
- package/dist/plugins/installer/update.js +43 -4
- package/dist/plugins/loadPluginHooks.d.ts +19 -2
- package/dist/plugins/loadPluginHooks.js +97 -86
- package/dist/plugins/pluginAutomationTemplates.d.ts +18 -0
- package/dist/plugins/pluginAutomationTemplates.js +50 -0
- package/dist/plugins/pluginCatalog.d.ts +45 -0
- package/dist/plugins/pluginCatalog.js +87 -0
- package/dist/plugins/pluginCommandHook.d.ts +10 -4
- package/dist/plugins/pluginCommandHook.js +133 -18
- package/dist/plugins/pluginCommandsLoader.d.ts +19 -0
- package/dist/plugins/pluginCommandsLoader.js +181 -7
- package/dist/plugins/pluginContent.d.ts +10 -1
- package/dist/plugins/pluginContent.js +87 -30
- package/dist/plugins/pluginHookApproval.d.ts +30 -0
- package/dist/plugins/pluginHookApproval.js +160 -0
- package/dist/plugins/pluginHookIntegrity.d.ts +69 -0
- package/dist/plugins/pluginHookIntegrity.js +361 -0
- package/dist/plugins/pluginInstaller.js +71 -12
- package/dist/plugins/pluginMcpApproval.d.ts +19 -0
- package/dist/plugins/pluginMcpApproval.js +110 -0
- package/dist/plugins/pluginMcpIntegrity.d.ts +21 -0
- package/dist/plugins/pluginMcpIntegrity.js +74 -0
- package/dist/plugins/types.d.ts +30 -0
- package/dist/plugins/varRewrite.d.ts +9 -5
- package/dist/plugins/varRewrite.js +26 -17
- package/dist/preset/index.d.ts +11 -8
- package/dist/preset/index.js +62 -203
- package/dist/product/define.js +9 -3
- package/dist/product/types.d.ts +0 -2
- package/dist/profile/activation.d.ts +36 -0
- package/dist/profile/activation.js +57 -0
- package/dist/profile/catalog-store.d.ts +77 -0
- package/dist/profile/catalog-store.js +346 -0
- package/dist/profile/catalog.d.ts +54 -0
- package/dist/profile/catalog.js +152 -0
- package/dist/profile/index.d.ts +7 -0
- package/dist/profile/index.js +7 -0
- package/dist/profile/requirements.d.ts +76 -0
- package/dist/profile/requirements.js +117 -0
- package/dist/profile/resolve.d.ts +11 -0
- package/dist/profile/resolve.js +41 -0
- package/dist/profile/store.d.ts +17 -0
- package/dist/profile/store.js +167 -0
- package/dist/profile/types.d.ts +321 -0
- package/dist/profile/types.js +104 -0
- package/dist/prompt/composer.d.ts +46 -7
- package/dist/prompt/composer.js +78 -48
- package/dist/prompt/instruction-scanner.d.ts +6 -5
- package/dist/prompt/instruction-scanner.js +8 -23
- package/dist/prompt/section-loader.d.ts +2 -2
- package/dist/prompt/section-loader.js +7 -4
- package/dist/prompt/sections/browser.md +10 -9
- package/dist/prompt/sections/harness-base.md +9 -0
- package/dist/protocol/chat-session-manager.d.ts +77 -3
- package/dist/protocol/chat-session-manager.js +194 -18
- package/dist/protocol/chat-session.d.ts +72 -9
- package/dist/protocol/chat-session.js +151 -16
- package/dist/protocol/client.d.ts +37 -4
- package/dist/protocol/client.js +118 -6
- package/dist/protocol/index.d.ts +2 -2
- package/dist/protocol/index.js +2 -2
- package/dist/protocol/mobile-remote-types.d.ts +406 -0
- package/dist/protocol/mobile-remote-types.js +1 -0
- package/dist/protocol/server.d.ts +152 -14
- package/dist/protocol/server.js +1574 -229
- package/dist/protocol/types.d.ts +182 -32
- package/dist/protocol/types.js +18 -0
- package/dist/run/ArtifactTracker.d.ts +6 -1
- package/dist/run/ArtifactTracker.js +29 -21
- package/dist/run/EngineRunner.d.ts +2 -0
- package/dist/run/EngineRunner.js +1 -0
- package/dist/run/RunManager.d.ts +26 -0
- package/dist/run/RunManager.js +82 -11
- package/dist/run/factory.d.ts +3 -0
- package/dist/run/factory.js +2 -0
- package/dist/runtime/safe-spawn.d.ts +6 -0
- package/dist/runtime/safe-spawn.js +8 -13
- package/dist/services/auto-dream.d.ts +13 -1
- package/dist/services/auto-dream.js +56 -8
- package/dist/services/dream-consolidation.d.ts +3 -0
- package/dist/services/dream-consolidation.js +14 -2
- package/dist/services/index.d.ts +1 -1
- package/dist/services/index.js +1 -1
- package/dist/services/memory-orchestrator.js +6 -2
- package/dist/services/oauth.d.ts +34 -10
- package/dist/services/oauth.js +236 -98
- package/dist/services/session-memory.d.ts +4 -4
- package/dist/services/session-memory.js +13 -10
- package/dist/session/memory.d.ts +26 -7
- package/dist/session/memory.js +79 -21
- package/dist/session/session-manager.d.ts +208 -25
- package/dist/session/session-manager.js +1232 -116
- package/dist/session/session-message.d.ts +22 -0
- package/dist/session/session-message.js +1 -0
- package/dist/session/transcript.d.ts +76 -6
- package/dist/session/transcript.js +278 -7
- package/dist/settings/feature-flags.d.ts +40 -0
- package/dist/settings/feature-flags.js +40 -0
- package/dist/settings/manager.d.ts +39 -1
- package/dist/settings/manager.js +102 -41
- package/dist/settings/migrate-config.js +4 -2
- package/dist/settings/schema.d.ts +511 -177
- package/dist/settings/schema.js +98 -25
- package/dist/skills/scanner.d.ts +6 -2
- package/dist/skills/scanner.js +160 -9
- package/dist/sources/adapter.d.ts +14 -0
- package/dist/sources/adapter.js +7 -0
- package/dist/sources/adapters/local-files.d.ts +10 -0
- package/dist/sources/adapters/local-files.js +127 -0
- package/dist/sources/adapters/mcp-resource.d.ts +17 -0
- package/dist/sources/adapters/mcp-resource.js +41 -0
- package/dist/sources/adapters/mock.d.ts +3 -0
- package/dist/sources/adapters/mock.js +29 -0
- package/dist/sources/binding.d.ts +6 -0
- package/dist/sources/binding.js +24 -0
- package/dist/sources/catalog.d.ts +6 -0
- package/dist/sources/catalog.js +64 -0
- package/dist/sources/context-summary.d.ts +8 -0
- package/dist/sources/context-summary.js +13 -0
- package/dist/sources/credential-status.d.ts +2 -0
- package/dist/sources/credential-status.js +13 -0
- package/dist/sources/index.d.ts +10 -0
- package/dist/sources/index.js +10 -0
- package/dist/sources/resolve.d.ts +28 -0
- package/dist/sources/resolve.js +47 -0
- package/dist/sources/truncate-utf8.d.ts +7 -0
- package/dist/sources/truncate-utf8.js +18 -0
- package/dist/sources/types.d.ts +71 -0
- package/dist/sources/types.js +26 -0
- package/dist/testing/fetch-stub.d.ts +32 -0
- package/dist/testing/fetch-stub.js +24 -0
- package/dist/themes/image.d.ts +18 -0
- package/dist/themes/image.js +117 -0
- package/dist/themes/index.d.ts +4 -0
- package/dist/themes/index.js +4 -0
- package/dist/themes/installer.d.ts +50 -0
- package/dist/themes/installer.js +290 -0
- package/dist/themes/manifest.d.ts +102 -0
- package/dist/themes/manifest.js +86 -0
- package/dist/themes/paths.d.ts +14 -0
- package/dist/themes/paths.js +33 -0
- package/dist/tool-system/browser-bridge.d.ts +53 -11
- package/dist/tool-system/browser-bridge.js +8 -9
- package/dist/tool-system/builtin/agent-heartbeat.d.ts +2 -2
- package/dist/tool-system/builtin/agent-heartbeat.js +20 -6
- package/dist/tool-system/builtin/agent-notifications.d.ts +127 -72
- package/dist/tool-system/builtin/agent-notifications.js +291 -101
- package/dist/tool-system/builtin/agent-output-file.js +1 -3
- package/dist/tool-system/builtin/agent-progress.d.ts +6 -0
- package/dist/tool-system/builtin/agent-progress.js +83 -0
- package/dist/tool-system/builtin/agent-registry.d.ts +38 -2
- package/dist/tool-system/builtin/agent-registry.js +178 -9
- package/dist/tool-system/builtin/agent-transcript-translator.js +1 -1
- package/dist/tool-system/builtin/agent.d.ts +2 -0
- package/dist/tool-system/builtin/agent.js +279 -34
- package/dist/tool-system/builtin/background-jobs.d.ts +63 -7
- package/dist/tool-system/builtin/background-jobs.js +111 -15
- package/dist/tool-system/builtin/background-work.d.ts +12 -1
- package/dist/tool-system/builtin/background-work.js +12 -1
- package/dist/tool-system/builtin/bash.d.ts +3 -5
- package/dist/tool-system/builtin/bash.js +14 -6
- package/dist/tool-system/builtin/browser-tools.d.ts +8 -5
- package/dist/tool-system/builtin/browser-tools.js +89 -23
- package/dist/tool-system/builtin/edit-model-catalog.d.ts +6 -0
- package/dist/tool-system/builtin/edit-model-catalog.js +172 -12
- package/dist/tool-system/builtin/edit.d.ts +2 -1
- package/dist/tool-system/builtin/edit.js +14 -10
- package/dist/tool-system/builtin/file-cache.d.ts +2 -0
- package/dist/tool-system/builtin/file-cache.js +4 -0
- package/dist/tool-system/builtin/generate-image.js +17 -10
- package/dist/tool-system/builtin/generate-video.d.ts +4 -0
- package/dist/tool-system/builtin/generate-video.js +164 -28
- package/dist/tool-system/builtin/glob.d.ts +2 -1
- package/dist/tool-system/builtin/glob.js +28 -3
- package/dist/tool-system/builtin/grep.d.ts +1 -0
- package/dist/tool-system/builtin/grep.js +82 -17
- package/dist/tool-system/builtin/image-uploader.js +7 -1
- package/dist/tool-system/builtin/index.d.ts +57 -18
- package/dist/tool-system/builtin/index.js +280 -167
- package/dist/tool-system/builtin/memory.d.ts +6 -0
- package/dist/tool-system/builtin/memory.js +36 -15
- package/dist/tool-system/builtin/panel.d.ts +9 -0
- package/dist/tool-system/builtin/panel.js +314 -0
- package/dist/tool-system/builtin/read.js +5 -1
- package/dist/tool-system/builtin/send-message-to-session.d.ts +6 -0
- package/dist/tool-system/builtin/send-message-to-session.js +67 -0
- package/dist/tool-system/builtin/sources.d.ts +8 -0
- package/dist/tool-system/builtin/sources.js +137 -0
- package/dist/tool-system/builtin/tool-search.js +7 -2
- package/dist/tool-system/builtin/update-automation-memory.js +2 -0
- package/dist/tool-system/builtin/video-providers.d.ts +12 -15
- package/dist/tool-system/builtin/video-providers.js +1 -0
- package/dist/tool-system/builtin/view-image.d.ts +2 -2
- package/dist/tool-system/builtin/web-fetch.js +60 -15
- package/dist/tool-system/builtin/web-search.js +1 -3
- package/dist/tool-system/builtin/write.d.ts +2 -1
- package/dist/tool-system/builtin/write.js +14 -4
- package/dist/tool-system/capability-module.d.ts +93 -0
- package/dist/tool-system/capability-module.js +53 -0
- package/dist/tool-system/context.d.ts +94 -24
- package/dist/tool-system/executor.js +99 -58
- package/dist/tool-system/external-tool-exposure.d.ts +60 -0
- package/dist/tool-system/external-tool-exposure.js +304 -0
- package/dist/tool-system/mcp-manager.d.ts +17 -1
- package/dist/tool-system/mcp-manager.js +72 -7
- package/dist/tool-system/mcp-tool-policy.d.ts +9 -0
- package/dist/tool-system/mcp-tool-policy.js +34 -0
- package/dist/tool-system/panel-bridge.d.ts +53 -0
- package/dist/tool-system/panel-bridge.js +1 -0
- package/dist/tool-system/path-policy.d.ts +19 -0
- package/dist/tool-system/path-policy.js +62 -1
- package/dist/tool-system/permission.d.ts +69 -3
- package/dist/tool-system/permission.js +429 -30
- package/dist/tool-system/registry.d.ts +15 -3
- package/dist/tool-system/registry.js +82 -40
- package/dist/tool-system/sandbox/index.js +3 -8
- package/dist/tool-system/sandbox/seatbelt.js +2 -6
- package/dist/tool-system/session-tool-host.d.ts +139 -0
- package/dist/tool-system/session-tool-host.js +167 -0
- package/dist/tool-system/testing/tool-registry-harness.d.ts +31 -0
- package/dist/tool-system/testing/tool-registry-harness.js +51 -0
- package/dist/tool-system/validation.d.ts +14 -7
- package/dist/tool-system/validation.js +701 -7
- package/dist/types.d.ts +201 -20
- package/dist/{cc-orchestrator → utils}/cwd-normalize.d.ts +1 -0
- package/dist/{cc-orchestrator → utils}/cwd-normalize.js +1 -0
- package/dist/utils/file-mutex.d.ts +65 -0
- package/dist/utils/file-mutex.js +145 -0
- package/dist/utils/json.d.ts +2 -4
- package/dist/utils/json.js +2 -4
- package/dist/utils/lockfile.d.ts +30 -1
- package/dist/utils/lockfile.js +2 -2
- package/dist/utils/secret-scrubber.d.ts +8 -0
- package/dist/utils/secret-scrubber.js +227 -0
- package/dist/utils/toolDisplay.js +1 -1
- package/package.json +20 -5
- package/THIRD_PARTY_NOTICES.md +0 -206
- package/dist/arena/arena.d.ts +0 -43
- package/dist/arena/arena.js +0 -333
- package/dist/arena/context/context-tools.d.ts +0 -16
- package/dist/arena/context/context-tools.js +0 -272
- package/dist/arena/context/within-root.d.ts +0 -7
- package/dist/arena/context/within-root.js +0 -15
- package/dist/arena/detect-mode.d.ts +0 -20
- package/dist/arena/detect-mode.js +0 -78
- package/dist/arena/digest-builder.d.ts +0 -25
- package/dist/arena/digest-builder.js +0 -120
- package/dist/arena/index.d.ts +0 -29
- package/dist/arena/index.js +0 -29
- package/dist/arena/iterate/convergence.d.ts +0 -25
- package/dist/arena/iterate/convergence.js +0 -103
- package/dist/arena/iterate/formats/index.d.ts +0 -22
- package/dist/arena/iterate/formats/index.js +0 -283
- package/dist/arena/iterate/index.d.ts +0 -11
- package/dist/arena/iterate/index.js +0 -9
- package/dist/arena/iterate/iterative-arena.d.ts +0 -23
- package/dist/arena/iterate/iterative-arena.js +0 -237
- package/dist/arena/iterate/parse.d.ts +0 -42
- package/dist/arena/iterate/parse.js +0 -123
- package/dist/arena/iterate/phases/argue.d.ts +0 -22
- package/dist/arena/iterate/phases/argue.js +0 -165
- package/dist/arena/iterate/phases/revise.d.ts +0 -16
- package/dist/arena/iterate/phases/revise.js +0 -62
- package/dist/arena/iterate/phases/tournament.d.ts +0 -34
- package/dist/arena/iterate/phases/tournament.js +0 -113
- package/dist/arena/iterate/tools/web-tools.d.ts +0 -13
- package/dist/arena/iterate/tools/web-tools.js +0 -54
- package/dist/arena/iterate/types.d.ts +0 -152
- package/dist/arena/iterate/types.js +0 -8
- package/dist/arena/ledger.d.ts +0 -47
- package/dist/arena/ledger.js +0 -159
- package/dist/arena/lenses/architecture.d.ts +0 -5
- package/dist/arena/lenses/architecture.js +0 -22
- package/dist/arena/lenses/engineering.d.ts +0 -5
- package/dist/arena/lenses/engineering.js +0 -22
- package/dist/arena/lenses/general.d.ts +0 -5
- package/dist/arena/lenses/general.js +0 -20
- package/dist/arena/lenses/index.d.ts +0 -16
- package/dist/arena/lenses/index.js +0 -47
- package/dist/arena/lenses/product.d.ts +0 -5
- package/dist/arena/lenses/product.js +0 -22
- package/dist/arena/model-presets.d.ts +0 -23
- package/dist/arena/model-presets.js +0 -44
- package/dist/arena/phases/adjudication.d.ts +0 -24
- package/dist/arena/phases/adjudication.js +0 -141
- package/dist/arena/phases/build-consensus.d.ts +0 -29
- package/dist/arena/phases/build-consensus.js +0 -83
- package/dist/arena/phases/claim-registry.d.ts +0 -26
- package/dist/arena/phases/claim-registry.js +0 -60
- package/dist/arena/phases/cross-review.d.ts +0 -45
- package/dist/arena/phases/cross-review.js +0 -218
- package/dist/arena/phases/debate-rounds.d.ts +0 -27
- package/dist/arena/phases/debate-rounds.js +0 -159
- package/dist/arena/phases/participant-research.d.ts +0 -38
- package/dist/arena/phases/participant-research.js +0 -314
- package/dist/arena/phases/planning-detail-expansion.d.ts +0 -38
- package/dist/arena/phases/planning-detail-expansion.js +0 -119
- package/dist/arena/planner.d.ts +0 -27
- package/dist/arena/planner.js +0 -311
- package/dist/arena/providers/docs.d.ts +0 -7
- package/dist/arena/providers/docs.js +0 -111
- package/dist/arena/providers/git.d.ts +0 -8
- package/dist/arena/providers/git.js +0 -174
- package/dist/arena/providers/index.d.ts +0 -32
- package/dist/arena/providers/index.js +0 -132
- package/dist/arena/providers/none.d.ts +0 -7
- package/dist/arena/providers/none.js +0 -11
- package/dist/arena/providers/repo.d.ts +0 -7
- package/dist/arena/providers/repo.js +0 -258
- package/dist/arena/render/session.d.ts +0 -17
- package/dist/arena/render/session.js +0 -190
- package/dist/arena/render/terminal.d.ts +0 -34
- package/dist/arena/render/terminal.js +0 -286
- package/dist/arena/strategies/discussion.d.ts +0 -25
- package/dist/arena/strategies/discussion.js +0 -143
- package/dist/arena/strategies/index.d.ts +0 -15
- package/dist/arena/strategies/index.js +0 -28
- package/dist/arena/strategies/language-wrapper.d.ts +0 -17
- package/dist/arena/strategies/language-wrapper.js +0 -102
- package/dist/arena/strategies/lens-wrapper.d.ts +0 -16
- package/dist/arena/strategies/lens-wrapper.js +0 -236
- package/dist/arena/strategies/planning.d.ts +0 -30
- package/dist/arena/strategies/planning.js +0 -225
- package/dist/arena/strategies/review.d.ts +0 -26
- package/dist/arena/strategies/review.js +0 -168
- package/dist/arena/strategies/utils.d.ts +0 -36
- package/dist/arena/strategies/utils.js +0 -603
- package/dist/arena/tools/selector.d.ts +0 -17
- package/dist/arena/tools/selector.js +0 -61
- package/dist/arena/transitions.d.ts +0 -53
- package/dist/arena/transitions.js +0 -97
- package/dist/arena/types.d.ts +0 -514
- package/dist/arena/types.js +0 -27
- package/dist/cc-orchestrator/agent-adapter.d.ts +0 -54
- package/dist/cc-orchestrator/agent-adapter.js +0 -143
- package/dist/cc-orchestrator/cc-capability.d.ts +0 -19
- package/dist/cc-orchestrator/cc-capability.js +0 -53
- package/dist/cc-orchestrator/codex-session-discovery.d.ts +0 -24
- package/dist/cc-orchestrator/codex-session-discovery.js +0 -191
- package/dist/cc-orchestrator/codex-session-history.d.ts +0 -38
- package/dist/cc-orchestrator/codex-session-history.js +0 -247
- package/dist/cc-orchestrator/external-agent-bindings.d.ts +0 -27
- package/dist/cc-orchestrator/external-agent-bindings.js +0 -150
- package/dist/cc-orchestrator/external-agent-changes.d.ts +0 -19
- package/dist/cc-orchestrator/external-agent-changes.js +0 -231
- package/dist/cc-orchestrator/external-agent-driver.d.ts +0 -19
- package/dist/cc-orchestrator/external-agent-driver.js +0 -284
- package/dist/cc-orchestrator/external-agent-session-store.d.ts +0 -23
- package/dist/cc-orchestrator/external-agent-session-store.js +0 -146
- package/dist/cc-orchestrator/index.d.ts +0 -8
- package/dist/cc-orchestrator/index.js +0 -8
- package/dist/cc-orchestrator/relevance-judge.d.ts +0 -15
- package/dist/cc-orchestrator/relevance-judge.js +0 -29
- package/dist/cc-orchestrator/session-discovery.d.ts +0 -46
- package/dist/cc-orchestrator/session-discovery.js +0 -125
- package/dist/cc-orchestrator/session-history.d.ts +0 -54
- package/dist/cc-orchestrator/session-history.js +0 -150
- package/dist/cron/cron-runtime.d.ts +0 -2
- package/dist/cron/cron-runtime.js +0 -2
- package/dist/cron/cron-store.d.ts +0 -2
- package/dist/cron/cron-store.js +0 -2
- package/dist/cron/scheduler.d.ts +0 -7
- package/dist/cron/scheduler.js +0 -7
- package/dist/engine/goal.js +0 -206
- package/dist/external-agents/config.d.ts +0 -2
- package/dist/external-agents/config.js +0 -15
- package/dist/external-agents/types.d.ts +0 -31
- package/dist/git/parse-log.d.ts +0 -13
- package/dist/git/parse-log.js +0 -21
- package/dist/git/utils.d.ts +0 -49
- package/dist/git/utils.js +0 -161
- package/dist/git/worktree/crud.d.ts +0 -69
- package/dist/git/worktree/crud.js +0 -206
- package/dist/git/worktree/diff.d.ts +0 -14
- package/dist/git/worktree/diff.js +0 -82
- package/dist/git/worktree/git-exec.d.ts +0 -7
- package/dist/git/worktree/git-exec.js +0 -51
- package/dist/git/worktree/index.d.ts +0 -5
- package/dist/git/worktree/index.js +0 -5
- package/dist/git/worktree/query.d.ts +0 -42
- package/dist/git/worktree/query.js +0 -121
- package/dist/git/worktree/slug.d.ts +0 -11
- package/dist/git/worktree/slug.js +0 -58
- package/dist/git/worktree.d.ts +0 -1
- package/dist/git/worktree.js +0 -5
- package/dist/lsp/client.d.ts +0 -41
- package/dist/lsp/client.js +0 -186
- package/dist/lsp/manager.d.ts +0 -40
- package/dist/lsp/manager.js +0 -155
- package/dist/lsp/root-path.d.ts +0 -9
- package/dist/lsp/root-path.js +0 -12
- package/dist/lsp/servers.d.ts +0 -16
- package/dist/lsp/servers.js +0 -60
- package/dist/prompt/sections/coding.md +0 -35
- package/dist/quota/credentials.d.ts +0 -3
- package/dist/quota/credentials.js +0 -80
- package/dist/quota/index.d.ts +0 -36
- package/dist/quota/index.js +0 -155
- package/dist/quota/types.d.ts +0 -48
- package/dist/quota/types.js +0 -13
- package/dist/review/review-prompt.d.ts +0 -28
- package/dist/review/review-prompt.js +0 -81
- package/dist/state.d.ts +0 -160
- package/dist/state.js +0 -267
- package/dist/tool-system/builtin/apply-patch/applier.d.ts +0 -26
- package/dist/tool-system/builtin/apply-patch/applier.js +0 -308
- package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +0 -10
- package/dist/tool-system/builtin/apply-patch/backup-targets.js +0 -30
- package/dist/tool-system/builtin/apply-patch/index.d.ts +0 -20
- package/dist/tool-system/builtin/apply-patch/index.js +0 -105
- package/dist/tool-system/builtin/apply-patch/parser.d.ts +0 -17
- package/dist/tool-system/builtin/apply-patch/parser.js +0 -212
- package/dist/tool-system/builtin/apply-patch/seek-sequence.d.ts +0 -18
- package/dist/tool-system/builtin/apply-patch/seek-sequence.js +0 -123
- package/dist/tool-system/builtin/apply-patch/types.d.ts +0 -49
- package/dist/tool-system/builtin/apply-patch/types.js +0 -13
- package/dist/tool-system/builtin/arena.d.ts +0 -31
- package/dist/tool-system/builtin/arena.js +0 -415
- package/dist/tool-system/builtin/brief.d.ts +0 -6
- package/dist/tool-system/builtin/brief.js +0 -41
- package/dist/tool-system/builtin/check-quota.d.ts +0 -15
- package/dist/tool-system/builtin/check-quota.js +0 -34
- package/dist/tool-system/builtin/drive-claude-code.d.ts +0 -51
- package/dist/tool-system/builtin/drive-claude-code.js +0 -698
- package/dist/tool-system/builtin/lsp.d.ts +0 -7
- package/dist/tool-system/builtin/lsp.js +0 -144
- package/dist/tool-system/builtin/notebook-edit.d.ts +0 -7
- package/dist/tool-system/builtin/notebook-edit.js +0 -127
- package/dist/tool-system/builtin/worktree.d.ts +0 -11
- package/dist/tool-system/builtin/worktree.js +0 -345
- /package/dist/{external-agents → links}/types.js +0 -0
- /package/dist/{engine/session-usage.d.ts → session/usage.d.ts} +0 -0
- /package/dist/{engine/session-usage.js → session/usage.js} +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* ToolContext — runtime services injected into every tool execution.
|
|
3
3
|
*
|
|
4
|
-
* Replaces the legacy module-level
|
|
5
|
-
*
|
|
4
|
+
* Replaces the legacy module-level singleton setters used by built-ins and
|
|
5
|
+
* product capabilities.
|
|
6
6
|
*
|
|
7
7
|
* Each Engine instance builds its own ToolContext when run() starts and
|
|
8
8
|
* passes it through ToolExecutor → ToolRegistry → executor function.
|
|
@@ -12,14 +12,17 @@
|
|
|
12
12
|
* Tools that don't need any context (Read/Write/Bash/...) just ignore
|
|
13
13
|
* the second argument; the type is purely additive.
|
|
14
14
|
*/
|
|
15
|
-
import type { LLMConfig, StreamCallback } from "../types.js";
|
|
15
|
+
import type { LLMConfig, StreamCallback, TokenUsage } from "../types.js";
|
|
16
16
|
import type { ModelPool } from "../llm/model-pool.js";
|
|
17
17
|
import type { ToolRegistry } from "./registry.js";
|
|
18
18
|
import type { AgentPresetName } from "../preset/index.js";
|
|
19
|
-
import type { SandboxBackend } from "./sandbox/index.js";
|
|
19
|
+
import type { SandboxBackend, SandboxMode } from "./sandbox/index.js";
|
|
20
20
|
import type { HookRegistry } from "../hooks/registry.js";
|
|
21
21
|
import type { SessionManager } from "../session/session-manager.js";
|
|
22
22
|
import type { SessionWorkspace } from "../types.js";
|
|
23
|
+
import type { ApprovalRouter } from "./permission.js";
|
|
24
|
+
import type { ChildWriterLease, LiveChildControl } from "./builtin/agent-registry.js";
|
|
25
|
+
import type { McpToolPolicy } from "./mcp-tool-policy.js";
|
|
23
26
|
/**
|
|
24
27
|
* Narrow view of the owning Engine that tools are allowed to call back into.
|
|
25
28
|
* Defined here (in the low-level tool-system) rather than importing the
|
|
@@ -33,19 +36,6 @@ export interface ToolRuntimeHost {
|
|
|
33
36
|
readonly planMode: boolean;
|
|
34
37
|
/** Toggle plan mode (EnterPlanMode / ExitPlanMode tools). */
|
|
35
38
|
setPlanMode(value: boolean): void;
|
|
36
|
-
/** Per-worktree setup scripts, or undefined for sub-agents / no cwd. */
|
|
37
|
-
readWorktreeSetupScripts(cwd?: string): {
|
|
38
|
-
default?: string;
|
|
39
|
-
macos?: string;
|
|
40
|
-
linux?: string;
|
|
41
|
-
windows?: string;
|
|
42
|
-
} | undefined;
|
|
43
|
-
/** Branch prefix used for CodeShell-managed worktree branches. */
|
|
44
|
-
readWorktreeBranchPrefix?(cwd?: string): string | undefined;
|
|
45
|
-
/** Resolve a setup-only sandbox for a newly-created worktree root. */
|
|
46
|
-
resolveWorktreeSetupSandbox?(cwd: string): Promise<SandboxBackend | undefined>;
|
|
47
|
-
/** Resolve setup-only shell env for a newly-created worktree root. */
|
|
48
|
-
readWorktreeSetupShellEnv?(cwd?: string): Record<string, string> | undefined;
|
|
49
39
|
/** Session state store used by session-scoped tools such as worktree switching. */
|
|
50
40
|
getSessionManager?(): SessionManager;
|
|
51
41
|
}
|
|
@@ -128,6 +118,10 @@ export interface SubAgentSpawnRequest {
|
|
|
128
118
|
* tool. Undefined → child inherits the parent's full skill pool.
|
|
129
119
|
*/
|
|
130
120
|
skillAllowlist?: string[];
|
|
121
|
+
/** Optional role-level sandbox mode. Undefined → inherit the parent sandbox. */
|
|
122
|
+
sandboxMode?: SandboxMode;
|
|
123
|
+
/** Optional MCP server allowlist. Undefined → inherit all; [] → no MCP. */
|
|
124
|
+
mcpAllowlist?: string[];
|
|
131
125
|
/**
|
|
132
126
|
* Optional per-call system prompt appended to the child Engine's prompt
|
|
133
127
|
* (the role definition's Markdown body). Undefined → child inherits only
|
|
@@ -146,6 +140,15 @@ export interface SubAgentSpawnRequest {
|
|
|
146
140
|
* See AgentSendInput in builtin/agent.ts.
|
|
147
141
|
*/
|
|
148
142
|
resumeSessionId?: string;
|
|
143
|
+
/** Trusted live-runtime generation; never exposed in the Agent tool schema. */
|
|
144
|
+
runtimeGeneration?: number;
|
|
145
|
+
/** Bind the existing child runtime to the registry's single-writer lease. */
|
|
146
|
+
bindLiveControl?: (control: LiveChildControl, ownerToken: string) => ChildWriterLease | true | false;
|
|
147
|
+
/** Atomically close intake before the child publishes its terminal result. */
|
|
148
|
+
closeLiveControl?: (control: LiveChildControl, lease?: ChildWriterLease) => boolean | void;
|
|
149
|
+
/** Raw child stream tap used to deterministically reduce structured progress. */
|
|
150
|
+
onProgressEvent?: (event: Parameters<StreamCallback>[0]) => void;
|
|
151
|
+
onAgentProgress?: import("../engine/run-types.js").EngineRunOptions["onAgentProgress"];
|
|
149
152
|
}
|
|
150
153
|
export interface SubAgentSpawner {
|
|
151
154
|
/**
|
|
@@ -154,16 +157,15 @@ export interface SubAgentSpawner {
|
|
|
154
157
|
* (or `resumeSessionId` when resuming), so the parent can address follow-up
|
|
155
158
|
* input at the same session via AgentSendInput (transcript replay).
|
|
156
159
|
*/
|
|
157
|
-
spawn(req: SubAgentSpawnRequest): Promise<
|
|
158
|
-
text: string;
|
|
159
|
-
sessionId: string;
|
|
160
|
-
}>;
|
|
160
|
+
spawn(req: SubAgentSpawnRequest): Promise<SubAgentSpawnResult>;
|
|
161
161
|
/**
|
|
162
162
|
* Whether a child session id exists on disk. Lets AgentSendInput resume an
|
|
163
163
|
* agent across a process restart (when the in-memory registry is empty but
|
|
164
164
|
* the session transcript is still persisted). Optional for legacy callers.
|
|
165
165
|
*/
|
|
166
166
|
sessionExists?(sessionId: string): boolean;
|
|
167
|
+
/** Persisted direct-parent metadata used to authorize cross-restart continuation. */
|
|
168
|
+
getSessionParentId?(sessionId: string): string | null | undefined;
|
|
167
169
|
/** Stream callback to forward sub-agent events back to the parent UI. */
|
|
168
170
|
parentStream?: StreamCallback;
|
|
169
171
|
/** Static config used to describe what the spawned engine looks like. */
|
|
@@ -173,6 +175,12 @@ export interface SubAgentSpawner {
|
|
|
173
175
|
permissionMode: string;
|
|
174
176
|
};
|
|
175
177
|
}
|
|
178
|
+
export interface SubAgentSpawnResult {
|
|
179
|
+
text: string;
|
|
180
|
+
sessionId: string;
|
|
181
|
+
/** Complete billed usage returned by the child Engine run. */
|
|
182
|
+
usage?: TokenUsage;
|
|
183
|
+
}
|
|
176
184
|
/**
|
|
177
185
|
* The full context object handed to every tool invocation.
|
|
178
186
|
*
|
|
@@ -182,7 +190,20 @@ export interface SubAgentSpawner {
|
|
|
182
190
|
export interface ToolVisibilityContext {
|
|
183
191
|
cwd: string;
|
|
184
192
|
hasGoal: boolean;
|
|
193
|
+
/** Resolved Session identity for per-session extension-tool visibility. */
|
|
194
|
+
sessionId?: string;
|
|
185
195
|
settingsScope?: import("../settings/manager.js").SettingsScope;
|
|
196
|
+
host?: string;
|
|
197
|
+
isSubAgent?: boolean;
|
|
198
|
+
behaviorProfile?: string;
|
|
199
|
+
/** Host-authorized targets available to the cross-Session messaging builtin. */
|
|
200
|
+
sessionMessageTargets?: readonly import("../session/session-message.js").SessionMessageTarget[];
|
|
201
|
+
/**
|
|
202
|
+
* Per-run metadata produced by the active behavior profile's
|
|
203
|
+
* buildVisibilityMeta. Availability guards / definition rewriters that share
|
|
204
|
+
* the profile's domain read their conventional keys from here.
|
|
205
|
+
*/
|
|
206
|
+
profileMeta?: Readonly<Record<string, unknown>>;
|
|
186
207
|
}
|
|
187
208
|
export interface ExternalFileChangesRecord {
|
|
188
209
|
jobId: string;
|
|
@@ -193,19 +214,43 @@ export interface ExternalFileChangesRecord {
|
|
|
193
214
|
changedFiles: string[];
|
|
194
215
|
originClientMessageId?: string;
|
|
195
216
|
}
|
|
217
|
+
export type ToolRunYieldReason = "background_notification";
|
|
218
|
+
/** Run-scoped handoff from a trusted tool to the owning turn loop. */
|
|
219
|
+
export interface ToolRunYieldController {
|
|
220
|
+
request(reason: ToolRunYieldReason): void;
|
|
221
|
+
/** Inspect without clearing so the loop can prioritize an accepted steer. */
|
|
222
|
+
peek?(): ToolRunYieldReason | undefined;
|
|
223
|
+
consume(): ToolRunYieldReason | undefined;
|
|
224
|
+
}
|
|
196
225
|
export interface ToolContext {
|
|
197
226
|
/** Active working directory for this Engine. */
|
|
198
227
|
cwd: string;
|
|
228
|
+
/**
|
|
229
|
+
* Active digital-human profile's portable memory root. Present only when
|
|
230
|
+
* the resolved WorkspaceProfile enables portableMemory for this run.
|
|
231
|
+
* Memory tools use it for location:"profile"; other tools should treat the
|
|
232
|
+
* path as trusted run metadata, not as model-supplied input.
|
|
233
|
+
*/
|
|
234
|
+
profileMemoryDir?: string;
|
|
199
235
|
/** Mutate the owning live context cwd. Worktree switching intentionally does not use this. */
|
|
200
236
|
setCwd?(cwd: string): void;
|
|
201
|
-
/** Mutate the owning live session state after a
|
|
202
|
-
setSessionWorkspace?(workspace: SessionWorkspace): void;
|
|
237
|
+
/** Mutate/rebase the owning live session state after a workspace switch. */
|
|
238
|
+
setSessionWorkspace?(workspace: SessionWorkspace, stateRevision?: number): void;
|
|
203
239
|
/** LLM credentials/endpoint for tools that need to make their own calls. */
|
|
204
240
|
llmConfig: LLMConfig;
|
|
205
|
-
/** Active model pool
|
|
241
|
+
/** Active model pool for model-aware tools and product capabilities. */
|
|
206
242
|
modelPool?: ModelPool;
|
|
207
243
|
/** Tool registry (ToolSearch reads this to enumerate available tools). */
|
|
208
244
|
toolRegistry: ToolRegistry;
|
|
245
|
+
/** Opaque services contributed by capability modules, keyed by capability id. */
|
|
246
|
+
capabilityServices?: Readonly<Record<string, unknown>>;
|
|
247
|
+
/**
|
|
248
|
+
* Run-scoped services produced by the active behavior profile's
|
|
249
|
+
* createRunServices. Tools that share the profile's domain conventions read
|
|
250
|
+
* their keys from here (e.g. DelegateWork reads the pet profile's
|
|
251
|
+
* petWorkspaces / requestPetWorkDelegation entries).
|
|
252
|
+
*/
|
|
253
|
+
runScopedServices?: Readonly<Record<string, unknown>>;
|
|
209
254
|
/** UI-backed AskUserQuestion handler. Undefined → headless mode. */
|
|
210
255
|
askUser?: AskUserFn;
|
|
211
256
|
/** Sub-agent spawner (Agent tool). Undefined → Agent tool unavailable. */
|
|
@@ -247,6 +292,14 @@ export interface ToolContext {
|
|
|
247
292
|
* headless/test mode; tools must tolerate absence.
|
|
248
293
|
*/
|
|
249
294
|
streamCallback?: StreamCallback;
|
|
295
|
+
/**
|
|
296
|
+
* Report provider usage produced by a tool or child Engine into the owning
|
|
297
|
+
* session and run-scoped Goal budget. This must not invoke the process-wide
|
|
298
|
+
* billing hook again; the originating provider client already did that.
|
|
299
|
+
*/
|
|
300
|
+
recordBilledUsage?: (usage: TokenUsage) => void;
|
|
301
|
+
/** Connection-scoped approval owner router supplied by the protocol host. */
|
|
302
|
+
approvalRouter?: ApprovalRouter;
|
|
250
303
|
/** Whether the owning Engine is currently in plan mode. Replaces the
|
|
251
304
|
* removed module-level `isInPlanMode()` singleton. */
|
|
252
305
|
planMode: boolean;
|
|
@@ -270,6 +323,8 @@ export interface ToolContext {
|
|
|
270
323
|
* narrow context, or standalone tool tests. (B2 — Gate 1, standard §S3.)
|
|
271
324
|
*/
|
|
272
325
|
sessionId?: string;
|
|
326
|
+
/** Engine-owned, run-scoped cross-Session message sender. */
|
|
327
|
+
sessionMessages?: import("../session/session-message.js").SessionMessageToolService;
|
|
273
328
|
/** Stable id of the real user turn that owns async work launched here. */
|
|
274
329
|
originClientMessageId?: string;
|
|
275
330
|
/**
|
|
@@ -279,6 +334,12 @@ export interface ToolContext {
|
|
|
279
334
|
* launched it has already returned.
|
|
280
335
|
*/
|
|
281
336
|
recordExternalFileChanges?: (record: ExternalFileChangesRecord) => void;
|
|
337
|
+
/**
|
|
338
|
+
* A tool that launched asynchronous work can yield the current model loop.
|
|
339
|
+
* The completion notification will wake the same Session later, avoiding
|
|
340
|
+
* model-authored status polling while no new evidence can exist yet.
|
|
341
|
+
*/
|
|
342
|
+
runYield?: ToolRunYieldController;
|
|
282
343
|
/**
|
|
283
344
|
* Skill names the user has hidden from the LLM (full namespaced names
|
|
284
345
|
* for plugin skills, e.g. "docs:pdf"). The skill builtin tool uses
|
|
@@ -327,6 +388,8 @@ export interface ToolContext {
|
|
|
327
388
|
* sub-agents and no-cwd contexts (same as readBuiltinOverride).
|
|
328
389
|
*/
|
|
329
390
|
disabledBuiltins?: Set<string>;
|
|
391
|
+
/** Run-profile execution allowlist; omitted keeps the normal tool surface. */
|
|
392
|
+
allowedToolNames?: ReadonlySet<string>;
|
|
330
393
|
/**
|
|
331
394
|
* Per-turn context used by builtin availability guards. Engine.run() uses the
|
|
332
395
|
* same object to hide tools from the model; ToolExecutor reuses it to reject
|
|
@@ -342,6 +405,11 @@ export interface ToolContext {
|
|
|
342
405
|
* no gating (sub-agents / tests whose registries carry no MCP tools).
|
|
343
406
|
*/
|
|
344
407
|
allowedMcpServers?: Set<string>;
|
|
408
|
+
/**
|
|
409
|
+
* Exact per-server MCP tool policy for this run. The engine uses the same
|
|
410
|
+
* map for model visibility, ToolSearch, and the executor's direct-call gate.
|
|
411
|
+
*/
|
|
412
|
+
mcpToolPolicies?: ReadonlyMap<string, McpToolPolicy>;
|
|
345
413
|
/**
|
|
346
414
|
* The engine's settings scope, so tools that read disk config directly (e.g.
|
|
347
415
|
* the credential tools) can honor host-isolation instead of always merging
|
|
@@ -376,6 +444,8 @@ export interface ToolContext {
|
|
|
376
444
|
* session workspace.
|
|
377
445
|
*/
|
|
378
446
|
workspace?: import("./workspace-bridge.js").WorkspaceBridge;
|
|
447
|
+
/** Host panel discovery/focus bridge. Undefined in non-Desktop/headless engines. */
|
|
448
|
+
panels?: import("./panel-bridge.js").PanelHostBridge;
|
|
379
449
|
/**
|
|
380
450
|
* Inject a stored cookie credential into the built-in browser (restore its
|
|
381
451
|
* login state so the AI can drive the page as that account). The host
|
|
@@ -3,15 +3,14 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { setMaxListeners } from "node:events";
|
|
5
5
|
import { resolve as resolvePath, isAbsolute as isAbsolutePath } from "node:path";
|
|
6
|
+
import { isMcpToolNameAllowed, isRegisteredMcpToolAllowed } from "./mcp-tool-policy.js";
|
|
6
7
|
import { classifyBashCommand } from "./permission.js";
|
|
7
8
|
import { ToolNotFoundError } from "../exceptions.js";
|
|
8
9
|
import { logger as rootLogger, getCurrentSid } from "../logging/logger.js";
|
|
9
10
|
import { recordToolCall, recordToolResult } from "../logging/session-recorder.js";
|
|
10
11
|
import { validateToolArgs } from "./validation.js";
|
|
11
12
|
import { PLAN_MODE_ALLOWED_TOOLS } from "./plan-mode-allowlist.js";
|
|
12
|
-
import { enforcePathPolicyWithApproval } from "./path-policy.js";
|
|
13
|
-
import { parsePatch } from "./builtin/apply-patch/parser.js";
|
|
14
|
-
import { BUILTIN_TOOL_GUARDS } from "./builtin/index.js";
|
|
13
|
+
import { attachFinalWritePathSnapshot, enforcePathPolicyWithApproval, } from "./path-policy.js";
|
|
15
14
|
import { COMPLETE_GOAL_TOOL_NAME } from "./builtin/complete-goal.js";
|
|
16
15
|
import { CANCEL_GOAL_TOOL_NAME } from "./builtin/cancel-goal.js";
|
|
17
16
|
import { toolResultDisplayText } from "./tool-result-redaction.js";
|
|
@@ -119,6 +118,14 @@ export class ToolExecutor {
|
|
|
119
118
|
isError: true,
|
|
120
119
|
};
|
|
121
120
|
}
|
|
121
|
+
if (this.toolCtx?.allowedToolNames && !this.toolCtx.allowedToolNames.has(call.toolName)) {
|
|
122
|
+
return {
|
|
123
|
+
id: call.id,
|
|
124
|
+
toolName: call.toolName,
|
|
125
|
+
error: `Tool ${call.toolName} is not allowed by this run profile. Do NOT retry this tool call.`,
|
|
126
|
+
isError: true,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
122
129
|
// 0. Capability override: a builtin the project marked `off` is HIDDEN from
|
|
123
130
|
// the model's tool list (engine.ts applyBuiltinOverrideVisibility), but the
|
|
124
131
|
// model can still NAME it (hallucination, or a remembered earlier turn). The
|
|
@@ -142,7 +149,7 @@ export class ToolExecutor {
|
|
|
142
149
|
isError: true,
|
|
143
150
|
};
|
|
144
151
|
}
|
|
145
|
-
const visibilityGuard =
|
|
152
|
+
const visibilityGuard = this.registry.getAvailabilityGuard(call.toolName);
|
|
146
153
|
if (visibilityGuard &&
|
|
147
154
|
this.toolCtx?.toolVisibility &&
|
|
148
155
|
!visibilityGuard(this.toolCtx.toolVisibility)) {
|
|
@@ -167,6 +174,19 @@ export class ToolExecutor {
|
|
|
167
174
|
isError: true,
|
|
168
175
|
};
|
|
169
176
|
}
|
|
177
|
+
if (reg?.source === "mcp" &&
|
|
178
|
+
!isRegisteredMcpToolAllowed({
|
|
179
|
+
source: "mcp",
|
|
180
|
+
serverName: reg.serverName,
|
|
181
|
+
mcpToolName: reg.mcpToolName,
|
|
182
|
+
}, this.toolCtx.mcpToolPolicies)) {
|
|
183
|
+
return {
|
|
184
|
+
id: call.id,
|
|
185
|
+
toolName: call.toolName,
|
|
186
|
+
error: `MCP tool "${reg.mcpToolName ?? call.toolName}" is disabled by this project's tool policy. Do NOT retry this tool call.`,
|
|
187
|
+
isError: true,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
170
190
|
// The generic MCP builtins (MCPTool / ReadMcpResource) take the target
|
|
171
191
|
// server as an ARGUMENT and call MCPManager directly, so the source==="mcp"
|
|
172
192
|
// check above can't see them — without this a session could invoke a tool
|
|
@@ -184,6 +204,17 @@ export class ToolExecutor {
|
|
|
184
204
|
isError: true,
|
|
185
205
|
};
|
|
186
206
|
}
|
|
207
|
+
if (call.toolName === "MCPTool") {
|
|
208
|
+
const tool = String(call.args.tool ?? "");
|
|
209
|
+
if (!isMcpToolNameAllowed(this.toolCtx.mcpToolPolicies, server, tool)) {
|
|
210
|
+
return {
|
|
211
|
+
id: call.id,
|
|
212
|
+
toolName: call.toolName,
|
|
213
|
+
error: `MCP tool "${tool}" is disabled by this project's tool policy. Do NOT retry this tool call.`,
|
|
214
|
+
isError: true,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
}
|
|
187
218
|
}
|
|
188
219
|
else if (call.toolName === "ListMcpResources") {
|
|
189
220
|
const server = String(call.args.server ?? "");
|
|
@@ -244,6 +275,7 @@ export class ToolExecutor {
|
|
|
244
275
|
toolName: call.toolName,
|
|
245
276
|
args: call.args,
|
|
246
277
|
toolCallId: call.id,
|
|
278
|
+
signal: this.signal ?? this.toolCtx?.signal,
|
|
247
279
|
});
|
|
248
280
|
if (hookResult.decision === "deny") {
|
|
249
281
|
return {
|
|
@@ -280,6 +312,16 @@ export class ToolExecutor {
|
|
|
280
312
|
// path surface on RegisteredTool.pathPolicy; the executor enforces it
|
|
281
313
|
// after hooks have had a chance to rewrite args, but before permission
|
|
282
314
|
// classification or the handler can touch the filesystem.
|
|
315
|
+
if ((call.toolName === "Write" || call.toolName === "Edit") &&
|
|
316
|
+
this.toolCtx?.cwd &&
|
|
317
|
+
typeof call.args.file_path === "string") {
|
|
318
|
+
const raw = call.args.file_path;
|
|
319
|
+
const target = isAbsolutePath(raw) ? raw : resolvePath(this.toolCtx.cwd, raw);
|
|
320
|
+
call = {
|
|
321
|
+
...call,
|
|
322
|
+
args: attachFinalWritePathSnapshot(call.args, target, this.toolCtx.cwd),
|
|
323
|
+
};
|
|
324
|
+
}
|
|
283
325
|
const pathPolicyError = await this.enforceDeclaredPathPolicy(toolDef, call.args);
|
|
284
326
|
if (pathPolicyError) {
|
|
285
327
|
return {
|
|
@@ -325,6 +367,7 @@ export class ToolExecutor {
|
|
|
325
367
|
args: call.args,
|
|
326
368
|
toolCallId: call.id,
|
|
327
369
|
classifierDecision,
|
|
370
|
+
signal: this.signal ?? this.toolCtx?.signal,
|
|
328
371
|
});
|
|
329
372
|
const preClamped = clampHookDecision(classifierDecision, hookResult.decision);
|
|
330
373
|
let decision = preClamped.decision;
|
|
@@ -383,6 +426,7 @@ export class ToolExecutor {
|
|
|
383
426
|
toolName: call.toolName,
|
|
384
427
|
args: call.args,
|
|
385
428
|
toolCallId: call.id,
|
|
429
|
+
signal: this.signal ?? this.toolCtx?.signal,
|
|
386
430
|
});
|
|
387
431
|
// 3. Execute. Use a span so begin/end share one cat and end carries
|
|
388
432
|
// duration_ms; widen args truncation from 200→2000 so Edit/Write payloads
|
|
@@ -431,25 +475,25 @@ export class ToolExecutor {
|
|
|
431
475
|
result.id = call.id;
|
|
432
476
|
// Prepend any non-blocking guard reminder onto a successful result so the
|
|
433
477
|
// model sees it on its next turn alongside the content it just fetched.
|
|
434
|
-
if (guardDecision?.prepend && !result.
|
|
478
|
+
if (guardDecision?.prepend && !result.isError && result.result) {
|
|
435
479
|
result.result = `${guardDecision.prepend}\n${result.result}`;
|
|
436
480
|
}
|
|
437
481
|
const observerResult = toolResultDisplayText(result);
|
|
438
482
|
const payload = observerResult ?? result.error ?? "";
|
|
439
483
|
span.end({
|
|
440
|
-
ok: !result.
|
|
484
|
+
ok: !result.isError,
|
|
441
485
|
chars: payload.length,
|
|
442
486
|
// Snippet only on failure — successful tool output can be huge and is
|
|
443
487
|
// already on the transcript. Failures are rare and the first 500 chars
|
|
444
488
|
// usually contain the message we need.
|
|
445
|
-
...(result.
|
|
489
|
+
...(result.isError ? { errorSnippet: payload.slice(0, 500) } : {}),
|
|
446
490
|
});
|
|
447
491
|
recordToolResult(sid, {
|
|
448
492
|
id: call.id,
|
|
449
493
|
toolName: call.toolName,
|
|
450
|
-
ok: !result.
|
|
494
|
+
ok: !result.isError,
|
|
451
495
|
durationMs: Date.now() - toolStartedAt,
|
|
452
|
-
output: result.
|
|
496
|
+
output: result.isError ? undefined : observerResult,
|
|
453
497
|
error: result.error,
|
|
454
498
|
});
|
|
455
499
|
// 4. Post-tool hook
|
|
@@ -458,6 +502,7 @@ export class ToolExecutor {
|
|
|
458
502
|
toolCallId: call.id,
|
|
459
503
|
result: observerResult,
|
|
460
504
|
error: result.error,
|
|
505
|
+
signal: this.signal ?? this.toolCtx?.signal,
|
|
461
506
|
});
|
|
462
507
|
// 5. Post-tool-use hook (after execution, can observe/modify result)
|
|
463
508
|
const postHook = await this.hooks.emit("post_tool_use", {
|
|
@@ -465,13 +510,14 @@ export class ToolExecutor {
|
|
|
465
510
|
toolCallId: call.id,
|
|
466
511
|
result: observerResult,
|
|
467
512
|
error: result.error,
|
|
513
|
+
signal: this.signal ?? this.toolCtx?.signal,
|
|
468
514
|
});
|
|
469
515
|
// Append handler-supplied context (linter output, type-check result,
|
|
470
516
|
// etc.) onto the tool result so the model sees it on the next turn.
|
|
471
517
|
// Tagged with a separator so the model can tell hook output from
|
|
472
518
|
// tool output. Skip when the tool errored — additional context on a
|
|
473
519
|
// failed tool would be confusing.
|
|
474
|
-
if (postHook.additionalContext && !result.
|
|
520
|
+
if (postHook.additionalContext && !result.isError) {
|
|
475
521
|
const tag = "--- additional context from post_tool_use hook ---";
|
|
476
522
|
result.result = result.result
|
|
477
523
|
? `${result.result}\n\n${tag}\n${postHook.additionalContext}`
|
|
@@ -484,10 +530,11 @@ export class ToolExecutor {
|
|
|
484
530
|
});
|
|
485
531
|
}
|
|
486
532
|
// 6. file_changed hook for Write/Edit tools
|
|
487
|
-
if ((call.toolName === "Write" || call.toolName === "Edit") && !result.
|
|
533
|
+
if ((call.toolName === "Write" || call.toolName === "Edit") && !result.isError) {
|
|
488
534
|
await this.hooks.emit("file_changed", {
|
|
489
535
|
toolName: call.toolName,
|
|
490
536
|
filePath: call.args.file_path,
|
|
537
|
+
signal: this.signal ?? this.toolCtx?.signal,
|
|
491
538
|
});
|
|
492
539
|
}
|
|
493
540
|
return result;
|
|
@@ -504,6 +551,20 @@ export class ToolExecutor {
|
|
|
504
551
|
return op.default;
|
|
505
552
|
}
|
|
506
553
|
async enforceDeclaredPathPolicy(tool, args) {
|
|
554
|
+
if (tool?.pathResolver) {
|
|
555
|
+
let targets;
|
|
556
|
+
try {
|
|
557
|
+
targets = tool.pathResolver.resolve(args, this.toolCtx?.cwd ?? process.cwd());
|
|
558
|
+
}
|
|
559
|
+
catch (err) {
|
|
560
|
+
return `Error: ${err instanceof Error ? err.message : String(err)}`;
|
|
561
|
+
}
|
|
562
|
+
for (const target of targets) {
|
|
563
|
+
const blocked = await enforcePathPolicyWithApproval(target, tool.pathResolver.operation, this.toolCtx);
|
|
564
|
+
if (blocked)
|
|
565
|
+
return blocked;
|
|
566
|
+
}
|
|
567
|
+
}
|
|
507
568
|
const policies = tool?.pathPolicy;
|
|
508
569
|
if (!policies?.length)
|
|
509
570
|
return null;
|
|
@@ -521,55 +582,35 @@ export class ToolExecutor {
|
|
|
521
582
|
return null;
|
|
522
583
|
}
|
|
523
584
|
resolvePathPolicyTargets(policy, args) {
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
// "outside workspace" and over-prompts. Absolute paths pass through.
|
|
532
|
-
const cwd = this.toolCtx?.cwd ?? process.cwd();
|
|
533
|
-
return [isAbsolutePath(raw) ? raw : resolvePath(cwd, raw)];
|
|
534
|
-
}
|
|
535
|
-
// Array path args (e.g. GenerateImage `referenceImages`, GenerateVideo
|
|
536
|
-
// `images`): enforce EVERY element. Without this an array yielded zero
|
|
537
|
-
// targets, so out-of-workspace reads bypassed the path-policy "ask" gate
|
|
538
|
-
// that Read/Write enforce. http(s) URLs aren't file reads → skip them.
|
|
539
|
-
// Relative paths resolve against ctx.cwd (the workspace) before
|
|
540
|
-
// classification, like the apply_patch branch — otherwise classifyPath's
|
|
541
|
-
// process.cwd()-based resolution would mis-place an in-workspace relative
|
|
542
|
-
// path as "outside" and over-prompt. Non-string / empty elements skipped.
|
|
543
|
-
if (Array.isArray(raw)) {
|
|
544
|
-
const cwd = this.toolCtx?.cwd ?? process.cwd();
|
|
545
|
-
const paths = raw
|
|
546
|
-
.filter((v) => typeof v === "string" && v.length > 0)
|
|
547
|
-
.filter((v) => !/^https?:\/\//i.test(v))
|
|
548
|
-
.map((v) => (isAbsolutePath(v) ? v : resolvePath(cwd, v)));
|
|
549
|
-
if (paths.length > 0)
|
|
550
|
-
return paths;
|
|
551
|
-
}
|
|
552
|
-
if (policy.defaultToCwd && this.toolCtx?.cwd)
|
|
553
|
-
return [this.toolCtx.cwd];
|
|
554
|
-
return [];
|
|
555
|
-
}
|
|
556
|
-
const rawPatch = args[policy.arg];
|
|
557
|
-
if (typeof rawPatch !== "string" || rawPatch.length === 0)
|
|
558
|
-
return [];
|
|
559
|
-
try {
|
|
560
|
-
const parsed = parsePatch(rawPatch, "lenient");
|
|
585
|
+
const raw = args[policy.arg];
|
|
586
|
+
if (typeof raw === "string" && raw.length > 0) {
|
|
587
|
+
// Resolve a RELATIVE single-string path arg against ctx.cwd before
|
|
588
|
+
// classification, mirroring the array branch below and the apply_patch
|
|
589
|
+
// branch — otherwise classifyPath's process.cwd()-based resolution
|
|
590
|
+
// mis-places an in-workspace relative path (e.g. Read "src/x.ts") as
|
|
591
|
+
// "outside workspace" and over-prompts. Absolute paths pass through.
|
|
561
592
|
const cwd = this.toolCtx?.cwd ?? process.cwd();
|
|
562
|
-
|
|
563
|
-
for (const hunk of parsed.hunks) {
|
|
564
|
-
targets.push(resolvePath(cwd, hunk.path));
|
|
565
|
-
if (hunk.kind === "update" && hunk.movePath) {
|
|
566
|
-
targets.push(resolvePath(cwd, hunk.movePath));
|
|
567
|
-
}
|
|
568
|
-
}
|
|
569
|
-
return targets;
|
|
593
|
+
return [isAbsolutePath(raw) ? raw : resolvePath(cwd, raw)];
|
|
570
594
|
}
|
|
571
|
-
|
|
572
|
-
|
|
595
|
+
// Array path args (e.g. GenerateImage `referenceImages`, GenerateVideo
|
|
596
|
+
// `images`): enforce EVERY element. Without this an array yielded zero
|
|
597
|
+
// targets, so out-of-workspace reads bypassed the path-policy "ask" gate
|
|
598
|
+
// that Read/Write enforce. http(s) URLs aren't file reads → skip them.
|
|
599
|
+
// Relative paths resolve against ctx.cwd (the workspace) before
|
|
600
|
+
// classification, like the apply_patch branch — otherwise classifyPath's
|
|
601
|
+
// process.cwd()-based resolution would mis-place an in-workspace relative
|
|
602
|
+
// path as "outside" and over-prompt. Non-string / empty elements skipped.
|
|
603
|
+
if (Array.isArray(raw)) {
|
|
604
|
+
const cwd = this.toolCtx?.cwd ?? process.cwd();
|
|
605
|
+
const paths = raw
|
|
606
|
+
.filter((v) => typeof v === "string" && v.length > 0)
|
|
607
|
+
.filter((v) => !/^https?:\/\//i.test(v))
|
|
608
|
+
.map((v) => (isAbsolutePath(v) ? v : resolvePath(cwd, v)));
|
|
609
|
+
if (paths.length > 0)
|
|
610
|
+
return paths;
|
|
573
611
|
}
|
|
612
|
+
if (policy.defaultToCwd && this.toolCtx?.cwd)
|
|
613
|
+
return [this.toolCtx.cwd];
|
|
614
|
+
return [];
|
|
574
615
|
}
|
|
575
616
|
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Host Tool allowlist for external Agent Runtimes.
|
|
3
|
+
*
|
|
4
|
+
* This is a policy artifact, not plumbing. It exists as one reviewable file —
|
|
5
|
+
* rather than scattered through the Claude/Codex adapters — because the design
|
|
6
|
+
* (§9.1) requires each entry to have been risk-reviewed individually, and a
|
|
7
|
+
* reviewer needs to see the whole surface at once.
|
|
8
|
+
*
|
|
9
|
+
* Two rules shape everything here:
|
|
10
|
+
*
|
|
11
|
+
* 1. **Allowlist only.** No "everything in the registry", no prefix matching.
|
|
12
|
+
* A tool absent from this file does not exist for an external runtime.
|
|
13
|
+
* Widening it is an edit to this file, which is the point: it leaves a diff.
|
|
14
|
+
* 2. **Host-loopback tools are special** (§9.3). `Panel`, `Browser`,
|
|
15
|
+
* `SwitchSessionWorkspace` and `InjectCredential` reach back out to a
|
|
16
|
+
* specific Desktop renderer window to do their work. Passing `ToolExecutor`
|
|
17
|
+
* does NOT make them callable — owner routing decides that, and it lives
|
|
18
|
+
* outside the executor. Any such tool needs its owner story argued before it
|
|
19
|
+
* can be listed.
|
|
20
|
+
*
|
|
21
|
+
* ## Why this is much wider than the original phase-one list
|
|
22
|
+
*
|
|
23
|
+
* The first cut exposed exactly one tool (`Panel`). That was not the product of
|
|
24
|
+
* a risk judgement so much as of an ordering: tools were held back until each
|
|
25
|
+
* had an argument written, and only one did. The result was a runtime that
|
|
26
|
+
* could list panels and nothing else — no skills, no memory, no file access —
|
|
27
|
+
* which is not a usable Agent Runtime, and made the feature's real state easy
|
|
28
|
+
* to overstate.
|
|
29
|
+
*
|
|
30
|
+
* The widening below was an explicit product-owner decision. The governing
|
|
31
|
+
* principle it rests on: **every tool here still executes through
|
|
32
|
+
* `ToolExecutor`**, so path policy, project trust, the user's permission rules
|
|
33
|
+
* and the approval UI all still apply. An external runtime holding `Bash` from
|
|
34
|
+
* this list is strictly more governed than the same model calling its own
|
|
35
|
+
* built-in shell, which answers only to the runtime's sandbox. Exposure moves
|
|
36
|
+
* capability from an unobservable authorization domain into the user's.
|
|
37
|
+
*
|
|
38
|
+
* That argument does not extend to everything, and four tools remain excluded
|
|
39
|
+
* for structural reasons rather than caution — see the block below them.
|
|
40
|
+
* `InjectCredential` is the highest-risk entry and depends on an in-tool
|
|
41
|
+
* approval that must stay mandatory; if that ever changes, it goes back out.
|
|
42
|
+
*/
|
|
43
|
+
import type { ExternalToolExposurePolicy } from "./session-tool-host.js";
|
|
44
|
+
/** Why a tool is in (or out of) the first-phase allowlist. */
|
|
45
|
+
export interface ExposureRationale {
|
|
46
|
+
tool: string;
|
|
47
|
+
/** `self-contained` completes in-process; `host-loopback` calls back to a window. */
|
|
48
|
+
kind: "self-contained" | "host-loopback";
|
|
49
|
+
status: "exposed" | "deferred" | "excluded";
|
|
50
|
+
reason: string;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* The audit trail behind {@link FIRST_PHASE_EXPOSURE}. Kept as data so the
|
|
54
|
+
* "excluded" decisions are visible too — a bare allowlist tells a reviewer what
|
|
55
|
+
* was included but not what was considered and rejected, which is the more
|
|
56
|
+
* useful half when judging whether the surface is sound.
|
|
57
|
+
*/
|
|
58
|
+
export declare const FIRST_PHASE_EXPOSURE_RATIONALE: readonly ExposureRationale[];
|
|
59
|
+
/** The phase-one policy. Pass to `createSessionToolHost({ exposure })`. */
|
|
60
|
+
export declare const FIRST_PHASE_EXPOSURE: ExternalToolExposurePolicy;
|