@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,229 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codex installation helpers.
|
|
3
|
+
*
|
|
4
|
+
* Provides utilities for installing primitives to Codex:
|
|
5
|
+
* - MCP server configuration in ~/.codex/mcp.json
|
|
6
|
+
* - Environment variable substitution
|
|
7
|
+
*
|
|
8
|
+
* Codex does not support subagents or hooks.
|
|
9
|
+
*/
|
|
10
|
+
import * as path from "node:path";
|
|
11
|
+
import { expandPath, pathExists, readFile, writeTransformed, ensureDirectory, } from "../file-operations.js";
|
|
12
|
+
import { CODEX_PATHS } from "./detection.js";
|
|
13
|
+
/**
|
|
14
|
+
* Read the MCP configuration file.
|
|
15
|
+
*/
|
|
16
|
+
export async function readMcpConfig() {
|
|
17
|
+
const configPath = expandPath(CODEX_PATHS.mcp);
|
|
18
|
+
if (!pathExists(configPath)) {
|
|
19
|
+
return {};
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
const content = await readFile(configPath);
|
|
23
|
+
return JSON.parse(content);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return {};
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Write the MCP configuration file.
|
|
31
|
+
*/
|
|
32
|
+
export async function writeMcpConfig(config) {
|
|
33
|
+
const configPath = expandPath(CODEX_PATHS.mcp);
|
|
34
|
+
const configDir = path.dirname(configPath);
|
|
35
|
+
await ensureDirectory(configDir);
|
|
36
|
+
await writeTransformed(configPath, JSON.stringify(config, null, 2));
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Process environment variable values.
|
|
40
|
+
*
|
|
41
|
+
* Codex uses ${VAR} syntax for environment variable references.
|
|
42
|
+
*/
|
|
43
|
+
export function processEnvValue(value) {
|
|
44
|
+
return value;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Transform an MCP server configuration for Codex.
|
|
48
|
+
*
|
|
49
|
+
* Codex MCP configuration format:
|
|
50
|
+
* ```json
|
|
51
|
+
* {
|
|
52
|
+
* "servers": {
|
|
53
|
+
* "server-name": {
|
|
54
|
+
* "command": "executable",
|
|
55
|
+
* "args": ["arg1", "arg2"],
|
|
56
|
+
* "env": {
|
|
57
|
+
* "VAR": "${VAR}"
|
|
58
|
+
* }
|
|
59
|
+
* }
|
|
60
|
+
* }
|
|
61
|
+
* }
|
|
62
|
+
* ```
|
|
63
|
+
*
|
|
64
|
+
* Note: Full environment variable transformation with sensitivity handling
|
|
65
|
+
* (env_vars array vs env table) is implemented in transformEnvVars (Phase 7).
|
|
66
|
+
* This function provides basic passthrough for all env vars using ${VAR} syntax.
|
|
67
|
+
*/
|
|
68
|
+
export function transformMcpServerConfig(config) {
|
|
69
|
+
// Only stdio transport is supported for Codex MCP servers
|
|
70
|
+
if (config.transport.type !== "stdio") {
|
|
71
|
+
throw new Error(`Unsupported transport type: ${config.transport.type}. Codex only supports stdio transport.`);
|
|
72
|
+
}
|
|
73
|
+
const entry = {
|
|
74
|
+
command: config.transport.command,
|
|
75
|
+
};
|
|
76
|
+
if (config.transport.args && config.transport.args.length > 0) {
|
|
77
|
+
entry.args = config.transport.args;
|
|
78
|
+
}
|
|
79
|
+
// Basic env var passthrough - full transformation in Phase 7
|
|
80
|
+
if (config.env && Object.keys(config.env).length > 0) {
|
|
81
|
+
entry.env = {};
|
|
82
|
+
for (const [key] of Object.entries(config.env)) {
|
|
83
|
+
// Use passthrough syntax for all env vars
|
|
84
|
+
entry.env[key] = `\${${key}}`;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return entry;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Transform resolved environment variables to Codex format.
|
|
91
|
+
*
|
|
92
|
+
* Codex uses two distinct mechanisms:
|
|
93
|
+
* - `env_vars` array: Variables passed through from shell environment (passthrough)
|
|
94
|
+
* - `env` table: Variables with direct values
|
|
95
|
+
*
|
|
96
|
+
* Rules (per FR-20.4):
|
|
97
|
+
* - usePassthrough: true → Add to env_vars array
|
|
98
|
+
* - usePassthrough: false (has value) → Add to env table
|
|
99
|
+
*/
|
|
100
|
+
export function transformEnvVars(resolved) {
|
|
101
|
+
const env_vars = [];
|
|
102
|
+
const env = {};
|
|
103
|
+
for (const r of resolved) {
|
|
104
|
+
if (r.usePassthrough) {
|
|
105
|
+
env_vars.push(r.name);
|
|
106
|
+
}
|
|
107
|
+
else if (r.value !== undefined) {
|
|
108
|
+
env[r.name] = r.value;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return { env_vars, env };
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Transform resolved headers to Codex format.
|
|
115
|
+
*
|
|
116
|
+
* Codex uses specialized fields for HTTP authentication:
|
|
117
|
+
* - `bearer_token_env_var`: Environment variable containing bearer token (for Authorization headers)
|
|
118
|
+
* - `env_http_headers`: Table of additional headers with env var references
|
|
119
|
+
* - `http_headers`: Table of static header values
|
|
120
|
+
*
|
|
121
|
+
* Bearer Token Detection:
|
|
122
|
+
* The adapter detects bearer token patterns in Authorization headers:
|
|
123
|
+
* 1. Header name is "Authorization" (case-insensitive)
|
|
124
|
+
* 2. Header is marked sensitive: true
|
|
125
|
+
* 3. Uses envVar for the token value
|
|
126
|
+
*
|
|
127
|
+
* Rules (per FR-21.3):
|
|
128
|
+
* - Authorization + sensitive + envVar → bearer_token_env_var = "VAR"
|
|
129
|
+
* - Other headers with envVar → env_http_headers.Header = "$VAR"
|
|
130
|
+
* - Headers with static value → http_headers.Header = "value"
|
|
131
|
+
*/
|
|
132
|
+
export function transformHeaders(resolved) {
|
|
133
|
+
let bearer_token_env_var;
|
|
134
|
+
const env_http_headers = {};
|
|
135
|
+
const http_headers = {};
|
|
136
|
+
for (const r of resolved) {
|
|
137
|
+
// Check for Authorization header with bearer token pattern
|
|
138
|
+
if (r.name.toLowerCase() === "authorization" && r.sensitive && r.envVar) {
|
|
139
|
+
bearer_token_env_var = r.envVar;
|
|
140
|
+
}
|
|
141
|
+
else if (r.usePassthrough && r.envVar) {
|
|
142
|
+
env_http_headers[r.name] = `$${r.envVar}`;
|
|
143
|
+
}
|
|
144
|
+
else if (r.value !== undefined) {
|
|
145
|
+
http_headers[r.name] = r.value;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return { bearer_token_env_var, env_http_headers, http_headers };
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Add an MCP server to the configuration.
|
|
152
|
+
*
|
|
153
|
+
* @param namespacedName - The namespaced server name (e.g., "kit.server")
|
|
154
|
+
* @param config - The MCP server configuration
|
|
155
|
+
*/
|
|
156
|
+
export async function addMcpServer(namespacedName, config) {
|
|
157
|
+
try {
|
|
158
|
+
const mcpConfig = await readMcpConfig();
|
|
159
|
+
if (!mcpConfig.servers) {
|
|
160
|
+
mcpConfig.servers = {};
|
|
161
|
+
}
|
|
162
|
+
mcpConfig.servers[namespacedName] = transformMcpServerConfig(config);
|
|
163
|
+
await writeMcpConfig(mcpConfig);
|
|
164
|
+
return {
|
|
165
|
+
operation: "merge",
|
|
166
|
+
destination: expandPath(CODEX_PATHS.mcp),
|
|
167
|
+
success: true,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
return {
|
|
172
|
+
operation: "merge",
|
|
173
|
+
destination: expandPath(CODEX_PATHS.mcp),
|
|
174
|
+
success: false,
|
|
175
|
+
error: error instanceof Error ? error.message : String(error),
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Remove an MCP server from the configuration.
|
|
181
|
+
*
|
|
182
|
+
* @param namespacedName - The namespaced server name to remove
|
|
183
|
+
*/
|
|
184
|
+
export async function removeMcpServer(namespacedName) {
|
|
185
|
+
const mcpConfig = await readMcpConfig();
|
|
186
|
+
if (!mcpConfig.servers || !mcpConfig.servers[namespacedName]) {
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
delete mcpConfig.servers[namespacedName];
|
|
190
|
+
await writeMcpConfig(mcpConfig);
|
|
191
|
+
return true;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Get all installed MCP servers for a specific kit.
|
|
195
|
+
*
|
|
196
|
+
* @param kitName - The kit name prefix to filter by
|
|
197
|
+
*/
|
|
198
|
+
export async function getKitMcpServers(kitName) {
|
|
199
|
+
const mcpConfig = await readMcpConfig();
|
|
200
|
+
if (!mcpConfig.servers) {
|
|
201
|
+
return [];
|
|
202
|
+
}
|
|
203
|
+
const prefix = `${kitName}.`;
|
|
204
|
+
return Object.keys(mcpConfig.servers).filter((name) => name.startsWith(prefix));
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Remove all MCP servers for a specific kit.
|
|
208
|
+
*
|
|
209
|
+
* @param kitName - The kit name prefix to remove
|
|
210
|
+
*/
|
|
211
|
+
export async function removeKitMcpServers(kitName) {
|
|
212
|
+
const mcpConfig = await readMcpConfig();
|
|
213
|
+
const removed = [];
|
|
214
|
+
if (!mcpConfig.servers) {
|
|
215
|
+
return removed;
|
|
216
|
+
}
|
|
217
|
+
const prefix = `${kitName}.`;
|
|
218
|
+
for (const name of Object.keys(mcpConfig.servers)) {
|
|
219
|
+
if (name.startsWith(prefix)) {
|
|
220
|
+
delete mcpConfig.servers[name];
|
|
221
|
+
removed.push(name);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
if (removed.length > 0) {
|
|
225
|
+
await writeMcpConfig(mcpConfig);
|
|
226
|
+
}
|
|
227
|
+
return removed;
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=installer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../../../src/adapters/codex/installer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,OAAO,EACL,UAAU,EACV,UAAU,EACV,QAAQ,EACR,gBAAgB,EAChB,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AA4B7C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAE/C,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAmB,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAsB;IACzD,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC;IACjC,MAAM,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAuB;IAC9D,0DAA0D;IAC1D,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,CAAC,SAAS,CAAC,IAAI,wCAAwC,CAAC,CAAC;IAChH,CAAC;IAED,MAAM,KAAK,GAAwB;QACjC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO;KAClC,CAAC;IAEF,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9D,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;IACrC,CAAC;IAED,6DAA6D;IAC7D,IAAI,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrD,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC;QACf,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,0CAA0C;YAC1C,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAuBD;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAA0B;IACzD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,GAAG,GAA2B,EAAE,CAAC;IAEvC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;YACrB,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;aAAM,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACjC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAA0B;IACzD,IAAI,oBAAwC,CAAC;IAC7C,MAAM,gBAAgB,GAA2B,EAAE,CAAC;IACpD,MAAM,YAAY,GAA2B,EAAE,CAAC;IAEhD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,2DAA2D;QAC3D,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,eAAe,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YACxE,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;QAClC,CAAC;aAAM,IAAI,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YACxC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;QAC5C,CAAC;aAAM,IAAI,CAAC,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YACjC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;QACjC,CAAC;IACH,CAAC;IAED,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,YAAY,EAAE,CAAC;AAClE,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,cAAsB,EACtB,MAAuB;IAEvB,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;QAExC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACvB,SAAS,CAAC,OAAO,GAAG,EAAE,CAAC;QACzB,CAAC;QAED,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAErE,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;QAEhC,OAAO;YACL,SAAS,EAAE,OAAO;YAClB,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC;YACxC,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,SAAS,EAAE,OAAO;YAClB,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC;YACxC,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,cAAsB;IAC1D,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;IAExC,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;QAC7D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACzC,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAe;IACpD,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;IAExC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC;IAC7B,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACpD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CACxB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAAe;IACvD,MAAM,SAAS,GAAG,MAAM,aAAa,EAAE,CAAC;IACxC,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,OAAO,GAAG,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QAClD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5B,OAAO,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-mapping.d.ts","sourceRoot":"","sources":["../../../src/adapters/codex/model-mapping.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,eAAO,MAAM,iBAAiB,EAAE,YAM/B,CAAC;AAEF,wBAAgB,oBAAoB,IAAI,YAAY,CAEnD"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codex model mapping.
|
|
3
|
+
*/
|
|
4
|
+
export const codexModelMapping = {
|
|
5
|
+
fast: "gpt-5.1-codex-mini",
|
|
6
|
+
standard: "gpt-5.2-codex",
|
|
7
|
+
power: "gpt-5.1-codex-max",
|
|
8
|
+
auto: null,
|
|
9
|
+
inherit: null,
|
|
10
|
+
};
|
|
11
|
+
export function getCodexModelMapping() {
|
|
12
|
+
return codexModelMapping;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=model-mapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-mapping.js","sourceRoot":"","sources":["../../../src/adapters/codex/model-mapping.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,CAAC,MAAM,iBAAiB,GAAiB;IAC7C,IAAI,EAAE,oBAAoB;IAC1B,QAAQ,EAAE,eAAe;IACzB,KAAK,EAAE,mBAAmB;IAC1B,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,IAAI;CACd,CAAC;AAEF,MAAM,UAAU,oBAAoB;IAClC,OAAO,iBAAiB,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codex tool mapping.
|
|
3
|
+
*
|
|
4
|
+
* Maps canonical tool identifiers to Codex's native tool names.
|
|
5
|
+
* Codex has limited tool support compared to Claude Code.
|
|
6
|
+
*/
|
|
7
|
+
import type { ToolMapping } from "../types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Codex tool mapping.
|
|
10
|
+
*
|
|
11
|
+
* Codex uses snake_case naming for tools and has more limited
|
|
12
|
+
* tool support than Claude Code.
|
|
13
|
+
*/
|
|
14
|
+
export declare const codexToolMapping: ToolMapping;
|
|
15
|
+
/**
|
|
16
|
+
* Get the Codex tool mapping.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getCodexToolMapping(): ToolMapping;
|
|
19
|
+
//# sourceMappingURL=tool-mapping.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-mapping.d.ts","sourceRoot":"","sources":["../../../src/adapters/codex/tool-mapping.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,EAAE,WAY9B,CAAC;AAEF;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,WAAW,CAEjD"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codex tool mapping.
|
|
3
|
+
*
|
|
4
|
+
* Maps canonical tool identifiers to Codex's native tool names.
|
|
5
|
+
* Codex has limited tool support compared to Claude Code.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Codex tool mapping.
|
|
9
|
+
*
|
|
10
|
+
* Codex uses snake_case naming for tools and has more limited
|
|
11
|
+
* tool support than Claude Code.
|
|
12
|
+
*/
|
|
13
|
+
export const codexToolMapping = {
|
|
14
|
+
shell: "shell",
|
|
15
|
+
read: "read_file",
|
|
16
|
+
write: "write_file",
|
|
17
|
+
edit: "edit_file",
|
|
18
|
+
grep: "search",
|
|
19
|
+
glob: "find_files",
|
|
20
|
+
list: "list_directory",
|
|
21
|
+
webfetch: "web_fetch",
|
|
22
|
+
websearch: "web_search",
|
|
23
|
+
todo: "task_list",
|
|
24
|
+
ask: "ask_user",
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Get the Codex tool mapping.
|
|
28
|
+
*/
|
|
29
|
+
export function getCodexToolMapping() {
|
|
30
|
+
return codexToolMapping;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=tool-mapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-mapping.js","sourceRoot":"","sources":["../../../src/adapters/codex/tool-mapping.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAgB;IAC3C,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,YAAY;IACnB,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,YAAY;IAClB,IAAI,EAAE,gBAAgB;IACtB,QAAQ,EAAE,WAAW;IACrB,SAAS,EAAE,YAAY;IACvB,IAAI,EAAE,WAAW;IACjB,GAAG,EAAE,UAAU;CAChB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,gBAAgB,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command parsing utilities for canonical command format.
|
|
3
|
+
*
|
|
4
|
+
* Parses and validates commands in the canonical format:
|
|
5
|
+
*
|
|
6
|
+
* ```markdown
|
|
7
|
+
* ---
|
|
8
|
+
* description: Brief description (required)
|
|
9
|
+
* argumentHint: [OPTIONAL_ARGS] (optional)
|
|
10
|
+
* ---
|
|
11
|
+
*
|
|
12
|
+
* Command prompt content here.
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
import type { CommandFrontmatter } from "./types.js";
|
|
16
|
+
/**
|
|
17
|
+
* Error thrown when command parsing fails.
|
|
18
|
+
*/
|
|
19
|
+
export declare class CommandParseError extends Error {
|
|
20
|
+
constructor(message: string);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Parse and validate command frontmatter from markdown content.
|
|
24
|
+
*
|
|
25
|
+
* Validates that the content has:
|
|
26
|
+
* - YAML frontmatter block (required)
|
|
27
|
+
* - `description` field in frontmatter (required)
|
|
28
|
+
* - Non-empty body content (required)
|
|
29
|
+
*
|
|
30
|
+
* @param content - Raw markdown content with frontmatter
|
|
31
|
+
* @returns Validated CommandFrontmatter
|
|
32
|
+
* @throws CommandParseError if validation fails
|
|
33
|
+
*/
|
|
34
|
+
export declare function parseCommandFrontmatter(content: string): CommandFrontmatter;
|
|
35
|
+
/**
|
|
36
|
+
* Extract the body content from a command markdown file.
|
|
37
|
+
*
|
|
38
|
+
* Returns the content after the YAML frontmatter block.
|
|
39
|
+
* If no frontmatter is present, returns the entire content.
|
|
40
|
+
*
|
|
41
|
+
* @param content - Raw markdown content
|
|
42
|
+
* @returns Body content (trimmed)
|
|
43
|
+
*/
|
|
44
|
+
export declare function extractCommandBody(content: string): string;
|
|
45
|
+
/**
|
|
46
|
+
* Strip a specific field from the YAML frontmatter.
|
|
47
|
+
*
|
|
48
|
+
* Returns the original content with the specified field removed from frontmatter.
|
|
49
|
+
* If the field doesn't exist or there's no frontmatter, returns content unchanged.
|
|
50
|
+
*
|
|
51
|
+
* @param content - Raw markdown content with frontmatter
|
|
52
|
+
* @param field - Field name to strip (e.g., "argumentHint")
|
|
53
|
+
* @returns Content with field removed from frontmatter
|
|
54
|
+
*/
|
|
55
|
+
export declare function stripFrontmatterField(content: string, field: string): string;
|
|
56
|
+
/**
|
|
57
|
+
* Rename a frontmatter field within the YAML block.
|
|
58
|
+
*
|
|
59
|
+
* Returns content unchanged if the field is not present or no frontmatter exists.
|
|
60
|
+
*/
|
|
61
|
+
export declare function renameFrontmatterField(content: string, from: string, to: string): string;
|
|
62
|
+
/**
|
|
63
|
+
* Validate command content without parsing.
|
|
64
|
+
*
|
|
65
|
+
* Checks that the content meets all canonical format requirements.
|
|
66
|
+
*
|
|
67
|
+
* @param content - Raw markdown content
|
|
68
|
+
* @returns true if valid
|
|
69
|
+
* @throws CommandParseError if validation fails
|
|
70
|
+
*/
|
|
71
|
+
export declare function validateCommandContent(content: string): boolean;
|
|
72
|
+
//# sourceMappingURL=command-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-parser.d.ts","sourceRoot":"","sources":["../../src/adapters/command-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAI5B;AA6ED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB,CAwC3E;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CA6B5E;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,GACT,MAAM,CA6BR;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAI/D"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Command parsing utilities for canonical command format.
|
|
3
|
+
*
|
|
4
|
+
* Parses and validates commands in the canonical format:
|
|
5
|
+
*
|
|
6
|
+
* ```markdown
|
|
7
|
+
* ---
|
|
8
|
+
* description: Brief description (required)
|
|
9
|
+
* argumentHint: [OPTIONAL_ARGS] (optional)
|
|
10
|
+
* ---
|
|
11
|
+
*
|
|
12
|
+
* Command prompt content here.
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Error thrown when command parsing fails.
|
|
17
|
+
*/
|
|
18
|
+
export class CommandParseError extends Error {
|
|
19
|
+
constructor(message) {
|
|
20
|
+
super(message);
|
|
21
|
+
this.name = "CommandParseError";
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Regex to match YAML frontmatter block.
|
|
26
|
+
* Matches content between --- delimiters at the start of the file.
|
|
27
|
+
*/
|
|
28
|
+
const FRONTMATTER_REGEX = /^---\r?\n([\s\S]*?)\r?\n---\r?\n([\s\S]*)$/;
|
|
29
|
+
/**
|
|
30
|
+
* Regex to match a YAML key-value pair.
|
|
31
|
+
* Supports alphanumeric keys with hyphens and underscores.
|
|
32
|
+
*/
|
|
33
|
+
const YAML_KEY_VALUE_REGEX = /^([\w-]+):\s*(.*)$/;
|
|
34
|
+
/**
|
|
35
|
+
* Parse raw frontmatter and body from markdown content.
|
|
36
|
+
*
|
|
37
|
+
* @param content - Raw markdown content
|
|
38
|
+
* @returns Object with frontmatter record, body string, and hasFrontmatter flag
|
|
39
|
+
*/
|
|
40
|
+
function parseRaw(content) {
|
|
41
|
+
const match = content.match(FRONTMATTER_REGEX);
|
|
42
|
+
if (!match || !match[1] || match[2] === undefined) {
|
|
43
|
+
return {
|
|
44
|
+
frontmatter: {},
|
|
45
|
+
body: content,
|
|
46
|
+
hasFrontmatter: false,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
const frontmatterYaml = match[1];
|
|
50
|
+
const body = match[2];
|
|
51
|
+
// Parse YAML frontmatter
|
|
52
|
+
const frontmatter = {};
|
|
53
|
+
const lines = frontmatterYaml.split("\n");
|
|
54
|
+
for (const line of lines) {
|
|
55
|
+
const kvMatch = line.match(YAML_KEY_VALUE_REGEX);
|
|
56
|
+
if (kvMatch && kvMatch[1] && kvMatch[2] !== undefined) {
|
|
57
|
+
const key = kvMatch[1];
|
|
58
|
+
let value = kvMatch[2].trim();
|
|
59
|
+
// Handle quoted strings
|
|
60
|
+
if (typeof value === "string" && value.startsWith('"') && value.endsWith('"')) {
|
|
61
|
+
value = value.slice(1, -1);
|
|
62
|
+
}
|
|
63
|
+
else if (typeof value === "string" && value.startsWith("'") && value.endsWith("'")) {
|
|
64
|
+
value = value.slice(1, -1);
|
|
65
|
+
}
|
|
66
|
+
else if (value === "true") {
|
|
67
|
+
value = true;
|
|
68
|
+
}
|
|
69
|
+
else if (value === "false") {
|
|
70
|
+
value = false;
|
|
71
|
+
}
|
|
72
|
+
else if (typeof value === "string" && value !== "" && !isNaN(Number(value))) {
|
|
73
|
+
value = Number(value);
|
|
74
|
+
}
|
|
75
|
+
frontmatter[key] = value;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
frontmatter,
|
|
80
|
+
body,
|
|
81
|
+
hasFrontmatter: true,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Parse and validate command frontmatter from markdown content.
|
|
86
|
+
*
|
|
87
|
+
* Validates that the content has:
|
|
88
|
+
* - YAML frontmatter block (required)
|
|
89
|
+
* - `description` field in frontmatter (required)
|
|
90
|
+
* - Non-empty body content (required)
|
|
91
|
+
*
|
|
92
|
+
* @param content - Raw markdown content with frontmatter
|
|
93
|
+
* @returns Validated CommandFrontmatter
|
|
94
|
+
* @throws CommandParseError if validation fails
|
|
95
|
+
*/
|
|
96
|
+
export function parseCommandFrontmatter(content) {
|
|
97
|
+
const { frontmatter, body, hasFrontmatter } = parseRaw(content);
|
|
98
|
+
// Validate frontmatter exists
|
|
99
|
+
if (!hasFrontmatter) {
|
|
100
|
+
throw new CommandParseError("command missing YAML frontmatter; expected ---\\n...\\n--- at start of file");
|
|
101
|
+
}
|
|
102
|
+
// Validate description exists and is non-empty
|
|
103
|
+
const description = frontmatter["description"];
|
|
104
|
+
if (description === undefined || description === null) {
|
|
105
|
+
throw new CommandParseError("command missing required 'description' field in frontmatter");
|
|
106
|
+
}
|
|
107
|
+
if (typeof description !== "string") {
|
|
108
|
+
throw new CommandParseError(`command 'description' must be a string; got ${typeof description}`);
|
|
109
|
+
}
|
|
110
|
+
if (description.trim() === "") {
|
|
111
|
+
throw new CommandParseError("command 'description' field cannot be empty");
|
|
112
|
+
}
|
|
113
|
+
// Validate body exists and is non-empty
|
|
114
|
+
if (body.trim() === "") {
|
|
115
|
+
throw new CommandParseError("command body cannot be empty; content after frontmatter is required");
|
|
116
|
+
}
|
|
117
|
+
// Extract argumentHint (camelCase in YAML)
|
|
118
|
+
const argumentHint = frontmatter["argumentHint"];
|
|
119
|
+
const result = {
|
|
120
|
+
description: description.trim(),
|
|
121
|
+
};
|
|
122
|
+
if (argumentHint !== undefined && argumentHint !== null) {
|
|
123
|
+
if (typeof argumentHint !== "string") {
|
|
124
|
+
throw new CommandParseError(`command 'argumentHint' must be a string; got ${typeof argumentHint}`);
|
|
125
|
+
}
|
|
126
|
+
result.argumentHint = argumentHint.trim();
|
|
127
|
+
}
|
|
128
|
+
return result;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Extract the body content from a command markdown file.
|
|
132
|
+
*
|
|
133
|
+
* Returns the content after the YAML frontmatter block.
|
|
134
|
+
* If no frontmatter is present, returns the entire content.
|
|
135
|
+
*
|
|
136
|
+
* @param content - Raw markdown content
|
|
137
|
+
* @returns Body content (trimmed)
|
|
138
|
+
*/
|
|
139
|
+
export function extractCommandBody(content) {
|
|
140
|
+
const { body } = parseRaw(content);
|
|
141
|
+
return body.trim();
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Strip a specific field from the YAML frontmatter.
|
|
145
|
+
*
|
|
146
|
+
* Returns the original content with the specified field removed from frontmatter.
|
|
147
|
+
* If the field doesn't exist or there's no frontmatter, returns content unchanged.
|
|
148
|
+
*
|
|
149
|
+
* @param content - Raw markdown content with frontmatter
|
|
150
|
+
* @param field - Field name to strip (e.g., "argumentHint")
|
|
151
|
+
* @returns Content with field removed from frontmatter
|
|
152
|
+
*/
|
|
153
|
+
export function stripFrontmatterField(content, field) {
|
|
154
|
+
const match = content.match(FRONTMATTER_REGEX);
|
|
155
|
+
if (!match || !match[1] || match[2] === undefined) {
|
|
156
|
+
// No frontmatter, return unchanged
|
|
157
|
+
return content;
|
|
158
|
+
}
|
|
159
|
+
const frontmatterYaml = match[1];
|
|
160
|
+
const body = match[2];
|
|
161
|
+
// Filter out lines that match the field
|
|
162
|
+
const lines = frontmatterYaml.split("\n");
|
|
163
|
+
const filteredLines = lines.filter((line) => {
|
|
164
|
+
const kvMatch = line.match(YAML_KEY_VALUE_REGEX);
|
|
165
|
+
if (kvMatch && kvMatch[1]) {
|
|
166
|
+
return kvMatch[1] !== field;
|
|
167
|
+
}
|
|
168
|
+
return true;
|
|
169
|
+
});
|
|
170
|
+
// If no lines changed, return original
|
|
171
|
+
if (filteredLines.length === lines.length) {
|
|
172
|
+
return content;
|
|
173
|
+
}
|
|
174
|
+
// Reconstruct the content
|
|
175
|
+
const newFrontmatter = filteredLines.join("\n");
|
|
176
|
+
return `---\n${newFrontmatter}\n---\n${body}`;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Rename a frontmatter field within the YAML block.
|
|
180
|
+
*
|
|
181
|
+
* Returns content unchanged if the field is not present or no frontmatter exists.
|
|
182
|
+
*/
|
|
183
|
+
export function renameFrontmatterField(content, from, to) {
|
|
184
|
+
const match = content.match(FRONTMATTER_REGEX);
|
|
185
|
+
if (!match || !match[1] || match[2] === undefined) {
|
|
186
|
+
return content;
|
|
187
|
+
}
|
|
188
|
+
const frontmatterYaml = match[1];
|
|
189
|
+
const body = match[2];
|
|
190
|
+
let changed = false;
|
|
191
|
+
const lines = frontmatterYaml.split("\n");
|
|
192
|
+
const renamedLines = lines.map((line) => {
|
|
193
|
+
const kvMatch = line.match(YAML_KEY_VALUE_REGEX);
|
|
194
|
+
if (kvMatch && kvMatch[1] && kvMatch[2] !== undefined) {
|
|
195
|
+
if (kvMatch[1] === from) {
|
|
196
|
+
changed = true;
|
|
197
|
+
return `${to}: ${kvMatch[2]}`;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return line;
|
|
201
|
+
});
|
|
202
|
+
if (!changed) {
|
|
203
|
+
return content;
|
|
204
|
+
}
|
|
205
|
+
const newFrontmatter = renamedLines.join("\n");
|
|
206
|
+
return `---\n${newFrontmatter}\n---\n${body}`;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Validate command content without parsing.
|
|
210
|
+
*
|
|
211
|
+
* Checks that the content meets all canonical format requirements.
|
|
212
|
+
*
|
|
213
|
+
* @param content - Raw markdown content
|
|
214
|
+
* @returns true if valid
|
|
215
|
+
* @throws CommandParseError if validation fails
|
|
216
|
+
*/
|
|
217
|
+
export function validateCommandContent(content) {
|
|
218
|
+
// parseCommandFrontmatter performs all validation
|
|
219
|
+
parseCommandFrontmatter(content);
|
|
220
|
+
return true;
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=command-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-parser.js","sourceRoot":"","sources":["../../src/adapters/command-parser.ts"],"names":[],"mappings":"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"}
|