@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 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
@@ -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 result = await generateMarketplaceGit({ serviceName, region, workspaceName }, { unpack });
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;
@@ -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;AAEvB,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,MAAM,CAAC,KAAK,EACX,WAAmB,EACnB,MAAc,EACd,aAAqB,EACrB,OAA4B,EAC5B,EAAE;IACF,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAChG,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"}
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;AAmMD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,KAAK,CAAC,iBAAiB,UAStE;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,KAAK,CAAC,iBAAiB,GAC7B,KAAK,CAAC,SAAS,CAqCjB;AAED,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU;;EAKpE;AAmED,MAAM,MAAM,6BAA6B,GAAG;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,KAAK,CAAC,aAAa,EACzB,OAAO,GAAE,6BAAkC;;;;qBA4DY,KAAK,CAAC,eAAe;GAK7E;AAID,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,+BAerE"}
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
- async function buildPlugin(client, plugin) {
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
- if (Object.keys(mcpServers).length > 0)
310
- pluginJson.mcpServers = ".mcp.json";
311
- if (skills.length > 0)
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: { mcpServers },
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: `plugins/${pluginName}`,
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 { mcpServerFromV0Entry, mcpServerNameFromV0Entry, mcpServersFromServerJson, } from "./marketplace.js";
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
- "x-ms-id": "012a108b-f8d7-465e-92d6-63228a9e7af4",
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":"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"}
1
+ {"version":3,"file":"marketplace.test.js","sourceRoot":"","sources":["../../src/server/marketplace.test.ts"],"names":[],"mappings":"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"}
@@ -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.2",
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 result = await generateMarketplaceGit({ serviceName, region, workspaceName }, { unpack });
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
- "x-ms-id": "012a108b-f8d7-465e-92d6-63228a9e7af4",
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 = ".mcp.json";
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: { mcpServers },
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: `plugins/${pluginName}`,
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) {
@@ -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
@@ -19,4 +19,4 @@
19
19
  "include": [
20
20
  "src"
21
21
  ]
22
- }
22
+ }