@cmdforge/gen-apic-mp 0.0.2 → 0.0.4
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 +31 -1
- package/dist/server/cli.js +4 -1
- package/dist/server/cli.js.map +1 -1
- package/dist/server/marketplace.d.ts +4 -1
- package/dist/server/marketplace.d.ts.map +1 -1
- package/dist/server/marketplace.js +121 -9
- package/dist/server/marketplace.js.map +1 -1
- package/dist/server/marketplace.test.js +118 -2
- package/dist/server/marketplace.test.js.map +1 -1
- package/dist/shared/types.d.ts +19 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/package.json +4 -2
- package/src/server/cli.ts +12 -2
- package/src/server/marketplace.test.ts +135 -1
- package/src/server/marketplace.ts +141 -7
- package/src/shared/types.ts +29 -0
- package/tsconfig.json +1 -1
package/README.md
CHANGED
|
@@ -11,8 +11,11 @@ For a workspace, `gen-apic-mp` produces:
|
|
|
11
11
|
```text
|
|
12
12
|
.github/plugin/marketplace.json
|
|
13
13
|
.claude-plugin/marketplace.json
|
|
14
|
+
.agents/plugins/marketplace.json
|
|
14
15
|
plugins/{pluginName}/plugin.json
|
|
16
|
+
plugins/{pluginName}/.codex-plugin/plugin.json
|
|
15
17
|
plugins/{pluginName}/.mcp.json
|
|
18
|
+
plugins/{pluginName}/.codex.mcp.json
|
|
16
19
|
```
|
|
17
20
|
|
|
18
21
|
The generated `.mcp.json` only contains normal MCP server launch configuration:
|
|
@@ -20,6 +23,18 @@ The generated `.mcp.json` only contains normal MCP server launch configuration:
|
|
|
20
23
|
- stdio servers: `transport`, `command`, `args`, `env`, `cwd`
|
|
21
24
|
- remote servers: `transport`, `url`, `headers`
|
|
22
25
|
|
|
26
|
+
Codex-specific output uses the paths described by the Codex plugin docs and the `@typeforged/codex-plugin-marketplace` schema package:
|
|
27
|
+
|
|
28
|
+
- repo marketplace: `.agents/plugins/marketplace.json`
|
|
29
|
+
- plugin manifest: `plugins/{pluginName}/.codex-plugin/plugin.json`
|
|
30
|
+
- plugin MCP config: `plugins/{pluginName}/.codex.mcp.json`
|
|
31
|
+
|
|
32
|
+
Claude/Copilot-style output is aligned to the `@typeforged/claude-plugin-marketplaces` schema package:
|
|
33
|
+
|
|
34
|
+
- marketplace catalog: `.claude-plugin/marketplace.json`
|
|
35
|
+
- plugin manifest: `plugins/{pluginName}/plugin.json`
|
|
36
|
+
- plugin MCP config: `plugins/{pluginName}/.mcp.json`
|
|
37
|
+
|
|
23
38
|
## Install
|
|
24
39
|
|
|
25
40
|
```bash
|
|
@@ -36,7 +51,7 @@ node dist/server/cli.js --help
|
|
|
36
51
|
## CLI
|
|
37
52
|
|
|
38
53
|
```bash
|
|
39
|
-
gen-apic-mp <serviceName> <region> <workspaceName> [--unpack [directory]]
|
|
54
|
+
gen-apic-mp <serviceName> <region> <workspaceName> [--unpack [directory]] [--mcp-meta <key>]
|
|
40
55
|
```
|
|
41
56
|
|
|
42
57
|
Arguments:
|
|
@@ -48,6 +63,7 @@ Arguments:
|
|
|
48
63
|
Option:
|
|
49
64
|
|
|
50
65
|
- `--unpack [directory]`: write the generated marketplace tree directly into a directory instead of creating a zip
|
|
66
|
+
- `--mcp-meta <key>`: include a specific `_meta` key from `v0/servers/{name}` in generated `.mcp.json` server entries
|
|
51
67
|
|
|
52
68
|
If `--unpack` is provided without a value, it defaults to the current working directory, but only if that directory contains a `package.json`.
|
|
53
69
|
|
|
@@ -71,6 +87,18 @@ Unpack into a specific directory:
|
|
|
71
87
|
gen-apic-mp my-api-center eastus marketplace --unpack /path/to/marketplace-repo
|
|
72
88
|
```
|
|
73
89
|
|
|
90
|
+
Include OAuth-related `_meta` in generated `.mcp.json`:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
gen-apic-mp my-api-center eastus marketplace --mcp-meta oauth-client-provider
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Include multiple `_meta` keys:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
gen-apic-mp my-api-center eastus marketplace --mcp-meta oauth-client-provider --mcp-meta x-ms-id
|
|
100
|
+
```
|
|
101
|
+
|
|
74
102
|
## Output behavior
|
|
75
103
|
|
|
76
104
|
Without `--unpack`, the CLI writes:
|
|
@@ -97,6 +125,8 @@ The translator supports:
|
|
|
97
125
|
- nested `server.remotes`
|
|
98
126
|
- nested `server.packages` as fallback when `remotes` is empty
|
|
99
127
|
|
|
128
|
+
If `--mcp-meta` is used, only the requested `_meta` keys are copied into each generated MCP server entry.
|
|
129
|
+
|
|
100
130
|
## Current limitations
|
|
101
131
|
|
|
102
132
|
- Skill directories are not generated yet, so `plugin.json` only includes `skills` when that support is added
|
package/dist/server/cli.js
CHANGED
|
@@ -4,6 +4,7 @@ import { generateMarketplaceGit, resolveUnpackDirectory } from "./marketplace.js
|
|
|
4
4
|
const program = new Command();
|
|
5
5
|
const unpackPreset = "__CURRENT_WORKING_PACKAGE__";
|
|
6
6
|
const unpackOption = new Option("--unpack [directory]", "Also unpack the generated marketplace into a directory; defaults to the current directory").preset(unpackPreset);
|
|
7
|
+
const mcpMetaOption = new Option("--mcp-meta <key>", "Include the specified _meta key in generated .mcp.json server entries").argParser((value, previous = []) => [...previous, value]);
|
|
7
8
|
program.configureHelp({
|
|
8
9
|
optionDescription(option) {
|
|
9
10
|
const description = option.description ?? "";
|
|
@@ -17,9 +18,11 @@ program
|
|
|
17
18
|
.argument("<region>", "Region name")
|
|
18
19
|
.argument("<workspaceName>", "Workspace to convert into marketplace zip")
|
|
19
20
|
.addOption(unpackOption)
|
|
21
|
+
.addOption(mcpMetaOption)
|
|
20
22
|
.action(async (serviceName, region, workspaceName, options) => {
|
|
21
23
|
const unpack = await resolveUnpackDirectory(options.unpack);
|
|
22
|
-
const
|
|
24
|
+
const mcpMetaKeys = options.mcpMeta;
|
|
25
|
+
const result = await generateMarketplaceGit({ serviceName, region, workspaceName }, { unpack, mcpMetaKeys });
|
|
23
26
|
if (result.unpackPath) {
|
|
24
27
|
console.log(`Unpacked marketplace into ${result.unpackPath}`);
|
|
25
28
|
return;
|
package/dist/server/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/server/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAElF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,MAAM,YAAY,GAAG,6BAA6B,CAAC;AACnD,MAAM,YAAY,GAAG,IAAI,MAAM,CAC7B,sBAAsB,EACtB,2FAA2F,CAC5F,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/server/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAElF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,MAAM,YAAY,GAAG,6BAA6B,CAAC;AACnD,MAAM,YAAY,GAAG,IAAI,MAAM,CAC7B,sBAAsB,EACtB,2FAA2F,CAC5F,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AACvB,MAAM,aAAa,GAAG,IAAI,MAAM,CAC9B,kBAAkB,EAClB,uEAAuE,CACxE,CAAC,SAAS,CAAC,CAAC,KAAa,EAAE,WAAqB,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;AAE9E,OAAO,CAAC,aAAa,CAAC;IACpB,iBAAiB,CAAC,MAAM;QACtB,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;QAC7C,IAAI,MAAM,CAAC,aAAa,EAAE,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,KAAK,YAAY;YAC1E,OAAO,WAAW,CAAC;QACrB,OAAO,MAAM,CAAC,WAAW,CAAC;IAC5B,CAAC;CACF,CAAC,CAAC;AAEH,OAAO;KACJ,QAAQ,CAAC,eAAe,EAAE,uCAAuC,CAAC;KAClE,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;KACnC,QAAQ,CAAC,iBAAiB,EAAE,2CAA2C,CAAC;KACxE,SAAS,CAAC,YAAY,CAAC;KACvB,SAAS,CAAC,aAAa,CAAC;KACxB,MAAM,CAAC,KAAK,EACX,WAAmB,EACnB,MAAc,EACd,aAAqB,EACrB,OAAgD,EAChD,EAAE;IACF,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5D,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAEpC,MAAM,MAAM,GAAG,MAAM,sBAAsB,CACzC,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,EACtC,EAAE,MAAM,EAAE,WAAW,EAAE,CACxB,CAAC;IACF,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,6BAA6B,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAC9D,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,WAAW,eAAe,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;AAC1E,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -18,12 +18,15 @@ export declare class ApiCenterClient {
|
|
|
18
18
|
v0Server(name: string): Promise<types.V0ServerJsonEntry>;
|
|
19
19
|
}
|
|
20
20
|
export declare function mcpServerNameFromV0Entry(entry: types.V0ServerJsonEntry): string;
|
|
21
|
-
export declare function mcpServerFromV0Entry(entry: types.V0ServerJsonEntry): types.McpServer;
|
|
21
|
+
export declare function mcpServerFromV0Entry(entry: types.V0ServerJsonEntry, options?: types.GenerateMcpServerOptions): types.McpServer;
|
|
22
22
|
export declare function mcpServersFromServerJson(serverJson: types.ServerJson): {
|
|
23
23
|
[k: string]: types.McpServer;
|
|
24
24
|
};
|
|
25
|
+
export declare function codexMcpFromMcpServer(server: types.McpServer): types.CodexMcp;
|
|
26
|
+
export declare function codexMcpJsonFromMcpJson(mcpJson: types.McpJson): types.CodexMcpJson;
|
|
25
27
|
export type GenerateMarketplaceGitOptions = {
|
|
26
28
|
unpack?: string;
|
|
29
|
+
mcpMetaKeys?: string[];
|
|
27
30
|
};
|
|
28
31
|
export declare function generateMarketplaceGit(info: types.WorkspaceInfo, options?: GenerateMarketplaceGitOptions): Promise<{
|
|
29
32
|
zipPath: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marketplace.d.ts","sourceRoot":"","sources":["../../src/server/marketplace.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAI3C,qBAAa,eAAe;aAKE,IAAI,EAAE,KAAK,CAAC,aAAa;IAJrD,IAAI,WAAW,WAAoC;IACnD,IAAI,MAAM,WAA+B;IACzC,IAAI,aAAa,WAAsC;gBAE3B,IAAI,EAAE,KAAK,CAAC,aAAa;IAErD,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS;IAI5B,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM;IAIzC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAO9E,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAItD,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM;IAWjB,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM;IAUrB,MAAM;IAIZ,IAAI,CAAC,IAAI,SAAK,EAAE,KAAK,CAAC,EAAE,MAAM;IAIxB,MAAM,CAAC,IAAI,EAAE,MAAM;IAInB,GAAG,CAAC,UAAU,EAAE,MAAM;IAItB,QAAQ,CAAC,IAAI,EAAE,MAAM;CAG5B;
|
|
1
|
+
{"version":3,"file":"marketplace.d.ts","sourceRoot":"","sources":["../../src/server/marketplace.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAI3C,qBAAa,eAAe;aAKE,IAAI,EAAE,KAAK,CAAC,aAAa;IAJrD,IAAI,WAAW,WAAoC;IACnD,IAAI,MAAM,WAA+B;IACzC,IAAI,aAAa,WAAsC;gBAE3B,IAAI,EAAE,KAAK,CAAC,aAAa;IAErD,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS;IAI5B,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM;IAIzC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAO9E,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM;IAItD,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM;IAWjB,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM;IAUrB,MAAM;IAIZ,IAAI,CAAC,IAAI,SAAK,EAAE,KAAK,CAAC,EAAE,MAAM;IAIxB,MAAM,CAAC,IAAI,EAAE,MAAM;IAInB,GAAG,CAAC,UAAU,EAAE,MAAM;IAItB,QAAQ,CAAC,IAAI,EAAE,MAAM;CAG5B;AAwPD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,KAAK,CAAC,iBAAiB,UAStE;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,KAAK,CAAC,iBAAiB,EAC9B,OAAO,GAAE,KAAK,CAAC,wBAA6B,GAC3C,KAAK,CAAC,SAAS,CAwCjB;AAED,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU;;EAKpE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,QAAQ,CAe7E;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,YAAY,CAMlF;AA0GD,MAAM,MAAM,6BAA6B,GAAG;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAEF,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,KAAK,CAAC,aAAa,EACzB,OAAO,GAAE,6BAAkC;;;;qBAwEY,KAAK,CAAC,eAAe;GAK7E;AAID,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,+BAerE"}
|
|
@@ -70,6 +70,13 @@ function sanitizeName(value) {
|
|
|
70
70
|
.replace(/[^a-zA-Z0-9._-]+/g, "-")
|
|
71
71
|
.replace(/^-+|-+$/g, "") || "unnamed";
|
|
72
72
|
}
|
|
73
|
+
function sanitizeKebabName(value) {
|
|
74
|
+
return value
|
|
75
|
+
.trim()
|
|
76
|
+
.toLowerCase()
|
|
77
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
78
|
+
.replace(/^-+|-+$/g, "") || "unnamed";
|
|
79
|
+
}
|
|
73
80
|
function asStringRecord(value) {
|
|
74
81
|
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
75
82
|
return undefined;
|
|
@@ -134,6 +141,41 @@ function pickTransport(entry) {
|
|
|
134
141
|
function compactObject(value) {
|
|
135
142
|
return Object.fromEntries(Object.entries(value).filter(([, item]) => item !== undefined));
|
|
136
143
|
}
|
|
144
|
+
function pickRequestedMeta(entry, metaKeys = []) {
|
|
145
|
+
if (metaKeys.length === 0)
|
|
146
|
+
return undefined;
|
|
147
|
+
const record = asObject(entry);
|
|
148
|
+
const nestedServer = asObject(record?.server);
|
|
149
|
+
const metaSources = [
|
|
150
|
+
asObject(nestedServer?._meta),
|
|
151
|
+
asObject(record?._meta),
|
|
152
|
+
].filter((value) => !!value);
|
|
153
|
+
if (metaSources.length === 0)
|
|
154
|
+
return undefined;
|
|
155
|
+
const requested = {};
|
|
156
|
+
for (const key of metaKeys) {
|
|
157
|
+
for (const source of metaSources) {
|
|
158
|
+
if (key in source) {
|
|
159
|
+
requested[key] = source[key];
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return Object.keys(requested).length > 0 ? requested : undefined;
|
|
165
|
+
}
|
|
166
|
+
function flattenRequestedMeta(entry, metaKeys = []) {
|
|
167
|
+
const requestedMeta = pickRequestedMeta(entry, metaKeys);
|
|
168
|
+
if (!requestedMeta)
|
|
169
|
+
return undefined;
|
|
170
|
+
const flattened = {};
|
|
171
|
+
for (const value of Object.values(requestedMeta)) {
|
|
172
|
+
const record = asObject(value);
|
|
173
|
+
if (!record)
|
|
174
|
+
continue;
|
|
175
|
+
Object.assign(flattened, record);
|
|
176
|
+
}
|
|
177
|
+
return Object.keys(flattened).length > 0 ? flattened : undefined;
|
|
178
|
+
}
|
|
137
179
|
function argumentValue(argument) {
|
|
138
180
|
const value = argument.value;
|
|
139
181
|
if (value === undefined || value === null)
|
|
@@ -255,12 +297,13 @@ export function mcpServerNameFromV0Entry(entry) {
|
|
|
255
297
|
}
|
|
256
298
|
return name;
|
|
257
299
|
}
|
|
258
|
-
export function mcpServerFromV0Entry(entry) {
|
|
300
|
+
export function mcpServerFromV0Entry(entry, options = {}) {
|
|
259
301
|
if (!entry || typeof entry !== "object" || Array.isArray(entry))
|
|
260
302
|
throw new Error("v0 server.json entry must be an object");
|
|
261
303
|
const record = normalizeServerEntry(entry);
|
|
262
304
|
if (!record)
|
|
263
305
|
throw new Error("v0 server.json entry must be an object");
|
|
306
|
+
const meta = flattenRequestedMeta(entry, options.metaKeys);
|
|
264
307
|
const transport = pickTransport(record);
|
|
265
308
|
const command = pickString(record, ["command", "cmd"]);
|
|
266
309
|
const url = pickString(record, ["url", "endpoint"]);
|
|
@@ -273,6 +316,7 @@ export function mcpServerFromV0Entry(entry) {
|
|
|
273
316
|
args: asStringArray(record.args),
|
|
274
317
|
env: asStringRecord(record.env),
|
|
275
318
|
cwd: pickString(record, ["cwd"]),
|
|
319
|
+
...meta,
|
|
276
320
|
});
|
|
277
321
|
}
|
|
278
322
|
if (transport === "http" || transport === "sse" || url) {
|
|
@@ -282,6 +326,7 @@ export function mcpServerFromV0Entry(entry) {
|
|
|
282
326
|
transport: transport === "sse" ? "sse" : "http",
|
|
283
327
|
url,
|
|
284
328
|
headers: asStringRecord(record.headers),
|
|
329
|
+
...meta,
|
|
285
330
|
});
|
|
286
331
|
}
|
|
287
332
|
throw new Error(`Could not determine MCP server transport from v0 server.json entry:\n${JSON.stringify(entry, null, 2)}`);
|
|
@@ -290,15 +335,36 @@ export function mcpServersFromServerJson(serverJson) {
|
|
|
290
335
|
const entries = serverJson.mcpServers ?? serverJson.servers ?? {};
|
|
291
336
|
return Object.fromEntries(Object.entries(entries).map(([name, entry]) => [name, mcpServerFromV0Entry(entry)]));
|
|
292
337
|
}
|
|
293
|
-
|
|
338
|
+
export function codexMcpFromMcpServer(server) {
|
|
339
|
+
if (server.transport === "stdio") {
|
|
340
|
+
return compactObject({
|
|
341
|
+
command: server.command,
|
|
342
|
+
args: asStringArray(server.args),
|
|
343
|
+
env: asStringRecord(server.env),
|
|
344
|
+
cwd: pickString(server, ["cwd"]),
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
return compactObject({
|
|
348
|
+
transport: server.transport,
|
|
349
|
+
url: server.url,
|
|
350
|
+
headers: asStringRecord(server.headers),
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
export function codexMcpJsonFromMcpJson(mcpJson) {
|
|
354
|
+
return {
|
|
355
|
+
mcp_servers: Object.fromEntries(Object.entries(mcpJson.mcpServers).map(([name, server]) => [name, codexMcpFromMcpServer(server)])),
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
async function buildPlugin(client, plugin, options = {}) {
|
|
294
359
|
const pluginName = sanitizeName(plugin.name);
|
|
360
|
+
const codexPluginName = sanitizeKebabName(plugin.name);
|
|
295
361
|
const mcpServers = {};
|
|
296
362
|
for (const resource of plugin.resources) {
|
|
297
363
|
if (resource.kind !== "mcp")
|
|
298
364
|
continue;
|
|
299
365
|
const mcpAsset = await client.mcp(resource.resourceId);
|
|
300
366
|
const serverEntry = await client.v0Server(mcpAsset.name);
|
|
301
|
-
mcpServers[mcpServerNameFromV0Entry(serverEntry)] = mcpServerFromV0Entry(serverEntry);
|
|
367
|
+
mcpServers[mcpServerNameFromV0Entry(serverEntry)] = mcpServerFromV0Entry(serverEntry, options);
|
|
302
368
|
}
|
|
303
369
|
const skills = [];
|
|
304
370
|
const pluginJson = {
|
|
@@ -306,20 +372,54 @@ async function buildPlugin(client, plugin) {
|
|
|
306
372
|
description: plugin.description || plugin.summary,
|
|
307
373
|
version: plugin.version,
|
|
308
374
|
};
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
375
|
+
const codexPluginJson = {
|
|
376
|
+
name: codexPluginName,
|
|
377
|
+
description: plugin.description || plugin.summary,
|
|
378
|
+
version: plugin.version,
|
|
379
|
+
interface: {
|
|
380
|
+
displayName: plugin.title || plugin.name,
|
|
381
|
+
shortDescription: plugin.description || plugin.summary,
|
|
382
|
+
developerName: "Azure API Center",
|
|
383
|
+
category: "Developer Tools",
|
|
384
|
+
},
|
|
385
|
+
};
|
|
386
|
+
const mcpJson = { mcpServers };
|
|
387
|
+
if (Object.keys(mcpServers).length > 0) {
|
|
388
|
+
pluginJson.mcpServers = "./.mcp.json";
|
|
389
|
+
codexPluginJson.mcpServers = "./.codex.mcp.json";
|
|
390
|
+
}
|
|
391
|
+
if (skills.length > 0) {
|
|
312
392
|
pluginJson.skills = ["./skills/"];
|
|
393
|
+
codexPluginJson.skills = "./skills/";
|
|
394
|
+
}
|
|
313
395
|
return {
|
|
314
|
-
mcpJson
|
|
396
|
+
mcpJson,
|
|
397
|
+
codexMcpJson: codexMcpJsonFromMcpJson(mcpJson),
|
|
315
398
|
pluginJson,
|
|
399
|
+
codexPluginJson,
|
|
316
400
|
marketplaceEntry: {
|
|
317
401
|
name: plugin.name,
|
|
318
402
|
version: plugin.version,
|
|
319
403
|
description: plugin.description || plugin.summary,
|
|
320
|
-
source:
|
|
404
|
+
source: `./plugins/${pluginName}`,
|
|
321
405
|
skills,
|
|
322
406
|
},
|
|
407
|
+
codexMarketplaceEntry: {
|
|
408
|
+
name: codexPluginName,
|
|
409
|
+
source: {
|
|
410
|
+
source: "local",
|
|
411
|
+
path: `./plugins/${pluginName}`,
|
|
412
|
+
},
|
|
413
|
+
policy: {
|
|
414
|
+
installation: "AVAILABLE",
|
|
415
|
+
authentication: "ON_USE",
|
|
416
|
+
},
|
|
417
|
+
category: "Developer Tools",
|
|
418
|
+
interface: {
|
|
419
|
+
displayName: plugin.title || plugin.name,
|
|
420
|
+
description: plugin.description || plugin.summary,
|
|
421
|
+
},
|
|
422
|
+
},
|
|
323
423
|
};
|
|
324
424
|
}
|
|
325
425
|
async function writeJson(path, value) {
|
|
@@ -344,17 +444,21 @@ export async function generateMarketplaceGit(info, options = {}) {
|
|
|
344
444
|
const tempRoot = await mkdtemp(join(tmpdir(), "gen-apic-mp-"));
|
|
345
445
|
const marketplaceRoot = join(tempRoot, "marketplace");
|
|
346
446
|
const marketplacePlugins = [];
|
|
447
|
+
const codexMarketplacePlugins = [];
|
|
347
448
|
try {
|
|
348
449
|
for await (const page of client.apis()) {
|
|
349
450
|
for (const item of page) {
|
|
350
451
|
if (item.kind !== "plugin")
|
|
351
452
|
continue;
|
|
352
453
|
const pluginAsset = await client.plugin(item.name);
|
|
353
|
-
const built = await buildPlugin(client, pluginAsset);
|
|
454
|
+
const built = await buildPlugin(client, pluginAsset, { metaKeys: options.mcpMetaKeys });
|
|
354
455
|
const pluginDir = join(marketplaceRoot, "plugins", sanitizeName(pluginAsset.name));
|
|
355
456
|
marketplacePlugins.push(built.marketplaceEntry);
|
|
457
|
+
codexMarketplacePlugins.push(built.codexMarketplaceEntry);
|
|
356
458
|
await writeJson(join(pluginDir, "plugin.json"), built.pluginJson);
|
|
459
|
+
await writeJson(join(pluginDir, ".codex-plugin", "plugin.json"), built.codexPluginJson);
|
|
357
460
|
await writeJson(join(pluginDir, ".mcp.json"), built.mcpJson);
|
|
461
|
+
await writeJson(join(pluginDir, ".codex.mcp.json"), built.codexMcpJson);
|
|
358
462
|
}
|
|
359
463
|
}
|
|
360
464
|
const marketplaceJson = {
|
|
@@ -368,8 +472,16 @@ export async function generateMarketplaceGit(info, options = {}) {
|
|
|
368
472
|
},
|
|
369
473
|
plugins: marketplacePlugins,
|
|
370
474
|
};
|
|
475
|
+
const codexMarketplaceJson = {
|
|
476
|
+
name: sanitizeKebabName(info.workspaceName || config.title),
|
|
477
|
+
interface: {
|
|
478
|
+
displayName: config.title,
|
|
479
|
+
},
|
|
480
|
+
plugins: codexMarketplacePlugins,
|
|
481
|
+
};
|
|
371
482
|
await writeJson(join(marketplaceRoot, ".github", "plugin", "marketplace.json"), marketplaceJson);
|
|
372
483
|
await writeJson(join(marketplaceRoot, ".claude-plugin", "marketplace.json"), marketplaceJson);
|
|
484
|
+
await writeJson(join(marketplaceRoot, ".agents", "plugins", "marketplace.json"), codexMarketplaceJson);
|
|
373
485
|
const unpackPath = options.unpack ? resolve(options.unpack) : undefined;
|
|
374
486
|
if (unpackPath) {
|
|
375
487
|
await mkdir(unpackPath, { recursive: true });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marketplace.js","sourceRoot":"","sources":["../../src/server/marketplace.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"marketplace.js","sourceRoot":"","sources":["../../src/server/marketplace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvF,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAItC,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAE1C,MAAM,OAAO,eAAe;IAKE;IAJ5B,IAAI,WAAW,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACnD,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACzC,IAAI,aAAa,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAEvD,YAA4B,IAAyB;QAAzB,SAAI,GAAJ,IAAI,CAAqB;IAAI,CAAC;IAE1D,KAAK,CAAC,KAAsB;QAC1B,OAAO,WAAW,IAAI,CAAC,WAAW,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,qBAAqB,CAAC;IAClF,CAAC;IAED,IAAI,CAAC,KAAsB,EAAE,IAAY;QACvC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;IACxC,CAAC;IAED,GAAG,CAAC,KAAsB,EAAE,IAAY,EAAE,SAAkC,EAAE;QAC5E,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;QAC5C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;YAC/C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QACxC,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IAED,SAAS,CAAC,IAAY,EAAE,SAAkC,EAAE;QAC1D,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,IAAI,CAAC,aAAa,IAAI,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;IAC9E,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,GAAW;QACtB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAAE,MAAM,KAAK,CAAC,8BAA8B,GAAG,EAAE,CAAC,CAAC;YACnE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;QAC/B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,CAAC,KAAK,CAAI,GAAW;QACzB,IAAI,QAAQ,GAAG,GAAG,CAAC;QACnB,GAAG,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAyB,QAAQ,CAAC,CAAC;YAChE,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC;gBAC1B,MAAM,MAAM,CAAC,KAAK,CAAC;YACrB,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;QACnC,CAAC,QAAQ,QAAQ,EAAE;IACrB,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,IAAI,CAAC,GAAG,CAAqB,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,CAAC,IAAI,GAAG,EAAE,EAAE,KAAc;QAC5B,OAAO,IAAI,CAAC,KAAK,CAAqB,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACjF,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAY;QACvB,OAAO,IAAI,CAAC,GAAG,CAAoB,IAAI,CAAC,SAAS,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,UAAkB;QAC1B,OAAO,IAAI,CAAC,GAAG,CAAiB,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY;QACzB,OAAO,IAAI,CAAC,GAAG,CAA8B,IAAI,CAAC,SAAS,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,CAAC;IACrF,CAAC;CACF;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK;SACT,IAAI,EAAE;SACN,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC;SACjC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC;AAC1C,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,OAAO,KAAK;SACT,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC;AAC1C,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAC7D,OAAO,SAAS,CAAC;IAEnB,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAChD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI;YAAE,SAAS;QAClD,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC;IAC1B,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7D,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC5C,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAmC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACvF,CAAC;AAED,SAAS,UAAU,CAAC,KAAc,EAAE,IAAc;IAChD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAClF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;YACjB,MAAM,SAAS,GAAI,KAAiC,CAAC,GAAG,CAAC,CAAC;YAC1D,IAAI,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;gBACzE,OAAO,SAAoC,CAAC;QAChD,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,UAAU,CAAC,KAAc,EAAE,IAAc;IAChD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAClF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,SAAS,GAAI,KAAiC,CAAC,GAAG,CAAC,CAAC;QAC1D,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;IAC9E,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAClF,OAAO,KAAgC,CAAC;AAC1C,CAAC;AAED,SAAS,aAAa,CAAC,KAA8B;IACnD,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IACvE,IAAI,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IACjC,IAAI,SAAS,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC;IAC1C,IAAI,SAAS,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,SAAS,KAAK,iBAAiB,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,OAAO;QAClF,OAAO,MAAM,CAAC;IAChB,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,aAAa,CAAoC,KAAQ;IAChE,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC,CAC1D,CAAC;AACT,CAAC;AAED,SAAS,iBAAiB,CACxB,KAA8B,EAC9B,WAAqB,EAAE;IAEvB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAE5C,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG;QAClB,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC;QAC7B,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;KACxB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAoC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAE/D,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAE/C,MAAM,SAAS,GAA4B,EAAE,CAAC;IAC9C,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;YACjC,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;gBAClB,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC7B,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AACnE,CAAC;AAED,SAAS,oBAAoB,CAC3B,KAA8B,EAC9B,WAAqB,EAAE;IAEvB,MAAM,aAAa,GAAG,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACzD,IAAI,CAAC,aAAa;QAAE,OAAO,SAAS,CAAC;IAErC,MAAM,SAAS,GAA4B,EAAE,CAAC;IAC9C,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM;YAAE,SAAS;QACtB,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AACnE,CAAC;AAED,SAAS,aAAa,CAAC,QAAiC;IACtD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;IAC7B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5D,OAAO,GAAG,KAAK,EAAE,CAAC;AACpB,CAAC;AAED,SAAS,UAAU,CAAC,YAAqC;IACvD,MAAM,oBAAoB,GAAG,aAAa,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC;IAC9E,IAAI,oBAAoB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAExD,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,QAAQ,IAAI,oBAAoB,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAC3C,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7D,CAAC;AAED,SAAS,WAAW,CAAC,YAAqC;IACxD,MAAM,gBAAgB,GAAG,aAAa,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;IACtE,MAAM,gBAAgB,GAAG,aAAa,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACtD,MAAM,YAAY,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC,aAAa,CAAC,CAAC;WACpD,CAAC,YAAY,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK;YAChC,CAAC,CAAC,YAAY,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK;gBAC/B,CAAC,CAAC,YAAY,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ;oBACjC,CAAC,CAAC,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK;wBAChC,CAAC,CAAC,SAAS,CAAC,CAAC;IAEvB,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,KAAK,MAAM,QAAQ,IAAI,gBAAgB,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QAEtC,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,EAAE,CAAC;YAC7B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;gBAC5C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;iBAAM,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;gBAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACzB,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,KAAK,KAAK,SAAS;YACrB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACrE,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;YAClD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAC/D,CAAC;aAAM,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAC9E,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,gBAAgB,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QAEtC,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,EAAE,CAAC;YAC7B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;gBAC5C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;iBAAM,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;gBAC7B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACzB,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,KAAK,KAAK,SAAS;YACrB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,OAAO;QACL,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QACxC,GAAG,EAAE,UAAU,CAAC,YAAY,CAAC;KAC9B,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,KAA8B;IAC1D,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAE9B,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,CAAC,YAAY;QAAE,OAAO,MAAM,CAAC;IAEjC,MAAM,OAAO,GAAG,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClE,MAAM,QAAQ,GAAG,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,MAAM,gBAAgB,GAAG,QAAQ,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAC7D,MAAM,aAAa,GAAG,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE/E,OAAO,aAAa,CAAC;QACnB,GAAG,MAAM;QACT,GAAG,YAAY;QACf,SAAS,EAAE,UAAU,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC;eACzC,UAAU,CAAC,gBAAgB,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;eACnD,UAAU,CAAC,YAAY,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACpD,GAAG,EAAE,UAAU,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC;eAClC,UAAU,CAAC,gBAAgB,EAAE,CAAC,KAAK,CAAC,CAAC;eACrC,UAAU,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,CAAC;QACtC,OAAO,EAAE,aAAa,EAAE,OAAO,IAAI,gBAAgB,EAAE,OAAO,IAAI,YAAY,CAAC,OAAO;QACpF,OAAO,EAAE,aAAa,EAAE,OAAO,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC/E,IAAI,EAAE,aAAa,EAAE,IAAI,IAAI,YAAY,CAAC,IAAI;QAC9C,GAAG,EAAE,aAAa,EAAE,GAAG,IAAI,YAAY,CAAC,GAAG;KAC5C,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAA8B;IACrE,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CACb,mEAAmE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CACpG,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,KAA8B,EAC9B,UAA0C,EAAE;IAE5C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAE5D,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM;QACT,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAE5D,MAAM,IAAI,GAAG,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC;IAEpD,IAAI,SAAS,KAAK,OAAO,IAAI,OAAO,EAAE,CAAC;QACrC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAE3E,OAAO,aAAa,CAAC;YACnB,SAAS,EAAE,OAAO;YAClB,OAAO;YACP,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC;YAChC,GAAG,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC;YAC/B,GAAG,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;YAChC,GAAG,IAAI;SACR,CAAoB,CAAC;IACxB,CAAC;IAED,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,KAAK,IAAI,GAAG,EAAE,CAAC;QACvD,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAElE,OAAO,aAAa,CAAC;YACnB,SAAS,EAAE,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM;YAC/C,GAAG;YACH,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC;YACvC,GAAG,IAAI;SACR,CAAoB,CAAC;IACxB,CAAC;IAED,MAAM,IAAI,KAAK,CACb,wEAAwE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CACzG,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,UAA4B;IACnE,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,IAAI,UAAU,CAAC,OAAO,IAAI,EAAE,CAAC;IAClE,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAC1C,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAuB;IAC3D,IAAI,MAAM,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,aAAa,CAAC;YACnB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC;YAChC,GAAG,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC;YAC/B,GAAG,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;SACjC,CAA0B,CAAC;IAC9B,CAAC;IAED,OAAO,aAAa,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,GAAG,EAAE,MAAM,CAAC,GAAG;QACf,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC;KACxC,CAA0B,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAsB;IAC5D,OAAO;QACL,WAAW,EAAE,MAAM,CAAC,WAAW,CAC7B,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,CAClG;KACF,CAAC;AACJ,CAAC;AAWD,KAAK,UAAU,WAAW,CACxB,MAAuB,EACvB,MAAyB,EACzB,UAA0C,EAAE;IAE5C,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,eAAe,GAAG,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,UAAU,GAAoC,EAAE,CAAC;IAEvD,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACxC,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK;YAAE,SAAS;QAEtC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzD,UAAU,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC,GAAG,oBAAoB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACjG,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,UAAU,GAAqB;QACnC,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,OAAO;QACjD,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC;IACF,MAAM,eAAe,GAA0B;QAC7C,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,OAAO;QACjD,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE;YACT,WAAW,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI;YACxC,gBAAgB,EAAE,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,OAAO;YACtD,aAAa,EAAE,kBAAkB;YACjC,QAAQ,EAAE,iBAAiB;SAC5B;KACF,CAAC;IACF,MAAM,OAAO,GAAkB,EAAE,UAAU,EAAE,CAAC;IAE9C,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvC,UAAU,CAAC,UAAU,GAAG,aAAa,CAAC;QACtC,eAAe,CAAC,UAAU,GAAG,mBAAmB,CAAC;IACnD,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,UAAU,CAAC,MAAM,GAAG,CAAC,WAAW,CAAC,CAAC;QAClC,eAAe,CAAC,MAAM,GAAG,WAAW,CAAC;IACvC,CAAC;IAED,OAAO;QACL,OAAO;QACP,YAAY,EAAE,uBAAuB,CAAC,OAAO,CAAC;QAC9C,UAAU;QACV,eAAe;QACf,gBAAgB,EAAE;YAChB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,OAAO;YACjD,MAAM,EAAE,aAAa,UAAU,EAAE;YACjC,MAAM;SACP;QACD,qBAAqB,EAAE;YACrB,IAAI,EAAE,eAAe;YACrB,MAAM,EAAE;gBACN,MAAM,EAAE,OAAO;gBACf,IAAI,EAAE,aAAa,UAAU,EAAE;aAChC;YACD,MAAM,EAAE;gBACN,YAAY,EAAE,WAAW;gBACzB,cAAc,EAAE,QAAQ;aACzB;YACD,QAAQ,EAAE,iBAAiB;YAC3B,SAAS,EAAE;gBACT,WAAW,EAAE,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI;gBACxC,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,OAAO;aAClD;SACF;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,IAAY,EAAE,KAAc;IACnD,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACvE,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,SAAiB,EAAE,UAAkB;IAC/D,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;AAC3E,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAY;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAOD,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,IAAyB,EACzB,UAAyC,EAAE;IAE3C,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;IAC/D,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IACtD,MAAM,kBAAkB,GAAkC,EAAE,CAAC;IAC7D,MAAM,uBAAuB,GAAuC,EAAE,CAAC;IAEvE,IAAI,CAAC;QACH,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YACvC,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;gBACxB,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;oBAAE,SAAS;gBAErC,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnD,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;gBACxF,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;gBAEnF,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBAChD,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBAC1D,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;gBAClE,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,EAAE,aAAa,CAAC,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;gBACxF,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC7D,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,iBAAiB,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;QAED,MAAM,eAAe,GAA0B;YAC7C,IAAI,EAAE,MAAM,CAAC,KAAK;YAClB,QAAQ,EAAE;gBACR,WAAW,EAAE,2BAA2B,MAAM,CAAC,KAAK,EAAE;gBACtD,OAAO,EAAE,OAAO;aACjB;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,MAAM,CAAC,KAAK;aACnB;YACD,OAAO,EAAE,kBAAkB;SAC5B,CAAC;QACF,MAAM,oBAAoB,GAA+B;YACvD,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC,aAAa,IAAI,MAAM,CAAC,KAAK,CAAC;YAC3D,SAAS,EAAE;gBACT,WAAW,EAAE,MAAM,CAAC,KAAK;aAC1B;YACD,OAAO,EAAE,uBAAuB;SACjC,CAAC;QAEF,MAAM,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,kBAAkB,CAAC,EAAE,eAAe,CAAC,CAAC;QACjG,MAAM,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,EAAE,eAAe,CAAC,CAAC;QAC9F,MAAM,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,CAAC,EAAE,oBAAoB,CAAC,CAAC;QAEvG,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACxE,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7C,MAAM,EAAE,CAAC,eAAe,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,OAAO,GAAG,UAAU;YACxB,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;QAC/E,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACnC,MAAM,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,kBAAkB,GAAG,MAAM,QAAQ,CACvC,IAAI,CAAC,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,kBAAkB,CAAC,EAC9D,MAAM,CACP,CAAC;QAEF,OAAO;YACL,OAAO;YACP,UAAU;YACV,WAAW,EAAE,kBAAkB,CAAC,MAAM;YACtC,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAA0B;SACzE,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED,MAAM,6BAA6B,GAAG,6BAA6B,CAAC;AAEpE,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,KAAyB;IACpE,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAE7B,IAAI,KAAK,KAAK,6BAA6B,EAAE,CAAC;QAC5C,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;QAC5D,IAAI,CAAC,MAAM,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CACb,+FAA+F,eAAe,EAAE,CACjH,CAAC;QACJ,CAAC;QAED,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;IACvB,CAAC;IAED,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import test from "node:test";
|
|
2
2
|
import assert from "node:assert/strict";
|
|
3
|
-
import {
|
|
3
|
+
import { MarketplaceSchema as ClaudeMarketplaceSchema, PluginSchema as ClaudePluginSchema, } from "@typeforged/claude-plugin-marketplaces/v1";
|
|
4
|
+
import { codexMcpJsonFromMcpJson, mcpServerFromV0Entry, mcpServerNameFromV0Entry, mcpServersFromServerJson, } from "./marketplace.js";
|
|
4
5
|
test("translates stdio-style v0 server.json entries", () => {
|
|
5
6
|
const server = mcpServerFromV0Entry({
|
|
6
7
|
command: "npx",
|
|
@@ -66,9 +67,18 @@ test("translates nested server remotes and uses nested name", () => {
|
|
|
66
67
|
url: "https://learn.microsoft.com/api/mcp",
|
|
67
68
|
},
|
|
68
69
|
],
|
|
70
|
+
_meta: {
|
|
71
|
+
"custom.auth": {
|
|
72
|
+
clientId: "client-id",
|
|
73
|
+
publicClient: true,
|
|
74
|
+
},
|
|
75
|
+
},
|
|
69
76
|
},
|
|
70
77
|
_meta: {
|
|
71
|
-
"
|
|
78
|
+
"registry.id": "placeholder-id",
|
|
79
|
+
"custom.auth": {
|
|
80
|
+
clientId: "wrong-level",
|
|
81
|
+
},
|
|
72
82
|
},
|
|
73
83
|
};
|
|
74
84
|
assert.equal(mcpServerNameFromV0Entry(entry), "msdocs-mcp-server");
|
|
@@ -76,6 +86,14 @@ test("translates nested server remotes and uses nested name", () => {
|
|
|
76
86
|
transport: "sse",
|
|
77
87
|
url: "https://learn.microsoft.com/api/mcp",
|
|
78
88
|
});
|
|
89
|
+
assert.deepEqual(mcpServerFromV0Entry(entry, {
|
|
90
|
+
metaKeys: ["custom.auth", "registry.id"],
|
|
91
|
+
}), {
|
|
92
|
+
transport: "sse",
|
|
93
|
+
url: "https://learn.microsoft.com/api/mcp",
|
|
94
|
+
clientId: "client-id",
|
|
95
|
+
publicClient: true,
|
|
96
|
+
});
|
|
79
97
|
});
|
|
80
98
|
test("falls back to first package when nested server has no remotes", () => {
|
|
81
99
|
const entry = {
|
|
@@ -105,6 +123,12 @@ test("falls back to first package when nested server has no remotes", () => {
|
|
|
105
123
|
},
|
|
106
124
|
],
|
|
107
125
|
},
|
|
126
|
+
_meta: {
|
|
127
|
+
"oauth-client": {
|
|
128
|
+
client_name: "example",
|
|
129
|
+
},
|
|
130
|
+
ignored: true,
|
|
131
|
+
},
|
|
108
132
|
};
|
|
109
133
|
assert.equal(mcpServerNameFromV0Entry(entry), "pkg-server");
|
|
110
134
|
assert.deepEqual(mcpServerFromV0Entry(entry), {
|
|
@@ -115,5 +139,97 @@ test("falls back to first package when nested server has no remotes", () => {
|
|
|
115
139
|
API_KEY: "secret",
|
|
116
140
|
},
|
|
117
141
|
});
|
|
142
|
+
assert.deepEqual(mcpServerFromV0Entry(entry, {
|
|
143
|
+
metaKeys: ["oauth-client"],
|
|
144
|
+
}), {
|
|
145
|
+
transport: "stdio",
|
|
146
|
+
command: "npx",
|
|
147
|
+
args: ["-y", "@example/pkg-server@1.2.3", "--mode", "test"],
|
|
148
|
+
env: {
|
|
149
|
+
API_KEY: "secret",
|
|
150
|
+
},
|
|
151
|
+
client_name: "example",
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
test("projects MCP config to Codex format and drops extra properties", () => {
|
|
155
|
+
assert.deepEqual(codexMcpJsonFromMcpJson({
|
|
156
|
+
mcpServers: {
|
|
157
|
+
remote: {
|
|
158
|
+
transport: "sse",
|
|
159
|
+
url: "https://example.test/mcp",
|
|
160
|
+
headers: {
|
|
161
|
+
Authorization: "Bearer token",
|
|
162
|
+
},
|
|
163
|
+
oauthClientId: "client-id",
|
|
164
|
+
oauthPublicClient: true,
|
|
165
|
+
},
|
|
166
|
+
stdio: {
|
|
167
|
+
transport: "stdio",
|
|
168
|
+
command: "npx",
|
|
169
|
+
args: ["-y", "@example/server"],
|
|
170
|
+
env: {
|
|
171
|
+
API_KEY: "secret",
|
|
172
|
+
},
|
|
173
|
+
cwd: "/tmp/example",
|
|
174
|
+
extra: "ignored",
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
}), {
|
|
178
|
+
mcp_servers: {
|
|
179
|
+
remote: {
|
|
180
|
+
transport: "sse",
|
|
181
|
+
url: "https://example.test/mcp",
|
|
182
|
+
headers: {
|
|
183
|
+
Authorization: "Bearer token",
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
stdio: {
|
|
187
|
+
command: "npx",
|
|
188
|
+
args: ["-y", "@example/server"],
|
|
189
|
+
env: {
|
|
190
|
+
API_KEY: "secret",
|
|
191
|
+
},
|
|
192
|
+
cwd: "/tmp/example",
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
test("current Claude plugin manifest shape matches typeforged schema", () => {
|
|
198
|
+
const currentPluginJson = {
|
|
199
|
+
name: "example-plugin",
|
|
200
|
+
description: "Example plugin",
|
|
201
|
+
version: "1.0.0",
|
|
202
|
+
mcpServers: "./.mcp.json",
|
|
203
|
+
skills: ["./skills/"],
|
|
204
|
+
};
|
|
205
|
+
assert.deepEqual(ClaudePluginSchema.parse(currentPluginJson), currentPluginJson);
|
|
206
|
+
});
|
|
207
|
+
test("current Claude marketplace manifest shape matches typeforged schema", () => {
|
|
208
|
+
const currentMarketplaceJson = {
|
|
209
|
+
name: "Example Marketplace",
|
|
210
|
+
metadata: {
|
|
211
|
+
description: "Example marketplace",
|
|
212
|
+
version: "1.0.0",
|
|
213
|
+
},
|
|
214
|
+
owner: {
|
|
215
|
+
name: "Example Owner",
|
|
216
|
+
},
|
|
217
|
+
plugins: [
|
|
218
|
+
{
|
|
219
|
+
name: "example-plugin",
|
|
220
|
+
source: "./plugins/example-plugin",
|
|
221
|
+
description: "Example plugin",
|
|
222
|
+
version: "1.0.0",
|
|
223
|
+
skills: [],
|
|
224
|
+
},
|
|
225
|
+
],
|
|
226
|
+
};
|
|
227
|
+
assert.deepEqual(ClaudeMarketplaceSchema.parse(currentMarketplaceJson), {
|
|
228
|
+
...currentMarketplaceJson,
|
|
229
|
+
plugins: currentMarketplaceJson.plugins.map(plugin => ({
|
|
230
|
+
...plugin,
|
|
231
|
+
strict: true,
|
|
232
|
+
})),
|
|
233
|
+
});
|
|
118
234
|
});
|
|
119
235
|
//# sourceMappingURL=marketplace.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marketplace.test.js","sourceRoot":"","sources":["../../src/server/marketplace.test.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,MAAM,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"marketplace.test.js","sourceRoot":"","sources":["../../src/server/marketplace.test.ts"],"names":[],"mappings":"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"}
|
package/dist/shared/types.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { MarketplaceJson as TypeforgedCodexMarketplaceJson, MarketplacePluginJson as TypeforgedCodexMarketplacePluginJson, PluginJson as TypeforgedCodexPluginJson } from "@typeforged/codex-plugin-marketplace/v1";
|
|
1
2
|
export type WorkspaceInfo = {
|
|
2
3
|
serviceName: string;
|
|
3
4
|
region: string;
|
|
@@ -90,6 +91,21 @@ export type McpServer = (McpServerStdio | McpServerHttp) & JsonObject;
|
|
|
90
91
|
export type McpJson = {
|
|
91
92
|
mcpServers: Record<string, McpServer>;
|
|
92
93
|
};
|
|
94
|
+
export type CodexMcp = {
|
|
95
|
+
command?: string;
|
|
96
|
+
args?: string[];
|
|
97
|
+
env?: Record<string, string>;
|
|
98
|
+
cwd?: string;
|
|
99
|
+
transport?: 'http' | 'sse';
|
|
100
|
+
url?: string;
|
|
101
|
+
headers?: Record<string, string>;
|
|
102
|
+
};
|
|
103
|
+
export type CodexMcpJson = Record<string, CodexMcp> | {
|
|
104
|
+
mcp_servers: Record<string, CodexMcp>;
|
|
105
|
+
};
|
|
106
|
+
export type GenerateMcpServerOptions = {
|
|
107
|
+
metaKeys?: string[];
|
|
108
|
+
};
|
|
93
109
|
export type PluginJson = {
|
|
94
110
|
name: string;
|
|
95
111
|
description: string;
|
|
@@ -97,6 +113,7 @@ export type PluginJson = {
|
|
|
97
113
|
mcpServers?: string;
|
|
98
114
|
skills?: string[];
|
|
99
115
|
};
|
|
116
|
+
export type CodexPluginJson = TypeforgedCodexPluginJson;
|
|
100
117
|
export type MarketplacePluginJson = {
|
|
101
118
|
name: string;
|
|
102
119
|
version: string;
|
|
@@ -128,6 +145,8 @@ export type MarketplaceJson = {
|
|
|
128
145
|
};
|
|
129
146
|
plugins: MarketplacePluginJson[];
|
|
130
147
|
};
|
|
148
|
+
export type CodexMarketplacePluginJson = TypeforgedCodexMarketplacePluginJson;
|
|
149
|
+
export type CodexMarketplaceJson = TypeforgedCodexMarketplaceJson;
|
|
131
150
|
export type McpAsset = McpAssetItem & {
|
|
132
151
|
version?: string;
|
|
133
152
|
serverJson?: ServerJson;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cmdforge/gen-apic-mp",
|
|
3
3
|
"description": "Generate a marketplace.zip containing the contents of an expected marketplace.git repository for the given Azure API Center portal.",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.4",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"author": {
|
|
@@ -30,7 +30,9 @@
|
|
|
30
30
|
"test": "node --test --import tsx src/**/*.test.ts"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"commander": "15.0.0"
|
|
33
|
+
"commander": "15.0.0",
|
|
34
|
+
"@typeforged/codex-plugin-marketplace": "1.0.1",
|
|
35
|
+
"@typeforged/claude-plugin-marketplaces": "1.0.1"
|
|
34
36
|
},
|
|
35
37
|
"devDependencies": {
|
|
36
38
|
"@types/node": "25.9.3",
|
package/src/server/cli.ts
CHANGED
|
@@ -9,6 +9,10 @@ const unpackOption = new Option(
|
|
|
9
9
|
"--unpack [directory]",
|
|
10
10
|
"Also unpack the generated marketplace into a directory; defaults to the current directory",
|
|
11
11
|
).preset(unpackPreset);
|
|
12
|
+
const mcpMetaOption = new Option(
|
|
13
|
+
"--mcp-meta <key>",
|
|
14
|
+
"Include the specified _meta key in generated .mcp.json server entries",
|
|
15
|
+
).argParser((value: string, previous: string[] = []) => [...previous, value]);
|
|
12
16
|
|
|
13
17
|
program.configureHelp({
|
|
14
18
|
optionDescription(option) {
|
|
@@ -24,14 +28,20 @@ program
|
|
|
24
28
|
.argument("<region>", "Region name")
|
|
25
29
|
.argument("<workspaceName>", "Workspace to convert into marketplace zip")
|
|
26
30
|
.addOption(unpackOption)
|
|
31
|
+
.addOption(mcpMetaOption)
|
|
27
32
|
.action(async (
|
|
28
33
|
serviceName: string,
|
|
29
34
|
region: string,
|
|
30
35
|
workspaceName: string,
|
|
31
|
-
options: { unpack?: string },
|
|
36
|
+
options: { unpack?: string; mcpMeta?: string[] },
|
|
32
37
|
) => {
|
|
33
38
|
const unpack = await resolveUnpackDirectory(options.unpack);
|
|
34
|
-
const
|
|
39
|
+
const mcpMetaKeys = options.mcpMeta;
|
|
40
|
+
|
|
41
|
+
const result = await generateMarketplaceGit(
|
|
42
|
+
{ serviceName, region, workspaceName },
|
|
43
|
+
{ unpack, mcpMetaKeys },
|
|
44
|
+
);
|
|
35
45
|
if (result.unpackPath) {
|
|
36
46
|
console.log(`Unpacked marketplace into ${result.unpackPath}`);
|
|
37
47
|
return;
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import test from "node:test";
|
|
2
2
|
import assert from "node:assert/strict";
|
|
3
|
+
import {
|
|
4
|
+
MarketplaceSchema as ClaudeMarketplaceSchema,
|
|
5
|
+
PluginSchema as ClaudePluginSchema,
|
|
6
|
+
} from "@typeforged/claude-plugin-marketplaces/v1";
|
|
3
7
|
|
|
4
8
|
import {
|
|
9
|
+
codexMcpJsonFromMcpJson,
|
|
5
10
|
mcpServerFromV0Entry,
|
|
6
11
|
mcpServerNameFromV0Entry,
|
|
7
12
|
mcpServersFromServerJson,
|
|
@@ -80,9 +85,18 @@ test("translates nested server remotes and uses nested name", () => {
|
|
|
80
85
|
url: "https://learn.microsoft.com/api/mcp",
|
|
81
86
|
},
|
|
82
87
|
],
|
|
88
|
+
_meta: {
|
|
89
|
+
"custom.auth": {
|
|
90
|
+
clientId: "client-id",
|
|
91
|
+
publicClient: true,
|
|
92
|
+
},
|
|
93
|
+
},
|
|
83
94
|
},
|
|
84
95
|
_meta: {
|
|
85
|
-
"
|
|
96
|
+
"registry.id": "placeholder-id",
|
|
97
|
+
"custom.auth": {
|
|
98
|
+
clientId: "wrong-level",
|
|
99
|
+
},
|
|
86
100
|
},
|
|
87
101
|
};
|
|
88
102
|
|
|
@@ -91,6 +105,14 @@ test("translates nested server remotes and uses nested name", () => {
|
|
|
91
105
|
transport: "sse",
|
|
92
106
|
url: "https://learn.microsoft.com/api/mcp",
|
|
93
107
|
});
|
|
108
|
+
assert.deepEqual(mcpServerFromV0Entry(entry, {
|
|
109
|
+
metaKeys: ["custom.auth", "registry.id"],
|
|
110
|
+
}), {
|
|
111
|
+
transport: "sse",
|
|
112
|
+
url: "https://learn.microsoft.com/api/mcp",
|
|
113
|
+
clientId: "client-id",
|
|
114
|
+
publicClient: true,
|
|
115
|
+
});
|
|
94
116
|
});
|
|
95
117
|
|
|
96
118
|
test("falls back to first package when nested server has no remotes", () => {
|
|
@@ -121,6 +143,12 @@ test("falls back to first package when nested server has no remotes", () => {
|
|
|
121
143
|
},
|
|
122
144
|
],
|
|
123
145
|
},
|
|
146
|
+
_meta: {
|
|
147
|
+
"oauth-client": {
|
|
148
|
+
client_name: "example",
|
|
149
|
+
},
|
|
150
|
+
ignored: true,
|
|
151
|
+
},
|
|
124
152
|
};
|
|
125
153
|
|
|
126
154
|
assert.equal(mcpServerNameFromV0Entry(entry), "pkg-server");
|
|
@@ -132,4 +160,110 @@ test("falls back to first package when nested server has no remotes", () => {
|
|
|
132
160
|
API_KEY: "secret",
|
|
133
161
|
},
|
|
134
162
|
});
|
|
163
|
+
assert.deepEqual(mcpServerFromV0Entry(entry, {
|
|
164
|
+
metaKeys: ["oauth-client"],
|
|
165
|
+
}), {
|
|
166
|
+
transport: "stdio",
|
|
167
|
+
command: "npx",
|
|
168
|
+
args: ["-y", "@example/pkg-server@1.2.3", "--mode", "test"],
|
|
169
|
+
env: {
|
|
170
|
+
API_KEY: "secret",
|
|
171
|
+
},
|
|
172
|
+
client_name: "example",
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
test("projects MCP config to Codex format and drops extra properties", () => {
|
|
177
|
+
assert.deepEqual(
|
|
178
|
+
codexMcpJsonFromMcpJson({
|
|
179
|
+
mcpServers: {
|
|
180
|
+
remote: {
|
|
181
|
+
transport: "sse",
|
|
182
|
+
url: "https://example.test/mcp",
|
|
183
|
+
headers: {
|
|
184
|
+
Authorization: "Bearer token",
|
|
185
|
+
},
|
|
186
|
+
oauthClientId: "client-id",
|
|
187
|
+
oauthPublicClient: true,
|
|
188
|
+
},
|
|
189
|
+
stdio: {
|
|
190
|
+
transport: "stdio",
|
|
191
|
+
command: "npx",
|
|
192
|
+
args: ["-y", "@example/server"],
|
|
193
|
+
env: {
|
|
194
|
+
API_KEY: "secret",
|
|
195
|
+
},
|
|
196
|
+
cwd: "/tmp/example",
|
|
197
|
+
extra: "ignored",
|
|
198
|
+
},
|
|
199
|
+
},
|
|
200
|
+
}),
|
|
201
|
+
{
|
|
202
|
+
mcp_servers: {
|
|
203
|
+
remote: {
|
|
204
|
+
transport: "sse",
|
|
205
|
+
url: "https://example.test/mcp",
|
|
206
|
+
headers: {
|
|
207
|
+
Authorization: "Bearer token",
|
|
208
|
+
},
|
|
209
|
+
},
|
|
210
|
+
stdio: {
|
|
211
|
+
command: "npx",
|
|
212
|
+
args: ["-y", "@example/server"],
|
|
213
|
+
env: {
|
|
214
|
+
API_KEY: "secret",
|
|
215
|
+
},
|
|
216
|
+
cwd: "/tmp/example",
|
|
217
|
+
},
|
|
218
|
+
},
|
|
219
|
+
},
|
|
220
|
+
);
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
test("current Claude plugin manifest shape matches typeforged schema", () => {
|
|
224
|
+
const currentPluginJson = {
|
|
225
|
+
name: "example-plugin",
|
|
226
|
+
description: "Example plugin",
|
|
227
|
+
version: "1.0.0",
|
|
228
|
+
mcpServers: "./.mcp.json",
|
|
229
|
+
skills: ["./skills/"],
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
assert.deepEqual(
|
|
233
|
+
ClaudePluginSchema.parse(currentPluginJson),
|
|
234
|
+
currentPluginJson,
|
|
235
|
+
);
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
test("current Claude marketplace manifest shape matches typeforged schema", () => {
|
|
239
|
+
const currentMarketplaceJson = {
|
|
240
|
+
name: "Example Marketplace",
|
|
241
|
+
metadata: {
|
|
242
|
+
description: "Example marketplace",
|
|
243
|
+
version: "1.0.0",
|
|
244
|
+
},
|
|
245
|
+
owner: {
|
|
246
|
+
name: "Example Owner",
|
|
247
|
+
},
|
|
248
|
+
plugins: [
|
|
249
|
+
{
|
|
250
|
+
name: "example-plugin",
|
|
251
|
+
source: "./plugins/example-plugin",
|
|
252
|
+
description: "Example plugin",
|
|
253
|
+
version: "1.0.0",
|
|
254
|
+
skills: [],
|
|
255
|
+
},
|
|
256
|
+
],
|
|
257
|
+
};
|
|
258
|
+
|
|
259
|
+
assert.deepEqual(
|
|
260
|
+
ClaudeMarketplaceSchema.parse(currentMarketplaceJson),
|
|
261
|
+
{
|
|
262
|
+
...currentMarketplaceJson,
|
|
263
|
+
plugins: currentMarketplaceJson.plugins.map(plugin => ({
|
|
264
|
+
...plugin,
|
|
265
|
+
strict: true,
|
|
266
|
+
})),
|
|
267
|
+
},
|
|
268
|
+
);
|
|
135
269
|
});
|
|
@@ -83,6 +83,14 @@ function sanitizeName(value: string) {
|
|
|
83
83
|
.replace(/^-+|-+$/g, "") || "unnamed";
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
+
function sanitizeKebabName(value: string) {
|
|
87
|
+
return value
|
|
88
|
+
.trim()
|
|
89
|
+
.toLowerCase()
|
|
90
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
91
|
+
.replace(/^-+|-+$/g, "") || "unnamed";
|
|
92
|
+
}
|
|
93
|
+
|
|
86
94
|
function asStringRecord(value: unknown) {
|
|
87
95
|
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
88
96
|
return undefined;
|
|
@@ -148,6 +156,51 @@ function compactObject<T extends Record<string, unknown>>(value: T): T {
|
|
|
148
156
|
) as T;
|
|
149
157
|
}
|
|
150
158
|
|
|
159
|
+
function pickRequestedMeta(
|
|
160
|
+
entry: types.V0ServerJsonEntry,
|
|
161
|
+
metaKeys: string[] = [],
|
|
162
|
+
) {
|
|
163
|
+
if (metaKeys.length === 0) return undefined;
|
|
164
|
+
|
|
165
|
+
const record = asObject(entry);
|
|
166
|
+
const nestedServer = asObject(record?.server);
|
|
167
|
+
const metaSources = [
|
|
168
|
+
asObject(nestedServer?._meta),
|
|
169
|
+
asObject(record?._meta),
|
|
170
|
+
].filter((value): value is Record<string, unknown> => !!value);
|
|
171
|
+
|
|
172
|
+
if (metaSources.length === 0) return undefined;
|
|
173
|
+
|
|
174
|
+
const requested: Record<string, unknown> = {};
|
|
175
|
+
for (const key of metaKeys) {
|
|
176
|
+
for (const source of metaSources) {
|
|
177
|
+
if (key in source) {
|
|
178
|
+
requested[key] = source[key];
|
|
179
|
+
break;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
return Object.keys(requested).length > 0 ? requested : undefined;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
function flattenRequestedMeta(
|
|
188
|
+
entry: types.V0ServerJsonEntry,
|
|
189
|
+
metaKeys: string[] = [],
|
|
190
|
+
) {
|
|
191
|
+
const requestedMeta = pickRequestedMeta(entry, metaKeys);
|
|
192
|
+
if (!requestedMeta) return undefined;
|
|
193
|
+
|
|
194
|
+
const flattened: Record<string, unknown> = {};
|
|
195
|
+
for (const value of Object.values(requestedMeta)) {
|
|
196
|
+
const record = asObject(value);
|
|
197
|
+
if (!record) continue;
|
|
198
|
+
Object.assign(flattened, record);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
return Object.keys(flattened).length > 0 ? flattened : undefined;
|
|
202
|
+
}
|
|
203
|
+
|
|
151
204
|
function argumentValue(argument: Record<string, unknown>) {
|
|
152
205
|
const value = argument.value;
|
|
153
206
|
if (value === undefined || value === null) return undefined;
|
|
@@ -282,6 +335,7 @@ export function mcpServerNameFromV0Entry(entry: types.V0ServerJsonEntry) {
|
|
|
282
335
|
|
|
283
336
|
export function mcpServerFromV0Entry(
|
|
284
337
|
entry: types.V0ServerJsonEntry,
|
|
338
|
+
options: types.GenerateMcpServerOptions = {},
|
|
285
339
|
): types.McpServer {
|
|
286
340
|
if (!entry || typeof entry !== "object" || Array.isArray(entry))
|
|
287
341
|
throw new Error("v0 server.json entry must be an object");
|
|
@@ -290,6 +344,7 @@ export function mcpServerFromV0Entry(
|
|
|
290
344
|
if (!record)
|
|
291
345
|
throw new Error("v0 server.json entry must be an object");
|
|
292
346
|
|
|
347
|
+
const meta = flattenRequestedMeta(entry, options.metaKeys);
|
|
293
348
|
const transport = pickTransport(record);
|
|
294
349
|
const command = pickString(record, ["command", "cmd"]);
|
|
295
350
|
const url = pickString(record, ["url", "endpoint"]);
|
|
@@ -303,6 +358,7 @@ export function mcpServerFromV0Entry(
|
|
|
303
358
|
args: asStringArray(record.args),
|
|
304
359
|
env: asStringRecord(record.env),
|
|
305
360
|
cwd: pickString(record, ["cwd"]),
|
|
361
|
+
...meta,
|
|
306
362
|
}) as types.McpServer;
|
|
307
363
|
}
|
|
308
364
|
|
|
@@ -313,6 +369,7 @@ export function mcpServerFromV0Entry(
|
|
|
313
369
|
transport: transport === "sse" ? "sse" : "http",
|
|
314
370
|
url,
|
|
315
371
|
headers: asStringRecord(record.headers),
|
|
372
|
+
...meta,
|
|
316
373
|
}) as types.McpServer;
|
|
317
374
|
}
|
|
318
375
|
|
|
@@ -328,17 +385,47 @@ export function mcpServersFromServerJson(serverJson: types.ServerJson) {
|
|
|
328
385
|
) satisfies Record<string, types.McpServer>;
|
|
329
386
|
}
|
|
330
387
|
|
|
388
|
+
export function codexMcpFromMcpServer(server: types.McpServer): types.CodexMcp {
|
|
389
|
+
if (server.transport === "stdio") {
|
|
390
|
+
return compactObject({
|
|
391
|
+
command: server.command,
|
|
392
|
+
args: asStringArray(server.args),
|
|
393
|
+
env: asStringRecord(server.env),
|
|
394
|
+
cwd: pickString(server, ["cwd"]),
|
|
395
|
+
}) satisfies types.CodexMcp;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
return compactObject({
|
|
399
|
+
transport: server.transport,
|
|
400
|
+
url: server.url,
|
|
401
|
+
headers: asStringRecord(server.headers),
|
|
402
|
+
}) satisfies types.CodexMcp;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
export function codexMcpJsonFromMcpJson(mcpJson: types.McpJson): types.CodexMcpJson {
|
|
406
|
+
return {
|
|
407
|
+
mcp_servers: Object.fromEntries(
|
|
408
|
+
Object.entries(mcpJson.mcpServers).map(([name, server]) => [name, codexMcpFromMcpServer(server)]),
|
|
409
|
+
),
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
|
|
331
413
|
type PluginBuildResult = {
|
|
332
414
|
mcpJson: types.McpJson;
|
|
415
|
+
codexMcpJson: types.CodexMcpJson;
|
|
333
416
|
pluginJson: types.PluginJson;
|
|
417
|
+
codexPluginJson: types.CodexPluginJson;
|
|
334
418
|
marketplaceEntry: types.MarketplacePluginJson;
|
|
419
|
+
codexMarketplaceEntry: types.CodexMarketplacePluginJson;
|
|
335
420
|
};
|
|
336
421
|
|
|
337
422
|
async function buildPlugin(
|
|
338
423
|
client: ApiCenterClient,
|
|
339
424
|
plugin: types.PluginAsset,
|
|
425
|
+
options: types.GenerateMcpServerOptions = {},
|
|
340
426
|
): Promise<PluginBuildResult> {
|
|
341
427
|
const pluginName = sanitizeName(plugin.name);
|
|
428
|
+
const codexPluginName = sanitizeKebabName(plugin.name);
|
|
342
429
|
const mcpServers: Record<string, types.McpServer> = {};
|
|
343
430
|
|
|
344
431
|
for (const resource of plugin.resources) {
|
|
@@ -346,7 +433,7 @@ async function buildPlugin(
|
|
|
346
433
|
|
|
347
434
|
const mcpAsset = await client.mcp(resource.resourceId);
|
|
348
435
|
const serverEntry = await client.v0Server(mcpAsset.name);
|
|
349
|
-
mcpServers[mcpServerNameFromV0Entry(serverEntry)] = mcpServerFromV0Entry(serverEntry);
|
|
436
|
+
mcpServers[mcpServerNameFromV0Entry(serverEntry)] = mcpServerFromV0Entry(serverEntry, options);
|
|
350
437
|
}
|
|
351
438
|
|
|
352
439
|
const skills: string[] = [];
|
|
@@ -355,23 +442,57 @@ async function buildPlugin(
|
|
|
355
442
|
description: plugin.description || plugin.summary,
|
|
356
443
|
version: plugin.version,
|
|
357
444
|
};
|
|
445
|
+
const codexPluginJson: types.CodexPluginJson = {
|
|
446
|
+
name: codexPluginName,
|
|
447
|
+
description: plugin.description || plugin.summary,
|
|
448
|
+
version: plugin.version,
|
|
449
|
+
interface: {
|
|
450
|
+
displayName: plugin.title || plugin.name,
|
|
451
|
+
shortDescription: plugin.description || plugin.summary,
|
|
452
|
+
developerName: "Azure API Center",
|
|
453
|
+
category: "Developer Tools",
|
|
454
|
+
},
|
|
455
|
+
};
|
|
456
|
+
const mcpJson: types.McpJson = { mcpServers };
|
|
358
457
|
|
|
359
|
-
if (Object.keys(mcpServers).length > 0)
|
|
360
|
-
pluginJson.mcpServers = "
|
|
458
|
+
if (Object.keys(mcpServers).length > 0) {
|
|
459
|
+
pluginJson.mcpServers = "./.mcp.json";
|
|
460
|
+
codexPluginJson.mcpServers = "./.codex.mcp.json";
|
|
461
|
+
}
|
|
361
462
|
|
|
362
|
-
if (skills.length > 0)
|
|
463
|
+
if (skills.length > 0) {
|
|
363
464
|
pluginJson.skills = ["./skills/"];
|
|
465
|
+
codexPluginJson.skills = "./skills/";
|
|
466
|
+
}
|
|
364
467
|
|
|
365
468
|
return {
|
|
366
|
-
mcpJson
|
|
469
|
+
mcpJson,
|
|
470
|
+
codexMcpJson: codexMcpJsonFromMcpJson(mcpJson),
|
|
367
471
|
pluginJson,
|
|
472
|
+
codexPluginJson,
|
|
368
473
|
marketplaceEntry: {
|
|
369
474
|
name: plugin.name,
|
|
370
475
|
version: plugin.version,
|
|
371
476
|
description: plugin.description || plugin.summary,
|
|
372
|
-
source:
|
|
477
|
+
source: `./plugins/${pluginName}`,
|
|
373
478
|
skills,
|
|
374
479
|
},
|
|
480
|
+
codexMarketplaceEntry: {
|
|
481
|
+
name: codexPluginName,
|
|
482
|
+
source: {
|
|
483
|
+
source: "local",
|
|
484
|
+
path: `./plugins/${pluginName}`,
|
|
485
|
+
},
|
|
486
|
+
policy: {
|
|
487
|
+
installation: "AVAILABLE",
|
|
488
|
+
authentication: "ON_USE",
|
|
489
|
+
},
|
|
490
|
+
category: "Developer Tools",
|
|
491
|
+
interface: {
|
|
492
|
+
displayName: plugin.title || plugin.name,
|
|
493
|
+
description: plugin.description || plugin.summary,
|
|
494
|
+
},
|
|
495
|
+
},
|
|
375
496
|
};
|
|
376
497
|
}
|
|
377
498
|
|
|
@@ -395,6 +516,7 @@ async function pathExists(path: string) {
|
|
|
395
516
|
|
|
396
517
|
export type GenerateMarketplaceGitOptions = {
|
|
397
518
|
unpack?: string;
|
|
519
|
+
mcpMetaKeys?: string[];
|
|
398
520
|
};
|
|
399
521
|
|
|
400
522
|
export async function generateMarketplaceGit(
|
|
@@ -406,6 +528,7 @@ export async function generateMarketplaceGit(
|
|
|
406
528
|
const tempRoot = await mkdtemp(join(tmpdir(), "gen-apic-mp-"));
|
|
407
529
|
const marketplaceRoot = join(tempRoot, "marketplace");
|
|
408
530
|
const marketplacePlugins: types.MarketplacePluginJson[] = [];
|
|
531
|
+
const codexMarketplacePlugins: types.CodexMarketplacePluginJson[] = [];
|
|
409
532
|
|
|
410
533
|
try {
|
|
411
534
|
for await (const page of client.apis()) {
|
|
@@ -413,12 +536,15 @@ export async function generateMarketplaceGit(
|
|
|
413
536
|
if (item.kind !== "plugin") continue;
|
|
414
537
|
|
|
415
538
|
const pluginAsset = await client.plugin(item.name);
|
|
416
|
-
const built = await buildPlugin(client, pluginAsset);
|
|
539
|
+
const built = await buildPlugin(client, pluginAsset, { metaKeys: options.mcpMetaKeys });
|
|
417
540
|
const pluginDir = join(marketplaceRoot, "plugins", sanitizeName(pluginAsset.name));
|
|
418
541
|
|
|
419
542
|
marketplacePlugins.push(built.marketplaceEntry);
|
|
543
|
+
codexMarketplacePlugins.push(built.codexMarketplaceEntry);
|
|
420
544
|
await writeJson(join(pluginDir, "plugin.json"), built.pluginJson);
|
|
545
|
+
await writeJson(join(pluginDir, ".codex-plugin", "plugin.json"), built.codexPluginJson);
|
|
421
546
|
await writeJson(join(pluginDir, ".mcp.json"), built.mcpJson);
|
|
547
|
+
await writeJson(join(pluginDir, ".codex.mcp.json"), built.codexMcpJson);
|
|
422
548
|
}
|
|
423
549
|
}
|
|
424
550
|
|
|
@@ -433,9 +559,17 @@ export async function generateMarketplaceGit(
|
|
|
433
559
|
},
|
|
434
560
|
plugins: marketplacePlugins,
|
|
435
561
|
};
|
|
562
|
+
const codexMarketplaceJson: types.CodexMarketplaceJson = {
|
|
563
|
+
name: sanitizeKebabName(info.workspaceName || config.title),
|
|
564
|
+
interface: {
|
|
565
|
+
displayName: config.title,
|
|
566
|
+
},
|
|
567
|
+
plugins: codexMarketplacePlugins,
|
|
568
|
+
};
|
|
436
569
|
|
|
437
570
|
await writeJson(join(marketplaceRoot, ".github", "plugin", "marketplace.json"), marketplaceJson);
|
|
438
571
|
await writeJson(join(marketplaceRoot, ".claude-plugin", "marketplace.json"), marketplaceJson);
|
|
572
|
+
await writeJson(join(marketplaceRoot, ".agents", "plugins", "marketplace.json"), codexMarketplaceJson);
|
|
439
573
|
|
|
440
574
|
const unpackPath = options.unpack ? resolve(options.unpack) : undefined;
|
|
441
575
|
if (unpackPath) {
|
package/src/shared/types.ts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
MarketplaceJson as TypeforgedCodexMarketplaceJson,
|
|
3
|
+
MarketplacePluginJson as TypeforgedCodexMarketplacePluginJson,
|
|
4
|
+
PluginJson as TypeforgedCodexPluginJson,
|
|
5
|
+
} from "@typeforged/codex-plugin-marketplace/v1";
|
|
6
|
+
|
|
1
7
|
export type WorkspaceInfo = {
|
|
2
8
|
serviceName: string;
|
|
3
9
|
region: string;
|
|
@@ -116,6 +122,26 @@ export type McpJson = {
|
|
|
116
122
|
mcpServers: Record<string, McpServer>;
|
|
117
123
|
};
|
|
118
124
|
|
|
125
|
+
export type CodexMcp = {
|
|
126
|
+
command?: string;
|
|
127
|
+
args?: string[];
|
|
128
|
+
env?: Record<string, string>;
|
|
129
|
+
cwd?: string;
|
|
130
|
+
transport?: 'http' | 'sse';
|
|
131
|
+
url?: string;
|
|
132
|
+
headers?: Record<string, string>;
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
export type CodexMcpJson =
|
|
136
|
+
| Record<string, CodexMcp>
|
|
137
|
+
| {
|
|
138
|
+
mcp_servers: Record<string, CodexMcp>;
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
export type GenerateMcpServerOptions = {
|
|
142
|
+
metaKeys?: string[];
|
|
143
|
+
};
|
|
144
|
+
|
|
119
145
|
export type PluginJson = {
|
|
120
146
|
name: string;
|
|
121
147
|
description: string;
|
|
@@ -123,6 +149,7 @@ export type PluginJson = {
|
|
|
123
149
|
mcpServers?: string;
|
|
124
150
|
skills?: string[];
|
|
125
151
|
};
|
|
152
|
+
export type CodexPluginJson = TypeforgedCodexPluginJson;
|
|
126
153
|
|
|
127
154
|
export type MarketplacePluginJson = {
|
|
128
155
|
name: string;
|
|
@@ -156,6 +183,8 @@ export type MarketplaceJson = {
|
|
|
156
183
|
};
|
|
157
184
|
plugins: MarketplacePluginJson[];
|
|
158
185
|
};
|
|
186
|
+
export type CodexMarketplacePluginJson = TypeforgedCodexMarketplacePluginJson;
|
|
187
|
+
export type CodexMarketplaceJson = TypeforgedCodexMarketplaceJson;
|
|
159
188
|
|
|
160
189
|
export type McpAsset = McpAssetItem & {
|
|
161
190
|
version?: string;
|
package/tsconfig.json
CHANGED