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