@cjhyy/code-shell-core 0.5.0-rc.1 → 0.6.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -10
- package/dist/agent/agent-definition-registry.d.ts +21 -3
- package/dist/agent/agent-definition-registry.js +49 -18
- package/dist/agent/agent-definition.d.ts +32 -0
- package/dist/agent/agent-definition.js +49 -4
- package/dist/arena/arena.js +11 -12
- package/dist/arena/context/context-tools.js +47 -6
- package/dist/arena/context/within-root.d.ts +7 -0
- package/dist/arena/context/within-root.js +15 -0
- package/dist/arena/iterate/phases/argue.js +8 -2
- package/dist/arena/iterate/phases/revise.js +1 -1
- package/dist/arena/iterate/phases/tournament.js +3 -3
- package/dist/arena/ledger.js +9 -1
- package/dist/arena/phases/adjudication.js +1 -4
- package/dist/arena/phases/build-consensus.js +1 -4
- package/dist/arena/phases/cross-review.js +2 -8
- package/dist/arena/phases/debate-rounds.js +1 -4
- package/dist/arena/phases/participant-research.js +1 -4
- package/dist/arena/phases/planning-detail-expansion.js +8 -10
- package/dist/arena/planner.js +0 -1
- package/dist/arena/providers/docs.d.ts +1 -0
- package/dist/arena/providers/docs.js +5 -2
- package/dist/arena/providers/repo.d.ts +1 -0
- package/dist/arena/providers/repo.js +5 -2
- package/dist/arena/strategies/utils.d.ts +1 -4
- package/dist/arena/strategies/utils.js +7 -51
- package/dist/arena/transitions.d.ts +7 -2
- package/dist/arena/transitions.js +9 -4
- package/dist/arena/types.d.ts +8 -2
- package/dist/automation/cron-expr.d.ts +41 -0
- package/dist/automation/cron-expr.js +169 -0
- package/dist/automation/index.d.ts +41 -0
- package/dist/automation/index.js +39 -0
- package/dist/automation/runner.d.ts +84 -0
- package/dist/automation/runner.js +92 -0
- package/dist/automation/scheduler.d.ts +194 -0
- package/dist/automation/scheduler.js +623 -0
- package/dist/automation/store.d.ts +39 -0
- package/dist/automation/store.js +122 -0
- package/dist/automation/write-policy.d.ts +34 -0
- package/dist/automation/write-policy.js +113 -0
- package/dist/automation/write-run.d.ts +51 -0
- package/dist/automation/write-run.js +38 -0
- package/dist/capability-control/disabled-lists.d.ts +25 -0
- package/dist/capability-control/disabled-lists.js +57 -0
- package/dist/capability-control/index.d.ts +5 -0
- package/dist/capability-control/index.js +3 -0
- package/dist/capability-control/overlay.d.ts +64 -0
- package/dist/capability-control/overlay.js +116 -0
- package/dist/capability-control/project.d.ts +65 -0
- package/dist/capability-control/project.js +147 -0
- package/dist/capability-control/service.d.ts +70 -0
- package/dist/capability-control/service.js +147 -0
- package/dist/capability-control/types.d.ts +62 -0
- package/dist/capability-control/types.js +17 -0
- package/dist/cc-orchestrator/agent-adapter.d.ts +50 -0
- package/dist/cc-orchestrator/agent-adapter.js +133 -0
- package/dist/cc-orchestrator/cc-capability.d.ts +19 -0
- package/dist/cc-orchestrator/cc-capability.js +53 -0
- package/dist/cc-orchestrator/codex-session-discovery.d.ts +24 -0
- package/dist/cc-orchestrator/codex-session-discovery.js +191 -0
- package/dist/cc-orchestrator/codex-session-history.d.ts +25 -0
- package/dist/cc-orchestrator/codex-session-history.js +187 -0
- package/dist/cc-orchestrator/external-agent-changes.d.ts +19 -0
- package/dist/cc-orchestrator/external-agent-changes.js +214 -0
- package/dist/cc-orchestrator/external-agent-driver.d.ts +18 -0
- package/dist/cc-orchestrator/external-agent-driver.js +69 -0
- package/dist/cc-orchestrator/index.d.ts +8 -0
- package/dist/cc-orchestrator/index.js +8 -0
- package/dist/cc-orchestrator/relevance-judge.d.ts +15 -0
- package/dist/cc-orchestrator/relevance-judge.js +29 -0
- package/dist/cc-orchestrator/session-discovery.d.ts +46 -0
- package/dist/cc-orchestrator/session-discovery.js +125 -0
- package/dist/cc-orchestrator/session-history.d.ts +19 -0
- package/dist/cc-orchestrator/session-history.js +67 -0
- package/dist/cli/agent-server-stdio.d.ts +26 -1
- package/dist/cli/agent-server-stdio.js +221 -28
- package/dist/cli/agent-server-tcp.d.ts +20 -0
- package/dist/cli/agent-server-tcp.js +134 -0
- package/dist/cli/graceful-shutdown.d.ts +27 -0
- package/dist/cli/graceful-shutdown.js +30 -0
- package/dist/context/compaction.d.ts +56 -0
- package/dist/context/compaction.js +209 -15
- package/dist/context/manager.d.ts +0 -20
- package/dist/context/manager.js +25 -41
- package/dist/cost-tracker.js +5 -61
- package/dist/credentials/cipher.d.ts +49 -0
- package/dist/credentials/cipher.js +45 -0
- package/dist/credentials/cookie-jar.d.ts +24 -0
- package/dist/credentials/cookie-jar.js +40 -0
- package/dist/credentials/index.d.ts +7 -0
- package/dist/credentials/index.js +5 -0
- package/dist/credentials/inject-credential-tool.d.ts +20 -0
- package/dist/credentials/inject-credential-tool.js +130 -0
- package/dist/credentials/store.d.ts +72 -0
- package/dist/credentials/store.js +184 -0
- package/dist/credentials/types.d.ts +56 -0
- package/dist/credentials/use-credential-tool.d.ts +29 -0
- package/dist/credentials/use-credential-tool.js +205 -0
- package/dist/credentials/use-gate.d.ts +56 -0
- package/dist/credentials/use-gate.js +52 -0
- package/dist/cron/cron-runtime.d.ts +2 -0
- package/dist/cron/cron-runtime.js +2 -0
- package/dist/cron/cron-store.d.ts +2 -0
- package/dist/cron/cron-store.js +2 -0
- package/dist/cron/scheduler.d.ts +5 -32
- package/dist/cron/scheduler.js +5 -113
- package/dist/data/model-metadata.d.ts +77 -0
- package/dist/data/model-metadata.js +56 -0
- package/dist/data/model-metadata.json +216 -0
- package/dist/data/openrouter-models.d.ts +18 -7
- package/dist/data/openrouter-models.js +35 -8
- package/dist/data/openrouter-sync.js +1 -1
- package/dist/engine/aux-key.d.ts +10 -0
- package/dist/engine/aux-key.js +11 -0
- package/dist/engine/dynamic-tool-defs.d.ts +19 -0
- package/dist/engine/dynamic-tool-defs.js +36 -0
- package/dist/engine/engine.d.ts +431 -108
- package/dist/engine/engine.js +1630 -279
- package/dist/engine/friendly-error.d.ts +18 -0
- package/dist/engine/friendly-error.js +63 -0
- package/dist/engine/goal.d.ts +187 -0
- package/dist/engine/goal.js +196 -0
- package/dist/engine/image-compression.d.ts +81 -0
- package/dist/engine/image-compression.js +186 -0
- package/dist/engine/image-policy.d.ts +165 -0
- package/dist/engine/image-policy.js +189 -0
- package/dist/engine/model-connections-pool.d.ts +17 -0
- package/dist/engine/model-connections-pool.js +66 -0
- package/dist/engine/model-facade.d.ts +10 -0
- package/dist/engine/model-facade.js +25 -0
- package/dist/engine/patch-orphaned-tools.js +3 -0
- package/dist/engine/reactive-threshold.d.ts +13 -0
- package/dist/engine/reactive-threshold.js +17 -0
- package/dist/engine/resolve-llm-config.d.ts +16 -0
- package/dist/engine/resolve-llm-config.js +44 -0
- package/dist/engine/runtime.js +9 -1
- package/dist/engine/sandbox-cache-key.d.ts +10 -0
- package/dist/engine/sandbox-cache-key.js +9 -0
- package/dist/engine/sandbox-config.d.ts +31 -0
- package/dist/engine/sandbox-config.js +38 -0
- package/dist/engine/session-title.d.ts +13 -0
- package/dist/engine/session-title.js +34 -0
- package/dist/engine/session-usage.d.ts +19 -0
- package/dist/engine/session-usage.js +25 -0
- package/dist/engine/steer-queue.d.ts +32 -0
- package/dist/engine/steer-queue.js +26 -0
- package/dist/engine/streaming-tool-queue.d.ts +12 -0
- package/dist/engine/streaming-tool-queue.js +50 -10
- package/dist/engine/turn-loop.d.ts +94 -9
- package/dist/engine/turn-loop.js +775 -342
- package/dist/engine/types.d.ts +175 -0
- package/dist/engine/types.js +13 -0
- package/dist/external-agents/config.d.ts +2 -0
- package/dist/external-agents/config.js +15 -0
- package/dist/external-agents/types.d.ts +31 -0
- package/dist/external-agents/types.js +1 -0
- package/dist/git/parse-log.d.ts +13 -0
- package/dist/git/parse-log.js +21 -0
- package/dist/git/utils.d.ts +8 -6
- package/dist/git/utils.js +62 -26
- package/dist/git/worktree.d.ts +48 -0
- package/dist/git/worktree.js +111 -20
- package/dist/hooks/events.d.ts +23 -1
- package/dist/hooks/goal-stop-hook.d.ts +58 -0
- package/dist/hooks/goal-stop-hook.js +279 -0
- package/dist/hooks/hook-output.d.ts +33 -0
- package/dist/hooks/hook-output.js +79 -0
- package/dist/hooks/registry.d.ts +15 -0
- package/dist/hooks/registry.js +57 -1
- package/dist/hooks/shell-runner.d.ts +2 -0
- package/dist/hooks/shell-runner.js +48 -18
- package/dist/index.d.ts +79 -11
- package/dist/index.js +89 -6
- package/dist/llm/capabilities/param-specs.d.ts +14 -0
- package/dist/llm/capabilities/param-specs.js +62 -0
- package/dist/llm/capabilities/reasoning-control.d.ts +24 -0
- package/dist/llm/capabilities/reasoning-control.js +38 -0
- package/dist/llm/capabilities/rules.js +37 -3
- package/dist/llm/capabilities/types.d.ts +32 -2
- package/dist/llm/clamp-max-tokens.d.ts +11 -0
- package/dist/llm/clamp-max-tokens.js +17 -0
- package/dist/llm/client-base.d.ts +69 -5
- package/dist/llm/client-base.js +185 -25
- package/dist/llm/client-factory.d.ts +3 -3
- package/dist/llm/client-factory.js +2 -2
- package/dist/llm/model-cache.js +4 -2
- package/dist/llm/model-pool.d.ts +29 -11
- package/dist/llm/model-pool.js +36 -20
- package/dist/llm/provider-auth.d.ts +41 -0
- package/dist/llm/provider-auth.js +76 -0
- package/dist/llm/provider-catalog.d.ts +6 -2
- package/dist/llm/providers/anthropic.d.ts +32 -2
- package/dist/llm/providers/anthropic.js +207 -18
- package/dist/llm/providers/openai.d.ts +47 -2
- package/dist/llm/providers/openai.js +478 -71
- package/dist/llm/reasoning-setting.d.ts +51 -0
- package/dist/llm/reasoning-setting.js +40 -0
- package/dist/llm/stop-reason.d.ts +13 -0
- package/dist/llm/stop-reason.js +21 -0
- package/dist/llm/stream-watchdog.js +5 -1
- package/dist/llm/strip-vision.d.ts +32 -0
- package/dist/llm/strip-vision.js +94 -0
- package/dist/llm/token-counter.js +9 -2
- package/dist/llm/types.d.ts +9 -6
- package/dist/logging/logger.js +18 -4
- package/dist/logging/sanitize-messages.d.ts +10 -0
- package/dist/logging/sanitize-messages.js +112 -0
- package/dist/lsp/client.js +28 -8
- package/dist/lsp/manager.d.ts +1 -1
- package/dist/lsp/manager.js +42 -11
- package/dist/lsp/root-path.d.ts +9 -0
- package/dist/lsp/root-path.js +12 -0
- package/dist/model-catalog/builtin.d.ts +12 -0
- package/dist/model-catalog/builtin.js +407 -0
- package/dist/model-catalog/gen-connections.d.ts +20 -0
- package/dist/model-catalog/gen-connections.js +28 -0
- package/dist/model-catalog/index.d.ts +41 -0
- package/dist/model-catalog/index.js +90 -0
- package/dist/model-catalog/params.d.ts +20 -0
- package/dist/model-catalog/params.js +45 -0
- package/dist/model-catalog/resolve.d.ts +48 -0
- package/dist/model-catalog/resolve.js +33 -0
- package/dist/model-catalog/save-entry.d.ts +32 -0
- package/dist/model-catalog/save-entry.js +104 -0
- package/dist/model-catalog/types.d.ts +561 -0
- package/dist/model-catalog/types.js +93 -0
- package/dist/model-catalog/upsert.d.ts +9 -0
- package/dist/model-catalog/upsert.js +8 -0
- package/dist/onboarding.d.ts +12 -82
- package/dist/onboarding.js +75 -333
- package/dist/plugins/gitOps.d.ts +53 -0
- package/dist/plugins/gitOps.js +130 -5
- package/dist/plugins/installer/checkUpdate.d.ts +16 -0
- package/dist/plugins/installer/checkUpdate.js +32 -0
- package/dist/plugins/installer/codex/convertAgents.d.ts +7 -0
- package/dist/plugins/installer/codex/convertAgents.js +55 -0
- package/dist/plugins/installer/codex/convertCommands.d.ts +19 -0
- package/dist/plugins/installer/codex/convertCommands.js +46 -0
- package/dist/plugins/installer/codex/convertMcp.d.ts +11 -0
- package/dist/plugins/installer/codex/convertMcp.js +85 -0
- package/dist/plugins/installer/codex/convertSkills.d.ts +12 -0
- package/dist/plugins/installer/codex/convertSkills.js +33 -0
- package/dist/plugins/installer/detectFormat.d.ts +2 -0
- package/dist/plugins/installer/detectFormat.js +6 -0
- package/dist/plugins/installer/install.d.ts +7 -0
- package/dist/plugins/installer/install.js +123 -0
- package/dist/plugins/installer/installFromArchive.d.ts +43 -0
- package/dist/plugins/installer/installFromArchive.js +134 -0
- package/dist/plugins/installer/installFromSource.d.ts +13 -0
- package/dist/plugins/installer/installFromSource.js +51 -0
- package/dist/plugins/installer/list.d.ts +9 -0
- package/dist/plugins/installer/list.js +30 -0
- package/dist/plugins/installer/loadPluginAgents.d.ts +3 -0
- package/dist/plugins/installer/loadPluginAgents.js +27 -0
- package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
- package/dist/plugins/installer/loadPluginMcp.js +107 -0
- package/dist/plugins/installer/parseSource.d.ts +20 -0
- package/dist/plugins/installer/parseSource.js +74 -0
- package/dist/plugins/installer/paths.d.ts +5 -0
- package/dist/plugins/installer/paths.js +25 -0
- package/dist/plugins/installer/pruneDisabled.d.ts +24 -0
- package/dist/plugins/installer/pruneDisabled.js +73 -0
- package/dist/plugins/installer/types.d.ts +52 -0
- package/dist/plugins/installer/types.js +28 -0
- package/dist/plugins/installer/uninstall.d.ts +2 -0
- package/dist/plugins/installer/uninstall.js +18 -0
- package/dist/plugins/installer/unzip.d.ts +14 -0
- package/dist/plugins/installer/unzip.js +82 -0
- package/dist/plugins/installer/update.d.ts +28 -0
- package/dist/plugins/installer/update.js +97 -0
- package/dist/plugins/loadPluginHooks.d.ts +54 -1
- package/dist/plugins/loadPluginHooks.js +83 -1
- package/dist/plugins/marketplaceManager.d.ts +15 -1
- package/dist/plugins/marketplaceManager.js +58 -4
- package/dist/plugins/pluginCommandHook.js +34 -14
- package/dist/plugins/pluginContent.d.ts +30 -0
- package/dist/plugins/pluginContent.js +83 -0
- package/dist/plugins/pluginInstaller.d.ts +34 -0
- package/dist/plugins/pluginInstaller.js +168 -35
- package/dist/plugins/schemas.js +41 -6
- package/dist/plugins/types.d.ts +10 -0
- package/dist/preset/index.d.ts +7 -1
- package/dist/preset/index.js +112 -6
- package/dist/product/types.d.ts +1 -1
- package/dist/prompt/composer.d.ts +31 -0
- package/dist/prompt/composer.js +95 -25
- package/dist/prompt/instruction-scanner.js +5 -3
- package/dist/prompt/section-loader.js +1 -0
- package/dist/prompt/sections/base.md +1 -0
- package/dist/prompt/sections/browser.md +10 -0
- package/dist/prompt/sections/coding.md +4 -0
- package/dist/prompt/sections/orchestration.md +8 -0
- package/dist/protocol/chat-session-manager.d.ts +15 -2
- package/dist/protocol/chat-session-manager.js +46 -0
- package/dist/protocol/chat-session.d.ts +82 -0
- package/dist/protocol/chat-session.js +121 -1
- package/dist/protocol/client.d.ts +27 -0
- package/dist/protocol/client.js +38 -0
- package/dist/protocol/redact.d.ts +50 -0
- package/dist/protocol/redact.js +71 -0
- package/dist/protocol/server.d.ts +153 -2
- package/dist/protocol/server.js +807 -39
- package/dist/protocol/tcp-transport.d.ts +45 -0
- package/dist/protocol/tcp-transport.js +74 -0
- package/dist/protocol/transport.js +3 -2
- package/dist/protocol/types.d.ts +69 -0
- package/dist/protocol/types.js +22 -0
- package/dist/quota/credentials.d.ts +3 -0
- package/dist/quota/credentials.js +80 -0
- package/dist/quota/index.d.ts +36 -0
- package/dist/quota/index.js +155 -0
- package/dist/quota/types.d.ts +48 -0
- package/dist/quota/types.js +13 -0
- package/dist/remote/bridge.d.ts +11 -2
- package/dist/remote/bridge.js +61 -33
- package/dist/review/review-prompt.d.ts +28 -0
- package/dist/review/review-prompt.js +81 -0
- package/dist/run/ArtifactTracker.js +5 -4
- package/dist/run/EngineRunner.d.ts +27 -1
- package/dist/run/EngineRunner.js +46 -8
- package/dist/run/FileRunStore.js +40 -11
- package/dist/run/RunApprovalBackend.js +25 -5
- package/dist/run/RunLock.d.ts +28 -2
- package/dist/run/RunLock.js +49 -7
- package/dist/run/RunManager.d.ts +12 -0
- package/dist/run/RunManager.js +86 -3
- package/dist/run/RunQueue.d.ts +1 -0
- package/dist/run/RunQueue.js +8 -2
- package/dist/run/factory.d.ts +8 -1
- package/dist/run/factory.js +1 -0
- package/dist/run/index.d.ts +2 -2
- package/dist/run/index.js +1 -1
- package/dist/run/redirect-target.d.ts +7 -0
- package/dist/run/redirect-target.js +13 -0
- package/dist/run/types.js +1 -1
- package/dist/runtime/background-shell.d.ts +139 -0
- package/dist/runtime/background-shell.js +495 -0
- package/dist/runtime/output-clean.d.ts +24 -0
- package/dist/runtime/output-clean.js +41 -0
- package/dist/runtime/ring-file.d.ts +64 -0
- package/dist/runtime/ring-file.js +174 -0
- package/dist/runtime/safe-spawn.js +15 -34
- package/dist/runtime/spawn-common.d.ts +148 -0
- package/dist/runtime/spawn-common.js +303 -0
- package/dist/runtime/truncate-output.d.ts +22 -0
- package/dist/runtime/truncate-output.js +49 -0
- package/dist/runtime/utf8-cut.d.ts +11 -0
- package/dist/runtime/utf8-cut.js +23 -0
- package/dist/services/auto-dream.d.ts +4 -0
- package/dist/services/auto-dream.js +26 -26
- package/dist/services/browser-open.d.ts +13 -0
- package/dist/services/browser-open.js +16 -0
- package/dist/services/diagnostics.d.ts +1 -2
- package/dist/services/diagnostics.js +12 -7
- package/dist/services/dream-consolidation.d.ts +57 -0
- package/dist/services/dream-consolidation.js +151 -0
- package/dist/services/extract-memories.d.ts +14 -1
- package/dist/services/extract-memories.js +45 -6
- package/dist/services/memory-orchestrator.d.ts +21 -0
- package/dist/services/memory-orchestrator.js +125 -32
- package/dist/services/notifier.d.ts +8 -0
- package/dist/services/notifier.js +39 -25
- package/dist/services/oauth.js +5 -7
- package/dist/services/session-memory-sort.d.ts +8 -0
- package/dist/services/session-memory-sort.js +9 -0
- package/dist/services/session-memory.js +30 -19
- package/dist/session/file-history.d.ts +124 -1
- package/dist/session/file-history.js +232 -9
- package/dist/session/memory.d.ts +116 -2
- package/dist/session/memory.js +250 -28
- package/dist/session/session-manager.d.ts +63 -1
- package/dist/session/session-manager.js +186 -5
- package/dist/session/simple-diff.d.ts +23 -0
- package/dist/session/simple-diff.js +84 -0
- package/dist/session/transcript.d.ts +25 -1
- package/dist/session/transcript.js +35 -2
- package/dist/session/undo-target.d.ts +67 -0
- package/dist/session/undo-target.js +144 -0
- package/dist/settings/disk-defaults.d.ts +42 -0
- package/dist/settings/disk-defaults.js +33 -0
- package/dist/settings/feature-flags.d.ts +64 -0
- package/dist/settings/feature-flags.js +61 -0
- package/dist/settings/manager.d.ts +101 -1
- package/dist/settings/manager.js +345 -15
- package/dist/settings/migrate-config.d.ts +45 -0
- package/dist/settings/migrate-config.js +125 -0
- package/dist/settings/personalization.d.ts +19 -0
- package/dist/settings/personalization.js +7 -0
- package/dist/settings/schema-export.d.ts +25 -0
- package/dist/settings/schema-export.js +38 -0
- package/dist/settings/schema.d.ts +1827 -396
- package/dist/settings/schema.js +361 -81
- package/dist/skills/scanner.d.ts +9 -0
- package/dist/skills/scanner.js +30 -2
- package/dist/stt/resolve-transcribe.d.ts +31 -0
- package/dist/stt/resolve-transcribe.js +108 -0
- package/dist/stt/transcribe.d.ts +51 -0
- package/dist/stt/transcribe.js +65 -0
- package/dist/tool-system/browser-bridge.d.ts +226 -0
- package/dist/tool-system/browser-bridge.js +163 -0
- package/dist/tool-system/builtin/add-marketplace.d.ts +12 -0
- package/dist/tool-system/builtin/add-marketplace.js +76 -0
- package/dist/tool-system/builtin/agent-heartbeat.d.ts +49 -0
- package/dist/tool-system/builtin/agent-heartbeat.js +89 -0
- package/dist/tool-system/builtin/agent-notifications.d.ts +12 -3
- package/dist/tool-system/builtin/agent-notifications.js +9 -3
- package/dist/tool-system/builtin/agent-output-file.d.ts +38 -0
- package/dist/tool-system/builtin/agent-output-file.js +72 -0
- package/dist/tool-system/builtin/agent-registry.d.ts +23 -0
- package/dist/tool-system/builtin/agent-registry.js +16 -4
- package/dist/tool-system/builtin/agent.d.ts +50 -11
- package/dist/tool-system/builtin/agent.js +576 -73
- package/dist/tool-system/builtin/apply-patch/applier.js +66 -8
- package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +10 -0
- package/dist/tool-system/builtin/apply-patch/backup-targets.js +30 -0
- package/dist/tool-system/builtin/apply-patch/index.js +7 -3
- package/dist/tool-system/builtin/arena.js +6 -7
- package/dist/tool-system/builtin/background-jobs.d.ts +76 -0
- package/dist/tool-system/builtin/background-jobs.js +124 -0
- package/dist/tool-system/builtin/background-shell-tools.d.ts +20 -0
- package/dist/tool-system/builtin/background-shell-tools.js +108 -0
- package/dist/tool-system/builtin/background-work.d.ts +67 -0
- package/dist/tool-system/builtin/background-work.js +86 -0
- package/dist/tool-system/builtin/bash-output-style.d.ts +32 -0
- package/dist/tool-system/builtin/bash-output-style.js +40 -0
- package/dist/tool-system/builtin/bash.d.ts +5 -2
- package/dist/tool-system/builtin/bash.js +98 -62
- package/dist/tool-system/builtin/browser-tools.d.ts +33 -0
- package/dist/tool-system/builtin/browser-tools.js +312 -0
- package/dist/tool-system/builtin/cancel-goal.d.ts +31 -0
- package/dist/tool-system/builtin/cancel-goal.js +64 -0
- package/dist/tool-system/builtin/check-quota.d.ts +15 -0
- package/dist/tool-system/builtin/check-quota.js +34 -0
- package/dist/tool-system/builtin/complete-goal.d.ts +25 -0
- package/dist/tool-system/builtin/complete-goal.js +45 -0
- package/dist/tool-system/builtin/config.js +7 -0
- package/dist/tool-system/builtin/cron.d.ts +7 -0
- package/dist/tool-system/builtin/cron.js +105 -9
- package/dist/tool-system/builtin/drive-claude-code.d.ts +30 -0
- package/dist/tool-system/builtin/drive-claude-code.js +157 -0
- package/dist/tool-system/builtin/edit-model-catalog.d.ts +3 -0
- package/dist/tool-system/builtin/edit-model-catalog.js +94 -0
- package/dist/tool-system/builtin/edit.d.ts +2 -1
- package/dist/tool-system/builtin/edit.js +21 -12
- package/dist/tool-system/builtin/eol.d.ts +29 -0
- package/dist/tool-system/builtin/eol.js +37 -0
- package/dist/tool-system/builtin/file-cache.d.ts +6 -0
- package/dist/tool-system/builtin/file-cache.js +8 -0
- package/dist/tool-system/builtin/generate-image.d.ts +60 -0
- package/dist/tool-system/builtin/generate-image.js +374 -0
- package/dist/tool-system/builtin/generate-video.d.ts +55 -0
- package/dist/tool-system/builtin/generate-video.js +361 -0
- package/dist/tool-system/builtin/grep.js +6 -2
- package/dist/tool-system/builtin/image-providers.d.ts +86 -0
- package/dist/tool-system/builtin/image-providers.js +190 -0
- package/dist/tool-system/builtin/image-uploader.d.ts +33 -0
- package/dist/tool-system/builtin/image-uploader.js +74 -0
- package/dist/tool-system/builtin/index.d.ts +24 -1
- package/dist/tool-system/builtin/index.js +310 -25
- package/dist/tool-system/builtin/mcp-tools.js +23 -3
- package/dist/tool-system/builtin/memory.js +45 -7
- package/dist/tool-system/builtin/notebook-edit.d.ts +2 -1
- package/dist/tool-system/builtin/notebook-edit.js +1 -1
- package/dist/tool-system/builtin/powershell.js +4 -1
- package/dist/tool-system/builtin/read.d.ts +2 -1
- package/dist/tool-system/builtin/read.js +11 -3
- package/dist/tool-system/builtin/repl.js +4 -1
- package/dist/tool-system/builtin/skill.js +9 -0
- package/dist/tool-system/builtin/sleep.js +12 -5
- package/dist/tool-system/builtin/task.js +4 -1
- package/dist/tool-system/builtin/tool-search.js +25 -7
- package/dist/tool-system/builtin/update-automation-memory.d.ts +24 -0
- package/dist/tool-system/builtin/update-automation-memory.js +60 -0
- package/dist/tool-system/builtin/video-providers.d.ts +154 -0
- package/dist/tool-system/builtin/video-providers.js +235 -0
- package/dist/tool-system/builtin/view-image.d.ts +18 -0
- package/dist/tool-system/builtin/view-image.js +96 -0
- package/dist/tool-system/builtin/web-fetch.js +12 -2
- package/dist/tool-system/builtin/web-search.d.ts +4 -1
- package/dist/tool-system/builtin/web-search.js +57 -10
- package/dist/tool-system/builtin/worktree.d.ts +2 -1
- package/dist/tool-system/builtin/worktree.js +31 -4
- package/dist/tool-system/builtin/write.d.ts +2 -1
- package/dist/tool-system/builtin/write.js +1 -1
- package/dist/tool-system/context.d.ts +166 -6
- package/dist/tool-system/executor.d.ts +3 -2
- package/dist/tool-system/executor.js +197 -119
- package/dist/tool-system/investigation-guard.d.ts +4 -1
- package/dist/tool-system/investigation-guard.js +20 -4
- package/dist/tool-system/mcp-manager.d.ts +78 -16
- package/dist/tool-system/mcp-manager.js +357 -28
- package/dist/tool-system/path-policy.d.ts +99 -0
- package/dist/tool-system/path-policy.js +578 -0
- package/dist/tool-system/permission.d.ts +36 -1
- package/dist/tool-system/permission.js +322 -117
- package/dist/tool-system/plan-mode-allowlist.d.ts +32 -0
- package/dist/tool-system/plan-mode-allowlist.js +65 -0
- package/dist/tool-system/registry.d.ts +1 -0
- package/dist/tool-system/registry.js +26 -1
- package/dist/tool-system/sandbox/index.d.ts +8 -0
- package/dist/tool-system/sandbox/index.js +7 -2
- package/dist/tool-system/validate-tool-metadata.d.ts +36 -0
- package/dist/tool-system/validate-tool-metadata.js +63 -0
- package/dist/tool-system/validation.d.ts +10 -0
- package/dist/tool-system/validation.js +16 -3
- package/dist/types.d.ts +301 -15
- package/dist/updater.js +20 -9
- package/dist/utils/envUtils.d.ts +0 -9
- package/dist/utils/envUtils.js +3 -28
- package/dist/utils/exec.d.ts +40 -0
- package/dist/utils/exec.js +144 -0
- package/dist/utils/format.js +4 -2
- package/dist/utils/json.d.ts +12 -0
- package/dist/utils/json.js +92 -0
- package/dist/utils/lockfile.js +9 -2
- package/dist/utils/theme.d.ts +7 -1
- package/dist/utils/theme.js +5 -3
- package/dist/utils/toolDisplay.js +0 -1
- package/package.json +14 -7
- package/dist/agent/coordinator.d.ts +0 -49
- package/dist/agent/coordinator.js +0 -77
- package/dist/settings/manager.test.js +0 -73
- package/dist/tool-system/builtin/remote-trigger.d.ts +0 -6
- package/dist/tool-system/builtin/remote-trigger.js +0 -54
- package/dist/tool-system/builtin/send-message.d.ts +0 -6
- package/dist/tool-system/builtin/send-message.js +0 -47
- /package/dist/{settings/manager.test.d.ts → credentials/types.js} +0 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single source of truth for which tools are permitted in plan mode.
|
|
3
|
+
*
|
|
4
|
+
* Two call sites consume this:
|
|
5
|
+
* - engine.ts: filters the tool DEFINITIONS shown to the model, so the
|
|
6
|
+
* model only sees tools it's allowed to use while planning.
|
|
7
|
+
* - executor.ts: gates tool EXECUTION, refusing anything outside the set.
|
|
8
|
+
*
|
|
9
|
+
* These two lists used to be maintained separately and drifted (engine had
|
|
10
|
+
* the Task family + Bash but not TodoWrite; executor had TodoWrite but not the
|
|
11
|
+
* Task family), so the model could be shown a tool the executor would then
|
|
12
|
+
* block, or vice-versa. Keep them identical by importing this constant in
|
|
13
|
+
* both places.
|
|
14
|
+
*
|
|
15
|
+
* Membership policy: read-only tools, planning/agent tools, and
|
|
16
|
+
* non-destructive task-tracking tools. Bash is included so the model sees it;
|
|
17
|
+
* the executor additionally gates Bash to read-only commands at call time
|
|
18
|
+
* (executor defers to classifyBashCommand, admitting only "safe-read").
|
|
19
|
+
* Write/Edit/ApplyPatch/NotebookEdit and other mutating tools are
|
|
20
|
+
* intentionally excluded.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* The built-in tools that only READ — no file writes, no side effects, no
|
|
24
|
+
* network mutations. Single source of truth shared by:
|
|
25
|
+
* - investigation-guard.ts (which tools count as "just looking")
|
|
26
|
+
* - permission.ts HeadlessApprovalBackend (approve-read-only mode)
|
|
27
|
+
* - permission.ts assessRisk (these are genuinely low-risk; everything else,
|
|
28
|
+
* including MCP tools, is at least medium so it isn't auto-approved blind)
|
|
29
|
+
* These three lists were independent byte-for-byte copies that could drift.
|
|
30
|
+
*/
|
|
31
|
+
export const READ_ONLY_TOOLS = new Set([
|
|
32
|
+
"Read",
|
|
33
|
+
"Glob",
|
|
34
|
+
"Grep",
|
|
35
|
+
"WebSearch",
|
|
36
|
+
"WebFetch",
|
|
37
|
+
"ToolSearch",
|
|
38
|
+
]);
|
|
39
|
+
export const PLAN_MODE_ALLOWED_TOOLS = new Set([
|
|
40
|
+
// Plan lifecycle
|
|
41
|
+
"EnterPlanMode",
|
|
42
|
+
"ExitPlanMode",
|
|
43
|
+
// Read-only investigation
|
|
44
|
+
"Read",
|
|
45
|
+
"Glob",
|
|
46
|
+
"Grep",
|
|
47
|
+
"WebSearch",
|
|
48
|
+
"WebFetch",
|
|
49
|
+
// Agent / interaction / discovery
|
|
50
|
+
"AskUserQuestion",
|
|
51
|
+
"Agent",
|
|
52
|
+
"ToolSearch",
|
|
53
|
+
// Skill: loads a skill's guidance text into context — read-only, no file
|
|
54
|
+
// writes. Planning is exactly when methodology skills (brainstorming,
|
|
55
|
+
// writing-plans, …) are most useful, so it belongs in the allow-list.
|
|
56
|
+
"Skill",
|
|
57
|
+
// Task tracking (non-destructive) — both the TodoWrite and the Task* family
|
|
58
|
+
"TodoWrite",
|
|
59
|
+
"TaskCreate",
|
|
60
|
+
"TaskUpdate",
|
|
61
|
+
"TaskList",
|
|
62
|
+
"TaskGet",
|
|
63
|
+
// Bash: visible to the model; executor gates it to read-only commands.
|
|
64
|
+
"Bash",
|
|
65
|
+
]);
|
|
@@ -19,6 +19,7 @@ export declare class ToolRegistry {
|
|
|
19
19
|
constructor(options?: ToolRegistryOptions);
|
|
20
20
|
private registerBuiltins;
|
|
21
21
|
registerTool(tool: RegisteredTool, executor?: BuiltinToolFn): void;
|
|
22
|
+
unregisterTool(name: string): void;
|
|
22
23
|
getToolDefinitions(): ToolDefinition[];
|
|
23
24
|
getTool(name: string): RegisteredTool | undefined;
|
|
24
25
|
hasTool(name: string): boolean;
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { ConfigError, ToolNotFoundError, ToolExecutionError, ToolTimeoutError } from "../exceptions.js";
|
|
5
5
|
import { BUILTIN_TOOLS } from "./builtin/index.js";
|
|
6
|
+
import { validateToolMetadata } from "./validate-tool-metadata.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,
|
|
@@ -28,16 +29,24 @@ export class ToolRegistry {
|
|
|
28
29
|
if (selectedNames && !selectedNames.has(tool.definition.name)) {
|
|
29
30
|
continue;
|
|
30
31
|
}
|
|
32
|
+
// Fail loud on pathPolicy.arg drift rather than silently disabling path
|
|
33
|
+
// protection (assessment §4.1).
|
|
34
|
+
validateToolMetadata(tool.definition);
|
|
31
35
|
this.tools.set(tool.definition.name, tool.definition);
|
|
32
36
|
this.builtinExecutors.set(tool.definition.name, tool.execute);
|
|
33
37
|
}
|
|
34
38
|
}
|
|
35
39
|
registerTool(tool, executor) {
|
|
40
|
+
validateToolMetadata(tool);
|
|
36
41
|
this.tools.set(tool.name, tool);
|
|
37
42
|
if (executor) {
|
|
38
43
|
this.builtinExecutors.set(tool.name, executor);
|
|
39
44
|
}
|
|
40
45
|
}
|
|
46
|
+
unregisterTool(name) {
|
|
47
|
+
this.tools.delete(name);
|
|
48
|
+
this.builtinExecutors.delete(name);
|
|
49
|
+
}
|
|
41
50
|
getToolDefinitions() {
|
|
42
51
|
return [...this.tools.values()].map((t) => ({
|
|
43
52
|
name: t.name,
|
|
@@ -101,7 +110,23 @@ export class ToolRegistry {
|
|
|
101
110
|
]);
|
|
102
111
|
clearTimeout(timerId);
|
|
103
112
|
parentSignal?.removeEventListener("abort", onParentAbort);
|
|
104
|
-
|
|
113
|
+
// executor 可返回纯字符串,或 { contentBlocks, result? }(view_image
|
|
114
|
+
// 用后者回传图片块)。归一化成 ToolResult:有 contentBlocks 就带上,
|
|
115
|
+
// result 始终保留一份文本镜像供 transcript / 摘要使用。
|
|
116
|
+
if (typeof result === "string") {
|
|
117
|
+
return { id, toolName: name, result };
|
|
118
|
+
}
|
|
119
|
+
// 结构化返回:图片块(view_image)或沙箱标记(Bash 等)。两者互斥,
|
|
120
|
+
// 各取所有,缺的字段为 undefined。
|
|
121
|
+
const contentBlocks = "contentBlocks" in result ? result.contentBlocks : undefined;
|
|
122
|
+
const sandbox = "sandbox" in result ? result.sandbox : undefined;
|
|
123
|
+
return {
|
|
124
|
+
id,
|
|
125
|
+
toolName: name,
|
|
126
|
+
result: result.result ?? (contentBlocks ? "(image)" : ""),
|
|
127
|
+
contentBlocks,
|
|
128
|
+
sandbox,
|
|
129
|
+
};
|
|
105
130
|
}
|
|
106
131
|
catch (err) {
|
|
107
132
|
clearTimeout(timerId);
|
|
@@ -27,6 +27,14 @@ export interface SandboxConfig {
|
|
|
27
27
|
export interface SandboxBackend {
|
|
28
28
|
/** Resolved backend name — "off" means no sandboxing. */
|
|
29
29
|
name: "off" | "seatbelt" | "bwrap";
|
|
30
|
+
/**
|
|
31
|
+
* Network policy that applied for this run. Not part of the backend's
|
|
32
|
+
* isolation mechanism — the Engine stamps it onto the resolved backend
|
|
33
|
+
* (it owns the resolved SandboxConfig) so tools can surface "网络 deny"
|
|
34
|
+
* on their result without threading the whole config through ToolContext.
|
|
35
|
+
* Absent on "off" (no policy enforced).
|
|
36
|
+
*/
|
|
37
|
+
network?: SandboxNetworkPolicy;
|
|
30
38
|
/**
|
|
31
39
|
* Decide the binary + argv that should actually be spawned to run `command`
|
|
32
40
|
* under this sandbox. The shell still interprets `command`; we only swap
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* when no sandbox is available.
|
|
18
18
|
*/
|
|
19
19
|
import { accessSync, constants, realpathSync } from "node:fs";
|
|
20
|
-
import { homedir } from "node:os";
|
|
20
|
+
import { homedir, tmpdir } from "node:os";
|
|
21
21
|
import { SandboxUnavailableError } from "../../exceptions.js";
|
|
22
22
|
/**
|
|
23
23
|
* Detect which sandbox mechanisms are available on the current host. Used by
|
|
@@ -111,9 +111,14 @@ function warnAutoDowngrade() {
|
|
|
111
111
|
`Set sandbox.mode=off in settings.json to silence, or CODE_SHELL_SANDBOX_QUIET=1.\n`);
|
|
112
112
|
}
|
|
113
113
|
export function defaultSandboxConfig(mode = "auto") {
|
|
114
|
+
// Temp roots are writable so tool-result spillover / scratch files land
|
|
115
|
+
// somewhere. POSIX: the canonical /tmp family. Windows has no OS sandbox
|
|
116
|
+
// backend (auto → off), so writableRoots is effectively unused there, but
|
|
117
|
+
// keep it host-correct by using the platform temp dir instead of /tmp.
|
|
118
|
+
const tmpRoots = process.platform === "win32" ? [tmpdir()] : ["/tmp", "/private/tmp", "/var/tmp"];
|
|
114
119
|
return {
|
|
115
120
|
mode,
|
|
116
|
-
writableRoots: ["${workspace}",
|
|
121
|
+
writableRoots: ["${workspace}", ...tmpRoots],
|
|
117
122
|
deniedReads: [
|
|
118
123
|
"~/.ssh",
|
|
119
124
|
"~/.aws",
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registration-time guard for tool path-policy metadata.
|
|
3
|
+
*
|
|
4
|
+
* A tool's `pathPolicy[].arg` names the input field that carries a file path
|
|
5
|
+
* (or, for apply_patch, the patch text). ToolExecutor reads `args[policy.arg]`
|
|
6
|
+
* to find the targets it must run through the path-permission layer. If that
|
|
7
|
+
* arg name is a typo (e.g. `"pat"` instead of `"path"`), the lookup yields
|
|
8
|
+
* `undefined`, the executor finds zero targets, and the tool runs with NO path
|
|
9
|
+
* protection and no error — a silent security failure (assessment §4.1).
|
|
10
|
+
*
|
|
11
|
+
* This validator catches that drift at registration time by asserting every
|
|
12
|
+
* declared `pathPolicy.arg` exists in the tool's `inputSchema.properties`.
|
|
13
|
+
*/
|
|
14
|
+
import type { RegisteredTool, ToolDefinition } from "../types.js";
|
|
15
|
+
/** A tool-shaped object carrying the fields this validator inspects. */
|
|
16
|
+
type ToolLike = Pick<RegisteredTool, "name" | "inputSchema"> & Partial<Pick<RegisteredTool, "pathPolicy">>;
|
|
17
|
+
export interface ToolMetadataIssue {
|
|
18
|
+
tool: string;
|
|
19
|
+
arg: string;
|
|
20
|
+
reason: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Check a single tool's path-policy metadata against its schema. Returns one
|
|
24
|
+
* issue per `pathPolicy.arg` that is not a declared input property. Tools
|
|
25
|
+
* without a pathPolicy produce no issues.
|
|
26
|
+
*/
|
|
27
|
+
export declare function findToolMetadataIssues(tool: ToolLike): ToolMetadataIssue[];
|
|
28
|
+
/**
|
|
29
|
+
* Assert a tool's path-policy metadata is consistent with its schema. Throws on
|
|
30
|
+
* the first drift. Call at registration time so a typo fails loud instead of
|
|
31
|
+
* silently disabling path protection.
|
|
32
|
+
*/
|
|
33
|
+
export declare function validateToolMetadata(tool: ToolLike): void;
|
|
34
|
+
/** Validate a batch; returns every issue across all tools (does not throw). */
|
|
35
|
+
export declare function collectToolMetadataIssues(tools: ReadonlyArray<ToolLike | ToolDefinition>): ToolMetadataIssue[];
|
|
36
|
+
export {};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registration-time guard for tool path-policy metadata.
|
|
3
|
+
*
|
|
4
|
+
* A tool's `pathPolicy[].arg` names the input field that carries a file path
|
|
5
|
+
* (or, for apply_patch, the patch text). ToolExecutor reads `args[policy.arg]`
|
|
6
|
+
* to find the targets it must run through the path-permission layer. If that
|
|
7
|
+
* arg name is a typo (e.g. `"pat"` instead of `"path"`), the lookup yields
|
|
8
|
+
* `undefined`, the executor finds zero targets, and the tool runs with NO path
|
|
9
|
+
* protection and no error — a silent security failure (assessment §4.1).
|
|
10
|
+
*
|
|
11
|
+
* This validator catches that drift at registration time by asserting every
|
|
12
|
+
* declared `pathPolicy.arg` exists in the tool's `inputSchema.properties`.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Return the set of property names declared in a JSON-schema-ish object's
|
|
16
|
+
* `properties`. Tolerant of missing/malformed schema (returns empty set), so a
|
|
17
|
+
* tool with no declared properties is treated as "declares nothing" rather
|
|
18
|
+
* than throwing — the caller decides how to react.
|
|
19
|
+
*/
|
|
20
|
+
function schemaPropertyNames(inputSchema) {
|
|
21
|
+
const props = inputSchema?.properties;
|
|
22
|
+
if (!props || typeof props !== "object")
|
|
23
|
+
return new Set();
|
|
24
|
+
return new Set(Object.keys(props));
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Check a single tool's path-policy metadata against its schema. Returns one
|
|
28
|
+
* issue per `pathPolicy.arg` that is not a declared input property. Tools
|
|
29
|
+
* without a pathPolicy produce no issues.
|
|
30
|
+
*/
|
|
31
|
+
export function findToolMetadataIssues(tool) {
|
|
32
|
+
const policies = tool.pathPolicy;
|
|
33
|
+
if (!policies || policies.length === 0)
|
|
34
|
+
return [];
|
|
35
|
+
const declared = schemaPropertyNames(tool.inputSchema);
|
|
36
|
+
const issues = [];
|
|
37
|
+
for (const policy of policies) {
|
|
38
|
+
if (!declared.has(policy.arg)) {
|
|
39
|
+
issues.push({
|
|
40
|
+
tool: tool.name,
|
|
41
|
+
arg: policy.arg,
|
|
42
|
+
reason: `pathPolicy.arg "${policy.arg}" is not a property of inputSchema (path-permission enforcement would silently no-op)`,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return issues;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Assert a tool's path-policy metadata is consistent with its schema. Throws on
|
|
50
|
+
* the first drift. Call at registration time so a typo fails loud instead of
|
|
51
|
+
* silently disabling path protection.
|
|
52
|
+
*/
|
|
53
|
+
export function validateToolMetadata(tool) {
|
|
54
|
+
const issues = findToolMetadataIssues(tool);
|
|
55
|
+
if (issues.length > 0) {
|
|
56
|
+
const first = issues[0];
|
|
57
|
+
throw new Error(`Invalid tool metadata for "${first.tool}": ${first.reason}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/** Validate a batch; returns every issue across all tools (does not throw). */
|
|
61
|
+
export function collectToolMetadataIssues(tools) {
|
|
62
|
+
return tools.flatMap((t) => findToolMetadataIssues(t));
|
|
63
|
+
}
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight tool input validation against a JSON Schema.
|
|
3
|
+
*
|
|
4
|
+
* NOT a full JSON-Schema validator: it only checks `required` presence and
|
|
5
|
+
* top-level primitive types (string/number/boolean). Arrays, objects, enums,
|
|
6
|
+
* nested shapes, and formats are intentionally NOT validated — this is a
|
|
7
|
+
* cheap pre-flight guard, not a substitute for the provider's own schema
|
|
8
|
+
* enforcement. (Was previously labelled "Zod-based" and imported `z`, but
|
|
9
|
+
* never used zod — corrected to avoid misleading readers.)
|
|
10
|
+
*/
|
|
1
11
|
/**
|
|
2
12
|
* Validate tool args against the tool's inputSchema.
|
|
3
13
|
* Returns null if valid, error string if invalid.
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight tool input validation against a JSON Schema.
|
|
3
|
+
*
|
|
4
|
+
* NOT a full JSON-Schema validator: it only checks `required` presence and
|
|
5
|
+
* top-level primitive types (string/number/boolean). Arrays, objects, enums,
|
|
6
|
+
* nested shapes, and formats are intentionally NOT validated — this is a
|
|
7
|
+
* cheap pre-flight guard, not a substitute for the provider's own schema
|
|
8
|
+
* enforcement. (Was previously labelled "Zod-based" and imported `z`, but
|
|
9
|
+
* never used zod — corrected to avoid misleading readers.)
|
|
10
|
+
*/
|
|
1
11
|
/**
|
|
2
12
|
* Validate tool args against the tool's inputSchema.
|
|
3
13
|
* Returns null if valid, error string if invalid.
|
|
@@ -6,14 +16,17 @@ export function validateToolArgs(toolName, args, schema) {
|
|
|
6
16
|
try {
|
|
7
17
|
const properties = schema.properties;
|
|
8
18
|
const required = schema.required ?? [];
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
// Check
|
|
19
|
+
// Required-field presence does not depend on `properties` existing — a
|
|
20
|
+
// schema may declare `required` with no `properties` block (e.g. a
|
|
21
|
+
// malformed external MCP tool schema). Check it before the properties
|
|
22
|
+
// guard so missing params are still caught.
|
|
12
23
|
for (const field of required) {
|
|
13
24
|
if (args[field] === undefined || args[field] === null) {
|
|
14
25
|
return `Missing required parameter: ${field}`;
|
|
15
26
|
}
|
|
16
27
|
}
|
|
28
|
+
if (!properties)
|
|
29
|
+
return null; // No property shapes to type-check.
|
|
17
30
|
// Type check each provided field
|
|
18
31
|
for (const [key, value] of Object.entries(args)) {
|
|
19
32
|
const propSchema = properties[key];
|