@cjhyy/code-shell-core 0.7.1 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -23
- package/dist/agent/agent-definition-registry.d.ts +2 -2
- package/dist/agent/agent-definition-registry.js +47 -10
- package/dist/agent/agent-definition.d.ts +5 -0
- package/dist/agent/agent-definition.js +14 -0
- package/dist/automation/index.d.ts +7 -4
- package/dist/automation/index.js +4 -2
- package/dist/automation/runner.js +3 -1
- package/dist/automation/scheduler.d.ts +57 -1
- package/dist/automation/scheduler.js +123 -23
- package/dist/automation/store.d.ts +6 -2
- package/dist/automation/store.js +7 -3
- package/dist/capabilities/index.d.ts +109 -0
- package/dist/capabilities/index.js +80 -0
- package/dist/capability-control/disabled-lists.d.ts +2 -1
- package/dist/capability-control/disabled-lists.js +3 -5
- package/dist/capability-control/overlay.d.ts +14 -1
- package/dist/capability-control/overlay.js +40 -0
- package/dist/capability-control/service.js +6 -4
- package/dist/cli/agent-server-stdio.d.ts +1 -1
- package/dist/cli/agent-server-stdio.js +66 -6
- package/dist/cli/agent-server-tcp.js +7 -3
- package/dist/context/compaction.d.ts +39 -3
- package/dist/context/compaction.js +151 -39
- package/dist/context/manager.d.ts +17 -1
- package/dist/context/manager.js +36 -1
- package/dist/credentials/access.d.ts +3 -1
- package/dist/credentials/access.js +24 -3
- package/dist/credentials/index.d.ts +1 -1
- package/dist/credentials/index.js +1 -1
- package/dist/credentials/oauth.d.ts +4 -1
- package/dist/credentials/oauth.js +14 -0
- package/dist/credentials/store.d.ts +15 -1
- package/dist/credentials/store.js +17 -4
- package/dist/credentials/types.d.ts +24 -0
- package/dist/credentials/use-credential-tool.js +15 -1
- package/dist/engine/auxiliary-pipeline.d.ts +40 -0
- package/dist/engine/auxiliary-pipeline.js +181 -0
- package/dist/{settings → engine}/disk-defaults.d.ts +2 -2
- package/dist/{settings → engine}/disk-defaults.js +5 -2
- package/dist/engine/dynamic-tool-defs.d.ts +4 -0
- package/dist/engine/dynamic-tool-defs.js +4 -0
- package/dist/engine/engine.d.ts +254 -195
- package/dist/engine/engine.js +1812 -2041
- package/dist/engine/file-history-hook.d.ts +11 -0
- package/dist/engine/file-history-hook.js +31 -0
- package/dist/engine/goal-judge-context.d.ts +9 -0
- package/dist/engine/goal-judge-context.js +234 -0
- package/dist/engine/injected-context-cache.d.ts +6 -0
- package/dist/engine/injected-context-cache.js +13 -0
- package/dist/engine/input-attachments.d.ts +1 -1
- package/dist/engine/model-facade.d.ts +3 -3
- package/dist/engine/model-facade.js +15 -14
- package/dist/engine/permission-controller.d.ts +55 -0
- package/dist/engine/permission-controller.js +148 -0
- package/dist/engine/prompt-cache-diagnostics.d.ts +58 -0
- package/dist/engine/prompt-cache-diagnostics.js +178 -0
- package/dist/engine/run-accounting.d.ts +41 -0
- package/dist/engine/run-accounting.js +126 -0
- package/dist/engine/run-context.d.ts +44 -0
- package/dist/engine/run-context.js +88 -0
- package/dist/engine/run-environment.d.ts +30 -0
- package/dist/engine/run-environment.js +77 -0
- package/dist/engine/run-finalize.d.ts +58 -0
- package/dist/engine/run-finalize.js +245 -0
- package/dist/engine/run-goal.d.ts +58 -0
- package/dist/engine/run-goal.js +188 -0
- package/dist/engine/run-image-input.d.ts +1 -1
- package/dist/engine/run-image-input.js +5 -3
- package/dist/engine/run-session-open.d.ts +41 -0
- package/dist/engine/run-session-open.js +186 -0
- package/dist/engine/run-setup.d.ts +42 -0
- package/dist/engine/run-setup.js +58 -0
- package/dist/engine/run-tooling.d.ts +125 -0
- package/dist/engine/run-tooling.js +283 -0
- package/dist/engine/run-types.d.ts +139 -0
- package/dist/engine/run-types.js +12 -0
- package/dist/engine/run-workspace.d.ts +50 -0
- package/dist/engine/run-workspace.js +114 -0
- package/dist/engine/steer-queue.d.ts +1 -1
- package/dist/engine/subagent-spawner.d.ts +32 -0
- package/dist/engine/subagent-spawner.js +287 -0
- package/dist/engine/tool-summary.d.ts +2 -2
- package/dist/engine/tool-summary.js +2 -2
- package/dist/engine/turn-loop.d.ts +49 -10
- package/dist/engine/turn-loop.js +370 -104
- package/dist/engine/types.d.ts +30 -3
- package/dist/engine/types.js +1 -1
- package/dist/{engine/goal.d.ts → goal/lifecycle.d.ts} +76 -4
- package/dist/goal/lifecycle.js +482 -0
- package/dist/hooks/events.d.ts +24 -10
- package/dist/hooks/goal-stop-hook.d.ts +17 -28
- package/dist/hooks/goal-stop-hook.js +110 -465
- package/dist/hooks/registry.js +1 -1
- package/dist/index.d.ts +48 -108
- package/dist/index.extension.d.ts +51 -0
- package/dist/index.extension.js +39 -0
- package/dist/index.internal.d.ts +86 -0
- package/dist/index.internal.js +92 -0
- package/dist/index.js +34 -123
- package/dist/links/cli.d.ts +48 -0
- package/dist/links/cli.js +617 -0
- package/dist/links/http.d.ts +40 -0
- package/dist/links/http.js +166 -0
- package/dist/links/index.d.ts +4 -0
- package/dist/links/index.js +3 -0
- package/dist/links/link-action-tool.d.ts +5 -0
- package/dist/links/link-action-tool.js +241 -0
- package/dist/links/providers.d.ts +8 -0
- package/dist/links/providers.js +665 -0
- package/dist/links/types.d.ts +44 -0
- package/dist/llm/client-base.d.ts +7 -0
- package/dist/llm/client-base.js +60 -0
- package/dist/llm/model-pool.d.ts +1 -1
- package/dist/llm/model-pool.js +1 -1
- package/dist/llm/providers/anthropic.d.ts +1 -0
- package/dist/llm/providers/anthropic.js +9 -0
- package/dist/llm/providers/openai.d.ts +1 -0
- package/dist/llm/providers/openai.js +17 -0
- package/dist/model-catalog/index.js +15 -2
- package/dist/model-catalog/resolve.d.ts +13 -1
- package/dist/model-catalog/resolve.js +37 -2
- package/dist/model-catalog/types.d.ts +74 -48
- package/dist/model-catalog/types.js +16 -5
- package/dist/model-catalog/upsert.d.ts +3 -1
- package/dist/model-catalog/upsert.js +9 -0
- package/dist/onboarding.d.ts +0 -1
- package/dist/onboarding.js +1 -22
- package/dist/panel-apps/bindings.d.ts +24 -0
- package/dist/panel-apps/bindings.js +69 -0
- package/dist/panel-apps/github-archive.d.ts +21 -0
- package/dist/panel-apps/github-archive.js +98 -0
- package/dist/panel-apps/index.d.ts +4 -0
- package/dist/panel-apps/index.js +4 -0
- package/dist/panel-apps/installer.d.ts +68 -0
- package/dist/panel-apps/installer.js +622 -0
- package/dist/panel-apps/manifest.d.ts +364 -0
- package/dist/panel-apps/manifest.js +189 -0
- package/dist/panel-apps/paths.d.ts +13 -0
- package/dist/panel-apps/paths.js +38 -0
- package/dist/panel-apps/registry.d.ts +51 -0
- package/dist/panel-apps/registry.js +99 -0
- package/dist/panel-apps/runtime.d.ts +80 -0
- package/dist/panel-apps/runtime.js +154 -0
- package/dist/plugins/gitOps.js +8 -1
- package/dist/plugins/installedPlugins.d.ts +2 -1
- package/dist/plugins/installedPlugins.js +146 -8
- package/dist/plugins/installer/codex/convertAgents.d.ts +4 -1
- package/dist/plugins/installer/codex/convertAgents.js +62 -8
- package/dist/plugins/installer/codex/convertCommands.d.ts +5 -5
- package/dist/plugins/installer/codex/convertCommands.js +35 -12
- package/dist/plugins/installer/codex/convertHooks.d.ts +10 -0
- package/dist/plugins/installer/codex/convertHooks.js +82 -0
- package/dist/plugins/installer/codex/convertSkills.js +41 -6
- package/dist/plugins/installer/install.d.ts +7 -1
- package/dist/plugins/installer/install.js +21 -87
- package/dist/plugins/installer/installFromArchive.d.ts +26 -4
- package/dist/plugins/installer/installFromArchive.js +44 -27
- package/dist/plugins/installer/installFromNpm.d.ts +31 -0
- package/dist/plugins/installer/installFromNpm.js +273 -0
- package/dist/plugins/installer/loadPluginAgents.js +17 -4
- package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
- package/dist/plugins/installer/loadPluginMcp.js +245 -35
- package/dist/plugins/installer/normalizeManifest.d.ts +13 -0
- package/dist/plugins/installer/normalizeManifest.js +306 -0
- package/dist/plugins/installer/npmTar.d.ts +13 -0
- package/dist/plugins/installer/npmTar.js +321 -0
- package/dist/plugins/installer/parseSource.d.ts +11 -0
- package/dist/plugins/installer/parseSource.js +48 -0
- package/dist/plugins/installer/preview.d.ts +101 -0
- package/dist/plugins/installer/preview.js +336 -0
- package/dist/plugins/installer/projectPluginSource.d.ts +14 -0
- package/dist/plugins/installer/projectPluginSource.js +140 -0
- package/dist/plugins/installer/types.d.ts +775 -0
- package/dist/plugins/installer/types.js +100 -0
- package/dist/plugins/installer/unzip.d.ts +11 -0
- package/dist/plugins/installer/unzip.js +123 -9
- package/dist/plugins/installer/update.d.ts +2 -2
- package/dist/plugins/installer/update.js +43 -4
- package/dist/plugins/loadPluginHooks.d.ts +19 -2
- package/dist/plugins/loadPluginHooks.js +97 -86
- package/dist/plugins/pluginAutomationTemplates.d.ts +18 -0
- package/dist/plugins/pluginAutomationTemplates.js +50 -0
- package/dist/plugins/pluginCatalog.d.ts +45 -0
- package/dist/plugins/pluginCatalog.js +87 -0
- package/dist/plugins/pluginCommandHook.d.ts +6 -0
- package/dist/plugins/pluginCommandHook.js +25 -8
- package/dist/plugins/pluginCommandsLoader.d.ts +19 -0
- package/dist/plugins/pluginCommandsLoader.js +181 -7
- package/dist/plugins/pluginContent.d.ts +10 -1
- package/dist/plugins/pluginContent.js +87 -30
- package/dist/plugins/pluginHookApproval.d.ts +30 -0
- package/dist/plugins/pluginHookApproval.js +160 -0
- package/dist/plugins/pluginHookIntegrity.d.ts +69 -0
- package/dist/plugins/pluginHookIntegrity.js +361 -0
- package/dist/plugins/pluginInstaller.js +71 -12
- package/dist/plugins/pluginMcpApproval.d.ts +19 -0
- package/dist/plugins/pluginMcpApproval.js +110 -0
- package/dist/plugins/pluginMcpIntegrity.d.ts +21 -0
- package/dist/plugins/pluginMcpIntegrity.js +74 -0
- package/dist/plugins/types.d.ts +30 -0
- package/dist/plugins/varRewrite.d.ts +9 -5
- package/dist/plugins/varRewrite.js +26 -17
- package/dist/preset/index.d.ts +11 -8
- package/dist/preset/index.js +62 -203
- package/dist/product/define.js +9 -3
- package/dist/product/types.d.ts +0 -2
- package/dist/profile/activation.d.ts +36 -0
- package/dist/profile/activation.js +57 -0
- package/dist/profile/catalog-store.d.ts +77 -0
- package/dist/profile/catalog-store.js +346 -0
- package/dist/profile/catalog.d.ts +54 -0
- package/dist/profile/catalog.js +152 -0
- package/dist/profile/index.d.ts +7 -0
- package/dist/profile/index.js +7 -0
- package/dist/profile/requirements.d.ts +76 -0
- package/dist/profile/requirements.js +117 -0
- package/dist/profile/resolve.d.ts +11 -0
- package/dist/profile/resolve.js +41 -0
- package/dist/profile/store.d.ts +17 -0
- package/dist/profile/store.js +167 -0
- package/dist/profile/types.d.ts +321 -0
- package/dist/profile/types.js +104 -0
- package/dist/prompt/composer.d.ts +46 -7
- package/dist/prompt/composer.js +78 -48
- package/dist/prompt/instruction-scanner.d.ts +6 -5
- package/dist/prompt/instruction-scanner.js +8 -23
- package/dist/prompt/section-loader.d.ts +2 -2
- package/dist/prompt/section-loader.js +7 -4
- package/dist/prompt/sections/browser.md +10 -9
- package/dist/prompt/sections/harness-base.md +9 -0
- package/dist/protocol/chat-session-manager.d.ts +64 -1
- package/dist/protocol/chat-session-manager.js +104 -0
- package/dist/protocol/chat-session.d.ts +61 -10
- package/dist/protocol/chat-session.js +135 -25
- package/dist/protocol/client.d.ts +33 -3
- package/dist/protocol/client.js +96 -5
- package/dist/protocol/index.d.ts +2 -2
- package/dist/protocol/index.js +2 -2
- package/dist/protocol/mobile-remote-types.d.ts +406 -0
- package/dist/protocol/mobile-remote-types.js +1 -0
- package/dist/protocol/server.d.ts +127 -3
- package/dist/protocol/server.js +1309 -182
- package/dist/protocol/types.d.ts +152 -34
- package/dist/protocol/types.js +16 -0
- package/dist/run/ArtifactTracker.d.ts +6 -1
- package/dist/run/ArtifactTracker.js +29 -21
- package/dist/run/EngineRunner.d.ts +2 -0
- package/dist/run/EngineRunner.js +1 -0
- package/dist/run/RunManager.d.ts +26 -0
- package/dist/run/RunManager.js +82 -11
- package/dist/run/factory.d.ts +3 -0
- package/dist/run/factory.js +2 -0
- package/dist/runtime/safe-spawn.d.ts +6 -0
- package/dist/runtime/safe-spawn.js +8 -13
- package/dist/services/auto-dream.d.ts +13 -1
- package/dist/services/auto-dream.js +56 -8
- package/dist/services/dream-consolidation.js +10 -1
- package/dist/services/memory-orchestrator.js +6 -2
- package/dist/services/oauth.js +4 -1
- package/dist/services/session-memory.d.ts +4 -4
- package/dist/services/session-memory.js +13 -10
- package/dist/session/memory.d.ts +26 -7
- package/dist/session/memory.js +79 -21
- package/dist/session/session-manager.d.ts +182 -28
- package/dist/session/session-manager.js +910 -130
- package/dist/session/session-message.d.ts +22 -0
- package/dist/session/session-message.js +1 -0
- package/dist/session/transcript.d.ts +46 -5
- package/dist/session/transcript.js +159 -3
- package/dist/settings/feature-flags.d.ts +40 -0
- package/dist/settings/feature-flags.js +40 -0
- package/dist/settings/manager.d.ts +39 -1
- package/dist/settings/manager.js +102 -41
- package/dist/settings/migrate-config.js +4 -2
- package/dist/settings/schema.d.ts +511 -177
- package/dist/settings/schema.js +98 -25
- package/dist/skills/scanner.d.ts +6 -2
- package/dist/skills/scanner.js +160 -9
- package/dist/sources/adapter.d.ts +14 -0
- package/dist/sources/adapter.js +7 -0
- package/dist/sources/adapters/local-files.d.ts +10 -0
- package/dist/sources/adapters/local-files.js +127 -0
- package/dist/sources/adapters/mcp-resource.d.ts +17 -0
- package/dist/sources/adapters/mcp-resource.js +41 -0
- package/dist/sources/adapters/mock.d.ts +3 -0
- package/dist/sources/adapters/mock.js +29 -0
- package/dist/sources/binding.d.ts +6 -0
- package/dist/sources/binding.js +24 -0
- package/dist/sources/catalog.d.ts +6 -0
- package/dist/sources/catalog.js +64 -0
- package/dist/sources/context-summary.d.ts +8 -0
- package/dist/sources/context-summary.js +13 -0
- package/dist/sources/credential-status.d.ts +2 -0
- package/dist/sources/credential-status.js +13 -0
- package/dist/sources/index.d.ts +10 -0
- package/dist/sources/index.js +10 -0
- package/dist/sources/resolve.d.ts +28 -0
- package/dist/sources/resolve.js +47 -0
- package/dist/sources/truncate-utf8.d.ts +7 -0
- package/dist/sources/truncate-utf8.js +18 -0
- package/dist/sources/types.d.ts +71 -0
- package/dist/sources/types.js +26 -0
- package/dist/testing/fetch-stub.d.ts +32 -0
- package/dist/testing/fetch-stub.js +24 -0
- package/dist/themes/image.d.ts +18 -0
- package/dist/themes/image.js +117 -0
- package/dist/themes/index.d.ts +4 -0
- package/dist/themes/index.js +4 -0
- package/dist/themes/installer.d.ts +50 -0
- package/dist/themes/installer.js +290 -0
- package/dist/themes/manifest.d.ts +102 -0
- package/dist/themes/manifest.js +86 -0
- package/dist/themes/paths.d.ts +14 -0
- package/dist/themes/paths.js +33 -0
- package/dist/tool-system/browser-bridge.d.ts +53 -11
- package/dist/tool-system/browser-bridge.js +8 -9
- package/dist/tool-system/builtin/agent-heartbeat.d.ts +2 -2
- package/dist/tool-system/builtin/agent-heartbeat.js +20 -6
- package/dist/tool-system/builtin/agent-notifications.d.ts +127 -72
- package/dist/tool-system/builtin/agent-notifications.js +291 -101
- package/dist/tool-system/builtin/agent-output-file.js +1 -3
- package/dist/tool-system/builtin/agent-progress.d.ts +6 -0
- package/dist/tool-system/builtin/agent-progress.js +83 -0
- package/dist/tool-system/builtin/agent-registry.d.ts +38 -2
- package/dist/tool-system/builtin/agent-registry.js +178 -9
- package/dist/tool-system/builtin/agent-transcript-translator.js +1 -1
- package/dist/tool-system/builtin/agent.d.ts +2 -0
- package/dist/tool-system/builtin/agent.js +274 -33
- package/dist/tool-system/builtin/background-jobs.d.ts +55 -2
- package/dist/tool-system/builtin/background-jobs.js +96 -4
- package/dist/tool-system/builtin/background-work.d.ts +6 -0
- package/dist/tool-system/builtin/background-work.js +8 -1
- package/dist/tool-system/builtin/bash.js +5 -2
- package/dist/tool-system/builtin/browser-tools.d.ts +6 -3
- package/dist/tool-system/builtin/browser-tools.js +89 -23
- package/dist/tool-system/builtin/edit-model-catalog.d.ts +6 -0
- package/dist/tool-system/builtin/edit-model-catalog.js +172 -12
- package/dist/tool-system/builtin/edit.js +2 -6
- package/dist/tool-system/builtin/file-cache.d.ts +2 -0
- package/dist/tool-system/builtin/file-cache.js +4 -0
- package/dist/tool-system/builtin/generate-image.js +17 -10
- package/dist/tool-system/builtin/generate-video.js +26 -7
- package/dist/tool-system/builtin/grep.js +2 -2
- package/dist/tool-system/builtin/image-uploader.js +7 -1
- package/dist/tool-system/builtin/index.d.ts +32 -7
- package/dist/tool-system/builtin/index.js +237 -167
- package/dist/tool-system/builtin/memory.d.ts +6 -0
- package/dist/tool-system/builtin/memory.js +36 -15
- package/dist/tool-system/builtin/panel.d.ts +9 -0
- package/dist/tool-system/builtin/panel.js +314 -0
- package/dist/tool-system/builtin/read.js +5 -1
- package/dist/tool-system/builtin/send-message-to-session.d.ts +6 -0
- package/dist/tool-system/builtin/send-message-to-session.js +67 -0
- package/dist/tool-system/builtin/sources.d.ts +8 -0
- package/dist/tool-system/builtin/sources.js +137 -0
- package/dist/tool-system/builtin/tool-search.js +7 -2
- package/dist/tool-system/builtin/update-automation-memory.js +2 -0
- package/dist/tool-system/builtin/web-fetch.js +17 -13
- package/dist/tool-system/builtin/web-search.js +1 -3
- package/dist/tool-system/capability-module.d.ts +93 -0
- package/dist/tool-system/capability-module.js +53 -0
- package/dist/tool-system/context.d.ts +77 -19
- package/dist/tool-system/executor.js +75 -50
- package/dist/tool-system/external-tool-exposure.d.ts +60 -0
- package/dist/tool-system/external-tool-exposure.js +304 -0
- package/dist/tool-system/mcp-manager.d.ts +11 -1
- package/dist/tool-system/mcp-manager.js +19 -4
- package/dist/tool-system/mcp-tool-policy.d.ts +9 -0
- package/dist/tool-system/mcp-tool-policy.js +34 -0
- package/dist/tool-system/panel-bridge.d.ts +53 -0
- package/dist/tool-system/panel-bridge.js +1 -0
- package/dist/tool-system/path-policy.js +99 -2
- package/dist/tool-system/permission.d.ts +26 -0
- package/dist/tool-system/permission.js +46 -0
- package/dist/tool-system/registry.d.ts +12 -1
- package/dist/tool-system/registry.js +31 -7
- package/dist/tool-system/sandbox/index.js +3 -8
- package/dist/tool-system/sandbox/seatbelt.js +2 -6
- package/dist/tool-system/session-tool-host.d.ts +139 -0
- package/dist/tool-system/session-tool-host.js +167 -0
- package/dist/tool-system/testing/tool-registry-harness.d.ts +31 -0
- package/dist/tool-system/testing/tool-registry-harness.js +51 -0
- package/dist/tool-system/validation.d.ts +14 -7
- package/dist/tool-system/validation.js +701 -7
- package/dist/types.d.ts +186 -20
- package/dist/{cc-orchestrator → utils}/cwd-normalize.d.ts +1 -0
- package/dist/{cc-orchestrator → utils}/cwd-normalize.js +1 -0
- package/dist/utils/file-mutex.d.ts +65 -0
- package/dist/utils/file-mutex.js +145 -0
- package/dist/utils/json.d.ts +2 -4
- package/dist/utils/json.js +2 -4
- package/dist/utils/lockfile.d.ts +30 -1
- package/dist/utils/lockfile.js +2 -2
- package/dist/utils/secret-scrubber.d.ts +8 -0
- package/dist/utils/secret-scrubber.js +227 -0
- package/dist/utils/toolDisplay.js +1 -1
- package/package.json +20 -5
- package/THIRD_PARTY_NOTICES.md +0 -206
- package/dist/arena/arena.d.ts +0 -45
- package/dist/arena/arena.js +0 -362
- package/dist/arena/context/context-tools.d.ts +0 -16
- package/dist/arena/context/context-tools.js +0 -272
- package/dist/arena/context/within-root.d.ts +0 -7
- package/dist/arena/context/within-root.js +0 -15
- package/dist/arena/detect-mode.d.ts +0 -20
- package/dist/arena/detect-mode.js +0 -78
- package/dist/arena/digest-builder.d.ts +0 -25
- package/dist/arena/digest-builder.js +0 -120
- package/dist/arena/index.d.ts +0 -29
- package/dist/arena/index.js +0 -29
- package/dist/arena/iterate/convergence.d.ts +0 -25
- package/dist/arena/iterate/convergence.js +0 -103
- package/dist/arena/iterate/formats/index.d.ts +0 -22
- package/dist/arena/iterate/formats/index.js +0 -283
- package/dist/arena/iterate/index.d.ts +0 -11
- package/dist/arena/iterate/index.js +0 -9
- package/dist/arena/iterate/iterative-arena.d.ts +0 -23
- package/dist/arena/iterate/iterative-arena.js +0 -237
- package/dist/arena/iterate/parse.d.ts +0 -42
- package/dist/arena/iterate/parse.js +0 -123
- package/dist/arena/iterate/phases/argue.d.ts +0 -22
- package/dist/arena/iterate/phases/argue.js +0 -165
- package/dist/arena/iterate/phases/revise.d.ts +0 -16
- package/dist/arena/iterate/phases/revise.js +0 -62
- package/dist/arena/iterate/phases/tournament.d.ts +0 -34
- package/dist/arena/iterate/phases/tournament.js +0 -113
- package/dist/arena/iterate/tools/web-tools.d.ts +0 -13
- package/dist/arena/iterate/tools/web-tools.js +0 -54
- package/dist/arena/iterate/types.d.ts +0 -152
- package/dist/arena/iterate/types.js +0 -8
- package/dist/arena/ledger.d.ts +0 -47
- package/dist/arena/ledger.js +0 -159
- package/dist/arena/lenses/architecture.d.ts +0 -5
- package/dist/arena/lenses/architecture.js +0 -22
- package/dist/arena/lenses/engineering.d.ts +0 -5
- package/dist/arena/lenses/engineering.js +0 -22
- package/dist/arena/lenses/general.d.ts +0 -5
- package/dist/arena/lenses/general.js +0 -20
- package/dist/arena/lenses/index.d.ts +0 -16
- package/dist/arena/lenses/index.js +0 -47
- package/dist/arena/lenses/product.d.ts +0 -5
- package/dist/arena/lenses/product.js +0 -22
- package/dist/arena/model-presets.d.ts +0 -23
- package/dist/arena/model-presets.js +0 -44
- package/dist/arena/phases/adjudication.d.ts +0 -25
- package/dist/arena/phases/adjudication.js +0 -142
- package/dist/arena/phases/build-consensus.d.ts +0 -30
- package/dist/arena/phases/build-consensus.js +0 -85
- package/dist/arena/phases/claim-registry.d.ts +0 -26
- package/dist/arena/phases/claim-registry.js +0 -60
- package/dist/arena/phases/cross-review.d.ts +0 -47
- package/dist/arena/phases/cross-review.js +0 -224
- package/dist/arena/phases/debate-rounds.d.ts +0 -28
- package/dist/arena/phases/debate-rounds.js +0 -161
- package/dist/arena/phases/participant-research.d.ts +0 -39
- package/dist/arena/phases/participant-research.js +0 -316
- package/dist/arena/phases/planning-detail-expansion.d.ts +0 -39
- package/dist/arena/phases/planning-detail-expansion.js +0 -120
- package/dist/arena/planner.d.ts +0 -28
- package/dist/arena/planner.js +0 -312
- package/dist/arena/providers/docs.d.ts +0 -7
- package/dist/arena/providers/docs.js +0 -111
- package/dist/arena/providers/git.d.ts +0 -8
- package/dist/arena/providers/git.js +0 -174
- package/dist/arena/providers/index.d.ts +0 -32
- package/dist/arena/providers/index.js +0 -132
- package/dist/arena/providers/none.d.ts +0 -7
- package/dist/arena/providers/none.js +0 -11
- package/dist/arena/providers/repo.d.ts +0 -7
- package/dist/arena/providers/repo.js +0 -258
- package/dist/arena/render/session.d.ts +0 -17
- package/dist/arena/render/session.js +0 -190
- package/dist/arena/render/terminal.d.ts +0 -34
- package/dist/arena/render/terminal.js +0 -286
- package/dist/arena/strategies/discussion.d.ts +0 -25
- package/dist/arena/strategies/discussion.js +0 -143
- package/dist/arena/strategies/index.d.ts +0 -15
- package/dist/arena/strategies/index.js +0 -28
- package/dist/arena/strategies/language-wrapper.d.ts +0 -17
- package/dist/arena/strategies/language-wrapper.js +0 -102
- package/dist/arena/strategies/lens-wrapper.d.ts +0 -16
- package/dist/arena/strategies/lens-wrapper.js +0 -236
- package/dist/arena/strategies/planning.d.ts +0 -30
- package/dist/arena/strategies/planning.js +0 -225
- package/dist/arena/strategies/review.d.ts +0 -26
- package/dist/arena/strategies/review.js +0 -168
- package/dist/arena/strategies/utils.d.ts +0 -36
- package/dist/arena/strategies/utils.js +0 -603
- package/dist/arena/tools/selector.d.ts +0 -17
- package/dist/arena/tools/selector.js +0 -61
- package/dist/arena/transitions.d.ts +0 -53
- package/dist/arena/transitions.js +0 -97
- package/dist/arena/types.d.ts +0 -518
- package/dist/arena/types.js +0 -27
- package/dist/cc-orchestrator/agent-adapter.d.ts +0 -54
- package/dist/cc-orchestrator/agent-adapter.js +0 -143
- package/dist/cc-orchestrator/cc-capability.d.ts +0 -19
- package/dist/cc-orchestrator/cc-capability.js +0 -53
- package/dist/cc-orchestrator/codex-session-discovery.d.ts +0 -24
- package/dist/cc-orchestrator/codex-session-discovery.js +0 -191
- package/dist/cc-orchestrator/codex-session-history.d.ts +0 -38
- package/dist/cc-orchestrator/codex-session-history.js +0 -247
- package/dist/cc-orchestrator/external-agent-bindings.d.ts +0 -27
- package/dist/cc-orchestrator/external-agent-bindings.js +0 -150
- package/dist/cc-orchestrator/external-agent-changes.d.ts +0 -19
- package/dist/cc-orchestrator/external-agent-changes.js +0 -231
- package/dist/cc-orchestrator/external-agent-driver.d.ts +0 -19
- package/dist/cc-orchestrator/external-agent-driver.js +0 -284
- package/dist/cc-orchestrator/external-agent-session-store.d.ts +0 -23
- package/dist/cc-orchestrator/external-agent-session-store.js +0 -146
- package/dist/cc-orchestrator/index.d.ts +0 -8
- package/dist/cc-orchestrator/index.js +0 -8
- package/dist/cc-orchestrator/relevance-judge.d.ts +0 -15
- package/dist/cc-orchestrator/relevance-judge.js +0 -29
- package/dist/cc-orchestrator/session-discovery.d.ts +0 -46
- package/dist/cc-orchestrator/session-discovery.js +0 -125
- package/dist/cc-orchestrator/session-history.d.ts +0 -54
- package/dist/cc-orchestrator/session-history.js +0 -150
- package/dist/cron/cron-runtime.d.ts +0 -2
- package/dist/cron/cron-runtime.js +0 -2
- package/dist/cron/cron-store.d.ts +0 -2
- package/dist/cron/cron-store.js +0 -2
- package/dist/cron/scheduler.d.ts +0 -7
- package/dist/cron/scheduler.js +0 -7
- package/dist/engine/goal.js +0 -206
- package/dist/external-agents/config.d.ts +0 -2
- package/dist/external-agents/config.js +0 -15
- package/dist/external-agents/types.d.ts +0 -31
- package/dist/git/parse-log.d.ts +0 -13
- package/dist/git/parse-log.js +0 -21
- package/dist/git/utils.d.ts +0 -49
- package/dist/git/utils.js +0 -161
- package/dist/git/worktree/crud.d.ts +0 -72
- package/dist/git/worktree/crud.js +0 -235
- package/dist/git/worktree/diff.d.ts +0 -14
- package/dist/git/worktree/diff.js +0 -82
- package/dist/git/worktree/git-exec.d.ts +0 -7
- package/dist/git/worktree/git-exec.js +0 -87
- package/dist/git/worktree/index.d.ts +0 -5
- package/dist/git/worktree/index.js +0 -5
- package/dist/git/worktree/query.d.ts +0 -43
- package/dist/git/worktree/query.js +0 -128
- package/dist/git/worktree/slug.d.ts +0 -11
- package/dist/git/worktree/slug.js +0 -58
- package/dist/git/worktree.d.ts +0 -1
- package/dist/git/worktree.js +0 -5
- package/dist/lsp/client.d.ts +0 -41
- package/dist/lsp/client.js +0 -186
- package/dist/lsp/manager.d.ts +0 -40
- package/dist/lsp/manager.js +0 -155
- package/dist/lsp/root-path.d.ts +0 -9
- package/dist/lsp/root-path.js +0 -12
- package/dist/lsp/servers.d.ts +0 -16
- package/dist/lsp/servers.js +0 -60
- package/dist/prompt/sections/coding.md +0 -35
- package/dist/quota/credentials.d.ts +0 -3
- package/dist/quota/credentials.js +0 -80
- package/dist/quota/index.d.ts +0 -36
- package/dist/quota/index.js +0 -155
- package/dist/quota/types.d.ts +0 -48
- package/dist/quota/types.js +0 -13
- package/dist/review/review-prompt.d.ts +0 -28
- package/dist/review/review-prompt.js +0 -81
- package/dist/state.d.ts +0 -160
- package/dist/state.js +0 -267
- package/dist/tool-system/builtin/apply-patch/applier.d.ts +0 -26
- package/dist/tool-system/builtin/apply-patch/applier.js +0 -308
- package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +0 -10
- package/dist/tool-system/builtin/apply-patch/backup-targets.js +0 -30
- package/dist/tool-system/builtin/apply-patch/index.d.ts +0 -20
- package/dist/tool-system/builtin/apply-patch/index.js +0 -105
- package/dist/tool-system/builtin/apply-patch/parser.d.ts +0 -17
- package/dist/tool-system/builtin/apply-patch/parser.js +0 -212
- package/dist/tool-system/builtin/apply-patch/seek-sequence.d.ts +0 -18
- package/dist/tool-system/builtin/apply-patch/seek-sequence.js +0 -123
- package/dist/tool-system/builtin/apply-patch/types.d.ts +0 -49
- package/dist/tool-system/builtin/apply-patch/types.js +0 -13
- package/dist/tool-system/builtin/arena.d.ts +0 -31
- package/dist/tool-system/builtin/arena.js +0 -416
- package/dist/tool-system/builtin/brief.d.ts +0 -6
- package/dist/tool-system/builtin/brief.js +0 -41
- package/dist/tool-system/builtin/check-quota.d.ts +0 -15
- package/dist/tool-system/builtin/check-quota.js +0 -34
- package/dist/tool-system/builtin/drive-claude-code.d.ts +0 -51
- package/dist/tool-system/builtin/drive-claude-code.js +0 -698
- package/dist/tool-system/builtin/lsp.d.ts +0 -7
- package/dist/tool-system/builtin/lsp.js +0 -144
- package/dist/tool-system/builtin/notebook-edit.d.ts +0 -7
- package/dist/tool-system/builtin/notebook-edit.js +0 -127
- package/dist/tool-system/builtin/worktree.d.ts +0 -11
- package/dist/tool-system/builtin/worktree.js +0 -363
- /package/dist/{external-agents → links}/types.js +0 -0
- /package/dist/{engine/session-usage.d.ts → session/usage.d.ts} +0 -0
- /package/dist/{engine/session-usage.js → session/usage.js} +0 -0
|
@@ -14,6 +14,22 @@ import { isCronExpression, parseCronExpression, nextCronTime } from "./cron-expr
|
|
|
14
14
|
* normal timer jitter, while still catching a multi-minute/hour sleep drift.
|
|
15
15
|
*/
|
|
16
16
|
const CRON_MISFIRE_GRACE_MS = 90_000;
|
|
17
|
+
/**
|
|
18
|
+
* Largest delay a Node/Electron timer accepts (2^31 - 1 ms, ~24.8 days).
|
|
19
|
+
*
|
|
20
|
+
* Above this, `setTimeout` does not wait longer — it warns
|
|
21
|
+
* (`TimeoutOverflowWarning`) and clamps the delay to **1ms**, so a long
|
|
22
|
+
* schedule fired instantly instead of far in the future. `armAt()` sleeps in
|
|
23
|
+
* chunks no larger than this.
|
|
24
|
+
*/
|
|
25
|
+
const MAX_TIMER_DELAY_MS = 2_147_483_647;
|
|
26
|
+
/**
|
|
27
|
+
* Hard ceiling on a schedule interval: ~10 years. Anything beyond this is far
|
|
28
|
+
* more likely a unit mistake (passing microseconds, or a raw epoch timestamp as
|
|
29
|
+
* "milliseconds from now") than a real intent, and `nextRun` bookkeeping should
|
|
30
|
+
* not silently carry a nonsense value.
|
|
31
|
+
*/
|
|
32
|
+
const MAX_SCHEDULE_INTERVAL_MS = 10 * 365 * 24 * 60 * 60 * 1000;
|
|
17
33
|
/**
|
|
18
34
|
* True when a cron timer fired too far past its scheduled instant to be a
|
|
19
35
|
* legitimate on-time run — i.e. the host slept through the scheduled time and
|
|
@@ -39,6 +55,7 @@ export class CronScheduler {
|
|
|
39
55
|
runningControllers = new Map();
|
|
40
56
|
nextId = 1;
|
|
41
57
|
onExecute;
|
|
58
|
+
onJobEvent;
|
|
42
59
|
/** Optional persistence backend. When set, every create/delete/pause/resume
|
|
43
60
|
* writes the full job set to disk so jobs survive a restart. */
|
|
44
61
|
store;
|
|
@@ -70,6 +87,24 @@ export class CronScheduler {
|
|
|
70
87
|
setExecutor(fn) {
|
|
71
88
|
this.onExecute = fn;
|
|
72
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Observe job execution lifecycle
|
|
92
|
+
* (job_start → job_end | job_stopped | job_cancelled | job_error). Hosts
|
|
93
|
+
* wire this to their notification surface so scheduled runs — especially
|
|
94
|
+
* failures, which `fire()` otherwise swallows — are no longer silent.
|
|
95
|
+
* Listener errors are swallowed; observation never affects scheduling.
|
|
96
|
+
*/
|
|
97
|
+
setJobEventListener(listener) {
|
|
98
|
+
this.onJobEvent = listener;
|
|
99
|
+
}
|
|
100
|
+
emitJobEvent(event) {
|
|
101
|
+
try {
|
|
102
|
+
this.onJobEvent?.(event);
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
/* observers must not affect the tick loop */
|
|
106
|
+
}
|
|
107
|
+
}
|
|
73
108
|
/**
|
|
74
109
|
* Abort the in-flight run of `jobId`, if any. Aborts the AbortSignal handed
|
|
75
110
|
* to the executor (which Engine.run cooperates with — it resolves with
|
|
@@ -268,6 +303,7 @@ export class CronScheduler {
|
|
|
268
303
|
...(opts?.permissionLevel !== undefined ? { permissionLevel: opts.permissionLevel } : {}),
|
|
269
304
|
...(opts?.once === true ? { once: true } : {}),
|
|
270
305
|
...(opts?.resumeSessionId !== undefined ? { resumeSessionId: opts.resumeSessionId } : {}),
|
|
306
|
+
...(opts?.templateSource !== undefined ? { templateSource: opts.templateSource } : {}),
|
|
271
307
|
};
|
|
272
308
|
this.refreshNextRunForDisplay(job);
|
|
273
309
|
return { jobs: [...jobs, job], result: job };
|
|
@@ -289,6 +325,7 @@ export class CronScheduler {
|
|
|
289
325
|
...(opts?.permissionLevel !== undefined ? { permissionLevel: opts.permissionLevel } : {}),
|
|
290
326
|
...(opts?.once === true ? { once: true } : {}),
|
|
291
327
|
...(opts?.resumeSessionId !== undefined ? { resumeSessionId: opts.resumeSessionId } : {}),
|
|
328
|
+
...(opts?.templateSource !== undefined ? { templateSource: opts.templateSource } : {}),
|
|
292
329
|
};
|
|
293
330
|
this.jobs.set(id, job);
|
|
294
331
|
this.arm(job);
|
|
@@ -525,22 +562,53 @@ export class CronScheduler {
|
|
|
525
562
|
this.armInterval(job, intervalMs, nextRun);
|
|
526
563
|
}
|
|
527
564
|
}
|
|
565
|
+
/**
|
|
566
|
+
* Wait until an ABSOLUTE instant, in `setTimeout`-safe chunks.
|
|
567
|
+
*
|
|
568
|
+
* Node/Electron timers take a 32-bit signed delay: anything above
|
|
569
|
+
* 2,147,483,647ms (~24.8 days) does NOT wait longer — it emits
|
|
570
|
+
* `TimeoutOverflowWarning` and is coerced to **1ms**. A `30d` interval or a
|
|
571
|
+
* monthly cron therefore fired almost immediately and then kept re-firing,
|
|
572
|
+
* because the next absolute target was still out of range.
|
|
573
|
+
*
|
|
574
|
+
* So never hand a raw long delay to setTimeout. Sleep at most
|
|
575
|
+
* MAX_TIMER_DELAY_MS at a time and re-check the clock; only run `onDue` once
|
|
576
|
+
* the real instant has arrived. Chunked waiting also self-corrects for clock
|
|
577
|
+
* drift and sleep/wake, since each hop recomputes from `Date.now()`.
|
|
578
|
+
*/
|
|
579
|
+
armAt(jobId, scheduledFor, onDue) {
|
|
580
|
+
const step = () => {
|
|
581
|
+
const remaining = scheduledFor - Date.now();
|
|
582
|
+
if (remaining <= 0) {
|
|
583
|
+
this.timers.delete(jobId);
|
|
584
|
+
onDue();
|
|
585
|
+
return;
|
|
586
|
+
}
|
|
587
|
+
const timer = setTimeout(step, Math.min(remaining, MAX_TIMER_DELAY_MS));
|
|
588
|
+
this.timers.set(jobId, timer);
|
|
589
|
+
};
|
|
590
|
+
step();
|
|
591
|
+
}
|
|
528
592
|
armInterval(job, intervalMs, scheduledFor) {
|
|
529
593
|
job.nextRun = scheduledFor;
|
|
530
|
-
|
|
531
|
-
const timer = setTimeout(() => {
|
|
532
|
-
this.timers.delete(job.id);
|
|
594
|
+
this.armAt(job.id, scheduledFor, () => {
|
|
533
595
|
const rearm = () => {
|
|
534
596
|
if (!this.executionEnabled || !job.enabled || !this.jobs.has(job.id))
|
|
535
597
|
return;
|
|
536
598
|
this.armInterval(job, intervalMs, this.nextIntervalRunAfter(scheduledFor, intervalMs, Date.now()));
|
|
537
599
|
};
|
|
600
|
+
// Interval jobs get the same misfire semantics cron already had: if we
|
|
601
|
+
// wake far PAST the target (host slept through it), skip this occurrence
|
|
602
|
+
// and re-arm on the next absolute slot instead of firing late.
|
|
603
|
+
if (isCronMisfire(scheduledFor, Date.now())) {
|
|
604
|
+
rearm();
|
|
605
|
+
return;
|
|
606
|
+
}
|
|
538
607
|
void this.fire(job, rearm).then((ran) => {
|
|
539
608
|
if (!ran)
|
|
540
609
|
rearm();
|
|
541
610
|
});
|
|
542
|
-
}
|
|
543
|
-
this.timers.set(job.id, timer);
|
|
611
|
+
});
|
|
544
612
|
}
|
|
545
613
|
nextIntervalRunAfter(scheduledFor, intervalMs, now) {
|
|
546
614
|
let next = scheduledFor + intervalMs;
|
|
@@ -560,9 +628,7 @@ export class CronScheduler {
|
|
|
560
628
|
}
|
|
561
629
|
job.nextRun = next;
|
|
562
630
|
const scheduledFor = next;
|
|
563
|
-
|
|
564
|
-
const timer = setTimeout(() => {
|
|
565
|
-
this.timers.delete(job.id);
|
|
631
|
+
this.armAt(job.id, scheduledFor, () => {
|
|
566
632
|
// Misfire guard for sleep/wake drift. A setTimeout pauses while the host
|
|
567
633
|
// sleeps, then fires the instant the machine wakes — which can be hours
|
|
568
634
|
// off the scheduled wall-clock (observed: a `0 9 * * *` job running at
|
|
@@ -586,8 +652,7 @@ export class CronScheduler {
|
|
|
586
652
|
if (!ran)
|
|
587
653
|
rearm();
|
|
588
654
|
});
|
|
589
|
-
}
|
|
590
|
-
this.timers.set(job.id, timer);
|
|
655
|
+
});
|
|
591
656
|
}
|
|
592
657
|
clearTimer(id) {
|
|
593
658
|
const t = this.timers.get(id);
|
|
@@ -626,11 +691,33 @@ export class CronScheduler {
|
|
|
626
691
|
afterStats();
|
|
627
692
|
// Persist updated run stats so runCount/lastRun/nextRun survive a restart.
|
|
628
693
|
this.persistRunStats(job);
|
|
694
|
+
const startedAt = Date.now();
|
|
695
|
+
this.emitJobEvent({ type: "job_start", job });
|
|
629
696
|
try {
|
|
630
|
-
await this.onExecute?.(job, controller.signal);
|
|
697
|
+
const outcome = await this.onExecute?.(job, controller.signal);
|
|
698
|
+
this.emitJobEvent({
|
|
699
|
+
type: controller.signal.aborted
|
|
700
|
+
? "job_cancelled"
|
|
701
|
+
: outcome?.stoppedReason
|
|
702
|
+
? "job_stopped"
|
|
703
|
+
: "job_end",
|
|
704
|
+
job,
|
|
705
|
+
durationMs: Date.now() - startedAt,
|
|
706
|
+
...(outcome?.stoppedReason ? { reason: outcome.stoppedReason } : {}),
|
|
707
|
+
});
|
|
631
708
|
}
|
|
632
|
-
catch {
|
|
633
|
-
//
|
|
709
|
+
catch (err) {
|
|
710
|
+
// Cancellation is an owner decision, not a job failure. A transport may
|
|
711
|
+
// reject on AbortSignal instead of resolving, so classify from the
|
|
712
|
+
// scheduler-owned signal on both terminal paths.
|
|
713
|
+
this.emitJobEvent({
|
|
714
|
+
type: controller.signal.aborted ? "job_cancelled" : "job_error",
|
|
715
|
+
job,
|
|
716
|
+
durationMs: Date.now() - startedAt,
|
|
717
|
+
...(controller.signal.aborted
|
|
718
|
+
? {}
|
|
719
|
+
: { error: err instanceof Error ? err.message : String(err) }),
|
|
720
|
+
});
|
|
634
721
|
}
|
|
635
722
|
finally {
|
|
636
723
|
// The executor may have recorded lastRunId on the job. Persist only run
|
|
@@ -651,13 +738,15 @@ export class CronScheduler {
|
|
|
651
738
|
}
|
|
652
739
|
}
|
|
653
740
|
/** Validate a schedule string (interval or cron expr) without scheduling. Throws on invalid. */
|
|
654
|
-
function validateSchedule(schedule, timezone) {
|
|
741
|
+
export function validateSchedule(schedule, timezone) {
|
|
742
|
+
// A supplied timezone must always be a real IANA zone, even for interval
|
|
743
|
+
// schedules where it is currently display-only. Persisting inert garbage
|
|
744
|
+
// would later become executable if the schedule is edited to cron.
|
|
745
|
+
if (timezone !== undefined) {
|
|
746
|
+
new Intl.DateTimeFormat("en-US", { timeZone: timezone });
|
|
747
|
+
}
|
|
655
748
|
if (isCronExpression(schedule)) {
|
|
656
749
|
parseCronExpression(schedule); // throws on bad fields
|
|
657
|
-
// Validate timezone is acceptable to Intl (throws RangeError if not).
|
|
658
|
-
if (timezone !== undefined) {
|
|
659
|
-
new Intl.DateTimeFormat("en-US", { timeZone: timezone });
|
|
660
|
-
}
|
|
661
750
|
return;
|
|
662
751
|
}
|
|
663
752
|
parseSchedule(schedule); // throws on bad interval
|
|
@@ -671,6 +760,17 @@ function validateSchedule(schedule, timezone) {
|
|
|
671
760
|
* 10 minutes (review-2026-05-30).
|
|
672
761
|
*/
|
|
673
762
|
export function parseSchedule(schedule) {
|
|
763
|
+
// Reject anything that is not a finite, safe, in-range interval. Long values
|
|
764
|
+
// are no longer an overflow hazard (armAt sleeps in chunks), but a value that
|
|
765
|
+
// cannot survive arithmetic — beyond Number.MAX_SAFE_INTEGER, or an absurd
|
|
766
|
+
// "10 years from now" — is a caller mistake, not a schedule. Failing here
|
|
767
|
+
// keeps `nextRun` and the re-arm math meaningful.
|
|
768
|
+
const accept = (ms) => {
|
|
769
|
+
if (!Number.isSafeInteger(ms) || ms <= 0 || ms > MAX_SCHEDULE_INTERVAL_MS) {
|
|
770
|
+
throw new Error(`Invalid schedule: ${JSON.stringify(schedule)}. Interval must be between 1ms and ${MAX_SCHEDULE_INTERVAL_MS}ms (~10 years).`);
|
|
771
|
+
}
|
|
772
|
+
return ms;
|
|
773
|
+
};
|
|
674
774
|
const match = schedule.match(/^(\d+)(s|m|h|d)$/);
|
|
675
775
|
if (match) {
|
|
676
776
|
const value = parseInt(match[1], 10);
|
|
@@ -680,13 +780,13 @@ export function parseSchedule(schedule) {
|
|
|
680
780
|
if (value > 0) {
|
|
681
781
|
switch (match[2]) {
|
|
682
782
|
case "s":
|
|
683
|
-
return value * 1000;
|
|
783
|
+
return accept(value * 1000);
|
|
684
784
|
case "m":
|
|
685
|
-
return value * 60 * 1000;
|
|
785
|
+
return accept(value * 60 * 1000);
|
|
686
786
|
case "h":
|
|
687
|
-
return value * 60 * 60 * 1000;
|
|
787
|
+
return accept(value * 60 * 60 * 1000);
|
|
688
788
|
case "d":
|
|
689
|
-
return value * 24 * 60 * 60 * 1000;
|
|
789
|
+
return accept(value * 24 * 60 * 60 * 1000);
|
|
690
790
|
}
|
|
691
791
|
}
|
|
692
792
|
}
|
|
@@ -695,7 +795,7 @@ export function parseSchedule(schedule) {
|
|
|
695
795
|
if (/^\d+$/.test(schedule)) {
|
|
696
796
|
const ms = parseInt(schedule, 10);
|
|
697
797
|
if (ms > 0)
|
|
698
|
-
return ms;
|
|
798
|
+
return accept(ms);
|
|
699
799
|
}
|
|
700
800
|
throw new Error(`Invalid schedule: ${JSON.stringify(schedule)}. Use "30s"/"5m"/"1h"/"1d" or a positive number of milliseconds.`);
|
|
701
801
|
}
|
|
@@ -12,8 +12,12 @@
|
|
|
12
12
|
* with a stale in-memory snapshot.
|
|
13
13
|
*/
|
|
14
14
|
import type { CronJob } from "./scheduler.js";
|
|
15
|
-
/**
|
|
16
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Default global location. Mirrors FileRunStore's `~/.code-shell/...` layout.
|
|
17
|
+
* An explicit `root` (a `~/.code-shell`-equivalent data root) overrides the
|
|
18
|
+
* default; absent → today's behavior byte-for-byte.
|
|
19
|
+
*/
|
|
20
|
+
export declare function defaultCronStorePath(root?: string): string;
|
|
17
21
|
export declare class CronStore {
|
|
18
22
|
private readonly file;
|
|
19
23
|
constructor(file?: string);
|
package/dist/automation/store.js
CHANGED
|
@@ -16,9 +16,13 @@ import { dirname, join } from "node:path";
|
|
|
16
16
|
import { homedir } from "node:os";
|
|
17
17
|
import { logger } from "../logging/logger.js";
|
|
18
18
|
import { lockSync } from "../utils/lockfile.js";
|
|
19
|
-
/**
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
/**
|
|
20
|
+
* Default global location. Mirrors FileRunStore's `~/.code-shell/...` layout.
|
|
21
|
+
* An explicit `root` (a `~/.code-shell`-equivalent data root) overrides the
|
|
22
|
+
* default; absent → today's behavior byte-for-byte.
|
|
23
|
+
*/
|
|
24
|
+
export function defaultCronStorePath(root) {
|
|
25
|
+
return join(root ?? join(homedir(), ".code-shell"), "cron.json");
|
|
22
26
|
}
|
|
23
27
|
export class CronStore {
|
|
24
28
|
file;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import type { AgentPreset } from "../preset/index.js";
|
|
2
|
+
import type { BuiltinTool } from "../tool-system/builtin/index.js";
|
|
3
|
+
import type { SandboxBackend } from "../tool-system/sandbox/index.js";
|
|
4
|
+
import type { SessionManager } from "../session/session-manager.js";
|
|
5
|
+
import type { ArtifactKind, ArtifactRole } from "../run/types.js";
|
|
6
|
+
import type { HookEventName } from "../hooks/events.js";
|
|
7
|
+
import type { HookHandler } from "../hooks/registry.js";
|
|
8
|
+
/**
|
|
9
|
+
* A host-installable slice of agent behavior.
|
|
10
|
+
*
|
|
11
|
+
* Core owns the lifecycle and execution contracts; product packages contribute
|
|
12
|
+
* tools, presets, and prompt text through this boundary. Modules are plain data
|
|
13
|
+
* so a host can compose them per Engine without mutating process-global state.
|
|
14
|
+
*/
|
|
15
|
+
export interface CapabilityModule {
|
|
16
|
+
id: string;
|
|
17
|
+
tools?: readonly BuiltinTool[];
|
|
18
|
+
presets?: readonly AgentPreset[];
|
|
19
|
+
/** Preset selected when this capability is installed and the host did not choose one. */
|
|
20
|
+
defaultPreset?: string;
|
|
21
|
+
promptSections?: Readonly<Record<string, string>>;
|
|
22
|
+
/** Volatile, capability-owned context appended after the cacheable prompt prefix. */
|
|
23
|
+
dynamicContextProviders?: readonly CapabilityDynamicContextProvider[];
|
|
24
|
+
/** Optional project boundary for layered instruction discovery. */
|
|
25
|
+
instructionBoundary?: CapabilityInstructionBoundaryFinder;
|
|
26
|
+
/** Runtime services exposed only to this capability's tools. */
|
|
27
|
+
createToolService?(host: CapabilityToolServiceHost): unknown;
|
|
28
|
+
/** Capability-specific run artifact recognition. */
|
|
29
|
+
artifactDetectors?: readonly CapabilityArtifactDetector[];
|
|
30
|
+
/** Pre-mutation snapshot targets for capability-owned compound file tools. */
|
|
31
|
+
fileHistory?: readonly CapabilityFileHistoryContribution[];
|
|
32
|
+
/** Optional validation for persisted product-specific workspace pointers. */
|
|
33
|
+
sessionWorkspace?: SessionWorkspaceCapability;
|
|
34
|
+
/** Trusted in-process handlers joined to this Engine's normal hook chain. */
|
|
35
|
+
engineHooks?: readonly CapabilityEngineHookContribution[];
|
|
36
|
+
adjustToolSelection?(names: Set<string>, context: CapabilityToolSelectionContext): void;
|
|
37
|
+
}
|
|
38
|
+
export interface CapabilityEngineHookContribution {
|
|
39
|
+
event: HookEventName;
|
|
40
|
+
handler: HookHandler;
|
|
41
|
+
priority?: number;
|
|
42
|
+
name?: string;
|
|
43
|
+
}
|
|
44
|
+
export interface ResolvedCapabilityEngineHook extends CapabilityEngineHookContribution {
|
|
45
|
+
capabilityId: string;
|
|
46
|
+
priority: number;
|
|
47
|
+
name: string;
|
|
48
|
+
}
|
|
49
|
+
export interface CapabilityDynamicContext {
|
|
50
|
+
cwd: string;
|
|
51
|
+
preset: AgentPreset;
|
|
52
|
+
}
|
|
53
|
+
export type CapabilityDynamicContextProvider = (context: CapabilityDynamicContext) => string | undefined | Promise<string | undefined>;
|
|
54
|
+
export type CapabilityInstructionBoundaryFinder = (cwd: string) => string | null;
|
|
55
|
+
/** Generic host services from which a capability may build its private tool service. */
|
|
56
|
+
export interface CapabilityToolServiceHost {
|
|
57
|
+
readonly isSubAgent: boolean;
|
|
58
|
+
readonly settings: {
|
|
59
|
+
get(): unknown;
|
|
60
|
+
getForScope(scope: "user" | "project", cwd?: string): unknown;
|
|
61
|
+
};
|
|
62
|
+
resolveSandbox(cwd: string): Promise<SandboxBackend>;
|
|
63
|
+
readShellEnv(cwd?: string): Record<string, string> | undefined;
|
|
64
|
+
getSessionManager(): SessionManager;
|
|
65
|
+
}
|
|
66
|
+
export interface CapabilityArtifact {
|
|
67
|
+
kind: ArtifactKind;
|
|
68
|
+
role: ArtifactRole;
|
|
69
|
+
title: string;
|
|
70
|
+
locator: string;
|
|
71
|
+
metadata?: Record<string, unknown>;
|
|
72
|
+
}
|
|
73
|
+
export interface CapabilityArtifactDetectionContext {
|
|
74
|
+
toolName: string;
|
|
75
|
+
args: Record<string, unknown>;
|
|
76
|
+
resultText?: string;
|
|
77
|
+
}
|
|
78
|
+
export type CapabilityArtifactDetector = (context: CapabilityArtifactDetectionContext) => CapabilityArtifact | readonly CapabilityArtifact[] | undefined;
|
|
79
|
+
export interface CapabilityToolSelectionContext {
|
|
80
|
+
preset: string;
|
|
81
|
+
host?: string;
|
|
82
|
+
}
|
|
83
|
+
export interface SessionWorkspaceCapability {
|
|
84
|
+
validateRoot(root: string): Promise<boolean>;
|
|
85
|
+
branchExists(mainRoot: string, branch: string): Promise<boolean>;
|
|
86
|
+
}
|
|
87
|
+
export interface CapabilityFileHistoryContribution {
|
|
88
|
+
toolName: string;
|
|
89
|
+
resolveTargets(args: Record<string, unknown>, cwd: string): readonly string[];
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Install a capability at a process composition root (CLI/desktop worker).
|
|
93
|
+
* Library consumers should prefer EngineConfig.capabilities for isolation.
|
|
94
|
+
*/
|
|
95
|
+
export declare function registerCapability(capability: CapabilityModule): void;
|
|
96
|
+
/** Primarily useful for isolated hosts and tests that own their process. */
|
|
97
|
+
export declare function unregisterCapability(id: string): void;
|
|
98
|
+
export declare function listRegisteredCapabilities(): CapabilityModule[];
|
|
99
|
+
/** Merge process-installed and per-Engine modules, rejecting ambiguous IDs. */
|
|
100
|
+
export declare function resolveCapabilities(local?: readonly CapabilityModule[]): CapabilityModule[];
|
|
101
|
+
export declare function composeToolCatalog(coreTools: readonly BuiltinTool[], capabilities: readonly CapabilityModule[], extensionModules?: readonly {
|
|
102
|
+
catalogTools?: readonly BuiltinTool[];
|
|
103
|
+
}[]): BuiltinTool[];
|
|
104
|
+
export declare function composePromptSections(capabilities: readonly CapabilityModule[]): Record<string, string>;
|
|
105
|
+
export declare function composeDynamicContextProviders(capabilities: readonly CapabilityModule[]): CapabilityDynamicContextProvider[];
|
|
106
|
+
export declare function composeArtifactDetectors(capabilities: readonly CapabilityModule[]): CapabilityArtifactDetector[];
|
|
107
|
+
/** Normalize code hooks with deterministic names and a product-module priority. */
|
|
108
|
+
export declare function composeCapabilityEngineHooks(capabilities: readonly CapabilityModule[]): ResolvedCapabilityEngineHook[];
|
|
109
|
+
export declare function resolveInstructionBoundary(cwd: string, capabilities: readonly CapabilityModule[]): string | null;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
const installedCapabilities = new Map();
|
|
2
|
+
/**
|
|
3
|
+
* Install a capability at a process composition root (CLI/desktop worker).
|
|
4
|
+
* Library consumers should prefer EngineConfig.capabilities for isolation.
|
|
5
|
+
*/
|
|
6
|
+
export function registerCapability(capability) {
|
|
7
|
+
const existing = installedCapabilities.get(capability.id);
|
|
8
|
+
if (existing === capability)
|
|
9
|
+
return;
|
|
10
|
+
if (existing)
|
|
11
|
+
throw new Error(`Capability '${capability.id}' is already registered`);
|
|
12
|
+
installedCapabilities.set(capability.id, capability);
|
|
13
|
+
}
|
|
14
|
+
/** Primarily useful for isolated hosts and tests that own their process. */
|
|
15
|
+
export function unregisterCapability(id) {
|
|
16
|
+
installedCapabilities.delete(id);
|
|
17
|
+
}
|
|
18
|
+
export function listRegisteredCapabilities() {
|
|
19
|
+
return [...installedCapabilities.values()];
|
|
20
|
+
}
|
|
21
|
+
/** Merge process-installed and per-Engine modules, rejecting ambiguous IDs. */
|
|
22
|
+
export function resolveCapabilities(local = []) {
|
|
23
|
+
const resolved = new Map(installedCapabilities);
|
|
24
|
+
for (const capability of local) {
|
|
25
|
+
const existing = resolved.get(capability.id);
|
|
26
|
+
if (existing && existing !== capability) {
|
|
27
|
+
throw new Error(`Capability '${capability.id}' was provided more than once`);
|
|
28
|
+
}
|
|
29
|
+
resolved.set(capability.id, capability);
|
|
30
|
+
}
|
|
31
|
+
return [...resolved.values()];
|
|
32
|
+
}
|
|
33
|
+
export function composeToolCatalog(coreTools, capabilities, extensionModules = []) {
|
|
34
|
+
const catalog = new Map();
|
|
35
|
+
for (const tool of [
|
|
36
|
+
...coreTools,
|
|
37
|
+
...capabilities.flatMap((capability) => [...(capability.tools ?? [])]),
|
|
38
|
+
...extensionModules.flatMap((module) => [...(module.catalogTools ?? [])]),
|
|
39
|
+
]) {
|
|
40
|
+
const name = tool.definition.name;
|
|
41
|
+
if (catalog.has(name))
|
|
42
|
+
throw new Error(`Tool '${name}' is contributed more than once`);
|
|
43
|
+
catalog.set(name, tool);
|
|
44
|
+
}
|
|
45
|
+
return [...catalog.values()];
|
|
46
|
+
}
|
|
47
|
+
export function composePromptSections(capabilities) {
|
|
48
|
+
const sections = {};
|
|
49
|
+
for (const capability of capabilities) {
|
|
50
|
+
for (const [name, content] of Object.entries(capability.promptSections ?? {})) {
|
|
51
|
+
if (name in sections)
|
|
52
|
+
throw new Error(`Prompt section '${name}' is contributed more than once`);
|
|
53
|
+
sections[name] = content;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return sections;
|
|
57
|
+
}
|
|
58
|
+
export function composeDynamicContextProviders(capabilities) {
|
|
59
|
+
return capabilities.flatMap((capability) => [...(capability.dynamicContextProviders ?? [])]);
|
|
60
|
+
}
|
|
61
|
+
export function composeArtifactDetectors(capabilities) {
|
|
62
|
+
return capabilities.flatMap((capability) => [...(capability.artifactDetectors ?? [])]);
|
|
63
|
+
}
|
|
64
|
+
/** Normalize code hooks with deterministic names and a product-module priority. */
|
|
65
|
+
export function composeCapabilityEngineHooks(capabilities) {
|
|
66
|
+
return capabilities.flatMap((capability) => (capability.engineHooks ?? []).map((hook, index) => ({
|
|
67
|
+
...hook,
|
|
68
|
+
capabilityId: capability.id,
|
|
69
|
+
priority: hook.priority ?? 20,
|
|
70
|
+
name: `capability:${capability.id}:${hook.name ?? `${hook.event}:${index}`}`,
|
|
71
|
+
})));
|
|
72
|
+
}
|
|
73
|
+
export function resolveInstructionBoundary(cwd, capabilities) {
|
|
74
|
+
for (const capability of capabilities) {
|
|
75
|
+
const boundary = capability.instructionBoundary?.(cwd);
|
|
76
|
+
if (boundary)
|
|
77
|
+
return boundary;
|
|
78
|
+
}
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* fold through here so "project on overrides global off" holds everywhere.
|
|
12
12
|
*/
|
|
13
13
|
import { SettingsManager } from "../settings/manager.js";
|
|
14
|
+
import type { CapabilityOverrides } from "../settings/schema.js";
|
|
14
15
|
export interface EffectiveDisabledLists {
|
|
15
16
|
disabledSkills: string[];
|
|
16
17
|
disabledPlugins: string[];
|
|
@@ -22,4 +23,4 @@ export interface EffectiveDisabledLists {
|
|
|
22
23
|
* Compute the effective disabled lists for `cwd`. Never throws — any read
|
|
23
24
|
* error falls back to empty lists (same contract as Engine.readDisabledLists).
|
|
24
25
|
*/
|
|
25
|
-
export declare function computeEffectiveDisabledLists(sm: SettingsManager, cwd: string | undefined): EffectiveDisabledLists;
|
|
26
|
+
export declare function computeEffectiveDisabledLists(sm: SettingsManager, cwd: string | undefined, explicitProfileOverrides?: CapabilityOverrides): EffectiveDisabledLists;
|
|
@@ -13,20 +13,18 @@
|
|
|
13
13
|
import { noRepoDir } from "../settings/manager.js";
|
|
14
14
|
import { scanSkills } from "../skills/scanner.js";
|
|
15
15
|
import { readInstalledPlugins } from "../plugins/installedPlugins.js";
|
|
16
|
-
import { effectiveDisabledList, whitelistDisabledList } from "./overlay.js";
|
|
16
|
+
import { effectiveDisabledList, effectiveProjectOverrides, whitelistDisabledList, } from "./overlay.js";
|
|
17
17
|
/**
|
|
18
18
|
* Compute the effective disabled lists for `cwd`. Never throws — any read
|
|
19
19
|
* error falls back to empty lists (same contract as Engine.readDisabledLists).
|
|
20
20
|
*/
|
|
21
|
-
export function computeEffectiveDisabledLists(sm, cwd) {
|
|
21
|
+
export function computeEffectiveDisabledLists(sm, cwd, explicitProfileOverrides) {
|
|
22
22
|
try {
|
|
23
23
|
const settings = sm.get();
|
|
24
24
|
// Read the project overlay UNMERGED (getForScope), not the merged get(),
|
|
25
25
|
// so tri-state inheritance survives. No cwd / no overlay → the baseline
|
|
26
26
|
// is returned unchanged (zero regression).
|
|
27
|
-
const overrides = cwd
|
|
28
|
-
? sm.getForScope("project", cwd).capabilityOverrides
|
|
29
|
-
: undefined;
|
|
27
|
+
const overrides = effectiveProjectOverrides(sm, cwd, explicitProfileOverrides);
|
|
30
28
|
// no-repo "conversation" scope: INVERT skill/plugin filtering to a
|
|
31
29
|
// whitelist (default-all-off, only explicit "on" survives). Only this
|
|
32
30
|
// fixed cwd flips; every real project keeps the denylist below. agent/
|
|
@@ -12,8 +12,9 @@
|
|
|
12
12
|
* See docs/superpowers/specs/2026-06-01-project-scoped-capabilities-and-session-isolation-design.md
|
|
13
13
|
*/
|
|
14
14
|
import type { CapabilityOverride, CapabilityOverrides } from "../settings/schema.js";
|
|
15
|
+
import type { SettingsManager } from "../settings/manager.js";
|
|
15
16
|
import type { CapabilityDescriptor } from "./types.js";
|
|
16
|
-
/** Buckets in capabilityOverrides
|
|
17
|
+
/** Buckets in capabilityOverrides. */
|
|
17
18
|
export type OverrideBucket = keyof NonNullable<CapabilityOverrides>;
|
|
18
19
|
/** Apply a tri-state override to a baseline. inherit/garbage → baseline. */
|
|
19
20
|
export declare function applyOverride(globalEnabled: boolean, override?: CapabilityOverride): boolean;
|
|
@@ -62,3 +63,15 @@ export declare function effectiveBuiltinLists(globalEnabled: string[], globalDis
|
|
|
62
63
|
enabledBuiltinTools: string[];
|
|
63
64
|
disabledBuiltinTools: string[];
|
|
64
65
|
};
|
|
66
|
+
/**
|
|
67
|
+
* 合并两层三态 overlay:`top`(用户手写 capabilityOverrides)按 key 赢过
|
|
68
|
+
* `base`(profile.overrides 快照)。Pet visibility 属于 host/project 策略,
|
|
69
|
+
* 不可由 portable profile 注入;只保留 top 的直接项目设置。
|
|
70
|
+
*/
|
|
71
|
+
export declare function mergeCapabilityOverrides(base: CapabilityOverrides | undefined, top: CapabilityOverrides | undefined): CapabilityOverrides | undefined;
|
|
72
|
+
/**
|
|
73
|
+
* 项目 overrides 的唯一读取咽喉:profile 快照垫底、用户手写覆盖。
|
|
74
|
+
* 所有折叠消费方(engine / disabled-lists / capability service)必须
|
|
75
|
+
* 经这里读,不得再直接 getForScope().capabilityOverrides。
|
|
76
|
+
*/
|
|
77
|
+
export declare function effectiveProjectOverrides(settings: Pick<SettingsManager, "getForScope">, cwd: string | undefined, explicitProfileOverrides?: CapabilityOverrides): CapabilityOverrides | undefined;
|
|
@@ -114,3 +114,43 @@ export function effectiveBuiltinLists(globalEnabled, globalDisabled, bucket) {
|
|
|
114
114
|
disabledBuiltinTools: [...disabled],
|
|
115
115
|
};
|
|
116
116
|
}
|
|
117
|
+
const PROFILE_MERGED_OVERRIDE_BUCKETS = [
|
|
118
|
+
"skills",
|
|
119
|
+
"plugins",
|
|
120
|
+
"agents",
|
|
121
|
+
"mcp",
|
|
122
|
+
"builtin",
|
|
123
|
+
"pluginHooks",
|
|
124
|
+
];
|
|
125
|
+
/**
|
|
126
|
+
* 合并两层三态 overlay:`top`(用户手写 capabilityOverrides)按 key 赢过
|
|
127
|
+
* `base`(profile.overrides 快照)。Pet visibility 属于 host/project 策略,
|
|
128
|
+
* 不可由 portable profile 注入;只保留 top 的直接项目设置。
|
|
129
|
+
*/
|
|
130
|
+
export function mergeCapabilityOverrides(base, top) {
|
|
131
|
+
const merged = {};
|
|
132
|
+
for (const bucket of PROFILE_MERGED_OVERRIDE_BUCKETS) {
|
|
133
|
+
const combined = { ...(base?.[bucket] ?? {}), ...(top?.[bucket] ?? {}) };
|
|
134
|
+
if (Object.keys(combined).length > 0)
|
|
135
|
+
merged[bucket] = combined;
|
|
136
|
+
}
|
|
137
|
+
if (top?.pet && Object.keys(top.pet).length > 0)
|
|
138
|
+
merged.pet = { ...top.pet };
|
|
139
|
+
return Object.keys(merged).length > 0 ? merged : undefined;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* 项目 overrides 的唯一读取咽喉:profile 快照垫底、用户手写覆盖。
|
|
143
|
+
* 所有折叠消费方(engine / disabled-lists / capability service)必须
|
|
144
|
+
* 经这里读,不得再直接 getForScope().capabilityOverrides。
|
|
145
|
+
*/
|
|
146
|
+
export function effectiveProjectOverrides(settings, cwd, explicitProfileOverrides) {
|
|
147
|
+
if (!cwd)
|
|
148
|
+
return undefined;
|
|
149
|
+
try {
|
|
150
|
+
const scoped = settings.getForScope("project", cwd);
|
|
151
|
+
return mergeCapabilityOverrides(explicitProfileOverrides ?? scoped.profile?.overrides, scoped.capabilityOverrides);
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
return undefined;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import { CapabilityNotFoundError } from "./types.js";
|
|
15
15
|
import { projectBuiltin, projectMcp, projectSkills, projectPlugins, projectAgents, } from "./project.js";
|
|
16
|
-
import { applyOverride, bucketForKind, overrideTokenForId, overrideFor } from "./overlay.js";
|
|
16
|
+
import { applyOverride, bucketForKind, effectiveProjectOverrides, overrideTokenForId, overrideFor, } from "./overlay.js";
|
|
17
17
|
export class CapabilityService {
|
|
18
18
|
deps;
|
|
19
19
|
constructor(deps) {
|
|
@@ -59,19 +59,21 @@ export class CapabilityService {
|
|
|
59
59
|
disabledAgents: s.disabledAgents ?? [],
|
|
60
60
|
}),
|
|
61
61
|
];
|
|
62
|
-
const
|
|
62
|
+
const userOverrides = cwd
|
|
63
63
|
? this.deps.settings.getForScope("project", cwd).capabilityOverrides
|
|
64
64
|
: undefined;
|
|
65
|
+
const foldedOverrides = cwd ? effectiveProjectOverrides(this.deps.settings, cwd) : undefined;
|
|
65
66
|
return base.map((d) => {
|
|
66
67
|
const globalEnabled = d.enabled;
|
|
67
68
|
const token = overrideTokenForId(d.id);
|
|
68
|
-
const ov = cwd ? overrideFor(
|
|
69
|
+
const ov = cwd ? overrideFor(foldedOverrides, d.kind, token) : undefined;
|
|
70
|
+
const userOverride = cwd ? overrideFor(userOverrides, d.kind, token) : undefined;
|
|
69
71
|
const enabled = applyOverride(globalEnabled, ov);
|
|
70
72
|
return {
|
|
71
73
|
...d,
|
|
72
74
|
enabled,
|
|
73
75
|
globalEnabled,
|
|
74
|
-
projectOverride:
|
|
76
|
+
projectOverride: userOverride,
|
|
75
77
|
effectiveSource: ov ? "project" : cwd ? "default" : "user",
|
|
76
78
|
};
|
|
77
79
|
});
|
|
@@ -37,7 +37,7 @@ import { type ValidatedSettings } from "../settings/schema.js";
|
|
|
37
37
|
* reached session engines (slice arrived with only permissionMode+cwd).
|
|
38
38
|
*/
|
|
39
39
|
export declare function resolveSessionAgentConfig(slice: EngineConfigSlice, settings: ValidatedSettings): {
|
|
40
|
-
preset: string;
|
|
40
|
+
preset: string | undefined;
|
|
41
41
|
customSystemPrompt: string | undefined;
|
|
42
42
|
appendSystemPrompt: string | undefined;
|
|
43
43
|
};
|