@cjhyy/code-shell-core 0.7.1 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -23
- package/dist/agent/agent-definition-registry.d.ts +2 -2
- package/dist/agent/agent-definition-registry.js +47 -10
- package/dist/agent/agent-definition.d.ts +5 -0
- package/dist/agent/agent-definition.js +14 -0
- package/dist/automation/index.d.ts +7 -4
- package/dist/automation/index.js +4 -2
- package/dist/automation/runner.js +3 -1
- package/dist/automation/scheduler.d.ts +57 -1
- package/dist/automation/scheduler.js +123 -23
- package/dist/automation/store.d.ts +6 -2
- package/dist/automation/store.js +7 -3
- package/dist/capabilities/index.d.ts +109 -0
- package/dist/capabilities/index.js +80 -0
- package/dist/capability-control/disabled-lists.d.ts +2 -1
- package/dist/capability-control/disabled-lists.js +3 -5
- package/dist/capability-control/overlay.d.ts +14 -1
- package/dist/capability-control/overlay.js +40 -0
- package/dist/capability-control/service.js +6 -4
- package/dist/cli/agent-server-stdio.d.ts +1 -1
- package/dist/cli/agent-server-stdio.js +66 -6
- package/dist/cli/agent-server-tcp.js +7 -3
- package/dist/context/compaction.d.ts +39 -3
- package/dist/context/compaction.js +151 -39
- package/dist/context/manager.d.ts +17 -1
- package/dist/context/manager.js +36 -1
- package/dist/credentials/access.d.ts +3 -1
- package/dist/credentials/access.js +24 -3
- package/dist/credentials/index.d.ts +1 -1
- package/dist/credentials/index.js +1 -1
- package/dist/credentials/oauth.d.ts +4 -1
- package/dist/credentials/oauth.js +14 -0
- package/dist/credentials/store.d.ts +15 -1
- package/dist/credentials/store.js +17 -4
- package/dist/credentials/types.d.ts +24 -0
- package/dist/credentials/use-credential-tool.js +15 -1
- package/dist/engine/auxiliary-pipeline.d.ts +40 -0
- package/dist/engine/auxiliary-pipeline.js +181 -0
- package/dist/{settings → engine}/disk-defaults.d.ts +2 -2
- package/dist/{settings → engine}/disk-defaults.js +5 -2
- package/dist/engine/dynamic-tool-defs.d.ts +4 -0
- package/dist/engine/dynamic-tool-defs.js +4 -0
- package/dist/engine/engine.d.ts +254 -195
- package/dist/engine/engine.js +1812 -2041
- package/dist/engine/file-history-hook.d.ts +11 -0
- package/dist/engine/file-history-hook.js +31 -0
- package/dist/engine/goal-judge-context.d.ts +9 -0
- package/dist/engine/goal-judge-context.js +234 -0
- package/dist/engine/injected-context-cache.d.ts +6 -0
- package/dist/engine/injected-context-cache.js +13 -0
- package/dist/engine/input-attachments.d.ts +1 -1
- package/dist/engine/model-facade.d.ts +3 -3
- package/dist/engine/model-facade.js +15 -14
- package/dist/engine/permission-controller.d.ts +55 -0
- package/dist/engine/permission-controller.js +148 -0
- package/dist/engine/prompt-cache-diagnostics.d.ts +58 -0
- package/dist/engine/prompt-cache-diagnostics.js +178 -0
- package/dist/engine/run-accounting.d.ts +41 -0
- package/dist/engine/run-accounting.js +126 -0
- package/dist/engine/run-context.d.ts +44 -0
- package/dist/engine/run-context.js +88 -0
- package/dist/engine/run-environment.d.ts +30 -0
- package/dist/engine/run-environment.js +77 -0
- package/dist/engine/run-finalize.d.ts +58 -0
- package/dist/engine/run-finalize.js +245 -0
- package/dist/engine/run-goal.d.ts +58 -0
- package/dist/engine/run-goal.js +188 -0
- package/dist/engine/run-image-input.d.ts +1 -1
- package/dist/engine/run-image-input.js +5 -3
- package/dist/engine/run-session-open.d.ts +41 -0
- package/dist/engine/run-session-open.js +186 -0
- package/dist/engine/run-setup.d.ts +42 -0
- package/dist/engine/run-setup.js +58 -0
- package/dist/engine/run-tooling.d.ts +125 -0
- package/dist/engine/run-tooling.js +283 -0
- package/dist/engine/run-types.d.ts +139 -0
- package/dist/engine/run-types.js +12 -0
- package/dist/engine/run-workspace.d.ts +50 -0
- package/dist/engine/run-workspace.js +114 -0
- package/dist/engine/steer-queue.d.ts +1 -1
- package/dist/engine/subagent-spawner.d.ts +32 -0
- package/dist/engine/subagent-spawner.js +287 -0
- package/dist/engine/tool-summary.d.ts +2 -2
- package/dist/engine/tool-summary.js +2 -2
- package/dist/engine/turn-loop.d.ts +49 -10
- package/dist/engine/turn-loop.js +370 -104
- package/dist/engine/types.d.ts +30 -3
- package/dist/engine/types.js +1 -1
- package/dist/{engine/goal.d.ts → goal/lifecycle.d.ts} +76 -4
- package/dist/goal/lifecycle.js +482 -0
- package/dist/hooks/events.d.ts +24 -10
- package/dist/hooks/goal-stop-hook.d.ts +17 -28
- package/dist/hooks/goal-stop-hook.js +110 -465
- package/dist/hooks/registry.js +1 -1
- package/dist/index.d.ts +48 -108
- package/dist/index.extension.d.ts +51 -0
- package/dist/index.extension.js +39 -0
- package/dist/index.internal.d.ts +86 -0
- package/dist/index.internal.js +92 -0
- package/dist/index.js +34 -123
- package/dist/links/cli.d.ts +48 -0
- package/dist/links/cli.js +617 -0
- package/dist/links/http.d.ts +40 -0
- package/dist/links/http.js +166 -0
- package/dist/links/index.d.ts +4 -0
- package/dist/links/index.js +3 -0
- package/dist/links/link-action-tool.d.ts +5 -0
- package/dist/links/link-action-tool.js +241 -0
- package/dist/links/providers.d.ts +8 -0
- package/dist/links/providers.js +665 -0
- package/dist/links/types.d.ts +44 -0
- package/dist/llm/client-base.d.ts +7 -0
- package/dist/llm/client-base.js +60 -0
- package/dist/llm/model-pool.d.ts +1 -1
- package/dist/llm/model-pool.js +1 -1
- package/dist/llm/providers/anthropic.d.ts +1 -0
- package/dist/llm/providers/anthropic.js +9 -0
- package/dist/llm/providers/openai.d.ts +1 -0
- package/dist/llm/providers/openai.js +17 -0
- package/dist/model-catalog/index.js +15 -2
- package/dist/model-catalog/resolve.d.ts +13 -1
- package/dist/model-catalog/resolve.js +37 -2
- package/dist/model-catalog/types.d.ts +74 -48
- package/dist/model-catalog/types.js +16 -5
- package/dist/model-catalog/upsert.d.ts +3 -1
- package/dist/model-catalog/upsert.js +9 -0
- package/dist/onboarding.d.ts +0 -1
- package/dist/onboarding.js +1 -22
- package/dist/panel-apps/bindings.d.ts +24 -0
- package/dist/panel-apps/bindings.js +69 -0
- package/dist/panel-apps/github-archive.d.ts +21 -0
- package/dist/panel-apps/github-archive.js +98 -0
- package/dist/panel-apps/index.d.ts +4 -0
- package/dist/panel-apps/index.js +4 -0
- package/dist/panel-apps/installer.d.ts +68 -0
- package/dist/panel-apps/installer.js +622 -0
- package/dist/panel-apps/manifest.d.ts +364 -0
- package/dist/panel-apps/manifest.js +189 -0
- package/dist/panel-apps/paths.d.ts +13 -0
- package/dist/panel-apps/paths.js +38 -0
- package/dist/panel-apps/registry.d.ts +51 -0
- package/dist/panel-apps/registry.js +99 -0
- package/dist/panel-apps/runtime.d.ts +80 -0
- package/dist/panel-apps/runtime.js +154 -0
- package/dist/plugins/gitOps.js +8 -1
- package/dist/plugins/installedPlugins.d.ts +2 -1
- package/dist/plugins/installedPlugins.js +146 -8
- package/dist/plugins/installer/codex/convertAgents.d.ts +4 -1
- package/dist/plugins/installer/codex/convertAgents.js +62 -8
- package/dist/plugins/installer/codex/convertCommands.d.ts +5 -5
- package/dist/plugins/installer/codex/convertCommands.js +35 -12
- package/dist/plugins/installer/codex/convertHooks.d.ts +10 -0
- package/dist/plugins/installer/codex/convertHooks.js +82 -0
- package/dist/plugins/installer/codex/convertSkills.js +41 -6
- package/dist/plugins/installer/install.d.ts +7 -1
- package/dist/plugins/installer/install.js +21 -87
- package/dist/plugins/installer/installFromArchive.d.ts +26 -4
- package/dist/plugins/installer/installFromArchive.js +44 -27
- package/dist/plugins/installer/installFromNpm.d.ts +31 -0
- package/dist/plugins/installer/installFromNpm.js +273 -0
- package/dist/plugins/installer/loadPluginAgents.js +17 -4
- package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
- package/dist/plugins/installer/loadPluginMcp.js +245 -35
- package/dist/plugins/installer/normalizeManifest.d.ts +13 -0
- package/dist/plugins/installer/normalizeManifest.js +306 -0
- package/dist/plugins/installer/npmTar.d.ts +13 -0
- package/dist/plugins/installer/npmTar.js +321 -0
- package/dist/plugins/installer/parseSource.d.ts +11 -0
- package/dist/plugins/installer/parseSource.js +48 -0
- package/dist/plugins/installer/preview.d.ts +101 -0
- package/dist/plugins/installer/preview.js +336 -0
- package/dist/plugins/installer/projectPluginSource.d.ts +14 -0
- package/dist/plugins/installer/projectPluginSource.js +140 -0
- package/dist/plugins/installer/types.d.ts +775 -0
- package/dist/plugins/installer/types.js +100 -0
- package/dist/plugins/installer/unzip.d.ts +11 -0
- package/dist/plugins/installer/unzip.js +123 -9
- package/dist/plugins/installer/update.d.ts +2 -2
- package/dist/plugins/installer/update.js +43 -4
- package/dist/plugins/loadPluginHooks.d.ts +19 -2
- package/dist/plugins/loadPluginHooks.js +97 -86
- package/dist/plugins/pluginAutomationTemplates.d.ts +18 -0
- package/dist/plugins/pluginAutomationTemplates.js +50 -0
- package/dist/plugins/pluginCatalog.d.ts +45 -0
- package/dist/plugins/pluginCatalog.js +87 -0
- package/dist/plugins/pluginCommandHook.d.ts +6 -0
- package/dist/plugins/pluginCommandHook.js +25 -8
- package/dist/plugins/pluginCommandsLoader.d.ts +19 -0
- package/dist/plugins/pluginCommandsLoader.js +181 -7
- package/dist/plugins/pluginContent.d.ts +10 -1
- package/dist/plugins/pluginContent.js +87 -30
- package/dist/plugins/pluginHookApproval.d.ts +30 -0
- package/dist/plugins/pluginHookApproval.js +160 -0
- package/dist/plugins/pluginHookIntegrity.d.ts +69 -0
- package/dist/plugins/pluginHookIntegrity.js +361 -0
- package/dist/plugins/pluginInstaller.js +71 -12
- package/dist/plugins/pluginMcpApproval.d.ts +19 -0
- package/dist/plugins/pluginMcpApproval.js +110 -0
- package/dist/plugins/pluginMcpIntegrity.d.ts +21 -0
- package/dist/plugins/pluginMcpIntegrity.js +74 -0
- package/dist/plugins/types.d.ts +30 -0
- package/dist/plugins/varRewrite.d.ts +9 -5
- package/dist/plugins/varRewrite.js +26 -17
- package/dist/preset/index.d.ts +11 -8
- package/dist/preset/index.js +62 -203
- package/dist/product/define.js +9 -3
- package/dist/product/types.d.ts +0 -2
- package/dist/profile/activation.d.ts +36 -0
- package/dist/profile/activation.js +57 -0
- package/dist/profile/catalog-store.d.ts +77 -0
- package/dist/profile/catalog-store.js +346 -0
- package/dist/profile/catalog.d.ts +54 -0
- package/dist/profile/catalog.js +152 -0
- package/dist/profile/index.d.ts +7 -0
- package/dist/profile/index.js +7 -0
- package/dist/profile/requirements.d.ts +76 -0
- package/dist/profile/requirements.js +117 -0
- package/dist/profile/resolve.d.ts +11 -0
- package/dist/profile/resolve.js +41 -0
- package/dist/profile/store.d.ts +17 -0
- package/dist/profile/store.js +167 -0
- package/dist/profile/types.d.ts +321 -0
- package/dist/profile/types.js +104 -0
- package/dist/prompt/composer.d.ts +46 -7
- package/dist/prompt/composer.js +78 -48
- package/dist/prompt/instruction-scanner.d.ts +6 -5
- package/dist/prompt/instruction-scanner.js +8 -23
- package/dist/prompt/section-loader.d.ts +2 -2
- package/dist/prompt/section-loader.js +7 -4
- package/dist/prompt/sections/browser.md +10 -9
- package/dist/prompt/sections/harness-base.md +9 -0
- package/dist/protocol/chat-session-manager.d.ts +64 -1
- package/dist/protocol/chat-session-manager.js +104 -0
- package/dist/protocol/chat-session.d.ts +61 -10
- package/dist/protocol/chat-session.js +135 -25
- package/dist/protocol/client.d.ts +33 -3
- package/dist/protocol/client.js +96 -5
- package/dist/protocol/index.d.ts +2 -2
- package/dist/protocol/index.js +2 -2
- package/dist/protocol/mobile-remote-types.d.ts +406 -0
- package/dist/protocol/mobile-remote-types.js +1 -0
- package/dist/protocol/server.d.ts +127 -3
- package/dist/protocol/server.js +1309 -182
- package/dist/protocol/types.d.ts +152 -34
- package/dist/protocol/types.js +16 -0
- package/dist/run/ArtifactTracker.d.ts +6 -1
- package/dist/run/ArtifactTracker.js +29 -21
- package/dist/run/EngineRunner.d.ts +2 -0
- package/dist/run/EngineRunner.js +1 -0
- package/dist/run/RunManager.d.ts +26 -0
- package/dist/run/RunManager.js +82 -11
- package/dist/run/factory.d.ts +3 -0
- package/dist/run/factory.js +2 -0
- package/dist/runtime/safe-spawn.d.ts +6 -0
- package/dist/runtime/safe-spawn.js +8 -13
- package/dist/services/auto-dream.d.ts +13 -1
- package/dist/services/auto-dream.js +56 -8
- package/dist/services/dream-consolidation.js +10 -1
- package/dist/services/memory-orchestrator.js +6 -2
- package/dist/services/oauth.js +4 -1
- package/dist/services/session-memory.d.ts +4 -4
- package/dist/services/session-memory.js +13 -10
- package/dist/session/memory.d.ts +26 -7
- package/dist/session/memory.js +79 -21
- package/dist/session/session-manager.d.ts +182 -28
- package/dist/session/session-manager.js +910 -130
- package/dist/session/session-message.d.ts +22 -0
- package/dist/session/session-message.js +1 -0
- package/dist/session/transcript.d.ts +46 -5
- package/dist/session/transcript.js +159 -3
- package/dist/settings/feature-flags.d.ts +40 -0
- package/dist/settings/feature-flags.js +40 -0
- package/dist/settings/manager.d.ts +39 -1
- package/dist/settings/manager.js +102 -41
- package/dist/settings/migrate-config.js +4 -2
- package/dist/settings/schema.d.ts +511 -177
- package/dist/settings/schema.js +98 -25
- package/dist/skills/scanner.d.ts +6 -2
- package/dist/skills/scanner.js +160 -9
- package/dist/sources/adapter.d.ts +14 -0
- package/dist/sources/adapter.js +7 -0
- package/dist/sources/adapters/local-files.d.ts +10 -0
- package/dist/sources/adapters/local-files.js +127 -0
- package/dist/sources/adapters/mcp-resource.d.ts +17 -0
- package/dist/sources/adapters/mcp-resource.js +41 -0
- package/dist/sources/adapters/mock.d.ts +3 -0
- package/dist/sources/adapters/mock.js +29 -0
- package/dist/sources/binding.d.ts +6 -0
- package/dist/sources/binding.js +24 -0
- package/dist/sources/catalog.d.ts +6 -0
- package/dist/sources/catalog.js +64 -0
- package/dist/sources/context-summary.d.ts +8 -0
- package/dist/sources/context-summary.js +13 -0
- package/dist/sources/credential-status.d.ts +2 -0
- package/dist/sources/credential-status.js +13 -0
- package/dist/sources/index.d.ts +10 -0
- package/dist/sources/index.js +10 -0
- package/dist/sources/resolve.d.ts +28 -0
- package/dist/sources/resolve.js +47 -0
- package/dist/sources/truncate-utf8.d.ts +7 -0
- package/dist/sources/truncate-utf8.js +18 -0
- package/dist/sources/types.d.ts +71 -0
- package/dist/sources/types.js +26 -0
- package/dist/testing/fetch-stub.d.ts +32 -0
- package/dist/testing/fetch-stub.js +24 -0
- package/dist/themes/image.d.ts +18 -0
- package/dist/themes/image.js +117 -0
- package/dist/themes/index.d.ts +4 -0
- package/dist/themes/index.js +4 -0
- package/dist/themes/installer.d.ts +50 -0
- package/dist/themes/installer.js +290 -0
- package/dist/themes/manifest.d.ts +102 -0
- package/dist/themes/manifest.js +86 -0
- package/dist/themes/paths.d.ts +14 -0
- package/dist/themes/paths.js +33 -0
- package/dist/tool-system/browser-bridge.d.ts +53 -11
- package/dist/tool-system/browser-bridge.js +8 -9
- package/dist/tool-system/builtin/agent-heartbeat.d.ts +2 -2
- package/dist/tool-system/builtin/agent-heartbeat.js +20 -6
- package/dist/tool-system/builtin/agent-notifications.d.ts +127 -72
- package/dist/tool-system/builtin/agent-notifications.js +291 -101
- package/dist/tool-system/builtin/agent-output-file.js +1 -3
- package/dist/tool-system/builtin/agent-progress.d.ts +6 -0
- package/dist/tool-system/builtin/agent-progress.js +83 -0
- package/dist/tool-system/builtin/agent-registry.d.ts +38 -2
- package/dist/tool-system/builtin/agent-registry.js +178 -9
- package/dist/tool-system/builtin/agent-transcript-translator.js +1 -1
- package/dist/tool-system/builtin/agent.d.ts +2 -0
- package/dist/tool-system/builtin/agent.js +274 -33
- package/dist/tool-system/builtin/background-jobs.d.ts +55 -2
- package/dist/tool-system/builtin/background-jobs.js +96 -4
- package/dist/tool-system/builtin/background-work.d.ts +6 -0
- package/dist/tool-system/builtin/background-work.js +8 -1
- package/dist/tool-system/builtin/bash.js +5 -2
- package/dist/tool-system/builtin/browser-tools.d.ts +6 -3
- package/dist/tool-system/builtin/browser-tools.js +89 -23
- package/dist/tool-system/builtin/edit-model-catalog.d.ts +6 -0
- package/dist/tool-system/builtin/edit-model-catalog.js +172 -12
- package/dist/tool-system/builtin/edit.js +2 -6
- package/dist/tool-system/builtin/file-cache.d.ts +2 -0
- package/dist/tool-system/builtin/file-cache.js +4 -0
- package/dist/tool-system/builtin/generate-image.js +17 -10
- package/dist/tool-system/builtin/generate-video.js +26 -7
- package/dist/tool-system/builtin/grep.js +2 -2
- package/dist/tool-system/builtin/image-uploader.js +7 -1
- package/dist/tool-system/builtin/index.d.ts +32 -7
- package/dist/tool-system/builtin/index.js +237 -167
- package/dist/tool-system/builtin/memory.d.ts +6 -0
- package/dist/tool-system/builtin/memory.js +36 -15
- package/dist/tool-system/builtin/panel.d.ts +9 -0
- package/dist/tool-system/builtin/panel.js +314 -0
- package/dist/tool-system/builtin/read.js +5 -1
- package/dist/tool-system/builtin/send-message-to-session.d.ts +6 -0
- package/dist/tool-system/builtin/send-message-to-session.js +67 -0
- package/dist/tool-system/builtin/sources.d.ts +8 -0
- package/dist/tool-system/builtin/sources.js +137 -0
- package/dist/tool-system/builtin/tool-search.js +7 -2
- package/dist/tool-system/builtin/update-automation-memory.js +2 -0
- package/dist/tool-system/builtin/web-fetch.js +17 -13
- package/dist/tool-system/builtin/web-search.js +1 -3
- package/dist/tool-system/capability-module.d.ts +93 -0
- package/dist/tool-system/capability-module.js +53 -0
- package/dist/tool-system/context.d.ts +77 -19
- package/dist/tool-system/executor.js +75 -50
- package/dist/tool-system/external-tool-exposure.d.ts +60 -0
- package/dist/tool-system/external-tool-exposure.js +304 -0
- package/dist/tool-system/mcp-manager.d.ts +11 -1
- package/dist/tool-system/mcp-manager.js +19 -4
- package/dist/tool-system/mcp-tool-policy.d.ts +9 -0
- package/dist/tool-system/mcp-tool-policy.js +34 -0
- package/dist/tool-system/panel-bridge.d.ts +53 -0
- package/dist/tool-system/panel-bridge.js +1 -0
- package/dist/tool-system/permission.d.ts +26 -0
- package/dist/tool-system/permission.js +46 -0
- package/dist/tool-system/registry.d.ts +12 -1
- package/dist/tool-system/registry.js +31 -7
- package/dist/tool-system/sandbox/index.js +3 -8
- package/dist/tool-system/sandbox/seatbelt.js +2 -6
- package/dist/tool-system/session-tool-host.d.ts +139 -0
- package/dist/tool-system/session-tool-host.js +167 -0
- package/dist/tool-system/testing/tool-registry-harness.d.ts +31 -0
- package/dist/tool-system/testing/tool-registry-harness.js +51 -0
- package/dist/tool-system/validation.d.ts +14 -7
- package/dist/tool-system/validation.js +701 -7
- package/dist/types.d.ts +186 -20
- package/dist/{cc-orchestrator → utils}/cwd-normalize.d.ts +1 -0
- package/dist/{cc-orchestrator → utils}/cwd-normalize.js +1 -0
- package/dist/utils/file-mutex.d.ts +65 -0
- package/dist/utils/file-mutex.js +145 -0
- package/dist/utils/json.d.ts +2 -4
- package/dist/utils/json.js +2 -4
- package/dist/utils/lockfile.d.ts +30 -1
- package/dist/utils/lockfile.js +2 -2
- package/dist/utils/secret-scrubber.d.ts +8 -0
- package/dist/utils/secret-scrubber.js +227 -0
- package/dist/utils/toolDisplay.js +1 -1
- package/package.json +20 -5
- package/THIRD_PARTY_NOTICES.md +0 -206
- package/dist/arena/arena.d.ts +0 -45
- package/dist/arena/arena.js +0 -362
- package/dist/arena/context/context-tools.d.ts +0 -16
- package/dist/arena/context/context-tools.js +0 -272
- package/dist/arena/context/within-root.d.ts +0 -7
- package/dist/arena/context/within-root.js +0 -15
- package/dist/arena/detect-mode.d.ts +0 -20
- package/dist/arena/detect-mode.js +0 -78
- package/dist/arena/digest-builder.d.ts +0 -25
- package/dist/arena/digest-builder.js +0 -120
- package/dist/arena/index.d.ts +0 -29
- package/dist/arena/index.js +0 -29
- package/dist/arena/iterate/convergence.d.ts +0 -25
- package/dist/arena/iterate/convergence.js +0 -103
- package/dist/arena/iterate/formats/index.d.ts +0 -22
- package/dist/arena/iterate/formats/index.js +0 -283
- package/dist/arena/iterate/index.d.ts +0 -11
- package/dist/arena/iterate/index.js +0 -9
- package/dist/arena/iterate/iterative-arena.d.ts +0 -23
- package/dist/arena/iterate/iterative-arena.js +0 -237
- package/dist/arena/iterate/parse.d.ts +0 -42
- package/dist/arena/iterate/parse.js +0 -123
- package/dist/arena/iterate/phases/argue.d.ts +0 -22
- package/dist/arena/iterate/phases/argue.js +0 -165
- package/dist/arena/iterate/phases/revise.d.ts +0 -16
- package/dist/arena/iterate/phases/revise.js +0 -62
- package/dist/arena/iterate/phases/tournament.d.ts +0 -34
- package/dist/arena/iterate/phases/tournament.js +0 -113
- package/dist/arena/iterate/tools/web-tools.d.ts +0 -13
- package/dist/arena/iterate/tools/web-tools.js +0 -54
- package/dist/arena/iterate/types.d.ts +0 -152
- package/dist/arena/iterate/types.js +0 -8
- package/dist/arena/ledger.d.ts +0 -47
- package/dist/arena/ledger.js +0 -159
- package/dist/arena/lenses/architecture.d.ts +0 -5
- package/dist/arena/lenses/architecture.js +0 -22
- package/dist/arena/lenses/engineering.d.ts +0 -5
- package/dist/arena/lenses/engineering.js +0 -22
- package/dist/arena/lenses/general.d.ts +0 -5
- package/dist/arena/lenses/general.js +0 -20
- package/dist/arena/lenses/index.d.ts +0 -16
- package/dist/arena/lenses/index.js +0 -47
- package/dist/arena/lenses/product.d.ts +0 -5
- package/dist/arena/lenses/product.js +0 -22
- package/dist/arena/model-presets.d.ts +0 -23
- package/dist/arena/model-presets.js +0 -44
- package/dist/arena/phases/adjudication.d.ts +0 -25
- package/dist/arena/phases/adjudication.js +0 -142
- package/dist/arena/phases/build-consensus.d.ts +0 -30
- package/dist/arena/phases/build-consensus.js +0 -85
- package/dist/arena/phases/claim-registry.d.ts +0 -26
- package/dist/arena/phases/claim-registry.js +0 -60
- package/dist/arena/phases/cross-review.d.ts +0 -47
- package/dist/arena/phases/cross-review.js +0 -224
- package/dist/arena/phases/debate-rounds.d.ts +0 -28
- package/dist/arena/phases/debate-rounds.js +0 -161
- package/dist/arena/phases/participant-research.d.ts +0 -39
- package/dist/arena/phases/participant-research.js +0 -316
- package/dist/arena/phases/planning-detail-expansion.d.ts +0 -39
- package/dist/arena/phases/planning-detail-expansion.js +0 -120
- package/dist/arena/planner.d.ts +0 -28
- package/dist/arena/planner.js +0 -312
- package/dist/arena/providers/docs.d.ts +0 -7
- package/dist/arena/providers/docs.js +0 -111
- package/dist/arena/providers/git.d.ts +0 -8
- package/dist/arena/providers/git.js +0 -174
- package/dist/arena/providers/index.d.ts +0 -32
- package/dist/arena/providers/index.js +0 -132
- package/dist/arena/providers/none.d.ts +0 -7
- package/dist/arena/providers/none.js +0 -11
- package/dist/arena/providers/repo.d.ts +0 -7
- package/dist/arena/providers/repo.js +0 -258
- package/dist/arena/render/session.d.ts +0 -17
- package/dist/arena/render/session.js +0 -190
- package/dist/arena/render/terminal.d.ts +0 -34
- package/dist/arena/render/terminal.js +0 -286
- package/dist/arena/strategies/discussion.d.ts +0 -25
- package/dist/arena/strategies/discussion.js +0 -143
- package/dist/arena/strategies/index.d.ts +0 -15
- package/dist/arena/strategies/index.js +0 -28
- package/dist/arena/strategies/language-wrapper.d.ts +0 -17
- package/dist/arena/strategies/language-wrapper.js +0 -102
- package/dist/arena/strategies/lens-wrapper.d.ts +0 -16
- package/dist/arena/strategies/lens-wrapper.js +0 -236
- package/dist/arena/strategies/planning.d.ts +0 -30
- package/dist/arena/strategies/planning.js +0 -225
- package/dist/arena/strategies/review.d.ts +0 -26
- package/dist/arena/strategies/review.js +0 -168
- package/dist/arena/strategies/utils.d.ts +0 -36
- package/dist/arena/strategies/utils.js +0 -603
- package/dist/arena/tools/selector.d.ts +0 -17
- package/dist/arena/tools/selector.js +0 -61
- package/dist/arena/transitions.d.ts +0 -53
- package/dist/arena/transitions.js +0 -97
- package/dist/arena/types.d.ts +0 -518
- package/dist/arena/types.js +0 -27
- package/dist/cc-orchestrator/agent-adapter.d.ts +0 -54
- package/dist/cc-orchestrator/agent-adapter.js +0 -143
- package/dist/cc-orchestrator/cc-capability.d.ts +0 -19
- package/dist/cc-orchestrator/cc-capability.js +0 -53
- package/dist/cc-orchestrator/codex-session-discovery.d.ts +0 -24
- package/dist/cc-orchestrator/codex-session-discovery.js +0 -191
- package/dist/cc-orchestrator/codex-session-history.d.ts +0 -38
- package/dist/cc-orchestrator/codex-session-history.js +0 -247
- package/dist/cc-orchestrator/external-agent-bindings.d.ts +0 -27
- package/dist/cc-orchestrator/external-agent-bindings.js +0 -150
- package/dist/cc-orchestrator/external-agent-changes.d.ts +0 -19
- package/dist/cc-orchestrator/external-agent-changes.js +0 -231
- package/dist/cc-orchestrator/external-agent-driver.d.ts +0 -19
- package/dist/cc-orchestrator/external-agent-driver.js +0 -284
- package/dist/cc-orchestrator/external-agent-session-store.d.ts +0 -23
- package/dist/cc-orchestrator/external-agent-session-store.js +0 -146
- package/dist/cc-orchestrator/index.d.ts +0 -8
- package/dist/cc-orchestrator/index.js +0 -8
- package/dist/cc-orchestrator/relevance-judge.d.ts +0 -15
- package/dist/cc-orchestrator/relevance-judge.js +0 -29
- package/dist/cc-orchestrator/session-discovery.d.ts +0 -46
- package/dist/cc-orchestrator/session-discovery.js +0 -125
- package/dist/cc-orchestrator/session-history.d.ts +0 -54
- package/dist/cc-orchestrator/session-history.js +0 -150
- package/dist/cron/cron-runtime.d.ts +0 -2
- package/dist/cron/cron-runtime.js +0 -2
- package/dist/cron/cron-store.d.ts +0 -2
- package/dist/cron/cron-store.js +0 -2
- package/dist/cron/scheduler.d.ts +0 -7
- package/dist/cron/scheduler.js +0 -7
- package/dist/engine/goal.js +0 -206
- package/dist/external-agents/config.d.ts +0 -2
- package/dist/external-agents/config.js +0 -15
- package/dist/external-agents/types.d.ts +0 -31
- package/dist/git/parse-log.d.ts +0 -13
- package/dist/git/parse-log.js +0 -21
- package/dist/git/utils.d.ts +0 -49
- package/dist/git/utils.js +0 -161
- package/dist/git/worktree/crud.d.ts +0 -72
- package/dist/git/worktree/crud.js +0 -235
- package/dist/git/worktree/diff.d.ts +0 -14
- package/dist/git/worktree/diff.js +0 -82
- package/dist/git/worktree/git-exec.d.ts +0 -7
- package/dist/git/worktree/git-exec.js +0 -87
- package/dist/git/worktree/index.d.ts +0 -5
- package/dist/git/worktree/index.js +0 -5
- package/dist/git/worktree/query.d.ts +0 -43
- package/dist/git/worktree/query.js +0 -128
- package/dist/git/worktree/slug.d.ts +0 -11
- package/dist/git/worktree/slug.js +0 -58
- package/dist/git/worktree.d.ts +0 -1
- package/dist/git/worktree.js +0 -5
- package/dist/lsp/client.d.ts +0 -41
- package/dist/lsp/client.js +0 -186
- package/dist/lsp/manager.d.ts +0 -40
- package/dist/lsp/manager.js +0 -155
- package/dist/lsp/root-path.d.ts +0 -9
- package/dist/lsp/root-path.js +0 -12
- package/dist/lsp/servers.d.ts +0 -16
- package/dist/lsp/servers.js +0 -60
- package/dist/prompt/sections/coding.md +0 -35
- package/dist/quota/credentials.d.ts +0 -3
- package/dist/quota/credentials.js +0 -80
- package/dist/quota/index.d.ts +0 -36
- package/dist/quota/index.js +0 -155
- package/dist/quota/types.d.ts +0 -48
- package/dist/quota/types.js +0 -13
- package/dist/review/review-prompt.d.ts +0 -28
- package/dist/review/review-prompt.js +0 -81
- package/dist/state.d.ts +0 -160
- package/dist/state.js +0 -267
- package/dist/tool-system/builtin/apply-patch/applier.d.ts +0 -26
- package/dist/tool-system/builtin/apply-patch/applier.js +0 -308
- package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +0 -10
- package/dist/tool-system/builtin/apply-patch/backup-targets.js +0 -30
- package/dist/tool-system/builtin/apply-patch/index.d.ts +0 -20
- package/dist/tool-system/builtin/apply-patch/index.js +0 -105
- package/dist/tool-system/builtin/apply-patch/parser.d.ts +0 -17
- package/dist/tool-system/builtin/apply-patch/parser.js +0 -212
- package/dist/tool-system/builtin/apply-patch/seek-sequence.d.ts +0 -18
- package/dist/tool-system/builtin/apply-patch/seek-sequence.js +0 -123
- package/dist/tool-system/builtin/apply-patch/types.d.ts +0 -49
- package/dist/tool-system/builtin/apply-patch/types.js +0 -13
- package/dist/tool-system/builtin/arena.d.ts +0 -31
- package/dist/tool-system/builtin/arena.js +0 -416
- package/dist/tool-system/builtin/brief.d.ts +0 -6
- package/dist/tool-system/builtin/brief.js +0 -41
- package/dist/tool-system/builtin/check-quota.d.ts +0 -15
- package/dist/tool-system/builtin/check-quota.js +0 -34
- package/dist/tool-system/builtin/drive-claude-code.d.ts +0 -51
- package/dist/tool-system/builtin/drive-claude-code.js +0 -698
- package/dist/tool-system/builtin/lsp.d.ts +0 -7
- package/dist/tool-system/builtin/lsp.js +0 -144
- package/dist/tool-system/builtin/notebook-edit.d.ts +0 -7
- package/dist/tool-system/builtin/notebook-edit.js +0 -127
- package/dist/tool-system/builtin/worktree.d.ts +0 -11
- package/dist/tool-system/builtin/worktree.js +0 -363
- /package/dist/{external-agents → links}/types.js +0 -0
- /package/dist/{engine/session-usage.d.ts → session/usage.d.ts} +0 -0
- /package/dist/{engine/session-usage.js → session/usage.js} +0 -0
|
@@ -30,22 +30,24 @@
|
|
|
30
30
|
* PreCompact → pre_compact
|
|
31
31
|
* Notification → notification
|
|
32
32
|
* Stop → on_session_end
|
|
33
|
-
* SubagentStop → (
|
|
33
|
+
* SubagentStop → notification (implied matcher on kind ^agent_(completed|failed|cancelled)$)
|
|
34
34
|
*
|
|
35
35
|
* matcher semantics:
|
|
36
36
|
* SessionStart — matches against ctx.data.source ("startup"|"resume"|"clear"|"compact")
|
|
37
37
|
* PreToolUse /
|
|
38
38
|
* PostToolUse — matches against ctx.data.toolName
|
|
39
|
+
* Notification /
|
|
40
|
+
* SubagentStop — matches against ctx.data.kind (agent_* terminal states,
|
|
41
|
+
* approval_requested/resolved, mcp_server_*, …)
|
|
39
42
|
* other events — matcher is currently ignored (the CC spec doesn't
|
|
40
43
|
* define matcher semantics for them either)
|
|
41
44
|
*
|
|
42
45
|
* Errors are swallowed per-plugin: a malformed hooks.json from one plugin
|
|
43
46
|
* must not block other plugins from loading.
|
|
44
47
|
*/
|
|
45
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
46
|
-
import { join } from "node:path";
|
|
47
48
|
import { readInstalledPlugins } from "./installedPlugins.js";
|
|
48
49
|
import { runPluginCommandHook } from "./pluginCommandHook.js";
|
|
50
|
+
import { inspectPluginHooks, pluginHookApprovalState, verifyPluginHookIntegrity, } from "./pluginHookIntegrity.js";
|
|
49
51
|
/** Priority for plugin hooks — between built-in (100) and settings (50). */
|
|
50
52
|
const PLUGIN_HOOK_PRIORITY = 80;
|
|
51
53
|
const EVENT_NAME_MAP = {
|
|
@@ -56,31 +58,24 @@ const EVENT_NAME_MAP = {
|
|
|
56
58
|
PreCompact: "pre_compact",
|
|
57
59
|
Notification: "notification",
|
|
58
60
|
Stop: "on_session_end",
|
|
59
|
-
|
|
61
|
+
// Sub-agent terminal states surface on the notification hook with
|
|
62
|
+
// kind "agent_completed" / "agent_failed" / "agent_cancelled"; the matcher
|
|
63
|
+
// filters on that kind, so SubagentStop maps to a kind-filtered
|
|
64
|
+
// notification subscription (notify-only — codeshell sub-agent stops are
|
|
65
|
+
// not interceptable the way CC's SubagentStop is).
|
|
66
|
+
SubagentStop: "notification",
|
|
67
|
+
};
|
|
68
|
+
/** CC events whose codeshell notification `kind` the matcher defaults to when absent. */
|
|
69
|
+
const IMPLIED_NOTIFICATION_KIND = {
|
|
70
|
+
SubagentStop: "^agent_(completed|failed|cancelled)$",
|
|
60
71
|
};
|
|
61
|
-
function readHooksJson(installPath) {
|
|
62
|
-
const path = join(installPath, "hooks", "hooks.json");
|
|
63
|
-
if (!existsSync(path))
|
|
64
|
-
return null;
|
|
65
|
-
try {
|
|
66
|
-
const raw = JSON.parse(readFileSync(path, "utf8"));
|
|
67
|
-
if (raw && typeof raw === "object" && !Array.isArray(raw)) {
|
|
68
|
-
return raw;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
catch (err) {
|
|
72
|
-
// eslint-disable-next-line no-console
|
|
73
|
-
console.warn(`[plugin-hooks] failed to parse ${path}:`, err.message);
|
|
74
|
-
}
|
|
75
|
-
return null;
|
|
76
|
-
}
|
|
77
72
|
/**
|
|
78
73
|
* Per-event matcher logic. Returns true when the hook should fire.
|
|
79
74
|
*
|
|
80
75
|
* We only consult the matcher for events where CC defines its semantics;
|
|
81
76
|
* for others we always fire (matcher is treated as advisory metadata only).
|
|
82
77
|
*/
|
|
83
|
-
function matcherAccepts(event, matcher, ctx) {
|
|
78
|
+
export function matcherAccepts(event, matcher, ctx) {
|
|
84
79
|
if (!matcher)
|
|
85
80
|
return true;
|
|
86
81
|
let re;
|
|
@@ -88,8 +83,9 @@ function matcherAccepts(event, matcher, ctx) {
|
|
|
88
83
|
re = new RegExp(matcher);
|
|
89
84
|
}
|
|
90
85
|
catch {
|
|
91
|
-
//
|
|
92
|
-
|
|
86
|
+
// Runtime definitions are pre-validated, but direct callers still fail
|
|
87
|
+
// closed if they supply an invalid expression.
|
|
88
|
+
return false;
|
|
93
89
|
}
|
|
94
90
|
if (event === "on_session_start") {
|
|
95
91
|
const source = ctx.data.source;
|
|
@@ -103,12 +99,36 @@ function matcherAccepts(event, matcher, ctx) {
|
|
|
103
99
|
return false;
|
|
104
100
|
return re.test(toolName);
|
|
105
101
|
}
|
|
102
|
+
if (event === "notification") {
|
|
103
|
+
// Notification fan-in carries a `kind` discriminator (agent_* terminal
|
|
104
|
+
// states, approval_requested/resolved, mcp_server_*…). Matcher filters on
|
|
105
|
+
// it so a subscriber only wakes for the kinds it cares about.
|
|
106
|
+
const kind = ctx.data.kind;
|
|
107
|
+
if (typeof kind !== "string")
|
|
108
|
+
return true;
|
|
109
|
+
return re.test(kind);
|
|
110
|
+
}
|
|
106
111
|
return true;
|
|
107
112
|
}
|
|
108
113
|
function pluginNameFromKey(key) {
|
|
109
114
|
const at = key.lastIndexOf("@");
|
|
110
115
|
return at > 0 ? key.slice(0, at) : key;
|
|
111
116
|
}
|
|
117
|
+
function* iteratePluginHooks(definition) {
|
|
118
|
+
for (const rawEvent of Object.keys(definition.hooks)) {
|
|
119
|
+
const event = EVENT_NAME_MAP[rawEvent];
|
|
120
|
+
for (const group of definition.hooks[rawEvent] ?? []) {
|
|
121
|
+
for (const command of group.hooks) {
|
|
122
|
+
yield {
|
|
123
|
+
rawEvent,
|
|
124
|
+
event,
|
|
125
|
+
matcher: group.matcher,
|
|
126
|
+
command,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
112
132
|
/**
|
|
113
133
|
* Stable identity for ONE plugin-provided hook, used as the record key in
|
|
114
134
|
* `capabilityOverrides.pluginHooks` (per-hook project off-switch). Derived
|
|
@@ -147,49 +167,42 @@ export function loadPluginHooks(registry, disabledPlugins = [], disabledPluginHo
|
|
|
147
167
|
continue;
|
|
148
168
|
for (const entry of entries) {
|
|
149
169
|
const installPath = entry.installPath;
|
|
150
|
-
if (!installPath
|
|
170
|
+
if (!installPath)
|
|
151
171
|
continue;
|
|
152
|
-
const
|
|
153
|
-
|
|
172
|
+
const snapshot = inspectPluginHooks(installPath);
|
|
173
|
+
const approval = pluginHookApprovalState(entry, snapshot);
|
|
174
|
+
if (approval === "pending" || approval === "changed" || approval === "none") {
|
|
175
|
+
// Pending and changed executable definitions fail closed. The rest of
|
|
176
|
+
// the plugin remains available; hook-free installs have nothing to load.
|
|
154
177
|
continue;
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
178
|
+
}
|
|
179
|
+
if (!snapshot.definition)
|
|
180
|
+
continue;
|
|
181
|
+
for (const hook of iteratePluginHooks(snapshot.definition)) {
|
|
182
|
+
if (disabledHookSet.has(pluginHookKey({
|
|
183
|
+
plugin: pluginNameFromKey(key),
|
|
184
|
+
rawEvent: hook.rawEvent,
|
|
185
|
+
command: hook.command.command,
|
|
186
|
+
}))) {
|
|
163
187
|
continue;
|
|
164
|
-
for (const group of groups) {
|
|
165
|
-
const commands = group.hooks ?? [];
|
|
166
|
-
for (const cmd of commands) {
|
|
167
|
-
if (cmd.type !== "command" || typeof cmd.command !== "string") {
|
|
168
|
-
continue;
|
|
169
|
-
}
|
|
170
|
-
if (disabledHookSet.has(pluginHookKey({
|
|
171
|
-
plugin: pluginNameFromKey(key),
|
|
172
|
-
rawEvent: eventNameRaw,
|
|
173
|
-
command: cmd.command,
|
|
174
|
-
}))) {
|
|
175
|
-
continue;
|
|
176
|
-
}
|
|
177
|
-
const commandLine = cmd.command;
|
|
178
|
-
const timeoutMs = cmd.timeout_ms;
|
|
179
|
-
const matcher = group.matcher;
|
|
180
|
-
const handler = async (ctx) => {
|
|
181
|
-
if (!matcherAccepts(mapped, matcher, ctx))
|
|
182
|
-
return {};
|
|
183
|
-
return runPluginCommandHook({
|
|
184
|
-
command: commandLine,
|
|
185
|
-
installPath,
|
|
186
|
-
pluginKey: key,
|
|
187
|
-
timeoutMs,
|
|
188
|
-
}, ctx);
|
|
189
|
-
};
|
|
190
|
-
registry.register(mapped, handler, PLUGIN_HOOK_PRIORITY, `plugin:${pluginNameFromKey(key)}:${eventNameRaw}`);
|
|
191
|
-
}
|
|
192
188
|
}
|
|
189
|
+
const commandLine = hook.command.command;
|
|
190
|
+
const timeoutMs = hook.command.timeoutMs;
|
|
191
|
+
// A CC event that maps onto a SHARED codeshell event (SubagentStop
|
|
192
|
+
// → notification) gets an implied kind-matcher, so it only fires
|
|
193
|
+
// for the notification kinds that correspond to the CC semantics.
|
|
194
|
+
const matcher = hook.matcher ?? IMPLIED_NOTIFICATION_KIND[hook.rawEvent];
|
|
195
|
+
const handler = async (ctx) => {
|
|
196
|
+
if (!matcherAccepts(hook.event, matcher, ctx))
|
|
197
|
+
return {};
|
|
198
|
+
return runPluginCommandHook({
|
|
199
|
+
command: commandLine,
|
|
200
|
+
installPath,
|
|
201
|
+
pluginKey: key,
|
|
202
|
+
timeoutMs,
|
|
203
|
+
}, ctx);
|
|
204
|
+
};
|
|
205
|
+
registry.register(hook.event, handler, PLUGIN_HOOK_PRIORITY, `plugin:${pluginNameFromKey(key)}:${hook.rawEvent}`);
|
|
193
206
|
}
|
|
194
207
|
}
|
|
195
208
|
}
|
|
@@ -211,32 +224,30 @@ export function listPluginHooks(disabledPlugins = []) {
|
|
|
211
224
|
const disabled = disabledSet.has(plugin);
|
|
212
225
|
for (const entry of entries) {
|
|
213
226
|
const installPath = entry.installPath;
|
|
214
|
-
if (!installPath
|
|
227
|
+
if (!installPath)
|
|
215
228
|
continue;
|
|
216
|
-
const
|
|
217
|
-
|
|
229
|
+
const snapshot = inspectPluginHooks(installPath);
|
|
230
|
+
const integrity = verifyPluginHookIntegrity(entry, snapshot);
|
|
231
|
+
const approval = pluginHookApprovalState(entry, snapshot);
|
|
232
|
+
if (!snapshot.definition)
|
|
218
233
|
continue;
|
|
219
|
-
for (const
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
key: pluginHookKey({ plugin, rawEvent: eventNameRaw, command: cmd.command }),
|
|
237
|
-
});
|
|
238
|
-
}
|
|
239
|
-
}
|
|
234
|
+
for (const hook of iteratePluginHooks(snapshot.definition)) {
|
|
235
|
+
out.push({
|
|
236
|
+
installKey: key,
|
|
237
|
+
plugin,
|
|
238
|
+
event: hook.event,
|
|
239
|
+
rawEvent: hook.rawEvent,
|
|
240
|
+
command: hook.command.command,
|
|
241
|
+
matcher: hook.matcher,
|
|
242
|
+
disabled,
|
|
243
|
+
integrity,
|
|
244
|
+
approval,
|
|
245
|
+
key: pluginHookKey({
|
|
246
|
+
plugin,
|
|
247
|
+
rawEvent: hook.rawEvent,
|
|
248
|
+
command: hook.command.command,
|
|
249
|
+
}),
|
|
250
|
+
});
|
|
240
251
|
}
|
|
241
252
|
}
|
|
242
253
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { CronJob, CronScheduler } from "../automation/scheduler.js";
|
|
2
|
+
export declare const MAX_PLUGIN_AUTOMATIONS = 256;
|
|
3
|
+
export interface InstantiatePluginAutomationTemplateOptions {
|
|
4
|
+
scheduler: Pick<CronScheduler, "create" | "list">;
|
|
5
|
+
installKey: string;
|
|
6
|
+
templateId: string;
|
|
7
|
+
expectedRevision: string;
|
|
8
|
+
cwd?: string;
|
|
9
|
+
/** Effective project/global disable list computed by the host for this cwd. */
|
|
10
|
+
disabledPluginNames: ReadonlySet<string>;
|
|
11
|
+
maxJobs?: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Copy an installed plugin template into a standalone cron job. This never
|
|
15
|
+
* runs during install/update and never trusts executable fields supplied by a
|
|
16
|
+
* renderer or protocol client.
|
|
17
|
+
*/
|
|
18
|
+
export declare function instantiatePluginAutomationTemplate(options: InstantiatePluginAutomationTemplateOptions): CronJob;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { loadPluginAutomationTemplateContributions } from "./pluginCatalog.js";
|
|
2
|
+
export const MAX_PLUGIN_AUTOMATIONS = 256;
|
|
3
|
+
/**
|
|
4
|
+
* Copy an installed plugin template into a standalone cron job. This never
|
|
5
|
+
* runs during install/update and never trusts executable fields supplied by a
|
|
6
|
+
* renderer or protocol client.
|
|
7
|
+
*/
|
|
8
|
+
export function instantiatePluginAutomationTemplate(options) {
|
|
9
|
+
if (typeof options.installKey !== "string" || !options.installKey) {
|
|
10
|
+
throw new Error("installKey is required");
|
|
11
|
+
}
|
|
12
|
+
if (typeof options.templateId !== "string" || !options.templateId) {
|
|
13
|
+
throw new Error("templateId is required");
|
|
14
|
+
}
|
|
15
|
+
if (!/^[a-f0-9]{64}$/.test(options.expectedRevision)) {
|
|
16
|
+
throw new Error("automation template revision is invalid");
|
|
17
|
+
}
|
|
18
|
+
const contribution = loadPluginAutomationTemplateContributions().find((entry) => entry.installKey === options.installKey && entry.template.id === options.templateId);
|
|
19
|
+
if (!contribution) {
|
|
20
|
+
throw new Error(`automation template not found: ${options.installKey}/${options.templateId}`);
|
|
21
|
+
}
|
|
22
|
+
if (contribution.template.workspace === "current" && !options.cwd) {
|
|
23
|
+
throw new Error("this automation template requires a current project");
|
|
24
|
+
}
|
|
25
|
+
if (contribution.revision !== options.expectedRevision) {
|
|
26
|
+
throw new Error("automation template changed after review; review it again before creating");
|
|
27
|
+
}
|
|
28
|
+
if (options.disabledPluginNames.has(contribution.pluginName)) {
|
|
29
|
+
throw new Error(`plugin is disabled for this project: ${contribution.pluginName}`);
|
|
30
|
+
}
|
|
31
|
+
const maxJobs = options.maxJobs ?? MAX_PLUGIN_AUTOMATIONS;
|
|
32
|
+
if (!Number.isSafeInteger(maxJobs) || maxJobs <= 0) {
|
|
33
|
+
throw new Error("maxJobs must be a positive safe integer");
|
|
34
|
+
}
|
|
35
|
+
if (options.scheduler.list().length >= maxJobs) {
|
|
36
|
+
throw new Error(`automation limit reached (${maxJobs})`);
|
|
37
|
+
}
|
|
38
|
+
const template = contribution.template;
|
|
39
|
+
return options.scheduler.create(template.title.default, template.schedule, template.prompt, {
|
|
40
|
+
...(template.workspace === "current" && options.cwd ? { cwd: options.cwd } : {}),
|
|
41
|
+
...(template.timezone ? { timezone: template.timezone } : {}),
|
|
42
|
+
permissionLevel: template.permissionLevel,
|
|
43
|
+
templateSource: {
|
|
44
|
+
installKey: options.installKey,
|
|
45
|
+
templateId: options.templateId,
|
|
46
|
+
revision: contribution.revision,
|
|
47
|
+
...(contribution.pluginVersion ? { pluginVersion: contribution.pluginVersion } : {}),
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { type PluginAutomationTemplate, type CanonicalPluginManifest as CanonicalPluginManifestData } from "./installer/types.js";
|
|
2
|
+
import type { InstalledPluginsV2 } from "./types.js";
|
|
3
|
+
/** Core-owned, trusted view of one installed plugin. */
|
|
4
|
+
export interface PluginCatalogEntry {
|
|
5
|
+
installKey: string;
|
|
6
|
+
name: string;
|
|
7
|
+
marketplace: string | null;
|
|
8
|
+
installPath: string;
|
|
9
|
+
version: string;
|
|
10
|
+
installedAt: string;
|
|
11
|
+
lastUpdated: string;
|
|
12
|
+
manifest: CanonicalPluginManifestData | null;
|
|
13
|
+
/** Reusable scheduled-task templates. They never instantiate during install. */
|
|
14
|
+
automationTemplates: readonly PluginAutomationTemplate[];
|
|
15
|
+
}
|
|
16
|
+
export interface LoadPluginCatalogOptions {
|
|
17
|
+
/** Override points make the loader reusable by isolated hosts and deterministic tests. */
|
|
18
|
+
root?: string;
|
|
19
|
+
installed?: InstalledPluginsV2;
|
|
20
|
+
}
|
|
21
|
+
export interface PluginAutomationTemplateContribution {
|
|
22
|
+
kind: "automation-template";
|
|
23
|
+
installKey: string;
|
|
24
|
+
pluginName: string;
|
|
25
|
+
marketplace: string | null;
|
|
26
|
+
installPath: string;
|
|
27
|
+
pluginVersion?: string;
|
|
28
|
+
revision: string;
|
|
29
|
+
template: PluginAutomationTemplate;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Stable content revision used to bind a user review to the exact template
|
|
33
|
+
* instantiated later. Install paths and timestamps are intentionally excluded.
|
|
34
|
+
*/
|
|
35
|
+
export declare function pluginAutomationTemplateRevision(installKey: string, template: PluginAutomationTemplate): string;
|
|
36
|
+
/**
|
|
37
|
+
* Load the installed plugin catalog at the core boundary.
|
|
38
|
+
*
|
|
39
|
+
* Installed state is user-writable, so paths are realpath-contained before any
|
|
40
|
+
* manifest is exposed. Multiple scope rows for one install key collapse to the
|
|
41
|
+
* first safe entry, matching the current single-user-scope runtime contract.
|
|
42
|
+
*/
|
|
43
|
+
export declare function loadPluginCatalog(options?: LoadPluginCatalogOptions): PluginCatalogEntry[];
|
|
44
|
+
/** Load reusable automation templates without creating or enabling any jobs. */
|
|
45
|
+
export declare function loadPluginAutomationTemplateContributions(options?: LoadPluginCatalogOptions): PluginAutomationTemplateContribution[];
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { createHash } from "node:crypto";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { readInstalledPlugins } from "./installedPlugins.js";
|
|
5
|
+
import { pluginsRoot } from "./installer/paths.js";
|
|
6
|
+
import { CANONICAL_PLUGIN_MANIFEST_FILE, CanonicalPluginManifest, } from "./installer/types.js";
|
|
7
|
+
import { resolveSafePluginPath } from "./pluginInstaller.js";
|
|
8
|
+
/**
|
|
9
|
+
* Stable content revision used to bind a user review to the exact template
|
|
10
|
+
* instantiated later. Install paths and timestamps are intentionally excluded.
|
|
11
|
+
*/
|
|
12
|
+
export function pluginAutomationTemplateRevision(installKey, template) {
|
|
13
|
+
return createHash("sha256")
|
|
14
|
+
.update("codeshell-plugin-automation-template-v1")
|
|
15
|
+
.update("\0")
|
|
16
|
+
.update(installKey)
|
|
17
|
+
.update("\0")
|
|
18
|
+
.update(JSON.stringify(template))
|
|
19
|
+
.digest("hex");
|
|
20
|
+
}
|
|
21
|
+
function readCanonicalManifest(installPath) {
|
|
22
|
+
const file = join(installPath, CANONICAL_PLUGIN_MANIFEST_FILE);
|
|
23
|
+
if (!existsSync(file))
|
|
24
|
+
return null;
|
|
25
|
+
try {
|
|
26
|
+
return CanonicalPluginManifest.parse(JSON.parse(readFileSync(file, "utf-8")));
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function identityFromInstallKey(installKey, manifest) {
|
|
33
|
+
const at = installKey.lastIndexOf("@");
|
|
34
|
+
if (at > 0 && at < installKey.length - 1) {
|
|
35
|
+
return { name: installKey.slice(0, at), marketplace: installKey.slice(at + 1) };
|
|
36
|
+
}
|
|
37
|
+
return { name: manifest?.name ?? installKey, marketplace: null };
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Load the installed plugin catalog at the core boundary.
|
|
41
|
+
*
|
|
42
|
+
* Installed state is user-writable, so paths are realpath-contained before any
|
|
43
|
+
* manifest is exposed. Multiple scope rows for one install key collapse to the
|
|
44
|
+
* first safe entry, matching the current single-user-scope runtime contract.
|
|
45
|
+
*/
|
|
46
|
+
export function loadPluginCatalog(options = {}) {
|
|
47
|
+
const root = options.root ?? pluginsRoot();
|
|
48
|
+
const installed = options.installed ?? readInstalledPlugins();
|
|
49
|
+
const catalog = [];
|
|
50
|
+
const loadedKeys = new Set();
|
|
51
|
+
for (const installKey of Object.keys(installed.plugins).sort()) {
|
|
52
|
+
for (const entry of installed.plugins[installKey] ?? []) {
|
|
53
|
+
if (loadedKeys.has(installKey))
|
|
54
|
+
break;
|
|
55
|
+
const installPath = resolveSafePluginPath(entry.installPath, root);
|
|
56
|
+
if (!installPath)
|
|
57
|
+
continue;
|
|
58
|
+
const manifest = readCanonicalManifest(installPath);
|
|
59
|
+
const identity = identityFromInstallKey(installKey, manifest);
|
|
60
|
+
catalog.push({
|
|
61
|
+
installKey,
|
|
62
|
+
...identity,
|
|
63
|
+
installPath,
|
|
64
|
+
version: entry.version,
|
|
65
|
+
installedAt: entry.installedAt,
|
|
66
|
+
lastUpdated: entry.lastUpdated,
|
|
67
|
+
manifest,
|
|
68
|
+
automationTemplates: manifest?.automations?.templates ?? [],
|
|
69
|
+
});
|
|
70
|
+
loadedKeys.add(installKey);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return catalog;
|
|
74
|
+
}
|
|
75
|
+
/** Load reusable automation templates without creating or enabling any jobs. */
|
|
76
|
+
export function loadPluginAutomationTemplateContributions(options = {}) {
|
|
77
|
+
return loadPluginCatalog(options).flatMap((plugin) => plugin.automationTemplates.map((template) => ({
|
|
78
|
+
kind: "automation-template",
|
|
79
|
+
installKey: plugin.installKey,
|
|
80
|
+
pluginName: plugin.name,
|
|
81
|
+
marketplace: plugin.marketplace,
|
|
82
|
+
installPath: plugin.installPath,
|
|
83
|
+
...(plugin.manifest?.version ? { pluginVersion: plugin.manifest.version } : {}),
|
|
84
|
+
revision: pluginAutomationTemplateRevision(plugin.installKey, template),
|
|
85
|
+
template,
|
|
86
|
+
})));
|
|
87
|
+
}
|
|
@@ -22,6 +22,9 @@
|
|
|
22
22
|
* reference this via ${CODESHELL_PLUGIN_ROOT}
|
|
23
23
|
* (varRewrite.ts rewrites CC's CLAUDE_PLUGIN_ROOT
|
|
24
24
|
* to this name at install time).
|
|
25
|
+
* PLUGIN_ROOT — Codex-compatible alias for the installed root.
|
|
26
|
+
* CODESHELL_PLUGIN_DATA — stable writable state directory for this plugin.
|
|
27
|
+
* PLUGIN_DATA — Codex-compatible alias for the state directory.
|
|
25
28
|
* CODESHELL_HOOK_EVENT — the codeshell-side event name (snake_case)
|
|
26
29
|
*
|
|
27
30
|
* We deliberately do NOT set CLAUDE_PLUGIN_ROOT here. Plugin scripts that
|
|
@@ -38,9 +41,12 @@ export interface PluginCommandHookSpec {
|
|
|
38
41
|
installPath: string;
|
|
39
42
|
/** Plugin install key (`name@marketplace`), used for log lines. */
|
|
40
43
|
pluginKey: string;
|
|
44
|
+
/** Stable writable plugin data directory; primarily an injection point for tests/hosts. */
|
|
45
|
+
dataPath?: string;
|
|
41
46
|
/** Per-hook override; falls back to DEFAULT_TIMEOUT_MS. */
|
|
42
47
|
timeoutMs?: number;
|
|
43
48
|
}
|
|
49
|
+
export declare function resolvePluginDataPath(pluginKey: string): string;
|
|
44
50
|
/**
|
|
45
51
|
* Run one plugin hook command. CC's exit-code 2 and explicit deny/reject JSON
|
|
46
52
|
* are normalized to the native HookResult deny contract. Other failures stay
|
|
@@ -22,6 +22,9 @@
|
|
|
22
22
|
* reference this via ${CODESHELL_PLUGIN_ROOT}
|
|
23
23
|
* (varRewrite.ts rewrites CC's CLAUDE_PLUGIN_ROOT
|
|
24
24
|
* to this name at install time).
|
|
25
|
+
* PLUGIN_ROOT — Codex-compatible alias for the installed root.
|
|
26
|
+
* CODESHELL_PLUGIN_DATA — stable writable state directory for this plugin.
|
|
27
|
+
* PLUGIN_DATA — Codex-compatible alias for the state directory.
|
|
25
28
|
* CODESHELL_HOOK_EVENT — the codeshell-side event name (snake_case)
|
|
26
29
|
*
|
|
27
30
|
* We deliberately do NOT set CLAUDE_PLUGIN_ROOT here. Plugin scripts that
|
|
@@ -31,10 +34,21 @@
|
|
|
31
34
|
* branch — not the CC one.
|
|
32
35
|
*/
|
|
33
36
|
import { spawn } from "node:child_process";
|
|
37
|
+
import { createHash } from "node:crypto";
|
|
38
|
+
import { mkdirSync } from "node:fs";
|
|
39
|
+
import { homedir } from "node:os";
|
|
40
|
+
import { join } from "node:path";
|
|
34
41
|
import { MAX_HOOK_OUTPUT_BYTES } from "../hooks/hook-output.js";
|
|
35
42
|
import { closeHookStdin, MAX_HOOK_STDIN_BYTES, writeHookStdin } from "../hooks/shell-runner.js";
|
|
36
43
|
import { killChildTree } from "../runtime/spawn-common.js";
|
|
37
44
|
const DEFAULT_TIMEOUT_MS = 60_000;
|
|
45
|
+
function codeShellHome() {
|
|
46
|
+
return process.env.CODE_SHELL_HOME || join(process.env.HOME ?? homedir(), ".code-shell");
|
|
47
|
+
}
|
|
48
|
+
export function resolvePluginDataPath(pluginKey) {
|
|
49
|
+
const stableKey = createHash("sha256").update(pluginKey).digest("hex");
|
|
50
|
+
return join(codeShellHome(), "plugin-data", stableKey);
|
|
51
|
+
}
|
|
38
52
|
/**
|
|
39
53
|
* Extract the user-facing context string from a CC plugin's stdout JSON.
|
|
40
54
|
* Returns null if the payload doesn't carry context (which is valid — the
|
|
@@ -107,19 +121,23 @@ export async function runPluginCommandHook(spec, ctx, abortSignal) {
|
|
|
107
121
|
return new Promise((resolve) => {
|
|
108
122
|
let child;
|
|
109
123
|
try {
|
|
110
|
-
|
|
111
|
-
|
|
124
|
+
const pluginDataPath = spec.dataPath ?? resolvePluginDataPath(spec.pluginKey);
|
|
125
|
+
mkdirSync(pluginDataPath, { recursive: true, mode: 0o700 });
|
|
126
|
+
// Strip Claude-specific plugin vars from the inherited env: a plugin
|
|
127
|
+
// script that branches on `[ -n "$CLAUDE_PLUGIN_ROOT" ]` must conclude
|
|
112
128
|
// "not Claude Code" and pick the codeshell branch. varRewrite.ts
|
|
113
|
-
// converted
|
|
114
|
-
//
|
|
115
|
-
// story.
|
|
129
|
+
// converted literal root/data references to CodeShell-native names;
|
|
130
|
+
// this drop closes the runtime side of the same story.
|
|
116
131
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
117
|
-
const { CLAUDE_PLUGIN_ROOT:
|
|
132
|
+
const { CLAUDE_PLUGIN_ROOT: _strippedRoot, CLAUDE_PLUGIN_DATA: _strippedData, ...parentEnv } = process.env;
|
|
118
133
|
child = spawn(spec.command, [], {
|
|
119
134
|
shell: true,
|
|
120
135
|
env: {
|
|
121
136
|
...parentEnv,
|
|
122
137
|
CODESHELL_PLUGIN_ROOT: spec.installPath,
|
|
138
|
+
PLUGIN_ROOT: spec.installPath,
|
|
139
|
+
CODESHELL_PLUGIN_DATA: pluginDataPath,
|
|
140
|
+
PLUGIN_DATA: pluginDataPath,
|
|
123
141
|
CODESHELL_HOOK_EVENT: ctx.eventName,
|
|
124
142
|
},
|
|
125
143
|
});
|
|
@@ -133,7 +151,6 @@ export async function runPluginCommandHook(spec, ctx, abortSignal) {
|
|
|
133
151
|
let stdout = "";
|
|
134
152
|
let stderr = "";
|
|
135
153
|
let settled = false;
|
|
136
|
-
let timer;
|
|
137
154
|
// Output byte caps mirror src/hooks/shell-runner.ts so a chatty plugin
|
|
138
155
|
// hook can't hold engine memory hostage. Past the cap we SIGTERM the
|
|
139
156
|
// child and treat the hook as failed; stderr cap truncates with a
|
|
@@ -153,7 +170,7 @@ export async function runPluginCommandHook(spec, ctx, abortSignal) {
|
|
|
153
170
|
killChildTree(child, 1000);
|
|
154
171
|
settle({});
|
|
155
172
|
};
|
|
156
|
-
timer = setTimeout(() => {
|
|
173
|
+
const timer = setTimeout(() => {
|
|
157
174
|
// eslint-disable-next-line no-console
|
|
158
175
|
console.warn(`[plugin-hook] ${spec.pluginKey} ${ctx.eventName} timed out after ${timeoutMs}ms`);
|
|
159
176
|
// win32: taskkill /T reaps the tree; POSIX: SIGTERM → grace → SIGKILL.
|
|
@@ -21,5 +21,24 @@ export interface PluginCommand {
|
|
|
21
21
|
/** Absolute path to the .md file. */
|
|
22
22
|
filePath: string;
|
|
23
23
|
}
|
|
24
|
+
export interface PluginCommandDescriptor {
|
|
25
|
+
name: string;
|
|
26
|
+
pluginName: string;
|
|
27
|
+
description: string;
|
|
28
|
+
argumentHint?: string;
|
|
29
|
+
}
|
|
30
|
+
/** Bounded prompt contribution limits shared by Desktop, TUI, and protocol hosts. */
|
|
31
|
+
export declare const MAX_PLUGIN_COMMAND_FILE_BYTES: number;
|
|
32
|
+
export declare const MAX_PLUGIN_COMMAND_ARGUMENT_CHARS: number;
|
|
33
|
+
export declare const MAX_PLUGIN_COMMAND_EXPANDED_CHARS: number;
|
|
24
34
|
export declare function scanPluginCommands(): PluginCommand[];
|
|
25
35
|
export declare function invalidatePluginCommandsCache(): void;
|
|
36
|
+
export declare function describePluginCommands(commands: readonly Pick<PluginCommand, "name" | "pluginName" | "description" | "argumentHint">[], disabledPluginNames?: ReadonlySet<string>): PluginCommandDescriptor[];
|
|
37
|
+
/**
|
|
38
|
+
* Expand CC/CodeShell and deprecated Codex custom-prompt placeholders.
|
|
39
|
+
*
|
|
40
|
+
* Codex plugins in the wild still ship `prompts/*.md`, so compatibility needs
|
|
41
|
+
* `$1`…`$9`, named `KEY=value` placeholders, `$ARGUMENTS`, and `$$` literals
|
|
42
|
+
* even though new upstream workflows are expected to use skills.
|
|
43
|
+
*/
|
|
44
|
+
export declare function expandPluginCommandBody(body: string, rawArguments?: string): string;
|