@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,290 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode installation helpers.
|
|
3
|
+
*
|
|
4
|
+
* Provides utilities for installing primitives to OpenCode:
|
|
5
|
+
* - MCP server configuration in ~/.config/opencode/opencode.json
|
|
6
|
+
* - Hook plugins in ~/.config/opencode/plugins/
|
|
7
|
+
* - Environment variable substitution
|
|
8
|
+
*/
|
|
9
|
+
import * as path from "node:path";
|
|
10
|
+
import { expandPath, pathExists, readFile, writeTransformed, ensureDirectory, } from "../file-operations.js";
|
|
11
|
+
import { OPENCODE_PATHS } from "./detection.js";
|
|
12
|
+
import { opencodeToolMapping } from "./tool-mapping.js";
|
|
13
|
+
/**
|
|
14
|
+
* Read a config file from disk.
|
|
15
|
+
*/
|
|
16
|
+
export async function readConfigFile(configPath) {
|
|
17
|
+
if (!pathExists(configPath)) {
|
|
18
|
+
return {};
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
const content = await readFile(configPath);
|
|
22
|
+
return JSON.parse(content);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return {};
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Write a config file to disk.
|
|
30
|
+
*/
|
|
31
|
+
export async function writeConfigFile(configPath, config) {
|
|
32
|
+
await ensureDirectory(path.dirname(configPath));
|
|
33
|
+
await writeTransformed(configPath, JSON.stringify(config, null, 2));
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Read the global configuration file.
|
|
37
|
+
*/
|
|
38
|
+
export async function readConfig() {
|
|
39
|
+
return readConfigFile(expandPath(OPENCODE_PATHS.configJson));
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Write the global configuration file.
|
|
43
|
+
*/
|
|
44
|
+
export async function writeConfig(config) {
|
|
45
|
+
await writeConfigFile(expandPath(OPENCODE_PATHS.configJson), config);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Process environment variable values.
|
|
49
|
+
*/
|
|
50
|
+
export function processEnvValue(value) {
|
|
51
|
+
return value;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Transform an MCP server configuration for OpenCode.
|
|
55
|
+
*
|
|
56
|
+
* Note: Full environment variable transformation with sensitivity handling
|
|
57
|
+
* is implemented in transformEnvVars (Phase 7). This function provides
|
|
58
|
+
* basic passthrough for all env vars using ${VAR} syntax.
|
|
59
|
+
*/
|
|
60
|
+
export function transformMcpServerConfig(config) {
|
|
61
|
+
// Only stdio transport is supported for OpenCode MCP servers
|
|
62
|
+
if (config.transport.type !== "stdio") {
|
|
63
|
+
throw new Error(`Unsupported transport type: ${config.transport.type}. OpenCode only supports stdio transport.`);
|
|
64
|
+
}
|
|
65
|
+
const entry = {
|
|
66
|
+
command: config.transport.command,
|
|
67
|
+
};
|
|
68
|
+
if (config.transport.args && config.transport.args.length > 0) {
|
|
69
|
+
entry.args = config.transport.args;
|
|
70
|
+
}
|
|
71
|
+
// Basic env var passthrough - full transformation in Phase 7
|
|
72
|
+
if (config.env && Object.keys(config.env).length > 0) {
|
|
73
|
+
entry.env = {};
|
|
74
|
+
for (const [key] of Object.entries(config.env)) {
|
|
75
|
+
// Use passthrough syntax for all env vars
|
|
76
|
+
entry.env[key] = `\${${key}}`;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return entry;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Map hook event to OpenCode plugin hook name.
|
|
83
|
+
*/
|
|
84
|
+
function mapHookEvent(event) {
|
|
85
|
+
const eventMap = {
|
|
86
|
+
"tool.before": "tool.execute.before",
|
|
87
|
+
"tool.after": "tool.execute.after",
|
|
88
|
+
"session.start": "session.start",
|
|
89
|
+
"session.end": "session.end",
|
|
90
|
+
"prompt.submit": "prompt.submit",
|
|
91
|
+
error: "error",
|
|
92
|
+
"compaction.before": "compact.before",
|
|
93
|
+
};
|
|
94
|
+
return eventMap[event] || null;
|
|
95
|
+
}
|
|
96
|
+
function toPascalCase(value) {
|
|
97
|
+
return value
|
|
98
|
+
.replace(/[^a-zA-Z0-9]+/g, " ")
|
|
99
|
+
.trim()
|
|
100
|
+
.split(/\s+/)
|
|
101
|
+
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
102
|
+
.join("");
|
|
103
|
+
}
|
|
104
|
+
function buildMatcherCondition(binding) {
|
|
105
|
+
if (!binding.matcher) {
|
|
106
|
+
return "true";
|
|
107
|
+
}
|
|
108
|
+
const conditions = [];
|
|
109
|
+
if (binding.matcher.tool) {
|
|
110
|
+
const mapping = opencodeToolMapping;
|
|
111
|
+
const mappedTool = mapping[binding.matcher.tool] || binding.matcher.tool;
|
|
112
|
+
conditions.push(`event.tool_name === ${JSON.stringify(mappedTool)}`);
|
|
113
|
+
}
|
|
114
|
+
if (binding.matcher.command_pattern) {
|
|
115
|
+
conditions.push(`new RegExp(${JSON.stringify(binding.matcher.command_pattern)}).test(event.tool_input?.command ?? "")`);
|
|
116
|
+
}
|
|
117
|
+
if (binding.matcher.file_pattern) {
|
|
118
|
+
conditions.push(`new RegExp(${JSON.stringify(binding.matcher.file_pattern)}).test(event.tool_input?.path ?? "")`);
|
|
119
|
+
}
|
|
120
|
+
if (binding.matcher.prompt_pattern) {
|
|
121
|
+
conditions.push(`new RegExp(${JSON.stringify(binding.matcher.prompt_pattern)}).test(event.prompt ?? "")`);
|
|
122
|
+
}
|
|
123
|
+
return conditions.length > 0 ? conditions.join(" && ") : "true";
|
|
124
|
+
}
|
|
125
|
+
function buildHookPolicyGuard(binding) {
|
|
126
|
+
const failure = binding.policy?.on_failure ?? "continue";
|
|
127
|
+
if (failure === "block") {
|
|
128
|
+
return "throw new Error('Hook execution failed');";
|
|
129
|
+
}
|
|
130
|
+
if (failure === "warn") {
|
|
131
|
+
return "console.warn('Hook execution failed');";
|
|
132
|
+
}
|
|
133
|
+
return "";
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Transform a hook program + binding into an OpenCode plugin.
|
|
137
|
+
*/
|
|
138
|
+
export function transformHookConfig(input) {
|
|
139
|
+
const eventKey = mapHookEvent(input.binding.event);
|
|
140
|
+
if (!eventKey) {
|
|
141
|
+
throw new Error(`Unsupported OpenCode hook event: ${input.binding.event}`);
|
|
142
|
+
}
|
|
143
|
+
if (input.program.runtime.type === "opencode-plugin") {
|
|
144
|
+
return {
|
|
145
|
+
files: [
|
|
146
|
+
{
|
|
147
|
+
type: "copy",
|
|
148
|
+
source: input.entryPath,
|
|
149
|
+
destination: input.targetPath,
|
|
150
|
+
},
|
|
151
|
+
],
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
if (input.program.runtime.type !== "command") {
|
|
155
|
+
throw new Error(`Unsupported OpenCode hook runtime: ${input.program.runtime.type}`);
|
|
156
|
+
}
|
|
157
|
+
const scriptFileName = `${input.instanceName}-${path.basename(input.entryPath)}`;
|
|
158
|
+
const scriptPath = path.join(input.targetDir, scriptFileName);
|
|
159
|
+
const exportName = toPascalCase(input.instanceName || "Hook");
|
|
160
|
+
const matcherCondition = buildMatcherCondition(input.binding);
|
|
161
|
+
const policyGuard = buildHookPolicyGuard(input.binding);
|
|
162
|
+
const args = [
|
|
163
|
+
...(input.program.runtime.args ?? []),
|
|
164
|
+
...(input.binding.runtime?.args ?? []),
|
|
165
|
+
];
|
|
166
|
+
const pluginCode = [
|
|
167
|
+
"import { fileURLToPath } from 'node:url';",
|
|
168
|
+
"import { dirname, join } from 'node:path';",
|
|
169
|
+
"",
|
|
170
|
+
"const __filename = fileURLToPath(import.meta.url);",
|
|
171
|
+
"const __dirname = dirname(__filename);",
|
|
172
|
+
`const scriptPath = join(__dirname, ${JSON.stringify(scriptFileName)});`,
|
|
173
|
+
`const args = ${JSON.stringify(args)};`,
|
|
174
|
+
"",
|
|
175
|
+
`export const ${exportName} = async ({ $ }) => {`,
|
|
176
|
+
" return {",
|
|
177
|
+
` ${JSON.stringify(eventKey)}: async (event) => {`,
|
|
178
|
+
` if (!(${matcherCondition})) return event;`,
|
|
179
|
+
" try {",
|
|
180
|
+
" const command = [scriptPath, ...args].join(' ');",
|
|
181
|
+
" const result = await $`${command}`;",
|
|
182
|
+
" if (result?.exitCode && result.exitCode !== 0) {",
|
|
183
|
+
` ${policyGuard || ""}`,
|
|
184
|
+
" }",
|
|
185
|
+
" } catch (err) {",
|
|
186
|
+
` ${policyGuard || ""}`,
|
|
187
|
+
" }",
|
|
188
|
+
" return event;",
|
|
189
|
+
" },",
|
|
190
|
+
" };",
|
|
191
|
+
"};",
|
|
192
|
+
].join("\n");
|
|
193
|
+
return {
|
|
194
|
+
files: [
|
|
195
|
+
{
|
|
196
|
+
type: "copy",
|
|
197
|
+
source: input.entryPath,
|
|
198
|
+
destination: scriptPath,
|
|
199
|
+
},
|
|
200
|
+
],
|
|
201
|
+
pluginCode,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Transform resolved environment variables to OpenCode format.
|
|
206
|
+
*
|
|
207
|
+
* OpenCode uses JSON configuration with ${VAR} syntax for passthrough.
|
|
208
|
+
*
|
|
209
|
+
* Rules (per FR-20.7):
|
|
210
|
+
* - Passthrough: "VAR": "${VAR}"
|
|
211
|
+
* - Direct value: "VAR": "value"
|
|
212
|
+
*/
|
|
213
|
+
export function transformEnvVars(resolved) {
|
|
214
|
+
const env = {};
|
|
215
|
+
for (const r of resolved) {
|
|
216
|
+
if (r.usePassthrough) {
|
|
217
|
+
env[r.name] = `\${${r.name}}`;
|
|
218
|
+
}
|
|
219
|
+
else if (r.value !== undefined) {
|
|
220
|
+
env[r.name] = r.value;
|
|
221
|
+
}
|
|
222
|
+
// Skip if no value and not passthrough (shouldn't happen)
|
|
223
|
+
}
|
|
224
|
+
return env;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Transform resolved headers to OpenCode format.
|
|
228
|
+
*
|
|
229
|
+
* OpenCode uses ${VAR} syntax within header values for passthrough.
|
|
230
|
+
*
|
|
231
|
+
* Rules (per FR-21.6):
|
|
232
|
+
* - Sensitive with envVar: "Header": "${VAR}"
|
|
233
|
+
* - Nonsensitive with static value: "Header": "value"
|
|
234
|
+
* - Nonsensitive with envVar: "Header": "${VAR}"
|
|
235
|
+
*/
|
|
236
|
+
export function transformHeaders(resolved) {
|
|
237
|
+
const headers = {};
|
|
238
|
+
for (const r of resolved) {
|
|
239
|
+
if (r.usePassthrough && r.envVar) {
|
|
240
|
+
headers[r.name] = `\${${r.envVar}}`;
|
|
241
|
+
}
|
|
242
|
+
else if (r.value !== undefined) {
|
|
243
|
+
headers[r.name] = r.value;
|
|
244
|
+
}
|
|
245
|
+
// Skip if no value and no passthrough (shouldn't happen)
|
|
246
|
+
}
|
|
247
|
+
return headers;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Add an MCP server to the configuration.
|
|
251
|
+
*/
|
|
252
|
+
export async function addMcpServer(namespacedName, config) {
|
|
253
|
+
try {
|
|
254
|
+
const opencodeConfig = await readConfig();
|
|
255
|
+
if (!opencodeConfig.mcp) {
|
|
256
|
+
opencodeConfig.mcp = {};
|
|
257
|
+
}
|
|
258
|
+
if (!opencodeConfig.mcp.servers) {
|
|
259
|
+
opencodeConfig.mcp.servers = {};
|
|
260
|
+
}
|
|
261
|
+
opencodeConfig.mcp.servers[namespacedName] = transformMcpServerConfig(config);
|
|
262
|
+
await writeConfig(opencodeConfig);
|
|
263
|
+
return {
|
|
264
|
+
operation: "merge",
|
|
265
|
+
destination: expandPath(OPENCODE_PATHS.configJson),
|
|
266
|
+
success: true,
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
catch (error) {
|
|
270
|
+
return {
|
|
271
|
+
operation: "merge",
|
|
272
|
+
destination: expandPath(OPENCODE_PATHS.configJson),
|
|
273
|
+
success: false,
|
|
274
|
+
error: error instanceof Error ? error.message : String(error),
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Remove an MCP server from the configuration.
|
|
280
|
+
*/
|
|
281
|
+
export async function removeMcpServer(namespacedName) {
|
|
282
|
+
const opencodeConfig = await readConfig();
|
|
283
|
+
if (!opencodeConfig.mcp?.servers || !opencodeConfig.mcp.servers[namespacedName]) {
|
|
284
|
+
return false;
|
|
285
|
+
}
|
|
286
|
+
delete opencodeConfig.mcp.servers[namespacedName];
|
|
287
|
+
await writeConfig(opencodeConfig);
|
|
288
|
+
return true;
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../../../src/adapters/opencode/installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-mapping.d.ts","sourceRoot":"","sources":["../../../src/adapters/opencode/model-mapping.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,eAAO,MAAM,oBAAoB,EAAE,YAMlC,CAAC;AAEF,wBAAgB,uBAAuB,IAAI,YAAY,CAEtD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode model mapping.
|
|
3
|
+
*/
|
|
4
|
+
export const opencodeModelMapping = {
|
|
5
|
+
fast: null,
|
|
6
|
+
standard: null,
|
|
7
|
+
power: null,
|
|
8
|
+
auto: null,
|
|
9
|
+
inherit: null,
|
|
10
|
+
};
|
|
11
|
+
export function getOpencodeModelMapping() {
|
|
12
|
+
return opencodeModelMapping;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=model-mapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-mapping.js","sourceRoot":"","sources":["../../../src/adapters/opencode/model-mapping.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,CAAC,MAAM,oBAAoB,GAAiB;IAChD,IAAI,EAAE,IAAI;IACV,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,IAAI;CACd,CAAC;AAEF,MAAM,UAAU,uBAAuB;IACrC,OAAO,oBAAoB,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode tool mapping.
|
|
3
|
+
*
|
|
4
|
+
* Maps canonical tool identifiers to OpenCode's native tool names.
|
|
5
|
+
* OpenCode uses PascalCase naming similar to Claude Code.
|
|
6
|
+
*/
|
|
7
|
+
import type { ToolMapping } from "../types.js";
|
|
8
|
+
/**
|
|
9
|
+
* OpenCode tool mapping.
|
|
10
|
+
*
|
|
11
|
+
* OpenCode provides comprehensive tool support with PascalCase naming.
|
|
12
|
+
*/
|
|
13
|
+
export declare const opencodeToolMapping: ToolMapping;
|
|
14
|
+
/**
|
|
15
|
+
* Get the OpenCode tool mapping.
|
|
16
|
+
*/
|
|
17
|
+
export declare function getOpencodeToolMapping(): ToolMapping;
|
|
18
|
+
//# sourceMappingURL=tool-mapping.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-mapping.d.ts","sourceRoot":"","sources":["../../../src/adapters/opencode/tool-mapping.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,WAYjC,CAAC;AAEF;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,WAAW,CAEpD"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode tool mapping.
|
|
3
|
+
*
|
|
4
|
+
* Maps canonical tool identifiers to OpenCode's native tool names.
|
|
5
|
+
* OpenCode uses PascalCase naming similar to Claude Code.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* OpenCode tool mapping.
|
|
9
|
+
*
|
|
10
|
+
* OpenCode provides comprehensive tool support with PascalCase naming.
|
|
11
|
+
*/
|
|
12
|
+
export const opencodeToolMapping = {
|
|
13
|
+
shell: "Shell",
|
|
14
|
+
read: "ReadFile",
|
|
15
|
+
write: "WriteFile",
|
|
16
|
+
edit: "EditFile",
|
|
17
|
+
grep: "SearchFiles",
|
|
18
|
+
glob: "FindFiles",
|
|
19
|
+
list: "ListDirectory",
|
|
20
|
+
webfetch: "FetchWeb",
|
|
21
|
+
websearch: "SearchWeb",
|
|
22
|
+
todo: "TaskList",
|
|
23
|
+
ask: "AskUser",
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Get the OpenCode tool mapping.
|
|
27
|
+
*/
|
|
28
|
+
export function getOpencodeToolMapping() {
|
|
29
|
+
return opencodeToolMapping;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=tool-mapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-mapping.js","sourceRoot":"","sources":["../../../src/adapters/opencode/tool-mapping.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAgB;IAC9C,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,WAAW;IAClB,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,aAAa;IACnB,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,eAAe;IACrB,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,IAAI,EAAE,UAAU;IAChB,GAAG,EAAE,SAAS;CACf,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,mBAAmB,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Adapter registry for managing harness-specific adapters.
|
|
3
|
+
*
|
|
4
|
+
* The registry provides centralized adapter registration, lookup by name,
|
|
5
|
+
* and enumeration of all registered adapters.
|
|
6
|
+
*/
|
|
7
|
+
import type { HarnessName, InstallationScope } from "../core/types.js";
|
|
8
|
+
import type { KitAdapter, DetectionResult } from "./types.js";
|
|
9
|
+
/**
|
|
10
|
+
* Result of adapter detection across all registered adapters.
|
|
11
|
+
*/
|
|
12
|
+
export interface DetectedAdapter {
|
|
13
|
+
adapter: KitAdapter;
|
|
14
|
+
detection: DetectionResult;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Summary of all detected harnesses.
|
|
18
|
+
*/
|
|
19
|
+
export interface DetectionSummary {
|
|
20
|
+
detected: DetectedAdapter[];
|
|
21
|
+
notDetected: string[];
|
|
22
|
+
errors: Array<{
|
|
23
|
+
name: string;
|
|
24
|
+
error: string;
|
|
25
|
+
}>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Adapter registry for managing harness-specific adapters.
|
|
29
|
+
*/
|
|
30
|
+
export declare class AdapterRegistry {
|
|
31
|
+
private adapters;
|
|
32
|
+
/**
|
|
33
|
+
* Register an adapter with the registry.
|
|
34
|
+
*
|
|
35
|
+
* @param adapter - The adapter to register
|
|
36
|
+
* @throws Error if an adapter with the same name is already registered
|
|
37
|
+
*/
|
|
38
|
+
register(adapter: KitAdapter): void;
|
|
39
|
+
/**
|
|
40
|
+
* Register multiple adapters at once.
|
|
41
|
+
*
|
|
42
|
+
* @param adapters - Array of adapters to register
|
|
43
|
+
*/
|
|
44
|
+
registerAll(adapters: KitAdapter[]): void;
|
|
45
|
+
/**
|
|
46
|
+
* Get an adapter by name.
|
|
47
|
+
*
|
|
48
|
+
* @param name - The adapter name (e.g., "claude-code")
|
|
49
|
+
* @returns The adapter or undefined if not found
|
|
50
|
+
*/
|
|
51
|
+
get(name: string): KitAdapter | undefined;
|
|
52
|
+
/**
|
|
53
|
+
* Get an adapter by name, throwing if not found.
|
|
54
|
+
*
|
|
55
|
+
* @param name - The adapter name
|
|
56
|
+
* @throws Error if adapter not found
|
|
57
|
+
*/
|
|
58
|
+
getOrThrow(name: string): KitAdapter;
|
|
59
|
+
/**
|
|
60
|
+
* Check if an adapter is registered.
|
|
61
|
+
*
|
|
62
|
+
* @param name - The adapter name
|
|
63
|
+
*/
|
|
64
|
+
has(name: string): boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Remove an adapter from the registry.
|
|
67
|
+
*
|
|
68
|
+
* @param name - The adapter name
|
|
69
|
+
* @returns true if adapter was removed, false if not found
|
|
70
|
+
*/
|
|
71
|
+
unregister(name: string): boolean;
|
|
72
|
+
/**
|
|
73
|
+
* List all registered adapters.
|
|
74
|
+
*/
|
|
75
|
+
list(): KitAdapter[];
|
|
76
|
+
/**
|
|
77
|
+
* Get the names of all registered adapters.
|
|
78
|
+
*/
|
|
79
|
+
names(): string[];
|
|
80
|
+
/**
|
|
81
|
+
* Get the count of registered adapters.
|
|
82
|
+
*/
|
|
83
|
+
get size(): number;
|
|
84
|
+
/**
|
|
85
|
+
* Clear all registered adapters.
|
|
86
|
+
*/
|
|
87
|
+
clear(): void;
|
|
88
|
+
/**
|
|
89
|
+
* Detect all registered harnesses.
|
|
90
|
+
*
|
|
91
|
+
* Runs detection for each registered adapter in parallel
|
|
92
|
+
* and returns a summary of detected and non-detected harnesses.
|
|
93
|
+
*/
|
|
94
|
+
detectAll(): Promise<DetectionSummary>;
|
|
95
|
+
/**
|
|
96
|
+
* Detect and return only adapters that are installed on the system.
|
|
97
|
+
*/
|
|
98
|
+
detectInstalled(): Promise<DetectedAdapter[]>;
|
|
99
|
+
/**
|
|
100
|
+
* Find adapters by harness name pattern.
|
|
101
|
+
*
|
|
102
|
+
* Supports exact match and partial matching.
|
|
103
|
+
*
|
|
104
|
+
* @param pattern - Name or partial name to match
|
|
105
|
+
*/
|
|
106
|
+
find(pattern: string): KitAdapter[];
|
|
107
|
+
/**
|
|
108
|
+
* Get adapters that support a specific harness name.
|
|
109
|
+
*
|
|
110
|
+
* @param harnessName - The harness name to look up
|
|
111
|
+
*/
|
|
112
|
+
getByHarnessName(harnessName: HarnessName): KitAdapter | undefined;
|
|
113
|
+
/**
|
|
114
|
+
* Get adapters that support a specific installation scope.
|
|
115
|
+
*
|
|
116
|
+
* @param scope - The installation scope to filter by
|
|
117
|
+
*/
|
|
118
|
+
filterByScope(scope: InstallationScope): KitAdapter[];
|
|
119
|
+
/**
|
|
120
|
+
* Get adapters that support both specified scopes.
|
|
121
|
+
*/
|
|
122
|
+
filterByBothScopes(): KitAdapter[];
|
|
123
|
+
/**
|
|
124
|
+
* Check if an adapter supports a specific scope.
|
|
125
|
+
*
|
|
126
|
+
* @param name - The adapter name
|
|
127
|
+
* @param scope - The installation scope to check
|
|
128
|
+
*/
|
|
129
|
+
supportsScope(name: string, scope: InstallationScope): boolean;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Global adapter registry instance.
|
|
133
|
+
*
|
|
134
|
+
* This is the primary registry used by the kit installer.
|
|
135
|
+
* Adapters should be registered during application initialization.
|
|
136
|
+
*/
|
|
137
|
+
export declare const globalRegistry: AdapterRegistry;
|
|
138
|
+
/**
|
|
139
|
+
* Convenience function to register an adapter with the global registry.
|
|
140
|
+
*/
|
|
141
|
+
export declare function registerAdapter(adapter: KitAdapter): void;
|
|
142
|
+
/**
|
|
143
|
+
* Convenience function to get an adapter from the global registry.
|
|
144
|
+
*/
|
|
145
|
+
export declare function getAdapter(name: string): KitAdapter | undefined;
|
|
146
|
+
/**
|
|
147
|
+
* Convenience function to list all adapters in the global registry.
|
|
148
|
+
*/
|
|
149
|
+
export declare function listAdapters(): KitAdapter[];
|
|
150
|
+
/**
|
|
151
|
+
* Convenience function to detect all harnesses using the global registry.
|
|
152
|
+
*/
|
|
153
|
+
export declare function detectHarnesses(): Promise<DetectionSummary>;
|
|
154
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/adapters/registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,UAAU,CAAC;IACpB,SAAS,EAAE,eAAe,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAsC;IAEtD;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI;IAOnC;;;;OAIG;IACH,WAAW,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI;IAMzC;;;;;OAKG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIzC;;;;;OAKG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU;IAapC;;;;OAIG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;;;;OAKG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC;;OAEG;IACH,IAAI,IAAI,UAAU,EAAE;IAIpB;;OAEG;IACH,KAAK,IAAI,MAAM,EAAE;IAIjB;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;;;OAKG;IACG,SAAS,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAgC5C;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAKnD;;;;;;OAMG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE;IAUnC;;;;OAIG;IACH,gBAAgB,CAAC,WAAW,EAAE,WAAW,GAAG,UAAU,GAAG,SAAS;IAIlE;;;;OAIG;IACH,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,UAAU,EAAE;IAMrD;;OAEG;IACH,kBAAkB,IAAI,UAAU,EAAE;IAOlC;;;;;OAKG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO;CAO/D;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,iBAAwB,CAAC;AAEpD;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAEzD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAE/D;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,UAAU,EAAE,CAE3C;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAEjE"}
|