@hashicorp/kits 0.1.19 → 0.1.20
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 +2 -1
- package/dist/adapters/claude-code/index.d.ts +1 -1
- package/dist/adapters/claude-code/index.js +1 -1
- package/dist/adapters/codex/detection.d.ts +4 -3
- package/dist/adapters/codex/detection.d.ts.map +1 -1
- package/dist/adapters/codex/detection.js +6 -5
- package/dist/adapters/codex/detection.js.map +1 -1
- package/dist/adapters/codex/index.d.ts +5 -18
- package/dist/adapters/codex/index.d.ts.map +1 -1
- package/dist/adapters/codex/index.js +32 -46
- package/dist/adapters/codex/index.js.map +1 -1
- package/dist/adapters/codex/installer.d.ts +17 -21
- package/dist/adapters/codex/installer.d.ts.map +1 -1
- package/dist/adapters/codex/installer.js +45 -42
- package/dist/adapters/codex/installer.js.map +1 -1
- package/dist/validation/schema-registry.d.ts +0 -1
- package/dist/validation/schema-registry.d.ts.map +1 -1
- package/dist/validation/schema-registry.js +41 -70
- package/dist/validation/schema-registry.js.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -57,7 +57,7 @@ Kits can be installed at two scopes:
|
|
|
57
57
|
- **Global** (`--global`): user-level installs (e.g., `~/.claude/`), available across projects.
|
|
58
58
|
- **Project** (`--project`): repo-level installs (e.g., `.claude/`), scoped to the current project.
|
|
59
59
|
|
|
60
|
-
**Scope limitations:** Some harnesses limit which primitives are supported at project scope. For example,
|
|
60
|
+
**Scope limitations:** Some harnesses limit which primitives are supported at project scope. For example, GitHub Copilot commands and hooks are project-only.
|
|
61
61
|
|
|
62
62
|
Hook programs are stored in the kit hook store:
|
|
63
63
|
- Global scope: `~/.agents/hooks/`
|
|
@@ -129,6 +129,7 @@ npm install
|
|
|
129
129
|
npm run build
|
|
130
130
|
npm run typecheck
|
|
131
131
|
npm run lint
|
|
132
|
+
npm run check:schema-versioning
|
|
132
133
|
npm test
|
|
133
134
|
npm run test:integration
|
|
134
135
|
```
|
|
@@ -34,7 +34,7 @@ export declare class ClaudeCodeAdapter extends BaseAdapter {
|
|
|
34
34
|
readonly name = "claude-code";
|
|
35
35
|
readonly displayName = "Claude Code";
|
|
36
36
|
readonly version = "1.0.0";
|
|
37
|
-
readonly supportedHarnessVersions = ">=
|
|
37
|
+
readonly supportedHarnessVersions = ">=2.0.0";
|
|
38
38
|
/**
|
|
39
39
|
* Get supported installation scopes.
|
|
40
40
|
*
|
|
@@ -40,7 +40,7 @@ export class ClaudeCodeAdapter extends BaseAdapter {
|
|
|
40
40
|
name = "claude-code";
|
|
41
41
|
displayName = "Claude Code";
|
|
42
42
|
version = "1.0.0";
|
|
43
|
-
supportedHarnessVersions = ">=
|
|
43
|
+
supportedHarnessVersions = ">=2.0.0";
|
|
44
44
|
/**
|
|
45
45
|
* Get supported installation scopes.
|
|
46
46
|
*
|
|
@@ -14,7 +14,6 @@ export declare const CODEX_PATHS: {
|
|
|
14
14
|
readonly configToml: "~/.codex/config.toml";
|
|
15
15
|
readonly prompts: "~/.codex/prompts/";
|
|
16
16
|
readonly skills: "~/.codex/skills/";
|
|
17
|
-
readonly mcp: "~/.codex/mcp.json";
|
|
18
17
|
};
|
|
19
18
|
/**
|
|
20
19
|
* Check if the codex binary is available in PATH.
|
|
@@ -29,9 +28,11 @@ export declare function getCodexVersion(): Promise<string | undefined>;
|
|
|
29
28
|
*/
|
|
30
29
|
export declare function checkConfigToml(): boolean;
|
|
31
30
|
/**
|
|
32
|
-
* Check if
|
|
31
|
+
* Check if Codex MCP configuration exists.
|
|
32
|
+
*
|
|
33
|
+
* MCP is configured inside config.toml.
|
|
33
34
|
*/
|
|
34
|
-
export declare function
|
|
35
|
+
export declare function checkMcpConfig(): boolean;
|
|
35
36
|
/**
|
|
36
37
|
* Check if installation directories exist.
|
|
37
38
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detection.d.ts","sourceRoot":"","sources":["../../../src/adapters/codex/detection.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAKtE;;GAEG;AACH,eAAO,MAAM,WAAW
|
|
1
|
+
{"version":3,"file":"detection.d.ts","sourceRoot":"","sources":["../../../src/adapters/codex/detection.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAKtE;;GAEG;AACH,eAAO,MAAM,WAAW;;;;CAId,CAAC;AAEX;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CAOzD;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CASnE;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI;IACxC,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;CAChB,CAOA;AAED;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAaxE;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,eAAe,CAAC,CA+C5D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,iBAAiB,CAM7D"}
|
|
@@ -17,7 +17,6 @@ export const CODEX_PATHS = {
|
|
|
17
17
|
configToml: "~/.codex/config.toml",
|
|
18
18
|
prompts: "~/.codex/prompts/",
|
|
19
19
|
skills: "~/.codex/skills/",
|
|
20
|
-
mcp: "~/.codex/mcp.json",
|
|
21
20
|
};
|
|
22
21
|
/**
|
|
23
22
|
* Check if the codex binary is available in PATH.
|
|
@@ -52,10 +51,12 @@ export function checkConfigToml() {
|
|
|
52
51
|
return pathExists(CODEX_PATHS.configToml);
|
|
53
52
|
}
|
|
54
53
|
/**
|
|
55
|
-
* Check if
|
|
54
|
+
* Check if Codex MCP configuration exists.
|
|
55
|
+
*
|
|
56
|
+
* MCP is configured inside config.toml.
|
|
56
57
|
*/
|
|
57
|
-
export function
|
|
58
|
-
return pathExists(CODEX_PATHS.
|
|
58
|
+
export function checkMcpConfig() {
|
|
59
|
+
return pathExists(CODEX_PATHS.configToml);
|
|
59
60
|
}
|
|
60
61
|
/**
|
|
61
62
|
* Check if installation directories exist.
|
|
@@ -96,7 +97,7 @@ export async function detectCodex() {
|
|
|
96
97
|
const [hasBinary, hasConfig, hasMcp] = await Promise.all([
|
|
97
98
|
checkCodexBinary(),
|
|
98
99
|
Promise.resolve(checkConfigToml()),
|
|
99
|
-
Promise.resolve(
|
|
100
|
+
Promise.resolve(checkMcpConfig()),
|
|
100
101
|
]);
|
|
101
102
|
const detected = hasBinary || hasConfig;
|
|
102
103
|
if (!detected) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detection.js","sourceRoot":"","sources":["../../../src/adapters/codex/detection.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEzE,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,UAAU,EAAE,sBAAsB;IAClC,OAAO,EAAE,mBAAmB;IAC5B,MAAM,EAAE,kBAAkB;
|
|
1
|
+
{"version":3,"file":"detection.js","sourceRoot":"","sources":["../../../src/adapters/codex/detection.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Codex is an AI coding assistant with support for:
|
|
5
5
|
* - Commands: ~/.codex/prompts/{kit}.{name}.md
|
|
6
6
|
* - Skills: ~/.codex/skills/{kit}.{name}/
|
|
7
|
-
* - MCP Servers: ~/.codex/
|
|
7
|
+
* - MCP Servers: ~/.codex/config.toml
|
|
8
8
|
*
|
|
9
9
|
* Codex does NOT support:
|
|
10
10
|
* - Subagents
|
|
@@ -17,12 +17,10 @@ import { BaseAdapter } from "../base-adapter.js";
|
|
|
17
17
|
import type { CompletedOperation } from "../file-operations.js";
|
|
18
18
|
/**
|
|
19
19
|
* Project-scope paths for Codex.
|
|
20
|
-
*
|
|
21
|
-
* Note: Codex only supports skills at project scope.
|
|
22
|
-
* Commands and MCP are global-only.
|
|
23
20
|
*/
|
|
24
21
|
export declare const CODEX_PROJECT_PATHS: {
|
|
25
22
|
readonly configToml: ".codex/config.toml";
|
|
23
|
+
readonly prompts: ".codex/prompts/";
|
|
26
24
|
readonly skills: ".codex/skills/";
|
|
27
25
|
};
|
|
28
26
|
/**
|
|
@@ -30,9 +28,6 @@ export declare const CODEX_PROJECT_PATHS: {
|
|
|
30
28
|
*
|
|
31
29
|
* Provides support for commands, skills, and MCP servers.
|
|
32
30
|
* Does not support subagents or hooks.
|
|
33
|
-
*
|
|
34
|
-
* IMPORTANT: At project scope, Codex only supports skills.
|
|
35
|
-
* Commands and MCP servers are global-only.
|
|
36
31
|
*/
|
|
37
32
|
export declare class CodexAdapter extends BaseAdapter {
|
|
38
33
|
readonly name = "codex";
|
|
@@ -41,21 +36,14 @@ export declare class CodexAdapter extends BaseAdapter {
|
|
|
41
36
|
readonly supportedHarnessVersions = ">=1.0.0";
|
|
42
37
|
/**
|
|
43
38
|
* Get supported installation scopes.
|
|
44
|
-
*
|
|
45
|
-
* Codex supports both global and project scopes,
|
|
46
|
-
* but with different primitive support at each scope.
|
|
47
39
|
*/
|
|
48
40
|
getSupportedScopes(): InstallationScope[];
|
|
49
41
|
/**
|
|
50
42
|
* Get supported primitive types at the given scope.
|
|
51
43
|
*
|
|
52
|
-
* Codex supports:
|
|
53
|
-
* - Global: commands, skills, mcp
|
|
54
|
-
* - Project: skills only (commands and mcp are global-only)
|
|
55
|
-
*
|
|
56
44
|
* @param scope - Installation scope (defaults to "global")
|
|
57
45
|
*/
|
|
58
|
-
getSupportedPrimitives(
|
|
46
|
+
getSupportedPrimitives(_scope?: InstallationScope): PrimitiveType[];
|
|
59
47
|
/**
|
|
60
48
|
* Get installation paths for file-based primitives.
|
|
61
49
|
*
|
|
@@ -138,7 +126,6 @@ export declare class CodexAdapter extends BaseAdapter {
|
|
|
138
126
|
* Update harness configuration for MCP servers.
|
|
139
127
|
*
|
|
140
128
|
* Codex only needs MCP configuration updates (no hooks support).
|
|
141
|
-
* MCP is only supported at global scope.
|
|
142
129
|
*
|
|
143
130
|
* @param kit - Kit manifest
|
|
144
131
|
* @param resolvedPrimitives - Resolved primitives to install
|
|
@@ -147,14 +134,14 @@ export declare class CodexAdapter extends BaseAdapter {
|
|
|
147
134
|
* @param scope - Installation scope
|
|
148
135
|
* @param projectRoot - Project root for project scope
|
|
149
136
|
*/
|
|
150
|
-
protected updateConfiguration(kit: KitManifest, resolvedPrimitives: ResolvedPrimitive[], dryRun: boolean, completedOps: CompletedOperation[], scope?: InstallationScope,
|
|
137
|
+
protected updateConfiguration(kit: KitManifest, resolvedPrimitives: ResolvedPrimitive[], dryRun: boolean, completedOps: CompletedOperation[], scope?: InstallationScope, projectRoot?: string, envResolutions?: EnvVarResolutionResult[]): Promise<{
|
|
151
138
|
operations: FileOperationResult[];
|
|
152
139
|
}>;
|
|
153
140
|
/**
|
|
154
141
|
* Install MCP servers to configuration.
|
|
155
142
|
*/
|
|
156
143
|
private installMcpServers;
|
|
157
|
-
removeMcpServers(instanceNames: string[], scope?: InstallationScope): Promise<string[]>;
|
|
144
|
+
removeMcpServers(instanceNames: string[], scope?: InstallationScope, projectRoot?: string): Promise<string[]>;
|
|
158
145
|
}
|
|
159
146
|
/**
|
|
160
147
|
* Create a Codex adapter instance.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/codex/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/codex/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,12 +4,13 @@
|
|
|
4
4
|
* Codex is an AI coding assistant with support for:
|
|
5
5
|
* - Commands: ~/.codex/prompts/{kit}.{name}.md
|
|
6
6
|
* - Skills: ~/.codex/skills/{kit}.{name}/
|
|
7
|
-
* - MCP Servers: ~/.codex/
|
|
7
|
+
* - MCP Servers: ~/.codex/config.toml
|
|
8
8
|
*
|
|
9
9
|
* Codex does NOT support:
|
|
10
10
|
* - Subagents
|
|
11
11
|
* - Hooks
|
|
12
12
|
*/
|
|
13
|
+
import * as path from "node:path";
|
|
13
14
|
import { BaseAdapter } from "../base-adapter.js";
|
|
14
15
|
import { expandPath, pathExists, readFile } from "../file-operations.js";
|
|
15
16
|
import { filterFrontmatterAllowlist, toKebabCaseSkillFrontmatter } from "../skill-frontmatter.js";
|
|
@@ -20,12 +21,10 @@ import { codexModelMapping } from "./model-mapping.js";
|
|
|
20
21
|
import { transformMcpServerConfig, transformEnvVars as installerTransformEnvVars, transformHeaders as installerTransformHeaders, readMcpConfig, writeMcpConfig, } from "./installer.js";
|
|
21
22
|
/**
|
|
22
23
|
* Project-scope paths for Codex.
|
|
23
|
-
*
|
|
24
|
-
* Note: Codex only supports skills at project scope.
|
|
25
|
-
* Commands and MCP are global-only.
|
|
26
24
|
*/
|
|
27
25
|
export const CODEX_PROJECT_PATHS = {
|
|
28
26
|
configToml: ".codex/config.toml",
|
|
27
|
+
prompts: ".codex/prompts/",
|
|
29
28
|
skills: ".codex/skills/",
|
|
30
29
|
};
|
|
31
30
|
/**
|
|
@@ -33,9 +32,6 @@ export const CODEX_PROJECT_PATHS = {
|
|
|
33
32
|
*
|
|
34
33
|
* Provides support for commands, skills, and MCP servers.
|
|
35
34
|
* Does not support subagents or hooks.
|
|
36
|
-
*
|
|
37
|
-
* IMPORTANT: At project scope, Codex only supports skills.
|
|
38
|
-
* Commands and MCP servers are global-only.
|
|
39
35
|
*/
|
|
40
36
|
export class CodexAdapter extends BaseAdapter {
|
|
41
37
|
name = "codex";
|
|
@@ -44,9 +40,6 @@ export class CodexAdapter extends BaseAdapter {
|
|
|
44
40
|
supportedHarnessVersions = ">=1.0.0";
|
|
45
41
|
/**
|
|
46
42
|
* Get supported installation scopes.
|
|
47
|
-
*
|
|
48
|
-
* Codex supports both global and project scopes,
|
|
49
|
-
* but with different primitive support at each scope.
|
|
50
43
|
*/
|
|
51
44
|
getSupportedScopes() {
|
|
52
45
|
return ["global", "project"];
|
|
@@ -54,17 +47,9 @@ export class CodexAdapter extends BaseAdapter {
|
|
|
54
47
|
/**
|
|
55
48
|
* Get supported primitive types at the given scope.
|
|
56
49
|
*
|
|
57
|
-
* Codex supports:
|
|
58
|
-
* - Global: commands, skills, mcp
|
|
59
|
-
* - Project: skills only (commands and mcp are global-only)
|
|
60
|
-
*
|
|
61
50
|
* @param scope - Installation scope (defaults to "global")
|
|
62
51
|
*/
|
|
63
|
-
getSupportedPrimitives(
|
|
64
|
-
if (scope === "project") {
|
|
65
|
-
// Codex only supports skills at project scope
|
|
66
|
-
return ["skills"];
|
|
67
|
-
}
|
|
52
|
+
getSupportedPrimitives(_scope) {
|
|
68
53
|
return ["commands", "skills", "mcp"];
|
|
69
54
|
}
|
|
70
55
|
/**
|
|
@@ -75,7 +60,7 @@ export class CodexAdapter extends BaseAdapter {
|
|
|
75
60
|
getInstallationPaths(scope) {
|
|
76
61
|
if (scope === "project") {
|
|
77
62
|
return {
|
|
78
|
-
commands:
|
|
63
|
+
commands: CODEX_PROJECT_PATHS.prompts,
|
|
79
64
|
skills: CODEX_PROJECT_PATHS.skills,
|
|
80
65
|
// Codex does not support subagents or hooks
|
|
81
66
|
};
|
|
@@ -91,13 +76,13 @@ export class CodexAdapter extends BaseAdapter {
|
|
|
91
76
|
if (scope === "project") {
|
|
92
77
|
return {
|
|
93
78
|
primary: CODEX_PROJECT_PATHS.configToml,
|
|
94
|
-
|
|
79
|
+
mcp: CODEX_PROJECT_PATHS.configToml,
|
|
95
80
|
format: "toml",
|
|
96
81
|
};
|
|
97
82
|
}
|
|
98
83
|
return {
|
|
99
84
|
primary: CODEX_PATHS.configToml,
|
|
100
|
-
mcp: CODEX_PATHS.
|
|
85
|
+
mcp: CODEX_PATHS.configToml,
|
|
101
86
|
format: "toml",
|
|
102
87
|
};
|
|
103
88
|
}
|
|
@@ -202,7 +187,6 @@ export class CodexAdapter extends BaseAdapter {
|
|
|
202
187
|
* Update harness configuration for MCP servers.
|
|
203
188
|
*
|
|
204
189
|
* Codex only needs MCP configuration updates (no hooks support).
|
|
205
|
-
* MCP is only supported at global scope.
|
|
206
190
|
*
|
|
207
191
|
* @param kit - Kit manifest
|
|
208
192
|
* @param resolvedPrimitives - Resolved primitives to install
|
|
@@ -211,17 +195,13 @@ export class CodexAdapter extends BaseAdapter {
|
|
|
211
195
|
* @param scope - Installation scope
|
|
212
196
|
* @param projectRoot - Project root for project scope
|
|
213
197
|
*/
|
|
214
|
-
async updateConfiguration(kit, resolvedPrimitives, dryRun, completedOps, scope = "global",
|
|
198
|
+
async updateConfiguration(kit, resolvedPrimitives, dryRun, completedOps, scope = "global", projectRoot, envResolutions) {
|
|
215
199
|
const operations = [];
|
|
216
|
-
// MCP is only supported at global scope for Codex
|
|
217
|
-
if (scope === "project") {
|
|
218
|
-
return { operations };
|
|
219
|
-
}
|
|
220
200
|
// Filter MCP primitives
|
|
221
201
|
const mcpPrimitives = resolvedPrimitives.filter((p) => p.type === "mcp");
|
|
222
|
-
// Handle MCP servers
|
|
202
|
+
// Handle MCP servers
|
|
223
203
|
if (mcpPrimitives.length > 0 && !dryRun) {
|
|
224
|
-
const mcpResult = await this.installMcpServers(kit.name, mcpPrimitives, completedOps, envResolutions);
|
|
204
|
+
const mcpResult = await this.installMcpServers(kit.name, mcpPrimitives, completedOps, scope, projectRoot, envResolutions);
|
|
225
205
|
operations.push(...mcpResult);
|
|
226
206
|
}
|
|
227
207
|
return { operations };
|
|
@@ -229,16 +209,19 @@ export class CodexAdapter extends BaseAdapter {
|
|
|
229
209
|
/**
|
|
230
210
|
* Install MCP servers to configuration.
|
|
231
211
|
*/
|
|
232
|
-
async installMcpServers(_kitName, primitives, completedOps, envResolutions) {
|
|
212
|
+
async installMcpServers(_kitName, primitives, completedOps, scope = "global", projectRoot, envResolutions) {
|
|
233
213
|
const operations = [];
|
|
234
|
-
const mcpConfigPath =
|
|
214
|
+
const mcpConfigPath = scope === "project" && projectRoot
|
|
215
|
+
? path.join(projectRoot, CODEX_PROJECT_PATHS.configToml)
|
|
216
|
+
: expandPath(CODEX_PATHS.configToml);
|
|
235
217
|
// Read existing config and back it up
|
|
236
|
-
const existingConfig = await readMcpConfig();
|
|
237
218
|
const configExisted = pathExists(mcpConfigPath);
|
|
219
|
+
const previousContent = configExisted ? await readFile(mcpConfigPath) : undefined;
|
|
220
|
+
const existingConfig = await readMcpConfig(scope, projectRoot);
|
|
238
221
|
// Prepare updated config
|
|
239
222
|
const updatedConfig = { ...existingConfig };
|
|
240
|
-
if (!updatedConfig.
|
|
241
|
-
updatedConfig.
|
|
223
|
+
if (!updatedConfig.mcp_servers) {
|
|
224
|
+
updatedConfig.mcp_servers = {};
|
|
242
225
|
}
|
|
243
226
|
for (const primitive of primitives) {
|
|
244
227
|
try {
|
|
@@ -278,7 +261,7 @@ export class CodexAdapter extends BaseAdapter {
|
|
|
278
261
|
}
|
|
279
262
|
}
|
|
280
263
|
}
|
|
281
|
-
updatedConfig.
|
|
264
|
+
updatedConfig.mcp_servers[instanceName] = transformedConfig;
|
|
282
265
|
operations.push({
|
|
283
266
|
operation: "merge",
|
|
284
267
|
source: primitive.sourcePath,
|
|
@@ -297,35 +280,38 @@ export class CodexAdapter extends BaseAdapter {
|
|
|
297
280
|
}
|
|
298
281
|
}
|
|
299
282
|
// Write updated config
|
|
300
|
-
await writeMcpConfig(updatedConfig);
|
|
283
|
+
await writeMcpConfig(updatedConfig, scope, projectRoot);
|
|
301
284
|
const mcpCompletedOp = {
|
|
302
285
|
type: "file",
|
|
303
286
|
path: mcpConfigPath,
|
|
304
287
|
createdNew: !configExisted,
|
|
305
288
|
};
|
|
306
|
-
if (
|
|
307
|
-
mcpCompletedOp.previousContent =
|
|
289
|
+
if (previousContent !== undefined) {
|
|
290
|
+
mcpCompletedOp.previousContent = previousContent;
|
|
308
291
|
}
|
|
309
292
|
completedOps.push(mcpCompletedOp);
|
|
310
293
|
return operations;
|
|
311
294
|
}
|
|
312
|
-
async removeMcpServers(instanceNames, scope = "global") {
|
|
313
|
-
if (
|
|
295
|
+
async removeMcpServers(instanceNames, scope = "global", projectRoot) {
|
|
296
|
+
if (instanceNames.length === 0) {
|
|
297
|
+
return [];
|
|
298
|
+
}
|
|
299
|
+
if (scope === "project" && !projectRoot) {
|
|
314
300
|
return [];
|
|
315
301
|
}
|
|
316
|
-
const mcpConfig = await readMcpConfig();
|
|
317
|
-
if (!mcpConfig.
|
|
302
|
+
const mcpConfig = await readMcpConfig(scope, projectRoot);
|
|
303
|
+
if (!mcpConfig.mcp_servers) {
|
|
318
304
|
return [];
|
|
319
305
|
}
|
|
320
306
|
const removed = [];
|
|
321
307
|
for (const name of instanceNames) {
|
|
322
|
-
if (mcpConfig.
|
|
323
|
-
delete mcpConfig.
|
|
308
|
+
if (mcpConfig.mcp_servers[name]) {
|
|
309
|
+
delete mcpConfig.mcp_servers[name];
|
|
324
310
|
removed.push(name);
|
|
325
311
|
}
|
|
326
312
|
}
|
|
327
313
|
if (removed.length > 0) {
|
|
328
|
-
await writeMcpConfig(mcpConfig);
|
|
314
|
+
await writeMcpConfig(mcpConfig, scope, projectRoot);
|
|
329
315
|
}
|
|
330
316
|
return removed;
|
|
331
317
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/codex/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/codex/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,18 +2,19 @@
|
|
|
2
2
|
* Codex installation helpers.
|
|
3
3
|
*
|
|
4
4
|
* Provides utilities for installing primitives to Codex:
|
|
5
|
-
* - MCP server configuration in ~/.codex/
|
|
5
|
+
* - MCP server configuration in ~/.codex/config.toml (or .codex/config.toml at project scope)
|
|
6
6
|
* - Environment variable substitution
|
|
7
7
|
*
|
|
8
8
|
* Codex does not support subagents or hooks.
|
|
9
9
|
*/
|
|
10
|
-
import type { McpServerConfig, ResolvedEnvVar, ResolvedHeader } from "../../core/types.js";
|
|
10
|
+
import type { InstallationScope, McpServerConfig, ResolvedEnvVar, ResolvedHeader } from "../../core/types.js";
|
|
11
11
|
import type { FileOperationResult } from "../types.js";
|
|
12
12
|
/**
|
|
13
13
|
* Codex MCP configuration structure.
|
|
14
14
|
*/
|
|
15
15
|
export interface CodexMcpConfig {
|
|
16
|
-
|
|
16
|
+
mcp_servers?: Record<string, CodexMcpServerEntry>;
|
|
17
|
+
[key: string]: unknown;
|
|
17
18
|
}
|
|
18
19
|
/**
|
|
19
20
|
* MCP server entry in Codex config.
|
|
@@ -34,11 +35,11 @@ export interface CodexMcpServerEntry {
|
|
|
34
35
|
/**
|
|
35
36
|
* Read the MCP configuration file.
|
|
36
37
|
*/
|
|
37
|
-
export declare function readMcpConfig(): Promise<CodexMcpConfig>;
|
|
38
|
+
export declare function readMcpConfig(scope?: InstallationScope, projectRoot?: string): Promise<CodexMcpConfig>;
|
|
38
39
|
/**
|
|
39
40
|
* Write the MCP configuration file.
|
|
40
41
|
*/
|
|
41
|
-
export declare function writeMcpConfig(config: CodexMcpConfig): Promise<void>;
|
|
42
|
+
export declare function writeMcpConfig(config: CodexMcpConfig, scope?: InstallationScope, projectRoot?: string): Promise<void>;
|
|
42
43
|
/**
|
|
43
44
|
* Process environment variable values.
|
|
44
45
|
*
|
|
@@ -49,18 +50,13 @@ export declare function processEnvValue(value: string): string;
|
|
|
49
50
|
* Transform an MCP server configuration for Codex.
|
|
50
51
|
*
|
|
51
52
|
* Codex MCP configuration format:
|
|
52
|
-
* ```
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
* "VAR": "${VAR}"
|
|
60
|
-
* }
|
|
61
|
-
* }
|
|
62
|
-
* }
|
|
63
|
-
* }
|
|
53
|
+
* ```toml
|
|
54
|
+
* [mcp_servers."server-name"]
|
|
55
|
+
* command = "executable"
|
|
56
|
+
* args = ["arg1", "arg2"]
|
|
57
|
+
*
|
|
58
|
+
* [mcp_servers."server-name".env]
|
|
59
|
+
* VAR = "${VAR}"
|
|
64
60
|
* ```
|
|
65
61
|
*
|
|
66
62
|
* Note: Full environment variable transformation with sensitivity handling
|
|
@@ -125,23 +121,23 @@ export declare function transformHeaders(resolved: ResolvedHeader[]): CodexHeade
|
|
|
125
121
|
* @param namespacedName - The namespaced server name (e.g., "kit.server")
|
|
126
122
|
* @param config - The MCP server configuration
|
|
127
123
|
*/
|
|
128
|
-
export declare function addMcpServer(namespacedName: string, config: McpServerConfig): Promise<FileOperationResult>;
|
|
124
|
+
export declare function addMcpServer(namespacedName: string, config: McpServerConfig, scope?: InstallationScope, projectRoot?: string): Promise<FileOperationResult>;
|
|
129
125
|
/**
|
|
130
126
|
* Remove an MCP server from the configuration.
|
|
131
127
|
*
|
|
132
128
|
* @param namespacedName - The namespaced server name to remove
|
|
133
129
|
*/
|
|
134
|
-
export declare function removeMcpServer(namespacedName: string): Promise<boolean>;
|
|
130
|
+
export declare function removeMcpServer(namespacedName: string, scope?: InstallationScope, projectRoot?: string): Promise<boolean>;
|
|
135
131
|
/**
|
|
136
132
|
* Get all installed MCP servers for a specific kit.
|
|
137
133
|
*
|
|
138
134
|
* @param kitName - The kit name prefix to filter by
|
|
139
135
|
*/
|
|
140
|
-
export declare function getKitMcpServers(kitName: string): Promise<string[]>;
|
|
136
|
+
export declare function getKitMcpServers(kitName: string, scope?: InstallationScope, projectRoot?: string): Promise<string[]>;
|
|
141
137
|
/**
|
|
142
138
|
* Remove all MCP servers for a specific kit.
|
|
143
139
|
*
|
|
144
140
|
* @param kitName - The kit name prefix to remove
|
|
145
141
|
*/
|
|
146
|
-
export declare function removeKitMcpServers(kitName: string): Promise<string[]>;
|
|
142
|
+
export declare function removeKitMcpServers(kitName: string, scope?: InstallationScope, projectRoot?: string): Promise<string[]>;
|
|
147
143
|
//# sourceMappingURL=installer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../../src/adapters/codex/installer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../../src/adapters/codex/installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,25 +2,33 @@
|
|
|
2
2
|
* Codex installation helpers.
|
|
3
3
|
*
|
|
4
4
|
* Provides utilities for installing primitives to Codex:
|
|
5
|
-
* - MCP server configuration in ~/.codex/
|
|
5
|
+
* - MCP server configuration in ~/.codex/config.toml (or .codex/config.toml at project scope)
|
|
6
6
|
* - Environment variable substitution
|
|
7
7
|
*
|
|
8
8
|
* Codex does not support subagents or hooks.
|
|
9
9
|
*/
|
|
10
10
|
import * as path from "node:path";
|
|
11
|
+
import { parse as parseToml, stringify as stringifyToml } from "@iarna/toml";
|
|
11
12
|
import { expandPath, pathExists, readFile, writeTransformed, ensureDirectory, } from "../file-operations.js";
|
|
12
13
|
import { CODEX_PATHS } from "./detection.js";
|
|
14
|
+
function resolveCodexConfigPath(scope = "global", projectRoot) {
|
|
15
|
+
if (scope === "project" && projectRoot) {
|
|
16
|
+
return path.join(projectRoot, ".codex", "config.toml");
|
|
17
|
+
}
|
|
18
|
+
return expandPath(CODEX_PATHS.configToml);
|
|
19
|
+
}
|
|
13
20
|
/**
|
|
14
21
|
* Read the MCP configuration file.
|
|
15
22
|
*/
|
|
16
|
-
export async function readMcpConfig() {
|
|
17
|
-
const configPath =
|
|
23
|
+
export async function readMcpConfig(scope = "global", projectRoot) {
|
|
24
|
+
const configPath = resolveCodexConfigPath(scope, projectRoot);
|
|
18
25
|
if (!pathExists(configPath)) {
|
|
19
26
|
return {};
|
|
20
27
|
}
|
|
21
28
|
try {
|
|
22
29
|
const content = await readFile(configPath);
|
|
23
|
-
|
|
30
|
+
const parsed = parseToml(content);
|
|
31
|
+
return (parsed ?? {});
|
|
24
32
|
}
|
|
25
33
|
catch {
|
|
26
34
|
return {};
|
|
@@ -29,11 +37,11 @@ export async function readMcpConfig() {
|
|
|
29
37
|
/**
|
|
30
38
|
* Write the MCP configuration file.
|
|
31
39
|
*/
|
|
32
|
-
export async function writeMcpConfig(config) {
|
|
33
|
-
const configPath =
|
|
40
|
+
export async function writeMcpConfig(config, scope = "global", projectRoot) {
|
|
41
|
+
const configPath = resolveCodexConfigPath(scope, projectRoot);
|
|
34
42
|
const configDir = path.dirname(configPath);
|
|
35
43
|
await ensureDirectory(configDir);
|
|
36
|
-
await writeTransformed(configPath,
|
|
44
|
+
await writeTransformed(configPath, stringifyToml(config));
|
|
37
45
|
}
|
|
38
46
|
/**
|
|
39
47
|
* Process environment variable values.
|
|
@@ -47,18 +55,13 @@ export function processEnvValue(value) {
|
|
|
47
55
|
* Transform an MCP server configuration for Codex.
|
|
48
56
|
*
|
|
49
57
|
* Codex MCP configuration format:
|
|
50
|
-
* ```
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
* "VAR": "${VAR}"
|
|
58
|
-
* }
|
|
59
|
-
* }
|
|
60
|
-
* }
|
|
61
|
-
* }
|
|
58
|
+
* ```toml
|
|
59
|
+
* [mcp_servers."server-name"]
|
|
60
|
+
* command = "executable"
|
|
61
|
+
* args = ["arg1", "arg2"]
|
|
62
|
+
*
|
|
63
|
+
* [mcp_servers."server-name".env]
|
|
64
|
+
* VAR = "${VAR}"
|
|
62
65
|
* ```
|
|
63
66
|
*
|
|
64
67
|
* Note: Full environment variable transformation with sensitivity handling
|
|
@@ -158,24 +161,24 @@ export function transformHeaders(resolved) {
|
|
|
158
161
|
* @param namespacedName - The namespaced server name (e.g., "kit.server")
|
|
159
162
|
* @param config - The MCP server configuration
|
|
160
163
|
*/
|
|
161
|
-
export async function addMcpServer(namespacedName, config) {
|
|
164
|
+
export async function addMcpServer(namespacedName, config, scope = "global", projectRoot) {
|
|
162
165
|
try {
|
|
163
|
-
const mcpConfig = await readMcpConfig();
|
|
164
|
-
if (!mcpConfig.
|
|
165
|
-
mcpConfig.
|
|
166
|
+
const mcpConfig = await readMcpConfig(scope, projectRoot);
|
|
167
|
+
if (!mcpConfig.mcp_servers) {
|
|
168
|
+
mcpConfig.mcp_servers = {};
|
|
166
169
|
}
|
|
167
|
-
mcpConfig.
|
|
168
|
-
await writeMcpConfig(mcpConfig);
|
|
170
|
+
mcpConfig.mcp_servers[namespacedName] = transformMcpServerConfig(config);
|
|
171
|
+
await writeMcpConfig(mcpConfig, scope, projectRoot);
|
|
169
172
|
return {
|
|
170
173
|
operation: "merge",
|
|
171
|
-
destination:
|
|
174
|
+
destination: resolveCodexConfigPath(scope, projectRoot),
|
|
172
175
|
success: true,
|
|
173
176
|
};
|
|
174
177
|
}
|
|
175
178
|
catch (error) {
|
|
176
179
|
return {
|
|
177
180
|
operation: "merge",
|
|
178
|
-
destination:
|
|
181
|
+
destination: resolveCodexConfigPath(scope, projectRoot),
|
|
179
182
|
success: false,
|
|
180
183
|
error: error instanceof Error ? error.message : String(error),
|
|
181
184
|
};
|
|
@@ -186,13 +189,13 @@ export async function addMcpServer(namespacedName, config) {
|
|
|
186
189
|
*
|
|
187
190
|
* @param namespacedName - The namespaced server name to remove
|
|
188
191
|
*/
|
|
189
|
-
export async function removeMcpServer(namespacedName) {
|
|
190
|
-
const mcpConfig = await readMcpConfig();
|
|
191
|
-
if (!mcpConfig.
|
|
192
|
+
export async function removeMcpServer(namespacedName, scope = "global", projectRoot) {
|
|
193
|
+
const mcpConfig = await readMcpConfig(scope, projectRoot);
|
|
194
|
+
if (!mcpConfig.mcp_servers || !mcpConfig.mcp_servers[namespacedName]) {
|
|
192
195
|
return false;
|
|
193
196
|
}
|
|
194
|
-
delete mcpConfig.
|
|
195
|
-
await writeMcpConfig(mcpConfig);
|
|
197
|
+
delete mcpConfig.mcp_servers[namespacedName];
|
|
198
|
+
await writeMcpConfig(mcpConfig, scope, projectRoot);
|
|
196
199
|
return true;
|
|
197
200
|
}
|
|
198
201
|
/**
|
|
@@ -200,34 +203,34 @@ export async function removeMcpServer(namespacedName) {
|
|
|
200
203
|
*
|
|
201
204
|
* @param kitName - The kit name prefix to filter by
|
|
202
205
|
*/
|
|
203
|
-
export async function getKitMcpServers(kitName) {
|
|
204
|
-
const mcpConfig = await readMcpConfig();
|
|
205
|
-
if (!mcpConfig.
|
|
206
|
+
export async function getKitMcpServers(kitName, scope = "global", projectRoot) {
|
|
207
|
+
const mcpConfig = await readMcpConfig(scope, projectRoot);
|
|
208
|
+
if (!mcpConfig.mcp_servers) {
|
|
206
209
|
return [];
|
|
207
210
|
}
|
|
208
211
|
const prefix = `${kitName}.`;
|
|
209
|
-
return Object.keys(mcpConfig.
|
|
212
|
+
return Object.keys(mcpConfig.mcp_servers).filter((name) => name.startsWith(prefix));
|
|
210
213
|
}
|
|
211
214
|
/**
|
|
212
215
|
* Remove all MCP servers for a specific kit.
|
|
213
216
|
*
|
|
214
217
|
* @param kitName - The kit name prefix to remove
|
|
215
218
|
*/
|
|
216
|
-
export async function removeKitMcpServers(kitName) {
|
|
217
|
-
const mcpConfig = await readMcpConfig();
|
|
219
|
+
export async function removeKitMcpServers(kitName, scope = "global", projectRoot) {
|
|
220
|
+
const mcpConfig = await readMcpConfig(scope, projectRoot);
|
|
218
221
|
const removed = [];
|
|
219
|
-
if (!mcpConfig.
|
|
222
|
+
if (!mcpConfig.mcp_servers) {
|
|
220
223
|
return removed;
|
|
221
224
|
}
|
|
222
225
|
const prefix = `${kitName}.`;
|
|
223
|
-
for (const name of Object.keys(mcpConfig.
|
|
226
|
+
for (const name of Object.keys(mcpConfig.mcp_servers)) {
|
|
224
227
|
if (name.startsWith(prefix)) {
|
|
225
|
-
delete mcpConfig.
|
|
228
|
+
delete mcpConfig.mcp_servers[name];
|
|
226
229
|
removed.push(name);
|
|
227
230
|
}
|
|
228
231
|
}
|
|
229
232
|
if (removed.length > 0) {
|
|
230
|
-
await writeMcpConfig(mcpConfig);
|
|
233
|
+
await writeMcpConfig(mcpConfig, scope, projectRoot);
|
|
231
234
|
}
|
|
232
235
|
return removed;
|
|
233
236
|
}
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../../../src/adapters/codex/installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-registry.d.ts","sourceRoot":"","sources":["../../src/validation/schema-registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,MAAM,UAAU,GAClB,KAAK,GACL,eAAe,GACf,qBAAqB,GACrB,SAAS,GACT,OAAO,GACP,UAAU,GACV,cAAc,GACd,YAAY,GACZ,eAAe,GACf,WAAW,CAAC;AAEhB,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;
|
|
1
|
+
{"version":3,"file":"schema-registry.d.ts","sourceRoot":"","sources":["../../src/validation/schema-registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,MAAM,UAAU,GAClB,KAAK,GACL,eAAe,GACf,qBAAqB,GACrB,SAAS,GACT,OAAO,GACP,UAAU,GACV,cAAc,GACd,YAAY,GACZ,eAAe,GACf,WAAW,CAAC;AAEhB,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAwDD,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,OAAO,EAClB,aAAa,EAAE,OAAO,GACrB,gBAAgB,CAiClB;AAED,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,GAAG,MAAM,CAEtF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,EAAE,CAG/D"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
const SCHEMA_HOST = "https://raw.githubusercontent.com/hashicorp-labs/kits/refs/heads/main/schemas";
|
|
6
|
-
const
|
|
6
|
+
const SEMVER_PATTERN = "\\d+\\.\\d+\\.\\d+";
|
|
7
7
|
const KIND_LABELS = {
|
|
8
8
|
"kit": "kit.json",
|
|
9
9
|
"kits-registry": "kits-registry.json",
|
|
@@ -16,68 +16,37 @@ const KIND_LABELS = {
|
|
|
16
16
|
"kits-manifest": "kits.json",
|
|
17
17
|
"kits-lock": "kits-lock.json",
|
|
18
18
|
};
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
{
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
{
|
|
51
|
-
kind: "subagent",
|
|
52
|
-
version: SCHEMA_VERSION,
|
|
53
|
-
fileName: `subagent.schema.v${SCHEMA_VERSION}.json`,
|
|
54
|
-
schemaIds: [`${SCHEMA_HOST}/subagent.schema.v${SCHEMA_VERSION}.json`],
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
kind: "hook-program",
|
|
58
|
-
version: SCHEMA_VERSION,
|
|
59
|
-
fileName: `hook-program.schema.v${SCHEMA_VERSION}.json`,
|
|
60
|
-
schemaIds: [`${SCHEMA_HOST}/hook-program.schema.v${SCHEMA_VERSION}.json`],
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
kind: "mcp-server",
|
|
64
|
-
version: SCHEMA_VERSION,
|
|
65
|
-
fileName: `mcp-server.schema.v${SCHEMA_VERSION}.json`,
|
|
66
|
-
schemaIds: [`${SCHEMA_HOST}/mcp-server.schema.v${SCHEMA_VERSION}.json`],
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
kind: "kits-manifest",
|
|
70
|
-
version: SCHEMA_VERSION,
|
|
71
|
-
fileName: `kits-manifest.schema.v${SCHEMA_VERSION}.json`,
|
|
72
|
-
schemaIds: [`${SCHEMA_HOST}/kits-manifest.schema.v${SCHEMA_VERSION}.json`],
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
kind: "kits-lock",
|
|
76
|
-
version: SCHEMA_VERSION,
|
|
77
|
-
fileName: `kits-lock.schema.v${SCHEMA_VERSION}.json`,
|
|
78
|
-
schemaIds: [`${SCHEMA_HOST}/kits-lock.schema.v${SCHEMA_VERSION}.json`],
|
|
79
|
-
},
|
|
80
|
-
];
|
|
19
|
+
const SCHEMA_BASENAMES = {
|
|
20
|
+
"kit": "kit",
|
|
21
|
+
"kits-registry": "kits-registry",
|
|
22
|
+
"primitives-registry": "primitives-registry",
|
|
23
|
+
"command": "command",
|
|
24
|
+
"skill": "skill",
|
|
25
|
+
"subagent": "subagent",
|
|
26
|
+
"hook-program": "hook-program",
|
|
27
|
+
"mcp-server": "mcp-server",
|
|
28
|
+
"kits-manifest": "kits-manifest",
|
|
29
|
+
"kits-lock": "kits-lock",
|
|
30
|
+
};
|
|
31
|
+
function escapeForRegExp(value) {
|
|
32
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
33
|
+
}
|
|
34
|
+
function extractSchemaVersion(kind, schemaRef) {
|
|
35
|
+
const schemaBase = SCHEMA_BASENAMES[kind];
|
|
36
|
+
const regex = new RegExp(`^${escapeForRegExp(SCHEMA_HOST)}/${schemaBase}\\.schema\\.v(${SEMVER_PATTERN})\\.json$`);
|
|
37
|
+
const match = schemaRef.match(regex);
|
|
38
|
+
return match?.[1] ?? null;
|
|
39
|
+
}
|
|
40
|
+
function buildDescriptor(kind, version) {
|
|
41
|
+
const schemaBase = SCHEMA_BASENAMES[kind];
|
|
42
|
+
const schemaId = `${SCHEMA_HOST}/${schemaBase}.schema.v${version}.json`;
|
|
43
|
+
return {
|
|
44
|
+
kind,
|
|
45
|
+
version,
|
|
46
|
+
fileName: `${schemaBase}.schema.v${version}.json`,
|
|
47
|
+
schemaIds: [schemaId],
|
|
48
|
+
};
|
|
49
|
+
}
|
|
81
50
|
export class SchemaResolutionError extends Error {
|
|
82
51
|
constructor(message) {
|
|
83
52
|
super(message);
|
|
@@ -91,22 +60,24 @@ export function resolveSchemaDescriptor(kind, schemaRef, schemaVersion) {
|
|
|
91
60
|
throw new SchemaResolutionError(`Missing $schema for ${kindLabel}; expected one of: ${expected}`);
|
|
92
61
|
}
|
|
93
62
|
if (typeof schemaVersion !== "string" || schemaVersion.length === 0) {
|
|
94
|
-
|
|
63
|
+
const expected = getExpectedSchemaIds(kind).join(", ");
|
|
64
|
+
throw new SchemaResolutionError(`Missing schemaVersion for ${kindLabel}; expected version from $schema (${expected})`);
|
|
95
65
|
}
|
|
96
|
-
const
|
|
97
|
-
if (!
|
|
66
|
+
const versionFromRef = extractSchemaVersion(kind, schemaRef);
|
|
67
|
+
if (!versionFromRef) {
|
|
98
68
|
const expected = getExpectedSchemaIds(kind).join(", ");
|
|
99
69
|
throw new SchemaResolutionError(`Unsupported $schema for ${kindLabel}: ${schemaRef}; expected one of: ${expected}`);
|
|
100
70
|
}
|
|
101
|
-
if (schemaVersion !==
|
|
102
|
-
throw new SchemaResolutionError(`schemaVersion ${schemaVersion} does not match ${
|
|
71
|
+
if (schemaVersion !== versionFromRef) {
|
|
72
|
+
throw new SchemaResolutionError(`schemaVersion ${schemaVersion} does not match ${versionFromRef} for ${kindLabel}`);
|
|
103
73
|
}
|
|
104
|
-
return
|
|
74
|
+
return buildDescriptor(kind, versionFromRef);
|
|
105
75
|
}
|
|
106
76
|
export function getSchemaPath(schemaRoot, descriptor) {
|
|
107
77
|
return path.join(schemaRoot, descriptor.fileName);
|
|
108
78
|
}
|
|
109
79
|
export function getExpectedSchemaIds(kind) {
|
|
110
|
-
|
|
80
|
+
const schemaBase = SCHEMA_BASENAMES[kind];
|
|
81
|
+
return [`${SCHEMA_HOST}/${schemaBase}.schema.v<semver>.json`];
|
|
111
82
|
}
|
|
112
83
|
//# sourceMappingURL=schema-registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-registry.js","sourceRoot":"","sources":["../../src/validation/schema-registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,IAAI,MAAM,WAAW,CAAC;AAqB7B,MAAM,WAAW,GACf,+EAA+E,CAAC;AAClF,MAAM,cAAc,GAAG,
|
|
1
|
+
{"version":3,"file":"schema-registry.js","sourceRoot":"","sources":["../../src/validation/schema-registry.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hashicorp/kits",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.20",
|
|
4
4
|
"description": "Install AI agent kits into your favorite coding assistants",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
"format": "prettier --write src/ tests/",
|
|
30
30
|
"typecheck": "tsc --noEmit",
|
|
31
31
|
"clean": "rm -rf dist/",
|
|
32
|
+
"check:schema-versioning": "node scripts/check-schema-versioning.js",
|
|
32
33
|
"prepublishOnly": "npm run clean && npm run build",
|
|
33
34
|
"validate:commands": "node ./bin/kits.js validate --commands ./test-kits",
|
|
34
35
|
"validate:kits": "node ./bin/kits.js validate --kits ./test-kits",
|