@cjhyy/code-shell-core 0.7.1 → 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 +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/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,34 @@
|
|
|
1
|
+
export function buildMcpToolPolicies(servers) {
|
|
2
|
+
const policies = new Map();
|
|
3
|
+
for (const [serverName, config] of Object.entries(servers)) {
|
|
4
|
+
if (config.enabled === false)
|
|
5
|
+
continue;
|
|
6
|
+
if (config.allowedTools === undefined && config.disabledTools === undefined)
|
|
7
|
+
continue;
|
|
8
|
+
policies.set(serverName, {
|
|
9
|
+
allowedTools: config.allowedTools === undefined ? undefined : new Set(config.allowedTools),
|
|
10
|
+
disabledTools: new Set(config.disabledTools ?? []),
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
return policies;
|
|
14
|
+
}
|
|
15
|
+
export function isMcpToolNameAllowed(policies, serverName, toolName) {
|
|
16
|
+
const policy = policies?.get(serverName);
|
|
17
|
+
if (!policy)
|
|
18
|
+
return true;
|
|
19
|
+
if (policy.allowedTools && !policy.allowedTools.has(toolName))
|
|
20
|
+
return false;
|
|
21
|
+
return !policy.disabledTools.has(toolName);
|
|
22
|
+
}
|
|
23
|
+
export function isRegisteredMcpToolAllowed(tool, policies) {
|
|
24
|
+
if (tool.source !== "mcp")
|
|
25
|
+
return true;
|
|
26
|
+
const policy = policies?.get(tool.serverName ?? "");
|
|
27
|
+
if (!policy)
|
|
28
|
+
return true;
|
|
29
|
+
// Restricted servers fail closed for registry entries created by an older
|
|
30
|
+
// or third-party adapter that did not preserve the original MCP tool name.
|
|
31
|
+
if (!tool.mcpToolName)
|
|
32
|
+
return false;
|
|
33
|
+
return isMcpToolNameAllowed(policies, tool.serverName ?? "", tool.mcpToolName);
|
|
34
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/** One panel the active host can present to the user. */
|
|
2
|
+
export interface AgentPanelDescriptor {
|
|
3
|
+
id: string;
|
|
4
|
+
title: string;
|
|
5
|
+
source: "builtin" | "builtin-panel-app" | "panel-app";
|
|
6
|
+
}
|
|
7
|
+
export interface PanelOpenResult {
|
|
8
|
+
ok: boolean;
|
|
9
|
+
panelId: string;
|
|
10
|
+
detail?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface AgentPanelToolDescriptor {
|
|
13
|
+
name: string;
|
|
14
|
+
description: string;
|
|
15
|
+
inputSchema: Record<string, unknown>;
|
|
16
|
+
readOnly: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface PanelInvokeResult {
|
|
19
|
+
ok: boolean;
|
|
20
|
+
panelId: string;
|
|
21
|
+
toolName: string;
|
|
22
|
+
result?: unknown;
|
|
23
|
+
detail?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* A discovery result that can distinguish "the host has none" from "the request
|
|
27
|
+
* never completed".
|
|
28
|
+
*
|
|
29
|
+
* `list` / `tools` used to return a bare array, so every failure — a user Stop, a
|
|
30
|
+
* closed session, a timeout — collapsed to `[]`, which the Panel tool then
|
|
31
|
+
* reported as the factual claim "(no panels available)". That is worse than a
|
|
32
|
+
* refusal: it tells the model panel hosting is unavailable, so it stops trying.
|
|
33
|
+
* `failed` carries the reason instead, and an absent `failed` means the empty
|
|
34
|
+
* list is real.
|
|
35
|
+
*/
|
|
36
|
+
export interface PanelDiscoveryResult<T> {
|
|
37
|
+
items: T[];
|
|
38
|
+
/** Present only when the request did not complete; `items` is then empty. */
|
|
39
|
+
failed?: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* UI-agnostic bridge used by agent tools to discover and focus host panels.
|
|
43
|
+
*
|
|
44
|
+
* Core never imports a renderer. Desktop implements this through its protocol
|
|
45
|
+
* host; headless/TUI engines leave it undefined. Plugin-contributed tools may
|
|
46
|
+
* use the same bridge to open their own panel by stable registry id.
|
|
47
|
+
*/
|
|
48
|
+
export interface PanelHostBridge {
|
|
49
|
+
list(): Promise<PanelDiscoveryResult<AgentPanelDescriptor>>;
|
|
50
|
+
open(panelId: string): Promise<PanelOpenResult>;
|
|
51
|
+
tools?(panelId: string): Promise<PanelDiscoveryResult<AgentPanelToolDescriptor>>;
|
|
52
|
+
invoke?(panelId: string, toolName: string, args: Record<string, unknown>): Promise<PanelInvokeResult>;
|
|
53
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -6,6 +6,19 @@ import { logger as rootPermLogger } from "../logging/logger.js";
|
|
|
6
6
|
export interface ApprovalBackend {
|
|
7
7
|
requestApproval(request: ApprovalRequest): Promise<ApprovalResult>;
|
|
8
8
|
}
|
|
9
|
+
/**
|
|
10
|
+
* Interactive-approval lifecycle observation (see
|
|
11
|
+
* PermissionClassifier.setApprovalEventListener). "requested" fires right
|
|
12
|
+
* before the backend prompt is awaited; "resolved" fires after the user (or
|
|
13
|
+
* backend policy) answered, with the outcome.
|
|
14
|
+
*/
|
|
15
|
+
export interface ApprovalLifecycleEvent {
|
|
16
|
+
phase: "requested" | "resolved";
|
|
17
|
+
toolName: string;
|
|
18
|
+
riskLevel: "low" | "medium" | "high";
|
|
19
|
+
approved?: boolean;
|
|
20
|
+
sessionId?: string;
|
|
21
|
+
}
|
|
9
22
|
export interface ApprovalRouteTarget {
|
|
10
23
|
connectionId: string;
|
|
11
24
|
sessionId: string;
|
|
@@ -185,8 +198,21 @@ export declare class PermissionClassifier {
|
|
|
185
198
|
* tests and ad-hoc usages still write log lines.
|
|
186
199
|
*/
|
|
187
200
|
private log;
|
|
201
|
+
private approvalStateListener?;
|
|
202
|
+
private approvalEventListener?;
|
|
203
|
+
private activeApprovalCount;
|
|
188
204
|
constructor(rules: PermissionRule[], defaultMode?: PermissionMode, approvalBackend?: ApprovalBackend);
|
|
189
205
|
setLogger(log: typeof rootPermLogger): void;
|
|
206
|
+
setApprovalStateListener(listener: ((waiting: boolean, toolName: string) => void) | undefined): void;
|
|
207
|
+
/**
|
|
208
|
+
* Observe interactive-approval lifecycle (requested → resolved). The engine
|
|
209
|
+
* wires this to the `notification` hook so plugins / settings hooks can
|
|
210
|
+
* react to "waiting for the user's decision" moments (system notification,
|
|
211
|
+
* IM ping, …). Listener errors are swallowed — observation must never
|
|
212
|
+
* affect the approval outcome.
|
|
213
|
+
*/
|
|
214
|
+
setApprovalEventListener(listener: ((event: ApprovalLifecycleEvent) => void) | undefined): void;
|
|
215
|
+
private emitApprovalEvent;
|
|
190
216
|
/** Replace mode + backend in place so live tool execution sees the change. */
|
|
191
217
|
reconfigure(mode: PermissionMode, approvalBackend: ApprovalBackend, rules?: PermissionRule[]): void;
|
|
192
218
|
getMode(): PermissionMode;
|
|
@@ -1237,6 +1237,9 @@ export class PermissionClassifier {
|
|
|
1237
1237
|
* tests and ad-hoc usages still write log lines.
|
|
1238
1238
|
*/
|
|
1239
1239
|
log = rootPermLogger;
|
|
1240
|
+
approvalStateListener;
|
|
1241
|
+
approvalEventListener;
|
|
1242
|
+
activeApprovalCount = 0;
|
|
1240
1243
|
constructor(rules, defaultMode = "default", approvalBackend = new HeadlessApprovalBackend("deny-all")) {
|
|
1241
1244
|
this.rules = rules;
|
|
1242
1245
|
this.defaultMode = defaultMode;
|
|
@@ -1245,6 +1248,27 @@ export class PermissionClassifier {
|
|
|
1245
1248
|
setLogger(log) {
|
|
1246
1249
|
this.log = log;
|
|
1247
1250
|
}
|
|
1251
|
+
setApprovalStateListener(listener) {
|
|
1252
|
+
this.approvalStateListener = listener;
|
|
1253
|
+
}
|
|
1254
|
+
/**
|
|
1255
|
+
* Observe interactive-approval lifecycle (requested → resolved). The engine
|
|
1256
|
+
* wires this to the `notification` hook so plugins / settings hooks can
|
|
1257
|
+
* react to "waiting for the user's decision" moments (system notification,
|
|
1258
|
+
* IM ping, …). Listener errors are swallowed — observation must never
|
|
1259
|
+
* affect the approval outcome.
|
|
1260
|
+
*/
|
|
1261
|
+
setApprovalEventListener(listener) {
|
|
1262
|
+
this.approvalEventListener = listener;
|
|
1263
|
+
}
|
|
1264
|
+
emitApprovalEvent(event) {
|
|
1265
|
+
try {
|
|
1266
|
+
this.approvalEventListener?.(event);
|
|
1267
|
+
}
|
|
1268
|
+
catch {
|
|
1269
|
+
/* observers must not affect approval flow */
|
|
1270
|
+
}
|
|
1271
|
+
}
|
|
1248
1272
|
/** Replace mode + backend in place so live tool execution sees the change. */
|
|
1249
1273
|
reconfigure(mode, approvalBackend, rules) {
|
|
1250
1274
|
this.defaultMode = mode;
|
|
@@ -1330,6 +1354,14 @@ export class PermissionClassifier {
|
|
|
1330
1354
|
riskLevel,
|
|
1331
1355
|
});
|
|
1332
1356
|
let result;
|
|
1357
|
+
this.activeApprovalCount++;
|
|
1358
|
+
this.approvalStateListener?.(true, toolName);
|
|
1359
|
+
this.emitApprovalEvent({
|
|
1360
|
+
phase: "requested",
|
|
1361
|
+
toolName,
|
|
1362
|
+
riskLevel,
|
|
1363
|
+
...(opts?.sessionId ? { sessionId: opts.sessionId } : {}),
|
|
1364
|
+
});
|
|
1333
1365
|
try {
|
|
1334
1366
|
const baseDescription = this.describeToolCall(toolName, args);
|
|
1335
1367
|
const description = reason ? `${baseDescription}\n\nReason:\n${reason}` : baseDescription;
|
|
@@ -1345,12 +1377,24 @@ export class PermissionClassifier {
|
|
|
1345
1377
|
span.fail(err, { tool: toolName });
|
|
1346
1378
|
throw err;
|
|
1347
1379
|
}
|
|
1380
|
+
finally {
|
|
1381
|
+
this.activeApprovalCount = Math.max(0, this.activeApprovalCount - 1);
|
|
1382
|
+
if (this.activeApprovalCount === 0)
|
|
1383
|
+
this.approvalStateListener?.(false, toolName);
|
|
1384
|
+
}
|
|
1348
1385
|
if (result.approved) {
|
|
1349
1386
|
this.denialTracker.recordSuccess(toolName);
|
|
1350
1387
|
}
|
|
1351
1388
|
else {
|
|
1352
1389
|
this.denialTracker.record(toolName);
|
|
1353
1390
|
}
|
|
1391
|
+
this.emitApprovalEvent({
|
|
1392
|
+
phase: "resolved",
|
|
1393
|
+
toolName,
|
|
1394
|
+
riskLevel,
|
|
1395
|
+
approved: result.approved,
|
|
1396
|
+
...(opts?.sessionId ? { sessionId: opts.sessionId } : {}),
|
|
1397
|
+
});
|
|
1354
1398
|
span.end({
|
|
1355
1399
|
tool: toolName,
|
|
1356
1400
|
approved: result.approved,
|
|
@@ -1385,6 +1429,8 @@ export class PermissionClassifier {
|
|
|
1385
1429
|
return "medium";
|
|
1386
1430
|
if (toolName === "Bash")
|
|
1387
1431
|
return "medium";
|
|
1432
|
+
if (toolName === "Panel")
|
|
1433
|
+
return args.action === "invoke" ? "medium" : "low";
|
|
1388
1434
|
// Only genuinely read-only built-ins are "low" (the sole tier
|
|
1389
1435
|
// AutoApprovalBackend approves with no delegate). Everything else —
|
|
1390
1436
|
// crucially every MCP tool, which can delete records, send messages, or
|
|
@@ -2,27 +2,38 @@
|
|
|
2
2
|
* Unified tool registry — built-in tools + MCP tools.
|
|
3
3
|
*/
|
|
4
4
|
import type { RegisteredTool, ToolDefinition, ToolResult } from "../types.js";
|
|
5
|
+
import { type BuiltinTool, type BuiltinToolGuard } from "./builtin/index.js";
|
|
5
6
|
import type { ToolContext } from "./context.js";
|
|
6
7
|
/**
|
|
7
8
|
* Default execution timeout for any tool that does not declare its own
|
|
8
9
|
* timeoutMs at registration time. Tools that need to run longer (Agent,
|
|
9
|
-
*
|
|
10
|
+
* Bash, or custom capability tools) should set timeoutMs explicitly.
|
|
10
11
|
*/
|
|
11
12
|
export declare const DEFAULT_TOOL_TIMEOUT_MS = 120000;
|
|
12
13
|
export interface ToolRegistryOptions {
|
|
13
14
|
builtinTools?: readonly string[];
|
|
15
|
+
/** Core catalog plus any tools contributed by host capability packages. */
|
|
16
|
+
toolCatalog?: readonly BuiltinTool[];
|
|
14
17
|
}
|
|
15
18
|
type ToolImplementation = (args: Record<string, unknown>, ctx?: ToolContext) => Promise<unknown>;
|
|
16
19
|
export declare class ToolRegistry {
|
|
17
20
|
private tools;
|
|
18
21
|
private builtinExecutors;
|
|
22
|
+
private availabilityGuards;
|
|
19
23
|
constructor(options?: ToolRegistryOptions);
|
|
20
24
|
private registerBuiltins;
|
|
21
25
|
registerTool(tool: RegisteredTool, executor?: ToolImplementation): void;
|
|
26
|
+
/** Create an engine-local registry view without sharing mutable maps. */
|
|
27
|
+
fork(): ToolRegistry;
|
|
22
28
|
unregisterTool(name: string): void;
|
|
23
29
|
getToolDefinitions(): ToolDefinition[];
|
|
24
30
|
getTool(name: string): RegisteredTool | undefined;
|
|
25
31
|
hasTool(name: string): boolean;
|
|
32
|
+
/** Test/harness introspection: definitions without implementations are valid
|
|
33
|
+
* for some dynamic registrations, but every builtin catalog entry must have
|
|
34
|
+
* an executor. */
|
|
35
|
+
hasExecutor(name: string): boolean;
|
|
36
|
+
getAvailabilityGuard(name: string): BuiltinToolGuard | undefined;
|
|
26
37
|
executeTool(name: string, args: Record<string, unknown>, options?: {
|
|
27
38
|
timeoutMs?: number;
|
|
28
39
|
signal?: AbortSignal;
|
|
@@ -2,22 +2,26 @@
|
|
|
2
2
|
* Unified tool registry — built-in tools + MCP tools.
|
|
3
3
|
*/
|
|
4
4
|
import { ConfigError, ToolNotFoundError, ToolExecutionError, ToolTimeoutError, } from "../exceptions.js";
|
|
5
|
-
import { BUILTIN_TOOLS, toToolExecutionResult } from "./builtin/index.js";
|
|
5
|
+
import { BUILTIN_TOOLS, toToolExecutionResult, } from "./builtin/index.js";
|
|
6
6
|
import { validateToolMetadata } from "./validate-tool-metadata.js";
|
|
7
7
|
/**
|
|
8
8
|
* Default execution timeout for any tool that does not declare its own
|
|
9
9
|
* timeoutMs at registration time. Tools that need to run longer (Agent,
|
|
10
|
-
*
|
|
10
|
+
* Bash, or custom capability tools) should set timeoutMs explicitly.
|
|
11
11
|
*/
|
|
12
12
|
export const DEFAULT_TOOL_TIMEOUT_MS = 120_000;
|
|
13
13
|
export class ToolRegistry {
|
|
14
14
|
tools = new Map();
|
|
15
15
|
builtinExecutors = new Map();
|
|
16
|
+
availabilityGuards = new Map();
|
|
16
17
|
constructor(options = {}) {
|
|
17
|
-
this.registerBuiltins(options.builtinTools);
|
|
18
|
+
this.registerBuiltins(options.builtinTools, options.toolCatalog ?? BUILTIN_TOOLS);
|
|
18
19
|
}
|
|
19
|
-
registerBuiltins(selectedBuiltinTools) {
|
|
20
|
-
const availableNames = new Set(
|
|
20
|
+
registerBuiltins(selectedBuiltinTools, toolCatalog) {
|
|
21
|
+
const availableNames = new Set(toolCatalog.map((tool) => tool.definition.name));
|
|
22
|
+
if (availableNames.size !== toolCatalog.length) {
|
|
23
|
+
throw new ConfigError("Tool catalog contains duplicate names");
|
|
24
|
+
}
|
|
21
25
|
const selectedNames = selectedBuiltinTools ? new Set(selectedBuiltinTools) : null;
|
|
22
26
|
if (selectedNames) {
|
|
23
27
|
const unknown = [...selectedNames].filter((name) => !availableNames.has(name));
|
|
@@ -27,7 +31,7 @@ export class ToolRegistry {
|
|
|
27
31
|
});
|
|
28
32
|
}
|
|
29
33
|
}
|
|
30
|
-
for (const tool of
|
|
34
|
+
for (const tool of toolCatalog) {
|
|
31
35
|
if (selectedNames && !selectedNames.has(tool.definition.name)) {
|
|
32
36
|
continue;
|
|
33
37
|
}
|
|
@@ -36,6 +40,9 @@ export class ToolRegistry {
|
|
|
36
40
|
validateToolMetadata(tool.definition);
|
|
37
41
|
this.tools.set(tool.definition.name, tool.definition);
|
|
38
42
|
this.builtinExecutors.set(tool.definition.name, tool.execute);
|
|
43
|
+
if (tool.exposure.availability) {
|
|
44
|
+
this.availabilityGuards.set(tool.definition.name, tool.exposure.availability);
|
|
45
|
+
}
|
|
39
46
|
}
|
|
40
47
|
}
|
|
41
48
|
registerTool(tool, executor) {
|
|
@@ -45,9 +52,17 @@ export class ToolRegistry {
|
|
|
45
52
|
this.builtinExecutors.set(tool.name, async (args, ctx) => toToolExecutionResult(await executor(args, ctx)));
|
|
46
53
|
}
|
|
47
54
|
}
|
|
55
|
+
/** Create an engine-local registry view without sharing mutable maps. */
|
|
56
|
+
fork() {
|
|
57
|
+
const fork = new ToolRegistry({ builtinTools: [] });
|
|
58
|
+
fork.tools = new Map(this.tools);
|
|
59
|
+
fork.builtinExecutors = new Map(this.builtinExecutors);
|
|
60
|
+
return fork;
|
|
61
|
+
}
|
|
48
62
|
unregisterTool(name) {
|
|
49
63
|
this.tools.delete(name);
|
|
50
64
|
this.builtinExecutors.delete(name);
|
|
65
|
+
this.availabilityGuards.delete(name);
|
|
51
66
|
}
|
|
52
67
|
getToolDefinitions() {
|
|
53
68
|
return [...this.tools.values()].map((t) => ({
|
|
@@ -63,6 +78,15 @@ export class ToolRegistry {
|
|
|
63
78
|
hasTool(name) {
|
|
64
79
|
return this.tools.has(name);
|
|
65
80
|
}
|
|
81
|
+
/** Test/harness introspection: definitions without implementations are valid
|
|
82
|
+
* for some dynamic registrations, but every builtin catalog entry must have
|
|
83
|
+
* an executor. */
|
|
84
|
+
hasExecutor(name) {
|
|
85
|
+
return this.builtinExecutors.has(name);
|
|
86
|
+
}
|
|
87
|
+
getAvailabilityGuard(name) {
|
|
88
|
+
return this.availabilityGuards.get(name);
|
|
89
|
+
}
|
|
66
90
|
async executeTool(name, args, options) {
|
|
67
91
|
const tool = this.tools.get(name);
|
|
68
92
|
if (!tool) {
|
|
@@ -74,7 +98,7 @@ export class ToolRegistry {
|
|
|
74
98
|
}
|
|
75
99
|
// Tool timeout precedence:
|
|
76
100
|
// options.timeoutMs (per-call override) > tool.timeoutMs (declared at registration) > default 120s.
|
|
77
|
-
// To run longer, declare timeoutMs on the tool (e.g. Agent
|
|
101
|
+
// To run longer, declare timeoutMs on the tool (e.g. Agent: 30min, Bash: 1h).
|
|
78
102
|
const timeout = options?.timeoutMs ?? tool.timeoutMs ?? DEFAULT_TOOL_TIMEOUT_MS;
|
|
79
103
|
const parentSignal = options?.signal;
|
|
80
104
|
const id = `tool_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
@@ -26,7 +26,8 @@ import { SandboxUnavailableError } from "../../exceptions.js";
|
|
|
26
26
|
export function detectSandboxCapabilities() {
|
|
27
27
|
return {
|
|
28
28
|
seatbelt: process.platform === "darwin" && binaryExists("/usr/bin/sandbox-exec"),
|
|
29
|
-
bwrap: process.platform === "linux" &&
|
|
29
|
+
bwrap: process.platform === "linux" &&
|
|
30
|
+
(binaryExists("/usr/bin/bwrap") || binaryExists("/usr/local/bin/bwrap")),
|
|
30
31
|
};
|
|
31
32
|
}
|
|
32
33
|
function binaryExists(path) {
|
|
@@ -119,13 +120,7 @@ export function defaultSandboxConfig(mode = "auto") {
|
|
|
119
120
|
return {
|
|
120
121
|
mode,
|
|
121
122
|
writableRoots: ["${workspace}", ...tmpRoots],
|
|
122
|
-
deniedReads: [
|
|
123
|
-
"~/.ssh",
|
|
124
|
-
"~/.aws",
|
|
125
|
-
"~/.config/gcloud",
|
|
126
|
-
"~/.code-shell",
|
|
127
|
-
"~/.claude",
|
|
128
|
-
],
|
|
123
|
+
deniedReads: ["~/.ssh", "~/.aws", "~/.config/gcloud", "~/.code-shell", "~/.claude"],
|
|
129
124
|
network: "allow",
|
|
130
125
|
};
|
|
131
126
|
}
|
|
@@ -54,12 +54,8 @@ export function createSeatbeltBackend(config) {
|
|
|
54
54
|
};
|
|
55
55
|
}
|
|
56
56
|
function buildProfile(config) {
|
|
57
|
-
const writeAllows = config.writableRoots
|
|
58
|
-
|
|
59
|
-
.join("\n");
|
|
60
|
-
const readDenies = config.deniedReads
|
|
61
|
-
.map((p) => ` (subpath ${quote(p)})`)
|
|
62
|
-
.join("\n");
|
|
57
|
+
const writeAllows = config.writableRoots.map((p) => ` (subpath ${quote(p)})`).join("\n");
|
|
58
|
+
const readDenies = config.deniedReads.map((p) => ` (subpath ${quote(p)})`).join("\n");
|
|
63
59
|
const networkClause = config.network === "deny" ? "(deny network-outbound)" : "(allow network*)";
|
|
64
60
|
// SBPL evaluation note: when a broad `(allow file-read*)` and a specific
|
|
65
61
|
// `(deny file-read* (subpath …))` both match, the more specific subpath
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session-scoped tool host for external Agent Runtimes.
|
|
3
|
+
*
|
|
4
|
+
* An external runtime (Codex, Claude Code) drives its own agent loop and its own
|
|
5
|
+
* native tools. When it wants a CODESHELL tool it comes back in over MCP, and
|
|
6
|
+
* this is what it reaches: a narrow, per-business-session surface that exposes an
|
|
7
|
+
* explicitly allowlisted subset of the registry.
|
|
8
|
+
*
|
|
9
|
+
* The single rule that matters: **every call goes through
|
|
10
|
+
* `ToolExecutor.executeSingle()`**. `ToolRegistry` is not a security boundary —
|
|
11
|
+
* calling it directly would skip visibility, plan mode, argument validation, path
|
|
12
|
+
* policy, permission, sandbox, hooks, and result redaction. The MCP transport,
|
|
13
|
+
* the model's chosen tool name, and its arguments are all untrusted; the business
|
|
14
|
+
* session context is bound here by the host, out of band.
|
|
15
|
+
*
|
|
16
|
+
* Deliberately domain-agnostic: no Claude/Codex/Electron/coding literals. The
|
|
17
|
+
* runtime adapters live in the coding capability and talk to this through the
|
|
18
|
+
* `SessionToolHost` interface.
|
|
19
|
+
*/
|
|
20
|
+
import type { PermissionMode, ToolDefinition, ToolResult } from "../types.js";
|
|
21
|
+
import type { ToolContext } from "./context.js";
|
|
22
|
+
import { ToolRegistry } from "./registry.js";
|
|
23
|
+
import { type ApprovalBackend } from "./permission.js";
|
|
24
|
+
import { HookRegistry } from "../hooks/registry.js";
|
|
25
|
+
import { type ToolVisibilityInputs } from "../engine/run-tooling.js";
|
|
26
|
+
/**
|
|
27
|
+
* Permission modes an external session may use.
|
|
28
|
+
*
|
|
29
|
+
* `bypassPermissions` and `dontAsk` are excluded at the type level because they
|
|
30
|
+
* short-circuit `PermissionClassifier` entirely (it returns allow / deny before
|
|
31
|
+
* consulting any rule). Under either one, "the call went through ToolExecutor"
|
|
32
|
+
* becomes true but meaningless. The external runtime's OWN permission mode is a
|
|
33
|
+
* separate thing and is unaffected by this — it governs that runtime's native
|
|
34
|
+
* tools, not CodeShell's.
|
|
35
|
+
*/
|
|
36
|
+
export type ExternalSessionPermissionMode = Exclude<PermissionMode, "bypassPermissions" | "dontAsk">;
|
|
37
|
+
/**
|
|
38
|
+
* Which tools an external runtime may see and call.
|
|
39
|
+
*
|
|
40
|
+
* Allowlist only — no "everything in the registry", no prefix matching. A tool
|
|
41
|
+
* that is not named here does not exist as far as the runtime is concerned, and
|
|
42
|
+
* naming it anyway is an error rather than a silent no-op.
|
|
43
|
+
*/
|
|
44
|
+
export interface ExternalToolExposurePolicy {
|
|
45
|
+
mode: "allowlist";
|
|
46
|
+
toolNames: ReadonlySet<string>;
|
|
47
|
+
/**
|
|
48
|
+
* Optional per-tool argument narrowing, for tools that multiplex several
|
|
49
|
+
* operations behind one name (e.g. a Panel tool with list/open/tools/invoke).
|
|
50
|
+
* Each value is a regex source matched against the whole argument value —
|
|
51
|
+
* patterns are anchored for you, see {@link matchesWholeValue}.
|
|
52
|
+
*
|
|
53
|
+
* This binds on `execute()`, not just `listTools()`: describing a limit only in
|
|
54
|
+
* the advertised schema would leave it advisory, and the arguments come from
|
|
55
|
+
* the model.
|
|
56
|
+
*
|
|
57
|
+
* **Scope, stated plainly:** this constrains only the keys it names. Keys the
|
|
58
|
+
* pattern does not mention pass through untouched, so it is a good fit for
|
|
59
|
+
* "which action may run" and a poor one for "what may that action do".
|
|
60
|
+
* Restricting a nested payload (e.g. the arguments a Panel tool forwards to a
|
|
61
|
+
* Panel App) is the tool's own schema validation, not this. Do not treat an
|
|
62
|
+
* `argsPatterns` entry as a sandbox for everything a tool might accept.
|
|
63
|
+
*/
|
|
64
|
+
argsPatterns?: ReadonlyMap<string, Readonly<Record<string, string>>>;
|
|
65
|
+
}
|
|
66
|
+
export interface SessionToolHost {
|
|
67
|
+
readonly businessSessionId: string;
|
|
68
|
+
/**
|
|
69
|
+
* The assembled session ToolContext.
|
|
70
|
+
*
|
|
71
|
+
* Exposed read-only so a host can inspect what the executor will actually see
|
|
72
|
+
* — most usefully `toolVisibility` (absent means ToolExecutor SKIPS its
|
|
73
|
+
* availability guard) and `allowedToolNames`. Do not mutate it; narrow the
|
|
74
|
+
* exposure policy instead.
|
|
75
|
+
*/
|
|
76
|
+
readonly toolContext: ToolContext;
|
|
77
|
+
listTools(): readonly ToolDefinition[];
|
|
78
|
+
execute(call: {
|
|
79
|
+
id: string;
|
|
80
|
+
name: string;
|
|
81
|
+
input: unknown;
|
|
82
|
+
}, signal?: AbortSignal): Promise<ToolResult>;
|
|
83
|
+
dispose(): Promise<void>;
|
|
84
|
+
}
|
|
85
|
+
export interface CreateSessionToolHostOptions {
|
|
86
|
+
businessSessionId: string;
|
|
87
|
+
cwd: string;
|
|
88
|
+
registry: ToolRegistry;
|
|
89
|
+
permissionMode: ExternalSessionPermissionMode;
|
|
90
|
+
/**
|
|
91
|
+
* The agent preset's permission rules (e.g.
|
|
92
|
+
* `BUILTIN_AGENT_PRESETS.general.defaultPermissionRules`).
|
|
93
|
+
*
|
|
94
|
+
* Only the PRESET layer is supplied here. The rest of the stack — the standing
|
|
95
|
+
* memory-scope carve-outs, mode-derived rules, and the user's own
|
|
96
|
+
* `settings.permissions.rules` — is composed internally by
|
|
97
|
+
* {@link composePermissionRules}, the same function the Native Engine uses.
|
|
98
|
+
*
|
|
99
|
+
* That composition is deliberately not left to the caller. An earlier revision
|
|
100
|
+
* took a finished rule array, which turned an equivalence guarantee into an
|
|
101
|
+
* unenforceable obligation: nothing checked that a caller reproduced
|
|
102
|
+
* `PermissionController.build()`, and the easy mistake — omitting
|
|
103
|
+
* `settings.permissions.rules` — meant a user's explicit "deny this tool" bound
|
|
104
|
+
* the Native Engine but not the external runtime.
|
|
105
|
+
*/
|
|
106
|
+
presetRules: readonly import("../types.js").PermissionRule[];
|
|
107
|
+
/** Settings scope used to resolve the user's own permission rules. */
|
|
108
|
+
settingsScope?: import("../settings/manager.js").SettingsScope;
|
|
109
|
+
/**
|
|
110
|
+
* Whether the project at `cwd` has been trusted by the user.
|
|
111
|
+
*
|
|
112
|
+
* **Required, and there is no default** — `permissions` is the first entry in
|
|
113
|
+
* `DANGEROUS_PROJECT_FIELDS`, so an untrusted project's
|
|
114
|
+
* `settings.permissions.rules` are stripped precisely to stop a cloned repo
|
|
115
|
+
* self-authorizing. Every protocol-layer caller resolves this explicitly and
|
|
116
|
+
* defaults it to `false`; an optional field defaulting to "trusted" here would
|
|
117
|
+
* let a hostile repo grant an external runtime tools the user never trusted,
|
|
118
|
+
* without the approval backend ever being consulted.
|
|
119
|
+
*
|
|
120
|
+
* Optional-plus-unsafe-default is the exact shape of the bug this whole
|
|
121
|
+
* options object has now been bitten by twice. Hence: required.
|
|
122
|
+
*/
|
|
123
|
+
projectTrusted: boolean;
|
|
124
|
+
planMode: boolean;
|
|
125
|
+
exposure: ExternalToolExposurePolicy;
|
|
126
|
+
/**
|
|
127
|
+
* Availability-guard inputs. Required, not optional: `ToolExecutor` SKIPS its
|
|
128
|
+
* visibility gate when `toolCtx.toolVisibility` is absent, so omitting this
|
|
129
|
+
* would not merely under-expose tools — it would make host-gated tools
|
|
130
|
+
* callable in a context their guard was written to exclude.
|
|
131
|
+
*/
|
|
132
|
+
visibility: ToolVisibilityInputs;
|
|
133
|
+
approvalBackend?: ApprovalBackend;
|
|
134
|
+
hooks?: HookRegistry;
|
|
135
|
+
/** Extra ToolContext seams the host supplies (panels, browser, askUser, …). */
|
|
136
|
+
contextOverrides?: Partial<ToolContext>;
|
|
137
|
+
signal?: AbortSignal;
|
|
138
|
+
}
|
|
139
|
+
export declare function createSessionToolHost(options: CreateSessionToolHostOptions): SessionToolHost;
|