@cjhyy/code-shell-core 0.7.1 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +36 -23
- package/dist/agent/agent-definition-registry.d.ts +2 -2
- package/dist/agent/agent-definition-registry.js +47 -10
- package/dist/agent/agent-definition.d.ts +5 -0
- package/dist/agent/agent-definition.js +14 -0
- package/dist/automation/index.d.ts +7 -4
- package/dist/automation/index.js +4 -2
- package/dist/automation/runner.js +3 -1
- package/dist/automation/scheduler.d.ts +57 -1
- package/dist/automation/scheduler.js +123 -23
- package/dist/automation/store.d.ts +6 -2
- package/dist/automation/store.js +7 -3
- package/dist/capabilities/index.d.ts +109 -0
- package/dist/capabilities/index.js +80 -0
- package/dist/capability-control/disabled-lists.d.ts +2 -1
- package/dist/capability-control/disabled-lists.js +3 -5
- package/dist/capability-control/overlay.d.ts +14 -1
- package/dist/capability-control/overlay.js +40 -0
- package/dist/capability-control/service.js +6 -4
- package/dist/cli/agent-server-stdio.d.ts +1 -1
- package/dist/cli/agent-server-stdio.js +66 -6
- package/dist/cli/agent-server-tcp.js +7 -3
- package/dist/context/compaction.d.ts +39 -3
- package/dist/context/compaction.js +151 -39
- package/dist/context/manager.d.ts +17 -1
- package/dist/context/manager.js +36 -1
- package/dist/credentials/access.d.ts +3 -1
- package/dist/credentials/access.js +24 -3
- package/dist/credentials/index.d.ts +1 -1
- package/dist/credentials/index.js +1 -1
- package/dist/credentials/oauth.d.ts +4 -1
- package/dist/credentials/oauth.js +14 -0
- package/dist/credentials/store.d.ts +15 -1
- package/dist/credentials/store.js +17 -4
- package/dist/credentials/types.d.ts +24 -0
- package/dist/credentials/use-credential-tool.js +15 -1
- package/dist/engine/auxiliary-pipeline.d.ts +40 -0
- package/dist/engine/auxiliary-pipeline.js +181 -0
- package/dist/{settings → engine}/disk-defaults.d.ts +2 -2
- package/dist/{settings → engine}/disk-defaults.js +5 -2
- package/dist/engine/dynamic-tool-defs.d.ts +4 -0
- package/dist/engine/dynamic-tool-defs.js +4 -0
- package/dist/engine/engine.d.ts +254 -195
- package/dist/engine/engine.js +1812 -2041
- package/dist/engine/file-history-hook.d.ts +11 -0
- package/dist/engine/file-history-hook.js +31 -0
- package/dist/engine/goal-judge-context.d.ts +9 -0
- package/dist/engine/goal-judge-context.js +234 -0
- package/dist/engine/injected-context-cache.d.ts +6 -0
- package/dist/engine/injected-context-cache.js +13 -0
- package/dist/engine/input-attachments.d.ts +1 -1
- package/dist/engine/model-facade.d.ts +3 -3
- package/dist/engine/model-facade.js +15 -14
- package/dist/engine/permission-controller.d.ts +55 -0
- package/dist/engine/permission-controller.js +148 -0
- package/dist/engine/prompt-cache-diagnostics.d.ts +58 -0
- package/dist/engine/prompt-cache-diagnostics.js +178 -0
- package/dist/engine/run-accounting.d.ts +41 -0
- package/dist/engine/run-accounting.js +126 -0
- package/dist/engine/run-context.d.ts +44 -0
- package/dist/engine/run-context.js +88 -0
- package/dist/engine/run-environment.d.ts +30 -0
- package/dist/engine/run-environment.js +77 -0
- package/dist/engine/run-finalize.d.ts +58 -0
- package/dist/engine/run-finalize.js +245 -0
- package/dist/engine/run-goal.d.ts +58 -0
- package/dist/engine/run-goal.js +188 -0
- package/dist/engine/run-image-input.d.ts +1 -1
- package/dist/engine/run-image-input.js +5 -3
- package/dist/engine/run-session-open.d.ts +41 -0
- package/dist/engine/run-session-open.js +186 -0
- package/dist/engine/run-setup.d.ts +42 -0
- package/dist/engine/run-setup.js +58 -0
- package/dist/engine/run-tooling.d.ts +125 -0
- package/dist/engine/run-tooling.js +283 -0
- package/dist/engine/run-types.d.ts +139 -0
- package/dist/engine/run-types.js +12 -0
- package/dist/engine/run-workspace.d.ts +50 -0
- package/dist/engine/run-workspace.js +114 -0
- package/dist/engine/steer-queue.d.ts +1 -1
- package/dist/engine/subagent-spawner.d.ts +32 -0
- package/dist/engine/subagent-spawner.js +287 -0
- package/dist/engine/tool-summary.d.ts +2 -2
- package/dist/engine/tool-summary.js +2 -2
- package/dist/engine/turn-loop.d.ts +49 -10
- package/dist/engine/turn-loop.js +370 -104
- package/dist/engine/types.d.ts +30 -3
- package/dist/engine/types.js +1 -1
- package/dist/{engine/goal.d.ts → goal/lifecycle.d.ts} +76 -4
- package/dist/goal/lifecycle.js +482 -0
- package/dist/hooks/events.d.ts +24 -10
- package/dist/hooks/goal-stop-hook.d.ts +17 -28
- package/dist/hooks/goal-stop-hook.js +110 -465
- package/dist/hooks/registry.js +1 -1
- package/dist/index.d.ts +48 -108
- package/dist/index.extension.d.ts +51 -0
- package/dist/index.extension.js +39 -0
- package/dist/index.internal.d.ts +86 -0
- package/dist/index.internal.js +92 -0
- package/dist/index.js +34 -123
- package/dist/links/cli.d.ts +48 -0
- package/dist/links/cli.js +617 -0
- package/dist/links/http.d.ts +40 -0
- package/dist/links/http.js +166 -0
- package/dist/links/index.d.ts +4 -0
- package/dist/links/index.js +3 -0
- package/dist/links/link-action-tool.d.ts +5 -0
- package/dist/links/link-action-tool.js +241 -0
- package/dist/links/providers.d.ts +8 -0
- package/dist/links/providers.js +665 -0
- package/dist/links/types.d.ts +44 -0
- package/dist/llm/client-base.d.ts +7 -0
- package/dist/llm/client-base.js +60 -0
- package/dist/llm/model-pool.d.ts +1 -1
- package/dist/llm/model-pool.js +1 -1
- package/dist/llm/providers/anthropic.d.ts +1 -0
- package/dist/llm/providers/anthropic.js +9 -0
- package/dist/llm/providers/openai.d.ts +1 -0
- package/dist/llm/providers/openai.js +17 -0
- package/dist/model-catalog/index.js +15 -2
- package/dist/model-catalog/resolve.d.ts +13 -1
- package/dist/model-catalog/resolve.js +37 -2
- package/dist/model-catalog/types.d.ts +74 -48
- package/dist/model-catalog/types.js +16 -5
- package/dist/model-catalog/upsert.d.ts +3 -1
- package/dist/model-catalog/upsert.js +9 -0
- package/dist/onboarding.d.ts +0 -1
- package/dist/onboarding.js +1 -22
- package/dist/panel-apps/bindings.d.ts +24 -0
- package/dist/panel-apps/bindings.js +69 -0
- package/dist/panel-apps/github-archive.d.ts +21 -0
- package/dist/panel-apps/github-archive.js +98 -0
- package/dist/panel-apps/index.d.ts +4 -0
- package/dist/panel-apps/index.js +4 -0
- package/dist/panel-apps/installer.d.ts +68 -0
- package/dist/panel-apps/installer.js +622 -0
- package/dist/panel-apps/manifest.d.ts +364 -0
- package/dist/panel-apps/manifest.js +189 -0
- package/dist/panel-apps/paths.d.ts +13 -0
- package/dist/panel-apps/paths.js +38 -0
- package/dist/panel-apps/registry.d.ts +51 -0
- package/dist/panel-apps/registry.js +99 -0
- package/dist/panel-apps/runtime.d.ts +80 -0
- package/dist/panel-apps/runtime.js +154 -0
- package/dist/plugins/gitOps.js +8 -1
- package/dist/plugins/installedPlugins.d.ts +2 -1
- package/dist/plugins/installedPlugins.js +146 -8
- package/dist/plugins/installer/codex/convertAgents.d.ts +4 -1
- package/dist/plugins/installer/codex/convertAgents.js +62 -8
- package/dist/plugins/installer/codex/convertCommands.d.ts +5 -5
- package/dist/plugins/installer/codex/convertCommands.js +35 -12
- package/dist/plugins/installer/codex/convertHooks.d.ts +10 -0
- package/dist/plugins/installer/codex/convertHooks.js +82 -0
- package/dist/plugins/installer/codex/convertSkills.js +41 -6
- package/dist/plugins/installer/install.d.ts +7 -1
- package/dist/plugins/installer/install.js +21 -87
- package/dist/plugins/installer/installFromArchive.d.ts +26 -4
- package/dist/plugins/installer/installFromArchive.js +44 -27
- package/dist/plugins/installer/installFromNpm.d.ts +31 -0
- package/dist/plugins/installer/installFromNpm.js +273 -0
- package/dist/plugins/installer/loadPluginAgents.js +17 -4
- package/dist/plugins/installer/loadPluginMcp.d.ts +14 -0
- package/dist/plugins/installer/loadPluginMcp.js +245 -35
- package/dist/plugins/installer/normalizeManifest.d.ts +13 -0
- package/dist/plugins/installer/normalizeManifest.js +306 -0
- package/dist/plugins/installer/npmTar.d.ts +13 -0
- package/dist/plugins/installer/npmTar.js +321 -0
- package/dist/plugins/installer/parseSource.d.ts +11 -0
- package/dist/plugins/installer/parseSource.js +48 -0
- package/dist/plugins/installer/preview.d.ts +101 -0
- package/dist/plugins/installer/preview.js +336 -0
- package/dist/plugins/installer/projectPluginSource.d.ts +14 -0
- package/dist/plugins/installer/projectPluginSource.js +140 -0
- package/dist/plugins/installer/types.d.ts +775 -0
- package/dist/plugins/installer/types.js +100 -0
- package/dist/plugins/installer/unzip.d.ts +11 -0
- package/dist/plugins/installer/unzip.js +123 -9
- package/dist/plugins/installer/update.d.ts +2 -2
- package/dist/plugins/installer/update.js +43 -4
- package/dist/plugins/loadPluginHooks.d.ts +19 -2
- package/dist/plugins/loadPluginHooks.js +97 -86
- package/dist/plugins/pluginAutomationTemplates.d.ts +18 -0
- package/dist/plugins/pluginAutomationTemplates.js +50 -0
- package/dist/plugins/pluginCatalog.d.ts +45 -0
- package/dist/plugins/pluginCatalog.js +87 -0
- package/dist/plugins/pluginCommandHook.d.ts +6 -0
- package/dist/plugins/pluginCommandHook.js +25 -8
- package/dist/plugins/pluginCommandsLoader.d.ts +19 -0
- package/dist/plugins/pluginCommandsLoader.js +181 -7
- package/dist/plugins/pluginContent.d.ts +10 -1
- package/dist/plugins/pluginContent.js +87 -30
- package/dist/plugins/pluginHookApproval.d.ts +30 -0
- package/dist/plugins/pluginHookApproval.js +160 -0
- package/dist/plugins/pluginHookIntegrity.d.ts +69 -0
- package/dist/plugins/pluginHookIntegrity.js +361 -0
- package/dist/plugins/pluginInstaller.js +71 -12
- package/dist/plugins/pluginMcpApproval.d.ts +19 -0
- package/dist/plugins/pluginMcpApproval.js +110 -0
- package/dist/plugins/pluginMcpIntegrity.d.ts +21 -0
- package/dist/plugins/pluginMcpIntegrity.js +74 -0
- package/dist/plugins/types.d.ts +30 -0
- package/dist/plugins/varRewrite.d.ts +9 -5
- package/dist/plugins/varRewrite.js +26 -17
- package/dist/preset/index.d.ts +11 -8
- package/dist/preset/index.js +62 -203
- package/dist/product/define.js +9 -3
- package/dist/product/types.d.ts +0 -2
- package/dist/profile/activation.d.ts +36 -0
- package/dist/profile/activation.js +57 -0
- package/dist/profile/catalog-store.d.ts +77 -0
- package/dist/profile/catalog-store.js +346 -0
- package/dist/profile/catalog.d.ts +54 -0
- package/dist/profile/catalog.js +152 -0
- package/dist/profile/index.d.ts +7 -0
- package/dist/profile/index.js +7 -0
- package/dist/profile/requirements.d.ts +76 -0
- package/dist/profile/requirements.js +117 -0
- package/dist/profile/resolve.d.ts +11 -0
- package/dist/profile/resolve.js +41 -0
- package/dist/profile/store.d.ts +17 -0
- package/dist/profile/store.js +167 -0
- package/dist/profile/types.d.ts +321 -0
- package/dist/profile/types.js +104 -0
- package/dist/prompt/composer.d.ts +46 -7
- package/dist/prompt/composer.js +78 -48
- package/dist/prompt/instruction-scanner.d.ts +6 -5
- package/dist/prompt/instruction-scanner.js +8 -23
- package/dist/prompt/section-loader.d.ts +2 -2
- package/dist/prompt/section-loader.js +7 -4
- package/dist/prompt/sections/browser.md +10 -9
- package/dist/prompt/sections/harness-base.md +9 -0
- package/dist/protocol/chat-session-manager.d.ts +64 -1
- package/dist/protocol/chat-session-manager.js +104 -0
- package/dist/protocol/chat-session.d.ts +61 -10
- package/dist/protocol/chat-session.js +135 -25
- package/dist/protocol/client.d.ts +33 -3
- package/dist/protocol/client.js +96 -5
- package/dist/protocol/index.d.ts +2 -2
- package/dist/protocol/index.js +2 -2
- package/dist/protocol/mobile-remote-types.d.ts +406 -0
- package/dist/protocol/mobile-remote-types.js +1 -0
- package/dist/protocol/server.d.ts +127 -3
- package/dist/protocol/server.js +1309 -182
- package/dist/protocol/types.d.ts +152 -34
- package/dist/protocol/types.js +16 -0
- package/dist/run/ArtifactTracker.d.ts +6 -1
- package/dist/run/ArtifactTracker.js +29 -21
- package/dist/run/EngineRunner.d.ts +2 -0
- package/dist/run/EngineRunner.js +1 -0
- package/dist/run/RunManager.d.ts +26 -0
- package/dist/run/RunManager.js +82 -11
- package/dist/run/factory.d.ts +3 -0
- package/dist/run/factory.js +2 -0
- package/dist/runtime/safe-spawn.d.ts +6 -0
- package/dist/runtime/safe-spawn.js +8 -13
- package/dist/services/auto-dream.d.ts +13 -1
- package/dist/services/auto-dream.js +56 -8
- package/dist/services/dream-consolidation.js +10 -1
- package/dist/services/memory-orchestrator.js +6 -2
- package/dist/services/oauth.js +4 -1
- package/dist/services/session-memory.d.ts +4 -4
- package/dist/services/session-memory.js +13 -10
- package/dist/session/memory.d.ts +26 -7
- package/dist/session/memory.js +79 -21
- package/dist/session/session-manager.d.ts +182 -28
- package/dist/session/session-manager.js +910 -130
- package/dist/session/session-message.d.ts +22 -0
- package/dist/session/session-message.js +1 -0
- package/dist/session/transcript.d.ts +46 -5
- package/dist/session/transcript.js +159 -3
- package/dist/settings/feature-flags.d.ts +40 -0
- package/dist/settings/feature-flags.js +40 -0
- package/dist/settings/manager.d.ts +39 -1
- package/dist/settings/manager.js +102 -41
- package/dist/settings/migrate-config.js +4 -2
- package/dist/settings/schema.d.ts +511 -177
- package/dist/settings/schema.js +98 -25
- package/dist/skills/scanner.d.ts +6 -2
- package/dist/skills/scanner.js +160 -9
- package/dist/sources/adapter.d.ts +14 -0
- package/dist/sources/adapter.js +7 -0
- package/dist/sources/adapters/local-files.d.ts +10 -0
- package/dist/sources/adapters/local-files.js +127 -0
- package/dist/sources/adapters/mcp-resource.d.ts +17 -0
- package/dist/sources/adapters/mcp-resource.js +41 -0
- package/dist/sources/adapters/mock.d.ts +3 -0
- package/dist/sources/adapters/mock.js +29 -0
- package/dist/sources/binding.d.ts +6 -0
- package/dist/sources/binding.js +24 -0
- package/dist/sources/catalog.d.ts +6 -0
- package/dist/sources/catalog.js +64 -0
- package/dist/sources/context-summary.d.ts +8 -0
- package/dist/sources/context-summary.js +13 -0
- package/dist/sources/credential-status.d.ts +2 -0
- package/dist/sources/credential-status.js +13 -0
- package/dist/sources/index.d.ts +10 -0
- package/dist/sources/index.js +10 -0
- package/dist/sources/resolve.d.ts +28 -0
- package/dist/sources/resolve.js +47 -0
- package/dist/sources/truncate-utf8.d.ts +7 -0
- package/dist/sources/truncate-utf8.js +18 -0
- package/dist/sources/types.d.ts +71 -0
- package/dist/sources/types.js +26 -0
- package/dist/testing/fetch-stub.d.ts +32 -0
- package/dist/testing/fetch-stub.js +24 -0
- package/dist/themes/image.d.ts +18 -0
- package/dist/themes/image.js +117 -0
- package/dist/themes/index.d.ts +4 -0
- package/dist/themes/index.js +4 -0
- package/dist/themes/installer.d.ts +50 -0
- package/dist/themes/installer.js +290 -0
- package/dist/themes/manifest.d.ts +102 -0
- package/dist/themes/manifest.js +86 -0
- package/dist/themes/paths.d.ts +14 -0
- package/dist/themes/paths.js +33 -0
- package/dist/tool-system/browser-bridge.d.ts +53 -11
- package/dist/tool-system/browser-bridge.js +8 -9
- package/dist/tool-system/builtin/agent-heartbeat.d.ts +2 -2
- package/dist/tool-system/builtin/agent-heartbeat.js +20 -6
- package/dist/tool-system/builtin/agent-notifications.d.ts +127 -72
- package/dist/tool-system/builtin/agent-notifications.js +291 -101
- package/dist/tool-system/builtin/agent-output-file.js +1 -3
- package/dist/tool-system/builtin/agent-progress.d.ts +6 -0
- package/dist/tool-system/builtin/agent-progress.js +83 -0
- package/dist/tool-system/builtin/agent-registry.d.ts +38 -2
- package/dist/tool-system/builtin/agent-registry.js +178 -9
- package/dist/tool-system/builtin/agent-transcript-translator.js +1 -1
- package/dist/tool-system/builtin/agent.d.ts +2 -0
- package/dist/tool-system/builtin/agent.js +274 -33
- package/dist/tool-system/builtin/background-jobs.d.ts +55 -2
- package/dist/tool-system/builtin/background-jobs.js +96 -4
- package/dist/tool-system/builtin/background-work.d.ts +6 -0
- package/dist/tool-system/builtin/background-work.js +8 -1
- package/dist/tool-system/builtin/bash.js +5 -2
- package/dist/tool-system/builtin/browser-tools.d.ts +6 -3
- package/dist/tool-system/builtin/browser-tools.js +89 -23
- package/dist/tool-system/builtin/edit-model-catalog.d.ts +6 -0
- package/dist/tool-system/builtin/edit-model-catalog.js +172 -12
- package/dist/tool-system/builtin/edit.js +2 -6
- package/dist/tool-system/builtin/file-cache.d.ts +2 -0
- package/dist/tool-system/builtin/file-cache.js +4 -0
- package/dist/tool-system/builtin/generate-image.js +17 -10
- package/dist/tool-system/builtin/generate-video.js +26 -7
- package/dist/tool-system/builtin/grep.js +2 -2
- package/dist/tool-system/builtin/image-uploader.js +7 -1
- package/dist/tool-system/builtin/index.d.ts +32 -7
- package/dist/tool-system/builtin/index.js +237 -167
- package/dist/tool-system/builtin/memory.d.ts +6 -0
- package/dist/tool-system/builtin/memory.js +36 -15
- package/dist/tool-system/builtin/panel.d.ts +9 -0
- package/dist/tool-system/builtin/panel.js +314 -0
- package/dist/tool-system/builtin/read.js +5 -1
- package/dist/tool-system/builtin/send-message-to-session.d.ts +6 -0
- package/dist/tool-system/builtin/send-message-to-session.js +67 -0
- package/dist/tool-system/builtin/sources.d.ts +8 -0
- package/dist/tool-system/builtin/sources.js +137 -0
- package/dist/tool-system/builtin/tool-search.js +7 -2
- package/dist/tool-system/builtin/update-automation-memory.js +2 -0
- package/dist/tool-system/builtin/web-fetch.js +17 -13
- package/dist/tool-system/builtin/web-search.js +1 -3
- package/dist/tool-system/capability-module.d.ts +93 -0
- package/dist/tool-system/capability-module.js +53 -0
- package/dist/tool-system/context.d.ts +77 -19
- package/dist/tool-system/executor.js +75 -50
- package/dist/tool-system/external-tool-exposure.d.ts +60 -0
- package/dist/tool-system/external-tool-exposure.js +304 -0
- package/dist/tool-system/mcp-manager.d.ts +11 -1
- package/dist/tool-system/mcp-manager.js +19 -4
- package/dist/tool-system/mcp-tool-policy.d.ts +9 -0
- package/dist/tool-system/mcp-tool-policy.js +34 -0
- package/dist/tool-system/panel-bridge.d.ts +53 -0
- package/dist/tool-system/panel-bridge.js +1 -0
- package/dist/tool-system/permission.d.ts +26 -0
- package/dist/tool-system/permission.js +46 -0
- package/dist/tool-system/registry.d.ts +12 -1
- package/dist/tool-system/registry.js +31 -7
- package/dist/tool-system/sandbox/index.js +3 -8
- package/dist/tool-system/sandbox/seatbelt.js +2 -6
- package/dist/tool-system/session-tool-host.d.ts +139 -0
- package/dist/tool-system/session-tool-host.js +167 -0
- package/dist/tool-system/testing/tool-registry-harness.d.ts +31 -0
- package/dist/tool-system/testing/tool-registry-harness.js +51 -0
- package/dist/tool-system/validation.d.ts +14 -7
- package/dist/tool-system/validation.js +701 -7
- package/dist/types.d.ts +186 -20
- package/dist/{cc-orchestrator → utils}/cwd-normalize.d.ts +1 -0
- package/dist/{cc-orchestrator → utils}/cwd-normalize.js +1 -0
- package/dist/utils/file-mutex.d.ts +65 -0
- package/dist/utils/file-mutex.js +145 -0
- package/dist/utils/json.d.ts +2 -4
- package/dist/utils/json.js +2 -4
- package/dist/utils/lockfile.d.ts +30 -1
- package/dist/utils/lockfile.js +2 -2
- package/dist/utils/secret-scrubber.d.ts +8 -0
- package/dist/utils/secret-scrubber.js +227 -0
- package/dist/utils/toolDisplay.js +1 -1
- package/package.json +20 -5
- package/THIRD_PARTY_NOTICES.md +0 -206
- package/dist/arena/arena.d.ts +0 -45
- package/dist/arena/arena.js +0 -362
- package/dist/arena/context/context-tools.d.ts +0 -16
- package/dist/arena/context/context-tools.js +0 -272
- package/dist/arena/context/within-root.d.ts +0 -7
- package/dist/arena/context/within-root.js +0 -15
- package/dist/arena/detect-mode.d.ts +0 -20
- package/dist/arena/detect-mode.js +0 -78
- package/dist/arena/digest-builder.d.ts +0 -25
- package/dist/arena/digest-builder.js +0 -120
- package/dist/arena/index.d.ts +0 -29
- package/dist/arena/index.js +0 -29
- package/dist/arena/iterate/convergence.d.ts +0 -25
- package/dist/arena/iterate/convergence.js +0 -103
- package/dist/arena/iterate/formats/index.d.ts +0 -22
- package/dist/arena/iterate/formats/index.js +0 -283
- package/dist/arena/iterate/index.d.ts +0 -11
- package/dist/arena/iterate/index.js +0 -9
- package/dist/arena/iterate/iterative-arena.d.ts +0 -23
- package/dist/arena/iterate/iterative-arena.js +0 -237
- package/dist/arena/iterate/parse.d.ts +0 -42
- package/dist/arena/iterate/parse.js +0 -123
- package/dist/arena/iterate/phases/argue.d.ts +0 -22
- package/dist/arena/iterate/phases/argue.js +0 -165
- package/dist/arena/iterate/phases/revise.d.ts +0 -16
- package/dist/arena/iterate/phases/revise.js +0 -62
- package/dist/arena/iterate/phases/tournament.d.ts +0 -34
- package/dist/arena/iterate/phases/tournament.js +0 -113
- package/dist/arena/iterate/tools/web-tools.d.ts +0 -13
- package/dist/arena/iterate/tools/web-tools.js +0 -54
- package/dist/arena/iterate/types.d.ts +0 -152
- package/dist/arena/iterate/types.js +0 -8
- package/dist/arena/ledger.d.ts +0 -47
- package/dist/arena/ledger.js +0 -159
- package/dist/arena/lenses/architecture.d.ts +0 -5
- package/dist/arena/lenses/architecture.js +0 -22
- package/dist/arena/lenses/engineering.d.ts +0 -5
- package/dist/arena/lenses/engineering.js +0 -22
- package/dist/arena/lenses/general.d.ts +0 -5
- package/dist/arena/lenses/general.js +0 -20
- package/dist/arena/lenses/index.d.ts +0 -16
- package/dist/arena/lenses/index.js +0 -47
- package/dist/arena/lenses/product.d.ts +0 -5
- package/dist/arena/lenses/product.js +0 -22
- package/dist/arena/model-presets.d.ts +0 -23
- package/dist/arena/model-presets.js +0 -44
- package/dist/arena/phases/adjudication.d.ts +0 -25
- package/dist/arena/phases/adjudication.js +0 -142
- package/dist/arena/phases/build-consensus.d.ts +0 -30
- package/dist/arena/phases/build-consensus.js +0 -85
- package/dist/arena/phases/claim-registry.d.ts +0 -26
- package/dist/arena/phases/claim-registry.js +0 -60
- package/dist/arena/phases/cross-review.d.ts +0 -47
- package/dist/arena/phases/cross-review.js +0 -224
- package/dist/arena/phases/debate-rounds.d.ts +0 -28
- package/dist/arena/phases/debate-rounds.js +0 -161
- package/dist/arena/phases/participant-research.d.ts +0 -39
- package/dist/arena/phases/participant-research.js +0 -316
- package/dist/arena/phases/planning-detail-expansion.d.ts +0 -39
- package/dist/arena/phases/planning-detail-expansion.js +0 -120
- package/dist/arena/planner.d.ts +0 -28
- package/dist/arena/planner.js +0 -312
- package/dist/arena/providers/docs.d.ts +0 -7
- package/dist/arena/providers/docs.js +0 -111
- package/dist/arena/providers/git.d.ts +0 -8
- package/dist/arena/providers/git.js +0 -174
- package/dist/arena/providers/index.d.ts +0 -32
- package/dist/arena/providers/index.js +0 -132
- package/dist/arena/providers/none.d.ts +0 -7
- package/dist/arena/providers/none.js +0 -11
- package/dist/arena/providers/repo.d.ts +0 -7
- package/dist/arena/providers/repo.js +0 -258
- package/dist/arena/render/session.d.ts +0 -17
- package/dist/arena/render/session.js +0 -190
- package/dist/arena/render/terminal.d.ts +0 -34
- package/dist/arena/render/terminal.js +0 -286
- package/dist/arena/strategies/discussion.d.ts +0 -25
- package/dist/arena/strategies/discussion.js +0 -143
- package/dist/arena/strategies/index.d.ts +0 -15
- package/dist/arena/strategies/index.js +0 -28
- package/dist/arena/strategies/language-wrapper.d.ts +0 -17
- package/dist/arena/strategies/language-wrapper.js +0 -102
- package/dist/arena/strategies/lens-wrapper.d.ts +0 -16
- package/dist/arena/strategies/lens-wrapper.js +0 -236
- package/dist/arena/strategies/planning.d.ts +0 -30
- package/dist/arena/strategies/planning.js +0 -225
- package/dist/arena/strategies/review.d.ts +0 -26
- package/dist/arena/strategies/review.js +0 -168
- package/dist/arena/strategies/utils.d.ts +0 -36
- package/dist/arena/strategies/utils.js +0 -603
- package/dist/arena/tools/selector.d.ts +0 -17
- package/dist/arena/tools/selector.js +0 -61
- package/dist/arena/transitions.d.ts +0 -53
- package/dist/arena/transitions.js +0 -97
- package/dist/arena/types.d.ts +0 -518
- package/dist/arena/types.js +0 -27
- package/dist/cc-orchestrator/agent-adapter.d.ts +0 -54
- package/dist/cc-orchestrator/agent-adapter.js +0 -143
- package/dist/cc-orchestrator/cc-capability.d.ts +0 -19
- package/dist/cc-orchestrator/cc-capability.js +0 -53
- package/dist/cc-orchestrator/codex-session-discovery.d.ts +0 -24
- package/dist/cc-orchestrator/codex-session-discovery.js +0 -191
- package/dist/cc-orchestrator/codex-session-history.d.ts +0 -38
- package/dist/cc-orchestrator/codex-session-history.js +0 -247
- package/dist/cc-orchestrator/external-agent-bindings.d.ts +0 -27
- package/dist/cc-orchestrator/external-agent-bindings.js +0 -150
- package/dist/cc-orchestrator/external-agent-changes.d.ts +0 -19
- package/dist/cc-orchestrator/external-agent-changes.js +0 -231
- package/dist/cc-orchestrator/external-agent-driver.d.ts +0 -19
- package/dist/cc-orchestrator/external-agent-driver.js +0 -284
- package/dist/cc-orchestrator/external-agent-session-store.d.ts +0 -23
- package/dist/cc-orchestrator/external-agent-session-store.js +0 -146
- package/dist/cc-orchestrator/index.d.ts +0 -8
- package/dist/cc-orchestrator/index.js +0 -8
- package/dist/cc-orchestrator/relevance-judge.d.ts +0 -15
- package/dist/cc-orchestrator/relevance-judge.js +0 -29
- package/dist/cc-orchestrator/session-discovery.d.ts +0 -46
- package/dist/cc-orchestrator/session-discovery.js +0 -125
- package/dist/cc-orchestrator/session-history.d.ts +0 -54
- package/dist/cc-orchestrator/session-history.js +0 -150
- package/dist/cron/cron-runtime.d.ts +0 -2
- package/dist/cron/cron-runtime.js +0 -2
- package/dist/cron/cron-store.d.ts +0 -2
- package/dist/cron/cron-store.js +0 -2
- package/dist/cron/scheduler.d.ts +0 -7
- package/dist/cron/scheduler.js +0 -7
- package/dist/engine/goal.js +0 -206
- package/dist/external-agents/config.d.ts +0 -2
- package/dist/external-agents/config.js +0 -15
- package/dist/external-agents/types.d.ts +0 -31
- package/dist/git/parse-log.d.ts +0 -13
- package/dist/git/parse-log.js +0 -21
- package/dist/git/utils.d.ts +0 -49
- package/dist/git/utils.js +0 -161
- package/dist/git/worktree/crud.d.ts +0 -72
- package/dist/git/worktree/crud.js +0 -235
- package/dist/git/worktree/diff.d.ts +0 -14
- package/dist/git/worktree/diff.js +0 -82
- package/dist/git/worktree/git-exec.d.ts +0 -7
- package/dist/git/worktree/git-exec.js +0 -87
- package/dist/git/worktree/index.d.ts +0 -5
- package/dist/git/worktree/index.js +0 -5
- package/dist/git/worktree/query.d.ts +0 -43
- package/dist/git/worktree/query.js +0 -128
- package/dist/git/worktree/slug.d.ts +0 -11
- package/dist/git/worktree/slug.js +0 -58
- package/dist/git/worktree.d.ts +0 -1
- package/dist/git/worktree.js +0 -5
- package/dist/lsp/client.d.ts +0 -41
- package/dist/lsp/client.js +0 -186
- package/dist/lsp/manager.d.ts +0 -40
- package/dist/lsp/manager.js +0 -155
- package/dist/lsp/root-path.d.ts +0 -9
- package/dist/lsp/root-path.js +0 -12
- package/dist/lsp/servers.d.ts +0 -16
- package/dist/lsp/servers.js +0 -60
- package/dist/prompt/sections/coding.md +0 -35
- package/dist/quota/credentials.d.ts +0 -3
- package/dist/quota/credentials.js +0 -80
- package/dist/quota/index.d.ts +0 -36
- package/dist/quota/index.js +0 -155
- package/dist/quota/types.d.ts +0 -48
- package/dist/quota/types.js +0 -13
- package/dist/review/review-prompt.d.ts +0 -28
- package/dist/review/review-prompt.js +0 -81
- package/dist/state.d.ts +0 -160
- package/dist/state.js +0 -267
- package/dist/tool-system/builtin/apply-patch/applier.d.ts +0 -26
- package/dist/tool-system/builtin/apply-patch/applier.js +0 -308
- package/dist/tool-system/builtin/apply-patch/backup-targets.d.ts +0 -10
- package/dist/tool-system/builtin/apply-patch/backup-targets.js +0 -30
- package/dist/tool-system/builtin/apply-patch/index.d.ts +0 -20
- package/dist/tool-system/builtin/apply-patch/index.js +0 -105
- package/dist/tool-system/builtin/apply-patch/parser.d.ts +0 -17
- package/dist/tool-system/builtin/apply-patch/parser.js +0 -212
- package/dist/tool-system/builtin/apply-patch/seek-sequence.d.ts +0 -18
- package/dist/tool-system/builtin/apply-patch/seek-sequence.js +0 -123
- package/dist/tool-system/builtin/apply-patch/types.d.ts +0 -49
- package/dist/tool-system/builtin/apply-patch/types.js +0 -13
- package/dist/tool-system/builtin/arena.d.ts +0 -31
- package/dist/tool-system/builtin/arena.js +0 -416
- package/dist/tool-system/builtin/brief.d.ts +0 -6
- package/dist/tool-system/builtin/brief.js +0 -41
- package/dist/tool-system/builtin/check-quota.d.ts +0 -15
- package/dist/tool-system/builtin/check-quota.js +0 -34
- package/dist/tool-system/builtin/drive-claude-code.d.ts +0 -51
- package/dist/tool-system/builtin/drive-claude-code.js +0 -698
- package/dist/tool-system/builtin/lsp.d.ts +0 -7
- package/dist/tool-system/builtin/lsp.js +0 -144
- package/dist/tool-system/builtin/notebook-edit.d.ts +0 -7
- package/dist/tool-system/builtin/notebook-edit.js +0 -127
- package/dist/tool-system/builtin/worktree.d.ts +0 -11
- package/dist/tool-system/builtin/worktree.js +0 -363
- /package/dist/{external-agents → links}/types.js +0 -0
- /package/dist/{engine/session-usage.d.ts → session/usage.d.ts} +0 -0
- /package/dist/{engine/session-usage.js → session/usage.js} +0 -0
package/dist/settings/schema.js
CHANGED
|
@@ -2,7 +2,35 @@
|
|
|
2
2
|
* Settings schema with Zod validation.
|
|
3
3
|
*/
|
|
4
4
|
import { z } from "zod";
|
|
5
|
-
import {
|
|
5
|
+
import { WorkspaceSourceBindingSchema } from "../sources/types.js";
|
|
6
|
+
const DEFAULT_WORKTREE_BRANCH_PREFIX = "worktree/";
|
|
7
|
+
const McpToolNameListSchema = z
|
|
8
|
+
.array(z
|
|
9
|
+
.string()
|
|
10
|
+
.min(1)
|
|
11
|
+
.max(256)
|
|
12
|
+
.refine((value) => !value.includes("\0"), "Invalid MCP tool name"))
|
|
13
|
+
.max(256);
|
|
14
|
+
function isValidWorktreeBranchPrefix(prefix) {
|
|
15
|
+
const raw = prefix.trim();
|
|
16
|
+
if (!raw || raw.startsWith("/") || raw.includes("//"))
|
|
17
|
+
return false;
|
|
18
|
+
if (raw.includes("..") || raw.includes("@{"))
|
|
19
|
+
return false;
|
|
20
|
+
if (/[\x00-\x20~^:?*[\]\\]/.test(raw))
|
|
21
|
+
return false;
|
|
22
|
+
const value = raw.endsWith("/") ? raw.slice(0, -1) : raw;
|
|
23
|
+
return (value.length > 0 &&
|
|
24
|
+
value
|
|
25
|
+
.split("/")
|
|
26
|
+
.every((part) => Boolean(part) && !part.startsWith(".") && !part.endsWith(".") && !part.endsWith(".lock")));
|
|
27
|
+
}
|
|
28
|
+
function normalizeWorktreeBranchPrefix(prefix) {
|
|
29
|
+
const raw = prefix.trim();
|
|
30
|
+
if (!isValidWorktreeBranchPrefix(raw))
|
|
31
|
+
throw new Error(`Invalid worktree branch prefix: ${prefix}`);
|
|
32
|
+
return raw.endsWith("/") ? raw : `${raw}/`;
|
|
33
|
+
}
|
|
6
34
|
/**
|
|
7
35
|
* Tri-state project capability overlay. Lives in PROJECT settings only and
|
|
8
36
|
* layers over the global baseline (disabledSkills / disabledPlugins /
|
|
@@ -21,6 +49,8 @@ export const CapabilityOverridesSchema = z
|
|
|
21
49
|
agents: z.record(CapabilityOverrideSchema).optional(),
|
|
22
50
|
mcp: z.record(CapabilityOverrideSchema).optional(),
|
|
23
51
|
builtin: z.record(CapabilityOverrideSchema).optional(),
|
|
52
|
+
/** Per-project Pet capability preferences layered over the user baseline. */
|
|
53
|
+
pet: z.record(CapabilityOverrideSchema).optional(),
|
|
24
54
|
/**
|
|
25
55
|
* Per-hook overlay for PLUGIN-provided hooks, keyed by
|
|
26
56
|
* `pluginHookKey()` (`<plugin>:<RawEvent>:<command>`). Finer-grained
|
|
@@ -42,7 +72,9 @@ export const SettingsSchema = z
|
|
|
42
72
|
agent: z
|
|
43
73
|
.object({
|
|
44
74
|
// Use z.string() instead of z.enum() to allow custom presets registered via registerPreset()
|
|
45
|
-
preset
|
|
75
|
+
// No domain preset is baked into core. Installed capabilities may
|
|
76
|
+
// contribute a host default.
|
|
77
|
+
preset: z.string().optional(),
|
|
46
78
|
enabledBuiltinTools: z.array(z.string()).default([]),
|
|
47
79
|
disabledBuiltinTools: z.array(z.string()).default([]),
|
|
48
80
|
customSystemPrompt: z.string().optional(),
|
|
@@ -65,6 +97,27 @@ export const SettingsSchema = z
|
|
|
65
97
|
* Can also be disabled via env var `DISABLE_AUTOUPDATER=1`.
|
|
66
98
|
*/
|
|
67
99
|
autoUpdates: z.boolean().default(true),
|
|
100
|
+
/**
|
|
101
|
+
* Pet (Mimi) global-view preferences.
|
|
102
|
+
*/
|
|
103
|
+
pet: z
|
|
104
|
+
.object({
|
|
105
|
+
/**
|
|
106
|
+
* Show external Codex CLI/App sessions in the Pet global view. When off,
|
|
107
|
+
* the host does not scan or tail Codex session files at all. Default off.
|
|
108
|
+
*/
|
|
109
|
+
showExternalCodexSessions: z.boolean().default(false),
|
|
110
|
+
/** Same, for external Claude Code CLI sessions. Default off. */
|
|
111
|
+
showExternalClaudeSessions: z.boolean().default(false),
|
|
112
|
+
/**
|
|
113
|
+
* Auto-extract durable memories + an event-journal entry from each closed
|
|
114
|
+
* Mimi topic segment. When off, segment closure still archives the model
|
|
115
|
+
* context (so it cannot grow without bound) but writes no journal/memory.
|
|
116
|
+
* Default on.
|
|
117
|
+
*/
|
|
118
|
+
memoryAutoExtract: z.boolean().default(true),
|
|
119
|
+
})
|
|
120
|
+
.default({}),
|
|
68
121
|
/**
|
|
69
122
|
* Image generation is a general capability, decoupled from LLM providers
|
|
70
123
|
* (TODO 7.1): a vendor may use different keys/endpoints/models for chat vs
|
|
@@ -267,18 +320,23 @@ export const SettingsSchema = z
|
|
|
267
320
|
// Codex-style on/off switch. Absent or true → connected; only
|
|
268
321
|
// literal false disables. Filtered in MCPManager.connectAll.
|
|
269
322
|
enabled: z.boolean().optional(),
|
|
323
|
+
allowedTools: McpToolNameListSchema.optional(),
|
|
324
|
+
disabledTools: McpToolNameListSchema.optional(),
|
|
270
325
|
})))
|
|
271
326
|
.default({}),
|
|
272
327
|
/**
|
|
273
|
-
* User supplements for PLUGIN-provided MCP servers, keyed by the
|
|
274
|
-
* `<plugin>:<server>` name. Layered onto the plugin config at merge
|
|
275
|
-
* (mergePluginMcpServers). Only
|
|
276
|
-
* command/args/url/transport are intentionally absent and
|
|
277
|
-
* rejects them, so
|
|
328
|
+
* User policy/supplements for PLUGIN-provided MCP servers, keyed by the
|
|
329
|
+
* server's `<plugin>:<server>` name. Layered onto the plugin config at merge
|
|
330
|
+
* time (mergePluginMcpServers). Only server/tool policy + env/credential
|
|
331
|
+
* fields are accepted — command/args/url/transport are intentionally absent and
|
|
332
|
+
* `.strict()` rejects them, so an update is never shadowed by a stale copy.
|
|
278
333
|
*/
|
|
279
334
|
mcpServerOverrides: z
|
|
280
335
|
.record(z
|
|
281
336
|
.object({
|
|
337
|
+
enabled: z.boolean().optional(),
|
|
338
|
+
allowedTools: McpToolNameListSchema.optional(),
|
|
339
|
+
disabledTools: McpToolNameListSchema.optional(),
|
|
282
340
|
env: z.record(z.string()).optional(),
|
|
283
341
|
envVars: z.array(z.string()).optional(),
|
|
284
342
|
credentialRef: z.string().optional(),
|
|
@@ -301,6 +359,19 @@ export const SettingsSchema = z
|
|
|
301
359
|
* names (no colon suffix). See scanSkills(opts.disabledPlugins).
|
|
302
360
|
*/
|
|
303
361
|
disabledPlugins: z.array(z.string()).default([]),
|
|
362
|
+
/** Globally disabled Panel Apps, including their declared tools and bundled Skills. */
|
|
363
|
+
disabledPanelApps: z.array(z.string()).default([]),
|
|
364
|
+
/**
|
|
365
|
+
* Explicit project binding for installed Panel Apps. Installed apps form a
|
|
366
|
+
* global catalog, but only IDs in this project-owned list contribute panel
|
|
367
|
+
* UI, Agent tools, bundled Skills, or project-scoped storage.
|
|
368
|
+
*/
|
|
369
|
+
panelAppBindings: z.array(z.string()).default([]),
|
|
370
|
+
/**
|
|
371
|
+
* Legacy per-project Panel App policy. `on` is read as an explicit binding
|
|
372
|
+
* during migration; new writes use panelAppBindings.
|
|
373
|
+
*/
|
|
374
|
+
panelAppOverrides: z.record(CapabilityOverrideSchema).default({}),
|
|
304
375
|
/**
|
|
305
376
|
* Sub-agent role names (the `name` in .code-shell/agents/*.md) to
|
|
306
377
|
* hide from the registry. A disabled role is filtered out at load
|
|
@@ -315,6 +386,26 @@ export const SettingsSchema = z
|
|
|
315
386
|
* capability-assembly time. Optional — absence === everything inherits.
|
|
316
387
|
*/
|
|
317
388
|
capabilityOverrides: CapabilityOverridesSchema,
|
|
389
|
+
/**
|
|
390
|
+
* 由 WorkspaceProfile 激活事务整体拥有的子树(profile/activation.ts)。
|
|
391
|
+
* 激活/切换 = 原子全量重写本子树;关闭 = 删除本子树。
|
|
392
|
+
* `overrides` 是 profile 声明展开的 force-enable 快照,折叠时排在
|
|
393
|
+
* 用户手写 capabilityOverrides 之下(用户按 key 永远赢,见 overlay.ts
|
|
394
|
+
* 的 effectiveProjectOverrides)。只存在于 PROJECT settings。
|
|
395
|
+
*/
|
|
396
|
+
profile: z
|
|
397
|
+
.object({
|
|
398
|
+
active: z.string(),
|
|
399
|
+
preset: z.string().optional(),
|
|
400
|
+
overrides: CapabilityOverridesSchema,
|
|
401
|
+
})
|
|
402
|
+
.optional(),
|
|
403
|
+
/**
|
|
404
|
+
* Workspace 数据源绑定(只存 ref/scope/readPolicy,绝不存 secret)。
|
|
405
|
+
* 语义见 docs/todo/workspace-datasource-binding-adr.md §1.2。
|
|
406
|
+
* 只存在于 PROJECT settings。
|
|
407
|
+
*/
|
|
408
|
+
sources: z.array(WorkspaceSourceBindingSchema).optional(),
|
|
318
409
|
/**
|
|
319
410
|
* Feature flags overlay: a map of flag name → boolean that overrides the
|
|
320
411
|
* compiled-in defaults (see settings/feature-flags.ts FEATURE_FLAGS).
|
|
@@ -349,24 +440,6 @@ export const SettingsSchema = z
|
|
|
349
440
|
ignoreGitBoundary: z.boolean().default(false),
|
|
350
441
|
})
|
|
351
442
|
.default({}),
|
|
352
|
-
arena: z
|
|
353
|
-
.object({
|
|
354
|
-
participants: z
|
|
355
|
-
.array(z.union([
|
|
356
|
-
// Short form: just a model pool key
|
|
357
|
-
z.string(),
|
|
358
|
-
// Full form: explicit config (backward compat)
|
|
359
|
-
z.object({
|
|
360
|
-
name: z.string(),
|
|
361
|
-
model: z.string(),
|
|
362
|
-
provider: z.string().optional(),
|
|
363
|
-
apiKey: z.string().optional(),
|
|
364
|
-
baseUrl: z.string().optional(),
|
|
365
|
-
}),
|
|
366
|
-
]))
|
|
367
|
-
.default([]),
|
|
368
|
-
})
|
|
369
|
-
.default({}),
|
|
370
443
|
search: z
|
|
371
444
|
.object({
|
|
372
445
|
provider: z.enum(["serper", "tavily", "searxng"]).default("serper"),
|
package/dist/skills/scanner.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Skill scanner — discovers <base>/<name>/SKILL.md files from project
|
|
3
3
|
* `.code-shell/skills`, project `.agents/skills`, user `.code-shell/skills`,
|
|
4
|
-
* and
|
|
4
|
+
* installed plugins, and schema-v2 Panel Apps. Mirrors Claude Code's
|
|
5
5
|
* `loadSkillsFromSkillsDir` (skills/loadSkillsDir.ts:407) plus plugin
|
|
6
6
|
* integration (utils/plugins/pluginLoader.ts).
|
|
7
7
|
*/
|
|
8
|
+
type SkillSource = "project" | "user" | "plugin" | "panel-app";
|
|
8
9
|
export interface SkillDefinition {
|
|
9
10
|
/** Directory name; authoritative regardless of frontmatter.name. */
|
|
10
11
|
name: string;
|
|
@@ -15,7 +16,7 @@ export interface SkillDefinition {
|
|
|
15
16
|
/** Absolute path to the SKILL.md file. */
|
|
16
17
|
filePath: string;
|
|
17
18
|
/** Where the skill was loaded from. */
|
|
18
|
-
source:
|
|
19
|
+
source: SkillSource;
|
|
19
20
|
}
|
|
20
21
|
/**
|
|
21
22
|
* Options accepted by scanSkills. Both filters are applied after the
|
|
@@ -34,6 +35,8 @@ export interface SkillDefinition {
|
|
|
34
35
|
export interface ScanSkillsOptions {
|
|
35
36
|
disabledSkills?: string[];
|
|
36
37
|
disabledPlugins?: string[];
|
|
38
|
+
/** Include skills owned by Panel Apps disabled or unbound for this project. */
|
|
39
|
+
includeDisabledPanelApps?: boolean;
|
|
37
40
|
/**
|
|
38
41
|
* Hard skill isolation for sub-agents. When set, ONLY skills whose name is
|
|
39
42
|
* in this list survive — every other skill is dropped from the result
|
|
@@ -46,3 +49,4 @@ export interface ScanSkillsOptions {
|
|
|
46
49
|
}
|
|
47
50
|
export declare function scanSkills(cwd: string, opts?: ScanSkillsOptions): SkillDefinition[];
|
|
48
51
|
export declare function invalidateSkillCache(): void;
|
|
52
|
+
export {};
|
package/dist/skills/scanner.js
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Skill scanner — discovers <base>/<name>/SKILL.md files from project
|
|
3
3
|
* `.code-shell/skills`, project `.agents/skills`, user `.code-shell/skills`,
|
|
4
|
-
* and
|
|
4
|
+
* installed plugins, and schema-v2 Panel Apps. Mirrors Claude Code's
|
|
5
5
|
* `loadSkillsFromSkillsDir` (skills/loadSkillsDir.ts:407) plus plugin
|
|
6
6
|
* integration (utils/plugins/pluginLoader.ts).
|
|
7
7
|
*/
|
|
8
8
|
import { existsSync, readdirSync, readFileSync, realpathSync, statSync } from "node:fs";
|
|
9
|
-
import { join } from "node:path";
|
|
9
|
+
import { isAbsolute, join, relative, sep } from "node:path";
|
|
10
10
|
import { homedir } from "node:os";
|
|
11
11
|
import { memoize } from "../utils/memoize.js";
|
|
12
12
|
import { parseFrontmatter, coerceDescription } from "./frontmatter.js";
|
|
13
13
|
import { installedPluginsPath, readInstalledPlugins } from "../plugins/installedPlugins.js";
|
|
14
|
+
import { PANEL_APP_MANIFEST_FILE, PanelAppManifest } from "../panel-apps/manifest.js";
|
|
15
|
+
import { panelAppsRegistryPath, panelAppsRoot } from "../panel-apps/paths.js";
|
|
16
|
+
import { isPanelAppBound, resolvePanelAppBindingPolicy, resolvePanelAppBindingProjectPath, } from "../panel-apps/bindings.js";
|
|
17
|
+
import { SettingsManager } from "../settings/manager.js";
|
|
14
18
|
function userHome() {
|
|
15
19
|
// Honor process.env.HOME so tests (and shell overrides) can redirect the
|
|
16
20
|
// user-skills lookup. node:os homedir() reads from getpwuid and ignores
|
|
@@ -49,6 +53,19 @@ function readSkillFile(skillFile) {
|
|
|
49
53
|
throw e;
|
|
50
54
|
}
|
|
51
55
|
}
|
|
56
|
+
function resolveContainedPath(root, candidate) {
|
|
57
|
+
try {
|
|
58
|
+
const realRoot = realpathSync(root);
|
|
59
|
+
const realCandidate = realpathSync(candidate);
|
|
60
|
+
const rel = relative(realRoot, realCandidate);
|
|
61
|
+
if (rel === ".." || rel.startsWith(`..${sep}`) || isAbsolute(rel))
|
|
62
|
+
return null;
|
|
63
|
+
return realCandidate;
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
52
69
|
function buildSkillFromFile(filePath, defaultName, source, raw, namePrefix) {
|
|
53
70
|
const { frontmatter, body } = parseFrontmatter(raw);
|
|
54
71
|
const fmName = typeof frontmatter.name === "string" ? frontmatter.name : undefined;
|
|
@@ -114,14 +131,17 @@ function scanInstalledPlugins(results) {
|
|
|
114
131
|
const skillsDir = join(entry.installPath, "skills");
|
|
115
132
|
if (!existsSync(skillsDir))
|
|
116
133
|
continue;
|
|
134
|
+
const resolvedSkillsDir = resolveContainedPath(entry.installPath, skillsDir);
|
|
135
|
+
if (!resolvedSkillsDir)
|
|
136
|
+
continue;
|
|
117
137
|
let dirEntries;
|
|
118
138
|
try {
|
|
119
|
-
dirEntries = readdirSync(
|
|
139
|
+
dirEntries = readdirSync(resolvedSkillsDir, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name));
|
|
120
140
|
}
|
|
121
141
|
catch (e) {
|
|
122
142
|
if (isInaccessible(e)) {
|
|
123
143
|
// eslint-disable-next-line no-console
|
|
124
|
-
console.warn(`[skills] cannot read ${
|
|
144
|
+
console.warn(`[skills] cannot read ${resolvedSkillsDir}: ${e.message}`);
|
|
125
145
|
continue;
|
|
126
146
|
}
|
|
127
147
|
throw e;
|
|
@@ -132,7 +152,26 @@ function scanInstalledPlugins(results) {
|
|
|
132
152
|
const namespacedName = `${pluginName}:${dirent.name}`;
|
|
133
153
|
if (pluginSeen.has(namespacedName))
|
|
134
154
|
continue;
|
|
135
|
-
const
|
|
155
|
+
const skillDir = resolveContainedPath(resolvedSkillsDir, join(resolvedSkillsDir, dirent.name));
|
|
156
|
+
if (!skillDir)
|
|
157
|
+
continue;
|
|
158
|
+
try {
|
|
159
|
+
if (!statSync(skillDir).isDirectory())
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
const skillFile = resolveContainedPath(skillDir, join(skillDir, "SKILL.md"));
|
|
166
|
+
if (!skillFile)
|
|
167
|
+
continue;
|
|
168
|
+
try {
|
|
169
|
+
if (!statSync(skillFile).isFile())
|
|
170
|
+
continue;
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
136
175
|
const raw = readSkillFile(skillFile);
|
|
137
176
|
if (raw === null)
|
|
138
177
|
continue;
|
|
@@ -142,14 +181,98 @@ function scanInstalledPlugins(results) {
|
|
|
142
181
|
}
|
|
143
182
|
}
|
|
144
183
|
}
|
|
184
|
+
function scanInstalledPanelApps(results) {
|
|
185
|
+
const root = panelAppsRoot();
|
|
186
|
+
if (!existsSync(root))
|
|
187
|
+
return;
|
|
188
|
+
let installedIds;
|
|
189
|
+
try {
|
|
190
|
+
const registry = JSON.parse(readFileSync(panelAppsRegistryPath(), "utf-8"));
|
|
191
|
+
if (registry.version !== 1 || !Array.isArray(registry.apps))
|
|
192
|
+
return;
|
|
193
|
+
installedIds = new Set(registry.apps
|
|
194
|
+
.map((entry) => entry &&
|
|
195
|
+
typeof entry === "object" &&
|
|
196
|
+
"id" in entry &&
|
|
197
|
+
typeof entry.id === "string" &&
|
|
198
|
+
/^[a-z][a-z0-9-]{0,63}$/.test(entry.id)
|
|
199
|
+
? entry.id
|
|
200
|
+
: null)
|
|
201
|
+
.filter((id) => id !== null));
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
let appDirectories;
|
|
207
|
+
try {
|
|
208
|
+
appDirectories = readdirSync(root, { withFileTypes: true })
|
|
209
|
+
.filter((entry) => entry.isDirectory() && installedIds.has(entry.name))
|
|
210
|
+
.sort((left, right) => left.name.localeCompare(right.name));
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
if (isInaccessible(error))
|
|
214
|
+
return;
|
|
215
|
+
throw error;
|
|
216
|
+
}
|
|
217
|
+
const seen = new Set(results.map((skill) => skill.name));
|
|
218
|
+
for (const directory of appDirectories) {
|
|
219
|
+
const appRoot = join(root, directory.name);
|
|
220
|
+
let manifest;
|
|
221
|
+
try {
|
|
222
|
+
manifest = PanelAppManifest.parse(JSON.parse(readFileSync(join(appRoot, PANEL_APP_MANIFEST_FILE), "utf-8")));
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
if (manifest.id !== directory.name || manifest.schemaVersion !== 2 || !manifest.agent)
|
|
228
|
+
continue;
|
|
229
|
+
for (const relativeEntry of manifest.agent.skills) {
|
|
230
|
+
const segments = relativeEntry.split("/");
|
|
231
|
+
const defaultName = segments[2];
|
|
232
|
+
if (!defaultName)
|
|
233
|
+
continue;
|
|
234
|
+
const namespacedName = `${manifest.id}:${defaultName}`;
|
|
235
|
+
if (seen.has(namespacedName))
|
|
236
|
+
continue;
|
|
237
|
+
const skillFile = resolveContainedPath(appRoot, join(appRoot, ...relativeEntry.split("/")));
|
|
238
|
+
if (!skillFile)
|
|
239
|
+
continue;
|
|
240
|
+
try {
|
|
241
|
+
if (!statSync(skillFile).isFile())
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
catch {
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
const raw = readSkillFile(skillFile);
|
|
248
|
+
if (raw === null)
|
|
249
|
+
continue;
|
|
250
|
+
results.push(buildSkillFromFile(skillFile, defaultName, "panel-app", raw, manifest.id));
|
|
251
|
+
seen.add(namespacedName);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
145
255
|
function scanOnce(cwd) {
|
|
146
256
|
const results = [];
|
|
147
257
|
const seen = new Set();
|
|
148
258
|
const seenBaseDirs = new Set();
|
|
149
259
|
scanDirBases(bases(cwd), results, seen, seenBaseDirs);
|
|
150
260
|
scanInstalledPlugins(results);
|
|
261
|
+
scanInstalledPanelApps(results);
|
|
151
262
|
return results;
|
|
152
263
|
}
|
|
264
|
+
function installedPanelAppsMtime() {
|
|
265
|
+
return [panelAppsRoot(), panelAppsRegistryPath()]
|
|
266
|
+
.map((path) => {
|
|
267
|
+
try {
|
|
268
|
+
return statSync(path).mtimeMs.toString();
|
|
269
|
+
}
|
|
270
|
+
catch {
|
|
271
|
+
return "0";
|
|
272
|
+
}
|
|
273
|
+
})
|
|
274
|
+
.join("|");
|
|
275
|
+
}
|
|
153
276
|
function installedPluginsMtime() {
|
|
154
277
|
const p = installedPluginsPath();
|
|
155
278
|
try {
|
|
@@ -181,28 +304,56 @@ function skillsDirsMtime(cwd) {
|
|
|
181
304
|
})
|
|
182
305
|
.join("|");
|
|
183
306
|
}
|
|
184
|
-
const memoized = memoize(scanOnce, (cwd) => `${cwd}\0${userHome()}\0${installedPluginsMtime()}\0${skillsDirsMtime(cwd)}`);
|
|
307
|
+
const memoized = memoize(scanOnce, (cwd) => `${cwd}\0${userHome()}\0${installedPluginsMtime()}\0${installedPanelAppsMtime()}\0${skillsDirsMtime(cwd)}`);
|
|
308
|
+
function panelAppBindingPolicy(cwd) {
|
|
309
|
+
try {
|
|
310
|
+
const projectPath = resolvePanelAppBindingProjectPath(cwd);
|
|
311
|
+
const settings = new SettingsManager(projectPath, "full");
|
|
312
|
+
return resolvePanelAppBindingPolicy(settings.getForScope("user"), settings.getForScope("project", projectPath), Boolean(projectPath));
|
|
313
|
+
}
|
|
314
|
+
catch {
|
|
315
|
+
// Binding failures must not leak every installed Panel App Skill into the
|
|
316
|
+
// project prompt. Fail closed with an empty binding set.
|
|
317
|
+
return resolvePanelAppBindingPolicy(undefined, undefined, false);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
185
320
|
export function scanSkills(cwd, opts) {
|
|
186
321
|
const all = memoized(cwd);
|
|
187
322
|
const disabledSkills = opts?.disabledSkills;
|
|
188
323
|
const disabledPlugins = opts?.disabledPlugins;
|
|
189
324
|
const skillAllowlist = opts?.skillAllowlist;
|
|
325
|
+
const panelPolicy = opts?.includeDisabledPanelApps ? null : panelAppBindingPolicy(cwd);
|
|
190
326
|
const hasSkillFilter = disabledSkills && disabledSkills.length > 0;
|
|
191
327
|
const hasPluginFilter = disabledPlugins && disabledPlugins.length > 0;
|
|
192
328
|
// An allowlist of [] is meaningful (no skills at all), so check for
|
|
193
329
|
// presence with !== undefined, not truthiness/length.
|
|
194
330
|
const hasAllowlist = skillAllowlist !== undefined;
|
|
195
|
-
if (!hasSkillFilter && !hasPluginFilter && !hasAllowlist)
|
|
196
|
-
|
|
331
|
+
if (!hasSkillFilter && !hasPluginFilter && !hasAllowlist) {
|
|
332
|
+
if (panelPolicy === null)
|
|
333
|
+
return all;
|
|
334
|
+
const hasUnboundPanelSkill = all.some((skill) => {
|
|
335
|
+
if (skill.source !== "panel-app")
|
|
336
|
+
return false;
|
|
337
|
+
const colon = skill.name.indexOf(":");
|
|
338
|
+
return colon <= 0 || !isPanelAppBound(skill.name.slice(0, colon), panelPolicy);
|
|
339
|
+
});
|
|
340
|
+
if (!hasUnboundPanelSkill)
|
|
341
|
+
return all;
|
|
342
|
+
}
|
|
197
343
|
const skillSet = hasSkillFilter ? new Set(disabledSkills) : null;
|
|
198
344
|
const pluginSet = hasPluginFilter ? new Set(disabledPlugins) : null;
|
|
199
345
|
const allowSet = hasAllowlist ? new Set(skillAllowlist) : null;
|
|
200
346
|
return all.filter((s) => {
|
|
347
|
+
if (panelPolicy && s.source === "panel-app") {
|
|
348
|
+
const colon = s.name.indexOf(":");
|
|
349
|
+
if (colon <= 0 || !isPanelAppBound(s.name.slice(0, colon), panelPolicy))
|
|
350
|
+
return false;
|
|
351
|
+
}
|
|
201
352
|
if (allowSet && !allowSet.has(s.name))
|
|
202
353
|
return false;
|
|
203
354
|
if (skillSet && skillSet.has(s.name))
|
|
204
355
|
return false;
|
|
205
|
-
if (pluginSet) {
|
|
356
|
+
if (pluginSet && s.source === "plugin") {
|
|
206
357
|
// Use indexOf, not split — skill names may theoretically contain
|
|
207
358
|
// more colons after the first; the namespace boundary is the
|
|
208
359
|
// first ":" only.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** provider 无关的连接器边界(ADR §4)。core 不出现任何具体 provider 名。 */
|
|
2
|
+
import type { SourceContent, SourceDefinition, SourceResourceMeta, SourceScope } from "./types.js";
|
|
3
|
+
export interface ConnectorAdapter {
|
|
4
|
+
kind: string;
|
|
5
|
+
listScopes(definition: SourceDefinition): Promise<SourceScope[]>;
|
|
6
|
+
listResources(definition: SourceDefinition, scopeId: string): Promise<SourceResourceMeta[]>;
|
|
7
|
+
read(definition: SourceDefinition, resourceId: string, options: {
|
|
8
|
+
maxBytes: number;
|
|
9
|
+
signal?: AbortSignal;
|
|
10
|
+
cwd?: string;
|
|
11
|
+
}): Promise<SourceContent>;
|
|
12
|
+
}
|
|
13
|
+
export declare function registerConnectorAdapter(adapter: ConnectorAdapter): void;
|
|
14
|
+
export declare function connectorAdapterFor(kind: string): ConnectorAdapter | undefined;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ConnectorAdapter } from "../adapter.js";
|
|
2
|
+
import type { SourceDefinition, SourceResourceMeta } from "../types.js";
|
|
3
|
+
export declare const LOCAL_FILES_SOURCE_ID = "project-uploads";
|
|
4
|
+
export declare function uploadsDir(cwd: string): string;
|
|
5
|
+
/** Validate a write/delete basename and resolve it inside the workspace uploads directory. */
|
|
6
|
+
export declare function resolveUploadTarget(cwd: string, name: string): string;
|
|
7
|
+
export declare function localFilesSourceFor(cwd: string): SourceDefinition;
|
|
8
|
+
export declare const localFilesAdapter: ConnectorAdapter;
|
|
9
|
+
/** cwd 维度的文件列举;隐式源不在 definition 里携带路径。 */
|
|
10
|
+
export declare function listLocalFiles(cwd: string): SourceResourceMeta[];
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 上传文件源(ADR §4.3):每个 workspace 隐式自带,不进全局 catalog。
|
|
3
|
+
* 文件在 ${cwd}/.code-shell/uploads/ 内;读取前规范化 resourceId,
|
|
4
|
+
* 并校验消解 symlink 后的真实路径仍在 uploads 目录内。
|
|
5
|
+
*/
|
|
6
|
+
import { existsSync, readdirSync, readFileSync, realpathSync, statSync } from "node:fs";
|
|
7
|
+
import { basename, dirname, isAbsolute, join, normalize, relative, resolve, sep } from "node:path";
|
|
8
|
+
import { truncateUtf8Bytes } from "../truncate-utf8.js";
|
|
9
|
+
export const LOCAL_FILES_SOURCE_ID = "project-uploads";
|
|
10
|
+
export function uploadsDir(cwd) {
|
|
11
|
+
return join(cwd, ".code-shell", "uploads");
|
|
12
|
+
}
|
|
13
|
+
/** Validate a write/delete basename and resolve it inside the workspace uploads directory. */
|
|
14
|
+
export function resolveUploadTarget(cwd, name) {
|
|
15
|
+
let decoded = name;
|
|
16
|
+
try {
|
|
17
|
+
for (let pass = 0; pass < 3; pass += 1) {
|
|
18
|
+
const next = decodeURIComponent(decoded);
|
|
19
|
+
if (next === decoded)
|
|
20
|
+
break;
|
|
21
|
+
decoded = next;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
throw new Error(`invalid upload name: ${name}`);
|
|
26
|
+
}
|
|
27
|
+
if (!name ||
|
|
28
|
+
name !== decoded ||
|
|
29
|
+
name.startsWith(".") ||
|
|
30
|
+
name.includes("/") ||
|
|
31
|
+
name.includes("\\") ||
|
|
32
|
+
name.includes("\0") ||
|
|
33
|
+
basename(name) !== name) {
|
|
34
|
+
throw new Error(`invalid upload name: ${name}`);
|
|
35
|
+
}
|
|
36
|
+
const root = resolve(uploadsDir(cwd));
|
|
37
|
+
const target = resolve(root, name);
|
|
38
|
+
if (dirname(target) !== root)
|
|
39
|
+
throw new Error(`invalid upload name: ${name}`);
|
|
40
|
+
return target;
|
|
41
|
+
}
|
|
42
|
+
export function localFilesSourceFor(cwd) {
|
|
43
|
+
return {
|
|
44
|
+
id: LOCAL_FILES_SOURCE_ID,
|
|
45
|
+
kind: "local-files",
|
|
46
|
+
label: "项目文件",
|
|
47
|
+
description: `本 workspace 上传的文件(${uploadsDir(cwd)})`,
|
|
48
|
+
adapterConfig: {},
|
|
49
|
+
enabled: true,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function canonicalResourceId(resourceId) {
|
|
53
|
+
let decoded = resourceId;
|
|
54
|
+
try {
|
|
55
|
+
for (let pass = 0; pass < 3; pass += 1) {
|
|
56
|
+
const next = decodeURIComponent(decoded);
|
|
57
|
+
if (next === decoded)
|
|
58
|
+
break;
|
|
59
|
+
decoded = next;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
throw new Error(`invalid local-files resource path: ${resourceId}`);
|
|
64
|
+
}
|
|
65
|
+
if (decoded.length === 0 ||
|
|
66
|
+
decoded.includes("\0") ||
|
|
67
|
+
decoded.includes("\\") ||
|
|
68
|
+
isAbsolute(decoded) ||
|
|
69
|
+
/^[a-zA-Z]:[\\/]/.test(decoded)) {
|
|
70
|
+
throw new Error(`invalid local-files resource path: ${resourceId}`);
|
|
71
|
+
}
|
|
72
|
+
const canonical = normalize(decoded);
|
|
73
|
+
if (canonical === "." || canonical === ".." || canonical.startsWith(`..${sep}`)) {
|
|
74
|
+
throw new Error(`resource escapes uploads dir: ${resourceId}`);
|
|
75
|
+
}
|
|
76
|
+
return canonical.split(sep).join("/");
|
|
77
|
+
}
|
|
78
|
+
function resolveInsideUploads(cwd, resourceId) {
|
|
79
|
+
const root = realpathSync(uploadsDir(cwd));
|
|
80
|
+
const canonicalId = canonicalResourceId(resourceId);
|
|
81
|
+
const candidate = resolve(root, ...canonicalId.split("/"));
|
|
82
|
+
const real = realpathSync(candidate);
|
|
83
|
+
if (real !== root && !real.startsWith(`${root}${sep}`)) {
|
|
84
|
+
throw new Error(`resource escapes uploads dir: ${resourceId}`);
|
|
85
|
+
}
|
|
86
|
+
const finalId = relative(root, real).split(sep).join("/");
|
|
87
|
+
if (!finalId || finalId === ".." || finalId.startsWith("../")) {
|
|
88
|
+
throw new Error(`invalid local-files resource path: ${resourceId}`);
|
|
89
|
+
}
|
|
90
|
+
return { path: real, resourceId: finalId };
|
|
91
|
+
}
|
|
92
|
+
export const localFilesAdapter = {
|
|
93
|
+
kind: "local-files",
|
|
94
|
+
async listScopes() {
|
|
95
|
+
return [{ id: "uploads", label: "上传文件" }];
|
|
96
|
+
},
|
|
97
|
+
async listResources() {
|
|
98
|
+
throw new Error("use listLocalFiles(cwd) — local-files listing is cwd-scoped");
|
|
99
|
+
},
|
|
100
|
+
async read(_definition, resourceId, options) {
|
|
101
|
+
if (!options.cwd) {
|
|
102
|
+
throw new Error("local-files read requires cwd");
|
|
103
|
+
}
|
|
104
|
+
const resolved = resolveInsideUploads(options.cwd, resourceId);
|
|
105
|
+
const buffer = readFileSync(resolved.path);
|
|
106
|
+
const truncated = truncateUtf8Bytes(buffer, options.maxBytes);
|
|
107
|
+
return {
|
|
108
|
+
resourceId: resolved.resourceId,
|
|
109
|
+
...truncated,
|
|
110
|
+
};
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
/** cwd 维度的文件列举;隐式源不在 definition 里携带路径。 */
|
|
114
|
+
export function listLocalFiles(cwd) {
|
|
115
|
+
const directory = uploadsDir(cwd);
|
|
116
|
+
if (!existsSync(directory))
|
|
117
|
+
return [];
|
|
118
|
+
return readdirSync(directory, { withFileTypes: true })
|
|
119
|
+
.filter((entry) => entry.isFile())
|
|
120
|
+
.sort((left, right) => left.name.localeCompare(right.name))
|
|
121
|
+
.map((entry) => ({
|
|
122
|
+
id: entry.name,
|
|
123
|
+
scopeId: "uploads",
|
|
124
|
+
name: entry.name,
|
|
125
|
+
sizeBytes: statSync(join(directory, entry.name)).size,
|
|
126
|
+
}));
|
|
127
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** MCP resource 包装 adapter:MCP 只是 kind 之一,不塞 mcpServers(ADR §1/§4)。 */
|
|
2
|
+
import type { ConnectorAdapter } from "../adapter.js";
|
|
3
|
+
interface McpResourceInfo {
|
|
4
|
+
uri: string;
|
|
5
|
+
name?: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
serverName: string;
|
|
8
|
+
}
|
|
9
|
+
interface McpLike {
|
|
10
|
+
listResources(server?: string, signal?: AbortSignal): Promise<McpResourceInfo[]>;
|
|
11
|
+
readResource(server: string, uri: string, signal?: AbortSignal): Promise<string>;
|
|
12
|
+
}
|
|
13
|
+
type McpManagerFactory = () => McpLike | Promise<McpLike>;
|
|
14
|
+
export declare function createMcpResourceAdapter(getManager: McpManagerFactory): ConnectorAdapter;
|
|
15
|
+
/** 生产默认:方法首次执行时才加载真 MCPManager,避免静态模块环。 */
|
|
16
|
+
export declare function defaultMcpResourceAdapter(): ConnectorAdapter;
|
|
17
|
+
export {};
|