@asnd/skill-creator 0.1.1 → 0.1.3

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 (88) hide show
  1. package/README.md +64 -125
  2. package/dist/cli/dynamic.d.ts +26 -0
  3. package/dist/cli/dynamic.js +136 -0
  4. package/dist/cli/dynamic.js.map +1 -0
  5. package/dist/cli/main.d.ts +2 -4
  6. package/dist/cli/main.js +376 -1530
  7. package/dist/cli/main.js.map +1 -1
  8. package/dist/cli/parse.d.ts +9 -0
  9. package/dist/cli/parse.js +38 -0
  10. package/dist/cli/parse.js.map +1 -0
  11. package/dist/commands/agents.d.ts +96 -0
  12. package/dist/commands/agents.js +116 -0
  13. package/dist/commands/agents.js.map +1 -0
  14. package/dist/commands/install.d.ts +12 -0
  15. package/dist/commands/install.js +229 -0
  16. package/dist/commands/install.js.map +1 -0
  17. package/dist/core/cache.d.ts +3 -0
  18. package/dist/core/cache.js +52 -0
  19. package/dist/core/cache.js.map +1 -0
  20. package/dist/core/coerce.d.ts +8 -0
  21. package/dist/core/coerce.js +128 -0
  22. package/dist/core/coerce.js.map +1 -0
  23. package/dist/core/filter.d.ts +7 -0
  24. package/dist/core/filter.js +16 -0
  25. package/dist/core/filter.js.map +1 -0
  26. package/dist/core/listing.d.ts +11 -0
  27. package/dist/core/listing.js +31 -0
  28. package/dist/core/listing.js.map +1 -0
  29. package/dist/core/names.d.ts +1 -0
  30. package/dist/core/names.js +7 -0
  31. package/dist/core/names.js.map +1 -0
  32. package/dist/core/output.d.ts +12 -0
  33. package/dist/core/output.js +34 -0
  34. package/dist/core/output.js.map +1 -0
  35. package/dist/core/secrets.d.ts +1 -0
  36. package/dist/core/secrets.js +21 -0
  37. package/dist/core/secrets.js.map +1 -0
  38. package/dist/core/types.d.ts +37 -0
  39. package/dist/core/types.js +2 -0
  40. package/dist/core/types.js.map +1 -0
  41. package/dist/core/usage.d.ts +13 -0
  42. package/dist/core/usage.js +33 -0
  43. package/dist/core/usage.js.map +1 -0
  44. package/dist/graphql/execute.d.ts +8 -0
  45. package/dist/graphql/execute.js +133 -0
  46. package/dist/graphql/execute.js.map +1 -0
  47. package/dist/graphql/extract.d.ts +6 -0
  48. package/dist/graphql/extract.js +109 -0
  49. package/dist/graphql/extract.js.map +1 -0
  50. package/dist/graphql/load.d.ts +11 -0
  51. package/dist/graphql/load.js +95 -0
  52. package/dist/graphql/load.js.map +1 -0
  53. package/dist/mcp/extract.d.ts +8 -0
  54. package/dist/mcp/extract.js +40 -0
  55. package/dist/mcp/extract.js.map +1 -0
  56. package/dist/mcp/http.d.ts +8 -0
  57. package/dist/mcp/http.js +80 -0
  58. package/dist/mcp/http.js.map +1 -0
  59. package/dist/mcp/stdio.d.ts +9 -0
  60. package/dist/mcp/stdio.js +67 -0
  61. package/dist/mcp/stdio.js.map +1 -0
  62. package/dist/openapi/execute.d.ts +12 -0
  63. package/dist/openapi/execute.js +44 -0
  64. package/dist/openapi/execute.js.map +1 -0
  65. package/dist/openapi/extract.d.ts +2 -0
  66. package/dist/openapi/extract.js +123 -0
  67. package/dist/openapi/extract.js.map +1 -0
  68. package/dist/openapi/load.d.ts +11 -0
  69. package/dist/openapi/load.js +52 -0
  70. package/dist/openapi/load.js.map +1 -0
  71. package/dist/openapi/params.d.ts +12 -0
  72. package/dist/openapi/params.js +47 -0
  73. package/dist/openapi/params.js.map +1 -0
  74. package/dist/openapi/refs.d.ts +1 -0
  75. package/dist/openapi/refs.js +8 -0
  76. package/dist/openapi/refs.js.map +1 -0
  77. package/dist/skills/agents.d.ts +77 -0
  78. package/dist/skills/agents.js +85 -0
  79. package/dist/skills/agents.js.map +1 -0
  80. package/dist/skills/generate.d.ts +1 -0
  81. package/dist/skills/generate.js +494 -0
  82. package/dist/skills/generate.js.map +1 -0
  83. package/package.json +7 -11
  84. package/prompts/skill-creator.md +169 -0
  85. package/dist/cli/package-4N3JKWJZ.js +0 -90
  86. package/dist/cli/package-4N3JKWJZ.js.map +0 -1
  87. package/prompts/generate-skill.md +0 -22
  88. package/skills/skill-creator/SKILL.md +0 -260
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/mcp/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export type McpTool = {
2
+ name: string;
3
+ description?: string;
4
+ inputSchema?: unknown;
5
+ };
6
+ export declare function listStdioTools(commandLine: string): Promise<McpTool[]>;
7
+ export declare function callStdioTool(commandLine: string, toolName: string, args: Record<string, unknown>): Promise<unknown>;
8
+ export declare function splitCommandLine(commandLine: string): string[];
9
+ export declare function extractMcpContent(content: unknown): unknown;
@@ -0,0 +1,67 @@
1
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
2
+ import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
3
+ import stringArgv from 'string-argv';
4
+ export async function listStdioTools(commandLine) {
5
+ return withStdioClient(commandLine, async (client) => {
6
+ const result = await client.listTools();
7
+ return result.tools.map((tool) => ({
8
+ name: tool.name,
9
+ ...(tool.description === undefined ? {} : { description: tool.description }),
10
+ inputSchema: tool.inputSchema,
11
+ }));
12
+ });
13
+ }
14
+ export async function callStdioTool(commandLine, toolName, args) {
15
+ return withStdioClient(commandLine, async (client) => {
16
+ const result = await client.callTool({ name: toolName, arguments: args });
17
+ return extractMcpContent(result.content);
18
+ });
19
+ }
20
+ async function withStdioClient(commandLine, fn) {
21
+ const [command, ...args] = splitCommandLine(commandLine);
22
+ if (command === undefined)
23
+ throw new Error('--mcp-stdio command cannot be empty');
24
+ const client = new Client({ name: 'skill-creator', version: '0.1.0' });
25
+ const transport = new StdioClientTransport({ command, args, stderr: 'pipe' });
26
+ await client.connect(transport);
27
+ try {
28
+ return await fn(client);
29
+ }
30
+ finally {
31
+ await client.close();
32
+ }
33
+ }
34
+ export function splitCommandLine(commandLine) {
35
+ return stringArgv(commandLine);
36
+ }
37
+ export function extractMcpContent(content) {
38
+ if (!Array.isArray(content))
39
+ return content;
40
+ const parts = content
41
+ .map((part) => extractContentPart(part))
42
+ .filter((part) => part !== undefined);
43
+ if (parts.length === 0)
44
+ return '';
45
+ if (parts.every((part) => typeof part === 'string'))
46
+ return parts.join('\n');
47
+ return parts;
48
+ }
49
+ function extractContentPart(part) {
50
+ if (!isObject(part))
51
+ return undefined;
52
+ if (part.type === 'text' && typeof part.text === 'string')
53
+ return part.text;
54
+ if (typeof part.data === 'string')
55
+ return part.data;
56
+ if (part.type === 'resource' && isObject(part.resource)) {
57
+ if (typeof part.resource.text === 'string')
58
+ return part.resource.text;
59
+ if (typeof part.resource.blob === 'string')
60
+ return part.resource.blob;
61
+ }
62
+ return part;
63
+ }
64
+ function isObject(value) {
65
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
66
+ }
67
+ //# sourceMappingURL=stdio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../src/mcp/stdio.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { CommandDef } from '../core/types.js';
2
+ export type ExecuteOpenApiOptions = {
3
+ baseUrl: string;
4
+ authHeaders?: Array<[string, string]>;
5
+ stdinBody?: unknown;
6
+ };
7
+ export declare function executeOpenApi(command: CommandDef, values: Record<string, unknown>, options: ExecuteOpenApiOptions): Promise<{
8
+ status: number;
9
+ ok: boolean;
10
+ text: string;
11
+ contentType: string;
12
+ }>;
@@ -0,0 +1,44 @@
1
+ import ky from 'ky';
2
+ import { collectOpenApiParams } from './params.js';
3
+ export async function executeOpenApi(command, values, options) {
4
+ const collected = collectOpenApiParams(command, values, {
5
+ stdinBody: options.stdinBody,
6
+ });
7
+ const url = buildUrl(options.baseUrl, collected.path, collected.queryParams);
8
+ const method = (command.method ?? 'get').toUpperCase();
9
+ const headers = {
10
+ ...Object.fromEntries(options.authHeaders ?? []),
11
+ ...collected.headers,
12
+ };
13
+ const body = method !== 'GET' && collected.body !== null ? JSON.stringify(collected.body) : undefined;
14
+ if (body !== undefined)
15
+ headers['Content-Type'] ??= 'application/json';
16
+ const response = await ky(url, {
17
+ method,
18
+ headers,
19
+ ...(body === undefined ? {} : { body }),
20
+ throwHttpErrors: false,
21
+ });
22
+ return {
23
+ status: response.status,
24
+ ok: response.ok,
25
+ text: await response.text(),
26
+ contentType: response.headers.get('content-type') ?? '',
27
+ };
28
+ }
29
+ function buildUrl(baseUrl, path, queryParams) {
30
+ const url = new URL(`${baseUrl.replace(/\/$/, '')}${path}`);
31
+ for (const [key, value] of Object.entries(queryParams)) {
32
+ if (value === undefined || value === null)
33
+ continue;
34
+ if (Array.isArray(value)) {
35
+ for (const item of value)
36
+ url.searchParams.append(key, String(item));
37
+ }
38
+ else {
39
+ url.searchParams.set(key, String(value));
40
+ }
41
+ }
42
+ return url.toString();
43
+ }
44
+ //# sourceMappingURL=execute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.js","sourceRoot":"","sources":["../../src/openapi/execute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AAIpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAQnD,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAAmB,EACnB,MAA+B,EAC/B,OAA8B;IAE9B,MAAM,SAAS,GAAG,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE;QACtD,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAC7E,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACvD,MAAM,OAAO,GAA2B;QACtC,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;QAChD,GAAG,SAAS,CAAC,OAAO;KACrB,CAAC;IAEF,MAAM,IAAI,GACR,MAAM,KAAK,KAAK,IAAI,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3F,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,CAAC,cAAc,CAAC,KAAK,kBAAkB,CAAC;IAEvE,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,GAAG,EAAE;QAC7B,MAAM;QACN,OAAO;QACP,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QACvC,eAAe,EAAE,KAAK;KACvB,CAAC,CAAC;IACH,OAAO;QACL,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,IAAI,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE;QAC3B,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE;KACxD,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,OAAe,EAAE,IAAY,EAAE,WAAoC;IACnF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;IAC5D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACvD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QACpD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,MAAM,IAAI,IAAI,KAAK;gBAAE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACvE,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { CommandDef } from '../core/types.js';
2
+ export declare function extractOpenApiCommands(spec: unknown): CommandDef[];
@@ -0,0 +1,123 @@
1
+ import { schemaTypeToCliType } from '../core/coerce.js';
2
+ import { toKebab } from '../core/names.js';
3
+ const HTTP_METHODS = new Set(['get', 'post', 'put', 'delete', 'patch']);
4
+ export function extractOpenApiCommands(spec) {
5
+ const commands = [];
6
+ const seenNames = new Map();
7
+ const paths = isObject(spec) && isObject(spec.paths) ? spec.paths : {};
8
+ for (const [path, methods] of Object.entries(paths)) {
9
+ if (!isObject(methods))
10
+ continue;
11
+ for (const [method, operation] of Object.entries(methods)) {
12
+ if (!HTTP_METHODS.has(method) || !isObject(operation))
13
+ continue;
14
+ let name = operation.operationId !== undefined
15
+ ? toKebab(String(operation.operationId))
16
+ : fallbackName(method, path);
17
+ const seen = seenNames.get(name) ?? 0;
18
+ seenNames.set(name, seen + 1);
19
+ if (seen > 0)
20
+ name = `${name}-${method}`;
21
+ const params = extractParameters(operation);
22
+ const body = extractRequestBodyParams(operation);
23
+ params.push(...body.params);
24
+ commands.push({
25
+ name,
26
+ description: String(operation.summary ?? operation.description ?? `${method.toUpperCase()} ${path}`),
27
+ params,
28
+ hasBody: body.params.length > 0,
29
+ method,
30
+ path,
31
+ ...(body.contentType === undefined ? {} : { contentType: body.contentType }),
32
+ });
33
+ }
34
+ }
35
+ return commands;
36
+ }
37
+ function extractParameters(operation) {
38
+ const rawParams = Array.isArray(operation.parameters) ? operation.parameters : [];
39
+ return rawParams.filter(isObject).map((param) => {
40
+ const schema = getSchema(param.schema);
41
+ const { type, suffix } = schemaTypeToCliType(schema);
42
+ const choices = Array.isArray(schema.enum) ? { choices: schema.enum } : {};
43
+ return {
44
+ name: toKebab(String(param.name)),
45
+ originalName: String(param.name),
46
+ type,
47
+ required: Boolean(param.required),
48
+ description: `${String(param.description ?? param.name)}${suffix}`,
49
+ ...choices,
50
+ location: normalizeLocation(param.in),
51
+ schema,
52
+ };
53
+ });
54
+ }
55
+ function extractRequestBodyParams(operation) {
56
+ const requestBody = isObject(operation.requestBody) ? operation.requestBody : undefined;
57
+ const content = requestBody !== undefined && isObject(requestBody.content) ? requestBody.content : {};
58
+ const multipartSchema = getContentSchema(content, 'multipart/form-data');
59
+ const jsonSchema = getContentSchema(content, 'application/json');
60
+ const multipartProps = getProperties(multipartSchema);
61
+ const hasBinary = Object.values(multipartProps).some((schema) => schema.format === 'binary');
62
+ let schema = {};
63
+ let contentType;
64
+ if (hasBinary) {
65
+ schema = multipartSchema;
66
+ contentType = 'multipart/form-data';
67
+ }
68
+ else if (Object.keys(getProperties(jsonSchema)).length > 0) {
69
+ schema = jsonSchema;
70
+ }
71
+ else if (Object.keys(multipartProps).length > 0) {
72
+ schema = multipartSchema;
73
+ contentType = 'multipart/form-data';
74
+ }
75
+ const required = new Set(Array.isArray(schema.required) ? schema.required : []);
76
+ const properties = getProperties(schema);
77
+ const params = Object.entries(properties).map(([propName, propSchema]) => {
78
+ const isBinary = contentType === 'multipart/form-data' && propSchema.format === 'binary';
79
+ const { type, suffix } = isBinary
80
+ ? { type: 'string', suffix: ' (file path)' }
81
+ : schemaTypeToCliType(propSchema);
82
+ const choices = Array.isArray(propSchema.enum) ? { choices: propSchema.enum } : {};
83
+ return {
84
+ name: toKebab(propName),
85
+ originalName: propName,
86
+ type,
87
+ required: required.has(propName),
88
+ description: `${String(propSchema.description ?? propName)}${suffix}`,
89
+ ...choices,
90
+ location: isBinary ? 'file' : 'body',
91
+ schema: propSchema,
92
+ };
93
+ });
94
+ return contentType === undefined ? { params } : { params, contentType };
95
+ }
96
+ function getContentSchema(content, contentType) {
97
+ const item = content[contentType];
98
+ return isObject(item) ? getSchema(item.schema) : {};
99
+ }
100
+ function getProperties(schema) {
101
+ return isObject(schema.properties)
102
+ ? Object.fromEntries(Object.entries(schema.properties).filter((entry) => isObject(entry[1])))
103
+ : {};
104
+ }
105
+ function getSchema(value) {
106
+ return isObject(value) ? value : {};
107
+ }
108
+ function normalizeLocation(value) {
109
+ return value === 'path' || value === 'header' || value === 'body' || value === 'file'
110
+ ? value
111
+ : 'query';
112
+ }
113
+ function fallbackName(method, path) {
114
+ const slug = path
115
+ .replace(/^\/+|\/+$/g, '')
116
+ .replace(/[{}]/g, '')
117
+ .replace(/\//g, '-');
118
+ return slug ? `${method}-${slug}` : method;
119
+ }
120
+ function isObject(value) {
121
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
122
+ }
123
+ //# sourceMappingURL=extract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/openapi/extract.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAIxE,MAAM,UAAU,sBAAsB,CAAC,IAAa;IAClD,MAAM,QAAQ,GAAiB,EAAE,CAAC;IAClC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAEvE,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,SAAS;QACjC,KAAK,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAAE,SAAS;YAEhE,IAAI,IAAI,GACN,SAAS,CAAC,WAAW,KAAK,SAAS;gBACjC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;gBACxC,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACjC,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;YAC9B,IAAI,IAAI,GAAG,CAAC;gBAAE,IAAI,GAAG,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC;YAEzC,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAC5C,MAAM,IAAI,GAAG,wBAAwB,CAAC,SAAS,CAAC,CAAC;YACjD,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;YAE5B,QAAQ,CAAC,IAAI,CAAC;gBACZ,IAAI;gBACJ,WAAW,EAAE,MAAM,CACjB,SAAS,CAAC,OAAO,IAAI,SAAS,CAAC,WAAW,IAAI,GAAG,MAAM,CAAC,WAAW,EAAE,IAAI,IAAI,EAAE,CAChF;gBACD,MAAM;gBACN,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;gBAC/B,MAAM;gBACN,IAAI;gBACJ,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;aAC7E,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,iBAAiB,CAAC,SAAqB;IAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,OAAO,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAY,EAAE;QACxD,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;YAChC,IAAI;YACJ,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;YACjC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE;YAClE,GAAG,OAAO;YACV,QAAQ,EAAE,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;YACrC,MAAM;SACP,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,wBAAwB,CAAC,SAAqB;IAIrD,MAAM,WAAW,GAAG,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;IACxF,MAAM,OAAO,GACX,WAAW,KAAK,SAAS,IAAI,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAExF,MAAM,eAAe,GAAG,gBAAgB,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC;IACzE,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;IACjE,MAAM,cAAc,GAAG,aAAa,CAAC,eAAe,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;IAE7F,IAAI,MAAM,GAAe,EAAE,CAAC;IAC5B,IAAI,WAA+B,CAAC;IACpC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,GAAG,eAAe,CAAC;QACzB,WAAW,GAAG,qBAAqB,CAAC;IACtC,CAAC;SAAM,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7D,MAAM,GAAG,UAAU,CAAC;IACtB,CAAC;SAAM,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,GAAG,eAAe,CAAC;QACzB,WAAW,GAAG,qBAAqB,CAAC;IACtC,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAChF,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAY,EAAE;QACjF,MAAM,QAAQ,GAAG,WAAW,KAAK,qBAAqB,IAAI,UAAU,CAAC,MAAM,KAAK,QAAQ,CAAC;QACzF,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ;YAC/B,CAAC,CAAC,EAAE,IAAI,EAAE,QAAiB,EAAE,MAAM,EAAE,cAAc,EAAE;YACrD,CAAC,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC;YACvB,YAAY,EAAE,QAAQ;YACtB,IAAI;YACJ,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC;YAChC,WAAW,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,IAAI,QAAQ,CAAC,GAAG,MAAM,EAAE;YACrE,GAAG,OAAO;YACV,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;YACpC,MAAM,EAAE,UAAU;SACnB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AAC1E,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAmB,EAAE,WAAmB;IAChE,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAClC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACtD,CAAC;AAED,SAAS,aAAa,CAAC,MAAkB;IACvC,OAAO,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC;QAChC,CAAC,CAAC,MAAM,CAAC,WAAW,CAChB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAiC,EAAE,CAChF,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACnB,CACF;QACH,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAE,KAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;AACtD,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,MAAM;QACnF,CAAC,CAAC,KAAK;QACP,CAAC,CAAC,OAAO,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,MAAc,EAAE,IAAY;IAChD,MAAM,IAAI,GAAG,IAAI;SACd,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;SACzB,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;SACpB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACvB,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AAC7C,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,11 @@
1
+ export type LoadOpenApiOptions = {
2
+ authHeaders?: Array<[string, string]>;
3
+ cacheDir?: string;
4
+ cacheKey?: string;
5
+ ttlSeconds?: number;
6
+ refresh?: boolean;
7
+ };
8
+ export type OpenApiSpec = Record<string, unknown> & {
9
+ paths: Record<string, unknown>;
10
+ };
11
+ export declare function loadOpenApiSpec(source: string, options?: LoadOpenApiOptions): Promise<OpenApiSpec>;
@@ -0,0 +1,52 @@
1
+ import ky from 'ky';
2
+ import { readFile } from 'node:fs/promises';
3
+ import YAML from 'yaml';
4
+ import { cacheKeyFor, loadCached, saveCache } from '../core/cache.js';
5
+ import { resolveRefs } from './refs.js';
6
+ export async function loadOpenApiSpec(source, options = {}) {
7
+ const isUrl = source.startsWith('http://') || source.startsWith('https://');
8
+ const ttlSeconds = options.ttlSeconds ?? 3600;
9
+ const key = options.cacheKey ?? cacheKeyFor({ source, authHeaders: options.authHeaders ?? [] });
10
+ if (isUrl && options.cacheDir !== undefined && !options.refresh) {
11
+ const cached = await loadCached(options.cacheDir, key, ttlSeconds);
12
+ if (cached !== null)
13
+ return cached;
14
+ }
15
+ const raw = isUrl
16
+ ? await fetchRemoteSpec(source, options.authHeaders ?? [])
17
+ : await readFile(source, 'utf8');
18
+ const parsed = parseSpec(raw);
19
+ const spec = await resolveRefs(parsed);
20
+ if (!isOpenApiSpec(spec)) {
21
+ throw new Error("spec must contain 'paths'");
22
+ }
23
+ if (isUrl && options.cacheDir !== undefined) {
24
+ await saveCache(options.cacheDir, key, spec);
25
+ }
26
+ return spec;
27
+ }
28
+ async function fetchRemoteSpec(source, authHeaders) {
29
+ const response = await ky.get(source, {
30
+ headers: Object.fromEntries(authHeaders),
31
+ throwHttpErrors: false,
32
+ });
33
+ if (!response.ok)
34
+ throw new Error(`failed to fetch spec: HTTP ${response.status}`);
35
+ return response.text();
36
+ }
37
+ function parseSpec(raw) {
38
+ try {
39
+ return JSON.parse(raw);
40
+ }
41
+ catch {
42
+ return YAML.parse(raw);
43
+ }
44
+ }
45
+ function isOpenApiSpec(value) {
46
+ return (typeof value === 'object' &&
47
+ value !== null &&
48
+ !Array.isArray(value) &&
49
+ 'paths' in value &&
50
+ typeof value.paths === 'object');
51
+ }
52
+ //# sourceMappingURL=load.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load.js","sourceRoot":"","sources":["../../src/openapi/load.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAcxC,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAc,EACd,OAAO,GAAuB,EAAE;IAEhC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC5E,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC;IAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,IAAI,WAAW,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC,CAAC;IAEhG,IAAI,KAAK,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QAChE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAc,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAChF,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,MAAM,CAAC;IACrC,CAAC;IAED,MAAM,GAAG,GAAG,KAAK;QACf,CAAC,CAAC,MAAM,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;QAC1D,CAAC,CAAC,MAAM,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC9B,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;IAEvC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,KAAK,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC5C,MAAM,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,MAAc,EACd,WAAoC;IAEpC,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE;QACpC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC;QACxC,eAAe,EAAE,KAAK;KACvB,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACnF,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC5B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;IACpC,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,OAAO,IAAI,KAAK;QAChB,OAAQ,KAA6B,CAAC,KAAK,KAAK,QAAQ,CACzD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { CommandDef } from '../core/types.js';
2
+ export type CollectedOpenApiParams = {
3
+ path: string;
4
+ queryParams: Record<string, unknown>;
5
+ headers: Record<string, string>;
6
+ body: Record<string, unknown> | unknown[] | string | number | boolean | null;
7
+ files: Record<string, unknown> | null;
8
+ };
9
+ export type CollectOpenApiOptions = {
10
+ stdinBody?: unknown;
11
+ };
12
+ export declare function collectOpenApiParams(command: CommandDef, values: Record<string, unknown>, options?: CollectOpenApiOptions): CollectedOpenApiParams;
@@ -0,0 +1,47 @@
1
+ import { coerceAndValidateValue } from '../core/coerce.js';
2
+ export function collectOpenApiParams(command, values, options = {}) {
3
+ let path = command.path ?? '';
4
+ const queryParams = {};
5
+ const headers = {};
6
+ let body = null;
7
+ const files = null;
8
+ for (const param of command.params) {
9
+ if (param.location !== 'path')
10
+ continue;
11
+ const value = values[param.name];
12
+ if (value !== undefined && value !== null) {
13
+ path = path.replace(`{${param.originalName}}`, encodeURIComponent(String(value)));
14
+ }
15
+ }
16
+ for (const param of command.params) {
17
+ const value = values[param.name];
18
+ if (value === undefined || value === null)
19
+ continue;
20
+ if (param.location === 'query') {
21
+ queryParams[param.originalName] = coerceAndValidateValue(value, param.schema ?? {}, `--${param.name}`);
22
+ }
23
+ else if (param.location === 'header') {
24
+ headers[param.originalName] = String(value);
25
+ }
26
+ }
27
+ const method = command.method?.toLowerCase() ?? 'get';
28
+ if (method !== 'get') {
29
+ if (options.stdinBody !== undefined) {
30
+ body = options.stdinBody;
31
+ }
32
+ else {
33
+ const collectedBody = {};
34
+ for (const param of command.params) {
35
+ if (param.location !== 'body')
36
+ continue;
37
+ const value = values[param.name];
38
+ if (value !== undefined && value !== null) {
39
+ collectedBody[param.originalName] = coerceAndValidateValue(value, param.schema ?? {}, `--${param.name}`);
40
+ }
41
+ }
42
+ body = Object.keys(collectedBody).length > 0 ? collectedBody : null;
43
+ }
44
+ }
45
+ return { path, queryParams, headers, body, files };
46
+ }
47
+ //# sourceMappingURL=params.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"params.js","sourceRoot":"","sources":["../../src/openapi/params.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAc3D,MAAM,UAAU,oBAAoB,CAClC,OAAmB,EACnB,MAA+B,EAC/B,OAAO,GAA0B,EAAE;IAEnC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;IAC9B,MAAM,WAAW,GAA4B,EAAE,CAAC;IAChD,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,IAAI,IAAI,GAAmC,IAAI,CAAC;IAChD,MAAM,KAAK,GAAmC,IAAI,CAAC;IAEnD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM;YAAE,SAAS;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC1C,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,YAAY,GAAG,EAAE,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpF,CAAC;IACH,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;YAAE,SAAS;QAEpD,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC/B,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,sBAAsB,CACtD,KAAK,EACL,KAAK,CAAC,MAAM,IAAI,EAAE,EAClB,KAAK,KAAK,CAAC,IAAI,EAAE,CAClB,CAAC;QACJ,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,KAAK,CAAC;IACtD,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACpC,IAAI,GAAG,OAAO,CAAC,SAA2C,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,MAAM,aAAa,GAA4B,EAAE,CAAC;YAClD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnC,IAAI,KAAK,CAAC,QAAQ,KAAK,MAAM;oBAAE,SAAS;gBACxC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACjC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBAC1C,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,sBAAsB,CACxD,KAAK,EACL,KAAK,CAAC,MAAM,IAAI,EAAE,EAClB,KAAK,KAAK,CAAC,IAAI,EAAE,CAClB,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;QACtE,CAAC;IACH,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACrD,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function resolveRefs<T>(input: T): Promise<T>;
@@ -0,0 +1,8 @@
1
+ import $RefParser from '@apidevtools/json-schema-ref-parser';
2
+ export async function resolveRefs(input) {
3
+ return (await $RefParser.dereference(input, {
4
+ mutateInputSchema: false,
5
+ dereference: { circular: 'ignore' },
6
+ }));
7
+ }
8
+ //# sourceMappingURL=refs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refs.js","sourceRoot":"","sources":["../../src/openapi/refs.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,qCAAqC,CAAC;AAE7D,MAAM,CAAC,KAAK,UAAU,WAAW,CAAI,KAAQ;IAC3C,OAAO,CAAC,MAAM,UAAU,CAAC,WAAW,CAAC,KAAe,EAAE;QACpD,iBAAiB,EAAE,KAAK;QACxB,WAAW,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;KACpC,CAAC,CAAM,CAAC;AACX,CAAC"}
@@ -0,0 +1,77 @@
1
+ export type AgentId = keyof typeof AGENT_INSTALL_TARGETS;
2
+ export type InstallScope = 'project' | 'global';
3
+ export type AgentInstallTarget = {
4
+ displayName: string;
5
+ projectDir: string;
6
+ globalDir: (home: string, configHome: string) => string;
7
+ };
8
+ export declare const AGENT_INSTALL_TARGETS: {
9
+ readonly pi: {
10
+ readonly displayName: 'Pi';
11
+ readonly projectDir: '.pi/skills';
12
+ readonly globalDir: (home: string) => string;
13
+ };
14
+ readonly universal: {
15
+ readonly displayName: 'Universal (.agents)';
16
+ readonly projectDir: '.agents/skills';
17
+ readonly globalDir: (_home: string, configHome: string) => string;
18
+ };
19
+ readonly codex: {
20
+ readonly displayName: 'Codex';
21
+ readonly projectDir: '.agents/skills';
22
+ readonly globalDir: (home: string) => string;
23
+ };
24
+ readonly 'claude-code': {
25
+ readonly displayName: 'Claude Code';
26
+ readonly projectDir: '.claude/skills';
27
+ readonly globalDir: (home: string) => string;
28
+ };
29
+ readonly cursor: {
30
+ readonly displayName: 'Cursor';
31
+ readonly projectDir: '.agents/skills';
32
+ readonly globalDir: (home: string) => string;
33
+ };
34
+ readonly opencode: {
35
+ readonly displayName: 'OpenCode';
36
+ readonly projectDir: '.agents/skills';
37
+ readonly globalDir: (_home: string, configHome: string) => string;
38
+ };
39
+ readonly 'gemini-cli': {
40
+ readonly displayName: 'Gemini CLI';
41
+ readonly projectDir: '.agents/skills';
42
+ readonly globalDir: (home: string) => string;
43
+ };
44
+ readonly amp: {
45
+ readonly displayName: 'Amp';
46
+ readonly projectDir: '.agents/skills';
47
+ readonly globalDir: (_home: string, configHome: string) => string;
48
+ };
49
+ readonly 'github-copilot': {
50
+ readonly displayName: 'GitHub Copilot';
51
+ readonly projectDir: '.agents/skills';
52
+ readonly globalDir: (home: string) => string;
53
+ };
54
+ readonly goose: {
55
+ readonly displayName: 'Goose';
56
+ readonly projectDir: '.goose/skills';
57
+ readonly globalDir: (_home: string, configHome: string) => string;
58
+ };
59
+ readonly cline: {
60
+ readonly displayName: 'Cline';
61
+ readonly projectDir: '.agents/skills';
62
+ readonly globalDir: (home: string) => string;
63
+ };
64
+ readonly windsurf: {
65
+ readonly displayName: 'Windsurf';
66
+ readonly projectDir: '.windsurf/skills';
67
+ readonly globalDir: (home: string) => string;
68
+ };
69
+ };
70
+ export declare function listAgentIds(): AgentId[];
71
+ export declare function isAgentId(value: string): value is AgentId;
72
+ export declare function resolveAgentSkillDir(agent: AgentId, scope: InstallScope, options?: {
73
+ cwd?: string;
74
+ home?: string;
75
+ configHome?: string;
76
+ }): string;
77
+ export declare function assertValidSkillName(name: string): void;
@@ -0,0 +1,85 @@
1
+ import { homedir } from 'node:os';
2
+ import { join } from 'node:path';
3
+ // Agent skill locations adapted from vercel-labs/skills (MIT):
4
+ // https://github.com/vercel-labs/skills
5
+ export const AGENT_INSTALL_TARGETS = {
6
+ pi: {
7
+ displayName: 'Pi',
8
+ projectDir: '.pi/skills',
9
+ globalDir: (home) => join(home, '.pi/agent/skills'),
10
+ },
11
+ universal: {
12
+ displayName: 'Universal (.agents)',
13
+ projectDir: '.agents/skills',
14
+ globalDir: (_home, configHome) => join(configHome, 'agents/skills'),
15
+ },
16
+ codex: {
17
+ displayName: 'Codex',
18
+ projectDir: '.agents/skills',
19
+ globalDir: (home) => join(process.env.CODEX_HOME?.trim() || join(home, '.codex'), 'skills'),
20
+ },
21
+ 'claude-code': {
22
+ displayName: 'Claude Code',
23
+ projectDir: '.claude/skills',
24
+ globalDir: (home) => join(process.env.CLAUDE_CONFIG_DIR?.trim() || join(home, '.claude'), 'skills'),
25
+ },
26
+ cursor: {
27
+ displayName: 'Cursor',
28
+ projectDir: '.agents/skills',
29
+ globalDir: (home) => join(home, '.cursor/skills'),
30
+ },
31
+ opencode: {
32
+ displayName: 'OpenCode',
33
+ projectDir: '.agents/skills',
34
+ globalDir: (_home, configHome) => join(configHome, 'opencode/skills'),
35
+ },
36
+ 'gemini-cli': {
37
+ displayName: 'Gemini CLI',
38
+ projectDir: '.agents/skills',
39
+ globalDir: (home) => join(home, '.gemini/skills'),
40
+ },
41
+ amp: {
42
+ displayName: 'Amp',
43
+ projectDir: '.agents/skills',
44
+ globalDir: (_home, configHome) => join(configHome, 'agents/skills'),
45
+ },
46
+ 'github-copilot': {
47
+ displayName: 'GitHub Copilot',
48
+ projectDir: '.agents/skills',
49
+ globalDir: (home) => join(home, '.copilot/skills'),
50
+ },
51
+ goose: {
52
+ displayName: 'Goose',
53
+ projectDir: '.goose/skills',
54
+ globalDir: (_home, configHome) => join(configHome, 'goose/skills'),
55
+ },
56
+ cline: {
57
+ displayName: 'Cline',
58
+ projectDir: '.agents/skills',
59
+ globalDir: (home) => join(home, '.agents/skills'),
60
+ },
61
+ windsurf: {
62
+ displayName: 'Windsurf',
63
+ projectDir: '.windsurf/skills',
64
+ globalDir: (home) => join(home, '.codeium/windsurf/skills'),
65
+ },
66
+ };
67
+ export function listAgentIds() {
68
+ return Object.keys(AGENT_INSTALL_TARGETS);
69
+ }
70
+ export function isAgentId(value) {
71
+ return value in AGENT_INSTALL_TARGETS;
72
+ }
73
+ export function resolveAgentSkillDir(agent, scope, options = {}) {
74
+ const cwd = options.cwd ?? process.cwd();
75
+ const home = options.home ?? homedir();
76
+ const configHome = options.configHome ?? process.env.XDG_CONFIG_HOME ?? join(home, '.config');
77
+ const target = AGENT_INSTALL_TARGETS[agent];
78
+ return scope === 'project' ? join(cwd, target.projectDir) : target.globalDir(home, configHome);
79
+ }
80
+ export function assertValidSkillName(name) {
81
+ if (!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(name) || name.length > 64) {
82
+ throw new Error('--name must be 1-64 characters and contain only lowercase letters, numbers, and single hyphens');
83
+ }
84
+ }
85
+ //# sourceMappingURL=agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/skills/agents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function runGenerate(argv: string[]): Promise<void>;