agent-skills-cli 1.0.8 → 1.0.9

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 (142) hide show
  1. package/README.md +18 -17
  2. package/dist/cli/agents.d.ts +10 -0
  3. package/dist/cli/agents.d.ts.map +1 -0
  4. package/dist/cli/agents.js +270 -0
  5. package/dist/cli/agents.js.map +1 -0
  6. package/dist/cli/commands/audit.d.ts +11 -0
  7. package/dist/cli/commands/audit.d.ts.map +1 -0
  8. package/dist/cli/commands/audit.js +168 -0
  9. package/dist/cli/commands/audit.js.map +1 -0
  10. package/dist/cli/commands/blueprint.d.ts +11 -0
  11. package/dist/cli/commands/blueprint.d.ts.map +1 -0
  12. package/dist/cli/commands/blueprint.js +210 -0
  13. package/dist/cli/commands/blueprint.js.map +1 -0
  14. package/dist/cli/commands/bootstrap.d.ts +11 -0
  15. package/dist/cli/commands/bootstrap.d.ts.map +1 -0
  16. package/dist/cli/commands/bootstrap.js +267 -0
  17. package/dist/cli/commands/bootstrap.js.map +1 -0
  18. package/dist/cli/commands/capture.d.ts +11 -0
  19. package/dist/cli/commands/capture.d.ts.map +1 -0
  20. package/dist/cli/commands/capture.js +109 -0
  21. package/dist/cli/commands/capture.js.map +1 -0
  22. package/dist/cli/commands/ci.d.ts +11 -0
  23. package/dist/cli/commands/ci.d.ts.map +1 -0
  24. package/dist/cli/commands/ci.js +144 -0
  25. package/dist/cli/commands/ci.js.map +1 -0
  26. package/dist/cli/commands/collab.d.ts +11 -0
  27. package/dist/cli/commands/collab.d.ts.map +1 -0
  28. package/dist/cli/commands/collab.js +196 -0
  29. package/dist/cli/commands/collab.js.map +1 -0
  30. package/dist/cli/commands/convert.d.ts +11 -0
  31. package/dist/cli/commands/convert.d.ts.map +1 -0
  32. package/dist/cli/commands/convert.js +219 -0
  33. package/dist/cli/commands/convert.js.map +1 -0
  34. package/dist/cli/commands/craft.d.ts +18 -0
  35. package/dist/cli/commands/craft.d.ts.map +1 -0
  36. package/dist/cli/commands/craft.js +205 -0
  37. package/dist/cli/commands/craft.js.map +1 -0
  38. package/dist/cli/commands/export.d.ts +9 -0
  39. package/dist/cli/commands/export.d.ts.map +1 -0
  40. package/dist/cli/commands/export.js +103 -0
  41. package/dist/cli/commands/export.js.map +1 -0
  42. package/dist/cli/commands/forge.d.ts +11 -0
  43. package/dist/cli/commands/forge.d.ts.map +1 -0
  44. package/dist/cli/commands/forge.js +152 -0
  45. package/dist/cli/commands/forge.js.map +1 -0
  46. package/dist/cli/commands/grid.d.ts +11 -0
  47. package/dist/cli/commands/grid.d.ts.map +1 -0
  48. package/dist/cli/commands/grid.js +217 -0
  49. package/dist/cli/commands/grid.js.map +1 -0
  50. package/dist/cli/commands/insight.d.ts +7 -0
  51. package/dist/cli/commands/insight.d.ts.map +1 -0
  52. package/dist/cli/commands/insight.js +71 -0
  53. package/dist/cli/commands/insight.js.map +1 -0
  54. package/dist/cli/commands/install.d.ts +6 -0
  55. package/dist/cli/commands/install.d.ts.map +1 -0
  56. package/dist/cli/commands/install.js +359 -0
  57. package/dist/cli/commands/install.js.map +1 -0
  58. package/dist/cli/commands/interactive.d.ts +7 -0
  59. package/dist/cli/commands/interactive.d.ts.map +1 -0
  60. package/dist/cli/commands/interactive.js +535 -0
  61. package/dist/cli/commands/interactive.js.map +1 -0
  62. package/dist/cli/commands/list.d.ts +6 -0
  63. package/dist/cli/commands/list.d.ts.map +1 -0
  64. package/dist/cli/commands/list.js +77 -0
  65. package/dist/cli/commands/list.js.map +1 -0
  66. package/dist/cli/commands/lockspec.d.ts +11 -0
  67. package/dist/cli/commands/lockspec.d.ts.map +1 -0
  68. package/dist/cli/commands/lockspec.js +179 -0
  69. package/dist/cli/commands/lockspec.js.map +1 -0
  70. package/dist/cli/commands/marketplace.d.ts +7 -0
  71. package/dist/cli/commands/marketplace.d.ts.map +1 -0
  72. package/dist/cli/commands/marketplace.js +417 -0
  73. package/dist/cli/commands/marketplace.js.map +1 -0
  74. package/dist/cli/commands/method.d.ts +7 -0
  75. package/dist/cli/commands/method.d.ts.map +1 -0
  76. package/dist/cli/commands/method.js +140 -0
  77. package/dist/cli/commands/method.js.map +1 -0
  78. package/dist/cli/commands/mine.d.ts +11 -0
  79. package/dist/cli/commands/mine.d.ts.map +1 -0
  80. package/dist/cli/commands/mine.js +254 -0
  81. package/dist/cli/commands/mine.js.map +1 -0
  82. package/dist/cli/commands/recall.d.ts +11 -0
  83. package/dist/cli/commands/recall.d.ts.map +1 -0
  84. package/dist/cli/commands/recall.js +201 -0
  85. package/dist/cli/commands/recall.js.map +1 -0
  86. package/dist/cli/commands/rule.d.ts +11 -0
  87. package/dist/cli/commands/rule.d.ts.map +1 -0
  88. package/dist/cli/commands/rule.js +230 -0
  89. package/dist/cli/commands/rule.js.map +1 -0
  90. package/dist/cli/commands/search.d.ts +6 -0
  91. package/dist/cli/commands/search.d.ts.map +1 -0
  92. package/dist/cli/commands/search.js +173 -0
  93. package/dist/cli/commands/search.js.map +1 -0
  94. package/dist/cli/commands/show.d.ts +6 -0
  95. package/dist/cli/commands/show.d.ts.map +1 -0
  96. package/dist/cli/commands/show.js +150 -0
  97. package/dist/cli/commands/show.js.map +1 -0
  98. package/dist/cli/commands/submit.d.ts +15 -0
  99. package/dist/cli/commands/submit.d.ts.map +1 -0
  100. package/dist/cli/commands/submit.js +151 -0
  101. package/dist/cli/commands/submit.js.map +1 -0
  102. package/dist/cli/commands/suggest.d.ts +11 -0
  103. package/dist/cli/commands/suggest.d.ts.map +1 -0
  104. package/dist/cli/commands/suggest.js +164 -0
  105. package/dist/cli/commands/suggest.js.map +1 -0
  106. package/dist/cli/commands/track.d.ts +11 -0
  107. package/dist/cli/commands/track.d.ts.map +1 -0
  108. package/dist/cli/commands/track.js +199 -0
  109. package/dist/cli/commands/track.js.map +1 -0
  110. package/dist/cli/commands/trigger.d.ts +11 -0
  111. package/dist/cli/commands/trigger.d.ts.map +1 -0
  112. package/dist/cli/commands/trigger.js +157 -0
  113. package/dist/cli/commands/trigger.js.map +1 -0
  114. package/dist/cli/commands/utils-commands.d.ts +9 -0
  115. package/dist/cli/commands/utils-commands.d.ts.map +1 -0
  116. package/dist/cli/commands/utils-commands.js +389 -0
  117. package/dist/cli/commands/utils-commands.js.map +1 -0
  118. package/dist/cli/commands/validate.d.ts +6 -0
  119. package/dist/cli/commands/validate.d.ts.map +1 -0
  120. package/dist/cli/commands/validate.js +40 -0
  121. package/dist/cli/commands/validate.js.map +1 -0
  122. package/dist/cli/index.d.ts +3 -0
  123. package/dist/cli/index.d.ts.map +1 -1
  124. package/dist/cli/index.js +84 -2743
  125. package/dist/cli/index.js.map +1 -1
  126. package/dist/core/audit.d.ts +24 -0
  127. package/dist/core/audit.d.ts.map +1 -0
  128. package/dist/core/audit.js +195 -0
  129. package/dist/core/audit.js.map +1 -0
  130. package/dist/core/index.d.ts +6 -0
  131. package/dist/core/index.d.ts.map +1 -1
  132. package/dist/core/index.js +6 -0
  133. package/dist/core/index.js.map +1 -1
  134. package/dist/core/scanner-rules.d.ts +58 -0
  135. package/dist/core/scanner-rules.d.ts.map +1 -0
  136. package/dist/core/scanner-rules.js +335 -0
  137. package/dist/core/scanner-rules.js.map +1 -0
  138. package/dist/core/suggest.d.ts +51 -0
  139. package/dist/core/suggest.d.ts.map +1 -0
  140. package/dist/core/suggest.js +241 -0
  141. package/dist/core/suggest.js.map +1 -0
  142. package/package.json +1 -1
