@cjhyy/code-shell-core 0.7.0 → 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 +20 -5
- package/dist/context/compaction.d.ts +39 -3
- package/dist/context/compaction.js +151 -39
- package/dist/context/manager.d.ts +20 -4
- package/dist/context/manager.js +42 -7
- package/dist/context/token-counter.js +5 -3
- package/dist/context/tool-result-storage.d.ts +6 -0
- package/dist/context/tool-result-storage.js +25 -4
- package/dist/credentials/access.d.ts +13 -2
- package/dist/credentials/access.js +99 -4
- package/dist/credentials/index.d.ts +3 -2
- package/dist/credentials/index.js +2 -1
- package/dist/credentials/oauth.d.ts +9 -1
- package/dist/credentials/oauth.js +80 -1
- package/dist/credentials/store.d.ts +16 -2
- package/dist/credentials/store.js +33 -11
- package/dist/credentials/types.d.ts +62 -1
- package/dist/credentials/types.js +16 -1
- 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 +272 -184
- package/dist/engine/engine.js +1869 -1864
- 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/session-title.d.ts +2 -1
- package/dist/engine/session-title.js +4 -1
- 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 +67 -10
- package/dist/engine/turn-loop.js +538 -97
- package/dist/engine/types.d.ts +35 -4
- package/dist/engine/types.js +1 -1
- package/dist/{engine/goal.d.ts → goal/lifecycle.d.ts} +80 -6
- package/dist/goal/lifecycle.js +482 -0
- package/dist/hooks/events.d.ts +26 -9
- package/dist/hooks/events.js +0 -3
- package/dist/hooks/goal-stop-hook.d.ts +28 -29
- package/dist/hooks/goal-stop-hook.js +344 -144
- package/dist/hooks/registry.js +4 -1
- package/dist/hooks/shell-runner.d.ts +12 -1
- package/dist/hooks/shell-runner.js +160 -9
- package/dist/index.d.ts +51 -110
- 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 +37 -125
- 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 +72 -10
- 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/llm/types.d.ts +12 -5
- 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 +10 -4
- package/dist/plugins/pluginCommandHook.js +133 -18
- 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 +77 -3
- package/dist/protocol/chat-session-manager.js +194 -18
- package/dist/protocol/chat-session.d.ts +72 -9
- package/dist/protocol/chat-session.js +151 -16
- package/dist/protocol/client.d.ts +37 -4
- package/dist/protocol/client.js +118 -6
- 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 +152 -14
- package/dist/protocol/server.js +1574 -229
- package/dist/protocol/types.d.ts +182 -32
- package/dist/protocol/types.js +18 -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.d.ts +3 -0
- package/dist/services/dream-consolidation.js +14 -2
- package/dist/services/index.d.ts +1 -1
- package/dist/services/index.js +1 -1
- package/dist/services/memory-orchestrator.js +6 -2
- package/dist/services/oauth.d.ts +34 -10
- package/dist/services/oauth.js +236 -98
- 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 +208 -25
- package/dist/session/session-manager.js +1232 -116
- package/dist/session/session-message.d.ts +22 -0
- package/dist/session/session-message.js +1 -0
- package/dist/session/transcript.d.ts +76 -6
- package/dist/session/transcript.js +278 -7
- 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 +279 -34
- package/dist/tool-system/builtin/background-jobs.d.ts +63 -7
- package/dist/tool-system/builtin/background-jobs.js +111 -15
- package/dist/tool-system/builtin/background-work.d.ts +12 -1
- package/dist/tool-system/builtin/background-work.js +12 -1
- package/dist/tool-system/builtin/bash.d.ts +3 -5
- package/dist/tool-system/builtin/bash.js +14 -6
- package/dist/tool-system/builtin/browser-tools.d.ts +8 -5
- 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.d.ts +2 -1
- package/dist/tool-system/builtin/edit.js +14 -10
- 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.d.ts +4 -0
- package/dist/tool-system/builtin/generate-video.js +164 -28
- package/dist/tool-system/builtin/glob.d.ts +2 -1
- package/dist/tool-system/builtin/glob.js +28 -3
- package/dist/tool-system/builtin/grep.d.ts +1 -0
- package/dist/tool-system/builtin/grep.js +82 -17
- package/dist/tool-system/builtin/image-uploader.js +7 -1
- package/dist/tool-system/builtin/index.d.ts +57 -18
- package/dist/tool-system/builtin/index.js +280 -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/video-providers.d.ts +12 -15
- package/dist/tool-system/builtin/video-providers.js +1 -0
- package/dist/tool-system/builtin/view-image.d.ts +2 -2
- package/dist/tool-system/builtin/web-fetch.js +60 -15
- package/dist/tool-system/builtin/web-search.js +1 -3
- package/dist/tool-system/builtin/write.d.ts +2 -1
- package/dist/tool-system/builtin/write.js +14 -4
- 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 +94 -24
- package/dist/tool-system/executor.js +99 -58
- 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 +17 -1
- package/dist/tool-system/mcp-manager.js +72 -7
- 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.d.ts +19 -0
- package/dist/tool-system/path-policy.js +62 -1
- package/dist/tool-system/permission.d.ts +69 -3
- package/dist/tool-system/permission.js +429 -30
- package/dist/tool-system/registry.d.ts +15 -3
- package/dist/tool-system/registry.js +82 -40
- 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 +201 -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 -43
- package/dist/arena/arena.js +0 -333
- 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 -24
- package/dist/arena/phases/adjudication.js +0 -141
- package/dist/arena/phases/build-consensus.d.ts +0 -29
- package/dist/arena/phases/build-consensus.js +0 -83
- 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 -45
- package/dist/arena/phases/cross-review.js +0 -218
- package/dist/arena/phases/debate-rounds.d.ts +0 -27
- package/dist/arena/phases/debate-rounds.js +0 -159
- package/dist/arena/phases/participant-research.d.ts +0 -38
- package/dist/arena/phases/participant-research.js +0 -314
- package/dist/arena/phases/planning-detail-expansion.d.ts +0 -38
- package/dist/arena/phases/planning-detail-expansion.js +0 -119
- package/dist/arena/planner.d.ts +0 -27
- package/dist/arena/planner.js +0 -311
- 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 -514
- 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 -69
- package/dist/git/worktree/crud.js +0 -206
- 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 -51
- 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 -42
- package/dist/git/worktree/query.js +0 -121
- 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 -415
- 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 -345
- /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,17 +41,20 @@ 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
|
-
* Run one plugin hook command.
|
|
46
|
-
*
|
|
47
|
-
*
|
|
51
|
+
* Run one plugin hook command. CC's exit-code 2 and explicit deny/reject JSON
|
|
52
|
+
* are normalized to the native HookResult deny contract. Other failures stay
|
|
53
|
+
* non-blocking so a broken plugin does not wedge the engine.
|
|
48
54
|
*
|
|
49
55
|
* Stdin carries the same envelope shape the codeshell-native shell-runner
|
|
50
56
|
* uses (eventName + data) so plugin authors who want richer context can
|
|
51
57
|
* read it; CC plugins typically ignore stdin and emit context derived from
|
|
52
58
|
* their own state (e.g. reading a SKILL.md off disk via PLUGIN_ROOT).
|
|
53
59
|
*/
|
|
54
|
-
export declare function runPluginCommandHook(spec: PluginCommandHookSpec, ctx: HookContext): Promise<HookResult>;
|
|
60
|
+
export declare function runPluginCommandHook(spec: PluginCommandHookSpec, ctx: HookContext, abortSignal?: AbortSignal): Promise<HookResult>;
|