@hashicorp/kits 0.1.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 +619 -0
- package/bin/kits.js +8 -0
- package/dist/adapters/base-adapter.d.ts +231 -0
- package/dist/adapters/base-adapter.d.ts.map +1 -0
- package/dist/adapters/base-adapter.js +703 -0
- package/dist/adapters/base-adapter.js.map +1 -0
- package/dist/adapters/claude-code/detection.d.ts +63 -0
- package/dist/adapters/claude-code/detection.d.ts.map +1 -0
- package/dist/adapters/claude-code/detection.js +154 -0
- package/dist/adapters/claude-code/detection.js.map +1 -0
- package/dist/adapters/claude-code/index.d.ts +178 -0
- package/dist/adapters/claude-code/index.d.ts.map +1 -0
- package/dist/adapters/claude-code/index.js +643 -0
- package/dist/adapters/claude-code/index.js.map +1 -0
- package/dist/adapters/claude-code/installer.d.ts +161 -0
- package/dist/adapters/claude-code/installer.d.ts.map +1 -0
- package/dist/adapters/claude-code/installer.js +413 -0
- package/dist/adapters/claude-code/installer.js.map +1 -0
- package/dist/adapters/claude-code/model-mapping.d.ts +7 -0
- package/dist/adapters/claude-code/model-mapping.d.ts.map +1 -0
- package/dist/adapters/claude-code/model-mapping.js +14 -0
- package/dist/adapters/claude-code/model-mapping.js.map +1 -0
- package/dist/adapters/claude-code/tool-mapping.d.ts +18 -0
- package/dist/adapters/claude-code/tool-mapping.d.ts.map +1 -0
- package/dist/adapters/claude-code/tool-mapping.js +31 -0
- package/dist/adapters/claude-code/tool-mapping.js.map +1 -0
- package/dist/adapters/codex/detection.d.ts +60 -0
- package/dist/adapters/codex/detection.d.ts.map +1 -0
- package/dist/adapters/codex/detection.js +146 -0
- package/dist/adapters/codex/detection.js.map +1 -0
- package/dist/adapters/codex/index.d.ts +167 -0
- package/dist/adapters/codex/index.d.ts.map +1 -0
- package/dist/adapters/codex/index.js +344 -0
- package/dist/adapters/codex/index.js.map +1 -0
- package/dist/adapters/codex/installer.d.ts +147 -0
- package/dist/adapters/codex/installer.d.ts.map +1 -0
- package/dist/adapters/codex/installer.js +229 -0
- package/dist/adapters/codex/installer.js.map +1 -0
- package/dist/adapters/codex/model-mapping.d.ts +7 -0
- package/dist/adapters/codex/model-mapping.d.ts.map +1 -0
- package/dist/adapters/codex/model-mapping.js +14 -0
- package/dist/adapters/codex/model-mapping.js.map +1 -0
- package/dist/adapters/codex/tool-mapping.d.ts +19 -0
- package/dist/adapters/codex/tool-mapping.d.ts.map +1 -0
- package/dist/adapters/codex/tool-mapping.js +32 -0
- package/dist/adapters/codex/tool-mapping.js.map +1 -0
- package/dist/adapters/command-parser.d.ts +72 -0
- package/dist/adapters/command-parser.d.ts.map +1 -0
- package/dist/adapters/command-parser.js +222 -0
- package/dist/adapters/command-parser.js.map +1 -0
- package/dist/adapters/file-operations.d.ts +164 -0
- package/dist/adapters/file-operations.d.ts.map +1 -0
- package/dist/adapters/file-operations.js +526 -0
- package/dist/adapters/file-operations.js.map +1 -0
- package/dist/adapters/gemini-cli/detection.d.ts +57 -0
- package/dist/adapters/gemini-cli/detection.d.ts.map +1 -0
- package/dist/adapters/gemini-cli/detection.js +143 -0
- package/dist/adapters/gemini-cli/detection.js.map +1 -0
- package/dist/adapters/gemini-cli/index.d.ts +182 -0
- package/dist/adapters/gemini-cli/index.d.ts.map +1 -0
- package/dist/adapters/gemini-cli/index.js +598 -0
- package/dist/adapters/gemini-cli/index.js.map +1 -0
- package/dist/adapters/gemini-cli/installer.d.ts +158 -0
- package/dist/adapters/gemini-cli/installer.d.ts.map +1 -0
- package/dist/adapters/gemini-cli/installer.js +457 -0
- package/dist/adapters/gemini-cli/installer.js.map +1 -0
- package/dist/adapters/gemini-cli/model-mapping.d.ts +7 -0
- package/dist/adapters/gemini-cli/model-mapping.d.ts.map +1 -0
- package/dist/adapters/gemini-cli/model-mapping.js +14 -0
- package/dist/adapters/gemini-cli/model-mapping.js.map +1 -0
- package/dist/adapters/gemini-cli/tool-mapping.d.ts +18 -0
- package/dist/adapters/gemini-cli/tool-mapping.d.ts.map +1 -0
- package/dist/adapters/gemini-cli/tool-mapping.js +31 -0
- package/dist/adapters/gemini-cli/tool-mapping.js.map +1 -0
- package/dist/adapters/github-copilot/detection.d.ts +58 -0
- package/dist/adapters/github-copilot/detection.d.ts.map +1 -0
- package/dist/adapters/github-copilot/detection.js +144 -0
- package/dist/adapters/github-copilot/detection.js.map +1 -0
- package/dist/adapters/github-copilot/index.d.ts +203 -0
- package/dist/adapters/github-copilot/index.d.ts.map +1 -0
- package/dist/adapters/github-copilot/index.js +595 -0
- package/dist/adapters/github-copilot/index.js.map +1 -0
- package/dist/adapters/github-copilot/installer.d.ts +124 -0
- package/dist/adapters/github-copilot/installer.d.ts.map +1 -0
- package/dist/adapters/github-copilot/installer.js +343 -0
- package/dist/adapters/github-copilot/installer.js.map +1 -0
- package/dist/adapters/github-copilot/model-mapping.d.ts +7 -0
- package/dist/adapters/github-copilot/model-mapping.d.ts.map +1 -0
- package/dist/adapters/github-copilot/model-mapping.js +14 -0
- package/dist/adapters/github-copilot/model-mapping.js.map +1 -0
- package/dist/adapters/github-copilot/tool-mapping.d.ts +18 -0
- package/dist/adapters/github-copilot/tool-mapping.d.ts.map +1 -0
- package/dist/adapters/github-copilot/tool-mapping.js +31 -0
- package/dist/adapters/github-copilot/tool-mapping.js.map +1 -0
- package/dist/adapters/index.d.ts +39 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +76 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/interface.d.ts +9 -0
- package/dist/adapters/interface.d.ts.map +1 -0
- package/dist/adapters/interface.js +8 -0
- package/dist/adapters/interface.js.map +1 -0
- package/dist/adapters/model-templating.d.ts +16 -0
- package/dist/adapters/model-templating.d.ts.map +1 -0
- package/dist/adapters/model-templating.js +52 -0
- package/dist/adapters/model-templating.js.map +1 -0
- package/dist/adapters/opencode/detection.d.ts +57 -0
- package/dist/adapters/opencode/detection.d.ts.map +1 -0
- package/dist/adapters/opencode/detection.js +140 -0
- package/dist/adapters/opencode/detection.js.map +1 -0
- package/dist/adapters/opencode/index.d.ts +168 -0
- package/dist/adapters/opencode/index.d.ts.map +1 -0
- package/dist/adapters/opencode/index.js +494 -0
- package/dist/adapters/opencode/index.js.map +1 -0
- package/dist/adapters/opencode/installer.d.ts +91 -0
- package/dist/adapters/opencode/installer.d.ts.map +1 -0
- package/dist/adapters/opencode/installer.js +290 -0
- package/dist/adapters/opencode/installer.js.map +1 -0
- package/dist/adapters/opencode/model-mapping.d.ts +7 -0
- package/dist/adapters/opencode/model-mapping.d.ts.map +1 -0
- package/dist/adapters/opencode/model-mapping.js +14 -0
- package/dist/adapters/opencode/model-mapping.js.map +1 -0
- package/dist/adapters/opencode/tool-mapping.d.ts +18 -0
- package/dist/adapters/opencode/tool-mapping.d.ts.map +1 -0
- package/dist/adapters/opencode/tool-mapping.js +31 -0
- package/dist/adapters/opencode/tool-mapping.js.map +1 -0
- package/dist/adapters/registry.d.ts +154 -0
- package/dist/adapters/registry.d.ts.map +1 -0
- package/dist/adapters/registry.js +223 -0
- package/dist/adapters/registry.js.map +1 -0
- package/dist/adapters/skill-frontmatter.d.ts +34 -0
- package/dist/adapters/skill-frontmatter.d.ts.map +1 -0
- package/dist/adapters/skill-frontmatter.js +110 -0
- package/dist/adapters/skill-frontmatter.js.map +1 -0
- package/dist/adapters/subagent-frontmatter.d.ts +22 -0
- package/dist/adapters/subagent-frontmatter.d.ts.map +1 -0
- package/dist/adapters/subagent-frontmatter.js +80 -0
- package/dist/adapters/subagent-frontmatter.js.map +1 -0
- package/dist/adapters/tool-templating.d.ts +162 -0
- package/dist/adapters/tool-templating.d.ts.map +1 -0
- package/dist/adapters/tool-templating.js +273 -0
- package/dist/adapters/tool-templating.js.map +1 -0
- package/dist/adapters/types.d.ts +347 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +33 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/cli/index.d.ts +10 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +261 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/info.d.ts +20 -0
- package/dist/cli/info.d.ts.map +1 -0
- package/dist/cli/info.js +194 -0
- package/dist/cli/info.js.map +1 -0
- package/dist/cli/install.d.ts +21 -0
- package/dist/cli/install.d.ts.map +1 -0
- package/dist/cli/install.js +1624 -0
- package/dist/cli/install.js.map +1 -0
- package/dist/cli/list.d.ts +19 -0
- package/dist/cli/list.d.ts.map +1 -0
- package/dist/cli/list.js +216 -0
- package/dist/cli/list.js.map +1 -0
- package/dist/cli/types.d.ts +246 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +25 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/cli/uninstall.d.ts +20 -0
- package/dist/cli/uninstall.d.ts.map +1 -0
- package/dist/cli/uninstall.js +393 -0
- package/dist/cli/uninstall.js.map +1 -0
- package/dist/cli/upgrade.d.ts +20 -0
- package/dist/cli/upgrade.d.ts.map +1 -0
- package/dist/cli/upgrade.js +372 -0
- package/dist/cli/upgrade.js.map +1 -0
- package/dist/cli/validate.d.ts +14 -0
- package/dist/cli/validate.d.ts.map +1 -0
- package/dist/cli/validate.js +307 -0
- package/dist/cli/validate.js.map +1 -0
- package/dist/core/debug.d.ts +23 -0
- package/dist/core/debug.d.ts.map +1 -0
- package/dist/core/debug.js +69 -0
- package/dist/core/debug.js.map +1 -0
- package/dist/core/hook-instance.d.ts +8 -0
- package/dist/core/hook-instance.d.ts.map +1 -0
- package/dist/core/hook-instance.js +62 -0
- package/dist/core/hook-instance.js.map +1 -0
- package/dist/core/mcp-instance.d.ts +13 -0
- package/dist/core/mcp-instance.d.ts.map +1 -0
- package/dist/core/mcp-instance.js +80 -0
- package/dist/core/mcp-instance.js.map +1 -0
- package/dist/core/types.d.ts +461 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +42 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/upgrade-executor.d.ts +70 -0
- package/dist/core/upgrade-executor.d.ts.map +1 -0
- package/dist/core/upgrade-executor.js +368 -0
- package/dist/core/upgrade-executor.js.map +1 -0
- package/dist/discovery/fetcher-registry.d.ts +87 -0
- package/dist/discovery/fetcher-registry.d.ts.map +1 -0
- package/dist/discovery/fetcher-registry.js +119 -0
- package/dist/discovery/fetcher-registry.js.map +1 -0
- package/dist/discovery/git-fetcher.d.ts +61 -0
- package/dist/discovery/git-fetcher.d.ts.map +1 -0
- package/dist/discovery/git-fetcher.js +150 -0
- package/dist/discovery/git-fetcher.js.map +1 -0
- package/dist/discovery/index.d.ts +13 -0
- package/dist/discovery/index.d.ts.map +1 -0
- package/dist/discovery/index.js +15 -0
- package/dist/discovery/index.js.map +1 -0
- package/dist/discovery/kit-scanner.d.ts +55 -0
- package/dist/discovery/kit-scanner.d.ts.map +1 -0
- package/dist/discovery/kit-scanner.js +305 -0
- package/dist/discovery/kit-scanner.js.map +1 -0
- package/dist/discovery/local-fetcher.d.ts +38 -0
- package/dist/discovery/local-fetcher.d.ts.map +1 -0
- package/dist/discovery/local-fetcher.js +100 -0
- package/dist/discovery/local-fetcher.js.map +1 -0
- package/dist/discovery/source-parser.d.ts +33 -0
- package/dist/discovery/source-parser.d.ts.map +1 -0
- package/dist/discovery/source-parser.js +136 -0
- package/dist/discovery/source-parser.js.map +1 -0
- package/dist/discovery/types.d.ts +145 -0
- package/dist/discovery/types.d.ts.map +1 -0
- package/dist/discovery/types.js +18 -0
- package/dist/discovery/types.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest/index.d.ts +79 -0
- package/dist/manifest/index.d.ts.map +1 -0
- package/dist/manifest/index.js +200 -0
- package/dist/manifest/index.js.map +1 -0
- package/dist/manifest/read.d.ts +32 -0
- package/dist/manifest/read.d.ts.map +1 -0
- package/dist/manifest/read.js +88 -0
- package/dist/manifest/read.js.map +1 -0
- package/dist/manifest/types.d.ts +119 -0
- package/dist/manifest/types.d.ts.map +1 -0
- package/dist/manifest/types.js +44 -0
- package/dist/manifest/types.js.map +1 -0
- package/dist/manifest/upgrade-check.d.ts +72 -0
- package/dist/manifest/upgrade-check.d.ts.map +1 -0
- package/dist/manifest/upgrade-check.js +215 -0
- package/dist/manifest/upgrade-check.js.map +1 -0
- package/dist/manifest/utils.d.ts +35 -0
- package/dist/manifest/utils.d.ts.map +1 -0
- package/dist/manifest/utils.js +57 -0
- package/dist/manifest/utils.js.map +1 -0
- package/dist/manifest/write.d.ts +44 -0
- package/dist/manifest/write.d.ts.map +1 -0
- package/dist/manifest/write.js +77 -0
- package/dist/manifest/write.js.map +1 -0
- package/dist/resolution/env-resolver.d.ts +81 -0
- package/dist/resolution/env-resolver.d.ts.map +1 -0
- package/dist/resolution/env-resolver.js +233 -0
- package/dist/resolution/env-resolver.js.map +1 -0
- package/dist/resolution/index.d.ts +55 -0
- package/dist/resolution/index.d.ts.map +1 -0
- package/dist/resolution/index.js +412 -0
- package/dist/resolution/index.js.map +1 -0
- package/dist/resolution/multi-kit-resolver.d.ts +43 -0
- package/dist/resolution/multi-kit-resolver.d.ts.map +1 -0
- package/dist/resolution/multi-kit-resolver.js +258 -0
- package/dist/resolution/multi-kit-resolver.js.map +1 -0
- package/dist/resolution/primitive-paths.d.ts +17 -0
- package/dist/resolution/primitive-paths.d.ts.map +1 -0
- package/dist/resolution/primitive-paths.js +59 -0
- package/dist/resolution/primitive-paths.js.map +1 -0
- package/dist/resolution/primitives-registry.d.ts +137 -0
- package/dist/resolution/primitives-registry.d.ts.map +1 -0
- package/dist/resolution/primitives-registry.js +295 -0
- package/dist/resolution/primitives-registry.js.map +1 -0
- package/dist/resolution/reference-parser.d.ts +62 -0
- package/dist/resolution/reference-parser.d.ts.map +1 -0
- package/dist/resolution/reference-parser.js +182 -0
- package/dist/resolution/reference-parser.js.map +1 -0
- package/dist/resolution/types.d.ts +77 -0
- package/dist/resolution/types.d.ts.map +1 -0
- package/dist/resolution/types.js +13 -0
- package/dist/resolution/types.js.map +1 -0
- package/dist/resolution/version-resolver.d.ts +76 -0
- package/dist/resolution/version-resolver.d.ts.map +1 -0
- package/dist/resolution/version-resolver.js +269 -0
- package/dist/resolution/version-resolver.js.map +1 -0
- package/dist/tui/compatibility.d.ts +80 -0
- package/dist/tui/compatibility.d.ts.map +1 -0
- package/dist/tui/compatibility.js +355 -0
- package/dist/tui/compatibility.js.map +1 -0
- package/dist/tui/env-prompt.d.ts +129 -0
- package/dist/tui/env-prompt.d.ts.map +1 -0
- package/dist/tui/env-prompt.js +488 -0
- package/dist/tui/env-prompt.js.map +1 -0
- package/dist/tui/harness-select.d.ts +54 -0
- package/dist/tui/harness-select.d.ts.map +1 -0
- package/dist/tui/harness-select.js +171 -0
- package/dist/tui/harness-select.js.map +1 -0
- package/dist/tui/index.d.ts +112 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +213 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/kit-select.d.ts +72 -0
- package/dist/tui/kit-select.d.ts.map +1 -0
- package/dist/tui/kit-select.js +209 -0
- package/dist/tui/kit-select.js.map +1 -0
- package/dist/tui/progress.d.ts +75 -0
- package/dist/tui/progress.d.ts.map +1 -0
- package/dist/tui/progress.js +267 -0
- package/dist/tui/progress.js.map +1 -0
- package/dist/tui/resolution.d.ts +62 -0
- package/dist/tui/resolution.d.ts.map +1 -0
- package/dist/tui/resolution.js +261 -0
- package/dist/tui/resolution.js.map +1 -0
- package/dist/tui/scope-compatibility.d.ts +139 -0
- package/dist/tui/scope-compatibility.d.ts.map +1 -0
- package/dist/tui/scope-compatibility.js +230 -0
- package/dist/tui/scope-compatibility.js.map +1 -0
- package/dist/tui/scope-select.d.ts +67 -0
- package/dist/tui/scope-select.d.ts.map +1 -0
- package/dist/tui/scope-select.js +134 -0
- package/dist/tui/scope-select.js.map +1 -0
- package/dist/tui/spinner.d.ts +114 -0
- package/dist/tui/spinner.d.ts.map +1 -0
- package/dist/tui/spinner.js +186 -0
- package/dist/tui/spinner.js.map +1 -0
- package/dist/tui/summary.d.ts +71 -0
- package/dist/tui/summary.d.ts.map +1 -0
- package/dist/tui/summary.js +343 -0
- package/dist/tui/summary.js.map +1 -0
- package/dist/tui/types.d.ts +234 -0
- package/dist/tui/types.d.ts.map +1 -0
- package/dist/tui/types.js +7 -0
- package/dist/tui/types.js.map +1 -0
- package/dist/tui/upgrade-select.d.ts +73 -0
- package/dist/tui/upgrade-select.d.ts.map +1 -0
- package/dist/tui/upgrade-select.js +324 -0
- package/dist/tui/upgrade-select.js.map +1 -0
- package/dist/validation/index.d.ts +13 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +13 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/source.d.ts +14 -0
- package/dist/validation/source.d.ts.map +1 -0
- package/dist/validation/source.js +51 -0
- package/dist/validation/source.js.map +1 -0
- package/dist/validation/utils.d.ts +29 -0
- package/dist/validation/utils.d.ts.map +1 -0
- package/dist/validation/utils.js +89 -0
- package/dist/validation/utils.js.map +1 -0
- package/dist/validation/validate-commands.d.ts +28 -0
- package/dist/validation/validate-commands.d.ts.map +1 -0
- package/dist/validation/validate-commands.js +151 -0
- package/dist/validation/validate-commands.js.map +1 -0
- package/dist/validation/validate-hooks.d.ts +13 -0
- package/dist/validation/validate-hooks.d.ts.map +1 -0
- package/dist/validation/validate-hooks.js +272 -0
- package/dist/validation/validate-hooks.js.map +1 -0
- package/dist/validation/validate-kits.d.ts +15 -0
- package/dist/validation/validate-kits.d.ts.map +1 -0
- package/dist/validation/validate-kits.js +185 -0
- package/dist/validation/validate-kits.js.map +1 -0
- package/dist/validation/validate-mcp.d.ts +12 -0
- package/dist/validation/validate-mcp.d.ts.map +1 -0
- package/dist/validation/validate-mcp.js +132 -0
- package/dist/validation/validate-mcp.js.map +1 -0
- package/dist/validation/validate-skills.d.ts +24 -0
- package/dist/validation/validate-skills.d.ts.map +1 -0
- package/dist/validation/validate-skills.js +223 -0
- package/dist/validation/validate-skills.js.map +1 -0
- package/dist/validation/validate-subagents.d.ts +27 -0
- package/dist/validation/validate-subagents.d.ts.map +1 -0
- package/dist/validation/validate-subagents.js +269 -0
- package/dist/validation/validate-subagents.js.map +1 -0
- package/package.json +91 -0
- package/schemas/command.schema.json +23 -0
- package/schemas/examples/hook-binding-valid.json +20 -0
- package/schemas/examples/hook-program-valid.json +25 -0
- package/schemas/examples/http-server-valid.json +82 -0
- package/schemas/examples/invalid-sensitive-header-no-envvar.json +16 -0
- package/schemas/examples/invalid-sensitive-header-with-value.json +17 -0
- package/schemas/examples/invalid-sensitive-var-with-default.json +19 -0
- package/schemas/examples/stdio-server-valid.json +55 -0
- package/schemas/hook-binding.schema.json +63 -0
- package/schemas/hook-program.schema.json +104 -0
- package/schemas/kit.schema.json +338 -0
- package/schemas/kits.schema.json +117 -0
- package/schemas/manifest.schema.json +200 -0
- package/schemas/mcp-server.schema.json +305 -0
- package/schemas/primitives.schema.json +118 -0
- package/schemas/skill.schema.json +96 -0
- package/schemas/subagent.schema.json +107 -0
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Primitive resolution display.
|
|
3
|
+
*
|
|
4
|
+
* Shows progress and results of resolving primitive references
|
|
5
|
+
* to concrete versions from the shared primitives library.
|
|
6
|
+
*/
|
|
7
|
+
import * as clack from "@clack/prompts";
|
|
8
|
+
import pc from "picocolors";
|
|
9
|
+
import { formatVersion, formatPrimitiveType, formatError, formatWarning, } from "./spinner.js";
|
|
10
|
+
/**
|
|
11
|
+
* Convert resolved primitive to display entry.
|
|
12
|
+
*/
|
|
13
|
+
export function toDisplayEntry(primitive, sharedWith) {
|
|
14
|
+
return {
|
|
15
|
+
name: primitive.name,
|
|
16
|
+
type: primitive.type,
|
|
17
|
+
ref: primitive.ref,
|
|
18
|
+
resolvedVersion: primitive.resolvedVersion,
|
|
19
|
+
isInline: primitive.isInline,
|
|
20
|
+
isShared: (sharedWith?.length ?? 0) > 1,
|
|
21
|
+
sharedWith,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Convert kit resolution result to display format.
|
|
26
|
+
*/
|
|
27
|
+
export function toKitResolutionDisplay(result, sharedPrimitives) {
|
|
28
|
+
const entries = result.primitives.map((p) => {
|
|
29
|
+
const key = `${p.type}:${p.name}`;
|
|
30
|
+
const sharedWith = sharedPrimitives?.get(key);
|
|
31
|
+
return toDisplayEntry(p, sharedWith);
|
|
32
|
+
});
|
|
33
|
+
return {
|
|
34
|
+
kit: result.kit,
|
|
35
|
+
entries,
|
|
36
|
+
errors: result.errors,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Convert multi-kit resolution to display format.
|
|
41
|
+
*/
|
|
42
|
+
export function toMultiKitResolutionDisplay(result, kitNames) {
|
|
43
|
+
return kitNames.map((kitName) => {
|
|
44
|
+
const primitives = result.kitPrimitives.get(kitName) ?? [];
|
|
45
|
+
const entries = primitives.map((p) => {
|
|
46
|
+
const key = `${p.type}:${p.name}`;
|
|
47
|
+
const sharedWith = result.sharedPrimitives.get(key);
|
|
48
|
+
return toDisplayEntry(p, sharedWith);
|
|
49
|
+
});
|
|
50
|
+
// Errors don't have kit association, so include all
|
|
51
|
+
const errors = result.errors;
|
|
52
|
+
return {
|
|
53
|
+
kit: kitName,
|
|
54
|
+
entries,
|
|
55
|
+
errors,
|
|
56
|
+
};
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Format primitive type icon.
|
|
61
|
+
*/
|
|
62
|
+
function getPrimitiveIcon(type) {
|
|
63
|
+
const icons = {
|
|
64
|
+
commands: "▶",
|
|
65
|
+
skills: "◆",
|
|
66
|
+
subagents: "◇",
|
|
67
|
+
mcp: "⬡",
|
|
68
|
+
hooks: "↩",
|
|
69
|
+
};
|
|
70
|
+
return icons[type] ?? "○";
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Format resolved entry for display.
|
|
74
|
+
*/
|
|
75
|
+
export function formatResolvedEntry(entry) {
|
|
76
|
+
const icon = getPrimitiveIcon(entry.type);
|
|
77
|
+
const typeLabel = pc.dim(`[${entry.type}]`);
|
|
78
|
+
let version = "";
|
|
79
|
+
if (entry.resolvedVersion) {
|
|
80
|
+
version = ` ${formatVersion(entry.resolvedVersion)}`;
|
|
81
|
+
}
|
|
82
|
+
let ref = "";
|
|
83
|
+
if (entry.ref && entry.resolvedVersion) {
|
|
84
|
+
ref = ` ${pc.dim(`(${entry.ref})`)}`;
|
|
85
|
+
}
|
|
86
|
+
let shared = "";
|
|
87
|
+
if (entry.isShared && entry.sharedWith && entry.sharedWith.length > 1) {
|
|
88
|
+
const others = entry.sharedWith.filter((k) => k !== entry.name);
|
|
89
|
+
if (others.length > 0) {
|
|
90
|
+
shared = ` ${pc.cyan(`[shared: ${others.join(", ")}]`)}`;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
let inline = "";
|
|
94
|
+
if (entry.isInline) {
|
|
95
|
+
inline = ` ${pc.dim("(inline)")}`;
|
|
96
|
+
}
|
|
97
|
+
return `${icon} ${entry.name}${version}${ref}${inline}${shared} ${typeLabel}`;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Display resolution entries grouped by type.
|
|
101
|
+
*/
|
|
102
|
+
export function displayResolutionByType(entries) {
|
|
103
|
+
const byType = new Map();
|
|
104
|
+
for (const entry of entries) {
|
|
105
|
+
const list = byType.get(entry.type) ?? [];
|
|
106
|
+
list.push(entry);
|
|
107
|
+
byType.set(entry.type, list);
|
|
108
|
+
}
|
|
109
|
+
const typeOrder = ["commands", "skills", "subagents", "mcp", "hooks"];
|
|
110
|
+
for (const type of typeOrder) {
|
|
111
|
+
const typeEntries = byType.get(type);
|
|
112
|
+
if (!typeEntries || typeEntries.length === 0)
|
|
113
|
+
continue;
|
|
114
|
+
console.log(` ${formatPrimitiveType(type)}:`);
|
|
115
|
+
for (const entry of typeEntries) {
|
|
116
|
+
console.log(` ${formatResolvedEntry(entry)}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Display resolution results for a single kit.
|
|
122
|
+
*/
|
|
123
|
+
export function displayKitResolution(display) {
|
|
124
|
+
console.log();
|
|
125
|
+
console.log(` ${pc.bold(display.kit)}`);
|
|
126
|
+
if (display.entries.length === 0 && display.errors.length === 0) {
|
|
127
|
+
console.log(` ${pc.dim("No primitives")}`);
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
if (display.entries.length > 0) {
|
|
131
|
+
displayResolutionByType(display.entries);
|
|
132
|
+
}
|
|
133
|
+
if (display.errors.length > 0) {
|
|
134
|
+
console.log();
|
|
135
|
+
console.log(` ${formatError("Resolution errors:")}`);
|
|
136
|
+
for (const error of display.errors) {
|
|
137
|
+
console.log(` ${error.primitive}: ${error.message} ${pc.red("✗")}`);
|
|
138
|
+
if (error.available && error.available.length > 0) {
|
|
139
|
+
console.log(` ${pc.dim("Available:")} ${error.available.join(", ")}`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Display all resolution results.
|
|
146
|
+
*/
|
|
147
|
+
export function displayResolutionResults(displays) {
|
|
148
|
+
console.log();
|
|
149
|
+
clack.log.info("Resolved primitives:");
|
|
150
|
+
for (const display of displays) {
|
|
151
|
+
displayKitResolution(display);
|
|
152
|
+
}
|
|
153
|
+
console.log();
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Display resolution summary (counts).
|
|
157
|
+
*/
|
|
158
|
+
export function displayResolutionSummary(displays) {
|
|
159
|
+
let totalShared = 0;
|
|
160
|
+
let totalErrors = 0;
|
|
161
|
+
const typeCount = {
|
|
162
|
+
commands: 0,
|
|
163
|
+
skills: 0,
|
|
164
|
+
subagents: 0,
|
|
165
|
+
mcp: 0,
|
|
166
|
+
hooks: 0,
|
|
167
|
+
};
|
|
168
|
+
for (const display of displays) {
|
|
169
|
+
totalErrors += display.errors.length;
|
|
170
|
+
for (const entry of display.entries) {
|
|
171
|
+
typeCount[entry.type]++;
|
|
172
|
+
if (entry.isShared) {
|
|
173
|
+
totalShared++;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
const parts = [];
|
|
178
|
+
for (const [type, count] of Object.entries(typeCount)) {
|
|
179
|
+
if (count > 0) {
|
|
180
|
+
parts.push(`${count} ${type}`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
if (parts.length === 0) {
|
|
184
|
+
clack.log.info("No primitives to install");
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
clack.log.info(`Resolved: ${parts.join(", ")}`);
|
|
188
|
+
if (totalShared > 0) {
|
|
189
|
+
clack.log.info(pc.cyan(`${totalShared} primitive${totalShared === 1 ? "" : "s"} shared across kits`));
|
|
190
|
+
}
|
|
191
|
+
if (totalErrors > 0) {
|
|
192
|
+
clack.log.warn(formatWarning(`${totalErrors} resolution error${totalErrors === 1 ? "" : "s"}`));
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Check if resolution has errors.
|
|
197
|
+
*/
|
|
198
|
+
export function hasResolutionErrors(displays) {
|
|
199
|
+
return displays.some((d) => d.errors.length > 0);
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Get all resolution errors.
|
|
203
|
+
*/
|
|
204
|
+
export function getAllResolutionErrors(displays) {
|
|
205
|
+
const errors = [];
|
|
206
|
+
for (const display of displays) {
|
|
207
|
+
errors.push(...display.errors);
|
|
208
|
+
}
|
|
209
|
+
return errors;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Display resolution errors.
|
|
213
|
+
*/
|
|
214
|
+
export function displayResolutionErrors(errors) {
|
|
215
|
+
if (errors.length === 0)
|
|
216
|
+
return;
|
|
217
|
+
console.log();
|
|
218
|
+
clack.log.error(`${errors.length} primitive${errors.length === 1 ? "" : "s"} could not be resolved:`);
|
|
219
|
+
for (const error of errors) {
|
|
220
|
+
console.log(` ${error.primitive}: ${error.message} ${pc.red("✗")}`);
|
|
221
|
+
if (error.type === "no-matching-version" && error.available) {
|
|
222
|
+
console.log(` ${pc.dim("Available versions:")} ${error.available.join(", ")}`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
console.log();
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Get unique primitives from all displays.
|
|
229
|
+
*/
|
|
230
|
+
export function getUniquePrimitives(displays) {
|
|
231
|
+
const seen = new Set();
|
|
232
|
+
const unique = [];
|
|
233
|
+
for (const display of displays) {
|
|
234
|
+
for (const entry of display.entries) {
|
|
235
|
+
const key = `${entry.type}:${entry.name}`;
|
|
236
|
+
if (!seen.has(key)) {
|
|
237
|
+
seen.add(key);
|
|
238
|
+
unique.push(entry);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return unique;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Count primitives by type.
|
|
246
|
+
*/
|
|
247
|
+
export function countPrimitivesByType(displays) {
|
|
248
|
+
const counts = {
|
|
249
|
+
commands: 0,
|
|
250
|
+
skills: 0,
|
|
251
|
+
subagents: 0,
|
|
252
|
+
mcp: 0,
|
|
253
|
+
hooks: 0,
|
|
254
|
+
};
|
|
255
|
+
const unique = getUniquePrimitives(displays);
|
|
256
|
+
for (const entry of unique) {
|
|
257
|
+
counts[entry.type]++;
|
|
258
|
+
}
|
|
259
|
+
return counts;
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=resolution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolution.js","sourceRoot":"","sources":["../../src/tui/resolution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scope compatibility check screen.
|
|
3
|
+
*
|
|
4
|
+
* Displays warnings when primitives aren't available at the selected scope
|
|
5
|
+
* and offers alternatives (switch to global, change harness selection).
|
|
6
|
+
*/
|
|
7
|
+
import type { HarnessName, InstallationScope, PrimitiveType } from "../core/types.js";
|
|
8
|
+
import type { KitAdapter } from "../adapters/interface.js";
|
|
9
|
+
import type { DiscoveredKit } from "../discovery/types.js";
|
|
10
|
+
import type { DetectedHarnessDisplay } from "./types.js";
|
|
11
|
+
/**
|
|
12
|
+
* Scope limitation for a harness.
|
|
13
|
+
*/
|
|
14
|
+
export interface ScopeLimitation {
|
|
15
|
+
harness: HarnessName;
|
|
16
|
+
harnessDisplayName: string;
|
|
17
|
+
/** Primitives not available at the selected scope */
|
|
18
|
+
unavailablePrimitives: PrimitiveType[];
|
|
19
|
+
/** Primitives available at the selected scope */
|
|
20
|
+
availablePrimitives: PrimitiveType[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Scope compatibility result for a kit-harness pair.
|
|
24
|
+
*/
|
|
25
|
+
export interface KitScopeCompatibility {
|
|
26
|
+
kit: string;
|
|
27
|
+
harness: HarnessName;
|
|
28
|
+
harnessDisplayName: string;
|
|
29
|
+
compatible: boolean;
|
|
30
|
+
/** Required primitives that aren't available at scope */
|
|
31
|
+
unavailablePrimitives: PrimitiveType[];
|
|
32
|
+
/** Message explaining incompatibility */
|
|
33
|
+
message?: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Result of scope compatibility check.
|
|
37
|
+
*/
|
|
38
|
+
export interface ScopeCompatibilityResult {
|
|
39
|
+
/** All kit-harness pairs are compatible at this scope */
|
|
40
|
+
allCompatible: boolean;
|
|
41
|
+
/** Limitations by harness */
|
|
42
|
+
limitations: ScopeLimitation[];
|
|
43
|
+
/** Compatibility for each kit-harness pair */
|
|
44
|
+
kitCompatibility: KitScopeCompatibility[];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* User choice for handling scope incompatibility.
|
|
48
|
+
*/
|
|
49
|
+
export type ScopeIncompatibilityChoice = "proceed" | "switch-global" | "go-back" | "cancel";
|
|
50
|
+
/**
|
|
51
|
+
* Result of scope compatibility prompt.
|
|
52
|
+
*/
|
|
53
|
+
export interface ScopeCompatibilityPromptResult {
|
|
54
|
+
cancelled: boolean;
|
|
55
|
+
choice?: ScopeIncompatibilityChoice;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Check scope limitations for harnesses.
|
|
59
|
+
*
|
|
60
|
+
* @param harnesses - Selected harnesses with adapters
|
|
61
|
+
* @param scope - Selected installation scope
|
|
62
|
+
*/
|
|
63
|
+
export declare function checkHarnessScopeLimitations(harnesses: {
|
|
64
|
+
display: DetectedHarnessDisplay;
|
|
65
|
+
adapter: KitAdapter;
|
|
66
|
+
}[], scope: InstallationScope): ScopeLimitation[];
|
|
67
|
+
/**
|
|
68
|
+
* Check scope compatibility for kits and harnesses.
|
|
69
|
+
*
|
|
70
|
+
* @param kits - Selected kits
|
|
71
|
+
* @param harnesses - Selected harnesses with adapters
|
|
72
|
+
* @param scope - Selected installation scope
|
|
73
|
+
*/
|
|
74
|
+
export declare function checkKitScopeCompatibility(kits: DiscoveredKit[], harnesses: {
|
|
75
|
+
display: DetectedHarnessDisplay;
|
|
76
|
+
adapter: KitAdapter;
|
|
77
|
+
}[], scope: InstallationScope): ScopeCompatibilityResult;
|
|
78
|
+
/**
|
|
79
|
+
* Display scope limitations.
|
|
80
|
+
*
|
|
81
|
+
* @param limitations - Harness scope limitations
|
|
82
|
+
* @param scope - Selected scope
|
|
83
|
+
*/
|
|
84
|
+
export declare function displayScopeLimitations(limitations: ScopeLimitation[], scope: InstallationScope): void;
|
|
85
|
+
/**
|
|
86
|
+
* Display kit scope compatibility issues.
|
|
87
|
+
*
|
|
88
|
+
* @param compatibility - Kit scope compatibility results
|
|
89
|
+
*/
|
|
90
|
+
export declare function displayKitScopeIncompatibility(compatibility: KitScopeCompatibility[]): void;
|
|
91
|
+
/**
|
|
92
|
+
* Get compatible kit-harness pairs.
|
|
93
|
+
*
|
|
94
|
+
* @param compatibility - Kit scope compatibility results
|
|
95
|
+
*/
|
|
96
|
+
export declare function getCompatiblePairs(compatibility: KitScopeCompatibility[]): {
|
|
97
|
+
kit: string;
|
|
98
|
+
harness: HarnessName;
|
|
99
|
+
}[];
|
|
100
|
+
/**
|
|
101
|
+
* Get incompatible kit-harness pairs.
|
|
102
|
+
*
|
|
103
|
+
* @param compatibility - Kit scope compatibility results
|
|
104
|
+
*/
|
|
105
|
+
export declare function getIncompatiblePairs(compatibility: KitScopeCompatibility[]): KitScopeCompatibility[];
|
|
106
|
+
/**
|
|
107
|
+
* Prompt user to handle scope incompatibility.
|
|
108
|
+
*
|
|
109
|
+
* @param scope - Currently selected scope
|
|
110
|
+
*/
|
|
111
|
+
export declare function promptScopeIncompatibility(scope: InstallationScope): Promise<ScopeCompatibilityPromptResult>;
|
|
112
|
+
/**
|
|
113
|
+
* Run scope compatibility check flow.
|
|
114
|
+
*
|
|
115
|
+
* Checks compatibility, displays warnings, and prompts user for action if needed.
|
|
116
|
+
*
|
|
117
|
+
* @param kits - Selected kits
|
|
118
|
+
* @param harnesses - Selected harnesses with adapters
|
|
119
|
+
* @param scope - Selected installation scope
|
|
120
|
+
*/
|
|
121
|
+
export declare function runScopeCompatibilityCheck(kits: DiscoveredKit[], harnesses: {
|
|
122
|
+
display: DetectedHarnessDisplay;
|
|
123
|
+
adapter: KitAdapter;
|
|
124
|
+
}[], scope: InstallationScope): Promise<{
|
|
125
|
+
result: ScopeCompatibilityPromptResult;
|
|
126
|
+
compatibility: ScopeCompatibilityResult;
|
|
127
|
+
newScope?: InstallationScope;
|
|
128
|
+
}>;
|
|
129
|
+
/**
|
|
130
|
+
* Check if any harness has scope limitations.
|
|
131
|
+
*
|
|
132
|
+
* @param harnesses - Selected harnesses with adapters
|
|
133
|
+
* @param scope - Selected installation scope
|
|
134
|
+
*/
|
|
135
|
+
export declare function hasScopeLimitations(harnesses: {
|
|
136
|
+
display: DetectedHarnessDisplay;
|
|
137
|
+
adapter: KitAdapter;
|
|
138
|
+
}[], scope: InstallationScope): boolean;
|
|
139
|
+
//# sourceMappingURL=scope-compatibility.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-compatibility.d.ts","sourceRoot":"","sources":["../../src/tui/scope-compatibility.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scope compatibility check screen.
|
|
3
|
+
*
|
|
4
|
+
* Displays warnings when primitives aren't available at the selected scope
|
|
5
|
+
* and offers alternatives (switch to global, change harness selection).
|
|
6
|
+
*/
|
|
7
|
+
import * as clack from "@clack/prompts";
|
|
8
|
+
import pc from "picocolors";
|
|
9
|
+
import { formatScope } from "./scope-select.js";
|
|
10
|
+
/**
|
|
11
|
+
* Check scope limitations for harnesses.
|
|
12
|
+
*
|
|
13
|
+
* @param harnesses - Selected harnesses with adapters
|
|
14
|
+
* @param scope - Selected installation scope
|
|
15
|
+
*/
|
|
16
|
+
export function checkHarnessScopeLimitations(harnesses, scope) {
|
|
17
|
+
const limitations = [];
|
|
18
|
+
for (const { display, adapter } of harnesses) {
|
|
19
|
+
const globalPrimitives = adapter.getSupportedPrimitives("global");
|
|
20
|
+
const scopePrimitives = adapter.getSupportedPrimitives(scope);
|
|
21
|
+
// Find primitives not available at this scope
|
|
22
|
+
const unavailable = globalPrimitives.filter((p) => !scopePrimitives.includes(p));
|
|
23
|
+
if (unavailable.length > 0) {
|
|
24
|
+
limitations.push({
|
|
25
|
+
harness: display.name,
|
|
26
|
+
harnessDisplayName: display.displayName,
|
|
27
|
+
unavailablePrimitives: unavailable,
|
|
28
|
+
availablePrimitives: scopePrimitives,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return limitations;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Check scope compatibility for kits and harnesses.
|
|
36
|
+
*
|
|
37
|
+
* @param kits - Selected kits
|
|
38
|
+
* @param harnesses - Selected harnesses with adapters
|
|
39
|
+
* @param scope - Selected installation scope
|
|
40
|
+
*/
|
|
41
|
+
export function checkKitScopeCompatibility(kits, harnesses, scope) {
|
|
42
|
+
const limitations = checkHarnessScopeLimitations(harnesses, scope);
|
|
43
|
+
const kitCompatibility = [];
|
|
44
|
+
for (const kit of kits) {
|
|
45
|
+
const requiredPrimitives = kit.manifest.requires?.primitives ?? [];
|
|
46
|
+
for (const { display, adapter } of harnesses) {
|
|
47
|
+
const scopePrimitives = adapter.getSupportedPrimitives(scope);
|
|
48
|
+
const unavailable = requiredPrimitives.filter((p) => !scopePrimitives.includes(p));
|
|
49
|
+
const compatible = unavailable.length === 0;
|
|
50
|
+
let message;
|
|
51
|
+
if (!compatible) {
|
|
52
|
+
const unavailableList = unavailable.join(", ");
|
|
53
|
+
message = `Requires ${unavailableList} (global-only in ${display.displayName})`;
|
|
54
|
+
}
|
|
55
|
+
const entry = {
|
|
56
|
+
kit: kit.name,
|
|
57
|
+
harness: display.name,
|
|
58
|
+
harnessDisplayName: display.displayName,
|
|
59
|
+
compatible,
|
|
60
|
+
unavailablePrimitives: unavailable,
|
|
61
|
+
};
|
|
62
|
+
if (message) {
|
|
63
|
+
entry.message = message;
|
|
64
|
+
}
|
|
65
|
+
kitCompatibility.push(entry);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const allCompatible = kitCompatibility.every((kc) => kc.compatible);
|
|
69
|
+
return {
|
|
70
|
+
allCompatible,
|
|
71
|
+
limitations,
|
|
72
|
+
kitCompatibility,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Display scope limitations.
|
|
77
|
+
*
|
|
78
|
+
* @param limitations - Harness scope limitations
|
|
79
|
+
* @param scope - Selected scope
|
|
80
|
+
*/
|
|
81
|
+
export function displayScopeLimitations(limitations, scope) {
|
|
82
|
+
if (limitations.length === 0)
|
|
83
|
+
return;
|
|
84
|
+
console.log();
|
|
85
|
+
clack.log.warn(`Some primitives are not available at ${formatScope(scope).toLowerCase()} scope:`);
|
|
86
|
+
console.log();
|
|
87
|
+
for (const limitation of limitations) {
|
|
88
|
+
console.log(` ${pc.bold(limitation.harnessDisplayName)}:`);
|
|
89
|
+
for (const primitive of limitation.unavailablePrimitives) {
|
|
90
|
+
console.log(` ${pc.yellow("•")} ${primitive}: ${pc.dim("Global-only (will be skipped)")}`);
|
|
91
|
+
}
|
|
92
|
+
if (limitation.availablePrimitives.length > 0) {
|
|
93
|
+
console.log(` ${limitation.availablePrimitives.join(", ")}: Available at ${scope} scope ${pc.green("✓")}`);
|
|
94
|
+
}
|
|
95
|
+
console.log();
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Display kit scope compatibility issues.
|
|
100
|
+
*
|
|
101
|
+
* @param compatibility - Kit scope compatibility results
|
|
102
|
+
*/
|
|
103
|
+
export function displayKitScopeIncompatibility(compatibility) {
|
|
104
|
+
const incompatible = compatibility.filter((kc) => !kc.compatible);
|
|
105
|
+
if (incompatible.length === 0)
|
|
106
|
+
return;
|
|
107
|
+
console.log();
|
|
108
|
+
clack.log.warn("Some kits cannot be fully installed at this scope:");
|
|
109
|
+
console.log();
|
|
110
|
+
// Group by kit
|
|
111
|
+
const byKit = new Map();
|
|
112
|
+
for (const kc of incompatible) {
|
|
113
|
+
const list = byKit.get(kc.kit) ?? [];
|
|
114
|
+
list.push(kc);
|
|
115
|
+
byKit.set(kc.kit, list);
|
|
116
|
+
}
|
|
117
|
+
for (const [kitName, kitIncompat] of byKit) {
|
|
118
|
+
console.log(` ${pc.bold(kitName)}:`);
|
|
119
|
+
for (const kc of kitIncompat) {
|
|
120
|
+
console.log(` ${kc.harnessDisplayName}: ${kc.message} ${pc.yellow("✗")}`);
|
|
121
|
+
}
|
|
122
|
+
console.log();
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Get compatible kit-harness pairs.
|
|
127
|
+
*
|
|
128
|
+
* @param compatibility - Kit scope compatibility results
|
|
129
|
+
*/
|
|
130
|
+
export function getCompatiblePairs(compatibility) {
|
|
131
|
+
return compatibility
|
|
132
|
+
.filter((kc) => kc.compatible)
|
|
133
|
+
.map((kc) => ({ kit: kc.kit, harness: kc.harness }));
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Get incompatible kit-harness pairs.
|
|
137
|
+
*
|
|
138
|
+
* @param compatibility - Kit scope compatibility results
|
|
139
|
+
*/
|
|
140
|
+
export function getIncompatiblePairs(compatibility) {
|
|
141
|
+
return compatibility.filter((kc) => !kc.compatible);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Prompt user to handle scope incompatibility.
|
|
145
|
+
*
|
|
146
|
+
* @param scope - Currently selected scope
|
|
147
|
+
*/
|
|
148
|
+
export async function promptScopeIncompatibility(scope) {
|
|
149
|
+
const options = [
|
|
150
|
+
{
|
|
151
|
+
value: "proceed",
|
|
152
|
+
label: "Continue with available primitives",
|
|
153
|
+
hint: "Skip incompatible kits/primitives",
|
|
154
|
+
},
|
|
155
|
+
];
|
|
156
|
+
// Only offer to switch to global if currently at project scope
|
|
157
|
+
if (scope === "project") {
|
|
158
|
+
options.push({
|
|
159
|
+
value: "switch-global",
|
|
160
|
+
label: "Switch to global scope",
|
|
161
|
+
hint: "All primitives available",
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
options.push({
|
|
165
|
+
value: "go-back",
|
|
166
|
+
label: "Go back and change selection",
|
|
167
|
+
}, {
|
|
168
|
+
value: "cancel",
|
|
169
|
+
label: "Cancel installation",
|
|
170
|
+
});
|
|
171
|
+
const choice = await clack.select({
|
|
172
|
+
message: `How would you like to proceed?\n${pc.gray("│")} `,
|
|
173
|
+
options,
|
|
174
|
+
});
|
|
175
|
+
if (clack.isCancel(choice)) {
|
|
176
|
+
return { cancelled: true };
|
|
177
|
+
}
|
|
178
|
+
return {
|
|
179
|
+
cancelled: false,
|
|
180
|
+
choice: choice,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Run scope compatibility check flow.
|
|
185
|
+
*
|
|
186
|
+
* Checks compatibility, displays warnings, and prompts user for action if needed.
|
|
187
|
+
*
|
|
188
|
+
* @param kits - Selected kits
|
|
189
|
+
* @param harnesses - Selected harnesses with adapters
|
|
190
|
+
* @param scope - Selected installation scope
|
|
191
|
+
*/
|
|
192
|
+
export async function runScopeCompatibilityCheck(kits, harnesses, scope) {
|
|
193
|
+
// Check compatibility
|
|
194
|
+
const compatibility = checkKitScopeCompatibility(kits, harnesses, scope);
|
|
195
|
+
// If all compatible, continue without prompting
|
|
196
|
+
if (compatibility.allCompatible) {
|
|
197
|
+
return {
|
|
198
|
+
result: { cancelled: false, choice: "proceed" },
|
|
199
|
+
compatibility,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
// Display limitations
|
|
203
|
+
displayScopeLimitations(compatibility.limitations, scope);
|
|
204
|
+
displayKitScopeIncompatibility(compatibility.kitCompatibility);
|
|
205
|
+
// Prompt for action
|
|
206
|
+
const result = await promptScopeIncompatibility(scope);
|
|
207
|
+
// Handle switch to global
|
|
208
|
+
if (result.choice === "switch-global") {
|
|
209
|
+
return {
|
|
210
|
+
result: { cancelled: false, choice: "proceed" },
|
|
211
|
+
compatibility,
|
|
212
|
+
newScope: "global",
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
return { result, compatibility };
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Check if any harness has scope limitations.
|
|
219
|
+
*
|
|
220
|
+
* @param harnesses - Selected harnesses with adapters
|
|
221
|
+
* @param scope - Selected installation scope
|
|
222
|
+
*/
|
|
223
|
+
export function hasScopeLimitations(harnesses, scope) {
|
|
224
|
+
return harnesses.some((h) => {
|
|
225
|
+
const globalPrimitives = h.adapter.getSupportedPrimitives("global");
|
|
226
|
+
const scopePrimitives = h.adapter.getSupportedPrimitives(scope);
|
|
227
|
+
return globalPrimitives.length > scopePrimitives.length;
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=scope-compatibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-compatibility.js","sourceRoot":"","sources":["../../src/tui/scope-compatibility.ts"],"names":[],"mappings":"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"}
|