@christopher_dondici/mcp-gen 2.1.2

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.
Files changed (72) hide show
  1. package/CHANGELOG.md +217 -0
  2. package/LICENSE +21 -0
  3. package/README.md +439 -0
  4. package/README.pt-BR.md +320 -0
  5. package/RELEASE_NOTES.md +98 -0
  6. package/SECURITY.md +75 -0
  7. package/SECURITY.pt-BR.md +77 -0
  8. package/dist/cli/index.d.ts +3 -0
  9. package/dist/cli/index.d.ts.map +1 -0
  10. package/dist/cli/index.js +685 -0
  11. package/dist/cli/index.js.map +1 -0
  12. package/dist/core/generator.d.ts +4 -0
  13. package/dist/core/generator.d.ts.map +1 -0
  14. package/dist/core/generator.js +275 -0
  15. package/dist/core/generator.js.map +1 -0
  16. package/dist/core/incremental.d.ts +25 -0
  17. package/dist/core/incremental.d.ts.map +1 -0
  18. package/dist/core/incremental.js +91 -0
  19. package/dist/core/incremental.js.map +1 -0
  20. package/dist/core/parser.d.ts +3 -0
  21. package/dist/core/parser.d.ts.map +1 -0
  22. package/dist/core/parser.js +372 -0
  23. package/dist/core/parser.js.map +1 -0
  24. package/dist/core/registry.d.ts +13 -0
  25. package/dist/core/registry.d.ts.map +1 -0
  26. package/dist/core/registry.js +107 -0
  27. package/dist/core/registry.js.map +1 -0
  28. package/dist/core/security-lint.d.ts +53 -0
  29. package/dist/core/security-lint.d.ts.map +1 -0
  30. package/dist/core/security-lint.js +470 -0
  31. package/dist/core/security-lint.js.map +1 -0
  32. package/dist/core/security.d.ts +41 -0
  33. package/dist/core/security.d.ts.map +1 -0
  34. package/dist/core/security.js +150 -0
  35. package/dist/core/security.js.map +1 -0
  36. package/dist/core/templating.d.ts +5 -0
  37. package/dist/core/templating.d.ts.map +1 -0
  38. package/dist/core/templating.js +211 -0
  39. package/dist/core/templating.js.map +1 -0
  40. package/dist/core/types.d.ts +104 -0
  41. package/dist/core/types.d.ts.map +1 -0
  42. package/dist/core/types.js +3 -0
  43. package/dist/core/types.js.map +1 -0
  44. package/dist/index.d.ts +7 -0
  45. package/dist/index.d.ts.map +1 -0
  46. package/dist/index.js +20 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/templates/go/Dockerfile.hbs +16 -0
  49. package/dist/templates/go/README.md.hbs +77 -0
  50. package/dist/templates/go/ci.yml.hbs +28 -0
  51. package/dist/templates/go/client.go.hbs +86 -0
  52. package/dist/templates/go/go.mod.hbs +5 -0
  53. package/dist/templates/go/models.go.hbs +28 -0
  54. package/dist/templates/go/server.go.hbs +220 -0
  55. package/dist/templates/python/Dockerfile.hbs +12 -0
  56. package/dist/templates/python/README.md.hbs +115 -0
  57. package/dist/templates/python/ci.yml.hbs +24 -0
  58. package/dist/templates/python/models.py.hbs +20 -0
  59. package/dist/templates/python/requirements.txt.hbs +3 -0
  60. package/dist/templates/python/server.py.hbs +195 -0
  61. package/dist/templates/typescript/Dockerfile.hbs +18 -0
  62. package/dist/templates/typescript/README.md.hbs +91 -0
  63. package/dist/templates/typescript/ci.yml.hbs +28 -0
  64. package/dist/templates/typescript/client.hbs +49 -0
  65. package/dist/templates/typescript/models.hbs +23 -0
  66. package/dist/templates/typescript/package.json.hbs +26 -0
  67. package/dist/templates/typescript/server.hbs +337 -0
  68. package/dist/templates/typescript/tsconfig.json.hbs +17 -0
  69. package/examples/petstore.json +130 -0
  70. package/examples/petstore.yaml +131 -0
  71. package/examples/week3.json +47 -0
  72. package/package.json +64 -0