@@ -0,0 +1,205 @@
1
+ /**
2
+ * Craft Command
3
+ * Enhanced skill scaffolding with optional directories
4
+ * (SkillKit calls this "create" — we call it "craft")
5
+ */
6
+ import chalk from 'chalk';
7
+ import * as p from '@clack/prompts';
8
+ import { mkdir, writeFile } from 'fs/promises';
9
+ import { existsSync } from 'fs';
10
+ import { join, resolve } from 'path';
11
+ /**
12
+ * Register the craft command with commander
13
+ */
14
+ export function registerCraftCommand(program) {
15
+ program
16
+ .command('craft <name>')
17
+ .description('Craft a new skill with full structure')
18
+ .option('-f, --full', 'Include all optional directories (scripts, references, assets)')
19
+ .option('-s, --scripts', 'Include scripts/ directory with templates')
20
+ .option('-r, --references', 'Include references/ directory')
21
+ .option('-a, --assets', 'Include assets/ directory')
22
+ .option('-d, --dir <path>', 'Parent directory to create skill in', '.')
23
+ .action(async (name, options) => {
24
+ try {
25
+ await craftCommand(name, options);
26
+ }
27
+ catch (err) {
28
+ console.error(chalk.red('Error:'), err.message);
29
+ process.exit(1);
30
+ }
31
+ });
32
+ }
33
+ /**
34
+ * Run the craft command
35
+ */
36
+ async function craftCommand(name, options) {
37
+ const baseDir = resolve(options.dir || '.');
38
+ const skillDir = join(baseDir, name);
39
+ // Check if directory already exists
40
+ if (existsSync(skillDir)) {
41
+ console.error(chalk.red(`Error: Directory "${name}" already exists`));
42
+ process.exit(1);
43
+ }
44
+ const spinner = p.spinner();
45
+ spinner.start(`Crafting skill "${name}"...`);
46
+ // Create main skill directory
47
+ await mkdir(skillDir, { recursive: true });
48
+ // Create SKILL.md with comprehensive template
49
+ const skillMd = generateSkillTemplate(name);
50
+ await writeFile(join(skillDir, 'SKILL.md'), skillMd);
51
+ // Create optional directories
52
+ const includeScripts = options.full || options.scripts;
53
+ const includeReferences = options.full || options.references;
54
+ const includeAssets = options.full || options.assets;
55
+ if (includeScripts) {
56
+ const scriptsDir = join(skillDir, 'scripts');
57
+ await mkdir(scriptsDir, { recursive: true });
58
+ // Create setup script template
59
+ await writeFile(join(scriptsDir, 'setup.sh'), generateSetupScript(name));
60
+ // Create test script template
61
+ await writeFile(join(scriptsDir, 'test.sh'), generateTestScript(name));
62
+ // Create run script template
63
+ await writeFile(join(scriptsDir, 'run.sh'), generateRunScript(name));
64
+ }
65
+ if (includeReferences) {
66
+ const refsDir = join(skillDir, 'references');
67
+ await mkdir(refsDir, { recursive: true });
68
+ await writeFile(join(refsDir, 'README.md'), `# References for ${name}\n\nAdd reference documents, examples, and documentation here.\n`);
69
+ }
70
+ if (includeAssets) {
71
+ const assetsDir = join(skillDir, 'assets');
72
+ await mkdir(assetsDir, { recursive: true });
73
+ await writeFile(join(assetsDir, '.gitkeep'), '');
74
+ }
75
+ // Create .gitignore
76
+ await writeFile(join(skillDir, '.gitignore'), `node_modules/\n.env\n*.log\n`);
77
+ spinner.stop(`Skill "${name}" crafted successfully!`);
78
+ console.log('');
79
+ // Show created structure
80
+ console.log(chalk.bold('📁 Created structure:'));
81
+ console.log(` ${chalk.cyan(name)}/`);
82
+ console.log(` ├── ${chalk.green('SKILL.md')} ${chalk.dim('← Main skill file')}`);
83
+ console.log(` ├── ${chalk.dim('.gitignore')}`);
84
+ if (includeScripts) {
85
+ console.log(` ├── ${chalk.yellow('scripts/')}`);
86
+ console.log(` │ ├── setup.sh ${chalk.dim('← Environment setup')}`);
87
+ console.log(` │ ├── test.sh ${chalk.dim('← Test runner')}`);
88
+ console.log(` │ └── run.sh ${chalk.dim('← Main execution')}`);
89
+ }
90
+ if (includeReferences) {
91
+ console.log(` ├── ${chalk.blue('references/')}`);
92
+ console.log(` │ └── README.md`);
93
+ }
94
+ if (includeAssets) {
95
+ console.log(` └── ${chalk.magenta('assets/')}`);
96
+ console.log(` └── .gitkeep`);
97
+ }
98
+ console.log('');
99
+ console.log(chalk.dim('Next steps:'));
100
+ console.log(chalk.dim(` 1. Edit ${name}/SKILL.md to add your skill content`));
101
+ console.log(chalk.dim(` 2. Run ${chalk.white(`skills validate ${name}`)} to check format`));
102
+ console.log(chalk.dim(` 3. Run ${chalk.white(`skills audit ${name}`)} for security scan`));
103
+ console.log(chalk.dim(` 4. Run ${chalk.white(`skills submit ${name}`)} to publish`));
104
+ console.log('');
105
+ }
106
+ function generateSkillTemplate(name) {
107
+ const displayName = name
108
+ .split('-')
109
+ .map(w => w.charAt(0).toUpperCase() + w.slice(1))
110
+ .join(' ');
111
+ return `---
112
+ name: ${displayName}
113
+ description: A brief description of what this skill does
114
+ version: 1.0.0
115
+ tags:
116
+ - coding
117
+ - best-practices
118
+ globs:
119
+ - "**/*.ts"
120
+ - "**/*.js"
121
+ ---
122
+
123
+ # ${displayName}
124
+
125
+ ## Overview
126
+
127
+ Describe what this skill teaches the AI agent. Be specific and actionable.
128
+
129
+ ## Guidelines
130
+
131
+ ### Rule 1: [Name]
132
+
133
+ Explain the first guideline clearly.
134
+
135
+ **Do:**
136
+ \`\`\`typescript
137
+ // Good example
138
+ const result = await fetchData();
139
+ \`\`\`
140
+
141
+ **Don't:**
142
+ \`\`\`typescript
143
+ // Bad example
144
+ const result = fetchData(); // Missing await
145
+ \`\`\`
146
+
147
+ ### Rule 2: [Name]
148
+
149
+ Explain the second guideline.
150
+
151
+ ## Examples
152
+
153
+ Provide concrete examples of the skill in action.
154
+
155
+ ## References
156
+
157
+ - [Link to docs](https://example.com)
158
+ - [Related resource](https://example.com)
159
+ `;
160
+ }
161
+ function generateSetupScript(name) {
162
+ return `#!/bin/bash
163
+ # Setup script for ${name}
164
+ # This runs when the skill is first installed
165
+
166
+ echo "Setting up ${name}..."
167
+
168
+ # Add your setup logic here
169
+ # Examples:
170
+ # - Install dependencies
171
+ # - Check prerequisites
172
+ # - Configure environment
173
+
174
+ echo "Setup complete!"
175
+ `;
176
+ }
177
+ function generateTestScript(name) {
178
+ return `#!/bin/bash
179
+ # Test script for ${name}
180
+ # Validates the skill works correctly
181
+
182
+ echo "Testing ${name}..."
183
+
184
+ # Add your test logic here
185
+ # Examples:
186
+ # - Validate SKILL.md format
187
+ # - Check file structure
188
+ # - Run integration tests
189
+
190
+ echo "All tests passed!"
191
+ `;
192
+ }
193
+ function generateRunScript(name) {
194
+ return `#!/bin/bash
195
+ # Run script for ${name}
196
+ # Main execution logic
197
+
198
+ echo "Running ${name}..."
199
+
200
+ # Add your execution logic here
201
+
202
+ echo "Done!"
203
+ `;
204
+ }
205
+ //# sourceMappingURL=craft.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"craft.js","sourceRoot":"","sources":["../../../src/cli/commands/craft.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * `skills export` command — Export skills to different AI agent formats
3
+ *
4
+ * Follows the Agent Skills spec: .agentname/skills/skillname/SKILL.md
5
+ * Supports all 42+ agents defined in agents.ts
6
+ */
7
+ import { Command } from 'commander';
8
+ export declare function registerExportCommand(program: Command): void;
9
+ //# sourceMappingURL=export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/export.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,QAiHrD"}
@@ -0,0 +1,103 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import { discoverSkills, loadSkill } from '../../core/index.js';
4
+ import { AGENTS } from '../agents.js';
5
+ export function registerExportCommand(program) {
6
+ // Build the list of valid agent names from AGENTS config
7
+ const agentNames = Object.keys(AGENTS);
8
+ program
9
+ .command('export')
10
+ .description('Export skills to different AI agent formats')
11
+ .option('-t, --target <agent>', `Target agent: ${agentNames.slice(0, 5).join(', ')}, ... or 'all' (default: all)`, 'all')
12
+ .option('-d, --directory <dir>', 'Project directory', '.')
13
+ .option('-n, --name <name>', 'Export specific skill only')
14
+ .option('--list-agents', 'List all available agent targets')
15
+ .action(async (options) => {
16
+ try {
17
+ const { mkdir, writeFile, cp } = await import('fs/promises');
18
+ const { join } = await import('path');
19
+ const { existsSync } = await import('fs');
20
+ // --list-agents: show all available targets
21
+ if (options.listAgents) {
22
+ console.log(chalk.bold('\n🤖 Available agent targets:\n'));
23
+ for (const [key, config] of Object.entries(AGENTS)) {
24
+ console.log(` ${chalk.cyan(key.padEnd(20))} ${chalk.gray(config.displayName)} → ${chalk.dim(config.projectDir)}`);
25
+ }
26
+ console.log(chalk.dim(`\n Total: ${agentNames.length} agents`));
27
+ console.log(chalk.dim(` Use: skills export -t <agent-name>\n`));
28
+ return;
29
+ }
30
+ // Discover skills
31
+ let skills = await discoverSkills();
32
+ if (skills.length === 0) {
33
+ console.log(chalk.yellow('No skills found to export.'));
34
+ return;
35
+ }
36
+ // Filter if specific skill requested
37
+ if (options.name) {
38
+ skills = skills.filter(s => s.name === options.name);
39
+ if (skills.length === 0) {
40
+ console.error(chalk.red(`Skill not found: ${options.name}`));
41
+ process.exit(1);
42
+ }
43
+ }
44
+ // Determine targets
45
+ let targets;
46
+ if (options.target === 'all') {
47
+ targets = agentNames;
48
+ }
49
+ else {
50
+ // Support comma-separated: -t cursor,claude,copilot
51
+ targets = options.target.split(',').map((t) => t.trim());
52
+ for (const t of targets) {
53
+ if (!AGENTS[t]) {
54
+ console.error(chalk.red(`Unknown agent: ${t}`));
55
+ console.log(chalk.dim(`Run 'skills export --list-agents' to see all available agents`));
56
+ process.exit(1);
57
+ }
58
+ }
59
+ }
60
+ console.log(chalk.bold(`\nExporting ${skills.length} skill(s) to ${targets.length} agent(s)...\n`));
61
+ let successCount = 0;
62
+ for (const target of targets) {
63
+ const spinner = ora(`Exporting for ${target}...`).start();
64
+ try {
65
+ const config = AGENTS[target];
66
+ const skillsDir = join(options.directory, config.projectDir);
67
+ // Export each skill to: .agentname/skills/skillname/SKILL.md
68
+ for (const skillRef of skills) {
69
+ const skill = await loadSkill(skillRef.path);
70
+ if (!skill)
71
+ continue;
72
+ const skillDir = join(skillsDir, skillRef.name);
73
+ await mkdir(skillDir, { recursive: true });
74
+ // Write SKILL.md with frontmatter
75
+ const content = `---\nname: ${skill.metadata.name}\ndescription: ${skill.metadata.description}\n---\n\n${skill.body}\n`;
76
+ await writeFile(join(skillDir, 'SKILL.md'), content);
77
+ // Copy optional directories (scripts/, references/, assets/) if they exist
78
+ const optionalDirs = ['scripts', 'references', 'assets'];
79
+ for (const dir of optionalDirs) {
80
+ const sourcePath = join(skillRef.path, dir);
81
+ if (existsSync(sourcePath)) {
82
+ const destPath = join(skillDir, dir);
83
+ await mkdir(destPath, { recursive: true });
84
+ await cp(sourcePath, destPath, { recursive: true });
85
+ }
86
+ }
87
+ }
88
+ spinner.succeed(`${config.displayName}: ${config.projectDir}/<skill>/SKILL.md`);
89
+ successCount++;
90
+ }
91
+ catch (err) {
92
+ spinner.fail(`${target}: ${err.message}`);
93
+ }
94
+ }
95
+ console.log(chalk.bold.green(`\n✨ Export complete! (${successCount}/${targets.length} agents)\n`));
96
+ }
97
+ catch (error) {
98
+ console.error(chalk.red('Error exporting skills:'), error);
99
+ process.exit(1);
100
+ }
101
+ });
102
+ }
103
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../../src/cli/commands/export.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IAClD,yDAAyD;IACzD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEvC,OAAO;SACF,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,6CAA6C,CAAC;SAC1D,MAAM,CACH,sBAAsB,EACtB,iBAAiB,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,+BAA+B,EACjF,KAAK,CACR;SACA,MAAM,CAAC,uBAAuB,EAAE,mBAAmB,EAAE,GAAG,CAAC;SACzD,MAAM,CAAC,mBAAmB,EAAE,4BAA4B,CAAC;SACzD,MAAM,CAAC,eAAe,EAAE,kCAAkC,CAAC;SAC3D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACtB,IAAI,CAAC;YACD,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YAC7D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YACtC,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YAE1C,4CAA4C;YAC5C,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC,CAAC;gBAC3D,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBACjD,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;gBACvH,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,UAAU,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC;gBACjE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC,CAAC;gBACjE,OAAO;YACX,CAAC;YAED,kBAAkB;YAClB,IAAI,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;YAEpC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC,CAAC;gBACxD,OAAO;YACX,CAAC;YAED,qCAAqC;YACrC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACf,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;gBACrD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;oBAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpB,CAAC;YACL,CAAC;YAED,oBAAoB;YACpB,IAAI,OAAiB,CAAC;YACtB,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC3B,OAAO,GAAG,UAAU,CAAC;YACzB,CAAC;iBAAM,CAAC;gBACJ,oDAAoD;gBACpD,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBACjE,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;oBACtB,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;wBACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC;wBAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC,CAAC;wBACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACpB,CAAC;gBACL,CAAC;YACL,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,MAAM,gBAAgB,OAAO,CAAC,MAAM,gBAAgB,CAAC,CAAC,CAAC;YAEpG,IAAI,YAAY,GAAG,CAAC,CAAC;YAErB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC3B,MAAM,OAAO,GAAG,GAAG,CAAC,iBAAiB,MAAM,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;gBAE1D,IAAI,CAAC;oBACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;oBAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;oBAE7D,6DAA6D;oBAC7D,KAAK,MAAM,QAAQ,IAAI,MAAM,EAAE,CAAC;wBAC5B,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;wBAC7C,IAAI,CAAC,KAAK;4BAAE,SAAS;wBAErB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;wBAChD,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;wBAE3C,kCAAkC;wBAClC,MAAM,OAAO,GAAG,cAAc,KAAK,CAAC,QAAQ,CAAC,IAAI,kBAAkB,KAAK,CAAC,QAAQ,CAAC,WAAW,YAAY,KAAK,CAAC,IAAI,IAAI,CAAC;wBACxH,MAAM,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;wBAErD,2EAA2E;wBAC3E,MAAM,YAAY,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;wBACzD,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;4BAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;4BAC5C,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gCACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;gCACrC,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gCAC3C,MAAM,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;4BACxD,CAAC;wBACL,CAAC;oBACL,CAAC;oBAED,OAAO,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,WAAW,KAAK,MAAM,CAAC,UAAU,mBAAmB,CAAC,CAAC;oBAChF,YAAY,EAAE,CAAC;gBACnB,CAAC;gBAAC,OAAO,GAAQ,EAAE,CAAC;oBAChB,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC9C,CAAC;YACL,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,yBAAyB,YAAY,IAAI,OAAO,CAAC,MAAM,YAAY,CAAC,CAAC,CAAC;QACvG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAAE,KAAK,CAAC,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Forge Command
3
+ * AI-powered skill generation from natural language descriptions
4
+ * (SkillKit calls this "ai generate" — we call it "forge")
5
+ */
6
+ import { Command } from 'commander';
7
+ /**
8
+ * Register the forge command
9
+ */
10
+ export declare function registerForgeCommand(program: Command): void;
11
+ //# sourceMappingURL=forge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forge.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/forge.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiB3D"}
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Forge Command
3
+ * AI-powered skill generation from natural language descriptions
4
+ * (SkillKit calls this "ai generate" — we call it "forge")
5
+ */
6
+ import chalk from 'chalk';
7
+ import ora from 'ora';
8
+ import { writeFile, mkdir } from 'fs/promises';
9
+ import { existsSync } from 'fs';
10
+ import { resolve, join } from 'path';
11
+ /**
12
+ * Register the forge command
13
+ */
14
+ export function registerForgeCommand(program) {
15
+ program
16
+ .command('forge <description>')
17
+ .alias('fg')
18
+ .description('AI-generate a skill from a natural language description')
19
+ .option('-o, --output <dir>', 'Output directory', '.')
20
+ .option('-a, --agent <agent>', 'Target agent format')
21
+ .option('-m, --model <model>', 'AI model to use (default: built-in)')
22
+ .option('-n, --dry-run', 'Preview generated content without saving')
23
+ .action(async (description, options) => {
24
+ try {
25
+ await forgeCommand(description, options);
26
+ }
27
+ catch (err) {
28
+ console.error(chalk.red('Error:'), err.message);
29
+ process.exit(1);
30
+ }
31
+ });
32
+ }
33
+ async function forgeCommand(description, options) {
34
+ const spinner = ora('Forging skill from description...').start();
35
+ // Extract key concepts from description
36
+ const concepts = extractConcepts(description);
37
+ const skillName = generateSkillName(description);
38
+ spinner.text = 'Generating skill content...';
39
+ // Generate skill content using template-based approach
40
+ const content = generateSkillContent(skillName, description, concepts);
41
+ spinner.succeed('Skill forged!');
42
+ console.log('');
43
+ if (options.dryRun) {
44
+ console.log(chalk.bold('📄 Preview:'));
45
+ console.log(chalk.dim('─'.repeat(60)));
46
+ console.log(content);
47
+ console.log(chalk.dim('─'.repeat(60)));
48
+ console.log('');
49
+ console.log(chalk.yellow('🏃 Dry run — skill was NOT saved'));
50
+ return;
51
+ }
52
+ // Save the skill
53
+ const outputDir = resolve(options.output || '.');
54
+ const skillDir = join(outputDir, skillName);
55
+ if (existsSync(skillDir)) {
56
+ console.error(chalk.red(`Directory already exists: ${skillDir}`));
57
+ process.exit(1);
58
+ }
59
+ await mkdir(skillDir, { recursive: true });
60
+ await writeFile(join(skillDir, 'SKILL.md'), content);
61
+ console.log(chalk.green(`✨ Skill created: ${chalk.cyan(skillDir)}`));
62
+ console.log('');
63
+ console.log(chalk.dim('Next steps:'));
64
+ console.log(chalk.dim(` 1. Review and edit ${skillDir}/SKILL.md`));
65
+ console.log(chalk.dim(` 2. Run ${chalk.white(`skills validate ${skillDir}`)}`));
66
+ console.log(chalk.dim(` 3. Run ${chalk.white(`skills audit ${skillDir}`)}`));
67
+ console.log('');
68
+ }
69
+ function extractConcepts(description) {
70
+ const words = description.toLowerCase().split(/\s+/);
71
+ const stopWords = new Set(['a', 'an', 'the', 'is', 'are', 'was', 'were', 'be', 'been', 'being',
72
+ 'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would', 'could', 'should',
73
+ 'for', 'and', 'nor', 'but', 'or', 'yet', 'so', 'in', 'on', 'at', 'to', 'of',
74
+ 'with', 'by', 'from', 'up', 'about', 'into', 'through', 'that', 'this', 'it',
75
+ 'how', 'what', 'when', 'where', 'who', 'which', 'why', 'skill', 'create', 'make',
76
+ 'build', 'write', 'generate', 'agent', 'ai']);
77
+ return words
78
+ .filter(w => w.length > 2 && !stopWords.has(w))
79
+ .filter((w, i, arr) => arr.indexOf(w) === i)
80
+ .slice(0, 10);
81
+ }
82
+ function generateSkillName(description) {
83
+ const concepts = extractConcepts(description);
84
+ const name = concepts.slice(0, 3).join('-');
85
+ return name || 'forged-skill';
86
+ }
87
+ function generateSkillContent(name, description, concepts) {
88
+ const displayName = name.split('-').map(w => w.charAt(0).toUpperCase() + w.slice(1)).join(' ');
89
+ const tags = concepts.slice(0, 5).map(c => ` - ${c}`).join('\n');
90
+ return `---
91
+ name: ${name}
92
+ description: ${description}
93
+ version: 1.0.0
94
+ tags:
95
+ ${tags}
96
+ ---
97
+
98
+ # ${displayName}
99
+
100
+ ## Overview
101
+
102
+ ${description}
103
+
104
+ ## Guidelines
105
+
106
+ ### Best Practices
107
+
108
+ When working with ${concepts.slice(0, 3).join(', ')}:
109
+
110
+ 1. **Follow established patterns** — Use conventions already present in the codebase
111
+ 2. **Write clear code** — Prefer readability over cleverness
112
+ 3. **Handle errors** — Always handle error cases and edge conditions
113
+ 4. **Add documentation** — Document non-obvious decisions and complex logic
114
+ 5. **Test thoroughly** — Write tests for both happy path and error scenarios
115
+
116
+ ### Do's
117
+
118
+ \`\`\`
119
+ ✓ Follow single responsibility principle
120
+ ✓ Use descriptive naming
121
+ ✓ Handle edge cases
122
+ ✓ Write meaningful commit messages
123
+ ✓ Keep functions focused and small
124
+ \`\`\`
125
+
126
+ ### Don'ts
127
+
128
+ \`\`\`
129
+ ✗ Leave TODO comments without tracking issues
130
+ ✗ Use magic numbers without constants
131
+ ✗ Skip error handling
132
+ ✗ Write overly complex one-liners
133
+ ✗ Ignore accessibility requirements
134
+ \`\`\`
135
+
136
+ ## Examples
137
+
138
+ ### Example 1: Standard Implementation
139
+
140
+ Follow the project's existing patterns and conventions when implementing new features related to ${concepts[0] || 'this domain'}.
141
+
142
+ ### Example 2: Error Handling
143
+
144
+ Always wrap operations in proper error handling and provide meaningful error messages.
145
+
146
+ ## References
147
+
148
+ - Review existing codebase patterns for consistency
149
+ - Follow the project's contributing guidelines
150
+ `;
151
+ }
152
+ //# sourceMappingURL=forge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forge.js","sourceRoot":"","sources":["../../../src/cli/commands/forge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Grid Command
3
+ * P2P skill mesh — discover and share skills on the local network
4
+ * (SkillKit calls this "mesh" — we call it "grid")
5
+ */
6
+ import { Command } from 'commander';
7
+ /**
8
+ * Register the grid command
9
+ */
10
+ export declare function registerGridCommand(program: Command): void;
11
+ //# sourceMappingURL=grid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/grid.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBpC;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4C1D"}