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