@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,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git fetcher for cloning repositories.
|
|
3
|
+
*
|
|
4
|
+
* Clones GitHub repositories to temporary directories with support for
|
|
5
|
+
* branch/tag checkout and automatic cleanup.
|
|
6
|
+
*/
|
|
7
|
+
import fs from "node:fs/promises";
|
|
8
|
+
import os from "node:os";
|
|
9
|
+
import path from "node:path";
|
|
10
|
+
import { simpleGit } from "simple-git";
|
|
11
|
+
import { parseSource, SourceParseError } from "./source-parser.js";
|
|
12
|
+
/**
|
|
13
|
+
* Error thrown when git operations fail.
|
|
14
|
+
*/
|
|
15
|
+
export class GitFetchError extends Error {
|
|
16
|
+
gitSource;
|
|
17
|
+
gitCause;
|
|
18
|
+
constructor(message, source, cause) {
|
|
19
|
+
super(message);
|
|
20
|
+
this.name = "GitFetchError";
|
|
21
|
+
this.gitSource = source;
|
|
22
|
+
if (cause) {
|
|
23
|
+
this.gitCause = cause;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const DEFAULT_OPTIONS = {
|
|
28
|
+
tempDir: os.tmpdir(),
|
|
29
|
+
timeout: 60000,
|
|
30
|
+
shallow: true,
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Git fetcher implementation for cloning GitHub repositories.
|
|
34
|
+
*/
|
|
35
|
+
export class GitFetcher {
|
|
36
|
+
options;
|
|
37
|
+
constructor(options = {}) {
|
|
38
|
+
this.options = { ...DEFAULT_OPTIONS, ...options };
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Check if this fetcher can handle the given source.
|
|
42
|
+
*
|
|
43
|
+
* Handles GitHub shorthand format: org/repo or org/repo@ref
|
|
44
|
+
*/
|
|
45
|
+
canHandle(source) {
|
|
46
|
+
try {
|
|
47
|
+
const descriptor = parseSource(source);
|
|
48
|
+
return descriptor.type === "github";
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Fetch (clone) a GitHub repository to a local temporary directory.
|
|
56
|
+
*
|
|
57
|
+
* @param source - GitHub shorthand (e.g., "example-org/kits@v1.0.0")
|
|
58
|
+
* @returns Fetch result with local path and cleanup function
|
|
59
|
+
* @throws GitFetchError if cloning fails
|
|
60
|
+
*/
|
|
61
|
+
async fetch(source) {
|
|
62
|
+
let descriptor;
|
|
63
|
+
try {
|
|
64
|
+
const parsed = parseSource(source);
|
|
65
|
+
if (parsed.type !== "github") {
|
|
66
|
+
throw new SourceParseError("Not a GitHub source", source);
|
|
67
|
+
}
|
|
68
|
+
descriptor = parsed;
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
throw new GitFetchError(`Failed to parse source: ${source}`, source, error instanceof Error ? error : undefined);
|
|
72
|
+
}
|
|
73
|
+
// Create temp directory
|
|
74
|
+
const tempPrefix = path.join(this.options.tempDir, "agent-kit-");
|
|
75
|
+
let tempDir;
|
|
76
|
+
try {
|
|
77
|
+
tempDir = await fs.mkdtemp(tempPrefix);
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
throw new GitFetchError(`Failed to create temporary directory`, source, error instanceof Error ? error : undefined);
|
|
81
|
+
}
|
|
82
|
+
// Configure git
|
|
83
|
+
const gitOptions = {
|
|
84
|
+
baseDir: tempDir,
|
|
85
|
+
binary: "git",
|
|
86
|
+
maxConcurrentProcesses: 1,
|
|
87
|
+
timeout: {
|
|
88
|
+
block: this.options.timeout,
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
const git = simpleGit(gitOptions);
|
|
92
|
+
// Build clone URL
|
|
93
|
+
const cloneUrl = `https://github.com/${descriptor.owner}/${descriptor.repo}.git`;
|
|
94
|
+
try {
|
|
95
|
+
// Clone with options
|
|
96
|
+
const cloneOptions = [];
|
|
97
|
+
if (this.options.shallow) {
|
|
98
|
+
cloneOptions.push("--depth", "1");
|
|
99
|
+
}
|
|
100
|
+
if (descriptor.ref) {
|
|
101
|
+
cloneOptions.push("--branch", descriptor.ref);
|
|
102
|
+
}
|
|
103
|
+
await git.clone(cloneUrl, tempDir, cloneOptions);
|
|
104
|
+
// Return result with cleanup function
|
|
105
|
+
return {
|
|
106
|
+
localPath: tempDir,
|
|
107
|
+
cleanup: async () => {
|
|
108
|
+
try {
|
|
109
|
+
await fs.rm(tempDir, { recursive: true, force: true });
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
// Ignore cleanup errors
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
// Clean up on failure
|
|
119
|
+
try {
|
|
120
|
+
await fs.rm(tempDir, { recursive: true, force: true });
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
// Ignore cleanup errors
|
|
124
|
+
}
|
|
125
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
126
|
+
// Provide helpful error messages
|
|
127
|
+
if (errorMessage.includes("not found")) {
|
|
128
|
+
throw new GitFetchError(`Repository not found: ${descriptor.owner}/${descriptor.repo}`, source, error instanceof Error ? error : undefined);
|
|
129
|
+
}
|
|
130
|
+
if (descriptor.ref &&
|
|
131
|
+
(errorMessage.includes("did not match any") ||
|
|
132
|
+
errorMessage.includes("Remote branch") ||
|
|
133
|
+
errorMessage.includes("not found in upstream"))) {
|
|
134
|
+
throw new GitFetchError(`Branch or tag not found: ${descriptor.ref}`, source, error instanceof Error ? error : undefined);
|
|
135
|
+
}
|
|
136
|
+
if (errorMessage.includes("Authentication failed") ||
|
|
137
|
+
errorMessage.includes("could not read Username")) {
|
|
138
|
+
throw new GitFetchError(`Authentication failed. Private repositories are not supported.`, source, error instanceof Error ? error : undefined);
|
|
139
|
+
}
|
|
140
|
+
throw new GitFetchError(`Failed to clone repository: ${errorMessage}`, source, error instanceof Error ? error : undefined);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Create a git fetcher with default options.
|
|
146
|
+
*/
|
|
147
|
+
export function createGitFetcher(options) {
|
|
148
|
+
return new GitFetcher(options);
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=git-fetcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-fetcher.js","sourceRoot":"","sources":["../../src/discovery/git-fetcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Discovery module for the kit installer.
|
|
3
|
+
*
|
|
4
|
+
* This module handles source parsing, fetching, and kit discovery.
|
|
5
|
+
*/
|
|
6
|
+
export type { SourceType, GitHubSource, LocalSource, SourceDescriptor, FetchResult, PrimitiveCounts, DiscoveredKit, RepositoryMetadata, KitDiscoveryResult, DiscoveryError, SourceFetcher, DetectedHarness, KitCompatibility, CompatibilityMatrix, } from "./types.js";
|
|
7
|
+
export { isGitHubSource, isLocalSource } from "./types.js";
|
|
8
|
+
export { parseSource, formatSource, SourceParseError } from "./source-parser.js";
|
|
9
|
+
export { GitFetcher, GitFetchError, createGitFetcher, type GitFetcherOptions } from "./git-fetcher.js";
|
|
10
|
+
export { LocalFetcher, LocalFetchError, createLocalFetcher } from "./local-fetcher.js";
|
|
11
|
+
export { FetcherRegistry, NoFetcherError, createFetcherRegistry, getDefaultFetcherRegistry, fetchSource, type FetcherRegistryOptions, } from "./fetcher-registry.js";
|
|
12
|
+
export { scanKits, filterKitsByName, getMissingKitNames, KitScanError, type KitScannerOptions, } from "./kit-scanner.js";
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,UAAU,EACV,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGjF,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACvG,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAO,EACL,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,yBAAyB,EACzB,WAAW,EACX,KAAK,sBAAsB,GAC5B,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,KAAK,iBAAiB,GACvB,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Discovery module for the kit installer.
|
|
3
|
+
*
|
|
4
|
+
* This module handles source parsing, fetching, and kit discovery.
|
|
5
|
+
*/
|
|
6
|
+
export { isGitHubSource, isLocalSource } from "./types.js";
|
|
7
|
+
// Source parsing
|
|
8
|
+
export { parseSource, formatSource, SourceParseError } from "./source-parser.js";
|
|
9
|
+
// Fetchers
|
|
10
|
+
export { GitFetcher, GitFetchError, createGitFetcher } from "./git-fetcher.js";
|
|
11
|
+
export { LocalFetcher, LocalFetchError, createLocalFetcher } from "./local-fetcher.js";
|
|
12
|
+
export { FetcherRegistry, NoFetcherError, createFetcherRegistry, getDefaultFetcherRegistry, fetchSource, } from "./fetcher-registry.js";
|
|
13
|
+
// Kit scanning
|
|
14
|
+
export { scanKits, filterKitsByName, getMissingKitNames, KitScanError, } from "./kit-scanner.js";
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAoBH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3D,iBAAiB;AACjB,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEjF,WAAW;AACX,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAA0B,MAAM,kBAAkB,CAAC;AACvG,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAO,EACL,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,yBAAyB,EACzB,WAAW,GAEZ,MAAM,uBAAuB,CAAC;AAE/B,eAAe;AACf,OAAO,EACL,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,GAEb,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kit scanner for discovering kits in a repository.
|
|
3
|
+
*
|
|
4
|
+
* Loads and validates kits.json, primitives.json, and kit manifests.
|
|
5
|
+
*/
|
|
6
|
+
import type { KitDiscoveryResult } from "./types.js";
|
|
7
|
+
/**
|
|
8
|
+
* Error thrown during kit scanning.
|
|
9
|
+
*/
|
|
10
|
+
export declare class KitScanError extends Error {
|
|
11
|
+
readonly scanPath?: string | undefined;
|
|
12
|
+
readonly scanCause?: Error | undefined;
|
|
13
|
+
constructor(message: string, path?: string, cause?: Error);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Options for the kit scanner.
|
|
17
|
+
*/
|
|
18
|
+
export interface KitScannerOptions {
|
|
19
|
+
/**
|
|
20
|
+
* Whether to validate JSON against schemas.
|
|
21
|
+
* Defaults to true.
|
|
22
|
+
*/
|
|
23
|
+
validate?: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Scan for kits in a repository.
|
|
27
|
+
*
|
|
28
|
+
* Discovers kits by:
|
|
29
|
+
* 1. Looking for kits.json at repository root
|
|
30
|
+
* 2. Loading kit manifests from paths specified in kits.json
|
|
31
|
+
* 3. Handling single-kit repositories (no kits/ directory)
|
|
32
|
+
*
|
|
33
|
+
* @param localPath - Path to the repository root
|
|
34
|
+
* @param source - Original source string for reference
|
|
35
|
+
* @param options - Scanner options
|
|
36
|
+
* @returns Kit discovery result with all discovered kits
|
|
37
|
+
*/
|
|
38
|
+
export declare function scanKits(localPath: string, source: string, _options?: KitScannerOptions): Promise<KitDiscoveryResult>;
|
|
39
|
+
/**
|
|
40
|
+
* Filter kits by name.
|
|
41
|
+
*
|
|
42
|
+
* @param result - Kit discovery result
|
|
43
|
+
* @param kitNames - Kit names to include (empty means all)
|
|
44
|
+
* @returns Filtered discovery result
|
|
45
|
+
*/
|
|
46
|
+
export declare function filterKitsByName(result: KitDiscoveryResult, kitNames: string[]): KitDiscoveryResult;
|
|
47
|
+
/**
|
|
48
|
+
* Get kit names that were not found.
|
|
49
|
+
*
|
|
50
|
+
* @param result - Kit discovery result
|
|
51
|
+
* @param requestedNames - Names that were requested
|
|
52
|
+
* @returns Names that were not found
|
|
53
|
+
*/
|
|
54
|
+
export declare function getMissingKitNames(result: KitDiscoveryResult, requestedNames: string[]): string[];
|
|
55
|
+
//# sourceMappingURL=kit-scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kit-scanner.d.ts","sourceRoot":"","sources":["../../src/discovery/kit-scanner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,KAAK,EACV,kBAAkB,EAKnB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;gBAE3B,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAU1D;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA0ID;;;;;;;;;;;;GAYG;AACH,wBAAsB,QAAQ,CAC5B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,iBAAsB,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAoI7B;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,MAAM,EAAE,GACjB,kBAAkB,CAcpB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,kBAAkB,EAC1B,cAAc,EAAE,MAAM,EAAE,GACvB,MAAM,EAAE,CAGV"}
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kit scanner for discovering kits in a repository.
|
|
3
|
+
*
|
|
4
|
+
* Loads and validates kits.json, primitives.json, and kit manifests.
|
|
5
|
+
*/
|
|
6
|
+
import fs from "node:fs/promises";
|
|
7
|
+
import path from "node:path";
|
|
8
|
+
/**
|
|
9
|
+
* Error thrown during kit scanning.
|
|
10
|
+
*/
|
|
11
|
+
export class KitScanError extends Error {
|
|
12
|
+
scanPath;
|
|
13
|
+
scanCause;
|
|
14
|
+
constructor(message, path, cause) {
|
|
15
|
+
super(message);
|
|
16
|
+
this.name = "KitScanError";
|
|
17
|
+
if (path) {
|
|
18
|
+
this.scanPath = path;
|
|
19
|
+
}
|
|
20
|
+
if (cause) {
|
|
21
|
+
this.scanCause = cause;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Check if a file exists.
|
|
27
|
+
*/
|
|
28
|
+
async function fileExists(filePath) {
|
|
29
|
+
try {
|
|
30
|
+
await fs.access(filePath);
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Read and parse a JSON file.
|
|
39
|
+
*/
|
|
40
|
+
async function readJsonFile(filePath) {
|
|
41
|
+
const content = await fs.readFile(filePath, "utf-8");
|
|
42
|
+
return JSON.parse(content);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Count primitives in a kit manifest.
|
|
46
|
+
*/
|
|
47
|
+
function countPrimitives(manifest) {
|
|
48
|
+
return {
|
|
49
|
+
commands: manifest.primitives.commands?.length ?? 0,
|
|
50
|
+
skills: manifest.primitives.skills?.length ?? 0,
|
|
51
|
+
subagents: manifest.primitives.subagents?.length ?? 0,
|
|
52
|
+
mcp: manifest.primitives.mcp?.length ?? 0,
|
|
53
|
+
hooks: manifest.primitives.hooks?.length ?? 0,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Extract required primitives from a kit manifest.
|
|
58
|
+
*/
|
|
59
|
+
function extractRequiredPrimitives(manifest) {
|
|
60
|
+
return manifest.requires?.primitives ?? [];
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Infer repository metadata from directory structure.
|
|
64
|
+
*/
|
|
65
|
+
async function inferMetadata(localPath) {
|
|
66
|
+
// Try to read package.json for metadata
|
|
67
|
+
const packageJsonPath = path.join(localPath, "package.json");
|
|
68
|
+
if (await fileExists(packageJsonPath)) {
|
|
69
|
+
try {
|
|
70
|
+
const pkg = await readJsonFile(packageJsonPath);
|
|
71
|
+
const result = {
|
|
72
|
+
name: pkg.name ?? path.basename(localPath),
|
|
73
|
+
};
|
|
74
|
+
if (pkg.description) {
|
|
75
|
+
result.description = pkg.description;
|
|
76
|
+
}
|
|
77
|
+
if (pkg.version) {
|
|
78
|
+
result.version = pkg.version;
|
|
79
|
+
}
|
|
80
|
+
if (typeof pkg.author === "string") {
|
|
81
|
+
result.owner = { name: pkg.author };
|
|
82
|
+
}
|
|
83
|
+
else if (pkg.author) {
|
|
84
|
+
result.owner = { name: pkg.author.name };
|
|
85
|
+
}
|
|
86
|
+
return result;
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
// Ignore parse errors
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Fall back to directory name
|
|
93
|
+
return {
|
|
94
|
+
name: path.basename(localPath),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Load a kit manifest from a directory.
|
|
99
|
+
*/
|
|
100
|
+
async function loadKitManifest(kitPath, errors) {
|
|
101
|
+
const manifestPath = path.join(kitPath, "kit.json");
|
|
102
|
+
if (!(await fileExists(manifestPath))) {
|
|
103
|
+
errors.push({
|
|
104
|
+
type: "missing-file",
|
|
105
|
+
path: manifestPath,
|
|
106
|
+
message: `Kit manifest not found: ${manifestPath}`,
|
|
107
|
+
});
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
try {
|
|
111
|
+
const manifest = await readJsonFile(manifestPath);
|
|
112
|
+
// Basic validation
|
|
113
|
+
if (!manifest.name) {
|
|
114
|
+
errors.push({
|
|
115
|
+
type: "validation-error",
|
|
116
|
+
path: manifestPath,
|
|
117
|
+
message: "Kit manifest missing required field: name",
|
|
118
|
+
});
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
if (!manifest.version) {
|
|
122
|
+
errors.push({
|
|
123
|
+
type: "validation-error",
|
|
124
|
+
path: manifestPath,
|
|
125
|
+
message: "Kit manifest missing required field: version",
|
|
126
|
+
});
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
return manifest;
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
errors.push({
|
|
133
|
+
type: "parse-error",
|
|
134
|
+
path: manifestPath,
|
|
135
|
+
message: `Failed to parse kit manifest: ${error instanceof Error ? error.message : String(error)}`,
|
|
136
|
+
});
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Scan for kits in a repository.
|
|
142
|
+
*
|
|
143
|
+
* Discovers kits by:
|
|
144
|
+
* 1. Looking for kits.json at repository root
|
|
145
|
+
* 2. Loading kit manifests from paths specified in kits.json
|
|
146
|
+
* 3. Handling single-kit repositories (no kits/ directory)
|
|
147
|
+
*
|
|
148
|
+
* @param localPath - Path to the repository root
|
|
149
|
+
* @param source - Original source string for reference
|
|
150
|
+
* @param options - Scanner options
|
|
151
|
+
* @returns Kit discovery result with all discovered kits
|
|
152
|
+
*/
|
|
153
|
+
export async function scanKits(localPath, source, _options = {}) {
|
|
154
|
+
const errors = [];
|
|
155
|
+
const kits = [];
|
|
156
|
+
let registry;
|
|
157
|
+
let primitivesRegistry;
|
|
158
|
+
let repository;
|
|
159
|
+
// Try to load kits.json
|
|
160
|
+
const registryPath = path.join(localPath, "kits.json");
|
|
161
|
+
if (await fileExists(registryPath)) {
|
|
162
|
+
try {
|
|
163
|
+
registry = await readJsonFile(registryPath);
|
|
164
|
+
repository = {
|
|
165
|
+
name: registry.name,
|
|
166
|
+
};
|
|
167
|
+
if (registry.description) {
|
|
168
|
+
repository.description = registry.description;
|
|
169
|
+
}
|
|
170
|
+
if (registry.version) {
|
|
171
|
+
repository.version = registry.version;
|
|
172
|
+
}
|
|
173
|
+
if (registry.owner) {
|
|
174
|
+
repository.owner = registry.owner;
|
|
175
|
+
}
|
|
176
|
+
// Load kits from registry
|
|
177
|
+
for (const entry of registry.kits) {
|
|
178
|
+
const kitPath = path.join(localPath, entry.path);
|
|
179
|
+
const manifest = await loadKitManifest(kitPath, errors);
|
|
180
|
+
if (manifest) {
|
|
181
|
+
kits.push({
|
|
182
|
+
name: manifest.name,
|
|
183
|
+
path: entry.path,
|
|
184
|
+
manifest,
|
|
185
|
+
requiredPrimitives: extractRequiredPrimitives(manifest),
|
|
186
|
+
primitiveCounts: countPrimitives(manifest),
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
errors.push({
|
|
193
|
+
type: "parse-error",
|
|
194
|
+
path: registryPath,
|
|
195
|
+
message: `Failed to parse kits.json: ${error instanceof Error ? error.message : String(error)}`,
|
|
196
|
+
});
|
|
197
|
+
repository = await inferMetadata(localPath);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
// No kits.json - try to find kits
|
|
202
|
+
repository = await inferMetadata(localPath);
|
|
203
|
+
// Check for kits/ directory
|
|
204
|
+
const kitsDir = path.join(localPath, "kits");
|
|
205
|
+
if (await fileExists(kitsDir)) {
|
|
206
|
+
try {
|
|
207
|
+
const entries = await fs.readdir(kitsDir, { withFileTypes: true });
|
|
208
|
+
for (const entry of entries) {
|
|
209
|
+
if (entry.isDirectory()) {
|
|
210
|
+
const kitPath = path.join(kitsDir, entry.name);
|
|
211
|
+
const manifest = await loadKitManifest(kitPath, errors);
|
|
212
|
+
if (manifest) {
|
|
213
|
+
kits.push({
|
|
214
|
+
name: manifest.name,
|
|
215
|
+
path: `./kits/${entry.name}`,
|
|
216
|
+
manifest,
|
|
217
|
+
requiredPrimitives: extractRequiredPrimitives(manifest),
|
|
218
|
+
primitiveCounts: countPrimitives(manifest),
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
errors.push({
|
|
226
|
+
type: "parse-error",
|
|
227
|
+
path: kitsDir,
|
|
228
|
+
message: `Failed to scan kits directory: ${error instanceof Error ? error.message : String(error)}`,
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
// Check for single-kit repository (kit.json at root)
|
|
234
|
+
const manifest = await loadKitManifest(localPath, errors);
|
|
235
|
+
if (manifest) {
|
|
236
|
+
kits.push({
|
|
237
|
+
name: manifest.name,
|
|
238
|
+
path: ".",
|
|
239
|
+
manifest,
|
|
240
|
+
requiredPrimitives: extractRequiredPrimitives(manifest),
|
|
241
|
+
primitiveCounts: countPrimitives(manifest),
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
// Try to load primitives.json
|
|
247
|
+
const primitivesPath = path.join(localPath, "primitives.json");
|
|
248
|
+
if (await fileExists(primitivesPath)) {
|
|
249
|
+
try {
|
|
250
|
+
primitivesRegistry =
|
|
251
|
+
await readJsonFile(primitivesPath);
|
|
252
|
+
}
|
|
253
|
+
catch (error) {
|
|
254
|
+
errors.push({
|
|
255
|
+
type: "parse-error",
|
|
256
|
+
path: primitivesPath,
|
|
257
|
+
message: `Failed to parse primitives.json: ${error instanceof Error ? error.message : String(error)}`,
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
const result = {
|
|
262
|
+
source,
|
|
263
|
+
localPath,
|
|
264
|
+
repository,
|
|
265
|
+
kits,
|
|
266
|
+
errors,
|
|
267
|
+
};
|
|
268
|
+
if (registry) {
|
|
269
|
+
result.registry = registry;
|
|
270
|
+
}
|
|
271
|
+
if (primitivesRegistry) {
|
|
272
|
+
result.primitivesRegistry = primitivesRegistry;
|
|
273
|
+
}
|
|
274
|
+
return result;
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Filter kits by name.
|
|
278
|
+
*
|
|
279
|
+
* @param result - Kit discovery result
|
|
280
|
+
* @param kitNames - Kit names to include (empty means all)
|
|
281
|
+
* @returns Filtered discovery result
|
|
282
|
+
*/
|
|
283
|
+
export function filterKitsByName(result, kitNames) {
|
|
284
|
+
if (kitNames.length === 0) {
|
|
285
|
+
return result;
|
|
286
|
+
}
|
|
287
|
+
const nameSet = new Set(kitNames.map((n) => n.toLowerCase()));
|
|
288
|
+
const filteredKits = result.kits.filter((kit) => nameSet.has(kit.name.toLowerCase()));
|
|
289
|
+
return {
|
|
290
|
+
...result,
|
|
291
|
+
kits: filteredKits,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Get kit names that were not found.
|
|
296
|
+
*
|
|
297
|
+
* @param result - Kit discovery result
|
|
298
|
+
* @param requestedNames - Names that were requested
|
|
299
|
+
* @returns Names that were not found
|
|
300
|
+
*/
|
|
301
|
+
export function getMissingKitNames(result, requestedNames) {
|
|
302
|
+
const foundNames = new Set(result.kits.map((kit) => kit.name.toLowerCase()));
|
|
303
|
+
return requestedNames.filter((name) => !foundNames.has(name.toLowerCase()));
|
|
304
|
+
}
|
|
305
|
+
//# sourceMappingURL=kit-scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kit-scanner.js","sourceRoot":"","sources":["../../src/discovery/kit-scanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local fetcher for handling local path sources.
|
|
3
|
+
*
|
|
4
|
+
* Validates that local paths exist and are accessible.
|
|
5
|
+
*/
|
|
6
|
+
import type { SourceFetcher, FetchResult } from "./types.js";
|
|
7
|
+
/**
|
|
8
|
+
* Error thrown when local path operations fail.
|
|
9
|
+
*/
|
|
10
|
+
export declare class LocalFetchError extends Error {
|
|
11
|
+
readonly localSource: string;
|
|
12
|
+
readonly localCause?: Error | undefined;
|
|
13
|
+
constructor(message: string, source: string, cause?: Error);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Local fetcher implementation for local path sources.
|
|
17
|
+
*/
|
|
18
|
+
export declare class LocalFetcher implements SourceFetcher {
|
|
19
|
+
/**
|
|
20
|
+
* Check if this fetcher can handle the given source.
|
|
21
|
+
*
|
|
22
|
+
* Handles local paths: ./path, ../path, /absolute/path, ~/path
|
|
23
|
+
*/
|
|
24
|
+
canHandle(source: string): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Fetch (validate) a local path.
|
|
27
|
+
*
|
|
28
|
+
* @param source - Local path (e.g., "./my-kits" or "/absolute/path")
|
|
29
|
+
* @returns Fetch result with local path (no cleanup needed)
|
|
30
|
+
* @throws LocalFetchError if the path does not exist or is not accessible
|
|
31
|
+
*/
|
|
32
|
+
fetch(source: string): Promise<FetchResult>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Create a local fetcher.
|
|
36
|
+
*/
|
|
37
|
+
export declare function createLocalFetcher(): LocalFetcher;
|
|
38
|
+
//# sourceMappingURL=local-fetcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-fetcher.d.ts","sourceRoot":"","sources":["../../src/discovery/local-fetcher.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAe,MAAM,YAAY,CAAC;AAG1E;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;gBAE5B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAQ3D;AAED;;GAEG;AACH,qBAAa,YAAa,YAAW,aAAa;IAChD;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IASlC;;;;;;OAMG;IACG,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CA0ElD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CAEjD"}
|