@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,643 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code adapter implementation.
|
|
3
|
+
*
|
|
4
|
+
* This is the reference implementation for the adapter framework, providing
|
|
5
|
+
* full support for all primitive types:
|
|
6
|
+
* - Commands: ~/.claude/commands/{kit}.{name}.md
|
|
7
|
+
* - Skills: ~/.claude/skills/{kit}.{name}/
|
|
8
|
+
* - Subagents: ~/.claude/agents/{kit}.{name}.md
|
|
9
|
+
* - MCP Servers: ~/.claude.json mcpServers key
|
|
10
|
+
* - Hooks: ~/.claude/settings.json + ~/.claude/hooks/{kit}.{name}/
|
|
11
|
+
*/
|
|
12
|
+
import * as path from "node:path";
|
|
13
|
+
import { BaseAdapter } from "../base-adapter.js";
|
|
14
|
+
import { expandPath, pathExists, readFile, ensureDirectory, copyFile, remove } from "../file-operations.js";
|
|
15
|
+
import { detectClaudeCode, getClaudeCodeInstallationPaths, CLAUDE_CODE_PATHS } from "./detection.js";
|
|
16
|
+
import { claudeCodeToolMapping } from "./tool-mapping.js";
|
|
17
|
+
import { claudeCodeModelMapping } from "./model-mapping.js";
|
|
18
|
+
import { parseToolTemplate } from "../tool-templating.js";
|
|
19
|
+
import { parseReference } from "../../resolution/reference-parser.js";
|
|
20
|
+
import { renameFrontmatterField } from "../command-parser.js";
|
|
21
|
+
import { toKebabCaseSkillFrontmatter } from "../skill-frontmatter.js";
|
|
22
|
+
import { transformMcpServerConfig, transformHookConfig, mergeHookConfigs, transformEnvVars as installerTransformEnvVars, transformHeaders as installerTransformHeaders, readMcpConfig, writeMcpConfig, readSettingsConfig, writeSettingsConfig, } from "./installer.js";
|
|
23
|
+
/**
|
|
24
|
+
* Claude Code adapter.
|
|
25
|
+
*
|
|
26
|
+
* Provides full support for all primitive types with native Markdown format.
|
|
27
|
+
*/
|
|
28
|
+
/**
|
|
29
|
+
* Project-scope paths for Claude Code.
|
|
30
|
+
*/
|
|
31
|
+
export const CLAUDE_CODE_PROJECT_PATHS = {
|
|
32
|
+
settingsJson: ".claude/settings.json",
|
|
33
|
+
mcpJson: ".mcp.json",
|
|
34
|
+
commands: ".claude/commands/",
|
|
35
|
+
skills: ".claude/skills/",
|
|
36
|
+
agents: ".claude/agents/",
|
|
37
|
+
hooks: ".claude/hooks/",
|
|
38
|
+
};
|
|
39
|
+
export class ClaudeCodeAdapter extends BaseAdapter {
|
|
40
|
+
name = "claude-code";
|
|
41
|
+
displayName = "Claude Code";
|
|
42
|
+
version = "1.0.0";
|
|
43
|
+
supportedHarnessVersions = ">=1.0.0";
|
|
44
|
+
/**
|
|
45
|
+
* Get supported installation scopes.
|
|
46
|
+
*
|
|
47
|
+
* Claude Code supports both global and project scopes.
|
|
48
|
+
*/
|
|
49
|
+
getSupportedScopes() {
|
|
50
|
+
return ["global", "project"];
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get supported primitive types.
|
|
54
|
+
*
|
|
55
|
+
* Claude Code supports all primitive types at both scopes.
|
|
56
|
+
*
|
|
57
|
+
* @param scope - Installation scope (defaults to "global")
|
|
58
|
+
*/
|
|
59
|
+
getSupportedPrimitives(_scope) {
|
|
60
|
+
// Claude Code supports all primitives at both scopes
|
|
61
|
+
return ["commands", "skills", "subagents", "mcp", "hooks"];
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get installation paths for file-based primitives.
|
|
65
|
+
*
|
|
66
|
+
* @param scope - Installation scope (defaults to "global")
|
|
67
|
+
*/
|
|
68
|
+
getInstallationPaths(scope) {
|
|
69
|
+
if (scope === "project") {
|
|
70
|
+
return {
|
|
71
|
+
commands: CLAUDE_CODE_PROJECT_PATHS.commands,
|
|
72
|
+
skills: CLAUDE_CODE_PROJECT_PATHS.skills,
|
|
73
|
+
subagents: CLAUDE_CODE_PROJECT_PATHS.agents,
|
|
74
|
+
hooks: CLAUDE_CODE_PROJECT_PATHS.hooks,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
return getClaudeCodeInstallationPaths();
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get configuration file locations.
|
|
81
|
+
*
|
|
82
|
+
* @param scope - Installation scope (defaults to "global")
|
|
83
|
+
*/
|
|
84
|
+
getConfigLocations(scope) {
|
|
85
|
+
if (scope === "project") {
|
|
86
|
+
return {
|
|
87
|
+
primary: CLAUDE_CODE_PROJECT_PATHS.settingsJson,
|
|
88
|
+
mcp: CLAUDE_CODE_PROJECT_PATHS.mcpJson,
|
|
89
|
+
format: "json",
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
primary: CLAUDE_CODE_PATHS.settingsJson,
|
|
94
|
+
mcp: CLAUDE_CODE_PATHS.mcpJson,
|
|
95
|
+
format: "json",
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Get the tool mapping for Claude Code.
|
|
100
|
+
*/
|
|
101
|
+
getToolMapping() {
|
|
102
|
+
return claudeCodeToolMapping;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Get the model mapping for Claude Code.
|
|
106
|
+
*/
|
|
107
|
+
getModelMapping() {
|
|
108
|
+
return claudeCodeModelMapping;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Map canonical subagent hook bindings to Claude Code frontmatter hooks.
|
|
112
|
+
*/
|
|
113
|
+
mapSubagentHooks(frontmatter, resolvedPrimitives, kitName, paths, scope, projectRoot) {
|
|
114
|
+
return this.mapFrontmatterHooks(frontmatter, resolvedPrimitives, kitName, paths, scope, projectRoot, "subagent");
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Map canonical skill hook bindings to Claude Code frontmatter hooks.
|
|
118
|
+
*/
|
|
119
|
+
mapSkillHooks(frontmatter, resolvedPrimitives, kitName, paths, scope, projectRoot) {
|
|
120
|
+
return this.mapFrontmatterHooks(frontmatter, resolvedPrimitives, kitName, paths, scope, projectRoot, "skill");
|
|
121
|
+
}
|
|
122
|
+
mapFrontmatterHooks(frontmatter, resolvedPrimitives, kitName, paths, scope, projectRoot, label) {
|
|
123
|
+
const hooksValue = frontmatter["hooks"];
|
|
124
|
+
if (!Array.isArray(hooksValue) || hooksValue.length === 0) {
|
|
125
|
+
return frontmatter;
|
|
126
|
+
}
|
|
127
|
+
if (!paths.hooks) {
|
|
128
|
+
return frontmatter;
|
|
129
|
+
}
|
|
130
|
+
const allowedEvents = new Set([
|
|
131
|
+
"tool.before",
|
|
132
|
+
"tool.after",
|
|
133
|
+
"subagent.stop",
|
|
134
|
+
]);
|
|
135
|
+
const resolvePath = (p) => {
|
|
136
|
+
if (scope === "project" && projectRoot) {
|
|
137
|
+
return path.join(projectRoot, p.replace(/^\.\//, ""));
|
|
138
|
+
}
|
|
139
|
+
return expandPath(p);
|
|
140
|
+
};
|
|
141
|
+
const hookPrimitives = resolvedPrimitives.filter((primitive) => primitive.type === "hooks");
|
|
142
|
+
const hooksDir = resolvePath(paths.hooks);
|
|
143
|
+
let mergedHooks = {};
|
|
144
|
+
for (const entry of hooksValue) {
|
|
145
|
+
if (!entry || typeof entry !== "object") {
|
|
146
|
+
throw new Error(`${label} hooks entries must be objects`);
|
|
147
|
+
}
|
|
148
|
+
const entryRecord = entry;
|
|
149
|
+
const refValue = entryRecord["ref"] ?? entryRecord["name"];
|
|
150
|
+
if (typeof refValue !== "string" || refValue.trim().length === 0) {
|
|
151
|
+
throw new Error(`${label} hooks entries must include a 'ref' string`);
|
|
152
|
+
}
|
|
153
|
+
const bindingValue = entryRecord["binding"];
|
|
154
|
+
if (!bindingValue || typeof bindingValue !== "object") {
|
|
155
|
+
throw new Error(`${label} hooks entries must include a 'binding' object`);
|
|
156
|
+
}
|
|
157
|
+
const bindingEvent = bindingValue.event;
|
|
158
|
+
if (!allowedEvents.has(bindingEvent)) {
|
|
159
|
+
throw new Error(`${label} hooks only support tool.before, tool.after, or subagent.stop; event=${bindingEvent}`);
|
|
160
|
+
}
|
|
161
|
+
const hookName = refValue.includes("@") ? parseReference(refValue).name : refValue;
|
|
162
|
+
const hookPrimitive = hookPrimitives.find((primitive) => primitive.name === hookName);
|
|
163
|
+
if (!hookPrimitive || !hookPrimitive.hookProgram || !hookPrimitive.hookEntryPath || !hookPrimitive.hookProgramDir) {
|
|
164
|
+
throw new Error(`${label} hook reference not found in resolved hooks: ${hookName}`);
|
|
165
|
+
}
|
|
166
|
+
const instanceName = hookPrimitive.instanceName ?? this.getNamespacedName(kitName, hookPrimitive.name);
|
|
167
|
+
const hookDir = path.join(hooksDir, instanceName);
|
|
168
|
+
const targetPath = path.join(hookDir, path.basename(hookPrimitive.hookEntryPath));
|
|
169
|
+
const binding = mapHookBindingToolTemplates(bindingValue, this.getToolMapping());
|
|
170
|
+
const hookInput = {
|
|
171
|
+
instanceName,
|
|
172
|
+
program: hookPrimitive.hookProgram,
|
|
173
|
+
binding,
|
|
174
|
+
programDir: hookPrimitive.hookProgramDir,
|
|
175
|
+
entryPath: hookPrimitive.hookEntryPath,
|
|
176
|
+
targetDir: hookDir,
|
|
177
|
+
targetPath,
|
|
178
|
+
scope,
|
|
179
|
+
...(projectRoot ? { projectRoot } : {}),
|
|
180
|
+
};
|
|
181
|
+
const hookInstallation = transformHookConfig(hookInput);
|
|
182
|
+
if (hookInstallation.config) {
|
|
183
|
+
let config = hookInstallation.config;
|
|
184
|
+
if (binding.event === "subagent.stop") {
|
|
185
|
+
const { SubagentStop, ...rest } = config;
|
|
186
|
+
if (SubagentStop !== undefined) {
|
|
187
|
+
config = {
|
|
188
|
+
...rest,
|
|
189
|
+
Stop: SubagentStop,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
mergedHooks = mergeHookConfigs(mergedHooks, config);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return {
|
|
197
|
+
...frontmatter,
|
|
198
|
+
hooks: mergedHooks,
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Detect Claude Code installation.
|
|
203
|
+
*/
|
|
204
|
+
async detect() {
|
|
205
|
+
return detectClaudeCode();
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Transform a command for Claude Code.
|
|
209
|
+
*
|
|
210
|
+
* Claude Code uses native Markdown format, so no transformation is needed.
|
|
211
|
+
* Tool templates are processed separately by the base adapter.
|
|
212
|
+
*/
|
|
213
|
+
transformCommand(content, _metadata) {
|
|
214
|
+
const transformedContent = renameFrontmatterField(content, "argumentHint", "argument-hint");
|
|
215
|
+
return {
|
|
216
|
+
content: transformedContent,
|
|
217
|
+
format: "markdown",
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Transform a skill for Claude Code.
|
|
222
|
+
*
|
|
223
|
+
* Claude Code uses native Markdown format for skills.
|
|
224
|
+
*/
|
|
225
|
+
transformSkill(_skillDir, _metadata) {
|
|
226
|
+
// Skills are directories, content is the SKILL.md file path
|
|
227
|
+
return {
|
|
228
|
+
content: "",
|
|
229
|
+
format: "markdown",
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Claude Code skill frontmatter expects kebab-case keys.
|
|
234
|
+
*/
|
|
235
|
+
filterSkillFrontmatter(frontmatter) {
|
|
236
|
+
return toKebabCaseSkillFrontmatter(frontmatter);
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Transform a subagent for Claude Code.
|
|
240
|
+
*
|
|
241
|
+
* Claude Code uses native Markdown format for subagents.
|
|
242
|
+
*/
|
|
243
|
+
transformSubagent(content, _metadata) {
|
|
244
|
+
return {
|
|
245
|
+
content,
|
|
246
|
+
format: "markdown",
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Claude Code subagents use `tools` instead of `allowedTools`.
|
|
251
|
+
*/
|
|
252
|
+
filterSubagentFrontmatter(frontmatter) {
|
|
253
|
+
if (!Object.prototype.hasOwnProperty.call(frontmatter, "allowedTools")) {
|
|
254
|
+
return frontmatter;
|
|
255
|
+
}
|
|
256
|
+
const { allowedTools, ...rest } = frontmatter;
|
|
257
|
+
return {
|
|
258
|
+
...rest,
|
|
259
|
+
tools: allowedTools,
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Transform an MCP server configuration for Claude Code.
|
|
264
|
+
*/
|
|
265
|
+
transformMcpServer(config) {
|
|
266
|
+
return transformMcpServerConfig(config);
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Transform a hook for Claude Code.
|
|
270
|
+
*/
|
|
271
|
+
transformHook(hook) {
|
|
272
|
+
return transformHookConfig(hook);
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Transform resolved environment variables to Claude Code format.
|
|
276
|
+
*
|
|
277
|
+
* Claude Code uses ${VAR} syntax for passthrough, direct values otherwise.
|
|
278
|
+
* See PRD-001 FR-20.3.
|
|
279
|
+
*/
|
|
280
|
+
transformEnvVars(resolved) {
|
|
281
|
+
return installerTransformEnvVars(resolved);
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Transform resolved headers to Claude Code format.
|
|
285
|
+
*
|
|
286
|
+
* Claude Code uses ${VAR} syntax for passthrough, direct values otherwise.
|
|
287
|
+
* See PRD-001 FR-21.2.
|
|
288
|
+
*/
|
|
289
|
+
transformHeaders(resolved) {
|
|
290
|
+
return installerTransformHeaders(resolved);
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Update harness configuration for MCP servers and hooks.
|
|
294
|
+
*
|
|
295
|
+
* @param kit - Kit manifest
|
|
296
|
+
* @param resolvedPrimitives - Resolved primitives to install
|
|
297
|
+
* @param dryRun - If true, don't actually write files
|
|
298
|
+
* @param completedOps - Array to track completed operations for rollback
|
|
299
|
+
* @param scope - Installation scope
|
|
300
|
+
* @param projectRoot - Project root for project scope
|
|
301
|
+
*/
|
|
302
|
+
async updateConfiguration(kit, resolvedPrimitives, dryRun, completedOps, scope = "global", projectRoot, envResolutions) {
|
|
303
|
+
const operations = [];
|
|
304
|
+
// Filter MCP and hook primitives
|
|
305
|
+
const mcpPrimitives = resolvedPrimitives.filter((p) => p.type === "mcp");
|
|
306
|
+
const hookPrimitives = resolvedPrimitives.filter((p) => p.type === "hooks");
|
|
307
|
+
// Handle MCP servers
|
|
308
|
+
if (mcpPrimitives.length > 0 && !dryRun) {
|
|
309
|
+
const mcpResult = await this.installMcpServers(kit.name, mcpPrimitives, completedOps, scope, projectRoot, envResolutions);
|
|
310
|
+
operations.push(...mcpResult);
|
|
311
|
+
}
|
|
312
|
+
// Handle hooks
|
|
313
|
+
if (hookPrimitives.length > 0 && !dryRun) {
|
|
314
|
+
const hookResult = await this.installHooks(kit.name, hookPrimitives, completedOps, scope, projectRoot);
|
|
315
|
+
operations.push(...hookResult);
|
|
316
|
+
}
|
|
317
|
+
return { operations };
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Install MCP servers to configuration.
|
|
321
|
+
*
|
|
322
|
+
* @param kitName - Name of the kit
|
|
323
|
+
* @param primitives - MCP primitives to install
|
|
324
|
+
* @param completedOps - Completed operations for rollback
|
|
325
|
+
* @param scope - Installation scope
|
|
326
|
+
* @param projectRoot - Project root for project scope
|
|
327
|
+
*/
|
|
328
|
+
async installMcpServers(_kitName, primitives, completedOps, scope = "global", projectRoot, envResolutions) {
|
|
329
|
+
const operations = [];
|
|
330
|
+
const configLocations = this.getConfigLocations(scope);
|
|
331
|
+
const mcpConfigPath = scope === "project" && projectRoot
|
|
332
|
+
? path.join(projectRoot, configLocations.mcp.replace(/^\.\//, ""))
|
|
333
|
+
: expandPath(configLocations.mcp);
|
|
334
|
+
// Read existing config and back it up
|
|
335
|
+
const existingConfig = scope === "project"
|
|
336
|
+
? (pathExists(mcpConfigPath) ? JSON.parse(await readFile(mcpConfigPath)) : {})
|
|
337
|
+
: await readMcpConfig();
|
|
338
|
+
const configExisted = pathExists(mcpConfigPath);
|
|
339
|
+
// Prepare updated config
|
|
340
|
+
const updatedConfig = { ...existingConfig };
|
|
341
|
+
if (!updatedConfig.mcpServers) {
|
|
342
|
+
updatedConfig.mcpServers = {};
|
|
343
|
+
}
|
|
344
|
+
for (const primitive of primitives) {
|
|
345
|
+
try {
|
|
346
|
+
// Read MCP config from source file
|
|
347
|
+
const content = await readFile(primitive.sourcePath);
|
|
348
|
+
const mcpConfig = JSON.parse(content);
|
|
349
|
+
const instanceName = primitive.instanceName ?? mcpConfig.name;
|
|
350
|
+
if (!instanceName) {
|
|
351
|
+
throw new Error(`MCP config missing name; path=${primitive.sourcePath}`);
|
|
352
|
+
}
|
|
353
|
+
// Transform and add to config
|
|
354
|
+
const transformedConfig = transformMcpServerConfig(mcpConfig);
|
|
355
|
+
// Apply resolved env vars if available
|
|
356
|
+
const resolution = envResolutions?.find((r) => r.mcpServer === instanceName);
|
|
357
|
+
if (resolution && resolution.resolved.length > 0) {
|
|
358
|
+
const transformedEnv = installerTransformEnvVars(resolution.resolved);
|
|
359
|
+
transformedConfig.env = transformedEnv;
|
|
360
|
+
}
|
|
361
|
+
// Apply resolved headers if available (for HTTP transport)
|
|
362
|
+
if (resolution && resolution.resolvedHeaders && resolution.resolvedHeaders.length > 0) {
|
|
363
|
+
const transformedHeaders = installerTransformHeaders(resolution.resolvedHeaders);
|
|
364
|
+
if (transformedConfig.url) {
|
|
365
|
+
transformedConfig.headers = transformedHeaders;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
updatedConfig.mcpServers[instanceName] = transformedConfig;
|
|
369
|
+
operations.push({
|
|
370
|
+
operation: "merge",
|
|
371
|
+
source: primitive.sourcePath,
|
|
372
|
+
destination: mcpConfigPath,
|
|
373
|
+
success: true,
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
catch (error) {
|
|
377
|
+
operations.push({
|
|
378
|
+
operation: "merge",
|
|
379
|
+
source: primitive.sourcePath,
|
|
380
|
+
destination: mcpConfigPath,
|
|
381
|
+
success: false,
|
|
382
|
+
error: error instanceof Error ? error.message : String(error),
|
|
383
|
+
});
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
// Write updated config
|
|
387
|
+
if (scope === "project" && projectRoot) {
|
|
388
|
+
const { writeFile, mkdir } = await import("node:fs/promises");
|
|
389
|
+
await mkdir(path.dirname(mcpConfigPath), { recursive: true });
|
|
390
|
+
await writeFile(mcpConfigPath, JSON.stringify(updatedConfig, null, 2));
|
|
391
|
+
}
|
|
392
|
+
else {
|
|
393
|
+
await writeMcpConfig(updatedConfig);
|
|
394
|
+
}
|
|
395
|
+
const mcpCompletedOp = {
|
|
396
|
+
type: "file",
|
|
397
|
+
path: mcpConfigPath,
|
|
398
|
+
createdNew: !configExisted,
|
|
399
|
+
};
|
|
400
|
+
if (configExisted) {
|
|
401
|
+
mcpCompletedOp.previousContent = JSON.stringify(existingConfig, null, 2);
|
|
402
|
+
}
|
|
403
|
+
completedOps.push(mcpCompletedOp);
|
|
404
|
+
return operations;
|
|
405
|
+
}
|
|
406
|
+
async removeMcpServers(instanceNames, scope = "global", projectRoot) {
|
|
407
|
+
if (instanceNames.length === 0)
|
|
408
|
+
return [];
|
|
409
|
+
const configLocations = this.getConfigLocations(scope);
|
|
410
|
+
const mcpConfigPath = scope === "project" && projectRoot
|
|
411
|
+
? path.join(projectRoot, configLocations.mcp.replace(/^\.\//, ""))
|
|
412
|
+
: expandPath(configLocations.mcp);
|
|
413
|
+
const existingConfig = scope === "project"
|
|
414
|
+
? (pathExists(mcpConfigPath) ? JSON.parse(await readFile(mcpConfigPath)) : {})
|
|
415
|
+
: await readMcpConfig();
|
|
416
|
+
if (!existingConfig.mcpServers) {
|
|
417
|
+
return [];
|
|
418
|
+
}
|
|
419
|
+
const removed = [];
|
|
420
|
+
for (const name of instanceNames) {
|
|
421
|
+
if (existingConfig.mcpServers[name]) {
|
|
422
|
+
delete existingConfig.mcpServers[name];
|
|
423
|
+
removed.push(name);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
if (removed.length > 0) {
|
|
427
|
+
if (scope === "project" && projectRoot) {
|
|
428
|
+
const { writeFile, mkdir } = await import("node:fs/promises");
|
|
429
|
+
await mkdir(path.dirname(mcpConfigPath), { recursive: true });
|
|
430
|
+
await writeFile(mcpConfigPath, JSON.stringify(existingConfig, null, 2));
|
|
431
|
+
}
|
|
432
|
+
else {
|
|
433
|
+
await writeMcpConfig(existingConfig);
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
return removed;
|
|
437
|
+
}
|
|
438
|
+
async removeHooks(instanceNames, scope = "global", projectRoot) {
|
|
439
|
+
if (instanceNames.length === 0)
|
|
440
|
+
return [];
|
|
441
|
+
const configLocations = this.getConfigLocations(scope);
|
|
442
|
+
const installPaths = this.getInstallationPaths(scope);
|
|
443
|
+
const settingsPath = scope === "project" && projectRoot
|
|
444
|
+
? path.join(projectRoot, configLocations.primary.replace(/^\.\//, ""))
|
|
445
|
+
: expandPath(configLocations.primary);
|
|
446
|
+
const hooksDir = scope === "project" && projectRoot
|
|
447
|
+
? path.join(projectRoot, installPaths.hooks.replace(/^\.\//, ""))
|
|
448
|
+
: expandPath(installPaths.hooks);
|
|
449
|
+
const existingSettings = scope === "project"
|
|
450
|
+
? (pathExists(settingsPath) ? JSON.parse(await readFile(settingsPath)) : {})
|
|
451
|
+
: await readSettingsConfig();
|
|
452
|
+
if (!existingSettings.hooks) {
|
|
453
|
+
existingSettings.hooks = {};
|
|
454
|
+
}
|
|
455
|
+
const removed = [];
|
|
456
|
+
let updated = false;
|
|
457
|
+
for (const instanceName of instanceNames) {
|
|
458
|
+
let removedAny = false;
|
|
459
|
+
for (const key of Object.keys(existingSettings.hooks)) {
|
|
460
|
+
const entries = existingSettings.hooks[key];
|
|
461
|
+
const filtered = entries.filter((entry) => {
|
|
462
|
+
return !entry.hooks?.some((hook) => hook.command?.includes(instanceName));
|
|
463
|
+
});
|
|
464
|
+
if (filtered.length !== entries.length) {
|
|
465
|
+
removedAny = true;
|
|
466
|
+
if (filtered.length === 0) {
|
|
467
|
+
delete existingSettings.hooks[key];
|
|
468
|
+
}
|
|
469
|
+
else {
|
|
470
|
+
existingSettings.hooks[key] = filtered;
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
if (removedAny) {
|
|
475
|
+
removed.push(instanceName);
|
|
476
|
+
updated = true;
|
|
477
|
+
}
|
|
478
|
+
await remove(path.join(hooksDir, instanceName));
|
|
479
|
+
}
|
|
480
|
+
if (updated) {
|
|
481
|
+
if (scope === "project" && projectRoot) {
|
|
482
|
+
const { writeFile, mkdir } = await import("node:fs/promises");
|
|
483
|
+
await mkdir(path.dirname(settingsPath), { recursive: true });
|
|
484
|
+
await writeFile(settingsPath, JSON.stringify(existingSettings, null, 2));
|
|
485
|
+
}
|
|
486
|
+
else {
|
|
487
|
+
await writeSettingsConfig(existingSettings);
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
return removed;
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* Install hooks to configuration and files.
|
|
494
|
+
*
|
|
495
|
+
* @param kitName - Name of the kit
|
|
496
|
+
* @param primitives - Hook primitives to install
|
|
497
|
+
* @param completedOps - Completed operations for rollback
|
|
498
|
+
* @param scope - Installation scope
|
|
499
|
+
* @param projectRoot - Project root for project scope
|
|
500
|
+
*/
|
|
501
|
+
async installHooks(kitName, primitives, completedOps, scope = "global", projectRoot) {
|
|
502
|
+
const operations = [];
|
|
503
|
+
const configLocations = this.getConfigLocations(scope);
|
|
504
|
+
const installPaths = this.getInstallationPaths(scope);
|
|
505
|
+
const settingsPath = scope === "project" && projectRoot
|
|
506
|
+
? path.join(projectRoot, configLocations.primary.replace(/^\.\//, ""))
|
|
507
|
+
: expandPath(configLocations.primary);
|
|
508
|
+
const hooksDir = scope === "project" && projectRoot
|
|
509
|
+
? path.join(projectRoot, installPaths.hooks.replace(/^\.\//, ""))
|
|
510
|
+
: expandPath(installPaths.hooks);
|
|
511
|
+
// Ensure hooks directory exists
|
|
512
|
+
await ensureDirectory(hooksDir);
|
|
513
|
+
// Read existing settings
|
|
514
|
+
const existingSettings = scope === "project"
|
|
515
|
+
? (pathExists(settingsPath) ? JSON.parse(await readFile(settingsPath)) : {})
|
|
516
|
+
: await readSettingsConfig();
|
|
517
|
+
const settingsExisted = pathExists(settingsPath);
|
|
518
|
+
// Prepare updated settings
|
|
519
|
+
const updatedSettings = { ...existingSettings };
|
|
520
|
+
if (!updatedSettings.hooks) {
|
|
521
|
+
updatedSettings.hooks = {};
|
|
522
|
+
}
|
|
523
|
+
for (const primitive of primitives) {
|
|
524
|
+
const program = primitive.hookProgram;
|
|
525
|
+
const binding = primitive.hookBinding;
|
|
526
|
+
if (!program || !binding || !primitive.hookEntryPath || !primitive.hookProgramDir) {
|
|
527
|
+
operations.push({
|
|
528
|
+
operation: "merge",
|
|
529
|
+
source: primitive.sourcePath,
|
|
530
|
+
destination: settingsPath,
|
|
531
|
+
success: false,
|
|
532
|
+
error: "Hook primitive missing program or binding metadata",
|
|
533
|
+
});
|
|
534
|
+
continue;
|
|
535
|
+
}
|
|
536
|
+
const instanceName = primitive.instanceName ?? this.getNamespacedName(kitName, primitive.name);
|
|
537
|
+
const hookDir = path.join(hooksDir, instanceName);
|
|
538
|
+
try {
|
|
539
|
+
// Create hook directory
|
|
540
|
+
await ensureDirectory(hookDir);
|
|
541
|
+
completedOps.push({
|
|
542
|
+
type: "directory",
|
|
543
|
+
path: hookDir,
|
|
544
|
+
createdNew: true,
|
|
545
|
+
});
|
|
546
|
+
const targetPath = path.join(hookDir, path.basename(primitive.hookEntryPath));
|
|
547
|
+
const hookInput = {
|
|
548
|
+
instanceName,
|
|
549
|
+
program,
|
|
550
|
+
binding,
|
|
551
|
+
programDir: primitive.hookProgramDir,
|
|
552
|
+
entryPath: primitive.hookEntryPath,
|
|
553
|
+
targetDir: hookDir,
|
|
554
|
+
targetPath,
|
|
555
|
+
scope,
|
|
556
|
+
...(projectRoot ? { projectRoot } : {}),
|
|
557
|
+
};
|
|
558
|
+
const hookInstallation = transformHookConfig(hookInput);
|
|
559
|
+
if (hookInstallation.files) {
|
|
560
|
+
for (const file of hookInstallation.files) {
|
|
561
|
+
if (file.type === "copy" && file.source && file.destination) {
|
|
562
|
+
await copyFile(file.source, file.destination);
|
|
563
|
+
completedOps.push({
|
|
564
|
+
type: "file",
|
|
565
|
+
path: file.destination,
|
|
566
|
+
createdNew: true,
|
|
567
|
+
});
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
if (hookInstallation.config) {
|
|
572
|
+
updatedSettings.hooks = mergeHookConfigs(updatedSettings.hooks, hookInstallation.config);
|
|
573
|
+
}
|
|
574
|
+
operations.push({
|
|
575
|
+
operation: "merge",
|
|
576
|
+
source: primitive.sourcePath,
|
|
577
|
+
destination: settingsPath,
|
|
578
|
+
success: true,
|
|
579
|
+
});
|
|
580
|
+
}
|
|
581
|
+
catch (error) {
|
|
582
|
+
operations.push({
|
|
583
|
+
operation: "merge",
|
|
584
|
+
source: primitive.sourcePath,
|
|
585
|
+
destination: settingsPath,
|
|
586
|
+
success: false,
|
|
587
|
+
error: error instanceof Error ? error.message : String(error),
|
|
588
|
+
});
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
// Write updated settings
|
|
592
|
+
if (scope === "project" && projectRoot) {
|
|
593
|
+
const { writeFile, mkdir } = await import("node:fs/promises");
|
|
594
|
+
await mkdir(path.dirname(settingsPath), { recursive: true });
|
|
595
|
+
await writeFile(settingsPath, JSON.stringify(updatedSettings, null, 2));
|
|
596
|
+
}
|
|
597
|
+
else {
|
|
598
|
+
await writeSettingsConfig(updatedSettings);
|
|
599
|
+
}
|
|
600
|
+
const settingsCompletedOp = {
|
|
601
|
+
type: "file",
|
|
602
|
+
path: settingsPath,
|
|
603
|
+
createdNew: !settingsExisted,
|
|
604
|
+
};
|
|
605
|
+
if (settingsExisted) {
|
|
606
|
+
settingsCompletedOp.previousContent = JSON.stringify(existingSettings, null, 2);
|
|
607
|
+
}
|
|
608
|
+
completedOps.push(settingsCompletedOp);
|
|
609
|
+
return operations;
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
/**
|
|
613
|
+
* Create a Claude Code adapter instance.
|
|
614
|
+
*/
|
|
615
|
+
export function createClaudeCodeAdapter() {
|
|
616
|
+
return new ClaudeCodeAdapter();
|
|
617
|
+
}
|
|
618
|
+
function mapHookBindingToolTemplates(binding, toolMapping) {
|
|
619
|
+
if (!binding.matcher || typeof binding.matcher.tool !== "string") {
|
|
620
|
+
return binding;
|
|
621
|
+
}
|
|
622
|
+
const parsed = parseToolTemplate(binding.matcher.tool);
|
|
623
|
+
if (!parsed) {
|
|
624
|
+
return binding;
|
|
625
|
+
}
|
|
626
|
+
const mapped = toolMapping[parsed.canonicalId];
|
|
627
|
+
const resolvedTool = mapped !== undefined && mapped !== null
|
|
628
|
+
? mapped
|
|
629
|
+
: parsed.fallback ?? parsed.canonicalId;
|
|
630
|
+
return {
|
|
631
|
+
...binding,
|
|
632
|
+
matcher: {
|
|
633
|
+
...binding.matcher,
|
|
634
|
+
tool: resolvedTool,
|
|
635
|
+
},
|
|
636
|
+
};
|
|
637
|
+
}
|
|
638
|
+
// Re-export types and utilities
|
|
639
|
+
export { detectClaudeCode, CLAUDE_CODE_PATHS } from "./detection.js";
|
|
640
|
+
export { claudeCodeToolMapping } from "./tool-mapping.js";
|
|
641
|
+
export { claudeCodeModelMapping } from "./model-mapping.js";
|
|
642
|
+
export * from "./installer.js";
|
|
643
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/claude-code/index.ts"],"names":[],"mappings":"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"}
|