@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,368 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Upgrade executor module.
|
|
3
|
+
*
|
|
4
|
+
* Handles the execution of primitive upgrades including backup, installation,
|
|
5
|
+
* manifest updates, and rollback on failure.
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from "fs/promises";
|
|
8
|
+
import { writeManifest } from "../manifest/write.js";
|
|
9
|
+
import { expandPath } from "../manifest/utils.js";
|
|
10
|
+
/**
|
|
11
|
+
* Execute upgrades for selected primitives.
|
|
12
|
+
*
|
|
13
|
+
* @param upgrades - Array of upgrade checks to apply
|
|
14
|
+
* @param adapters - Map of adapter instances by harness name
|
|
15
|
+
* @param registry - Primitives registry loader
|
|
16
|
+
* @param manifest - Current installation manifest
|
|
17
|
+
* @param options - Upgrade options
|
|
18
|
+
* @returns Upgrade execution result
|
|
19
|
+
*/
|
|
20
|
+
export async function executeUpgrades(upgrades, adapters, registry, manifest, options = {}) {
|
|
21
|
+
const upgraded = [];
|
|
22
|
+
const failed = [];
|
|
23
|
+
const backups = [];
|
|
24
|
+
const allBackupPaths = [];
|
|
25
|
+
try {
|
|
26
|
+
// Group upgrades by harness and kit for efficient processing
|
|
27
|
+
const byHarnessAndKit = groupUpgradesByHarnessAndKit(upgrades);
|
|
28
|
+
for (const [harness, kitMap] of byHarnessAndKit) {
|
|
29
|
+
const adapter = adapters.get(harness);
|
|
30
|
+
if (!adapter) {
|
|
31
|
+
// Record failures for unavailable adapter
|
|
32
|
+
for (const primitiveUpgrades of kitMap.values()) {
|
|
33
|
+
for (const upgrade of primitiveUpgrades) {
|
|
34
|
+
failed.push({
|
|
35
|
+
primitive: upgrade.primitive,
|
|
36
|
+
type: upgrade.type,
|
|
37
|
+
harness: upgrade.harness,
|
|
38
|
+
kit: upgrade.kit,
|
|
39
|
+
currentVersion: upgrade.currentVersion,
|
|
40
|
+
newVersion: upgrade.availableVersion,
|
|
41
|
+
success: false,
|
|
42
|
+
error: `Adapter for ${harness} not found`,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
for (const [kitName, primitiveUpgrades] of kitMap) {
|
|
49
|
+
const kitEntry = manifest.harnesses[harness]?.kits[kitName];
|
|
50
|
+
if (!kitEntry) {
|
|
51
|
+
// Kit not found in manifest
|
|
52
|
+
for (const upgrade of primitiveUpgrades) {
|
|
53
|
+
failed.push({
|
|
54
|
+
primitive: upgrade.primitive,
|
|
55
|
+
type: upgrade.type,
|
|
56
|
+
harness: upgrade.harness,
|
|
57
|
+
kit: upgrade.kit,
|
|
58
|
+
currentVersion: upgrade.currentVersion,
|
|
59
|
+
newVersion: upgrade.availableVersion,
|
|
60
|
+
success: false,
|
|
61
|
+
error: `Kit ${kitName} not found in manifest for ${harness}`,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
// Process each primitive upgrade for this kit
|
|
67
|
+
for (const upgrade of primitiveUpgrades) {
|
|
68
|
+
const result = await upgradePrimitive(upgrade, adapter, registry, kitEntry, backups, options);
|
|
69
|
+
allBackupPaths.push(...(result.backupPath ? [result.backupPath] : []));
|
|
70
|
+
if (result.success) {
|
|
71
|
+
upgraded.push(result);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
failed.push(result);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// Update manifest with new versions
|
|
80
|
+
if (!options.dryRun && upgraded.length > 0) {
|
|
81
|
+
await updateManifestVersions(manifest, upgraded);
|
|
82
|
+
await writeManifest(manifest);
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
success: failed.length === 0,
|
|
86
|
+
upgraded,
|
|
87
|
+
failed,
|
|
88
|
+
backupPaths: allBackupPaths,
|
|
89
|
+
manifestUpdated: upgraded.length > 0 && !options.dryRun,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
// Attempt rollback on failure
|
|
94
|
+
if (!options.dryRun && backups.length > 0) {
|
|
95
|
+
await rollbackUpgrades(backups);
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
success: false,
|
|
99
|
+
upgraded,
|
|
100
|
+
failed,
|
|
101
|
+
backupPaths: allBackupPaths,
|
|
102
|
+
manifestUpdated: false,
|
|
103
|
+
error: error instanceof Error ? error.message : String(error),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Upgrade a single primitive.
|
|
109
|
+
*/
|
|
110
|
+
async function upgradePrimitive(upgrade, adapter, registry, kitEntry, backups, options) {
|
|
111
|
+
const { primitive, type, harness, kit, currentVersion, availableVersion } = upgrade;
|
|
112
|
+
// Find the installed primitive in the kit
|
|
113
|
+
const installed = kitEntry.primitives.find((p) => p.name === primitive && p.type === type);
|
|
114
|
+
if (!installed) {
|
|
115
|
+
return {
|
|
116
|
+
primitive,
|
|
117
|
+
type,
|
|
118
|
+
harness,
|
|
119
|
+
kit,
|
|
120
|
+
currentVersion,
|
|
121
|
+
newVersion: availableVersion,
|
|
122
|
+
success: false,
|
|
123
|
+
error: `Primitive ${primitive} not found in installed kit`,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
try {
|
|
127
|
+
// Phase 1: Backup existing file
|
|
128
|
+
options.onProgress?.({
|
|
129
|
+
phase: "backup",
|
|
130
|
+
harness,
|
|
131
|
+
kit,
|
|
132
|
+
primitive,
|
|
133
|
+
currentVersion,
|
|
134
|
+
newVersion: availableVersion,
|
|
135
|
+
operation: "backup",
|
|
136
|
+
destination: installed.installedPath,
|
|
137
|
+
});
|
|
138
|
+
let backupPath;
|
|
139
|
+
if (!options.dryRun) {
|
|
140
|
+
backupPath = await backupPrimitive(installed.installedPath);
|
|
141
|
+
backups.push({
|
|
142
|
+
originalPath: installed.installedPath,
|
|
143
|
+
backupPath,
|
|
144
|
+
harness,
|
|
145
|
+
primitive,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
// Phase 2: Resolve new primitive version from registry
|
|
149
|
+
const resolvedPrimitive = await resolvePrimitiveVersion(registry, type, primitive, availableVersion);
|
|
150
|
+
if (!resolvedPrimitive) {
|
|
151
|
+
return {
|
|
152
|
+
primitive,
|
|
153
|
+
type,
|
|
154
|
+
harness,
|
|
155
|
+
kit,
|
|
156
|
+
currentVersion,
|
|
157
|
+
newVersion: availableVersion,
|
|
158
|
+
success: false,
|
|
159
|
+
backupPath,
|
|
160
|
+
error: `Failed to resolve ${primitive}@${availableVersion} from registry`,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
// Phase 3: Install new version
|
|
164
|
+
options.onProgress?.({
|
|
165
|
+
phase: "install",
|
|
166
|
+
harness,
|
|
167
|
+
kit,
|
|
168
|
+
primitive,
|
|
169
|
+
currentVersion,
|
|
170
|
+
newVersion: availableVersion,
|
|
171
|
+
operation: "install",
|
|
172
|
+
destination: installed.installedPath,
|
|
173
|
+
});
|
|
174
|
+
if (!options.dryRun) {
|
|
175
|
+
// Install the new primitive version
|
|
176
|
+
// We need to create a minimal kit structure for the adapter
|
|
177
|
+
const temporaryKit = {
|
|
178
|
+
schemaVersion: "1.0.0",
|
|
179
|
+
name: kit,
|
|
180
|
+
version: kitEntry.version,
|
|
181
|
+
products: [],
|
|
182
|
+
requires: {
|
|
183
|
+
primitives: [type],
|
|
184
|
+
},
|
|
185
|
+
primitives: {
|
|
186
|
+
[type]: [
|
|
187
|
+
{
|
|
188
|
+
name: primitive,
|
|
189
|
+
entrypoint: resolvedPrimitive.sourcePath,
|
|
190
|
+
},
|
|
191
|
+
],
|
|
192
|
+
},
|
|
193
|
+
};
|
|
194
|
+
// Install using adapter (this will overwrite the existing file)
|
|
195
|
+
const installResult = await adapter.install(temporaryKit, [resolvedPrimitive], {
|
|
196
|
+
onProgress: (progress) => {
|
|
197
|
+
options.onProgress?.({
|
|
198
|
+
phase: "install",
|
|
199
|
+
harness,
|
|
200
|
+
kit,
|
|
201
|
+
primitive,
|
|
202
|
+
currentVersion,
|
|
203
|
+
newVersion: availableVersion,
|
|
204
|
+
operation: progress.operation,
|
|
205
|
+
destination: progress.destination,
|
|
206
|
+
});
|
|
207
|
+
},
|
|
208
|
+
});
|
|
209
|
+
if (!installResult.success) {
|
|
210
|
+
return {
|
|
211
|
+
primitive,
|
|
212
|
+
type,
|
|
213
|
+
harness,
|
|
214
|
+
kit,
|
|
215
|
+
currentVersion,
|
|
216
|
+
newVersion: availableVersion,
|
|
217
|
+
success: false,
|
|
218
|
+
backupPath,
|
|
219
|
+
error: installResult.error || "Installation failed",
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return {
|
|
224
|
+
primitive,
|
|
225
|
+
type,
|
|
226
|
+
harness,
|
|
227
|
+
kit,
|
|
228
|
+
currentVersion,
|
|
229
|
+
newVersion: availableVersion,
|
|
230
|
+
success: true,
|
|
231
|
+
backupPath,
|
|
232
|
+
installedPath: installed.installedPath,
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
return {
|
|
237
|
+
primitive,
|
|
238
|
+
type,
|
|
239
|
+
harness,
|
|
240
|
+
kit,
|
|
241
|
+
currentVersion,
|
|
242
|
+
newVersion: availableVersion,
|
|
243
|
+
success: false,
|
|
244
|
+
error: error instanceof Error ? error.message : String(error),
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Backup a primitive file or directory.
|
|
250
|
+
*
|
|
251
|
+
* @param filePath - Path to the file or directory to backup
|
|
252
|
+
* @returns Path to the backup
|
|
253
|
+
*/
|
|
254
|
+
async function backupPrimitive(filePath) {
|
|
255
|
+
const expanded = expandPath(filePath);
|
|
256
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
|
|
257
|
+
const backupPath = `${expanded}.backup-${timestamp}`;
|
|
258
|
+
const stats = await fs.stat(expanded);
|
|
259
|
+
if (stats.isDirectory()) {
|
|
260
|
+
// Backup directory recursively
|
|
261
|
+
await fs.cp(expanded, backupPath, { recursive: true });
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
// Backup single file
|
|
265
|
+
await fs.copyFile(expanded, backupPath);
|
|
266
|
+
}
|
|
267
|
+
return backupPath;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Resolve a primitive version from the registry.
|
|
271
|
+
*/
|
|
272
|
+
async function resolvePrimitiveVersion(registry, type, name, version) {
|
|
273
|
+
const versions = await registry.getVersions(type, name);
|
|
274
|
+
const versionEntry = versions.find((v) => v.version === version);
|
|
275
|
+
if (!versionEntry) {
|
|
276
|
+
return null;
|
|
277
|
+
}
|
|
278
|
+
return {
|
|
279
|
+
name,
|
|
280
|
+
type,
|
|
281
|
+
resolvedVersion: version,
|
|
282
|
+
sourcePath: versionEntry.path,
|
|
283
|
+
isInline: false,
|
|
284
|
+
metadata: {},
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Update manifest with new primitive versions.
|
|
289
|
+
*/
|
|
290
|
+
async function updateManifestVersions(manifest, upgraded) {
|
|
291
|
+
for (const result of upgraded) {
|
|
292
|
+
const harnessEntry = manifest.harnesses[result.harness];
|
|
293
|
+
if (!harnessEntry)
|
|
294
|
+
continue;
|
|
295
|
+
const kitEntry = harnessEntry.kits[result.kit];
|
|
296
|
+
if (!kitEntry)
|
|
297
|
+
continue;
|
|
298
|
+
// Find and update the primitive version
|
|
299
|
+
const primitive = kitEntry.primitives.find((p) => p.name === result.primitive && p.type === result.type);
|
|
300
|
+
if (primitive && primitive.version) {
|
|
301
|
+
primitive.version = result.newVersion;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
manifest.lastUpdated = new Date().toISOString();
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Rollback upgrades by restoring from backups.
|
|
308
|
+
*/
|
|
309
|
+
async function rollbackUpgrades(backups) {
|
|
310
|
+
// Rollback in reverse order
|
|
311
|
+
for (const backup of backups.reverse()) {
|
|
312
|
+
try {
|
|
313
|
+
const expanded = expandPath(backup.originalPath);
|
|
314
|
+
const backupExpanded = expandPath(backup.backupPath);
|
|
315
|
+
// Check if backup exists
|
|
316
|
+
const backupExists = await fs
|
|
317
|
+
.access(backupExpanded)
|
|
318
|
+
.then(() => true)
|
|
319
|
+
.catch(() => false);
|
|
320
|
+
if (!backupExists) {
|
|
321
|
+
continue;
|
|
322
|
+
}
|
|
323
|
+
// Remove the new file/directory
|
|
324
|
+
const stats = await fs.stat(expanded).catch(() => null);
|
|
325
|
+
if (stats) {
|
|
326
|
+
if (stats.isDirectory()) {
|
|
327
|
+
await fs.rm(expanded, { recursive: true, force: true });
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
await fs.unlink(expanded);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
// Restore from backup
|
|
334
|
+
const backupStats = await fs.stat(backupExpanded);
|
|
335
|
+
if (backupStats.isDirectory()) {
|
|
336
|
+
await fs.cp(backupExpanded, expanded, { recursive: true });
|
|
337
|
+
}
|
|
338
|
+
else {
|
|
339
|
+
await fs.copyFile(backupExpanded, expanded);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
catch (error) {
|
|
343
|
+
// Log but continue rollback
|
|
344
|
+
console.error(`Failed to rollback ${backup.originalPath}: ${error}`);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Group upgrades by harness and kit for efficient processing.
|
|
350
|
+
*/
|
|
351
|
+
function groupUpgradesByHarnessAndKit(upgrades) {
|
|
352
|
+
const grouped = new Map();
|
|
353
|
+
for (const upgrade of upgrades) {
|
|
354
|
+
let harnessMap = grouped.get(upgrade.harness);
|
|
355
|
+
if (!harnessMap) {
|
|
356
|
+
harnessMap = new Map();
|
|
357
|
+
grouped.set(upgrade.harness, harnessMap);
|
|
358
|
+
}
|
|
359
|
+
let kitUpgrades = harnessMap.get(upgrade.kit);
|
|
360
|
+
if (!kitUpgrades) {
|
|
361
|
+
kitUpgrades = [];
|
|
362
|
+
harnessMap.set(upgrade.kit, kitUpgrades);
|
|
363
|
+
}
|
|
364
|
+
kitUpgrades.push(upgrade);
|
|
365
|
+
}
|
|
366
|
+
return grouped;
|
|
367
|
+
}
|
|
368
|
+
//# sourceMappingURL=upgrade-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade-executor.js","sourceRoot":"","sources":["../../src/core/upgrade-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fetcher registry for managing source fetchers.
|
|
3
|
+
*
|
|
4
|
+
* Provides a unified interface for fetching from different source types.
|
|
5
|
+
*/
|
|
6
|
+
import type { SourceFetcher, FetchResult } from "./types.js";
|
|
7
|
+
import { type GitFetcherOptions } from "./git-fetcher.js";
|
|
8
|
+
/**
|
|
9
|
+
* Error thrown when no fetcher can handle a source.
|
|
10
|
+
*/
|
|
11
|
+
export declare class NoFetcherError extends Error {
|
|
12
|
+
readonly source: string;
|
|
13
|
+
constructor(message: string, source: string);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Options for the fetcher registry.
|
|
17
|
+
*/
|
|
18
|
+
export interface FetcherRegistryOptions {
|
|
19
|
+
/**
|
|
20
|
+
* Options for the git fetcher.
|
|
21
|
+
*/
|
|
22
|
+
git?: GitFetcherOptions;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Registry of source fetchers.
|
|
26
|
+
*
|
|
27
|
+
* Manages multiple fetchers and routes requests to the appropriate one.
|
|
28
|
+
*/
|
|
29
|
+
export declare class FetcherRegistry {
|
|
30
|
+
private readonly fetchers;
|
|
31
|
+
constructor(options?: FetcherRegistryOptions);
|
|
32
|
+
/**
|
|
33
|
+
* Register a custom fetcher.
|
|
34
|
+
*
|
|
35
|
+
* @param fetcher - The fetcher to register
|
|
36
|
+
* @param priority - If true, adds to front of list (checked first)
|
|
37
|
+
*/
|
|
38
|
+
register(fetcher: SourceFetcher, priority?: boolean): void;
|
|
39
|
+
/**
|
|
40
|
+
* Find a fetcher that can handle the given source.
|
|
41
|
+
*
|
|
42
|
+
* @param source - The source string to check
|
|
43
|
+
* @returns The first fetcher that can handle the source, or undefined
|
|
44
|
+
*/
|
|
45
|
+
findFetcher(source: string): SourceFetcher | undefined;
|
|
46
|
+
/**
|
|
47
|
+
* Fetch a source using the appropriate fetcher.
|
|
48
|
+
*
|
|
49
|
+
* @param source - The source to fetch
|
|
50
|
+
* @returns Fetch result with local path and optional cleanup
|
|
51
|
+
* @throws NoFetcherError if no fetcher can handle the source
|
|
52
|
+
*/
|
|
53
|
+
fetch(source: string): Promise<FetchResult>;
|
|
54
|
+
/**
|
|
55
|
+
* Check if any fetcher can handle the given source.
|
|
56
|
+
*
|
|
57
|
+
* @param source - The source string to check
|
|
58
|
+
* @returns True if a fetcher can handle the source
|
|
59
|
+
*/
|
|
60
|
+
canHandle(source: string): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Get all registered fetchers.
|
|
63
|
+
*/
|
|
64
|
+
getFetchers(): readonly SourceFetcher[];
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get the default fetcher registry.
|
|
68
|
+
*
|
|
69
|
+
* Creates a singleton instance with default configuration.
|
|
70
|
+
*/
|
|
71
|
+
export declare function getDefaultFetcherRegistry(): FetcherRegistry;
|
|
72
|
+
/**
|
|
73
|
+
* Create a new fetcher registry with custom options.
|
|
74
|
+
*
|
|
75
|
+
* @param options - Registry configuration options
|
|
76
|
+
*/
|
|
77
|
+
export declare function createFetcherRegistry(options?: FetcherRegistryOptions): FetcherRegistry;
|
|
78
|
+
/**
|
|
79
|
+
* Fetch a source using the default registry.
|
|
80
|
+
*
|
|
81
|
+
* Convenience function for simple use cases.
|
|
82
|
+
*
|
|
83
|
+
* @param source - The source to fetch
|
|
84
|
+
* @returns Fetch result with local path and optional cleanup
|
|
85
|
+
*/
|
|
86
|
+
export declare function fetchSource(source: string): Promise<FetchResult>;
|
|
87
|
+
//# sourceMappingURL=fetcher-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetcher-registry.d.ts","sourceRoot":"","sources":["../../src/discovery/fetcher-registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAG5E;;GAEG;AACH,qBAAa,cAAe,SAAQ,KAAK;aAGrB,MAAM,EAAE,MAAM;gBAD9B,OAAO,EAAE,MAAM,EACC,MAAM,EAAE,MAAM;CAKjC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,GAAG,CAAC,EAAE,iBAAiB,CAAC;CACzB;AAED;;;;GAIG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;gBAEpC,OAAO,GAAE,sBAA2B;IAQhD;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,aAAa,EAAE,QAAQ,UAAQ,GAAG,IAAI;IAQxD;;;;;OAKG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAItD;;;;;;OAMG;IACG,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAcjD;;;;;OAKG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIlC;;OAEG;IACH,WAAW,IAAI,SAAS,aAAa,EAAE;CAGxC;AAKD;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,eAAe,CAK3D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,CAAC,EAAE,sBAAsB,GAC/B,eAAe,CAEjB;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAEtE"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fetcher registry for managing source fetchers.
|
|
3
|
+
*
|
|
4
|
+
* Provides a unified interface for fetching from different source types.
|
|
5
|
+
*/
|
|
6
|
+
import { createGitFetcher } from "./git-fetcher.js";
|
|
7
|
+
import { createLocalFetcher } from "./local-fetcher.js";
|
|
8
|
+
/**
|
|
9
|
+
* Error thrown when no fetcher can handle a source.
|
|
10
|
+
*/
|
|
11
|
+
export class NoFetcherError extends Error {
|
|
12
|
+
source;
|
|
13
|
+
constructor(message, source) {
|
|
14
|
+
super(message);
|
|
15
|
+
this.source = source;
|
|
16
|
+
this.name = "NoFetcherError";
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Registry of source fetchers.
|
|
21
|
+
*
|
|
22
|
+
* Manages multiple fetchers and routes requests to the appropriate one.
|
|
23
|
+
*/
|
|
24
|
+
export class FetcherRegistry {
|
|
25
|
+
fetchers = [];
|
|
26
|
+
constructor(options = {}) {
|
|
27
|
+
// Register default fetchers in order of priority
|
|
28
|
+
// Local fetcher first (faster check, no network)
|
|
29
|
+
this.fetchers.push(createLocalFetcher());
|
|
30
|
+
// Git fetcher for GitHub sources
|
|
31
|
+
this.fetchers.push(createGitFetcher(options.git));
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Register a custom fetcher.
|
|
35
|
+
*
|
|
36
|
+
* @param fetcher - The fetcher to register
|
|
37
|
+
* @param priority - If true, adds to front of list (checked first)
|
|
38
|
+
*/
|
|
39
|
+
register(fetcher, priority = false) {
|
|
40
|
+
if (priority) {
|
|
41
|
+
this.fetchers.unshift(fetcher);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
this.fetchers.push(fetcher);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Find a fetcher that can handle the given source.
|
|
49
|
+
*
|
|
50
|
+
* @param source - The source string to check
|
|
51
|
+
* @returns The first fetcher that can handle the source, or undefined
|
|
52
|
+
*/
|
|
53
|
+
findFetcher(source) {
|
|
54
|
+
return this.fetchers.find((fetcher) => fetcher.canHandle(source));
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Fetch a source using the appropriate fetcher.
|
|
58
|
+
*
|
|
59
|
+
* @param source - The source to fetch
|
|
60
|
+
* @returns Fetch result with local path and optional cleanup
|
|
61
|
+
* @throws NoFetcherError if no fetcher can handle the source
|
|
62
|
+
*/
|
|
63
|
+
async fetch(source) {
|
|
64
|
+
const fetcher = this.findFetcher(source);
|
|
65
|
+
if (!fetcher) {
|
|
66
|
+
throw new NoFetcherError(`No fetcher available for source: ${source}. ` +
|
|
67
|
+
"Supported formats: GitHub shorthand (org/repo) or local paths (./path).", source);
|
|
68
|
+
}
|
|
69
|
+
return fetcher.fetch(source);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Check if any fetcher can handle the given source.
|
|
73
|
+
*
|
|
74
|
+
* @param source - The source string to check
|
|
75
|
+
* @returns True if a fetcher can handle the source
|
|
76
|
+
*/
|
|
77
|
+
canHandle(source) {
|
|
78
|
+
return this.findFetcher(source) !== undefined;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Get all registered fetchers.
|
|
82
|
+
*/
|
|
83
|
+
getFetchers() {
|
|
84
|
+
return this.fetchers;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Default registry instance
|
|
88
|
+
let defaultRegistry;
|
|
89
|
+
/**
|
|
90
|
+
* Get the default fetcher registry.
|
|
91
|
+
*
|
|
92
|
+
* Creates a singleton instance with default configuration.
|
|
93
|
+
*/
|
|
94
|
+
export function getDefaultFetcherRegistry() {
|
|
95
|
+
if (!defaultRegistry) {
|
|
96
|
+
defaultRegistry = new FetcherRegistry();
|
|
97
|
+
}
|
|
98
|
+
return defaultRegistry;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Create a new fetcher registry with custom options.
|
|
102
|
+
*
|
|
103
|
+
* @param options - Registry configuration options
|
|
104
|
+
*/
|
|
105
|
+
export function createFetcherRegistry(options) {
|
|
106
|
+
return new FetcherRegistry(options);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Fetch a source using the default registry.
|
|
110
|
+
*
|
|
111
|
+
* Convenience function for simple use cases.
|
|
112
|
+
*
|
|
113
|
+
* @param source - The source to fetch
|
|
114
|
+
* @returns Fetch result with local path and optional cleanup
|
|
115
|
+
*/
|
|
116
|
+
export async function fetchSource(source) {
|
|
117
|
+
return getDefaultFetcherRegistry().fetch(source);
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=fetcher-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetcher-registry.js","sourceRoot":"","sources":["../../src/discovery/fetcher-registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,gBAAgB,EAA0B,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IAGrB;IAFlB,YACE,OAAe,EACC,MAAc;QAE9B,KAAK,CAAC,OAAO,CAAC,CAAC;QAFC,WAAM,GAAN,MAAM,CAAQ;QAG9B,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAYD;;;;GAIG;AACH,MAAM,OAAO,eAAe;IACT,QAAQ,GAAoB,EAAE,CAAC;IAEhD,YAAY,UAAkC,EAAE;QAC9C,iDAAiD;QACjD,iDAAiD;QACjD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;QACzC,iCAAiC;QACjC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,OAAsB,EAAE,QAAQ,GAAG,KAAK;QAC/C,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,WAAW,CAAC,MAAc;QACxB,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;IACpE,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,KAAK,CAAC,MAAc;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAEzC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,cAAc,CACtB,oCAAoC,MAAM,IAAI;gBAC5C,yEAAyE,EAC3E,MAAM,CACP,CAAC;QACJ,CAAC;QAED,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED;;;;;OAKG;IACH,SAAS,CAAC,MAAc;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF;AAED,4BAA4B;AAC5B,IAAI,eAA4C,CAAC;AAEjD;;;;GAIG;AACH,MAAM,UAAU,yBAAyB;IACvC,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAC1C,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAgC;IAEhC,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAc;IAC9C,OAAO,yBAAyB,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
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 type { SourceFetcher, FetchResult } from "./types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Error thrown when git operations fail.
|
|
10
|
+
*/
|
|
11
|
+
export declare class GitFetchError extends Error {
|
|
12
|
+
readonly gitSource: string;
|
|
13
|
+
readonly gitCause?: Error | undefined;
|
|
14
|
+
constructor(message: string, source: string, cause?: Error);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Options for the git fetcher.
|
|
18
|
+
*/
|
|
19
|
+
export interface GitFetcherOptions {
|
|
20
|
+
/**
|
|
21
|
+
* Base directory for temporary clones.
|
|
22
|
+
* Defaults to system temp directory.
|
|
23
|
+
*/
|
|
24
|
+
tempDir?: string;
|
|
25
|
+
/**
|
|
26
|
+
* Timeout for git operations in milliseconds.
|
|
27
|
+
* Defaults to 60000 (60 seconds).
|
|
28
|
+
*/
|
|
29
|
+
timeout?: number;
|
|
30
|
+
/**
|
|
31
|
+
* Whether to perform a shallow clone (--depth 1).
|
|
32
|
+
* Defaults to true for faster clones.
|
|
33
|
+
*/
|
|
34
|
+
shallow?: boolean;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Git fetcher implementation for cloning GitHub repositories.
|
|
38
|
+
*/
|
|
39
|
+
export declare class GitFetcher implements SourceFetcher {
|
|
40
|
+
private readonly options;
|
|
41
|
+
constructor(options?: GitFetcherOptions);
|
|
42
|
+
/**
|
|
43
|
+
* Check if this fetcher can handle the given source.
|
|
44
|
+
*
|
|
45
|
+
* Handles GitHub shorthand format: org/repo or org/repo@ref
|
|
46
|
+
*/
|
|
47
|
+
canHandle(source: string): boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Fetch (clone) a GitHub repository to a local temporary directory.
|
|
50
|
+
*
|
|
51
|
+
* @param source - GitHub shorthand (e.g., "example-org/kits@v1.0.0")
|
|
52
|
+
* @returns Fetch result with local path and cleanup function
|
|
53
|
+
* @throws GitFetchError if cloning fails
|
|
54
|
+
*/
|
|
55
|
+
fetch(source: string): Promise<FetchResult>;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Create a git fetcher with default options.
|
|
59
|
+
*/
|
|
60
|
+
export declare function createGitFetcher(options?: GitFetcherOptions): GitFetcher;
|
|
61
|
+
//# sourceMappingURL=git-fetcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git-fetcher.d.ts","sourceRoot":"","sources":["../../src/discovery/git-fetcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAgB,MAAM,YAAY,CAAC;AAG3E;;GAEG;AACH,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;gBAE1B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAQ3D;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAQD;;GAEG;AACH,qBAAa,UAAW,YAAW,aAAa;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA8B;gBAE1C,OAAO,GAAE,iBAAsB;IAI3C;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IASlC;;;;;;OAMG;IACG,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CA0HlD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,UAAU,CAExE"}
|