@asnd/skill-creator 0.1.2 → 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 -10
  84. package/prompts/skill-creator.md +169 -0
  85. package/dist/cli/package-SLCRJ4QY.js +0 -89
  86. package/dist/cli/package-SLCRJ4QY.js.map +0 -1
  87. package/prompts/generate-skill.md +0 -22
  88. package/skills/skill-creator/SKILL.md +0 -260
@@ -0,0 +1,494 @@
1
+ import { printSchema } from 'graphql';
2
+ import { execFile } from 'node:child_process';
3
+ import { existsSync } from 'node:fs';
4
+ import { chmod, mkdir, readFile, rm, writeFile } from 'node:fs/promises';
5
+ import { extname, join } from 'node:path';
6
+ import { promisify } from 'node:util';
7
+ import { resolveSecret } from '../core/secrets.js';
8
+ import { loadGraphqlSchema } from '../graphql/load.js';
9
+ import { AGENT_INSTALL_TARGETS, assertValidSkillName, isAgentId, listAgentIds, resolveAgentSkillDir, } from './agents.js';
10
+ const execFileAsync = promisify(execFile);
11
+ export async function runGenerate(argv) {
12
+ const args = await completeInteractiveOptions(parseGenerateArgs(argv));
13
+ if (args.help) {
14
+ printGenerateHelp();
15
+ return;
16
+ }
17
+ if (args.name === undefined)
18
+ throw new Error('--name is required');
19
+ if (args.agent === undefined || args.scope === undefined) {
20
+ throw new Error('--agent and --scope are required when prompts are unavailable');
21
+ }
22
+ const template = normalizeTemplate(args);
23
+ assertValidSkillName(args.name);
24
+ const scriptName = args.script ?? args.name;
25
+ assertValidSkillName(scriptName);
26
+ const skillRoot = resolveAgentSkillDir(args.agent, args.scope);
27
+ const skillDir = join(skillRoot, args.name);
28
+ await assertWritableTarget(skillDir, args.force);
29
+ const scriptsDir = join(skillDir, 'scripts');
30
+ await mkdir(scriptsDir, { recursive: true });
31
+ const scriptPath = join(scriptsDir, scriptName);
32
+ let skillMd;
33
+ if (template === 'openapi') {
34
+ const specSource = required(args.spec, '--spec is required for --template openapi');
35
+ const referencesDir = join(skillDir, 'references');
36
+ await mkdir(referencesDir, { recursive: true });
37
+ const specFileName = `openapi-spec-${formatDateForFile(new Date())}${openApiSpecExtension(specSource)}`;
38
+ await writeFile(join(referencesDir, specFileName), await readSource(specSource));
39
+ await writeFile(scriptPath, renderOpenApiScript(specFileName, args));
40
+ skillMd = renderOpenApiSkillMd(specFileName, scriptName, args);
41
+ }
42
+ else if (template === 'graphql') {
43
+ const endpoint = required(args.graphql, '--graphql is required for --template graphql');
44
+ const referencesDir = join(skillDir, 'references');
45
+ await mkdir(referencesDir, { recursive: true });
46
+ const schemaFileName = await saveGraphqlSchema(referencesDir, args);
47
+ await writeFile(scriptPath, renderGraphqlScript(endpoint, schemaFileName, args));
48
+ skillMd = renderGraphqlSkillMd(schemaFileName, scriptName, args);
49
+ }
50
+ else if (template === 'mcp-http') {
51
+ const endpoint = required(args.mcp, '--mcp is required for --template mcp-http');
52
+ await writeFile(scriptPath, renderMcpHttpScript(endpoint, args));
53
+ skillMd = renderMcpSkillMd(scriptName, args, 'http');
54
+ }
55
+ else {
56
+ const command = required(args.mcpStdio, '--mcp-stdio is required for --template mcp-stdio');
57
+ await writeFile(scriptPath, renderMcpStdioScript(command));
58
+ skillMd = renderMcpSkillMd(scriptName, args, 'stdio');
59
+ }
60
+ await chmod(scriptPath, 0o755);
61
+ await writeFile(join(skillDir, 'SKILL.md'), skillMd);
62
+ if (!args.noTest)
63
+ await smokeTestScript(scriptPath);
64
+ console.log(`Generated skill: ${skillDir}`);
65
+ console.log(`Agent: ${AGENT_INSTALL_TARGETS[args.agent].displayName}`);
66
+ console.log(`Scope: ${args.scope}`);
67
+ console.log(`Try: ${join('.', 'scripts', scriptName)} --list`);
68
+ }
69
+ function parseGenerateArgs(argv) {
70
+ const args = {
71
+ force: false,
72
+ yes: false,
73
+ noTest: false,
74
+ authHeaders: [],
75
+ help: false,
76
+ };
77
+ for (let index = 0; index < argv.length; index += 1) {
78
+ const token = argv[index];
79
+ if (token === undefined)
80
+ continue;
81
+ switch (token) {
82
+ case '--help':
83
+ case '-h':
84
+ args.help = true;
85
+ break;
86
+ case '--template':
87
+ args.template = requireValue(argv, ++index, token);
88
+ break;
89
+ case '--name':
90
+ args.name = requireValue(argv, ++index, token);
91
+ break;
92
+ case '--script':
93
+ args.script = requireValue(argv, ++index, token);
94
+ break;
95
+ case '--spec':
96
+ args.spec = requireValue(argv, ++index, token);
97
+ break;
98
+ case '--graphql':
99
+ args.graphql = requireValue(argv, ++index, token);
100
+ break;
101
+ case '--graphql-schema':
102
+ args.graphqlSchema = requireValue(argv, ++index, token);
103
+ break;
104
+ case '--mcp':
105
+ args.mcp = requireValue(argv, ++index, token);
106
+ break;
107
+ case '--mcp-stdio':
108
+ args.mcpStdio = requireValue(argv, ++index, token);
109
+ break;
110
+ case '--agent':
111
+ args.agent = parseAgent(requireValue(argv, ++index, token));
112
+ break;
113
+ case '--scope':
114
+ args.scope = parseScope(requireValue(argv, ++index, token));
115
+ break;
116
+ case '--auth-header':
117
+ args.authHeaders.push(requireValue(argv, ++index, token));
118
+ break;
119
+ case '--base-url':
120
+ args.baseUrl = requireValue(argv, ++index, token);
121
+ break;
122
+ case '--description':
123
+ args.description = requireValue(argv, ++index, token);
124
+ break;
125
+ case '--force':
126
+ args.force = true;
127
+ break;
128
+ case '--yes':
129
+ case '-y':
130
+ args.yes = true;
131
+ break;
132
+ case '--no-test':
133
+ args.noTest = true;
134
+ break;
135
+ case 'agent':
136
+ args.agent = parseAgent(requireValue(argv, ++index, token));
137
+ break;
138
+ case 'scope':
139
+ args.scope = parseScope(requireValue(argv, ++index, token));
140
+ break;
141
+ default:
142
+ if (token.startsWith('-'))
143
+ throw new Error(`unknown generate option: ${token}`);
144
+ throw new Error(`unexpected generate argument: ${token}`);
145
+ }
146
+ }
147
+ return args;
148
+ }
149
+ async function completeInteractiveOptions(args) {
150
+ if (args.help || (args.agent !== undefined && args.scope !== undefined))
151
+ return args;
152
+ if (args.yes || !process.stdin.isTTY || !process.stdout.isTTY)
153
+ return args;
154
+ const readline = await import('node:readline/promises');
155
+ const rl = readline.createInterface({
156
+ input: process.stdin,
157
+ output: process.stdout,
158
+ });
159
+ try {
160
+ const completed = { ...args };
161
+ if (completed.agent === undefined) {
162
+ const agentChoices = listAgentIds();
163
+ console.log(`Agents: ${agentChoices.join(', ')}`);
164
+ completed.agent = parseAgent(await rl.question('Agent to install for: '));
165
+ }
166
+ if (completed.scope === undefined) {
167
+ completed.scope = parseScope(await rl.question('Install scope (project/global): '));
168
+ }
169
+ return completed;
170
+ }
171
+ finally {
172
+ rl.close();
173
+ }
174
+ }
175
+ function normalizeTemplate(args) {
176
+ if (args.template === 'mcp') {
177
+ if (args.mcp !== undefined && args.mcpStdio === undefined)
178
+ return 'mcp-http';
179
+ if (args.mcpStdio !== undefined && args.mcp === undefined)
180
+ return 'mcp-stdio';
181
+ throw new Error('--template mcp requires exactly one of --mcp or --mcp-stdio');
182
+ }
183
+ if (args.template === 'openapi' ||
184
+ args.template === 'graphql' ||
185
+ args.template === 'mcp-http' ||
186
+ args.template === 'mcp-stdio') {
187
+ return args.template;
188
+ }
189
+ throw new Error('--template must be one of: openapi, graphql, mcp-http, mcp-stdio, mcp');
190
+ }
191
+ async function assertWritableTarget(skillDir, force) {
192
+ if (!existsSync(skillDir))
193
+ return;
194
+ if (!force)
195
+ throw new Error(`skill target already exists: ${skillDir}. Use --force to overwrite.`);
196
+ await rm(skillDir, { recursive: true, force: true });
197
+ }
198
+ async function readSource(source) {
199
+ if (source.startsWith('http://') || source.startsWith('https://')) {
200
+ const response = await fetch(source);
201
+ if (!response.ok)
202
+ throw new Error(`failed to download source: HTTP ${response.status}`);
203
+ return Buffer.from(await response.arrayBuffer());
204
+ }
205
+ return readFile(source);
206
+ }
207
+ async function saveGraphqlSchema(referencesDir, args) {
208
+ const schemaSource = args.graphqlSchema;
209
+ const schemaFileName = `graphql-schema-${formatDateForFile(new Date())}${graphqlSchemaExtension(schemaSource)}`;
210
+ const schemaPath = join(referencesDir, schemaFileName);
211
+ if (schemaSource !== undefined) {
212
+ await writeFile(schemaPath, await readSource(schemaSource));
213
+ return schemaFileName;
214
+ }
215
+ const endpoint = required(args.graphql, '--graphql is required for --template graphql');
216
+ const schema = await loadGraphqlSchema(endpoint, {
217
+ authHeaders: await resolveAuthHeaders(args.authHeaders),
218
+ refresh: true,
219
+ });
220
+ await writeFile(schemaPath, `${printSchema(schema)}\n`);
221
+ return schemaFileName;
222
+ }
223
+ function renderOpenApiScript(specFileName, args) {
224
+ const optionLines = [`--spec "\${SKILL_DIR}/references/${specFileName}"`];
225
+ if (args.baseUrl !== undefined) {
226
+ optionLines.push(`--base-url "${shellDoubleQuote(args.baseUrl)}"`);
227
+ }
228
+ appendAuthHeaderOptions(optionLines, args.authHeaders);
229
+ return renderSkillCreatorScript(optionLines);
230
+ }
231
+ function renderGraphqlScript(endpoint, schemaFileName, args) {
232
+ const optionLines = [
233
+ `--graphql "${shellDoubleQuote(endpoint)}"`,
234
+ `--graphql-schema "\${SKILL_DIR}/references/${schemaFileName}"`,
235
+ ];
236
+ appendAuthHeaderOptions(optionLines, args.authHeaders);
237
+ return renderSkillCreatorScript(optionLines);
238
+ }
239
+ function renderMcpHttpScript(endpoint, args) {
240
+ const optionLines = [`--mcp "${shellDoubleQuote(endpoint)}"`];
241
+ appendAuthHeaderOptions(optionLines, args.authHeaders);
242
+ return renderSkillCreatorScript(optionLines);
243
+ }
244
+ function renderMcpStdioScript(command) {
245
+ return renderSkillCreatorScript([`--mcp-stdio "${shellDoubleQuote(command)}"`]);
246
+ }
247
+ function renderSkillCreatorScript(optionLines) {
248
+ return [
249
+ '#!/usr/bin/env bash',
250
+ 'set -euo pipefail',
251
+ '',
252
+ 'SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"',
253
+ 'SKILL_DIR="$(cd -- "${SCRIPT_DIR}/.." && pwd)"',
254
+ '',
255
+ 'exec npx -y @asnd/skill-creator \\',
256
+ ...optionLines.map((line) => ` ${line} \\`),
257
+ ' "$@"',
258
+ '',
259
+ ].join('\n');
260
+ }
261
+ function renderOpenApiSkillMd(specFileName, scriptName, args) {
262
+ const apiName = titleWithSuffix(args.name ?? scriptName, 'API');
263
+ const description = args.description ??
264
+ `Use ${apiName} commands from a bundled OpenAPI spec. Use when the user needs to list, inspect, test, or call ${apiName} operations from the command line.`;
265
+ return renderApiSkillMd({
266
+ name: args.name ?? scriptName,
267
+ title: apiName,
268
+ description,
269
+ scriptName,
270
+ referenceLine: `- \`references/${specFileName}\` — bundled OpenAPI spec used by \`scripts/${scriptName}\`.`,
271
+ workflowIntro: `Use the bundled wrapper script to discover and call ${apiName} operations. Global skill-creator options go before the subcommand; operation-specific options go after it.`,
272
+ });
273
+ }
274
+ function renderGraphqlSkillMd(schemaFileName, scriptName, args) {
275
+ const apiName = titleWithSuffix(args.name ?? scriptName, 'GraphQL API');
276
+ const description = args.description ??
277
+ `Use ${apiName} commands from a saved GraphQL schema. Use when the user needs to list, inspect, query, or mutate ${apiName} operations from the command line.`;
278
+ return renderApiSkillMd({
279
+ name: args.name ?? scriptName,
280
+ title: apiName,
281
+ description,
282
+ scriptName,
283
+ referenceLine: `- \`references/${schemaFileName}\` — saved GraphQL schema used by \`scripts/${scriptName}\`.`,
284
+ workflowIntro: `Use the bundled wrapper script to discover and call ${apiName} operations. Global skill-creator options go before the subcommand; operation-specific options go after it.`,
285
+ extraGotchas: [
286
+ '- Use `--fields` to keep GraphQL selection sets precise and avoid oversized nested responses.',
287
+ '- Use `--stdin` for complex GraphQL variables that are easier to pass as JSON.',
288
+ ],
289
+ });
290
+ }
291
+ function renderApiSkillMd(options) {
292
+ return `---
293
+ name: ${options.name}
294
+ description: ${options.description}
295
+ compatibility: Requires Node.js/npm; wrapper scripts use npx -y @asnd/skill-creator and network access for API calls.
296
+ ---
297
+
298
+ # ${options.title}
299
+
300
+ ${options.workflowIntro}
301
+
302
+ ## Usage
303
+
304
+ \`\`\`bash
305
+ ./scripts/${options.scriptName} --list
306
+ ./scripts/${options.scriptName} --search '<topic>'
307
+ ./scripts/${options.scriptName} <command> --help
308
+ ./scripts/${options.scriptName} --pretty <command> <flags>
309
+ \`\`\`
310
+
311
+ ## Workflows
312
+
313
+ 1. Start with \`./scripts/${options.scriptName} --list\` or \`./scripts/${options.scriptName} --search '<topic>'\`.
314
+ 2. Inspect the chosen command with \`./scripts/${options.scriptName} <command> --help\`.
315
+ 3. Test read-only commands first. Use \`--pretty\` for readable JSON and \`--head 3\` to preview large array responses.
316
+
317
+ ## Gotchas
318
+
319
+ - Keep secrets in environment variables or files and pass them through wrapper-auth flags such as \`env:API_TOKEN\`; do not put raw tokens in commands.
320
+ - Do not run write/delete operations unless the user explicitly asks and provides safe test data.
321
+ - For binary or non-JSON responses, use \`--raw > output.ext\` instead of printing to the terminal.
322
+ ${options.extraGotchas?.join('\n') ?? ''}
323
+
324
+ ## References
325
+
326
+ ${options.referenceLine}
327
+ `;
328
+ }
329
+ function renderMcpSkillMd(scriptName, args, transport) {
330
+ const title = titleWithSuffix(args.name ?? scriptName, 'MCP');
331
+ const transportLabel = transport === 'stdio' ? 'stdio' : 'HTTP/SSE';
332
+ const description = args.description ??
333
+ `Use ${title} tools over MCP ${transportLabel}. Use when the user needs to list, inspect, or call ${title} tools from the command line.`;
334
+ return `---
335
+ name: ${args.name ?? scriptName}
336
+ description: ${description}
337
+ compatibility: Requires Node.js/npm; wrapper scripts use npx -y @asnd/skill-creator and network access or local MCP server access.
338
+ ---
339
+
340
+ # ${title}
341
+
342
+ Use the bundled wrapper script to discover and call ${title} tools over MCP ${transportLabel}.
343
+
344
+ ## Usage
345
+
346
+ \`\`\`bash
347
+ ./scripts/${scriptName} --list
348
+ ./scripts/${scriptName} --search '<topic>'
349
+ ./scripts/${scriptName} <tool> --help
350
+ ./scripts/${scriptName} --pretty <tool> <flags>
351
+ \`\`\`
352
+
353
+ ## Workflows
354
+
355
+ 1. Start with \`./scripts/${scriptName} --list\` or \`./scripts/${scriptName} --search '<topic>'\`.
356
+ 2. Inspect the chosen tool with \`./scripts/${scriptName} <tool> --help\`.
357
+ 3. Test read-only tools first. Use \`--pretty\` for readable JSON and \`--head 3\` to preview large array responses.
358
+
359
+ ## Gotchas
360
+
361
+ - Do not run write/delete tools unless the user explicitly asks and provides safe test data.
362
+ - MCP ${transportLabel} tool lists can change at runtime; rerun \`--list\` when a tool is missing.
363
+ - Keep secrets in environment variables or files and pass them through wrapper-auth flags such as \`env:API_TOKEN\`; do not put raw tokens in commands.
364
+ `;
365
+ }
366
+ async function smokeTestScript(scriptPath) {
367
+ try {
368
+ await execFileAsync(scriptPath, ['--list'], { timeout: 120_000 });
369
+ }
370
+ catch (error) {
371
+ const message = error instanceof Error ? error.message : String(error);
372
+ throw new Error(`generated script smoke test failed: ${message}`);
373
+ }
374
+ }
375
+ function appendAuthHeaderOptions(optionLines, authHeaders) {
376
+ for (const header of authHeaders) {
377
+ optionLines.push(`--auth-header "${shellDoubleQuote(header)}"`);
378
+ }
379
+ }
380
+ async function resolveAuthHeaders(headers) {
381
+ return Promise.all(headers.map(async (header) => {
382
+ const [key, value] = parseHeader(header);
383
+ return [key, await resolveSecret(value)];
384
+ }));
385
+ }
386
+ function parseHeader(header) {
387
+ const colon = header.indexOf(':');
388
+ if (colon === -1)
389
+ throw new Error(`invalid auth header format: ${header}`);
390
+ return [header.slice(0, colon).trim(), header.slice(colon + 1).trim()];
391
+ }
392
+ function parseAgent(value) {
393
+ if (isAgentId(value))
394
+ return value;
395
+ throw new Error(`unknown agent: ${value}. Valid agents: ${listAgentIds().join(', ')}`);
396
+ }
397
+ function parseScope(value) {
398
+ if (value === 'project' || value === 'global')
399
+ return value;
400
+ throw new Error('--scope must be project or global');
401
+ }
402
+ function requireValue(argv, index, option) {
403
+ const value = argv[index];
404
+ if (value === undefined || value.startsWith('--'))
405
+ throw new Error(`missing value for ${option}`);
406
+ return value;
407
+ }
408
+ function required(value, message) {
409
+ if (value === undefined)
410
+ throw new Error(message);
411
+ return value;
412
+ }
413
+ function openApiSpecExtension(source) {
414
+ const pathname = urlPathnameOrSource(source);
415
+ const ext = extname(pathname).toLowerCase();
416
+ return ext === '.yaml' || ext === '.yml' ? '.yaml' : '.json';
417
+ }
418
+ function graphqlSchemaExtension(source) {
419
+ if (source === undefined)
420
+ return '.graphql';
421
+ const ext = extname(urlPathnameOrSource(source)).toLowerCase();
422
+ return ext === '.json' ? '.json' : '.graphql';
423
+ }
424
+ function urlPathnameOrSource(source) {
425
+ return source.startsWith('http://') || source.startsWith('https://')
426
+ ? new URL(source).pathname
427
+ : source;
428
+ }
429
+ function formatDateForFile(date) {
430
+ const month = String(date.getMonth() + 1).padStart(2, '0');
431
+ const day = String(date.getDate()).padStart(2, '0');
432
+ const year = String(date.getFullYear());
433
+ return `${month}-${day}-${year}`;
434
+ }
435
+ function titleWithSuffix(skillName, suffix) {
436
+ const name = displayName(skillName);
437
+ if (name.endsWith(suffix))
438
+ return name;
439
+ if (suffix === 'GraphQL API' && name.endsWith(' GraphQL'))
440
+ return `${name} API`;
441
+ return `${name} ${suffix}`;
442
+ }
443
+ function displayName(skillName) {
444
+ if (skillName.toLowerCase() === 'youtube')
445
+ return 'YouTube';
446
+ return skillName
447
+ .split('-')
448
+ .filter((part) => part.length > 0)
449
+ .map(formatDisplayPart)
450
+ .join(' ');
451
+ }
452
+ function formatDisplayPart(part) {
453
+ const acronyms = {
454
+ api: 'API',
455
+ graphql: 'GraphQL',
456
+ http: 'HTTP',
457
+ mcp: 'MCP',
458
+ };
459
+ return acronyms[part.toLowerCase()] ?? `${part[0]?.toUpperCase() ?? ''}${part.slice(1)}`;
460
+ }
461
+ function shellDoubleQuote(value) {
462
+ return value.replace(/[\\"$`]/g, (character) => `\\${character}`);
463
+ }
464
+ function printGenerateHelp() {
465
+ console.log(`npx @asnd/skill-creator generate --template TEMPLATE --name NAME --agent AGENT --scope project|global
466
+
467
+ Templates:
468
+ openapi Requires --spec URL|FILE
469
+ graphql Requires --graphql URL; optionally --graphql-schema URL|FILE
470
+ mcp-http Requires --mcp URL
471
+ mcp-stdio Requires --mcp-stdio CMD
472
+ mcp Alias; chooses mcp-http or mcp-stdio from provided source flag
473
+
474
+ Options:
475
+ --template TEMPLATE openapi|graphql|mcp-http|mcp-stdio|mcp
476
+ --name NAME Spec-compliant skill name, e.g. youtube
477
+ --script NAME Script name (defaults to --name)
478
+ --spec URL|FILE OpenAPI spec to bundle into references/
479
+ --graphql URL GraphQL endpoint URL
480
+ --graphql-schema SRC SDL or introspection JSON schema to save into references/
481
+ --mcp URL MCP HTTP/SSE endpoint URL
482
+ --mcp-stdio CMD MCP stdio server command
483
+ --agent AGENT Target agent, e.g. pi, codex, claude-code, cursor
484
+ --scope SCOPE Install scope: project|global
485
+ --auth-header K:V Add auth header to generated wrapper (repeatable)
486
+ --base-url URL Add OpenAPI base URL override to generated wrapper
487
+ --description TEXT Override generated SKILL.md description
488
+ --force Overwrite an existing skill directory
489
+ --yes, -y Non-interactive mode; requires --agent and --scope
490
+ --no-test Skip generated script smoke test
491
+ --help, -h Show this help
492
+ `);
493
+ }
494
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/skills/generate.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "@asnd/skill-creator",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Turn any MCP server, OpenAPI spec, or GraphQL endpoint into a CLI at runtime.",
5
5
  "keywords": [
6
+ "commands",
6
7
  "graphql",
7
8
  "mcp",
8
9
  "openapi",
@@ -23,22 +24,21 @@
23
24
  },
24
25
  "files": [
25
26
  "dist",
26
- "skills",
27
27
  "prompts",
28
28
  "LICENSE",
29
29
  "README.md"
30
30
  ],
31
31
  "type": "module",
32
32
  "scripts": {
33
- "build": "tsup",
33
+ "build": "tsgo -p tsconfig.build.json",
34
34
  "dev": "tsx src/cli/main.ts",
35
35
  "fmt": "oxfmt",
36
36
  "fmt:check": "oxfmt --check",
37
37
  "lint": "oxlint",
38
- "lint:fix": "oxlint --fix",
38
+ "lint:fix": "oxlint --fix --fix-suggestions --fix-dangerously",
39
39
  "test": "vitest run",
40
40
  "test:watch": "vitest",
41
- "typecheck": "tsc --noEmit"
41
+ "typecheck": "tsgo --noEmit"
42
42
  },
43
43
  "dependencies": {
44
44
  "@apidevtools/json-schema-ref-parser": "^14.2.1",
@@ -61,22 +61,19 @@
61
61
  "devDependencies": {
62
62
  "@types/cacache": "^20.0.1",
63
63
  "@types/node": "^24.10.1",
64
+ "@typescript/native-preview": "7.0.0-dev.20260521.1",
64
65
  "execa": "^9.6.0",
65
66
  "oxfmt": "^0.51.0",
66
67
  "oxlint": "^1.66.0",
67
- "tsup": "^8.5.1",
68
68
  "tsx": "^4.20.6",
69
69
  "typescript": "^5.9.3",
70
70
  "vitest": "^4.0.14"
71
71
  },
72
72
  "engines": {
73
- "node": ">=20"
73
+ "node": ">=26"
74
74
  },
75
75
  "packageManager": "pnpm@10.1.0",
76
76
  "pi": {
77
- "skills": [
78
- "./skills"
79
- ],
80
77
  "prompts": [
81
78
  "./prompts"
82
79
  ]