@cjhyy/code-shell-core 0.7.1 → 0.8.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 +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 +7 -3
- package/dist/context/compaction.d.ts +39 -3
- package/dist/context/compaction.js +151 -39
- package/dist/context/manager.d.ts +17 -1
- package/dist/context/manager.js +36 -1
- package/dist/credentials/access.d.ts +3 -1
- package/dist/credentials/access.js +24 -3
- package/dist/credentials/index.d.ts +1 -1
- package/dist/credentials/index.js +1 -1
- package/dist/credentials/oauth.d.ts +4 -1
- package/dist/credentials/oauth.js +14 -0
- package/dist/credentials/store.d.ts +15 -1
- package/dist/credentials/store.js +17 -4
- package/dist/credentials/types.d.ts +24 -0
- 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 +254 -195
- package/dist/engine/engine.js +1812 -2041
- 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/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 +49 -10
- package/dist/engine/turn-loop.js +370 -104
- package/dist/engine/types.d.ts +30 -3
- package/dist/engine/types.js +1 -1
- package/dist/{engine/goal.d.ts → goal/lifecycle.d.ts} +76 -4
- package/dist/goal/lifecycle.js +482 -0
- package/dist/hooks/events.d.ts +24 -10
- package/dist/hooks/goal-stop-hook.d.ts +17 -28
- package/dist/hooks/goal-stop-hook.js +110 -465
- package/dist/hooks/registry.js +1 -1
- package/dist/index.d.ts +48 -108
- 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 +34 -123
- 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 +60 -0
- 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/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 +6 -0
- package/dist/plugins/pluginCommandHook.js +25 -8
- 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 +64 -1
- package/dist/protocol/chat-session-manager.js +104 -0
- package/dist/protocol/chat-session.d.ts +61 -10
- package/dist/protocol/chat-session.js +135 -25
- package/dist/protocol/client.d.ts +33 -3
- package/dist/protocol/client.js +96 -5
- 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 +127 -3
- package/dist/protocol/server.js +1309 -182
- package/dist/protocol/types.d.ts +152 -34
- package/dist/protocol/types.js +16 -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.js +10 -1
- package/dist/services/memory-orchestrator.js +6 -2
- package/dist/services/oauth.js +4 -1
- 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 +182 -28
- package/dist/session/session-manager.js +910 -130
- package/dist/session/session-message.d.ts +22 -0
- package/dist/session/session-message.js +1 -0
- package/dist/session/transcript.d.ts +46 -5
- package/dist/session/transcript.js +159 -3
- 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 +274 -33
- package/dist/tool-system/builtin/background-jobs.d.ts +55 -2
- package/dist/tool-system/builtin/background-jobs.js +96 -4
- package/dist/tool-system/builtin/background-work.d.ts +6 -0
- package/dist/tool-system/builtin/background-work.js +8 -1
- package/dist/tool-system/builtin/bash.js +5 -2
- package/dist/tool-system/builtin/browser-tools.d.ts +6 -3
- 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.js +2 -6
- 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.js +26 -7
- package/dist/tool-system/builtin/grep.js +2 -2
- package/dist/tool-system/builtin/image-uploader.js +7 -1
- package/dist/tool-system/builtin/index.d.ts +32 -7
- package/dist/tool-system/builtin/index.js +237 -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/web-fetch.js +17 -13
- package/dist/tool-system/builtin/web-search.js +1 -3
- 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 +77 -19
- package/dist/tool-system/executor.js +75 -50
- 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 +11 -1
- package/dist/tool-system/mcp-manager.js +19 -4
- 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.js +99 -2
- package/dist/tool-system/permission.d.ts +26 -0
- package/dist/tool-system/permission.js +46 -0
- package/dist/tool-system/registry.d.ts +12 -1
- package/dist/tool-system/registry.js +31 -7
- 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 +186 -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 -45
- package/dist/arena/arena.js +0 -362
- 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 -25
- package/dist/arena/phases/adjudication.js +0 -142
- package/dist/arena/phases/build-consensus.d.ts +0 -30
- package/dist/arena/phases/build-consensus.js +0 -85
- 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 -47
- package/dist/arena/phases/cross-review.js +0 -224
- package/dist/arena/phases/debate-rounds.d.ts +0 -28
- package/dist/arena/phases/debate-rounds.js +0 -161
- package/dist/arena/phases/participant-research.d.ts +0 -39
- package/dist/arena/phases/participant-research.js +0 -316
- package/dist/arena/phases/planning-detail-expansion.d.ts +0 -39
- package/dist/arena/phases/planning-detail-expansion.js +0 -120
- package/dist/arena/planner.d.ts +0 -28
- package/dist/arena/planner.js +0 -312
- 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 -518
- 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 -72
- package/dist/git/worktree/crud.js +0 -235
- 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 -87
- 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 -43
- package/dist/git/worktree/query.js +0 -128
- 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 -416
- 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 -363
- /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
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 数据源只读读取面(ADR §5)。ListSources 只出 metadata(自动允许);
|
|
3
|
+
* ReadSource 读内容(permissionDefault: ask,在 index.ts 注册处声明),
|
|
4
|
+
* 执行时对 source/scope/resource 二次校验(防审批后换参),结果带
|
|
5
|
+
* provenance + maxBytes 截断 + secret redaction + untrusted input 包裹。
|
|
6
|
+
*/
|
|
7
|
+
import { SettingsManager } from "../../settings/manager.js";
|
|
8
|
+
import { connectorAdapterFor, registerConnectorAdapter } from "../../sources/adapter.js";
|
|
9
|
+
import { LOCAL_FILES_SOURCE_ID, listLocalFiles, localFilesAdapter, } from "../../sources/adapters/local-files.js";
|
|
10
|
+
import { defaultMcpResourceAdapter } from "../../sources/adapters/mcp-resource.js";
|
|
11
|
+
import { mockAdapter } from "../../sources/adapters/mock.js";
|
|
12
|
+
import { defaultCredentialStatus } from "../../sources/credential-status.js";
|
|
13
|
+
import { resolveEffectiveSourceAccess } from "../../sources/resolve.js";
|
|
14
|
+
import { truncateUtf8Text } from "../../sources/truncate-utf8.js";
|
|
15
|
+
import { scrubSecrets } from "../../utils/secret-scrubber.js";
|
|
16
|
+
import { wrapUntrustedInput } from "../../automation/write-policy.js";
|
|
17
|
+
const DEFAULT_MAX_BYTES = 262_144;
|
|
18
|
+
const mcpResourceAdapter = defaultMcpResourceAdapter();
|
|
19
|
+
/** Registering the same adapter objects is safe to repeat across test/host imports. */
|
|
20
|
+
export function registerBuiltinSourceAdapters() {
|
|
21
|
+
registerConnectorAdapter(mockAdapter);
|
|
22
|
+
registerConnectorAdapter(localFilesAdapter);
|
|
23
|
+
registerConnectorAdapter(mcpResourceAdapter);
|
|
24
|
+
}
|
|
25
|
+
registerBuiltinSourceAdapters();
|
|
26
|
+
function accessFor(cwd) {
|
|
27
|
+
const settings = new SettingsManager(cwd, "full");
|
|
28
|
+
return resolveEffectiveSourceAccess({
|
|
29
|
+
cwd,
|
|
30
|
+
settings,
|
|
31
|
+
credentialStatus: defaultCredentialStatus,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
async function resourcesFor(access, scope, cwd) {
|
|
35
|
+
if (access.sourceId === LOCAL_FILES_SOURCE_ID)
|
|
36
|
+
return listLocalFiles(cwd);
|
|
37
|
+
if (!access.definition)
|
|
38
|
+
return [];
|
|
39
|
+
return (await connectorAdapterFor(access.kind)?.listResources(access.definition, scope)) ?? [];
|
|
40
|
+
}
|
|
41
|
+
export const listSourcesToolDef = {
|
|
42
|
+
name: "ListSources",
|
|
43
|
+
description: "List the data sources bound to this workspace: names, scopes, availability status and resource names/sizes. Metadata only — use ReadSource to read content (requires approval).",
|
|
44
|
+
inputSchema: { type: "object", properties: {} },
|
|
45
|
+
};
|
|
46
|
+
export async function listSourcesTool(_args, ctx) {
|
|
47
|
+
const cwd = ctx?.cwd ?? process.cwd();
|
|
48
|
+
const access = accessFor(cwd);
|
|
49
|
+
if (access.length === 0)
|
|
50
|
+
return "No data sources are bound to this workspace.";
|
|
51
|
+
const lines = [];
|
|
52
|
+
for (const item of access) {
|
|
53
|
+
lines.push(`## ${item.label} (id: ${item.sourceId}, kind: ${item.kind}, status: ${item.status}, readPolicy: ${item.readPolicy})`);
|
|
54
|
+
if (item.status !== "ok")
|
|
55
|
+
continue;
|
|
56
|
+
for (const scope of item.scopes) {
|
|
57
|
+
let resources = [];
|
|
58
|
+
try {
|
|
59
|
+
resources = await resourcesFor(item, scope, cwd);
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// Listing is metadata-only and best effort. A temporarily failing scope
|
|
63
|
+
// must not expose content or make the other bound sources disappear.
|
|
64
|
+
}
|
|
65
|
+
lines.push(`### scope: ${scope}`);
|
|
66
|
+
for (const resource of resources.filter((candidate) => candidate.scopeId === scope)) {
|
|
67
|
+
lines.push(`- ${resource.name} (resource: ${resource.id}${resource.sizeBytes === undefined ? "" : `, ${resource.sizeBytes}B`})`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return lines.join("\n");
|
|
72
|
+
}
|
|
73
|
+
export const readSourceToolDef = {
|
|
74
|
+
name: "ReadSource",
|
|
75
|
+
description: "Read the content of one resource from a bound data source. Requires approval. Args must exactly match a bound source/scope and a listed resource id.",
|
|
76
|
+
inputSchema: {
|
|
77
|
+
type: "object",
|
|
78
|
+
properties: {
|
|
79
|
+
source: { type: "string", description: "Bound source id (from ListSources)" },
|
|
80
|
+
scope: { type: "string", description: "Bound scope id" },
|
|
81
|
+
resource: { type: "string", description: "Resource id within that scope" },
|
|
82
|
+
},
|
|
83
|
+
required: ["source", "scope", "resource"],
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
export async function readSourceTool(args, ctx) {
|
|
87
|
+
const cwd = ctx?.cwd ?? process.cwd();
|
|
88
|
+
const source = String(args.source ?? "");
|
|
89
|
+
const scope = String(args.scope ?? "");
|
|
90
|
+
const resource = String(args.resource ?? "");
|
|
91
|
+
const signal = args.__signal;
|
|
92
|
+
// Second authorization gate after approval: the source must still be bound
|
|
93
|
+
// and healthy, and the requested scope must still be explicitly selected.
|
|
94
|
+
const access = accessFor(cwd).find((item) => item.sourceId === source);
|
|
95
|
+
if (!access)
|
|
96
|
+
return `Error: source "${source}" is not bound to this workspace.`;
|
|
97
|
+
if (access.status !== "ok")
|
|
98
|
+
return `Error: source "${source}" is ${access.status}.`;
|
|
99
|
+
if (access.readPolicy === "deny") {
|
|
100
|
+
return `Error: source "${source}" is metadata-only in this workspace (readPolicy: deny).`;
|
|
101
|
+
}
|
|
102
|
+
if (!access.scopes.includes(scope)) {
|
|
103
|
+
return `Error: scope "${scope}" is not bound for source "${source}".`;
|
|
104
|
+
}
|
|
105
|
+
if (!access.definition)
|
|
106
|
+
return `Error: source "${source}" is dangling.`;
|
|
107
|
+
const adapter = connectorAdapterFor(access.kind);
|
|
108
|
+
if (!adapter)
|
|
109
|
+
return `Error: no adapter for kind "${access.kind}".`;
|
|
110
|
+
try {
|
|
111
|
+
// Validate resource ownership from the selected scope's metadata before
|
|
112
|
+
// any content read. This prevents a valid id from another scope being used
|
|
113
|
+
// after approval with otherwise unchanged source/scope arguments.
|
|
114
|
+
const resources = await resourcesFor(access, scope, cwd);
|
|
115
|
+
const listed = resources.some((candidate) => candidate.id === resource && candidate.scopeId === scope);
|
|
116
|
+
if (!listed) {
|
|
117
|
+
return `Error: resource "${resource}" is not listed in scope "${scope}" for source "${source}".`;
|
|
118
|
+
}
|
|
119
|
+
const content = await adapter.read(access.definition, resource, {
|
|
120
|
+
maxBytes: DEFAULT_MAX_BYTES,
|
|
121
|
+
signal,
|
|
122
|
+
cwd,
|
|
123
|
+
});
|
|
124
|
+
if (content.resourceId !== resource) {
|
|
125
|
+
return `Error: source "${source}" returned a different resource id.`;
|
|
126
|
+
}
|
|
127
|
+
// Adapters enforce maxBytes too; keep this boundary-level cap so a future
|
|
128
|
+
// or injected adapter cannot bypass the 256 KiB context limit.
|
|
129
|
+
const capped = truncateUtf8Text(content.text, DEFAULT_MAX_BYTES);
|
|
130
|
+
const truncated = content.truncated || capped.truncated;
|
|
131
|
+
const provenance = `source=${source} scope=${scope} resource=${resource}${truncated ? " (truncated)" : ""}`;
|
|
132
|
+
return wrapUntrustedInput(scrubSecrets(capped.text), provenance);
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
return `Error: read failed: ${error instanceof Error ? error.message : String(error)}`;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* The model uses ToolSearch to discover full schemas on demand,
|
|
6
6
|
* saving context by not loading all MCP tool schemas upfront.
|
|
7
7
|
*/
|
|
8
|
+
import { isRegisteredMcpToolAllowed } from "../mcp-tool-policy.js";
|
|
8
9
|
export const toolSearchToolDef = {
|
|
9
10
|
name: "ToolSearch",
|
|
10
11
|
description: "Search for and discover available tools by name or keyword. " +
|
|
@@ -48,11 +49,15 @@ export async function toolSearchTool(args, ctx) {
|
|
|
48
49
|
if (tool.source !== "mcp")
|
|
49
50
|
return true;
|
|
50
51
|
const allowed = ctx.allowedMcpServers;
|
|
51
|
-
return !allowed || allowed.has(tool.serverName ?? "")
|
|
52
|
+
return ((!allowed || allowed.has(tool.serverName ?? "")) &&
|
|
53
|
+
isRegisteredMcpToolAllowed(tool, ctx.mcpToolPolicies));
|
|
52
54
|
};
|
|
53
55
|
// "select:Name1,Name2" → exact match
|
|
54
56
|
if (query.startsWith("select:")) {
|
|
55
|
-
const names = query
|
|
57
|
+
const names = query
|
|
58
|
+
.slice(7)
|
|
59
|
+
.split(",")
|
|
60
|
+
.map((n) => n.trim());
|
|
56
61
|
return matchExact(ctx.toolRegistry, names, visible);
|
|
57
62
|
}
|
|
58
63
|
// Keyword search
|
|
@@ -47,6 +47,8 @@ export function makeUpdateAutomationMemoryTool(sink) {
|
|
|
47
47
|
isReadOnly: false,
|
|
48
48
|
isConcurrencySafe: false,
|
|
49
49
|
},
|
|
50
|
+
// Host-injected automation contribution, never part of a default preset.
|
|
51
|
+
exposure: { presetTags: [] },
|
|
50
52
|
execute: async (args) => {
|
|
51
53
|
const raw = typeof args.summary === "string" ? args.summary : "";
|
|
52
54
|
const summary = raw.trim();
|
|
@@ -28,8 +28,13 @@ const DEFAULT_MAX = 50_000;
|
|
|
28
28
|
const RAW_BYTE_BUDGET_MULTIPLIER = 4;
|
|
29
29
|
// Header names that must not be overridable via args.headers (SSRF / auth injection)
|
|
30
30
|
const BLOCKED_REQUEST_HEADERS = new Set([
|
|
31
|
-
"host",
|
|
32
|
-
"
|
|
31
|
+
"host",
|
|
32
|
+
"authorization",
|
|
33
|
+
"cookie",
|
|
34
|
+
"proxy-authorization",
|
|
35
|
+
"x-forwarded-for",
|
|
36
|
+
"x-real-ip",
|
|
37
|
+
"x-forwarded-host",
|
|
33
38
|
]);
|
|
34
39
|
// Hostname patterns that block SSRF to internal/metadata services
|
|
35
40
|
const BLOCKED_HOST_PATTERNS = [
|
|
@@ -41,15 +46,14 @@ const BLOCKED_HOST_PATTERNS = [
|
|
|
41
46
|
/^192\.168\./,
|
|
42
47
|
/^172\.(1[6-9]|2[0-9]|3[01])\./, // 172.16.0.0/12
|
|
43
48
|
/^::1$/,
|
|
44
|
-
/^fc00:/i,
|
|
49
|
+
/^fc00:/i,
|
|
50
|
+
/^fd00:/i, // IPv6 ULA
|
|
45
51
|
/^fe80:/i, // IPv6 link-local
|
|
46
52
|
];
|
|
47
53
|
function isBlockedHost(hostname) {
|
|
48
54
|
// `new URL("http://[::1]/").hostname` returns "[::1]" (with brackets);
|
|
49
55
|
// strip them so IPv6 patterns match.
|
|
50
|
-
const stripped = hostname.startsWith("[") && hostname.endsWith("]")
|
|
51
|
-
? hostname.slice(1, -1)
|
|
52
|
-
: hostname;
|
|
56
|
+
const stripped = hostname.startsWith("[") && hostname.endsWith("]") ? hostname.slice(1, -1) : hostname;
|
|
53
57
|
return BLOCKED_HOST_PATTERNS.some((re) => re.test(stripped));
|
|
54
58
|
}
|
|
55
59
|
// A3 hardening: per-IP block list. Used after DNS resolution to catch
|
|
@@ -119,11 +123,7 @@ const MAX_REDIRECTS = 5;
|
|
|
119
123
|
// Headers that must be stripped when a redirect crosses origins.
|
|
120
124
|
// Same policy fetch(... redirect: "follow") applies internally; we
|
|
121
125
|
// re-implement it here because we drive redirects manually.
|
|
122
|
-
const CROSS_ORIGIN_STRIP_HEADERS = new Set([
|
|
123
|
-
"authorization",
|
|
124
|
-
"cookie",
|
|
125
|
-
"proxy-authorization",
|
|
126
|
-
]);
|
|
126
|
+
const CROSS_ORIGIN_STRIP_HEADERS = new Set(["authorization", "cookie", "proxy-authorization"]);
|
|
127
127
|
async function defaultDnsLookup(hostname) {
|
|
128
128
|
// For literal IPs, lookup returns the IP itself (Node behavior),
|
|
129
129
|
// which still flows through the block-list check above.
|
|
@@ -147,7 +147,10 @@ async function validateHopHost(u) {
|
|
|
147
147
|
ips = await dnsLookupImpl(u.hostname);
|
|
148
148
|
}
|
|
149
149
|
catch (err) {
|
|
150
|
-
return {
|
|
150
|
+
return {
|
|
151
|
+
ok: false,
|
|
152
|
+
reason: `DNS lookup failed for "${u.hostname}": ${err.message}`,
|
|
153
|
+
};
|
|
151
154
|
}
|
|
152
155
|
if (ips.length === 0) {
|
|
153
156
|
return { ok: false, reason: `DNS returned no addresses for "${u.hostname}"` };
|
|
@@ -302,7 +305,8 @@ async function readAndTruncateBody(res, maxLength) {
|
|
|
302
305
|
}
|
|
303
306
|
if (rawTruncated || text.length > maxLength) {
|
|
304
307
|
const shownChars = Math.min(text.length, maxLength);
|
|
305
|
-
text =
|
|
308
|
+
text =
|
|
309
|
+
text.slice(0, maxLength) + `\n\n... content truncated (showing first ${shownChars} chars)`;
|
|
306
310
|
}
|
|
307
311
|
return text || "(page returned empty content)";
|
|
308
312
|
}
|
|
@@ -153,9 +153,7 @@ export async function webSearchTool(args, ctx) {
|
|
|
153
153
|
}
|
|
154
154
|
if (results.length === 0)
|
|
155
155
|
return "No results found.";
|
|
156
|
-
return results
|
|
157
|
-
.map((r, i) => `${i + 1}. ${r.title}\n ${r.url}\n ${r.snippet}`)
|
|
158
|
-
.join("\n\n");
|
|
156
|
+
return results.map((r, i) => `${i + 1}. ${r.title}\n ${r.url}\n ${r.snippet}`).join("\n\n");
|
|
159
157
|
}
|
|
160
158
|
catch (err) {
|
|
161
159
|
return `Search error: ${err.message}`;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import type { RegisteredTool, StreamEvent } from "../types.js";
|
|
2
|
+
import type { ToolContext } from "./context.js";
|
|
3
|
+
import type { ToolRegistry } from "./registry.js";
|
|
4
|
+
import type { BuiltinTool } from "./builtin/index.js";
|
|
5
|
+
import type { RunBehaviorProfile } from "../engine/run-types.js";
|
|
6
|
+
import type { PendingApprovalMetadata } from "../protocol/types.js";
|
|
7
|
+
export interface ExtensionTool {
|
|
8
|
+
definition: RegisteredTool;
|
|
9
|
+
execute: (args: Record<string, unknown>, ctx?: ToolContext) => Promise<unknown>;
|
|
10
|
+
}
|
|
11
|
+
export type ExtensionQueryHandler = (params: Readonly<Record<string, unknown>>) => unknown | Promise<unknown>;
|
|
12
|
+
/** Read-only live-session state exposed to protocol observers. */
|
|
13
|
+
export interface ProtocolLiveSession {
|
|
14
|
+
sessionId: string;
|
|
15
|
+
busy: boolean;
|
|
16
|
+
queueDepth: number;
|
|
17
|
+
lastActivityAt: number;
|
|
18
|
+
kind: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Domain-agnostic protocol lifecycle observer. An extension module can attach
|
|
22
|
+
* one per AgentServer to project protocol activity (runs, stream events,
|
|
23
|
+
* approvals, session/server teardown) into its own state — without the server
|
|
24
|
+
* carrying any domain-specific logic. Observer callbacks must be cheap and
|
|
25
|
+
* must never throw (the server isolates exceptions per observer regardless).
|
|
26
|
+
*/
|
|
27
|
+
export interface ProtocolObserver {
|
|
28
|
+
/** A session was created/attached by agent/run (before the turn is queued). */
|
|
29
|
+
onSessionAttached?: (sessionId: string, lastActivityAt: number) => void;
|
|
30
|
+
/** Every StreamEvent forwarded to the client for a session's run. */
|
|
31
|
+
onSessionStream?: (sessionId: string, event: StreamEvent) => void;
|
|
32
|
+
/** Run lifecycle boundary: turn accepted (start), finished (end) or threw (error). */
|
|
33
|
+
onRunBoundary?: (sessionId: string, phase: "start" | "end" | "error") => void;
|
|
34
|
+
/**
|
|
35
|
+
* A pending approval was registered. May return replacement metadata (e.g.
|
|
36
|
+
* to override `surfaceable`); returning nothing keeps the input metadata.
|
|
37
|
+
*/
|
|
38
|
+
onApprovalCreated?: (metadata: PendingApprovalMetadata) => PendingApprovalMetadata | void;
|
|
39
|
+
/** A pending approval left the pending state (resolved/expired/cancelled/owner-lost). */
|
|
40
|
+
onApprovalTransition?: (metadata: PendingApprovalMetadata, status: string) => void;
|
|
41
|
+
/** A session was explicitly closed (agent/closeSession). */
|
|
42
|
+
onSessionClosed?: (sessionId: string) => void;
|
|
43
|
+
/** The server is shutting down. */
|
|
44
|
+
onServerClose?: () => void;
|
|
45
|
+
/** Resolver-free pending-decision projections for host/debug snapshots. */
|
|
46
|
+
snapshotPendingDecisions?: () => readonly unknown[];
|
|
47
|
+
}
|
|
48
|
+
/** Capabilities the AgentServer lends to a protocol observer. */
|
|
49
|
+
export interface ProtocolObserverHost {
|
|
50
|
+
/** Snapshot of live chat sessions (empty in legacy single-engine mode). */
|
|
51
|
+
getLiveSessionSnapshot: () => readonly ProtocolLiveSession[];
|
|
52
|
+
/** Host lifecycle generation attached to projection snapshots/deltas. */
|
|
53
|
+
projectionGeneration: () => number;
|
|
54
|
+
/** Persisted session kind, when the session is live and its engine knows it. */
|
|
55
|
+
getSessionKind: (sessionId: string) => string | undefined;
|
|
56
|
+
/** True once the server's transport owner disconnected. */
|
|
57
|
+
isTransportDisconnected: () => boolean;
|
|
58
|
+
/** Server → client notification. */
|
|
59
|
+
notify: (method: string, params: Record<string, unknown>) => void;
|
|
60
|
+
/** Register a protocol-method/query alias handled by this extension. */
|
|
61
|
+
registerQuery: (type: string, handler: ExtensionQueryHandler) => void;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Trusted, in-process product extension. Core owns the registration seam while
|
|
65
|
+
* optional packages own their tools and diagnostic/query surface.
|
|
66
|
+
*/
|
|
67
|
+
export interface ExtensionModule {
|
|
68
|
+
readonly id: string;
|
|
69
|
+
readonly tools?: readonly ExtensionTool[];
|
|
70
|
+
readonly queries?: Readonly<Record<string, ExtensionQueryHandler>>;
|
|
71
|
+
/** Named per-run behavior profiles contributed by this extension. */
|
|
72
|
+
readonly behaviorProfiles?: readonly RunBehaviorProfile[];
|
|
73
|
+
/** Attach a protocol lifecycle observer to an AgentServer. */
|
|
74
|
+
readonly createProtocolObserver?: (host: ProtocolObserverHost) => ProtocolObserver;
|
|
75
|
+
/** Extra agent/run params validation. Returns an error message or null. */
|
|
76
|
+
readonly validateRunParams?: (params: Record<string, unknown>) => string | null;
|
|
77
|
+
/** Session kinds this extension owns that must stay out of generic session lists. */
|
|
78
|
+
readonly hiddenSessionKinds?: readonly string[];
|
|
79
|
+
/**
|
|
80
|
+
* Full-metadata tool contributions (exposure tags, availability guards,
|
|
81
|
+
* per-turn definition rewrites, default permission rules). These join the
|
|
82
|
+
* engine's composed tool catalog exactly like builtin/capability tools do —
|
|
83
|
+
* use this instead of `tools` when the tool needs visibility metadata.
|
|
84
|
+
*/
|
|
85
|
+
readonly catalogTools?: readonly BuiltinTool[];
|
|
86
|
+
}
|
|
87
|
+
export declare function registerExtensionModules(registry: ToolRegistry, modules: readonly ExtensionModule[]): void;
|
|
88
|
+
export declare function queryExtensionModules(modules: readonly ExtensionModule[], type: string, params: Readonly<Record<string, unknown>>): Promise<{
|
|
89
|
+
handled: false;
|
|
90
|
+
} | {
|
|
91
|
+
handled: true;
|
|
92
|
+
data: unknown;
|
|
93
|
+
}>;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { ConfigError } from "../exceptions.js";
|
|
2
|
+
function validateExtensionModules(modules) {
|
|
3
|
+
const ids = new Set();
|
|
4
|
+
const queries = new Set();
|
|
5
|
+
const tools = new Set();
|
|
6
|
+
for (const module of modules) {
|
|
7
|
+
if (ids.has(module.id)) {
|
|
8
|
+
throw new ConfigError(`Duplicate capability module id: ${module.id}`, {
|
|
9
|
+
duplicateCapabilityId: module.id,
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
ids.add(module.id);
|
|
13
|
+
for (const tool of module.tools ?? []) {
|
|
14
|
+
if (tools.has(tool.definition.name)) {
|
|
15
|
+
throw new ConfigError(`Duplicate capability tool: ${tool.definition.name}`, {
|
|
16
|
+
duplicateCapabilityTool: tool.definition.name,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
tools.add(tool.definition.name);
|
|
20
|
+
}
|
|
21
|
+
for (const query of Object.keys(module.queries ?? {})) {
|
|
22
|
+
if (queries.has(query)) {
|
|
23
|
+
throw new ConfigError(`Duplicate capability query: ${query}`, {
|
|
24
|
+
duplicateCapabilityQuery: query,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
queries.add(query);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export function registerExtensionModules(registry, modules) {
|
|
32
|
+
validateExtensionModules(modules);
|
|
33
|
+
for (const module of modules) {
|
|
34
|
+
for (const tool of module.tools ?? []) {
|
|
35
|
+
if (registry.hasTool(tool.definition.name)) {
|
|
36
|
+
throw new ConfigError(`Capability tool conflicts with registered tool: ${tool.definition.name}`, {
|
|
37
|
+
duplicateCapabilityTool: tool.definition.name,
|
|
38
|
+
capabilityId: module.id,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
registry.registerTool(tool.definition, tool.execute);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export async function queryExtensionModules(modules, type, params) {
|
|
46
|
+
validateExtensionModules(modules);
|
|
47
|
+
for (const module of modules) {
|
|
48
|
+
const handler = module.queries?.[type];
|
|
49
|
+
if (handler)
|
|
50
|
+
return { handled: true, data: await handler(params) };
|
|
51
|
+
}
|
|
52
|
+
return { handled: false };
|
|
53
|
+
}
|
|
@@ -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.
|
|
@@ -16,11 +16,13 @@ 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
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";
|
|
24
26
|
/**
|
|
25
27
|
* Narrow view of the owning Engine that tools are allowed to call back into.
|
|
26
28
|
* Defined here (in the low-level tool-system) rather than importing the
|
|
@@ -34,19 +36,6 @@ export interface ToolRuntimeHost {
|
|
|
34
36
|
readonly planMode: boolean;
|
|
35
37
|
/** Toggle plan mode (EnterPlanMode / ExitPlanMode tools). */
|
|
36
38
|
setPlanMode(value: boolean): void;
|
|
37
|
-
/** Per-worktree setup scripts, or undefined for sub-agents / no cwd. */
|
|
38
|
-
readWorktreeSetupScripts(cwd?: string): {
|
|
39
|
-
default?: string;
|
|
40
|
-
macos?: string;
|
|
41
|
-
linux?: string;
|
|
42
|
-
windows?: string;
|
|
43
|
-
} | undefined;
|
|
44
|
-
/** Branch prefix used for CodeShell-managed worktree branches. */
|
|
45
|
-
readWorktreeBranchPrefix?(cwd?: string): string | undefined;
|
|
46
|
-
/** Resolve a setup-only sandbox for a newly-created worktree root. */
|
|
47
|
-
resolveWorktreeSetupSandbox?(cwd: string): Promise<SandboxBackend | undefined>;
|
|
48
|
-
/** Resolve setup-only shell env for a newly-created worktree root. */
|
|
49
|
-
readWorktreeSetupShellEnv?(cwd?: string): Record<string, string> | undefined;
|
|
50
39
|
/** Session state store used by session-scoped tools such as worktree switching. */
|
|
51
40
|
getSessionManager?(): SessionManager;
|
|
52
41
|
}
|
|
@@ -129,6 +118,10 @@ export interface SubAgentSpawnRequest {
|
|
|
129
118
|
* tool. Undefined → child inherits the parent's full skill pool.
|
|
130
119
|
*/
|
|
131
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[];
|
|
132
125
|
/**
|
|
133
126
|
* Optional per-call system prompt appended to the child Engine's prompt
|
|
134
127
|
* (the role definition's Markdown body). Undefined → child inherits only
|
|
@@ -147,6 +140,15 @@ export interface SubAgentSpawnRequest {
|
|
|
147
140
|
* See AgentSendInput in builtin/agent.ts.
|
|
148
141
|
*/
|
|
149
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"];
|
|
150
152
|
}
|
|
151
153
|
export interface SubAgentSpawner {
|
|
152
154
|
/**
|
|
@@ -162,6 +164,8 @@ export interface SubAgentSpawner {
|
|
|
162
164
|
* the session transcript is still persisted). Optional for legacy callers.
|
|
163
165
|
*/
|
|
164
166
|
sessionExists?(sessionId: string): boolean;
|
|
167
|
+
/** Persisted direct-parent metadata used to authorize cross-restart continuation. */
|
|
168
|
+
getSessionParentId?(sessionId: string): string | null | undefined;
|
|
165
169
|
/** Stream callback to forward sub-agent events back to the parent UI. */
|
|
166
170
|
parentStream?: StreamCallback;
|
|
167
171
|
/** Static config used to describe what the spawned engine looks like. */
|
|
@@ -186,7 +190,20 @@ export interface SubAgentSpawnResult {
|
|
|
186
190
|
export interface ToolVisibilityContext {
|
|
187
191
|
cwd: string;
|
|
188
192
|
hasGoal: boolean;
|
|
193
|
+
/** Resolved Session identity for per-session extension-tool visibility. */
|
|
194
|
+
sessionId?: string;
|
|
189
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>>;
|
|
190
207
|
}
|
|
191
208
|
export interface ExternalFileChangesRecord {
|
|
192
209
|
jobId: string;
|
|
@@ -197,19 +214,43 @@ export interface ExternalFileChangesRecord {
|
|
|
197
214
|
changedFiles: string[];
|
|
198
215
|
originClientMessageId?: string;
|
|
199
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
|
+
}
|
|
200
225
|
export interface ToolContext {
|
|
201
226
|
/** Active working directory for this Engine. */
|
|
202
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;
|
|
203
235
|
/** Mutate the owning live context cwd. Worktree switching intentionally does not use this. */
|
|
204
236
|
setCwd?(cwd: string): void;
|
|
205
|
-
/** Mutate the owning live session state after a
|
|
206
|
-
setSessionWorkspace?(workspace: SessionWorkspace): void;
|
|
237
|
+
/** Mutate/rebase the owning live session state after a workspace switch. */
|
|
238
|
+
setSessionWorkspace?(workspace: SessionWorkspace, stateRevision?: number): void;
|
|
207
239
|
/** LLM credentials/endpoint for tools that need to make their own calls. */
|
|
208
240
|
llmConfig: LLMConfig;
|
|
209
|
-
/** Active model pool
|
|
241
|
+
/** Active model pool for model-aware tools and product capabilities. */
|
|
210
242
|
modelPool?: ModelPool;
|
|
211
243
|
/** Tool registry (ToolSearch reads this to enumerate available tools). */
|
|
212
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>>;
|
|
213
254
|
/** UI-backed AskUserQuestion handler. Undefined → headless mode. */
|
|
214
255
|
askUser?: AskUserFn;
|
|
215
256
|
/** Sub-agent spawner (Agent tool). Undefined → Agent tool unavailable. */
|
|
@@ -282,6 +323,8 @@ export interface ToolContext {
|
|
|
282
323
|
* narrow context, or standalone tool tests. (B2 — Gate 1, standard §S3.)
|
|
283
324
|
*/
|
|
284
325
|
sessionId?: string;
|
|
326
|
+
/** Engine-owned, run-scoped cross-Session message sender. */
|
|
327
|
+
sessionMessages?: import("../session/session-message.js").SessionMessageToolService;
|
|
285
328
|
/** Stable id of the real user turn that owns async work launched here. */
|
|
286
329
|
originClientMessageId?: string;
|
|
287
330
|
/**
|
|
@@ -291,6 +334,12 @@ export interface ToolContext {
|
|
|
291
334
|
* launched it has already returned.
|
|
292
335
|
*/
|
|
293
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;
|
|
294
343
|
/**
|
|
295
344
|
* Skill names the user has hidden from the LLM (full namespaced names
|
|
296
345
|
* for plugin skills, e.g. "docs:pdf"). The skill builtin tool uses
|
|
@@ -339,6 +388,8 @@ export interface ToolContext {
|
|
|
339
388
|
* sub-agents and no-cwd contexts (same as readBuiltinOverride).
|
|
340
389
|
*/
|
|
341
390
|
disabledBuiltins?: Set<string>;
|
|
391
|
+
/** Run-profile execution allowlist; omitted keeps the normal tool surface. */
|
|
392
|
+
allowedToolNames?: ReadonlySet<string>;
|
|
342
393
|
/**
|
|
343
394
|
* Per-turn context used by builtin availability guards. Engine.run() uses the
|
|
344
395
|
* same object to hide tools from the model; ToolExecutor reuses it to reject
|
|
@@ -354,6 +405,11 @@ export interface ToolContext {
|
|
|
354
405
|
* no gating (sub-agents / tests whose registries carry no MCP tools).
|
|
355
406
|
*/
|
|
356
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>;
|
|
357
413
|
/**
|
|
358
414
|
* The engine's settings scope, so tools that read disk config directly (e.g.
|
|
359
415
|
* the credential tools) can honor host-isolation instead of always merging
|
|
@@ -388,6 +444,8 @@ export interface ToolContext {
|
|
|
388
444
|
* session workspace.
|
|
389
445
|
*/
|
|
390
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;
|
|
391
449
|
/**
|
|
392
450
|
* Inject a stored cookie credential into the built-in browser (restore its
|
|
393
451
|
* login state so the AI can drive the page as that account). The host
|