@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,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Harness selection screen.
|
|
3
|
+
*
|
|
4
|
+
* Displays detected AI harnesses and allows user to select which ones to configure.
|
|
5
|
+
*/
|
|
6
|
+
import * as clack from "@clack/prompts";
|
|
7
|
+
import pc from "picocolors";
|
|
8
|
+
import { formatCount } from "./spinner.js";
|
|
9
|
+
/**
|
|
10
|
+
* Display detected harnesses summary.
|
|
11
|
+
*/
|
|
12
|
+
export function displayDetectedHarnesses(harnesses) {
|
|
13
|
+
const detected = harnesses.filter((h) => h.detected);
|
|
14
|
+
const notDetected = harnesses.filter((h) => !h.detected);
|
|
15
|
+
if (detected.length > 0) {
|
|
16
|
+
clack.log.info(`Found ${formatCount(detected.length, "harness", "harnesses")}:`);
|
|
17
|
+
const detectedLines = detected.map((h) => {
|
|
18
|
+
const version = h.version ? pc.dim(` v${h.version}`) : "";
|
|
19
|
+
return `${h.displayName}${version} ${pc.green("✓")}`;
|
|
20
|
+
});
|
|
21
|
+
clack.log.message(detectedLines.join("\n"));
|
|
22
|
+
}
|
|
23
|
+
if (notDetected.length > 0 && detected.length > 0) {
|
|
24
|
+
clack.log.message("");
|
|
25
|
+
clack.log.info(pc.dim("Not detected:"));
|
|
26
|
+
const missingLines = notDetected.map((h) => `${pc.dim("○")} ${pc.dim(h.displayName)}`);
|
|
27
|
+
clack.log.message(missingLines.join("\n"));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Create select options from detected harnesses.
|
|
32
|
+
*/
|
|
33
|
+
export function createHarnessOptions(harnesses, includeAllOption = true) {
|
|
34
|
+
const detected = harnesses.filter((h) => h.detected);
|
|
35
|
+
const options = detected.map((h) => ({
|
|
36
|
+
value: h.name,
|
|
37
|
+
label: h.displayName,
|
|
38
|
+
hint: h.version ? `v${h.version}` : undefined,
|
|
39
|
+
}));
|
|
40
|
+
if (includeAllOption && detected.length > 1) {
|
|
41
|
+
options.push({
|
|
42
|
+
value: "__all__",
|
|
43
|
+
label: "All detected harnesses",
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
return options;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Prompt user to select harnesses for configuration.
|
|
50
|
+
*/
|
|
51
|
+
export async function selectHarnesses(harnesses, options) {
|
|
52
|
+
const detected = harnesses.filter((h) => h.detected);
|
|
53
|
+
// If only one harness detected, auto-select it
|
|
54
|
+
if (detected.length === 1 && detected[0]) {
|
|
55
|
+
return {
|
|
56
|
+
cancelled: false,
|
|
57
|
+
selected: [detected[0].name],
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
// If no harnesses detected, return empty selection
|
|
61
|
+
if (detected.length === 0) {
|
|
62
|
+
return {
|
|
63
|
+
cancelled: false,
|
|
64
|
+
selected: [],
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
// Show detected harnesses if requested
|
|
68
|
+
if (options?.showDetected !== false) {
|
|
69
|
+
displayDetectedHarnesses(harnesses);
|
|
70
|
+
}
|
|
71
|
+
// Prompt for selection
|
|
72
|
+
const selectOptions = createHarnessOptions(harnesses, options?.includeAllOption !== false);
|
|
73
|
+
// Convert options to clack's expected format
|
|
74
|
+
const clackOptions = selectOptions.map((opt) => {
|
|
75
|
+
const base = {
|
|
76
|
+
value: opt.value,
|
|
77
|
+
label: opt.label,
|
|
78
|
+
};
|
|
79
|
+
if (opt.hint !== undefined) {
|
|
80
|
+
base.hint = opt.hint;
|
|
81
|
+
}
|
|
82
|
+
return base;
|
|
83
|
+
});
|
|
84
|
+
const selected = await clack.multiselect({
|
|
85
|
+
message: `Which harnesses do you want to configure?\n${pc.gray("│")} `,
|
|
86
|
+
options: clackOptions,
|
|
87
|
+
required: true,
|
|
88
|
+
});
|
|
89
|
+
if (clack.isCancel(selected)) {
|
|
90
|
+
return {
|
|
91
|
+
cancelled: true,
|
|
92
|
+
selected: [],
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
const selectedValues = selected;
|
|
96
|
+
// Handle "All" option
|
|
97
|
+
if (selectedValues.includes("__all__")) {
|
|
98
|
+
return {
|
|
99
|
+
cancelled: false,
|
|
100
|
+
selected: detected.map((h) => h.name),
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
return {
|
|
104
|
+
cancelled: false,
|
|
105
|
+
selected: selectedValues,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Filter harnesses by names.
|
|
110
|
+
*/
|
|
111
|
+
export function filterHarnessesByName(harnesses, names) {
|
|
112
|
+
const nameSet = new Set(names);
|
|
113
|
+
return harnesses.filter((h) => nameSet.has(h.name));
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get harnesses that are detected but not in the provided list.
|
|
117
|
+
*/
|
|
118
|
+
export function getMissingHarnesses(harnesses, requestedNames) {
|
|
119
|
+
const detected = new Set(harnesses.filter((h) => h.detected).map((h) => h.name));
|
|
120
|
+
return requestedNames.filter((name) => !detected.has(name));
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Display a warning about missing harnesses.
|
|
124
|
+
*/
|
|
125
|
+
export function warnMissingHarnesses(missing) {
|
|
126
|
+
if (missing.length === 0)
|
|
127
|
+
return;
|
|
128
|
+
const label = missing.length === 1 ? "Harness" : "Harnesses";
|
|
129
|
+
clack.log.warn(`${label} not detected: ${missing.join(", ")}`);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Display info about no harnesses being detected.
|
|
133
|
+
*/
|
|
134
|
+
export function displayNoHarnessesDetected() {
|
|
135
|
+
clack.log.error("No compatible AI harnesses detected");
|
|
136
|
+
clack.log.info("Install one of: Claude Code, Codex, Gemini CLI, GitHub Copilot, or OpenCode");
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Validate that at least one harness is selected.
|
|
140
|
+
*/
|
|
141
|
+
export function validateHarnessSelection(harnesses, selected) {
|
|
142
|
+
if (selected.length === 0) {
|
|
143
|
+
return {
|
|
144
|
+
valid: false,
|
|
145
|
+
error: "No harnesses selected",
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
const detected = new Set(harnesses.filter((h) => h.detected).map((h) => h.name));
|
|
149
|
+
const invalid = selected.filter((name) => !detected.has(name));
|
|
150
|
+
if (invalid.length > 0) {
|
|
151
|
+
return {
|
|
152
|
+
valid: false,
|
|
153
|
+
error: `Selected harnesses not detected: ${invalid.join(", ")}`,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
return { valid: true };
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Get display name for a harness.
|
|
160
|
+
*/
|
|
161
|
+
export function getHarnessDisplayName(harnesses, name) {
|
|
162
|
+
const harness = harnesses.find((h) => h.name === name);
|
|
163
|
+
return harness?.displayName ?? name;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Create a map of harness names to display names.
|
|
167
|
+
*/
|
|
168
|
+
export function createHarnessDisplayMap(harnesses) {
|
|
169
|
+
return new Map(harnesses.map((h) => [h.name, h.displayName]));
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=harness-select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"harness-select.js","sourceRoot":"","sources":["../../src/tui/harness-select.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TUI module - Interactive terminal UI components.
|
|
3
|
+
*
|
|
4
|
+
* This module provides clack-based interactive components for:
|
|
5
|
+
* - Harness detection and selection
|
|
6
|
+
* - Kit discovery and selection
|
|
7
|
+
* - Compatibility checking
|
|
8
|
+
* - Primitive resolution display
|
|
9
|
+
* - Installation progress tracking
|
|
10
|
+
* - Summary display
|
|
11
|
+
* - Upgrade selection
|
|
12
|
+
* - Environment variable prompting
|
|
13
|
+
*/
|
|
14
|
+
export * from "./types.js";
|
|
15
|
+
export * from "./spinner.js";
|
|
16
|
+
export { displayDetectedHarnesses, createHarnessOptions, selectHarnesses, filterHarnessesByName, getMissingHarnesses, warnMissingHarnesses, displayNoHarnessesDetected, validateHarnessSelection, getHarnessDisplayName, createHarnessDisplayMap, } from "./harness-select.js";
|
|
17
|
+
export { formatPrimitiveCounts, displayKitDetails, displayAvailableKits, createKitOptions, selectKits, filterKitsByName, getMissingKitNames, displayMissingKits, displayNoKitsFound, validateKitSelection, getKitByName, formatKitList, displayKitsJson, } from "./kit-select.js";
|
|
18
|
+
export { checkKitHarnessCompatibility, buildCompatibilityMatrix, displayKitCompatibility, displayCompatibilityMatrix, hasIncompatibilities, getIncompatiblePairs, getCompatiblePairs, displayIncompatibilitySummary, promptIncompatibilityChoice, runCompatibilityCheck, getCompatibleKits, getCompatibleHarnesses, } from "./compatibility.js";
|
|
19
|
+
export { toDisplayEntry, toKitResolutionDisplay, toMultiKitResolutionDisplay, formatResolvedEntry, displayResolutionByType, displayKitResolution, displayResolutionResults, displayResolutionSummary, hasResolutionErrors, getAllResolutionErrors, displayResolutionErrors, getUniquePrimitives, countPrimitivesByType, } from "./resolution.js";
|
|
20
|
+
export { formatFileOperation, InstallProgressTracker, createProgressHandler, displayProgressSummary, toFileOperationDisplay, displayFileOperations, displayPrimitiveStatus, } from "./progress.js";
|
|
21
|
+
export { buildInstallSummary, displayInstallPlanSummary, confirmInstallPlan, displayInstallSummary, displayDryRunSummary, displayInstallFailure, displayTotalsSummary, summaryToJson, } from "./summary.js";
|
|
22
|
+
export { determineSeverity, toUpgradeDisplayEntry, formatUpgradeEntry, displayUpgradeEntry, displayUpgradesByKit, displayUpgradeSummary, displayNoUpgrades, createUpgradeOptions, selectUpgrades, displayUpgradeCheck, upgradesToJson, filterUpgradesByKit, filterUpgradesByHarness, getBreakingUpgrades, getNonBreakingUpgrades, } from "./upgrade-select.js";
|
|
23
|
+
export { extractEnvVarsFromConfig, extractAllEnvVars, categorizeEnvVars, displayEnvVarStatus, displaySensitiveWarnings, promptForEnvVars, promptForSharedMcpInstances, applyEnvVarResults, applyEnvVarResultsAsResolved, areRequiredVarsSatisfied, getMissingRequiredVars, getMissingSensitiveVars, type EnvVarCategorization, } from "./env-prompt.js";
|
|
24
|
+
export { selectScope, createScopeOptions, displayScopeInfo, formatScope, formatScopeWithDescription, getScopePathDescription, displayScopeConfirmation, type ScopeSelectionResult, } from "./scope-select.js";
|
|
25
|
+
export { checkHarnessScopeLimitations, checkKitScopeCompatibility, displayScopeLimitations, displayKitScopeIncompatibility, getCompatiblePairs as getScopeCompatiblePairs, getIncompatiblePairs as getScopeIncompatiblePairs, promptScopeIncompatibility, runScopeCompatibilityCheck, hasScopeLimitations, type ScopeLimitation, type KitScopeCompatibility, type ScopeCompatibilityResult, type ScopeIncompatibilityChoice, type ScopeCompatibilityPromptResult, } from "./scope-compatibility.js";
|
|
26
|
+
/**
|
|
27
|
+
* Start interactive TUI session.
|
|
28
|
+
*/
|
|
29
|
+
export declare function intro(title?: string): void;
|
|
30
|
+
/**
|
|
31
|
+
* End interactive TUI session with success.
|
|
32
|
+
*/
|
|
33
|
+
export declare function outroSuccess(message?: string): void;
|
|
34
|
+
/**
|
|
35
|
+
* End interactive TUI session with failure.
|
|
36
|
+
*/
|
|
37
|
+
export declare function outroError(message?: string): void;
|
|
38
|
+
/**
|
|
39
|
+
* End interactive TUI session with cancellation.
|
|
40
|
+
*/
|
|
41
|
+
export declare function outroCancel(message?: string): void;
|
|
42
|
+
/**
|
|
43
|
+
* Log an info message.
|
|
44
|
+
*/
|
|
45
|
+
export declare function logInfo(message: string): void;
|
|
46
|
+
/**
|
|
47
|
+
* Log a success message.
|
|
48
|
+
*/
|
|
49
|
+
export declare function logSuccess(message: string): void;
|
|
50
|
+
/**
|
|
51
|
+
* Log a warning message.
|
|
52
|
+
*/
|
|
53
|
+
export declare function logWarning(message: string): void;
|
|
54
|
+
/**
|
|
55
|
+
* Log an error message.
|
|
56
|
+
*/
|
|
57
|
+
export declare function logError(message: string): void;
|
|
58
|
+
/**
|
|
59
|
+
* Log a step message.
|
|
60
|
+
*/
|
|
61
|
+
export declare function logStep(message: string): void;
|
|
62
|
+
/**
|
|
63
|
+
* Log a message (generic).
|
|
64
|
+
*/
|
|
65
|
+
export declare function logMessage(message: string): void;
|
|
66
|
+
/**
|
|
67
|
+
* Check if a value is a cancellation.
|
|
68
|
+
*/
|
|
69
|
+
export declare function isCancel(value: unknown): value is symbol;
|
|
70
|
+
/**
|
|
71
|
+
* Prompt for confirmation.
|
|
72
|
+
*/
|
|
73
|
+
export declare function confirm(message: string, options?: {
|
|
74
|
+
initialValue?: boolean;
|
|
75
|
+
active?: string;
|
|
76
|
+
inactive?: string;
|
|
77
|
+
}): Promise<boolean | symbol>;
|
|
78
|
+
/**
|
|
79
|
+
* Prompt for text input.
|
|
80
|
+
*/
|
|
81
|
+
export declare function text(message: string, options?: {
|
|
82
|
+
placeholder?: string;
|
|
83
|
+
defaultValue?: string;
|
|
84
|
+
validate?: (value: string) => string | undefined;
|
|
85
|
+
}): Promise<string | symbol>;
|
|
86
|
+
/**
|
|
87
|
+
* Prompt for single selection.
|
|
88
|
+
*/
|
|
89
|
+
export declare function select<T extends string>(message: string, options: {
|
|
90
|
+
value: T;
|
|
91
|
+
label: string;
|
|
92
|
+
hint?: string | undefined;
|
|
93
|
+
}[]): Promise<T | symbol>;
|
|
94
|
+
/**
|
|
95
|
+
* Prompt for multiple selection.
|
|
96
|
+
*/
|
|
97
|
+
export declare function multiselect<T extends string>(message: string, options: {
|
|
98
|
+
value: T;
|
|
99
|
+
label: string;
|
|
100
|
+
hint?: string | undefined;
|
|
101
|
+
}[], required?: boolean): Promise<T[] | symbol>;
|
|
102
|
+
/**
|
|
103
|
+
* Display a note.
|
|
104
|
+
*/
|
|
105
|
+
export declare function note(message: string, title?: string): void;
|
|
106
|
+
/**
|
|
107
|
+
* Group related log messages.
|
|
108
|
+
*/
|
|
109
|
+
export declare function group<T>(prompts: () => Promise<T>, options?: {
|
|
110
|
+
onCancel?: () => void;
|
|
111
|
+
}): Promise<T>;
|
|
112
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tui/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TUI module - Interactive terminal UI components.
|
|
3
|
+
*
|
|
4
|
+
* This module provides clack-based interactive components for:
|
|
5
|
+
* - Harness detection and selection
|
|
6
|
+
* - Kit discovery and selection
|
|
7
|
+
* - Compatibility checking
|
|
8
|
+
* - Primitive resolution display
|
|
9
|
+
* - Installation progress tracking
|
|
10
|
+
* - Summary display
|
|
11
|
+
* - Upgrade selection
|
|
12
|
+
* - Environment variable prompting
|
|
13
|
+
*/
|
|
14
|
+
import * as clack from "@clack/prompts";
|
|
15
|
+
import pc from "picocolors";
|
|
16
|
+
import { debugLog } from "../core/debug.js";
|
|
17
|
+
// Export types
|
|
18
|
+
export * from "./types.js";
|
|
19
|
+
// Export spinner utilities
|
|
20
|
+
export * from "./spinner.js";
|
|
21
|
+
// Export harness selection
|
|
22
|
+
export { displayDetectedHarnesses, createHarnessOptions, selectHarnesses, filterHarnessesByName, getMissingHarnesses, warnMissingHarnesses, displayNoHarnessesDetected, validateHarnessSelection, getHarnessDisplayName, createHarnessDisplayMap, } from "./harness-select.js";
|
|
23
|
+
// Export kit selection
|
|
24
|
+
export { formatPrimitiveCounts, displayKitDetails, displayAvailableKits, createKitOptions, selectKits, filterKitsByName, getMissingKitNames, displayMissingKits, displayNoKitsFound, validateKitSelection, getKitByName, formatKitList, displayKitsJson, } from "./kit-select.js";
|
|
25
|
+
// Export compatibility
|
|
26
|
+
export { checkKitHarnessCompatibility, buildCompatibilityMatrix, displayKitCompatibility, displayCompatibilityMatrix, hasIncompatibilities, getIncompatiblePairs, getCompatiblePairs, displayIncompatibilitySummary, promptIncompatibilityChoice, runCompatibilityCheck, getCompatibleKits, getCompatibleHarnesses, } from "./compatibility.js";
|
|
27
|
+
// Export resolution display
|
|
28
|
+
export { toDisplayEntry, toKitResolutionDisplay, toMultiKitResolutionDisplay, formatResolvedEntry, displayResolutionByType, displayKitResolution, displayResolutionResults, displayResolutionSummary, hasResolutionErrors, getAllResolutionErrors, displayResolutionErrors, getUniquePrimitives, countPrimitivesByType, } from "./resolution.js";
|
|
29
|
+
// Export progress display
|
|
30
|
+
export { formatFileOperation, InstallProgressTracker, createProgressHandler, displayProgressSummary, toFileOperationDisplay, displayFileOperations, displayPrimitiveStatus, } from "./progress.js";
|
|
31
|
+
// Export summary display
|
|
32
|
+
export { buildInstallSummary, displayInstallPlanSummary, confirmInstallPlan, displayInstallSummary, displayDryRunSummary, displayInstallFailure, displayTotalsSummary, summaryToJson, } from "./summary.js";
|
|
33
|
+
// Export upgrade selection
|
|
34
|
+
export { determineSeverity, toUpgradeDisplayEntry, formatUpgradeEntry, displayUpgradeEntry, displayUpgradesByKit, displayUpgradeSummary, displayNoUpgrades, createUpgradeOptions, selectUpgrades, displayUpgradeCheck, upgradesToJson, filterUpgradesByKit, filterUpgradesByHarness, getBreakingUpgrades, getNonBreakingUpgrades, } from "./upgrade-select.js";
|
|
35
|
+
// Export env prompts
|
|
36
|
+
export { extractEnvVarsFromConfig, extractAllEnvVars, categorizeEnvVars, displayEnvVarStatus, displaySensitiveWarnings, promptForEnvVars, promptForSharedMcpInstances, applyEnvVarResults, applyEnvVarResultsAsResolved, areRequiredVarsSatisfied, getMissingRequiredVars, getMissingSensitiveVars, } from "./env-prompt.js";
|
|
37
|
+
// Export scope selection
|
|
38
|
+
export { selectScope, createScopeOptions, displayScopeInfo, formatScope, formatScopeWithDescription, getScopePathDescription, displayScopeConfirmation, } from "./scope-select.js";
|
|
39
|
+
// Export scope compatibility
|
|
40
|
+
export { checkHarnessScopeLimitations, checkKitScopeCompatibility, displayScopeLimitations, displayKitScopeIncompatibility, getCompatiblePairs as getScopeCompatiblePairs, getIncompatiblePairs as getScopeIncompatiblePairs, promptScopeIncompatibility, runScopeCompatibilityCheck, hasScopeLimitations, } from "./scope-compatibility.js";
|
|
41
|
+
/**
|
|
42
|
+
* Start interactive TUI session.
|
|
43
|
+
*/
|
|
44
|
+
export function intro(title) {
|
|
45
|
+
clack.intro(pc.cyan(title ?? "@hashicorp/kits"));
|
|
46
|
+
void debugLog({
|
|
47
|
+
level: "info",
|
|
48
|
+
event: "tui.intro",
|
|
49
|
+
message: title ?? "@hashicorp/kits",
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* End interactive TUI session with success.
|
|
54
|
+
*/
|
|
55
|
+
export function outroSuccess(message) {
|
|
56
|
+
clack.outro(pc.green(message ?? "Done!"));
|
|
57
|
+
void debugLog({
|
|
58
|
+
level: "info",
|
|
59
|
+
event: "tui.outro.success",
|
|
60
|
+
message: message ?? "Done!",
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* End interactive TUI session with failure.
|
|
65
|
+
*/
|
|
66
|
+
export function outroError(message) {
|
|
67
|
+
clack.outro(pc.red(message ?? "Installation failed"));
|
|
68
|
+
void debugLog({
|
|
69
|
+
level: "error",
|
|
70
|
+
event: "tui.outro.error",
|
|
71
|
+
message: message ?? "Installation failed",
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* End interactive TUI session with cancellation.
|
|
76
|
+
*/
|
|
77
|
+
export function outroCancel(message) {
|
|
78
|
+
clack.cancel(message ?? "Installation cancelled");
|
|
79
|
+
void debugLog({
|
|
80
|
+
level: "warn",
|
|
81
|
+
event: "tui.outro.cancel",
|
|
82
|
+
message: message ?? "Installation cancelled",
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Log an info message.
|
|
87
|
+
*/
|
|
88
|
+
export function logInfo(message) {
|
|
89
|
+
clack.log.info(message);
|
|
90
|
+
void debugLog({ level: "info", event: "tui.log.info", message });
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Log a success message.
|
|
94
|
+
*/
|
|
95
|
+
export function logSuccess(message) {
|
|
96
|
+
clack.log.success(message);
|
|
97
|
+
void debugLog({ level: "info", event: "tui.log.success", message });
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Log a warning message.
|
|
101
|
+
*/
|
|
102
|
+
export function logWarning(message) {
|
|
103
|
+
clack.log.warn(message);
|
|
104
|
+
void debugLog({ level: "warn", event: "tui.log.warn", message });
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Log an error message.
|
|
108
|
+
*/
|
|
109
|
+
export function logError(message) {
|
|
110
|
+
clack.log.error(message);
|
|
111
|
+
void debugLog({ level: "error", event: "tui.log.error", message });
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Log a step message.
|
|
115
|
+
*/
|
|
116
|
+
export function logStep(message) {
|
|
117
|
+
clack.log.step(message);
|
|
118
|
+
void debugLog({ level: "info", event: "tui.log.step", message });
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Log a message (generic).
|
|
122
|
+
*/
|
|
123
|
+
export function logMessage(message) {
|
|
124
|
+
clack.log.message(message);
|
|
125
|
+
void debugLog({ level: "debug", event: "tui.log.message", message });
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Check if a value is a cancellation.
|
|
129
|
+
*/
|
|
130
|
+
export function isCancel(value) {
|
|
131
|
+
return clack.isCancel(value);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Prompt for confirmation.
|
|
135
|
+
*/
|
|
136
|
+
export async function confirm(message, options) {
|
|
137
|
+
const confirmOptions = { message };
|
|
138
|
+
if (options?.initialValue !== undefined) {
|
|
139
|
+
confirmOptions.initialValue = options.initialValue;
|
|
140
|
+
}
|
|
141
|
+
if (options?.active !== undefined) {
|
|
142
|
+
confirmOptions.active = options.active;
|
|
143
|
+
}
|
|
144
|
+
if (options?.inactive !== undefined) {
|
|
145
|
+
confirmOptions.inactive = options.inactive;
|
|
146
|
+
}
|
|
147
|
+
return clack.confirm(confirmOptions);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Prompt for text input.
|
|
151
|
+
*/
|
|
152
|
+
export async function text(message, options) {
|
|
153
|
+
const textOptions = { message };
|
|
154
|
+
if (options?.placeholder !== undefined) {
|
|
155
|
+
textOptions.placeholder = options.placeholder;
|
|
156
|
+
}
|
|
157
|
+
if (options?.defaultValue !== undefined) {
|
|
158
|
+
textOptions.defaultValue = options.defaultValue;
|
|
159
|
+
}
|
|
160
|
+
if (options?.validate !== undefined) {
|
|
161
|
+
textOptions.validate = options.validate;
|
|
162
|
+
}
|
|
163
|
+
return clack.text(textOptions);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Prompt for single selection.
|
|
167
|
+
*/
|
|
168
|
+
export async function select(message, options) {
|
|
169
|
+
// Convert options to clack's expected format with explicit type casting
|
|
170
|
+
const clackOptions = options.map((opt) => {
|
|
171
|
+
if (opt.hint !== undefined) {
|
|
172
|
+
return { value: opt.value, label: opt.label, hint: opt.hint };
|
|
173
|
+
}
|
|
174
|
+
return { value: opt.value, label: opt.label };
|
|
175
|
+
});
|
|
176
|
+
return clack.select({
|
|
177
|
+
message,
|
|
178
|
+
options: clackOptions,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Prompt for multiple selection.
|
|
183
|
+
*/
|
|
184
|
+
export async function multiselect(message, options, required) {
|
|
185
|
+
// Convert options to clack's expected format with explicit type casting
|
|
186
|
+
const clackOptions = options.map((opt) => {
|
|
187
|
+
if (opt.hint !== undefined) {
|
|
188
|
+
return { value: opt.value, label: opt.label, hint: opt.hint };
|
|
189
|
+
}
|
|
190
|
+
return { value: opt.value, label: opt.label };
|
|
191
|
+
});
|
|
192
|
+
return clack.multiselect({
|
|
193
|
+
message,
|
|
194
|
+
options: clackOptions,
|
|
195
|
+
required: required ?? true,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Display a note.
|
|
200
|
+
*/
|
|
201
|
+
export function note(message, title) {
|
|
202
|
+
clack.note(message, title);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Group related log messages.
|
|
206
|
+
*/
|
|
207
|
+
export async function group(prompts, options) {
|
|
208
|
+
const result = await clack.group({
|
|
209
|
+
result: prompts,
|
|
210
|
+
}, options?.onCancel ? { onCancel: options.onCancel } : undefined);
|
|
211
|
+
return result.result;
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tui/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kit selection screen.
|
|
3
|
+
*
|
|
4
|
+
* Displays available kits with descriptions and primitive counts,
|
|
5
|
+
* allowing users to select which kits to install.
|
|
6
|
+
*/
|
|
7
|
+
import type { DiscoveredKit, PrimitiveCounts } from "../discovery/types.js";
|
|
8
|
+
import type { KitSelectionResult, SelectOption } from "./types.js";
|
|
9
|
+
/**
|
|
10
|
+
* Format primitive counts as a summary string.
|
|
11
|
+
*/
|
|
12
|
+
export declare function formatPrimitiveCounts(counts: PrimitiveCounts): string;
|
|
13
|
+
/**
|
|
14
|
+
* Display a single kit's detailed information.
|
|
15
|
+
*/
|
|
16
|
+
export declare function displayKitDetails(kit: DiscoveredKit): void;
|
|
17
|
+
/**
|
|
18
|
+
* Display all available kits.
|
|
19
|
+
*/
|
|
20
|
+
export declare function displayAvailableKits(kits: DiscoveredKit[]): void;
|
|
21
|
+
/**
|
|
22
|
+
* Create select options from discovered kits.
|
|
23
|
+
*/
|
|
24
|
+
export declare function createKitOptions(kits: DiscoveredKit[]): SelectOption<string>[];
|
|
25
|
+
/**
|
|
26
|
+
* Prompt user to select kits for installation.
|
|
27
|
+
*/
|
|
28
|
+
export declare function selectKits(kits: DiscoveredKit[], options?: {
|
|
29
|
+
showAvailable?: boolean;
|
|
30
|
+
}): Promise<KitSelectionResult>;
|
|
31
|
+
/**
|
|
32
|
+
* Filter kits by names.
|
|
33
|
+
*/
|
|
34
|
+
export declare function filterKitsByName(kits: DiscoveredKit[], names: string[]): DiscoveredKit[];
|
|
35
|
+
/**
|
|
36
|
+
* Get kit names that were requested but not found.
|
|
37
|
+
*/
|
|
38
|
+
export declare function getMissingKitNames(kits: DiscoveredKit[], requestedNames: string[]): string[];
|
|
39
|
+
/**
|
|
40
|
+
* Display error for missing kits.
|
|
41
|
+
*/
|
|
42
|
+
export declare function displayMissingKits(missing: string[], available: DiscoveredKit[]): void;
|
|
43
|
+
/**
|
|
44
|
+
* Display error when no kits are found.
|
|
45
|
+
*/
|
|
46
|
+
export declare function displayNoKitsFound(): void;
|
|
47
|
+
/**
|
|
48
|
+
* Validate kit selection.
|
|
49
|
+
*/
|
|
50
|
+
export declare function validateKitSelection(kits: DiscoveredKit[], selected: string[]): {
|
|
51
|
+
valid: boolean;
|
|
52
|
+
error?: string;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* Get a kit by name.
|
|
56
|
+
*/
|
|
57
|
+
export declare function getKitByName(kits: DiscoveredKit[], name: string): DiscoveredKit | undefined;
|
|
58
|
+
/**
|
|
59
|
+
* Format kit list for display.
|
|
60
|
+
*/
|
|
61
|
+
export declare function formatKitList(kits: DiscoveredKit[], options?: {
|
|
62
|
+
includeVersion?: boolean;
|
|
63
|
+
}): string;
|
|
64
|
+
/**
|
|
65
|
+
* Display kits in JSON format.
|
|
66
|
+
*/
|
|
67
|
+
export declare function displayKitsJson(kits: DiscoveredKit[], source: string, repository: {
|
|
68
|
+
name: string;
|
|
69
|
+
description?: string;
|
|
70
|
+
version?: string;
|
|
71
|
+
}): void;
|
|
72
|
+
//# sourceMappingURL=kit-select.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kit-select.d.ts","sourceRoot":"","sources":["../../src/tui/kit-select.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGnE;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAoBrE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAe1D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,IAAI,CAQhE;AAoBD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE,CAM9E;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,aAAa,EAAE,EACrB,OAAO,CAAC,EAAE;IACR,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,GACA,OAAO,CAAC,kBAAkB,CAAC,CA8C7B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CAGxF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAG5F;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,IAAI,CAOtF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,aAAa,EAAE,EACrB,QAAQ,EAAE,MAAM,EAAE,GACjB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAmBpC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAE3F;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,aAAa,EAAE,EACrB,OAAO,CAAC,EAAE;IAAE,cAAc,CAAC,EAAE,OAAO,CAAA;CAAE,GACrC,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,aAAa,EAAE,EACrB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GACnE,IAAI,CAcN"}
|