@cjhyy/code-shell-core 0.5.0-rc.1 → 0.6.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -10
- package/dist/agent/agent-definition-registry.d.ts +21 -3
- package/dist/agent/agent-definition-registry.js +49 -18
- package/dist/agent/agent-definition.d.ts +32 -0
- package/dist/agent/agent-definition.js +49 -4
- package/dist/arena/arena.js +11 -12
- package/dist/arena/context/context-tools.js +47 -6
- package/dist/arena/context/within-root.d.ts +7 -0
- package/dist/arena/context/within-root.js +15 -0
- package/dist/arena/iterate/phases/argue.js +8 -2
- package/dist/arena/iterate/phases/revise.js +1 -1
- package/dist/arena/iterate/phases/tournament.js +3 -3
- package/dist/arena/ledger.js +9 -1
- package/dist/arena/phases/adjudication.js +1 -4
- package/dist/arena/phases/build-consensus.js +1 -4
- package/dist/arena/phases/cross-review.js +2 -8
- package/dist/arena/phases/debate-rounds.js +1 -4
- package/dist/arena/phases/participant-research.js +1 -4
- package/dist/arena/phases/planning-detail-expansion.js +8 -10
- package/dist/arena/planner.js +0 -1
- package/dist/arena/providers/docs.d.ts +1 -0
- package/dist/arena/providers/docs.js +5 -2
- package/dist/arena/providers/repo.d.ts +1 -0
- package/dist/arena/providers/repo.js +5 -2
- package/dist/arena/strategies/utils.d.ts +1 -4
- package/dist/arena/strategies/utils.js +7 -51
- package/dist/arena/transitions.d.ts +7 -2
- package/dist/arena/transitions.js +9 -4
- package/dist/arena/types.d.ts +8 -2
- package/dist/automation/cron-expr.d.ts +41 -0
- package/dist/automation/cron-expr.js +169 -0
- package/dist/automation/index.d.ts +41 -0
- package/dist/automation/index.js +39 -0
- package/dist/automation/runner.d.ts +84 -0
- package/dist/automation/runner.js +92 -0
- package/dist/automation/scheduler.d.ts +194 -0
- package/dist/automation/scheduler.js +623 -0
- package/dist/automation/store.d.ts +39 -0
- package/dist/automation/store.js +122 -0
- package/dist/automation/write-policy.d.ts +34 -0
- package/dist/automation/write-policy.js +113 -0
- package/dist/automation/write-run.d.ts +51 -0
- package/dist/automation/write-run.js +38 -0
- package/dist/capability-control/disabled-lists.d.ts +25 -0
- package/dist/capability-control/disabled-lists.js +57 -0
- package/dist/capability-control/index.d.ts +5 -0
- package/dist/capability-control/index.js +3 -0
- package/dist/capability-control/overlay.d.ts +64 -0
- package/dist/capability-control/overlay.js +116 -0
- package/dist/capability-control/project.d.ts +65 -0
- package/dist/capability-control/project.js +147 -0
- package/dist/capability-control/service.d.ts +70 -0
- package/dist/capability-control/service.js +147 -0
- package/dist/capability-control/types.d.ts +62 -0
- package/dist/capability-control/types.js +17 -0
- package/dist/cc-orchestrator/agent-adapter.d.ts +50 -0
- package/dist/cc-orchestrator/agent-adapter.js +133 -0
- package/dist/cc-orchestrator/cc-capability.d.ts +19 -0
- package/dist/cc-orchestrator/cc-capability.js +53 -0
- package/dist/cc-orchestrator/codex-session-discovery.d.ts +24 -0
- package/dist/cc-orchestrator/codex-session-discovery.js +191 -0
- package/dist/cc-orchestrator/codex-session-history.d.ts +25 -0
- package/dist/cc-orchestrator/codex-session-history.js +187 -0
- package/dist/cc-orchestrator/external-agent-changes.d.ts +19 -0
- package/dist/cc-orchestrator/external-agent-changes.js +214 -0
- package/dist/cc-orchestrator/external-agent-driver.d.ts +18 -0
- package/dist/cc-orchestrator/external-agent-driver.js +69 -0
- package/dist/cc-orchestrator/index.d.ts +8 -0
- package/dist/cc-orchestrator/index.js +8 -0
- package/dist/cc-orchestrator/relevance-judge.d.ts +15 -0
- package/dist/cc-orchestrator/relevance-judge.js +29 -0
- package/dist/cc-orchestrator/session-discovery.d.ts +46 -0
- package/dist/cc-orchestrator/session-discovery.js +125 -0
- package/dist/cc-orchestrator/session-history.d.ts +19 -0
- package/dist/cc-orchestrator/session-history.js +67 -0
- package/dist/cli/agent-server-stdio.d.ts +26 -1
- package/dist/cli/agent-server-stdio.js +221 -28
- package/dist/cli/agent-server-tcp.d.ts +20 -0
- package/dist/cli/agent-server-tcp.js +134 -0
- package/dist/cli/graceful-shutdown.d.ts +27 -0
- package/dist/cli/graceful-shutdown.js +30 -0
- package/dist/context/compaction.d.ts +56 -0
- package/dist/context/compaction.js +209 -15
- package/dist/context/manager.d.ts +0 -20
- package/dist/context/manager.js +25 -41
- package/dist/cost-tracker.js +5 -61
- package/dist/credentials/cipher.d.ts +49 -0
- package/dist/credentials/cipher.js +45 -0
- package/dist/credentials/cookie-jar.d.ts +24 -0
- package/dist/credentials/cookie-jar.js +40 -0
- package/dist/credentials/index.d.ts +7 -0
- package/dist/credentials/index.js +5 -0
- package/dist/credentials/inject-credential-tool.d.ts +20 -0
- package/dist/credentials/inject-credential-tool.js +130 -0
- package/dist/credentials/store.d.ts +72 -0
- package/dist/credentials/store.js +184 -0
- package/dist/credentials/types.d.ts +56 -0
- package/dist/credentials/use-credential-tool.d.ts +29 -0
- package/dist/credentials/use-credential-tool.js +205 -0
- package/dist/credentials/use-gate.d.ts +56 -0
- package/dist/credentials/use-gate.js +52 -0
- package/dist/cron/cron-runtime.d.ts +2 -0
- package/dist/cron/cron-runtime.js +2 -0
- package/dist/cron/cron-store.d.ts +2 -0
- package/dist/cron/cron-store.js +2 -0
- package/dist/cron/scheduler.d.ts +5 -32
- package/dist/cron/scheduler.js +5 -113
- package/dist/data/model-metadata.d.ts +77 -0
- package/dist/data/model-metadata.js +56 -0
- package/dist/data/model-metadata.json +216 -0
- package/dist/data/openrouter-models.d.ts +18 -7
- package/dist/data/openrouter-models.js +35 -8
- package/dist/data/openrouter-sync.js +1 -1
- package/dist/engine/aux-key.d.ts +10 -0
- package/dist/engine/aux-key.js +11 -0
- package/dist/engine/dynamic-tool-defs.d.ts +19 -0
- package/dist/engine/dynamic-tool-defs.js +36 -0
- package/dist/engine/engine.d.ts +431 -108
- package/dist/engine/engine.js +1630 -279
- package/dist/engine/friendly-error.d.ts +18 -0
- package/dist/engine/friendly-error.js +63 -0
- package/dist/engine/goal.d.ts +187 -0
- package/dist/engine/goal.js +196 -0
- package/dist/engine/image-compression.d.ts +81 -0
- package/dist/engine/image-compression.js +186 -0
- package/dist/engine/image-policy.d.ts +165 -0
- package/dist/engine/image-policy.js +189 -0
- package/dist/engine/model-connections-pool.d.ts +17 -0
- package/dist/engine/model-connections-pool.js +66 -0
- package/dist/engine/model-facade.d.ts +10 -0
- package/dist/engine/model-facade.js +25 -0
- package/dist/engine/patch-orphaned-tools.js +3 -0
- package/dist/engine/reactive-threshold.d.ts +13 -0
- package/dist/engine/reactive-threshold.js +17 -0
- package/dist/engine/resolve-llm-config.d.ts +16 -0
- package/dist/engine/resolve-llm-config.js +44 -0
- package/dist/engine/runtime.js +9 -1
- package/dist/engine/sandbox-cache-key.d.ts +10 -0
- package/dist/engine/sandbox-cache-key.js +9 -0
- package/dist/engine/sandbox-config.d.ts +31 -0
- package/dist/engine/sandbox-config.js +38 -0
- package/dist/engine/session-title.d.ts +13 -0
- package/dist/engine/session-title.js +34 -0
- package/dist/engine/session-usage.d.ts +19 -0
- package/dist/engine/session-usage.js +25 -0
- package/dist/engine/steer-queue.d.ts +32 -0
- package/dist/engine/steer-queue.js +26 -0
- package/dist/engine/streaming-tool-queue.d.ts +12 -0
- package/dist/engine/streaming-tool-queue.js +50 -10
- package/dist/engine/turn-loop.d.ts +94 -9
- package/dist/engine/turn-loop.js +775 -342
- package/dist/engine/types.d.ts +175 -0
- package/dist/engine/types.js +13 -0
- package/dist/external-agents/config.d.ts +2 -0
- package/dist/external-agents/config.js +15 -0
- package/dist/external-agents/types.d.ts +31 -0
- package/dist/external-agents/types.js +1 -0
- package/dist/git/parse-log.d.ts +13 -0
- package/dist/git/parse-log.js +21 -0
- package/dist/git/utils.d.ts +8 -6
- package/dist/git/utils.js +62 -26
- package/dist/git/worktree.d.ts +48 -0
- package/dist/git/worktree.js +111 -20
- package/dist/hooks/events.d.ts +23 -1
- package/dist/hooks/goal-stop-hook.d.ts +58 -0
- package/dist/hooks/goal-stop-hook.js +279 -0
- package/dist/hooks/hook-output.d.ts +33 -0
- package/dist/hooks/hook-output.js +79 -0
- package/dist/hooks/registry.d.ts +15 -0
- package/dist/hooks/registry.js +57 -1
- package/dist/hooks/shell-runner.d.ts +2 -0
- package/dist/hooks/shell-runner.js +48 -18
- package/dist/index.d.ts +79 -11
- package/dist/index.js +89 -6
- package/dist/llm/capabilities/param-specs.d.ts +14 -0
- package/dist/llm/capabilities/param-specs.js +62 -0
- package/dist/llm/capabilities/reasoning-control.d.ts +24 -0
- package/dist/llm/capabilities/reasoning-control.js +38 -0
- package/dist/llm/capabilities/rules.js +37 -3
- package/dist/llm/capabilities/types.d.ts +32 -2
- package/dist/llm/clamp-max-tokens.d.ts +11 -0
- package/dist/llm/clamp-max-tokens.js +17 -0
- package/dist/llm/client-base.d.ts +69 -5
- package/dist/llm/client-base.js +185 -25
- package/dist/llm/client-factory.d.ts +3 -3
- package/dist/llm/client-factory.js +2 -2
- package/dist/llm/model-cache.js +4 -2
- package/dist/llm/model-pool.d.ts +29 -11
- package/dist/llm/model-pool.js +36 -20
- package/dist/llm/provider-auth.d.ts +41 -0
- package/dist/llm/provider-auth.js +76 -0
- package/dist/llm/provider-catalog.d.ts +6 -2
- package/dist/llm/providers/anthropic.d.ts +32 -2
- package/dist/llm/providers/anthropic.js +207 -18
- package/dist/llm/providers/openai.d.ts +47 -2
- package/dist/llm/providers/openai.js +478 -71
- package/dist/llm/reasoning-setting.d.ts +51 -0
- package/dist/llm/reasoning-setting.js +40 -0
- package/dist/llm/stop-reason.d.ts +13 -0
- package/dist/llm/stop-reason.js +21 -0
- package/dist/llm/stream-watchdog.js +5 -1
- package/dist/llm/strip-vision.d.ts +32 -0
- package/dist/llm/strip-vision.js +94 -0
- package/dist/llm/token-counter.js +9 -2
- package/dist/llm/types.d.ts +9 -6
- package/dist/logging/logger.js +18 -4
- package/dist/logging/sanitize-messages.d.ts +10 -0
- package/dist/logging/sanitize-messages.js +112 -0
- package/dist/lsp/client.js +28 -8
- package/dist/lsp/manager.d.ts +1 -1
- package/dist/lsp/manager.js +42 -11
- package/dist/lsp/root-path.d.ts +9 -0
- package/dist/lsp/root-path.js +12 -0
- package/dist/model-catalog/builtin.d.ts +12 -0
- package/dist/model-catalog/builtin.js +407 -0
- package/dist/model-catalog/gen-connections.d.ts +20 -0
- package/dist/model-catalog/gen-connections.js +28 -0
- package/dist/model-catalog/index.d.ts +41 -0
- package/dist/model-catalog/index.js +90 -0
- package/dist/model-catalog/params.d.ts +20 -0
- package/dist/model-catalog/params.js +45 -0
- package/dist/model-catalog/resolve.d.ts +48 -0
- package/dist/model-catalog/resolve.js +33 -0
- package/dist/model-catalog/save-entry.d.ts +32 -0
- package/dist/model-catalog/save-entry.js +104 -0
- package/dist/model-catalog/types.d.ts +561 -0
- package/dist/model-catalog/types.js +93 -0
- package/dist/model-catalog/upsert.d.ts +9 -0
- package/dist/model-catalog/upsert.js +8 -0
- package/dist/onboarding.d.ts +12 -82
- package/dist/onboarding.js +75 -333
- package/dist/plugins/gitOps.d.ts +53 -0
- package/dist/plugins/gitOps.js +130 -5
- package/dist/plugins/installer/checkUpdate.d.ts +16 -0
- package/dist/plugins/installer/checkUpdate.js +32 -0
- package/dist/plugins/installer/codex/convertAgents.d.ts +7 -0
- package/dist/plugins/installer/codex/convertAgents.js +55 -0
- package/dist/plugins/installer/codex/convertCommands.d.ts +19 -0
- package/dist/plugins/installer/codex/convertCommands.js +46 -0
- package/dist/plugins/installer/codex/convertMcp.d.ts +11 -0
- package/dist/plugins/installer/codex/convertMcp.js +85 -0
- package/dist/plugins/installer/codex/convertSkills.d.ts +12 -0
- package/dist/plugins/installer/codex/convertSkills.js +33 -0
- package/dist/plugins/installer/detectFormat.d.ts +2 -0
- package/dist/plugins/installer/detectFormat.js +6 -0
- package/dist/plugins/installer/install.d.ts +7 -0
- package/dist/plugins/installer/install.js +123 -0
- package/dist/plugins/installer/installFromArchive.d.ts +43 -0
- package/dist/plugins/installer/installFromArchive.js +134 -0
- package/dist/plugins/installer/installFromSource.d.ts +13 -0
- package/dist/plugins/installer/installFromSource.js +51 -0
- package/dist/plugins/installer/list.d.ts +9 -0
- package/dist/plugins/installer/list.js +30 -0
- package/dist/plugins/installer/loadPluginAgents.d.ts +3 -0
- package/dist/plugins/installer/loadPluginAgents.js +27 -0
- package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
- package/dist/plugins/installer/loadPluginMcp.js +107 -0
- package/dist/plugins/installer/parseSource.d.ts +20 -0
- package/dist/plugins/installer/parseSource.js +74 -0
- package/dist/plugins/installer/paths.d.ts +5 -0
- package/dist/plugins/installer/paths.js +25 -0
- package/dist/plugins/installer/pruneDisabled.d.ts +24 -0
- package/dist/plugins/installer/pruneDisabled.js +73 -0
- package/dist/plugins/installer/types.d.ts +52 -0
- package/dist/plugins/installer/types.js +28 -0
- package/dist/plugins/installer/uninstall.d.ts +2 -0
- package/dist/plugins/installer/uninstall.js +18 -0
- package/dist/plugins/installer/unzip.d.ts +14 -0
- package/dist/plugins/installer/unzip.js +82 -0
- package/dist/plugins/installer/update.d.ts +28 -0
- package/dist/plugins/installer/update.js +97 -0
- package/dist/plugins/loadPluginHooks.d.ts +54 -1
- package/dist/plugins/loadPluginHooks.js +83 -1
- package/dist/plugins/marketplaceManager.d.ts +15 -1
- package/dist/plugins/marketplaceManager.js +58 -4
- package/dist/plugins/pluginCommandHook.js +34 -14
- package/dist/plugins/pluginContent.d.ts +30 -0
- package/dist/plugins/pluginContent.js +83 -0
- package/dist/plugins/pluginInstaller.d.ts +34 -0
- package/dist/plugins/pluginInstaller.js +168 -35
- package/dist/plugins/schemas.js +41 -6
- package/dist/plugins/types.d.ts +10 -0
- package/dist/preset/index.d.ts +7 -1
- package/dist/preset/index.js +112 -6
- package/dist/product/types.d.ts +1 -1
- package/dist/prompt/composer.d.ts +31 -0
- package/dist/prompt/composer.js +95 -25
- package/dist/prompt/instruction-scanner.js +5 -3
- package/dist/prompt/section-loader.js +1 -0
- package/dist/prompt/sections/base.md +1 -0
- package/dist/prompt/sections/browser.md +10 -0
- package/dist/prompt/sections/coding.md +4 -0
- package/dist/prompt/sections/orchestration.md +8 -0
- package/dist/protocol/chat-session-manager.d.ts +15 -2
- package/dist/protocol/chat-session-manager.js +46 -0
- package/dist/protocol/chat-session.d.ts +82 -0
- package/dist/protocol/chat-session.js +121 -1
- package/dist/protocol/client.d.ts +27 -0
- package/dist/protocol/client.js +38 -0
- package/dist/protocol/redact.d.ts +50 -0
- package/dist/protocol/redact.js +71 -0
- package/dist/protocol/server.d.ts +153 -2
- package/dist/protocol/server.js +807 -39
- package/dist/protocol/tcp-transport.d.ts +45 -0
- package/dist/protocol/tcp-transport.js +74 -0
- package/dist/protocol/transport.js +3 -2
- package/dist/protocol/types.d.ts +69 -0
- package/dist/protocol/types.js +22 -0
- package/dist/quota/credentials.d.ts +3 -0
- package/dist/quota/credentials.js +80 -0
- package/dist/quota/index.d.ts +36 -0
- package/dist/quota/index.js +155 -0
- package/dist/quota/types.d.ts +48 -0
- package/dist/quota/types.js +13 -0
- package/dist/remote/bridge.d.ts +11 -2
- package/dist/remote/bridge.js +61 -33
- package/dist/review/review-prompt.d.ts +28 -0
- package/dist/review/review-prompt.js +81 -0
- package/dist/run/ArtifactTracker.js +5 -4
- package/dist/run/EngineRunner.d.ts +27 -1
- package/dist/run/EngineRunner.js +46 -8
- package/dist/run/FileRunStore.js +40 -11
- package/dist/run/RunApprovalBackend.js +25 -5
- package/dist/run/RunLock.d.ts +28 -2
- package/dist/run/RunLock.js +49 -7
- package/dist/run/RunManager.d.ts +12 -0
- package/dist/run/RunManager.js +86 -3
- package/dist/run/RunQueue.d.ts +1 -0
- package/dist/run/RunQueue.js +8 -2
- package/dist/run/factory.d.ts +8 -1
- package/dist/run/factory.js +1 -0
- package/dist/run/index.d.ts +2 -2
- package/dist/run/index.js +1 -1
- package/dist/run/redirect-target.d.ts +7 -0
- package/dist/run/redirect-target.js +13 -0
- package/dist/run/types.js +1 -1
- package/dist/runtime/background-shell.d.ts +139 -0
- package/dist/runtime/background-shell.js +495 -0
- package/dist/runtime/output-clean.d.ts +24 -0
- package/dist/runtime/output-clean.js +41 -0
- package/dist/runtime/ring-file.d.ts +64 -0
- package/dist/runtime/ring-file.js +174 -0
- package/dist/runtime/safe-spawn.js +15 -34
- package/dist/runtime/spawn-common.d.ts +148 -0
- package/dist/runtime/spawn-common.js +303 -0
- package/dist/runtime/truncate-output.d.ts +22 -0
- package/dist/runtime/truncate-output.js +49 -0
- package/dist/runtime/utf8-cut.d.ts +11 -0
- package/dist/runtime/utf8-cut.js +23 -0
- package/dist/services/auto-dream.d.ts +4 -0
- package/dist/services/auto-dream.js +26 -26
- package/dist/services/browser-open.d.ts +13 -0
- package/dist/services/browser-open.js +16 -0
- package/dist/services/diagnostics.d.ts +1 -2
- package/dist/services/diagnostics.js +12 -7
- package/dist/services/dream-consolidation.d.ts +57 -0
- package/dist/services/dream-consolidation.js +151 -0
- package/dist/services/extract-memories.d.ts +14 -1
- package/dist/services/extract-memories.js +45 -6
- package/dist/services/memory-orchestrator.d.ts +21 -0
- package/dist/services/memory-orchestrator.js +125 -32
- package/dist/services/notifier.d.ts +8 -0
- package/dist/services/notifier.js +39 -25
- package/dist/services/oauth.js +5 -7
- package/dist/services/session-memory-sort.d.ts +8 -0
- package/dist/services/session-memory-sort.js +9 -0
- package/dist/services/session-memory.js +30 -19
- package/dist/session/file-history.d.ts +124 -1
- package/dist/session/file-history.js +232 -9
- package/dist/session/memory.d.ts +116 -2
- package/dist/session/memory.js +250 -28
- package/dist/session/session-manager.d.ts +63 -1
- package/dist/session/session-manager.js +186 -5
- package/dist/session/simple-diff.d.ts +23 -0
- package/dist/session/simple-diff.js +84 -0
- package/dist/session/transcript.d.ts +25 -1
- package/dist/session/transcript.js +35 -2
- package/dist/session/undo-target.d.ts +67 -0
- package/dist/session/undo-target.js +144 -0
- package/dist/settings/disk-defaults.d.ts +42 -0
- package/dist/settings/disk-defaults.js +33 -0
- package/dist/settings/feature-flags.d.ts +64 -0
- package/dist/settings/feature-flags.js +61 -0
- package/dist/settings/manager.d.ts +101 -1
- package/dist/settings/manager.js +345 -15
- package/dist/settings/migrate-config.d.ts +45 -0
- package/dist/settings/migrate-config.js +125 -0
- package/dist/settings/personalization.d.ts +19 -0
- package/dist/settings/personalization.js +7 -0
- package/dist/settings/schema-export.d.ts +25 -0
- package/dist/settings/schema-export.js +38 -0
- package/dist/settings/schema.d.ts +1827 -396
- package/dist/settings/schema.js +361 -81
- package/dist/skills/scanner.d.ts +9 -0
- package/dist/skills/scanner.js +30 -2
- package/dist/stt/resolve-transcribe.d.ts +31 -0
- package/dist/stt/resolve-transcribe.js +108 -0
- package/dist/stt/transcribe.d.ts +51 -0
- package/dist/stt/transcribe.js +65 -0
- package/dist/tool-system/browser-bridge.d.ts +226 -0
- package/dist/tool-system/browser-bridge.js +163 -0
- package/dist/tool-system/builtin/add-marketplace.d.ts +12 -0
- package/dist/tool-system/builtin/add-marketplace.js +76 -0
- package/dist/tool-system/builtin/agent-heartbeat.d.ts +49 -0
- package/dist/tool-system/builtin/agent-heartbeat.js +89 -0
- package/dist/tool-system/builtin/agent-notifications.d.ts +12 -3
- package/dist/tool-system/builtin/agent-notifications.js +9 -3
- package/dist/tool-system/builtin/agent-output-file.d.ts +38 -0
- package/dist/tool-system/builtin/agent-output-file.js +72 -0
- package/dist/tool-system/builtin/agent-registry.d.ts +23 -0
- package/dist/tool-system/builtin/agent-registry.js +16 -4
- package/dist/tool-system/builtin/agent.d.ts +50 -11
- package/dist/tool-system/builtin/agent.js +576 -73
- package/dist/tool-system/builtin/apply-patch/applier.js +66 -8
- package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +10 -0
- package/dist/tool-system/builtin/apply-patch/backup-targets.js +30 -0
- package/dist/tool-system/builtin/apply-patch/index.js +7 -3
- package/dist/tool-system/builtin/arena.js +6 -7
- package/dist/tool-system/builtin/background-jobs.d.ts +76 -0
- package/dist/tool-system/builtin/background-jobs.js +124 -0
- package/dist/tool-system/builtin/background-shell-tools.d.ts +20 -0
- package/dist/tool-system/builtin/background-shell-tools.js +108 -0
- package/dist/tool-system/builtin/background-work.d.ts +67 -0
- package/dist/tool-system/builtin/background-work.js +86 -0
- package/dist/tool-system/builtin/bash-output-style.d.ts +32 -0
- package/dist/tool-system/builtin/bash-output-style.js +40 -0
- package/dist/tool-system/builtin/bash.d.ts +5 -2
- package/dist/tool-system/builtin/bash.js +98 -62
- package/dist/tool-system/builtin/browser-tools.d.ts +33 -0
- package/dist/tool-system/builtin/browser-tools.js +312 -0
- package/dist/tool-system/builtin/cancel-goal.d.ts +31 -0
- package/dist/tool-system/builtin/cancel-goal.js +64 -0
- package/dist/tool-system/builtin/check-quota.d.ts +15 -0
- package/dist/tool-system/builtin/check-quota.js +34 -0
- package/dist/tool-system/builtin/complete-goal.d.ts +25 -0
- package/dist/tool-system/builtin/complete-goal.js +45 -0
- package/dist/tool-system/builtin/config.js +7 -0
- package/dist/tool-system/builtin/cron.d.ts +7 -0
- package/dist/tool-system/builtin/cron.js +105 -9
- package/dist/tool-system/builtin/drive-claude-code.d.ts +30 -0
- package/dist/tool-system/builtin/drive-claude-code.js +157 -0
- package/dist/tool-system/builtin/edit-model-catalog.d.ts +3 -0
- package/dist/tool-system/builtin/edit-model-catalog.js +94 -0
- package/dist/tool-system/builtin/edit.d.ts +2 -1
- package/dist/tool-system/builtin/edit.js +21 -12
- package/dist/tool-system/builtin/eol.d.ts +29 -0
- package/dist/tool-system/builtin/eol.js +37 -0
- package/dist/tool-system/builtin/file-cache.d.ts +6 -0
- package/dist/tool-system/builtin/file-cache.js +8 -0
- package/dist/tool-system/builtin/generate-image.d.ts +60 -0
- package/dist/tool-system/builtin/generate-image.js +374 -0
- package/dist/tool-system/builtin/generate-video.d.ts +55 -0
- package/dist/tool-system/builtin/generate-video.js +361 -0
- package/dist/tool-system/builtin/grep.js +6 -2
- package/dist/tool-system/builtin/image-providers.d.ts +86 -0
- package/dist/tool-system/builtin/image-providers.js +190 -0
- package/dist/tool-system/builtin/image-uploader.d.ts +33 -0
- package/dist/tool-system/builtin/image-uploader.js +74 -0
- package/dist/tool-system/builtin/index.d.ts +24 -1
- package/dist/tool-system/builtin/index.js +310 -25
- package/dist/tool-system/builtin/mcp-tools.js +23 -3
- package/dist/tool-system/builtin/memory.js +45 -7
- package/dist/tool-system/builtin/notebook-edit.d.ts +2 -1
- package/dist/tool-system/builtin/notebook-edit.js +1 -1
- package/dist/tool-system/builtin/powershell.js +4 -1
- package/dist/tool-system/builtin/read.d.ts +2 -1
- package/dist/tool-system/builtin/read.js +11 -3
- package/dist/tool-system/builtin/repl.js +4 -1
- package/dist/tool-system/builtin/skill.js +9 -0
- package/dist/tool-system/builtin/sleep.js +12 -5
- package/dist/tool-system/builtin/task.js +4 -1
- package/dist/tool-system/builtin/tool-search.js +25 -7
- package/dist/tool-system/builtin/update-automation-memory.d.ts +24 -0
- package/dist/tool-system/builtin/update-automation-memory.js +60 -0
- package/dist/tool-system/builtin/video-providers.d.ts +154 -0
- package/dist/tool-system/builtin/video-providers.js +235 -0
- package/dist/tool-system/builtin/view-image.d.ts +18 -0
- package/dist/tool-system/builtin/view-image.js +96 -0
- package/dist/tool-system/builtin/web-fetch.js +12 -2
- package/dist/tool-system/builtin/web-search.d.ts +4 -1
- package/dist/tool-system/builtin/web-search.js +57 -10
- package/dist/tool-system/builtin/worktree.d.ts +2 -1
- package/dist/tool-system/builtin/worktree.js +31 -4
- package/dist/tool-system/builtin/write.d.ts +2 -1
- package/dist/tool-system/builtin/write.js +1 -1
- package/dist/tool-system/context.d.ts +166 -6
- package/dist/tool-system/executor.d.ts +3 -2
- package/dist/tool-system/executor.js +197 -119
- package/dist/tool-system/investigation-guard.d.ts +4 -1
- package/dist/tool-system/investigation-guard.js +20 -4
- package/dist/tool-system/mcp-manager.d.ts +78 -16
- package/dist/tool-system/mcp-manager.js +357 -28
- package/dist/tool-system/path-policy.d.ts +99 -0
- package/dist/tool-system/path-policy.js +578 -0
- package/dist/tool-system/permission.d.ts +36 -1
- package/dist/tool-system/permission.js +322 -117
- package/dist/tool-system/plan-mode-allowlist.d.ts +32 -0
- package/dist/tool-system/plan-mode-allowlist.js +65 -0
- package/dist/tool-system/registry.d.ts +1 -0
- package/dist/tool-system/registry.js +26 -1
- package/dist/tool-system/sandbox/index.d.ts +8 -0
- package/dist/tool-system/sandbox/index.js +7 -2
- package/dist/tool-system/validate-tool-metadata.d.ts +36 -0
- package/dist/tool-system/validate-tool-metadata.js +63 -0
- package/dist/tool-system/validation.d.ts +10 -0
- package/dist/tool-system/validation.js +16 -3
- package/dist/types.d.ts +301 -15
- package/dist/updater.js +20 -9
- package/dist/utils/envUtils.d.ts +0 -9
- package/dist/utils/envUtils.js +3 -28
- package/dist/utils/exec.d.ts +40 -0
- package/dist/utils/exec.js +144 -0
- package/dist/utils/format.js +4 -2
- package/dist/utils/json.d.ts +12 -0
- package/dist/utils/json.js +92 -0
- package/dist/utils/lockfile.js +9 -2
- package/dist/utils/theme.d.ts +7 -1
- package/dist/utils/theme.js +5 -3
- package/dist/utils/toolDisplay.js +0 -1
- package/package.json +14 -7
- package/dist/agent/coordinator.d.ts +0 -49
- package/dist/agent/coordinator.js +0 -77
- package/dist/settings/manager.test.js +0 -73
- package/dist/tool-system/builtin/remote-trigger.d.ts +0 -6
- package/dist/tool-system/builtin/remote-trigger.js +0 -54
- package/dist/tool-system/builtin/send-message.d.ts +0 -6
- package/dist/tool-system/builtin/send-message.js +0 -47
- /package/dist/{settings/manager.test.d.ts → credentials/types.js} +0 -0
|
@@ -5,9 +5,15 @@
|
|
|
5
5
|
* at the MVP subset (github + git sources only, no auto-update,
|
|
6
6
|
* no policy blocking, no GCS mirror).
|
|
7
7
|
*/
|
|
8
|
-
import type { MarketplaceSource, PluginMarketplace } from "./types.js";
|
|
8
|
+
import type { MarketplaceFormat, MarketplaceSource, PluginMarketplace } from "./types.js";
|
|
9
|
+
export type { MarketplaceFormat } from "./types.js";
|
|
9
10
|
export declare function marketplacesRoot(): string;
|
|
10
11
|
export declare function marketplaceDir(name: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* Classify a cloned marketplace by which manifest files it ships:
|
|
14
|
+
* both → universal, only .agents/plugins → codex, otherwise claude-code.
|
|
15
|
+
*/
|
|
16
|
+
export declare function detectMarketplaceFormat(dir: string): MarketplaceFormat;
|
|
11
17
|
export type AddMarketplaceResult = {
|
|
12
18
|
ok: true;
|
|
13
19
|
name: string;
|
|
@@ -23,6 +29,13 @@ export type AddMarketplaceResult = {
|
|
|
23
29
|
* an entry into known_marketplaces.json.
|
|
24
30
|
*/
|
|
25
31
|
export declare function addMarketplace(name: string, source: MarketplaceSource): Promise<AddMarketplaceResult>;
|
|
32
|
+
/**
|
|
33
|
+
* Refreshes a known marketplace: re-pulls its source so the cached
|
|
34
|
+
* marketplace.json reflects upstream (new plugins, version bumps). Reuses
|
|
35
|
+
* addMarketplace's same-source path (git fetch + reset). Returns an error if
|
|
36
|
+
* the marketplace isn't known.
|
|
37
|
+
*/
|
|
38
|
+
export declare function refreshMarketplace(name: string): Promise<AddMarketplaceResult>;
|
|
26
39
|
/**
|
|
27
40
|
* Removes a marketplace: deletes the cached clone and the manifest entry.
|
|
28
41
|
* Returns whether anything was actually removed.
|
|
@@ -40,6 +53,7 @@ export interface ListedMarketplace {
|
|
|
40
53
|
installLocation: string;
|
|
41
54
|
lastUpdated: string;
|
|
42
55
|
pluginCount: number;
|
|
56
|
+
format: MarketplaceFormat;
|
|
43
57
|
}
|
|
44
58
|
/**
|
|
45
59
|
* Lists all known marketplaces with a quick plugin count read from each
|
|
@@ -11,6 +11,7 @@ import { homedir } from "node:os";
|
|
|
11
11
|
import { gitClone, gitFetchAndReset, githubRepoToCloneUrl } from "./gitOps.js";
|
|
12
12
|
import { readKnownMarketplaces, upsertKnownMarketplace, removeKnownMarketplace, } from "./knownMarketplaces.js";
|
|
13
13
|
import { validateMarketplace } from "./schemas.js";
|
|
14
|
+
import { assertSafePluginName } from "./installer/paths.js";
|
|
14
15
|
function userHome() {
|
|
15
16
|
return process.env.HOME ?? homedir();
|
|
16
17
|
}
|
|
@@ -18,10 +19,46 @@ export function marketplacesRoot() {
|
|
|
18
19
|
return join(userHome(), ".code-shell", "plugins", "marketplaces");
|
|
19
20
|
}
|
|
20
21
|
export function marketplaceDir(name) {
|
|
22
|
+
// Single choke point for add/remove/refresh (all derive `dir` from here and
|
|
23
|
+
// then gitClone / rmSync it). Validate `name` as one safe path segment so a
|
|
24
|
+
// `..` / separator / NUL can't escape marketplacesRoot. Normal derived names
|
|
25
|
+
// (lowercase repo tails) are unaffected; reuses the plugin segment guard.
|
|
26
|
+
assertSafePluginName(name);
|
|
21
27
|
return join(marketplacesRoot(), name);
|
|
22
28
|
}
|
|
29
|
+
const CC_MANIFEST_REL = [".claude-plugin", "marketplace.json"];
|
|
30
|
+
const CODEX_MANIFEST_REL = [".agents", "plugins", "marketplace.json"];
|
|
31
|
+
/**
|
|
32
|
+
* Resolve the marketplace manifest inside a cloned repo. Claude Code's format
|
|
33
|
+
* lives at .claude-plugin/marketplace.json; the Codex / agents format lives at
|
|
34
|
+
* .agents/plugins/marketplace.json. Prefer the CC manifest when present (it is
|
|
35
|
+
* our canonical shape), else fall back to the Codex one. Returns null when
|
|
36
|
+
* neither exists.
|
|
37
|
+
*/
|
|
38
|
+
function resolveManifestPath(dir) {
|
|
39
|
+
const cc = join(dir, ...CC_MANIFEST_REL);
|
|
40
|
+
if (existsSync(cc))
|
|
41
|
+
return cc;
|
|
42
|
+
const codex = join(dir, ...CODEX_MANIFEST_REL);
|
|
43
|
+
if (existsSync(codex))
|
|
44
|
+
return codex;
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
23
47
|
function marketplaceJsonPath(name) {
|
|
24
|
-
return
|
|
48
|
+
return resolveManifestPath(marketplaceDir(name));
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Classify a cloned marketplace by which manifest files it ships:
|
|
52
|
+
* both → universal, only .agents/plugins → codex, otherwise claude-code.
|
|
53
|
+
*/
|
|
54
|
+
export function detectMarketplaceFormat(dir) {
|
|
55
|
+
const hasCc = existsSync(join(dir, ...CC_MANIFEST_REL));
|
|
56
|
+
const hasCodex = existsSync(join(dir, ...CODEX_MANIFEST_REL));
|
|
57
|
+
if (hasCc && hasCodex)
|
|
58
|
+
return "universal";
|
|
59
|
+
if (hasCodex)
|
|
60
|
+
return "codex";
|
|
61
|
+
return "claude-code";
|
|
25
62
|
}
|
|
26
63
|
function sourceToCloneUrl(source) {
|
|
27
64
|
return source.source === "github" ? githubRepoToCloneUrl(source.repo) : source.url;
|
|
@@ -55,11 +92,11 @@ export async function addMarketplace(name, source) {
|
|
|
55
92
|
}
|
|
56
93
|
}
|
|
57
94
|
const manifestPath = marketplaceJsonPath(name);
|
|
58
|
-
if (!
|
|
95
|
+
if (!manifestPath) {
|
|
59
96
|
rmSync(dir, { recursive: true, force: true });
|
|
60
97
|
return {
|
|
61
98
|
ok: false,
|
|
62
|
-
error: `Marketplace ${name}:
|
|
99
|
+
error: `Marketplace ${name}: no marketplace.json found (looked in .claude-plugin/ and .agents/plugins/).`,
|
|
63
100
|
};
|
|
64
101
|
}
|
|
65
102
|
let raw;
|
|
@@ -82,10 +119,25 @@ export async function addMarketplace(name, source) {
|
|
|
82
119
|
source,
|
|
83
120
|
installLocation: dir,
|
|
84
121
|
lastUpdated: new Date().toISOString(),
|
|
122
|
+
format: detectMarketplaceFormat(dir),
|
|
85
123
|
};
|
|
86
124
|
upsertKnownMarketplace(name, entry);
|
|
87
125
|
return { ok: true, name, marketplace: v.value, replaced: Boolean(existing) };
|
|
88
126
|
}
|
|
127
|
+
/**
|
|
128
|
+
* Refreshes a known marketplace: re-pulls its source so the cached
|
|
129
|
+
* marketplace.json reflects upstream (new plugins, version bumps). Reuses
|
|
130
|
+
* addMarketplace's same-source path (git fetch + reset). Returns an error if
|
|
131
|
+
* the marketplace isn't known.
|
|
132
|
+
*/
|
|
133
|
+
export async function refreshMarketplace(name) {
|
|
134
|
+
const known = readKnownMarketplaces();
|
|
135
|
+
const entry = known[name];
|
|
136
|
+
if (!entry) {
|
|
137
|
+
return { ok: false, error: `Unknown marketplace: ${name}` };
|
|
138
|
+
}
|
|
139
|
+
return addMarketplace(name, entry.source);
|
|
140
|
+
}
|
|
89
141
|
/**
|
|
90
142
|
* Removes a marketplace: deletes the cached clone and the manifest entry.
|
|
91
143
|
* Returns whether anything was actually removed.
|
|
@@ -108,7 +160,7 @@ export function loadMarketplace(name) {
|
|
|
108
160
|
if (!known[name])
|
|
109
161
|
return null;
|
|
110
162
|
const manifestPath = marketplaceJsonPath(name);
|
|
111
|
-
if (!
|
|
163
|
+
if (!manifestPath)
|
|
112
164
|
return null;
|
|
113
165
|
let raw;
|
|
114
166
|
try {
|
|
@@ -136,6 +188,8 @@ export function listMarketplaces() {
|
|
|
136
188
|
installLocation: entry.installLocation,
|
|
137
189
|
lastUpdated: entry.lastUpdated,
|
|
138
190
|
pluginCount: mp ? mp.plugins.length : -1,
|
|
191
|
+
// Re-detect from disk when the stored entry predates the format field.
|
|
192
|
+
format: entry.format ?? detectMarketplaceFormat(entry.installLocation),
|
|
139
193
|
});
|
|
140
194
|
}
|
|
141
195
|
return out.sort((a, b) => a.name.localeCompare(b.name));
|
|
@@ -31,6 +31,8 @@
|
|
|
31
31
|
* branch — not the CC one.
|
|
32
32
|
*/
|
|
33
33
|
import { spawn } from "node:child_process";
|
|
34
|
+
import { MAX_HOOK_OUTPUT_BYTES } from "../hooks/hook-output.js";
|
|
35
|
+
import { killChildTree } from "../runtime/spawn-common.js";
|
|
34
36
|
const DEFAULT_TIMEOUT_MS = 60_000;
|
|
35
37
|
/**
|
|
36
38
|
* Extract the user-facing context string from a CC plugin's stdout JSON.
|
|
@@ -99,6 +101,13 @@ export async function runPluginCommandHook(spec, ctx) {
|
|
|
99
101
|
let stdout = "";
|
|
100
102
|
let stderr = "";
|
|
101
103
|
let settled = false;
|
|
104
|
+
// Output byte caps mirror src/hooks/shell-runner.ts so a chatty plugin
|
|
105
|
+
// hook can't hold engine memory hostage. Past the cap we SIGTERM the
|
|
106
|
+
// child and treat the hook as failed; stderr cap truncates with a
|
|
107
|
+
// marker instead of failing the hook.
|
|
108
|
+
let stdoutBytes = 0;
|
|
109
|
+
let stdoutCapped = false;
|
|
110
|
+
let stderrCapped = false;
|
|
102
111
|
const settle = (value) => {
|
|
103
112
|
if (settled)
|
|
104
113
|
return;
|
|
@@ -108,26 +117,31 @@ export async function runPluginCommandHook(spec, ctx) {
|
|
|
108
117
|
const timer = setTimeout(() => {
|
|
109
118
|
// eslint-disable-next-line no-console
|
|
110
119
|
console.warn(`[plugin-hook] ${spec.pluginKey} ${ctx.eventName} timed out after ${timeoutMs}ms`);
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
setTimeout(() => {
|
|
114
|
-
try {
|
|
115
|
-
child.kill("SIGKILL");
|
|
116
|
-
}
|
|
117
|
-
catch {
|
|
118
|
-
/* already exited */
|
|
119
|
-
}
|
|
120
|
-
}, 1000);
|
|
121
|
-
}
|
|
122
|
-
catch {
|
|
123
|
-
/* already exited */
|
|
124
|
-
}
|
|
120
|
+
// win32: taskkill /T reaps the tree; POSIX: SIGTERM → grace → SIGKILL.
|
|
121
|
+
killChildTree(child, 1000);
|
|
125
122
|
settle({});
|
|
126
123
|
}, timeoutMs);
|
|
127
124
|
child.stdout?.on("data", (chunk) => {
|
|
125
|
+
stdoutBytes += chunk.length;
|
|
126
|
+
if (stdoutBytes > MAX_HOOK_OUTPUT_BYTES) {
|
|
127
|
+
if (!stdoutCapped) {
|
|
128
|
+
stdoutCapped = true;
|
|
129
|
+
// eslint-disable-next-line no-console
|
|
130
|
+
console.warn(`[plugin-hook] ${spec.pluginKey} ${ctx.eventName} stdout exceeded ${MAX_HOOK_OUTPUT_BYTES} bytes — killing`);
|
|
131
|
+
killChildTree(child, 1000);
|
|
132
|
+
}
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
128
135
|
stdout += chunk.toString("utf8");
|
|
129
136
|
});
|
|
130
137
|
child.stderr?.on("data", (chunk) => {
|
|
138
|
+
if (stderr.length + chunk.length > MAX_HOOK_OUTPUT_BYTES) {
|
|
139
|
+
if (!stderrCapped) {
|
|
140
|
+
stderrCapped = true;
|
|
141
|
+
stderr += "\n…[stderr truncated]";
|
|
142
|
+
}
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
131
145
|
stderr += chunk.toString("utf8");
|
|
132
146
|
});
|
|
133
147
|
child.on("error", (err) => {
|
|
@@ -138,6 +152,12 @@ export async function runPluginCommandHook(spec, ctx) {
|
|
|
138
152
|
});
|
|
139
153
|
child.on("close", (code) => {
|
|
140
154
|
clearTimeout(timer);
|
|
155
|
+
if (stdoutCapped) {
|
|
156
|
+
// eslint-disable-next-line no-console
|
|
157
|
+
console.error(`[plugin-hook] ${spec.pluginKey} ${ctx.eventName} killed due to oversized stdout (> ${MAX_HOOK_OUTPUT_BYTES} bytes)`);
|
|
158
|
+
settle({});
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
141
161
|
if (code !== 0) {
|
|
142
162
|
// eslint-disable-next-line no-console
|
|
143
163
|
console.warn(`[plugin-hook] ${spec.pluginKey} ${ctx.eventName} exited ${code}; stderr:`, stderr.slice(0, 500));
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin content inventory (插件详情页) — enumerate everything one installed
|
|
3
|
+
* plugin contributes: skills, commands, agents, hooks, MCP servers. The
|
|
4
|
+
* plugins list only showed "N skills", so users couldn't see what a plugin
|
|
5
|
+
* actually installs (feedback#15). Read-only; reuses the same parsers the
|
|
6
|
+
* loaders use so the inventory can't drift from what actually loads.
|
|
7
|
+
*/
|
|
8
|
+
import { type PluginHookEntry } from "./loadPluginHooks.js";
|
|
9
|
+
export interface PluginContentInventory {
|
|
10
|
+
/** skills/<name>/SKILL.md — name + frontmatter description when present. */
|
|
11
|
+
skills: {
|
|
12
|
+
name: string;
|
|
13
|
+
description?: string;
|
|
14
|
+
}[];
|
|
15
|
+
/** commands/<name>.md */
|
|
16
|
+
commands: string[];
|
|
17
|
+
/** agents/<name>.md */
|
|
18
|
+
agents: string[];
|
|
19
|
+
/** hooks/hooks.json entries (event + command), owner-filtered. */
|
|
20
|
+
hooks: PluginHookEntry[];
|
|
21
|
+
/** MCP server names as merged (keyed `<plugin>:<server>` — bare name here). */
|
|
22
|
+
mcpServers: string[];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Inventory one plugin's contributions. `pluginName` is the bare name (no
|
|
26
|
+
* @marketplace); `installPath` its install dir. Hooks/MCP go through the same
|
|
27
|
+
* scanners the runtime loaders use (filtered to this plugin) so naming —
|
|
28
|
+
* e.g. MCP's `<plugin>:<server>` record keys — matches what users see live.
|
|
29
|
+
*/
|
|
30
|
+
export declare function describePluginContent(pluginName: string, installPath: string): PluginContentInventory;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin content inventory (插件详情页) — enumerate everything one installed
|
|
3
|
+
* plugin contributes: skills, commands, agents, hooks, MCP servers. The
|
|
4
|
+
* plugins list only showed "N skills", so users couldn't see what a plugin
|
|
5
|
+
* actually installs (feedback#15). Read-only; reuses the same parsers the
|
|
6
|
+
* loaders use so the inventory can't drift from what actually loads.
|
|
7
|
+
*/
|
|
8
|
+
import { existsSync, readdirSync, readFileSync, statSync } from "node:fs";
|
|
9
|
+
import { join } from "node:path";
|
|
10
|
+
import { parseFrontmatter } from "../skills/frontmatter.js";
|
|
11
|
+
import { listPluginHooks } from "./loadPluginHooks.js";
|
|
12
|
+
import { mergePluginMcpServers } from "./installer/loadPluginMcp.js";
|
|
13
|
+
function listMdNames(dir) {
|
|
14
|
+
if (!existsSync(dir))
|
|
15
|
+
return [];
|
|
16
|
+
try {
|
|
17
|
+
return readdirSync(dir)
|
|
18
|
+
.filter((f) => f.endsWith(".md"))
|
|
19
|
+
.map((f) => f.replace(/\.md$/, ""))
|
|
20
|
+
.sort();
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return [];
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function listSkills(installPath) {
|
|
27
|
+
const dir = join(installPath, "skills");
|
|
28
|
+
if (!existsSync(dir))
|
|
29
|
+
return [];
|
|
30
|
+
const out = [];
|
|
31
|
+
try {
|
|
32
|
+
for (const entry of readdirSync(dir).sort()) {
|
|
33
|
+
const skillMd = join(dir, entry, "SKILL.md");
|
|
34
|
+
try {
|
|
35
|
+
if (!statSync(join(dir, entry)).isDirectory() || !existsSync(skillMd))
|
|
36
|
+
continue;
|
|
37
|
+
const { frontmatter } = parseFrontmatter(readFileSync(skillMd, "utf-8"));
|
|
38
|
+
const desc = typeof frontmatter.description === "string" ? frontmatter.description : undefined;
|
|
39
|
+
out.push({ name: entry, description: desc });
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// unreadable skill dir — skip, same as the loader would
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return [];
|
|
48
|
+
}
|
|
49
|
+
return out;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Inventory one plugin's contributions. `pluginName` is the bare name (no
|
|
53
|
+
* @marketplace); `installPath` its install dir. Hooks/MCP go through the same
|
|
54
|
+
* scanners the runtime loaders use (filtered to this plugin) so naming —
|
|
55
|
+
* e.g. MCP's `<plugin>:<server>` record keys — matches what users see live.
|
|
56
|
+
*/
|
|
57
|
+
export function describePluginContent(pluginName, installPath) {
|
|
58
|
+
const mcpPrefix = `${pluginName}:`;
|
|
59
|
+
let mcpServers = [];
|
|
60
|
+
try {
|
|
61
|
+
mcpServers = Object.keys(mergePluginMcpServers({}))
|
|
62
|
+
.filter((k) => k.startsWith(mcpPrefix))
|
|
63
|
+
.map((k) => k.slice(mcpPrefix.length))
|
|
64
|
+
.sort();
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
mcpServers = [];
|
|
68
|
+
}
|
|
69
|
+
let hooks = [];
|
|
70
|
+
try {
|
|
71
|
+
hooks = listPluginHooks().filter((h) => h.plugin === pluginName);
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
hooks = [];
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
skills: listSkills(installPath),
|
|
78
|
+
commands: listMdNames(join(installPath, "commands")),
|
|
79
|
+
agents: listMdNames(join(installPath, "agents")),
|
|
80
|
+
hooks,
|
|
81
|
+
mcpServers,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
@@ -5,6 +5,30 @@
|
|
|
5
5
|
* sparse-checkout, no npm/pip.
|
|
6
6
|
*/
|
|
7
7
|
import type { PluginInstallEntry } from "./types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Compose the on-disk cache directory for a plugin version. Every path segment
|
|
10
|
+
* (marketplace / plugin / version) can originate from an attacker-controlled
|
|
11
|
+
* marketplace manifest, so each must be validated as a single safe path
|
|
12
|
+
* segment before it enters `join`. Without this a manifest entry named `..`
|
|
13
|
+
* (or containing a separator) would let the materialized plugin tree be
|
|
14
|
+
* written outside the plugin cache root — a supply-chain path traversal.
|
|
15
|
+
*
|
|
16
|
+
* Reuses `assertSafePluginName` (rejects empty / "." / ".." / separators /
|
|
17
|
+
* NUL). Exported so the segment-validation contract can be unit-tested
|
|
18
|
+
* directly.
|
|
19
|
+
*/
|
|
20
|
+
export declare function pluginCacheDir(marketplace: string, plugin: string, version: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* Resolve a candidate `installPath` to a realpath and verify it lives strictly
|
|
23
|
+
* underneath the plugin cache root. Returns the resolved path on success, or
|
|
24
|
+
* null when the path is missing, escapes the cache, equals the cache root
|
|
25
|
+
* itself, or is otherwise unsafe to remove.
|
|
26
|
+
*
|
|
27
|
+
* Exported so tests can exercise the safety predicate directly without
|
|
28
|
+
* arranging a full uninstall — the contract this defends (no rmSync outside
|
|
29
|
+
* the plugin cache) is the entire point of T2 / Workstream A2.
|
|
30
|
+
*/
|
|
31
|
+
export declare function resolveSafePluginPath(installPath: string, cacheRoot: string): string | null;
|
|
8
32
|
export interface VarRewriteReport {
|
|
9
33
|
filesScanned: number;
|
|
10
34
|
filesRewritten: number;
|
|
@@ -18,6 +42,16 @@ export type InstallResult = {
|
|
|
18
42
|
ok: false;
|
|
19
43
|
error: string;
|
|
20
44
|
};
|
|
45
|
+
/**
|
|
46
|
+
* Compare a marketplace-declared SHA against the cloned HEAD. The
|
|
47
|
+
* declaration is allowed to be a short prefix (>= 7 chars, standard git
|
|
48
|
+
* abbreviation length); for stricter integrity guarantees marketplaces
|
|
49
|
+
* should pin the full 40-char hash. Case-insensitive.
|
|
50
|
+
*
|
|
51
|
+
* Exported so a unit test can pin the policy without spinning up a real
|
|
52
|
+
* clone.
|
|
53
|
+
*/
|
|
54
|
+
export declare function shaMatches(declared: string, actual: string): boolean;
|
|
21
55
|
/**
|
|
22
56
|
* Install a plugin from a previously-added marketplace into the user
|
|
23
57
|
* cache. Idempotent within a process: re-installing replaces the
|