@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
package/dist/settings/schema.js
CHANGED
|
@@ -2,6 +2,34 @@
|
|
|
2
2
|
* Settings schema with Zod validation.
|
|
3
3
|
*/
|
|
4
4
|
import { z } from "zod";
|
|
5
|
+
/**
|
|
6
|
+
* Tri-state project capability overlay. Lives in PROJECT settings only and
|
|
7
|
+
* layers over the global baseline (disabledSkills / disabledPlugins /
|
|
8
|
+
* mcpServers.<name>.enabled / disabledAgents). NOT a second denylist:
|
|
9
|
+
* - "on" → force enabled (even if globally disabled)
|
|
10
|
+
* - "off" → force disabled (even if globally enabled)
|
|
11
|
+
* - "inherit" → take the global baseline. We don't persist "inherit"; an
|
|
12
|
+
* absent key means inherit. See the project-scoped
|
|
13
|
+
* capabilities design (spec §4).
|
|
14
|
+
*/
|
|
15
|
+
export const CapabilityOverrideSchema = z.enum(["inherit", "on", "off"]);
|
|
16
|
+
export const CapabilityOverridesSchema = z
|
|
17
|
+
.object({
|
|
18
|
+
skills: z.record(CapabilityOverrideSchema).optional(),
|
|
19
|
+
plugins: z.record(CapabilityOverrideSchema).optional(),
|
|
20
|
+
agents: z.record(CapabilityOverrideSchema).optional(),
|
|
21
|
+
mcp: z.record(CapabilityOverrideSchema).optional(),
|
|
22
|
+
builtin: z.record(CapabilityOverrideSchema).optional(),
|
|
23
|
+
/**
|
|
24
|
+
* Per-hook overlay for PLUGIN-provided hooks, keyed by
|
|
25
|
+
* `pluginHookKey()` (`<plugin>:<RawEvent>:<command>`). Finer-grained
|
|
26
|
+
* than `plugins` (which kills a whole plugin): "off" suppresses one
|
|
27
|
+
* hook for this project only. Only "off" is meaningful today — plugin
|
|
28
|
+
* hooks have no global disable list to force back "on" from.
|
|
29
|
+
*/
|
|
30
|
+
pluginHooks: z.record(CapabilityOverrideSchema).optional(),
|
|
31
|
+
})
|
|
32
|
+
.optional();
|
|
5
33
|
export const SettingsSchema = z
|
|
6
34
|
.object({
|
|
7
35
|
agent: z
|
|
@@ -12,16 +40,16 @@ export const SettingsSchema = z
|
|
|
12
40
|
disabledBuiltinTools: z.array(z.string()).default([]),
|
|
13
41
|
customSystemPrompt: z.string().optional(),
|
|
14
42
|
appendSystemPrompt: z.string().optional(),
|
|
43
|
+
responseLanguage: z.string().optional(),
|
|
44
|
+
userProfile: z.string().optional(),
|
|
45
|
+
instructions: z
|
|
46
|
+
.object({
|
|
47
|
+
compatClaude: z.boolean().default(true),
|
|
48
|
+
compatCodex: z.boolean().default(true),
|
|
49
|
+
})
|
|
50
|
+
.optional(),
|
|
15
51
|
})
|
|
16
52
|
.default({}),
|
|
17
|
-
/**
|
|
18
|
-
* Primary source of truth for the active model is settings.activeKey
|
|
19
|
-
* (points at models[].key). settings.model is a derived mirror of that
|
|
20
|
-
* entry kept in sync for legacy boot paths (cli/main.ts, repl.ts, etc.)
|
|
21
|
-
* which read provider/name/apiKey/baseUrl directly. Writers must update
|
|
22
|
-
* both — appendOnboardingResult does this in one shot.
|
|
23
|
-
*/
|
|
24
|
-
activeKey: z.string().optional(),
|
|
25
53
|
/**
|
|
26
54
|
* Toggle background auto-update. When true (default), code-shell checks
|
|
27
55
|
* npm for newer versions and — if the npm global prefix is writable —
|
|
@@ -30,85 +58,115 @@ export const SettingsSchema = z
|
|
|
30
58
|
* Can also be disabled via env var `DISABLE_AUTOUPDATER=1`.
|
|
31
59
|
*/
|
|
32
60
|
autoUpdates: z.boolean().default(true),
|
|
33
|
-
|
|
61
|
+
/**
|
|
62
|
+
* Image generation is a general capability, decoupled from LLM providers
|
|
63
|
+
* (TODO 7.1): a vendor may use different keys/endpoints/models for chat vs
|
|
64
|
+
* image, and image vendors (Gemini, and later 国内 模型) don't fit the LLM
|
|
65
|
+
* `providers[].kind` enum. `imageGen.providers[]` is the canonical config;
|
|
66
|
+
* each entry has a user-chosen `id` (selected via GenerateImage's
|
|
67
|
+
* `provider` arg) and a `kind` that picks the adapter. When `imageGen` is
|
|
68
|
+
* absent, resolution falls back to scanning LLM `providers[]` for an
|
|
69
|
+
* image-capable kind — so existing configs keep working with no migration.
|
|
70
|
+
*/
|
|
71
|
+
imageGen: z
|
|
34
72
|
.object({
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
73
|
+
defaultProvider: z.string().optional(),
|
|
74
|
+
providers: z
|
|
75
|
+
.array(z.object({
|
|
76
|
+
/** User-chosen instance name; GenerateImage(provider) selects by this. */
|
|
77
|
+
id: z.string(),
|
|
78
|
+
/** Adapter selector — e.g. "openai", "google". */
|
|
79
|
+
kind: z.string(),
|
|
80
|
+
baseUrl: z.string(),
|
|
81
|
+
apiKey: z.string().optional(),
|
|
82
|
+
/** Default model for this instance when the call omits `model`. */
|
|
83
|
+
defaultModel: z.string().optional(),
|
|
84
|
+
/** Catalog template this instance was created from (for paramsDoc / displayName回显). */
|
|
85
|
+
catalogId: z.string().optional(),
|
|
86
|
+
/** Reuse another instance's key: id of the instance whose apiKey to use (when apiKey is empty). */
|
|
87
|
+
apiKeyRef: z.string().optional(),
|
|
88
|
+
}))
|
|
89
|
+
.default([]),
|
|
41
90
|
})
|
|
42
|
-
.
|
|
43
|
-
|
|
91
|
+
.optional(),
|
|
92
|
+
/**
|
|
93
|
+
* Video generation config (TODO 7.1) — same shape as imageGen, decoupled
|
|
94
|
+
* from LLM providers. `videoGen.providers[]` each carry an `id` (selected
|
|
95
|
+
* via GenerateVideo's `provider` arg) + a `kind` picking the adapter. With
|
|
96
|
+
* no real adapters wired yet, this is config-ready: a future getVideoProvider
|
|
97
|
+
* case lights it up. Falls back to scanning LLM providers[] when absent.
|
|
98
|
+
*/
|
|
99
|
+
videoGen: z
|
|
100
|
+
.object({
|
|
101
|
+
defaultProvider: z.string().optional(),
|
|
102
|
+
providers: z
|
|
103
|
+
.array(z.object({
|
|
104
|
+
id: z.string(),
|
|
105
|
+
kind: z.string(),
|
|
106
|
+
baseUrl: z.string(),
|
|
107
|
+
apiKey: z.string().optional(),
|
|
108
|
+
defaultModel: z.string().optional(),
|
|
109
|
+
/** Catalog template this instance was created from (for paramsDoc / displayName回显). */
|
|
110
|
+
catalogId: z.string().optional(),
|
|
111
|
+
/** Reuse another instance's key: id of the instance whose apiKey to use (when apiKey is empty). */
|
|
112
|
+
apiKeyRef: z.string().optional(),
|
|
113
|
+
}))
|
|
114
|
+
.default([]),
|
|
115
|
+
})
|
|
116
|
+
.optional(),
|
|
117
|
+
/**
|
|
118
|
+
* Credentials — independent key entities (统一模型接入方案 §3.3). A key
|
|
119
|
+
* lives here, not inlined on a connection, so deleting a connection never
|
|
120
|
+
* loses a key and many connections share one key by referencing the same
|
|
121
|
+
* credential id (LiteLLM credential_list model).
|
|
122
|
+
*/
|
|
123
|
+
credentials: z
|
|
44
124
|
.array(z.object({
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
"anthropic",
|
|
50
|
-
"deepseek",
|
|
51
|
-
"zai",
|
|
52
|
-
"xai",
|
|
53
|
-
"mistral",
|
|
54
|
-
"groq",
|
|
55
|
-
"google",
|
|
56
|
-
"openrouter",
|
|
57
|
-
"ollama",
|
|
58
|
-
"custom",
|
|
59
|
-
]),
|
|
60
|
-
baseUrl: z.string(),
|
|
125
|
+
/** User-chosen unique credential name. */
|
|
126
|
+
id: z.string(),
|
|
127
|
+
/** Catalog template this credential is for (a key belongs to one provider). */
|
|
128
|
+
catalogId: z.string(),
|
|
61
129
|
apiKey: z.string().optional(),
|
|
62
|
-
|
|
63
|
-
modelsPath: z.string().optional(),
|
|
64
|
-
/**
|
|
65
|
-
* DeepSeek V4 thinking-mode default for this provider. "enabled"
|
|
66
|
-
* matches endpoint default; "disabled" makes V4 calls run in
|
|
67
|
-
* non-thinking mode (faster, cheaper). Ignored by every provider
|
|
68
|
-
* other than DeepSeek V4. Per-call overrides still win.
|
|
69
|
-
*/
|
|
70
|
-
thinking: z.enum(["enabled", "disabled"]).optional(),
|
|
130
|
+
baseUrl: z.string().optional(),
|
|
71
131
|
}))
|
|
72
132
|
.default([]),
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
133
|
+
/**
|
|
134
|
+
* Unified instance layer (统一模型接入方案, see
|
|
135
|
+
* docs/superpowers/specs/2026-06-15-unified-model-catalog-design.md §3.3).
|
|
136
|
+
* One store for text/image/video connections, each pointing at a catalog
|
|
137
|
+
* entry (catalogId), a credential (credentialId), its chosen model, and the
|
|
138
|
+
* param values the user picked. Replaces the legacy split of
|
|
139
|
+
* providers[]/models[]/imageGen/videoGen.
|
|
140
|
+
*/
|
|
141
|
+
modelConnections: z
|
|
142
|
+
.array(z.object({
|
|
143
|
+
/** User-chosen unique instance name. */
|
|
144
|
+
id: z.string(),
|
|
145
|
+
/** Catalog template this instance was created from. */
|
|
146
|
+
catalogId: z.string(),
|
|
147
|
+
tag: z.enum(["text", "image", "video", "audio"]),
|
|
148
|
+
/** Selected modelId (from the entry's modelPresets). */
|
|
79
149
|
model: z.string(),
|
|
80
|
-
|
|
81
|
-
maxContextTokens: z.number().optional(),
|
|
82
|
-
/**
|
|
83
|
-
* Which LLM client to use ("openai" or "anthropic"). New name —
|
|
84
|
-
* the legacy field is `provider`, which we still accept and
|
|
85
|
-
* fold into `protocol` below so old configs keep working.
|
|
86
|
-
* NOT the brand/vendor — that's providerKey above.
|
|
87
|
-
*/
|
|
88
|
-
protocol: z.string().optional(),
|
|
89
|
-
provider: z.string().optional(),
|
|
150
|
+
/** Per-connection baseUrl override (else the credential's / catalog's). */
|
|
90
151
|
baseUrl: z.string().optional(),
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
* different models under the same provider need different
|
|
96
|
-
* defaults — e.g. DeepSeek V4 Pro off (faster) but V4 Flash on.
|
|
97
|
-
*/
|
|
98
|
-
thinking: z.enum(["enabled", "disabled"]).optional(),
|
|
99
|
-
})
|
|
100
|
-
.transform((m) => {
|
|
101
|
-
// Normalize: prefer `protocol`; fall back to legacy `provider`.
|
|
102
|
-
// We keep `provider` populated as a mirror because engine code
|
|
103
|
-
// and a few downstream readers still query it directly.
|
|
104
|
-
const effective = m.protocol ?? m.provider;
|
|
105
|
-
return {
|
|
106
|
-
...m,
|
|
107
|
-
protocol: effective,
|
|
108
|
-
provider: effective,
|
|
109
|
-
};
|
|
152
|
+
/** Which credential supplies this connection's key. */
|
|
153
|
+
credentialId: z.string().optional(),
|
|
154
|
+
/** Values the user picked for the model's params, e.g. { reasoning: "high" }. */
|
|
155
|
+
paramValues: z.record(z.string(), z.unknown()).optional(),
|
|
110
156
|
}))
|
|
111
157
|
.default([]),
|
|
158
|
+
/** Default instance id per tag (replaces activeKey / defaultProvider). */
|
|
159
|
+
defaults: z
|
|
160
|
+
.object({
|
|
161
|
+
text: z.string().optional(),
|
|
162
|
+
image: z.string().optional(),
|
|
163
|
+
video: z.string().optional(),
|
|
164
|
+
/** Default speech-to-text (voice input) connection. */
|
|
165
|
+
audio: z.string().optional(),
|
|
166
|
+
/** Background-task model (replaces auxModelKey). */
|
|
167
|
+
auxText: z.string().optional(),
|
|
168
|
+
})
|
|
169
|
+
.default({}),
|
|
112
170
|
permissions: z
|
|
113
171
|
.object({
|
|
114
172
|
defaultMode: z
|
|
@@ -127,8 +185,27 @@ export const SettingsSchema = z
|
|
|
127
185
|
context: z
|
|
128
186
|
.object({
|
|
129
187
|
maxTokens: z.number().default(200_000),
|
|
130
|
-
|
|
131
|
-
|
|
188
|
+
// 压缩阈值(占上下文窗口的比例)。窗口越大可调越高:1M 窗口的模型
|
|
189
|
+
// 把 compactAtRatio 调到 0.95 能少浪费几十万 token。三档须满足
|
|
190
|
+
// floor < compact < summarize,否则运行时会 clamp 回安全顺序。
|
|
191
|
+
compactAtRatio: z
|
|
192
|
+
.number()
|
|
193
|
+
.min(0.1)
|
|
194
|
+
.max(0.98)
|
|
195
|
+
.default(0.85)
|
|
196
|
+
.describe("达到该比例开始压缩历史(先试摘要,再退化为窗口裁剪)。默认 0.85。"),
|
|
197
|
+
summarizeAtRatio: z
|
|
198
|
+
.number()
|
|
199
|
+
.min(0.1)
|
|
200
|
+
.max(0.99)
|
|
201
|
+
.default(0.92)
|
|
202
|
+
.describe("紧急阈值:到此比例做最激进的窗口压缩。须 ≥ compactAtRatio。默认 0.92。"),
|
|
203
|
+
microcompactFloorRatio: z
|
|
204
|
+
.number()
|
|
205
|
+
.min(0.1)
|
|
206
|
+
.max(0.95)
|
|
207
|
+
.default(0.7)
|
|
208
|
+
.describe("低于该比例不做 microcompact,保留早期工具输出、保住 prompt cache 前缀。默认 0.7。"),
|
|
132
209
|
})
|
|
133
210
|
.default({}),
|
|
134
211
|
session: z
|
|
@@ -137,8 +214,31 @@ export const SettingsSchema = z
|
|
|
137
214
|
maxHistory: z.number().default(100),
|
|
138
215
|
})
|
|
139
216
|
.default({}),
|
|
217
|
+
// The record key IS the server name at runtime (MCPManager.connectAll
|
|
218
|
+
// uses Object.entries keys; desktop's persist strips the `name` field and
|
|
219
|
+
// keys by it via stripNameFromServer). So `name` here is optional and
|
|
220
|
+
// backfilled from the key — a config keyed `{"23": {…}}` with no `name`
|
|
221
|
+
// field is valid, not a crash. The preprocess also tolerates a legacy
|
|
222
|
+
// array form (`[{name, …}]`) by re-keying it into a name → config record.
|
|
140
223
|
mcpServers: z
|
|
141
|
-
.
|
|
224
|
+
.preprocess((value) => {
|
|
225
|
+
const entries = Array.isArray(value)
|
|
226
|
+
? value
|
|
227
|
+
.filter((v) => !!v && typeof v === "object")
|
|
228
|
+
.map((v, i) => [String(v.name ?? i), v])
|
|
229
|
+
: value && typeof value === "object"
|
|
230
|
+
? Object.entries(value)
|
|
231
|
+
: [];
|
|
232
|
+
return Object.fromEntries(entries.map(([key, raw]) => [
|
|
233
|
+
key,
|
|
234
|
+
raw && typeof raw === "object"
|
|
235
|
+
? { ...raw, name: raw.name ?? key }
|
|
236
|
+
: raw,
|
|
237
|
+
]));
|
|
238
|
+
}, z.record(z.object({
|
|
239
|
+
// Always present here: the preprocess above backfills it from the
|
|
240
|
+
// record key, so a stored entry that omits `name` (the common
|
|
241
|
+
// desktop case, which strips it) still validates.
|
|
142
242
|
name: z.string(),
|
|
143
243
|
command: z.string().optional(),
|
|
144
244
|
args: z.array(z.string()).optional(),
|
|
@@ -146,7 +246,34 @@ export const SettingsSchema = z
|
|
|
146
246
|
url: z.string().optional(),
|
|
147
247
|
transport: z.enum(["stdio", "sse", "streamable-http", "inprocess"]).optional(),
|
|
148
248
|
headers: z.record(z.string()).optional(),
|
|
149
|
-
|
|
249
|
+
// Codex-style env-secret handling: store env-var NAMES, read the
|
|
250
|
+
// secret from process.env at connect time (never plaintext here).
|
|
251
|
+
envVars: z.array(z.string()).optional(), // (stdio) forward these env vars
|
|
252
|
+
bearerTokenEnvVar: z.string().optional(), // (HTTP) → Authorization: Bearer <env value>
|
|
253
|
+
envHeaders: z.record(z.string()).optional(), // (HTTP) header-name → env-var-name
|
|
254
|
+
credentialRef: z.string().optional(), // (HTTP) id of a stored credential → Bearer, resolved at connect time
|
|
255
|
+
// Codex-style on/off switch. Absent or true → connected; only
|
|
256
|
+
// literal false disables. Filtered in MCPManager.connectAll.
|
|
257
|
+
enabled: z.boolean().optional(),
|
|
258
|
+
})))
|
|
259
|
+
.default({}),
|
|
260
|
+
/**
|
|
261
|
+
* User supplements for PLUGIN-provided MCP servers, keyed by the server's
|
|
262
|
+
* `<plugin>:<server>` name. Layered onto the plugin config at merge time
|
|
263
|
+
* (mergePluginMcpServers). Only env/credential fields are accepted —
|
|
264
|
+
* command/args/url/transport are intentionally absent and `.strict()`
|
|
265
|
+
* rejects them, so a plugin update is never shadowed by a stale copy.
|
|
266
|
+
*/
|
|
267
|
+
mcpServerOverrides: z
|
|
268
|
+
.record(z
|
|
269
|
+
.object({
|
|
270
|
+
env: z.record(z.string()).optional(),
|
|
271
|
+
envVars: z.array(z.string()).optional(),
|
|
272
|
+
credentialRef: z.string().optional(),
|
|
273
|
+
bearerTokenEnvVar: z.string().optional(),
|
|
274
|
+
envHeaders: z.record(z.string()).optional(),
|
|
275
|
+
})
|
|
276
|
+
.strict())
|
|
150
277
|
.default({}),
|
|
151
278
|
/**
|
|
152
279
|
* Skill names hidden from the LLM. Names include the full
|
|
@@ -162,6 +289,46 @@ export const SettingsSchema = z
|
|
|
162
289
|
* names (no colon suffix). See scanSkills(opts.disabledPlugins).
|
|
163
290
|
*/
|
|
164
291
|
disabledPlugins: z.array(z.string()).default([]),
|
|
292
|
+
/**
|
|
293
|
+
* Sub-agent role names (the `name` in .code-shell/agents/*.md) to
|
|
294
|
+
* hide from the registry. A disabled role is filtered out at load
|
|
295
|
+
* so it never appears in registry.list()/get() — the Agent tool's
|
|
296
|
+
* agent_type list won't show it and the LLM can't pick it. Mirrors
|
|
297
|
+
* disabledSkills / disabledPlugins.
|
|
298
|
+
*/
|
|
299
|
+
disabledAgents: z.array(z.string()).default([]),
|
|
300
|
+
/**
|
|
301
|
+
* Project-scoped tri-state capability overlay. Only meaningful in
|
|
302
|
+
* ${cwd}/.code-shell/settings.json; layered over the global baseline at
|
|
303
|
+
* capability-assembly time. Optional — absence === everything inherits.
|
|
304
|
+
*/
|
|
305
|
+
capabilityOverrides: CapabilityOverridesSchema,
|
|
306
|
+
/**
|
|
307
|
+
* Feature flags overlay: a map of flag name → boolean that overrides the
|
|
308
|
+
* compiled-in defaults (see settings/feature-flags.ts FEATURE_FLAGS).
|
|
309
|
+
* Project settings override user settings via the normal merge, so a flag
|
|
310
|
+
* can be flipped per-workspace. Unknown flag names are tolerated (kept as
|
|
311
|
+
* data) for forward-compat; consumers only read known flags via
|
|
312
|
+
* isFeatureEnabled(). Passthrough record — values coerced to boolean.
|
|
313
|
+
*/
|
|
314
|
+
featureFlags: z.record(z.string(), z.boolean()).default({}),
|
|
315
|
+
/**
|
|
316
|
+
* Cross-session memory knobs. Optional — absence keeps the built-in
|
|
317
|
+
* defaults (see services/extract-memories.ts). `maxCount` caps memories
|
|
318
|
+
* accepted per extraction pass; `maxAge`/`extractionModel` are reserved
|
|
319
|
+
* for the consolidation/extraction pipeline.
|
|
320
|
+
*/
|
|
321
|
+
memories: z
|
|
322
|
+
.object({
|
|
323
|
+
maxCount: z.number().int().positive().optional(),
|
|
324
|
+
maxAge: z.number().int().positive().optional(),
|
|
325
|
+
extractionModel: z.string().optional(),
|
|
326
|
+
/** Master switch for end-of-session automatic memory extraction.
|
|
327
|
+
* Absent/true = extract (current behavior); false = skip extraction
|
|
328
|
+
* while keeping session summaries and Dream untouched. */
|
|
329
|
+
autoExtract: z.boolean().optional(),
|
|
330
|
+
})
|
|
331
|
+
.optional(),
|
|
165
332
|
instructions: z
|
|
166
333
|
.object({
|
|
167
334
|
fileName: z.string().default("CODESHELL.md"),
|
|
@@ -204,6 +371,15 @@ export const SettingsSchema = z
|
|
|
204
371
|
.record(z.enum(["serper", "tavily", "searxng"]), z.object({
|
|
205
372
|
apiKey: z.string().optional(),
|
|
206
373
|
baseUrl: z.string().optional(),
|
|
374
|
+
lastProbe: z
|
|
375
|
+
.object({
|
|
376
|
+
status: z.enum(["ok", "error", "unconfigured"]),
|
|
377
|
+
sampleTitles: z.array(z.string()).optional(),
|
|
378
|
+
errorMessage: z.string().optional(),
|
|
379
|
+
errorDetail: z.string().optional(),
|
|
380
|
+
lastProbedAt: z.string(),
|
|
381
|
+
})
|
|
382
|
+
.optional(),
|
|
207
383
|
}))
|
|
208
384
|
.optional(),
|
|
209
385
|
})
|
|
@@ -213,6 +389,27 @@ export const SettingsSchema = z
|
|
|
213
389
|
format: z.enum(["text", "json", "jsonl", "stream-json"]).default("text"),
|
|
214
390
|
})
|
|
215
391
|
.default({}),
|
|
392
|
+
/**
|
|
393
|
+
* Image attachment handling. Sub-fields:
|
|
394
|
+
* - detail: provider-agnostic image clarity. Drives the
|
|
395
|
+
* renderer-side downscale (low→~1024 / standard→~1568 /
|
|
396
|
+
* high→~2576 px long edge) so BOTH providers save tokens
|
|
397
|
+
* before send. Legacy "original" is migrated to "high".
|
|
398
|
+
* - mcpImageTokenBudget: per-turn cap on token cost of images
|
|
399
|
+
* returned by MCP tools. Codex doesn't enforce this; CC uses
|
|
400
|
+
* 25 000. Set to 0 to disable.
|
|
401
|
+
*/
|
|
402
|
+
images: z
|
|
403
|
+
.object({
|
|
404
|
+
detail: z
|
|
405
|
+
.preprocess(
|
|
406
|
+
// Legacy migration: old settings stored "original"; map it to
|
|
407
|
+
// "high" so existing user.json doesn't fail validation on boot.
|
|
408
|
+
(v) => (v === "original" ? "high" : v), z.enum(["low", "standard", "high"]))
|
|
409
|
+
.optional(),
|
|
410
|
+
mcpImageTokenBudget: z.number().int().nonnegative().optional(),
|
|
411
|
+
})
|
|
412
|
+
.optional(),
|
|
216
413
|
/**
|
|
217
414
|
* OS-level sandbox for shell-tool execution. "auto" picks per platform:
|
|
218
415
|
* Seatbelt on macOS, bubblewrap on Linux when installed, otherwise off.
|
|
@@ -227,6 +424,49 @@ export const SettingsSchema = z
|
|
|
227
424
|
network: z.enum(["allow", "deny"]).optional(),
|
|
228
425
|
})
|
|
229
426
|
.optional(),
|
|
427
|
+
/**
|
|
428
|
+
* Top-level environment variables injected into tool subprocesses (the
|
|
429
|
+
* Bash tool, background shells). Mirrors Claude Code's `env` field: a
|
|
430
|
+
* KEY=VALUE map that can be set globally (~/.code-shell/settings.json) and
|
|
431
|
+
* overridden per-project (.code-shell/settings.json). The canonical home
|
|
432
|
+
* for API keys (e.g. OPENAI_API_KEY) that a skill's script reads — configure
|
|
433
|
+
* once globally and every project's skills can use it.
|
|
434
|
+
*
|
|
435
|
+
* Precedence when merged into the spawn env (lowest → highest):
|
|
436
|
+
* project localEnvironment.env → global env → project env
|
|
437
|
+
* None of these is filtered through the deny regex (see mergeShellEnv):
|
|
438
|
+
* they are values the user typed deliberately, a different trust class from
|
|
439
|
+
* the host process.env passthrough the deny machinery guards against.
|
|
440
|
+
*/
|
|
441
|
+
env: z.record(z.string()).optional(),
|
|
442
|
+
/**
|
|
443
|
+
* Project-local environment profile. Mirrors Codex's local-environment
|
|
444
|
+
* shape at the settings layer: setup/cleanup scripts can be customized per
|
|
445
|
+
* platform, and env values are stored as KEY=VALUE pairs. Runtime wiring is
|
|
446
|
+
* intentionally separate from the MCP server env model above.
|
|
447
|
+
*/
|
|
448
|
+
localEnvironment: z
|
|
449
|
+
.object({
|
|
450
|
+
name: z.string().optional(),
|
|
451
|
+
setupScripts: z
|
|
452
|
+
.object({
|
|
453
|
+
default: z.string().optional(),
|
|
454
|
+
macos: z.string().optional(),
|
|
455
|
+
linux: z.string().optional(),
|
|
456
|
+
windows: z.string().optional(),
|
|
457
|
+
})
|
|
458
|
+
.optional(),
|
|
459
|
+
cleanupScripts: z
|
|
460
|
+
.object({
|
|
461
|
+
default: z.string().optional(),
|
|
462
|
+
macos: z.string().optional(),
|
|
463
|
+
linux: z.string().optional(),
|
|
464
|
+
windows: z.string().optional(),
|
|
465
|
+
})
|
|
466
|
+
.optional(),
|
|
467
|
+
env: z.record(z.string()).optional(),
|
|
468
|
+
})
|
|
469
|
+
.optional(),
|
|
230
470
|
/**
|
|
231
471
|
* Shell-hook configuration. Each entry binds a HookEventName to a
|
|
232
472
|
* shell command; the command receives ctx JSON on stdin and returns
|
|
@@ -244,8 +484,48 @@ export const SettingsSchema = z
|
|
|
244
484
|
matcher: z.string().optional(),
|
|
245
485
|
timeout_ms: z.number().int().positive().optional(),
|
|
246
486
|
cwd: z.string().optional(),
|
|
487
|
+
/** Soft off-switch: the entry stays in the file (and the UI) but
|
|
488
|
+
* registerSettingsHooks skips it. Absent = enabled. */
|
|
489
|
+
disabled: z.boolean().optional(),
|
|
247
490
|
}))
|
|
248
491
|
.optional(),
|
|
492
|
+
/**
|
|
493
|
+
* External coding-agent orchestration (Claude Code / Codex CLI).
|
|
494
|
+
* Used by the Mobile Web Remote to launch managed jobs. dangerousArgs
|
|
495
|
+
* is config-provided (not hardcoded) so it tracks CLI flag changes;
|
|
496
|
+
* project-default dangerous mode only applies inside trustedWorkspaces.
|
|
497
|
+
*/
|
|
498
|
+
externalAgents: z
|
|
499
|
+
.object({
|
|
500
|
+
claudeCode: z
|
|
501
|
+
.object({
|
|
502
|
+
command: z.string().optional(),
|
|
503
|
+
defaultMode: z.enum(["safe", "dangerous"]).optional(),
|
|
504
|
+
dangerousArgs: z.array(z.string()).optional(),
|
|
505
|
+
trustedWorkspaces: z.array(z.string()).optional(),
|
|
506
|
+
autoStartInTrustedWorkspaces: z.boolean().optional(),
|
|
507
|
+
})
|
|
508
|
+
.optional(),
|
|
509
|
+
codex: z
|
|
510
|
+
.object({
|
|
511
|
+
command: z.string().optional(),
|
|
512
|
+
args: z.array(z.string()).optional(),
|
|
513
|
+
})
|
|
514
|
+
.optional(),
|
|
515
|
+
})
|
|
516
|
+
.optional(),
|
|
517
|
+
/**
|
|
518
|
+
* Credential-use gate (凭证模块第二期). Controls whether the AI's
|
|
519
|
+
* `UseCredential` tool prompts before handing a stored credential to a
|
|
520
|
+
* command. `autoApprove: true` skips the prompt entirely (默认关 — every
|
|
521
|
+
* use asks, or is remembered for the session). See
|
|
522
|
+
* docs/superpowers/specs/2026-06-16-credential-use-gate-design.md §5.
|
|
523
|
+
*/
|
|
524
|
+
credentialUse: z
|
|
525
|
+
.object({
|
|
526
|
+
autoApprove: z.boolean().optional(),
|
|
527
|
+
})
|
|
528
|
+
.optional(),
|
|
249
529
|
})
|
|
250
530
|
.passthrough();
|
|
251
531
|
export function validateSettings(raw) {
|
package/dist/skills/scanner.d.ts
CHANGED
|
@@ -33,6 +33,15 @@ export interface SkillDefinition {
|
|
|
33
33
|
export interface ScanSkillsOptions {
|
|
34
34
|
disabledSkills?: string[];
|
|
35
35
|
disabledPlugins?: string[];
|
|
36
|
+
/**
|
|
37
|
+
* Hard skill isolation for sub-agents. When set, ONLY skills whose name is
|
|
38
|
+
* in this list survive — every other skill is dropped from the result
|
|
39
|
+
* regardless of the disabled lists. Undefined → no allowlist filtering
|
|
40
|
+
* (parent inherits the full pool). An empty array → no skills at all.
|
|
41
|
+
* Applied after the disabled-list filters, so a skill must be both allowed
|
|
42
|
+
* AND not disabled to appear.
|
|
43
|
+
*/
|
|
44
|
+
skillAllowlist?: string[];
|
|
36
45
|
}
|
|
37
46
|
export declare function scanSkills(cwd: string, opts?: ScanSkillsOptions): SkillDefinition[];
|
|
38
47
|
export declare function invalidateSkillCache(): void;
|
package/dist/skills/scanner.js
CHANGED
|
@@ -157,18 +157,46 @@ function installedPluginsMtime() {
|
|
|
157
157
|
return "0";
|
|
158
158
|
}
|
|
159
159
|
}
|
|
160
|
-
|
|
160
|
+
/**
|
|
161
|
+
* mtime of each local skills base dir (project + user). A directory's mtime
|
|
162
|
+
* changes when a child entry is added/removed, so installing a new skill into
|
|
163
|
+
* `<cwd>/.code-shell/skills` or `~/.code-shell/skills` busts the cache on the
|
|
164
|
+
* next scan — the just-installed skill becomes visible to the running session
|
|
165
|
+
* without a restart. (Editing an existing skill's *contents* does not bump the
|
|
166
|
+
* dir mtime; install paths additionally call invalidateSkillCache() to cover
|
|
167
|
+
* that, so this is the passive half of a two-part guard.)
|
|
168
|
+
*/
|
|
169
|
+
function skillsDirsMtime(cwd) {
|
|
170
|
+
return bases(cwd)
|
|
171
|
+
.map((b) => {
|
|
172
|
+
try {
|
|
173
|
+
return statSync(b.dir).mtimeMs.toString();
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return "0";
|
|
177
|
+
}
|
|
178
|
+
})
|
|
179
|
+
.join("|");
|
|
180
|
+
}
|
|
181
|
+
const memoized = memoize(scanOnce, (cwd) => `${cwd}\0${userHome()}\0${installedPluginsMtime()}\0${skillsDirsMtime(cwd)}`);
|
|
161
182
|
export function scanSkills(cwd, opts) {
|
|
162
183
|
const all = memoized(cwd);
|
|
163
184
|
const disabledSkills = opts?.disabledSkills;
|
|
164
185
|
const disabledPlugins = opts?.disabledPlugins;
|
|
186
|
+
const skillAllowlist = opts?.skillAllowlist;
|
|
165
187
|
const hasSkillFilter = disabledSkills && disabledSkills.length > 0;
|
|
166
188
|
const hasPluginFilter = disabledPlugins && disabledPlugins.length > 0;
|
|
167
|
-
|
|
189
|
+
// An allowlist of [] is meaningful (no skills at all), so check for
|
|
190
|
+
// presence with !== undefined, not truthiness/length.
|
|
191
|
+
const hasAllowlist = skillAllowlist !== undefined;
|
|
192
|
+
if (!hasSkillFilter && !hasPluginFilter && !hasAllowlist)
|
|
168
193
|
return all;
|
|
169
194
|
const skillSet = hasSkillFilter ? new Set(disabledSkills) : null;
|
|
170
195
|
const pluginSet = hasPluginFilter ? new Set(disabledPlugins) : null;
|
|
196
|
+
const allowSet = hasAllowlist ? new Set(skillAllowlist) : null;
|
|
171
197
|
return all.filter((s) => {
|
|
198
|
+
if (allowSet && !allowSet.has(s.name))
|
|
199
|
+
return false;
|
|
172
200
|
if (skillSet && skillSet.has(s.name))
|
|
173
201
|
return false;
|
|
174
202
|
if (pluginSet) {
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { TranscribeCreds } from "./transcribe.js";
|
|
2
|
+
export interface ResolvedTranscribeProvider {
|
|
3
|
+
creds: TranscribeCreds;
|
|
4
|
+
/** Model id to transcribe with (e.g. gpt-4o-transcribe). */
|
|
5
|
+
model: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function resolveTranscribeProvider(cwd: string, prefer?: string): ResolvedTranscribeProvider | null;
|
|
8
|
+
/** Tool/UI-visibility guard: is voice input usable (some transcribe provider
|
|
9
|
+
* resolvable)? Lets the desktop disable/enable the mic button. */
|
|
10
|
+
export declare function isTranscribeAvailable(cwd: string): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* A renderer-safe description of what voice input will ACTUALLY use right now —
|
|
13
|
+
* so the UI can show "currently using gpt-4o-transcribe, reusing your OpenAI key
|
|
14
|
+
* sk-…1234" instead of looking unconfigured when the fallback is silently in
|
|
15
|
+
* effect. The key is MASKED (never ship the full secret to the renderer for
|
|
16
|
+
* display). `source`:
|
|
17
|
+
* - "connection": an explicit audio modelConnection is configured
|
|
18
|
+
* - "fallback": no audio connection; reusing an OpenAI-family credential
|
|
19
|
+
* - "none": nothing usable — voice input unavailable
|
|
20
|
+
*/
|
|
21
|
+
export interface TranscribeDescription {
|
|
22
|
+
source: "connection" | "fallback" | "none";
|
|
23
|
+
model?: string;
|
|
24
|
+
baseUrl?: string;
|
|
25
|
+
/** Masked key for display (e.g. "sk-123...cdef"). */
|
|
26
|
+
maskedKey?: string;
|
|
27
|
+
/** For "fallback": the credential id/catalog whose key is being reused. */
|
|
28
|
+
reusedCredentialId?: string;
|
|
29
|
+
reusedCredentialCatalogId?: string;
|
|
30
|
+
}
|
|
31
|
+
export declare function describeTranscribe(cwd: string): TranscribeDescription;
|