@@ -0,0 +1,372 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.parseOpenAPI = parseOpenAPI;
7
+ const swagger_parser_1 = __importDefault(require("@apidevtools/swagger-parser"));
8
+ const TS_RESERVED = new Set([
9
+ "break", "case", "catch", "class", "const", "continue", "debugger",
10
+ "default", "delete", "do", "else", "enum", "export", "extends", "false",
11
+ "finally", "for", "function", "if", "import", "in", "instanceof", "new",
12
+ "null", "return", "super", "switch", "this", "throw", "true", "try",
13
+ "typeof", "var", "void", "while", "with", "implements", "interface",
14
+ "let", "package", "private", "protected", "public", "static", "yield",
15
+ ]);
16
+ const PY_RESERVED = new Set([
17
+ "and", "as", "assert", "async", "await", "break", "class", "continue",
18
+ "def", "del", "elif", "else", "except", "finally", "for", "from",
19
+ "global", "if", "import", "in", "is", "lambda", "nonlocal", "not", "or",
20
+ "pass", "raise", "return", "try", "while", "with", "yield",
21
+ ]);
22
+ const GO_RESERVED = new Set([
23
+ "break", "case", "chan", "const", "continue", "default", "defer", "else",
24
+ "fallthrough", "for", "func", "go", "goto", "if", "import", "interface",
25
+ "map", "package", "range", "return", "select", "struct", "switch", "type",
26
+ "var",
27
+ ]);
28
+ const ALL_RESERVED = new Set([...TS_RESERVED, ...PY_RESERVED, ...GO_RESERVED]);
29
+ // Resolve a $ref string to its component name: "#/components/schemas/User" → "User"
30
+ function refToName(ref) {
31
+ return ref.split("/").pop() ?? ref;
32
+ }
33
+ function openapiTypeToTS(type) {
34
+ switch (type) {
35
+ case "integer":
36
+ case "number":
37
+ return "number";
38
+ case "boolean":
39
+ return "boolean";
40
+ case "object":
41
+ return "object";
42
+ case "array":
43
+ return "array";
44
+ default:
45
+ return "string";
46
+ }
47
+ }
48
+ /** Map an OpenAPI schema to an MCP tool-argument type, honoring enums. */
49
+ function schemaToParamType(schema) {
50
+ if (!schema)
51
+ return { type: "string" };
52
+ if ("$ref" in schema) {
53
+ // We don't resolve refs here — the template layer uses `schema` when available.
54
+ return { type: "object" };
55
+ }
56
+ const s = schema;
57
+ const t = openapiTypeToTS(s.type ?? "string");
58
+ return { type: t, format: s.format, enum: s.enum };
59
+ }
60
+ function resolveSchemaProperties(schema, components, visited = new Set()) {
61
+ // Guard against circular $ref chains (e.g. TreeNode -> children: TreeNode[])
62
+ if (visited.has(schema))
63
+ return [];
64
+ visited.add(schema);
65
+ const props = [];
66
+ if (!schema.properties)
67
+ return props;
68
+ for (const [name, rawProp] of Object.entries(schema.properties)) {
69
+ const prop = rawProp;
70
+ if ("$ref" in prop) {
71
+ props.push({
72
+ name,
73
+ type: refToName(prop.$ref),
74
+ description: "",
75
+ nullable: false,
76
+ isArray: false,
77
+ ref: refToName(prop.$ref),
78
+ });
79
+ continue;
80
+ }
81
+ const isArray = prop.type === "array";
82
+ let itemRef;
83
+ let type = prop.type ? openapiTypeToTS(prop.type) : "string";
84
+ if (isArray && prop.items) {
85
+ const items = prop.items;
86
+ if ("$ref" in items) {
87
+ itemRef = refToName(items.$ref);
88
+ type = itemRef;
89
+ }
90
+ else {
91
+ type = items.type ?? "string";
92
+ }
93
+ }
94
+ props.push({
95
+ name,
96
+ type: isArray ? `${type}[]` : type,
97
+ description: prop.description ?? "",
98
+ nullable: prop.nullable ?? false,
99
+ isArray,
100
+ ref: itemRef,
101
+ });
102
+ }
103
+ return props;
104
+ }
105
+ function extractExampleResponse(operation) {
106
+ const responses = operation.responses;
107
+ if (!responses)
108
+ return null;
109
+ const successCode = Object.keys(responses).find((c) => c.startsWith("2") || c === "default");
110
+ if (!successCode)
111
+ return null;
112
+ const response = responses[successCode];
113
+ if (!response?.content)
114
+ return null;
115
+ const jsonContent = response.content["application/json"];
116
+ if (!jsonContent)
117
+ return null;
118
+ // Try example first, then schema example
119
+ if (jsonContent.example)
120
+ return jsonContent.example;
121
+ if (jsonContent.schema && !("$ref" in jsonContent.schema)) {
122
+ return jsonContent.schema.example ?? null;
123
+ }
124
+ return null;
125
+ }
126
+ /** Build a unique, valid identifier for a tool from method + path.
127
+ * Handles reserved words and name collisions by appending an index. */
128
+ function pathToToolName(method, path, used) {
129
+ let name = `${method.toLowerCase()}_${path
130
+ .replace(/\//g, "_")
131
+ .replace(/[{}]/g, "")
132
+ .replace(/[^a-zA-Z0-9_]/g, "")
133
+ .replace(/^_/, "")
134
+ .replace(/_+/g, "_")
135
+ .toLowerCase()}`;
136
+ name = name.replace(/-+$/g, "");
137
+ if (ALL_RESERVED.has(name) || name === "")
138
+ name = `${name || "tool"}_handler`;
139
+ let candidate = name;
140
+ let i = 2;
141
+ while (used.has(candidate)) {
142
+ candidate = `${name}_${i}`;
143
+ i += 1;
144
+ }
145
+ used.add(candidate);
146
+ return candidate;
147
+ }
148
+ function collectParameters(pathItem, operation) {
149
+ const out = [];
150
+ const seen = new Set();
151
+ const all = [...(pathItem.parameters ?? []), ...(operation.parameters ?? [])];
152
+ for (const raw of all) {
153
+ if ("$ref" in raw)
154
+ continue;
155
+ const p = raw;
156
+ const key = `${p.in}:${p.name}`;
157
+ if (seen.has(key))
158
+ continue;
159
+ seen.add(key);
160
+ out.push(p);
161
+ }
162
+ return out;
163
+ }
164
+ function buildTools(paths, components) {
165
+ const tools = [];
166
+ const usedNames = new Set();
167
+ const METHODS = ["get", "post", "put", "patch", "delete", "head", "options"];
168
+ const REF_SCHEMAS = components?.schemas ?? {};
169
+ for (const [path, pathItem] of Object.entries(paths)) {
170
+ if (!pathItem)
171
+ continue;
172
+ for (const method of METHODS) {
173
+ const operation = pathItem[method];
174
+ if (!operation)
175
+ continue;
176
+ const params = [];
177
+ // Path + query + header + cookie parameters (path-level merged, deduped)
178
+ for (const rawParam of collectParameters(pathItem, operation)) {
179
+ const param = rawParam;
180
+ const schema = (param.schema ?? { type: "string" });
181
+ const typed = schemaToParamType(schema);
182
+ params.push({
183
+ name: param.name,
184
+ description: param.description ?? `${param.in} parameter`,
185
+ type: typed.type,
186
+ required: param.required ?? param.in === "path",
187
+ in: (["path", "query", "header", "cookie"].includes(param.in)
188
+ ? param.in
189
+ : "query"),
190
+ schema,
191
+ format: typed.format,
192
+ enum: typed.enum,
193
+ });
194
+ }
195
+ // Request body (resolving $ref) → add as "body" param
196
+ let requestBody;
197
+ const rawBody = operation.requestBody;
198
+ if (rawBody) {
199
+ if ("$ref" in rawBody) {
200
+ const refName = refToName(rawBody.$ref);
201
+ requestBody = REF_SCHEMAS[refName] ??
202
+ undefined;
203
+ }
204
+ else {
205
+ requestBody = rawBody;
206
+ }
207
+ }
208
+ if (requestBody) {
209
+ const jsonSchema = requestBody.content?.["application/json"]?.schema;
210
+ if (jsonSchema) {
211
+ // If body schema is a $ref, use a "body" object whose schema points at the ref name.
212
+ let bodySchema;
213
+ let bodyEnum;
214
+ let bodyFormat;
215
+ if ("$ref" in jsonSchema) {
216
+ bodySchema = { type: "object" };
217
+ const refName = refToName(jsonSchema.$ref);
218
+ // remember ref via format-less trick: store name in description? No — use enum-free schema.
219
+ bodySchema.mcpRef = refName;
220
+ }
221
+ else {
222
+ bodySchema = jsonSchema;
223
+ bodyEnum = bodySchema.enum;
224
+ bodyFormat = bodySchema.format;
225
+ }
226
+ params.push({
227
+ name: "body",
228
+ description: requestBody.description ?? "Request body",
229
+ type: "object",
230
+ required: requestBody.required ?? false,
231
+ in: "body",
232
+ schema: bodySchema,
233
+ format: bodyFormat,
234
+ enum: bodyEnum,
235
+ });
236
+ }
237
+ }
238
+ tools.push({
239
+ name: pathToToolName(method, path, usedNames),
240
+ description: operation.summary ??
241
+ operation.description ??
242
+ `${method.toUpperCase()} ${path}`,
243
+ method: method.toUpperCase(),
244
+ path,
245
+ params,
246
+ security: operation.security,
247
+ exampleResponse: extractExampleResponse(operation),
248
+ tags: operation.tags ?? [],
249
+ });
250
+ }
251
+ }
252
+ return tools;
253
+ }
254
+ function buildModels(components) {
255
+ if (!components?.schemas)
256
+ return [];
257
+ const models = [];
258
+ for (const [name, rawSchema] of Object.entries(components.schemas)) {
259
+ if ("$ref" in rawSchema)
260
+ continue;
261
+ const schema = rawSchema;
262
+ // Enums become real model types (string/number unions)
263
+ if (schema.enum) {
264
+ models.push({
265
+ name,
266
+ description: schema.description ?? "",
267
+ properties: [],
268
+ required: [],
269
+ isEnum: true,
270
+ enumValues: schema.enum,
271
+ });
272
+ continue;
273
+ }
274
+ // Handle allOf (simple merge, no polymorphism in MVP)
275
+ let resolvedSchema = schema;
276
+ if (schema.allOf) {
277
+ const merged = {
278
+ type: "object",
279
+ properties: {},
280
+ required: [],
281
+ };
282
+ for (const sub of schema.allOf) {
283
+ if ("$ref" in sub)
284
+ continue;
285
+ Object.assign(merged.properties, sub.properties ?? {});
286
+ merged.required = [
287
+ ...(merged.required ?? []),
288
+ ...(sub.required ?? []),
289
+ ];
290
+ }
291
+ resolvedSchema = merged;
292
+ }
293
+ // Handle oneOf / anyOf by recording referenced component names
294
+ const oneOf = schema.oneOf
295
+ ? schema.oneOf
296
+ .map((s) => {
297
+ if ("$ref" in s)
298
+ return refToName(s.$ref);
299
+ return undefined;
300
+ })
301
+ .filter(Boolean)
302
+ : undefined;
303
+ const anyOf = schema.anyOf
304
+ ? schema.anyOf
305
+ .map((s) => {
306
+ if ("$ref" in s)
307
+ return refToName(s.$ref);
308
+ return undefined;
309
+ })
310
+ .filter(Boolean)
311
+ : undefined;
312
+ models.push({
313
+ name,
314
+ description: schema.description ?? "",
315
+ properties: resolveSchemaProperties(resolvedSchema, components),
316
+ required: schema.required ?? [],
317
+ isEnum: false,
318
+ oneOf,
319
+ anyOf,
320
+ discriminator: schema.discriminator ?? null,
321
+ });
322
+ }
323
+ return models;
324
+ }
325
+ async function parseOpenAPI(inputPath) {
326
+ let api;
327
+ let raw;
328
+ try {
329
+ // parse returns the original document with $ref intact
330
+ raw = (await swagger_parser_1.default.parse(inputPath));
331
+ // dereference resolves $refs inline; circular:"ignore" prevents infinite loops
332
+ // on self-referential schemas (e.g. TreeNode { children: TreeNode[] })
333
+ api = (await swagger_parser_1.default.dereference(inputPath, {
334
+ dereference: { circular: "ignore" },
335
+ }));
336
+ }
337
+ catch (err) {
338
+ const message = err instanceof Error ? err.message : String(err);
339
+ throw new Error(`OpenAPI validation failed: ${message}`);
340
+ }
341
+ if (!("openapi" in api) || !api.openapi.startsWith("3")) {
342
+ throw new Error(`Only OpenAPI v3.x is supported. Got: ${"swagger" in api ? api.swagger : "unknown"}`);
343
+ }
344
+ const tools = buildTools(api.paths ?? {}, api.components);
345
+ // Build models from the raw (non-dereferenced) components so $ref targets
346
+ // like oneOf/anyOf remain as ReferenceObjects and we can extract names.
347
+ const models = buildModels(raw.components);
348
+ const serverName = (api.info.title ?? "mcp-server")
349
+ .toLowerCase()
350
+ .replace(/[^a-z0-9]+/g, "-")
351
+ .replace(/^-|-$/g, "");
352
+ const baseUrl = api.servers?.[0]?.url ?? "https://api.example.com";
353
+ const requiresAuth = tools.some((t) => t.security && t.security.length > 0) ||
354
+ Boolean(api.components?.securitySchemes &&
355
+ Object.keys(api.components.securitySchemes).length > 0);
356
+ return {
357
+ serverName,
358
+ serverVersion: api.info.version ?? "1.0.0",
359
+ generatorVersion: "",
360
+ tools,
361
+ models,
362
+ info: {
363
+ title: api.info.title ?? "MCP Server",
364
+ description: api.info.description ?? "",
365
+ version: api.info.version ?? "1.0.0",
366
+ },
367
+ baseUrl,
368
+ requiresAuth,
369
+ securitySchemes: api.components?.securitySchemes,
370
+ };
371
+ }
372
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/core/parser.ts"],"names":[],"mappings":";;;;;AAiXA,oCA2DC;AA5aD,iFAAwD;AAUxD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IAC1B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU;IAClE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO;IACvE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK;IACvE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK;IACnE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,WAAW;IACnE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO;CACtE,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IAC1B,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU;IACrE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM;IAChE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI;IACvE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO;CAC3D,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IAC1B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM;IACxE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW;IACvE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM;IACzE,KAAK;CACN,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,WAAW,EAAE,GAAG,WAAW,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC;AAE/E,oFAAoF;AACpF,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC;AACrC,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,SAAS,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;QAClB,KAAK,OAAO;YACV,OAAO,OAAO,CAAC;QACjB;YACE,OAAO,QAAQ,CAAC;IACpB,CAAC;AACH,CAAC;AAED,0EAA0E;AAC1E,SAAS,iBAAiB,CACxB,MAAsE;IAEtE,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACvC,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;QACrB,gFAAgF;QAChF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAC5B,CAAC;IACD,MAAM,CAAC,GAAG,MAAgC,CAAC;IAC3C,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,IAAI,QAAQ,CAAyB,CAAC;IACtE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAuC,EAAE,CAAC;AACxF,CAAC;AAED,SAAS,uBAAuB,CAC9B,MAA8B,EAC9B,UAAkD,EAClD,UAAuC,IAAI,GAAG,EAAE;IAEhD,6EAA6E;IAC7E,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEpB,MAAM,KAAK,GAAuB,EAAE,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IAErC,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;QAChE,MAAM,IAAI,GAAG,OAA6D,CAAC;QAE3E,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;YACnB,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI;gBACJ,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC1B,WAAW,EAAE,EAAE;gBACf,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,KAAK;gBACd,GAAG,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;aAC1B,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC;QACtC,IAAI,OAA2B,CAAC;QAChC,IAAI,IAAI,GAAW,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAErE,IAAI,OAAO,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,KAA2D,CAAC;YAC/E,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;gBACpB,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAChC,IAAI,GAAG,OAAO,CAAC;YACjB,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAI,KAAgC,CAAC,IAAI,IAAI,QAAQ,CAAC;YAC5D,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI,CAAC;YACT,IAAI;YACJ,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI;YAClC,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,EAAE;YACnC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK;YAChC,OAAO;YACP,GAAG,EAAE,OAAO;SACb,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,sBAAsB,CAC7B,SAAoC;IAEpC,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;IACtC,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAE5B,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAC7C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS,CAC5C,CAAC;IACF,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAE9B,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,CAA6B,CAAC;IACpE,IAAI,CAAC,QAAQ,EAAE,OAAO;QAAE,OAAO,IAAI,CAAC;IAEpC,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACzD,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAE9B,yCAAyC;IACzC,IAAI,WAAW,CAAC,OAAO;QAAE,OAAO,WAAW,CAAC,OAAO,CAAC;IACpD,IAAI,WAAW,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1D,OAAQ,WAAW,CAAC,MAAiC,CAAC,OAAO,IAAI,IAAI,CAAC;IACxE,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;wEACwE;AACxE,SAAS,cAAc,CAAC,MAAc,EAAE,IAAY,EAAE,IAAiB;IACrE,IAAI,IAAI,GAAG,GAAG,MAAM,CAAC,WAAW,EAAE,IAAI,IAAI;SACvC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;SACpB,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;SAC7B,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;SACjB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,WAAW,EAAE,EAAE,CAAC;IACnB,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAChC,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,EAAE;QAAE,IAAI,GAAG,GAAG,IAAI,IAAI,MAAM,UAAU,CAAC;IAC9E,IAAI,SAAS,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,SAAS,GAAG,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC;QAC3B,CAAC,IAAI,CAAC,CAAC;IACT,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACpB,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,iBAAiB,CACxB,QAAkC,EAClC,SAAoC;IAEpC,MAAM,GAAG,GAAgC,EAAE,CAAC;IAC5C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9E,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACtB,IAAI,MAAM,IAAI,GAAG;YAAE,SAAS;QAC5B,MAAM,CAAC,GAAG,GAAgC,CAAC;QAC3C,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACd,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,UAAU,CACjB,KAA4B,EAC5B,UAAkD;IAElD,MAAM,KAAK,GAAc,EAAE,CAAC;IAC5B,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAU,CAAC;IACtF,MAAM,WAAW,GAAG,UAAU,EAAE,OAAO,IAAI,EAAE,CAAC;IAE9C,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACrD,IAAI,CAAC,QAAQ;YAAE,SAAS;QAExB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAI,QAAoC,CAAC,MAAM,CAEjD,CAAC;YACd,IAAI,CAAC,SAAS;gBAAE,SAAS;YAEzB,MAAM,MAAM,GAAmB,EAAE,CAAC;YAElC,yEAAyE;YACzE,KAAK,MAAM,QAAQ,IAAI,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC;gBAC9D,MAAM,KAAK,GAAG,QAAqC,CAAC;gBACpD,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAA2B,CAAC;gBAC9E,MAAM,KAAK,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;gBAExC,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,GAAG,KAAK,CAAC,EAAE,YAAY;oBACzD,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,EAAE,KAAK,MAAM;oBAC/C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC3D,CAAC,CAAC,KAAK,CAAC,EAAE;wBACV,CAAC,CAAC,OAAO,CAAuB;oBAClC,MAAM;oBACN,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,IAAI,EAAE,KAAK,CAAC,IAAI;iBACjB,CAAC,CAAC;YACL,CAAC;YAED,sDAAsD;YACtD,IAAI,WAAoD,CAAC;YACzD,MAAM,OAAO,GAAG,SAAS,CAAC,WAAW,CAAC;YACtC,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;oBACtB,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACxC,WAAW,GAAI,WAAW,CAAC,OAAO,CAAiC;wBACjE,SAAS,CAAC;gBACd,CAAC;qBAAM,CAAC;oBACN,WAAW,GAAG,OAAO,CAAC;gBACxB,CAAC;YACH,CAAC;YAED,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;gBACrE,IAAI,UAAU,EAAE,CAAC;oBACf,qFAAqF;oBACrF,IAAI,UAAkC,CAAC;oBACvC,IAAI,QAAyC,CAAC;oBAC9C,IAAI,UAA8B,CAAC;oBACnC,IAAI,MAAM,IAAI,UAAU,EAAE,CAAC;wBACzB,UAAU,GAAG,EAAE,IAAI,EAAE,QAAQ,EAA4B,CAAC;wBAC1D,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;wBAC3C,4FAA4F;wBAC3F,UAA2D,CAAC,MAAM,GAAG,OAAO,CAAC;oBAChF,CAAC;yBAAM,CAAC;wBACN,UAAU,GAAG,UAAoC,CAAC;wBAClD,QAAQ,GAAG,UAAU,CAAC,IAAuC,CAAC;wBAC9D,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC;oBACjC,CAAC;oBACD,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,MAAM;wBACZ,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,cAAc;wBACtD,IAAI,EAAE,QAAQ;wBACd,QAAQ,EAAE,WAAW,CAAC,QAAQ,IAAI,KAAK;wBACvC,EAAE,EAAE,MAAM;wBACV,MAAM,EAAE,UAAU;wBAClB,MAAM,EAAE,UAAU;wBAClB,IAAI,EAAE,QAAQ;qBACf,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC;gBAC7C,WAAW,EACT,SAAS,CAAC,OAAO;oBACjB,SAAS,CAAC,WAAW;oBACrB,GAAG,MAAM,CAAC,WAAW,EAAE,IAAI,IAAI,EAAE;gBACnC,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE;gBAC5B,IAAI;gBACJ,MAAM;gBACN,QAAQ,EAAE,SAAS,CAAC,QAAQ;gBAC5B,eAAe,EAAE,sBAAsB,CAAC,SAAS,CAAC;gBAClD,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,EAAE;aAC3B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAClB,UAAkD;IAElD,IAAI,CAAC,UAAU,EAAE,OAAO;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,MAAM,GAAe,EAAE,CAAC;IAE9B,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACnE,IAAI,MAAM,IAAI,SAAS;YAAE,SAAS;QAClC,MAAM,MAAM,GAAG,SAAmC,CAAC;QAEnD,uDAAuD;QACvD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI;gBACJ,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;gBACrC,UAAU,EAAE,EAAE;gBACd,QAAQ,EAAE,EAAE;gBACZ,MAAM,EAAE,IAAI;gBACZ,UAAU,EAAE,MAAM,CAAC,IAA2B;aAC/C,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,sDAAsD;QACtD,IAAI,cAAc,GAAG,MAAM,CAAC;QAC5B,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,MAAM,GAA2B;gBACrC,IAAI,EAAE,QAAQ;gBACd,UAAU,EAAE,EAAE;gBACd,QAAQ,EAAE,EAAE;aACb,CAAC;YACF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC/B,IAAI,MAAM,IAAI,GAAG;oBAAE,SAAS;gBAC5B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAW,EAAG,GAA8B,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;gBACpF,MAAM,CAAC,QAAQ,GAAG;oBAChB,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;oBAC1B,GAAG,CAAE,GAA8B,CAAC,QAAQ,IAAI,EAAE,CAAC;iBACpD,CAAC;YACJ,CAAC;YACD,cAAc,GAAG,MAAM,CAAC;QAC1B,CAAC;QAED,+DAA+D;QAC/D,MAAM,KAAK,GAAyB,MAAM,CAAC,KAAK;YAC9C,CAAC,CAAE,MAAM,CAAC,KAAK;iBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACT,IAAI,MAAM,IAAI,CAAC;oBAAE,OAAO,SAAS,CAAE,CAA+B,CAAC,IAAI,CAAC,CAAC;gBACzE,OAAO,SAAS,CAAC;YACnB,CAAC,CAAC;iBACD,MAAM,CAAC,OAAO,CAAc;YACjC,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,KAAK,GAAyB,MAAM,CAAC,KAAK;YAC9C,CAAC,CAAE,MAAM,CAAC,KAAK;iBACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACT,IAAI,MAAM,IAAI,CAAC;oBAAE,OAAO,SAAS,CAAE,CAA+B,CAAC,IAAI,CAAC,CAAC;gBACzE,OAAO,SAAS,CAAC;YACnB,CAAC,CAAC;iBACD,MAAM,CAAC,OAAO,CAAc;YACjC,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,CAAC,IAAI,CAAC;YACV,IAAI;YACJ,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;YACrC,UAAU,EAAE,uBAAuB,CAAC,cAAc,EAAE,UAAU,CAAC;YAC/D,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;YAC/B,MAAM,EAAE,KAAK;YACb,KAAK;YACL,KAAK;YACL,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,IAAI;SAC5C,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,YAAY,CAAC,SAAiB;IAClD,IAAI,GAAuB,CAAC;IAC5B,IAAI,GAAuB,CAAC;IAE5B,IAAI,CAAC;QACH,uDAAuD;QACvD,GAAG,GAAG,CAAC,MAAM,wBAAa,CAAC,KAAK,CAAC,SAAS,CAAC,CAAuB,CAAC;QAEnE,+EAA+E;QAC/E,uEAAuE;QACvE,GAAG,GAAG,CAAC,MAAM,wBAAa,CAAC,WAAW,CAAC,SAAS,EAAE;YAChD,WAAW,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;SACpC,CAAC,CAAuB,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,8BAA8B,OAAO,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,CAAC,CAAC,SAAS,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CACb,wCACE,SAAS,IAAI,GAAG,CAAC,CAAC,CAAE,GAA8B,CAAC,OAAO,CAAC,CAAC,CAAC,SAC/D,EAAE,CACH,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IAC1D,0EAA0E;IAC1E,wEAAwE;IACxE,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAE3C,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,YAAY,CAAC;SAChD,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAEzB,MAAM,OAAO,GACX,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,yBAAyB,CAAC;IAErD,MAAM,YAAY,GAChB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,eAAe;YACrC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE5D,OAAO;QACL,UAAU;QACV,aAAa,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO;QAC1C,gBAAgB,EAAE,EAAE;QACpB,KAAK;QACL,MAAM;QACN,IAAI,EAAE;YACJ,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,YAAY;YACrC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE;YACvC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO;SACrC;QACD,OAAO;QACP,YAAY;QACZ,eAAe,EAAE,GAAG,CAAC,UAAU,EAAE,eAAe;KACjD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ export declare const KNOWN_SPECS: Record<string, {
2
+ url: string;
3
+ filename?: string;
4
+ description?: string;
5
+ }>;
6
+ export declare function fetchSpecToCwd(key: string, targetPath?: string): Promise<string>;
7
+ export declare function listKnownSpecs(): string[];
8
+ export declare function getSpecInfo(key: string): {
9
+ url: string;
10
+ filename?: string;
11
+ description?: string;
12
+ } | null;
13
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAmDhG,CAAC;AAEF,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA0CtF;AAED,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAEzC;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAExG"}
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.KNOWN_SPECS = void 0;
7
+ exports.fetchSpecToCwd = fetchSpecToCwd;
8
+ exports.listKnownSpecs = listKnownSpecs;
9
+ exports.getSpecInfo = getSpecInfo;
10
+ const fs_1 = __importDefault(require("fs"));
11
+ const path_1 = __importDefault(require("path"));
12
+ const security_1 = require("./security");
13
+ exports.KNOWN_SPECS = {
14
+ stripe: {
15
+ url: "https://raw.githubusercontent.com/stripe/openapi/master/openapi/spec3.json",
16
+ filename: "openapi.stripe.json",
17
+ description: "Stripe Payment API — comprehensive payment processing"
18
+ },
19
+ github: {
20
+ url: "https://raw.githubusercontent.com/github/rest-api-description/main/descriptions/api.github.com/api.github.com.json",
21
+ filename: "openapi.github.json",
22
+ description: "GitHub REST API — version control and collaboration platform"
23
+ },
24
+ slack: {
25
+ url: "https://raw.githubusercontent.com/slackapi/slack-api-specs/master/web-api/slack_web_openapi_v2.json",
26
+ filename: "openapi.slack.json",
27
+ description: "Slack Web API — messaging and workspace automation"
28
+ },
29
+ openai: {
30
+ url: "https://raw.githubusercontent.com/openai/openai-openapi/master/openapi.yaml",
31
+ filename: "openapi.openai.yaml",
32
+ description: "OpenAI API — GPT models, embeddings, and completion endpoints"
33
+ },
34
+ petstore: {
35
+ url: "https://petstore3.swagger.io/api/v3/openapi.json",
36
+ filename: "openapi.petstore.json",
37
+ description: "Swagger Petstore — example API for testing"
38
+ },
39
+ twilio: {
40
+ url: "https://raw.githubusercontent.com/twilio/twilio-oai/main/spec/json/twilio_openapi_v1.json",
41
+ filename: "openapi.twilio.json",
42
+ description: "Twilio Communications API — SMS, voice, video, messaging"
43
+ },
44
+ shopify: {
45
+ url: "https://shopify.dev/api/admin-rest/2024-01/openapi.json",
46
+ filename: "openapi.shopify.json",
47
+ description: "Shopify Admin API — e-commerce platform management"
48
+ },
49
+ kubernetes: {
50
+ url: "https://raw.githubusercontent.com/kubernetes/kubernetes/master/api/openapi-spec/swagger.json",
51
+ filename: "openapi.kubernetes.json",
52
+ description: "Kubernetes API — container orchestration platform"
53
+ },
54
+ digitalocean: {
55
+ url: "https://raw.githubusercontent.com/digitalocean/openapi/main/specification/DigitalOcean-public.v2.json",
56
+ filename: "openapi.digitalocean.json",
57
+ description: "DigitalOcean API — cloud infrastructure management"
58
+ },
59
+ azure: {
60
+ url: "https://raw.githubusercontent.com/Azure/azure-rest-api-specs/main/specification/common-types/resource-management/v3/types.json",
61
+ filename: "openapi.azure.json",
62
+ description: "Azure Resource Manager API — cloud resource management"
63
+ }
64
+ };
65
+ async function fetchSpecToCwd(key, targetPath) {
66
+ const entry = exports.KNOWN_SPECS[key];
67
+ if (!entry)
68
+ throw new Error(`Unknown registry key: ${key}`);
69
+ // Security: validate URL
70
+ (0, security_1.validateRemoteUrl)(entry.url);
71
+ // Create abort controller for timeout
72
+ const controller = new AbortController();
73
+ const timeoutId = setTimeout(() => controller.abort(), 30000); // 30 seconds
74
+ try {
75
+ const res = await fetch(entry.url, {
76
+ signal: controller.signal,
77
+ });
78
+ if (!res.ok)
79
+ throw new Error(`Failed to fetch ${entry.url}: ${res.status} ${res.statusText}`);
80
+ // Security: validate Content-Type
81
+ const contentType = res.headers.get("content-type");
82
+ (0, security_1.validateContentType)(contentType);
83
+ // Security: validate content size before reading
84
+ const contentLength = res.headers.get("content-length");
85
+ if (contentLength) {
86
+ (0, security_1.validateContentSize)(parseInt(contentLength, 10));
87
+ }
88
+ const content = await res.text();
89
+ // Security: ensure content size after reading (in case header was missing/wrong)
90
+ (0, security_1.validateContentSize)(Buffer.byteLength(content, "utf-8"));
91
+ const filename = entry.filename ?? (path_1.default.basename(new URL(entry.url).pathname) || "openapi.json");
92
+ const outPath = path_1.default.resolve(targetPath ? targetPath : path_1.default.join(process.cwd(), filename));
93
+ fs_1.default.mkdirSync(path_1.default.dirname(outPath), { recursive: true });
94
+ fs_1.default.writeFileSync(outPath, content, "utf-8");
95
+ return outPath;
96
+ }
97
+ finally {
98
+ clearTimeout(timeoutId);
99
+ }
100
+ }
101
+ function listKnownSpecs() {
102
+ return Object.keys(exports.KNOWN_SPECS);
103
+ }
104
+ function getSpecInfo(key) {
105
+ return exports.KNOWN_SPECS[key] ?? null;
106
+ }
107
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ import { OpenAPIV3 } from "openapi-types";
2
+ /**
3
+ * MCP Security & Lint Layer
4
+ *
5
+ * Provides:
6
+ * - Credential scanning (detect raw secrets in specs/handlers)
7
+ * - authContext contract validation
8
+ * - Tool policy enforcement
9
+ * - Lint rules (naming, descriptions, schemas, incremental markers)
10
+ */
11
+ export interface SecurityRule {
12
+ id: string;
13
+ severity: "error" | "warning" | "info";
14
+ category: "credentials" | "authcontext" | "policy" | "lint";
15
+ message: string;
16
+ file?: string;
17
+ line?: number;
18
+ suggestion?: string;
19
+ }
20
+ export interface SecurityReport {
21
+ rules: SecurityRule[];
22
+ summary: {
23
+ errors: number;
24
+ warnings: number;
25
+ info: number;
26
+ };
27
+ passed: boolean;
28
+ }
29
+ /** Keywords that indicate raw credentials (blocked by default) */
30
+ export declare const RAW_CREDENTIAL_KEYWORDS: string[];
31
+ /** Reserved words that shouldn't be tool names */
32
+ export declare const RESERVED_TOOL_NAMES: string[];
33
+ /** Expected authContext fields */
34
+ export declare const EXPECTED_AUTH_CONTEXT_FIELDS: string[];
35
+ /** Scan a string for credential-like patterns */
36
+ export declare function scanForCredentials(content: string, filePath?: string): SecurityRule[];
37
+ /** Validate authContext structure in generated code */
38
+ export declare function validateAuthContext(content: string, filePath?: string): SecurityRule[];
39
+ /** Validate tool policies are defined */
40
+ export declare function validateToolPolicies(content: string, filePath?: string): SecurityRule[];
41
+ /** Lint naming conventions */
42
+ export declare function lintNaming(content: string, filePath?: string): SecurityRule[];
43
+ /** Lint descriptions */
44
+ export declare function lintDescriptions(content: string, filePath?: string): SecurityRule[];
45
+ /** Lint incremental markers */
46
+ export declare function lintIncrementalMarkers(content: string, filePath?: string): SecurityRule[];
47
+ /** Lint schema usage */
48
+ export declare function lintSchemas(spec: OpenAPIV3.Document, filePath?: string): SecurityRule[];
49
+ /** Main security/lint scan for a generated project */
50
+ export declare function scanProject(projectPath: string): Promise<SecurityReport>;
51
+ /** Format report for console output */
52
+ export declare function formatReport(report: SecurityReport): string;
53
+ //# sourceMappingURL=security-lint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security-lint.d.ts","sourceRoot":"","sources":["../../src/core/security-lint.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C;;;;;;;;GAQG;AAEH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,QAAQ,EAAE,aAAa,GAAG,aAAa,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,kEAAkE;AAClE,eAAO,MAAM,uBAAuB,UAkBnC,CAAC;AAEF,kDAAkD;AAClD,eAAO,MAAM,mBAAmB,UAS/B,CAAC;AAEF,kCAAkC;AAClC,eAAO,MAAM,4BAA4B,UAUxC,CAAC;AAEF,iDAAiD;AACjD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,MAAkB,GAC3B,YAAY,EAAE,CAgEhB;AAED,uDAAuD;AACvD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,MAAkB,GAC3B,YAAY,EAAE,CAkChB;AAED,yCAAyC;AACzC,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,MAAkB,GAC3B,YAAY,EAAE,CA0ChB;AAED,8BAA8B;AAC9B,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,MAAkB,GAC3B,YAAY,EAAE,CAwChB;AAED,wBAAwB;AACxB,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,MAAkB,GAC3B,YAAY,EAAE,CAsChB;AAED,+BAA+B;AAC/B,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,MAAkB,GAC3B,YAAY,EAAE,CAuDhB;AAED,wBAAwB;AACxB,wBAAgB,WAAW,CACzB,IAAI,EAAE,SAAS,CAAC,QAAQ,EACxB,QAAQ,GAAE,MAAe,GACxB,YAAY,EAAE,CAmDhB;AAED,sDAAsD;AACtD,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAwD9E;AA6BD,uCAAuC;AACvC,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAwC3D"}