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.
- package/README.md +18 -17
- package/dist/cli/agents.d.ts +10 -0
- package/dist/cli/agents.d.ts.map +1 -0
- package/dist/cli/agents.js +270 -0
- package/dist/cli/agents.js.map +1 -0
- package/dist/cli/commands/audit.d.ts +11 -0
- package/dist/cli/commands/audit.d.ts.map +1 -0
- package/dist/cli/commands/audit.js +168 -0
- package/dist/cli/commands/audit.js.map +1 -0
- package/dist/cli/commands/blueprint.d.ts +11 -0
- package/dist/cli/commands/blueprint.d.ts.map +1 -0
- package/dist/cli/commands/blueprint.js +210 -0
- package/dist/cli/commands/blueprint.js.map +1 -0
- package/dist/cli/commands/bootstrap.d.ts +11 -0
- package/dist/cli/commands/bootstrap.d.ts.map +1 -0
- package/dist/cli/commands/bootstrap.js +267 -0
- package/dist/cli/commands/bootstrap.js.map +1 -0
- package/dist/cli/commands/capture.d.ts +11 -0
- package/dist/cli/commands/capture.d.ts.map +1 -0
- package/dist/cli/commands/capture.js +109 -0
- package/dist/cli/commands/capture.js.map +1 -0
- package/dist/cli/commands/ci.d.ts +11 -0
- package/dist/cli/commands/ci.d.ts.map +1 -0
- package/dist/cli/commands/ci.js +144 -0
- package/dist/cli/commands/ci.js.map +1 -0
- package/dist/cli/commands/collab.d.ts +11 -0
- package/dist/cli/commands/collab.d.ts.map +1 -0
- package/dist/cli/commands/collab.js +196 -0
- package/dist/cli/commands/collab.js.map +1 -0
- package/dist/cli/commands/convert.d.ts +11 -0
- package/dist/cli/commands/convert.d.ts.map +1 -0
- package/dist/cli/commands/convert.js +219 -0
- package/dist/cli/commands/convert.js.map +1 -0
- package/dist/cli/commands/craft.d.ts +18 -0
- package/dist/cli/commands/craft.d.ts.map +1 -0
- package/dist/cli/commands/craft.js +205 -0
- package/dist/cli/commands/craft.js.map +1 -0
- package/dist/cli/commands/export.d.ts +9 -0
- package/dist/cli/commands/export.d.ts.map +1 -0
- package/dist/cli/commands/export.js +103 -0
- package/dist/cli/commands/export.js.map +1 -0
- package/dist/cli/commands/forge.d.ts +11 -0
- package/dist/cli/commands/forge.d.ts.map +1 -0
- package/dist/cli/commands/forge.js +152 -0
- package/dist/cli/commands/forge.js.map +1 -0
- package/dist/cli/commands/grid.d.ts +11 -0
- package/dist/cli/commands/grid.d.ts.map +1 -0
- package/dist/cli/commands/grid.js +217 -0
- package/dist/cli/commands/grid.js.map +1 -0
- package/dist/cli/commands/insight.d.ts +7 -0
- package/dist/cli/commands/insight.d.ts.map +1 -0
- package/dist/cli/commands/insight.js +71 -0
- package/dist/cli/commands/insight.js.map +1 -0
- package/dist/cli/commands/install.d.ts +6 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +359 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/interactive.d.ts +7 -0
- package/dist/cli/commands/interactive.d.ts.map +1 -0
- package/dist/cli/commands/interactive.js +535 -0
- package/dist/cli/commands/interactive.js.map +1 -0
- package/dist/cli/commands/list.d.ts +6 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +77 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/lockspec.d.ts +11 -0
- package/dist/cli/commands/lockspec.d.ts.map +1 -0
- package/dist/cli/commands/lockspec.js +179 -0
- package/dist/cli/commands/lockspec.js.map +1 -0
- package/dist/cli/commands/marketplace.d.ts +7 -0
- package/dist/cli/commands/marketplace.d.ts.map +1 -0
- package/dist/cli/commands/marketplace.js +417 -0
- package/dist/cli/commands/marketplace.js.map +1 -0
- package/dist/cli/commands/method.d.ts +7 -0
- package/dist/cli/commands/method.d.ts.map +1 -0
- package/dist/cli/commands/method.js +140 -0
- package/dist/cli/commands/method.js.map +1 -0
- package/dist/cli/commands/mine.d.ts +11 -0
- package/dist/cli/commands/mine.d.ts.map +1 -0
- package/dist/cli/commands/mine.js +254 -0
- package/dist/cli/commands/mine.js.map +1 -0
- package/dist/cli/commands/recall.d.ts +11 -0
- package/dist/cli/commands/recall.d.ts.map +1 -0
- package/dist/cli/commands/recall.js +201 -0
- package/dist/cli/commands/recall.js.map +1 -0
- package/dist/cli/commands/rule.d.ts +11 -0
- package/dist/cli/commands/rule.d.ts.map +1 -0
- package/dist/cli/commands/rule.js +230 -0
- package/dist/cli/commands/rule.js.map +1 -0
- package/dist/cli/commands/search.d.ts +6 -0
- package/dist/cli/commands/search.d.ts.map +1 -0
- package/dist/cli/commands/search.js +173 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/show.d.ts +6 -0
- package/dist/cli/commands/show.d.ts.map +1 -0
- package/dist/cli/commands/show.js +150 -0
- package/dist/cli/commands/show.js.map +1 -0
- package/dist/cli/commands/submit.d.ts +15 -0
- package/dist/cli/commands/submit.d.ts.map +1 -0
- package/dist/cli/commands/submit.js +151 -0
- package/dist/cli/commands/submit.js.map +1 -0
- package/dist/cli/commands/suggest.d.ts +11 -0
- package/dist/cli/commands/suggest.d.ts.map +1 -0
- package/dist/cli/commands/suggest.js +164 -0
- package/dist/cli/commands/suggest.js.map +1 -0
- package/dist/cli/commands/track.d.ts +11 -0
- package/dist/cli/commands/track.d.ts.map +1 -0
- package/dist/cli/commands/track.js +199 -0
- package/dist/cli/commands/track.js.map +1 -0
- package/dist/cli/commands/trigger.d.ts +11 -0
- package/dist/cli/commands/trigger.d.ts.map +1 -0
- package/dist/cli/commands/trigger.js +157 -0
- package/dist/cli/commands/trigger.js.map +1 -0
- package/dist/cli/commands/utils-commands.d.ts +9 -0
- package/dist/cli/commands/utils-commands.d.ts.map +1 -0
- package/dist/cli/commands/utils-commands.js +389 -0
- package/dist/cli/commands/utils-commands.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +6 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +40 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +84 -2743
- package/dist/cli/index.js.map +1 -1
- package/dist/core/audit.d.ts +24 -0
- package/dist/core/audit.d.ts.map +1 -0
- package/dist/core/audit.js +195 -0
- package/dist/core/audit.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/scanner-rules.d.ts +58 -0
- package/dist/core/scanner-rules.d.ts.map +1 -0
- package/dist/core/scanner-rules.js +335 -0
- package/dist/core/scanner-rules.js.map +1 -0
- package/dist/core/suggest.d.ts +51 -0
- package/dist/core/suggest.d.ts.map +1 -0
- package/dist/core/suggest.js +241 -0
- package/dist/core/suggest.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { listMarketplaceSkills, searchSkills, uninstallSkill, getInstalledSkills, listMarketplaces, addMarketplace, checkUpdates, installFromGitHubUrl, getSkillByScoped, getSkillBaseUrl, fetchAssetManifest, getAssetUrl, fetchAsset, fetchSkillsForCLI, } from '../../core/index.js';
|
|
4
|
+
export function registerMarketplaceCommands(program) {
|
|
5
|
+
// ============================================
|
|
6
|
+
// ASSETS COMMAND - On-demand asset fetching
|
|
7
|
+
// ============================================
|
|
8
|
+
program
|
|
9
|
+
.command('assets <skill-name>')
|
|
10
|
+
.description('List and fetch assets for a skill on-demand from GitHub')
|
|
11
|
+
.option('-l, --list', 'List available assets')
|
|
12
|
+
.option('-m, --manifest', 'Show asset manifest if available')
|
|
13
|
+
.option('-g, --get <path>', 'Fetch and display specific asset content')
|
|
14
|
+
.option('--json', 'Output in JSON format')
|
|
15
|
+
.action(async (skillName, options) => {
|
|
16
|
+
try {
|
|
17
|
+
const spinner = ora('Fetching skill info...').start();
|
|
18
|
+
// Fetch skill from database
|
|
19
|
+
const skill = await getSkillByScoped(skillName);
|
|
20
|
+
if (!skill) {
|
|
21
|
+
spinner.fail(`Skill not found: ${skillName}`);
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
if (!skill.raw_url) {
|
|
25
|
+
spinner.fail('Skill has no raw_url - cannot fetch assets');
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
const baseUrl = getSkillBaseUrl(skill.raw_url);
|
|
29
|
+
spinner.succeed(`Found skill: ${skill.scoped_name || skill.name}`);
|
|
30
|
+
if (options.manifest) {
|
|
31
|
+
// Show asset manifest
|
|
32
|
+
const manifestSpinner = ora('Fetching manifest...').start();
|
|
33
|
+
const manifest = await fetchAssetManifest(baseUrl);
|
|
34
|
+
if (!manifest) {
|
|
35
|
+
manifestSpinner.fail('No asset manifest found (index.jsonl)');
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
manifestSpinner.succeed(`Found ${manifest.length} components`);
|
|
39
|
+
if (options.json) {
|
|
40
|
+
console.log(JSON.stringify(manifest, null, 2));
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
console.log('');
|
|
44
|
+
// Group by category
|
|
45
|
+
const byCategory = new Map();
|
|
46
|
+
for (const entry of manifest) {
|
|
47
|
+
const cat = entry.category || 'other';
|
|
48
|
+
if (!byCategory.has(cat))
|
|
49
|
+
byCategory.set(cat, []);
|
|
50
|
+
byCategory.get(cat).push(entry);
|
|
51
|
+
}
|
|
52
|
+
for (const [category, entries] of byCategory) {
|
|
53
|
+
console.log(chalk.bold.cyan(`\n${category}:`));
|
|
54
|
+
for (const entry of entries.slice(0, 5)) {
|
|
55
|
+
console.log(chalk.white(` ${entry.id}`));
|
|
56
|
+
if (entry.name)
|
|
57
|
+
console.log(chalk.gray(` ${entry.name}`));
|
|
58
|
+
}
|
|
59
|
+
if (entries.length > 5) {
|
|
60
|
+
console.log(chalk.gray(` ... and ${entries.length - 5} more`));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else if (options.get) {
|
|
66
|
+
// Fetch specific asset
|
|
67
|
+
const assetPath = options.get;
|
|
68
|
+
const assetUrl = getAssetUrl(baseUrl, assetPath);
|
|
69
|
+
const fetchSpinner = ora(`Fetching ${assetPath}...`).start();
|
|
70
|
+
const content = await fetchAsset(assetUrl);
|
|
71
|
+
if (!content) {
|
|
72
|
+
fetchSpinner.fail(`Asset not found: ${assetPath}`);
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
fetchSpinner.succeed(`Fetched ${content.length} chars`);
|
|
76
|
+
console.log('');
|
|
77
|
+
console.log(content);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
// Default: show info about assets
|
|
81
|
+
console.log(chalk.gray(`\nBase URL: ${baseUrl}`));
|
|
82
|
+
console.log('');
|
|
83
|
+
console.log(chalk.bold('Usage:'));
|
|
84
|
+
console.log(chalk.gray(` skills assets "${skillName}" --manifest`));
|
|
85
|
+
console.log(chalk.gray(' Show component manifest'));
|
|
86
|
+
console.log('');
|
|
87
|
+
console.log(chalk.gray(` skills assets "${skillName}" --get "assets/code/v3/html/buttons/primary.html"`));
|
|
88
|
+
console.log(chalk.gray(' Fetch specific asset content'));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
console.error(chalk.red('Error:'), error);
|
|
93
|
+
process.exit(1);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
// ============================================
|
|
97
|
+
// MARKETPLACE COMMANDS
|
|
98
|
+
// ============================================
|
|
99
|
+
// Market list - list skills from SkillsMP (40k+ skills)
|
|
100
|
+
program
|
|
101
|
+
.command('market-list')
|
|
102
|
+
.alias('ml')
|
|
103
|
+
.description('List skills from SkillsMP marketplace (40k+ skills)')
|
|
104
|
+
.option('-l, --limit <number>', 'Number of skills to show', '50')
|
|
105
|
+
.option('-p, --page <number>', 'Page number', '1')
|
|
106
|
+
.option('--legacy', 'Use legacy GitHub sources instead of SkillsMP')
|
|
107
|
+
.action(async (options) => {
|
|
108
|
+
try {
|
|
109
|
+
if (options.legacy) {
|
|
110
|
+
// Legacy mode: fetch from configured GitHub sources
|
|
111
|
+
console.log(chalk.bold('\nFetching skills from GitHub sources...\n'));
|
|
112
|
+
const skills = await listMarketplaceSkills();
|
|
113
|
+
if (skills.length === 0) {
|
|
114
|
+
console.log(chalk.yellow('No skills found.'));
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const bySource = new Map();
|
|
118
|
+
for (const skill of skills) {
|
|
119
|
+
const sourceId = skill.source.id;
|
|
120
|
+
if (!bySource.has(sourceId)) {
|
|
121
|
+
bySource.set(sourceId, []);
|
|
122
|
+
}
|
|
123
|
+
bySource.get(sourceId).push(skill);
|
|
124
|
+
}
|
|
125
|
+
for (const [sourceId, sourceSkills] of bySource) {
|
|
126
|
+
const source = sourceSkills[0].source;
|
|
127
|
+
console.log(chalk.bold.cyan(`\n📦 ${source.name}`));
|
|
128
|
+
console.log(chalk.gray(` ${source.owner}/${source.repo}`));
|
|
129
|
+
if (source.verified) {
|
|
130
|
+
console.log(chalk.green(' ✓ Verified'));
|
|
131
|
+
}
|
|
132
|
+
console.log('');
|
|
133
|
+
for (const skill of sourceSkills) {
|
|
134
|
+
console.log(chalk.white(` ${skill.name}`));
|
|
135
|
+
if (skill.description) {
|
|
136
|
+
const desc = skill.description.length > 60
|
|
137
|
+
? skill.description.slice(0, 60) + '...'
|
|
138
|
+
: skill.description;
|
|
139
|
+
console.log(chalk.gray(` ${desc}`));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
console.log(chalk.gray(`\nTotal: ${skills.length} skills from ${bySource.size} sources`));
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
// Database mode (primary): fetch from our API
|
|
147
|
+
console.log(chalk.bold('\n🌐 Skills Marketplace\n'));
|
|
148
|
+
const limit = parseInt(options.limit) || 50;
|
|
149
|
+
const page = parseInt(options.page) || 1;
|
|
150
|
+
let result;
|
|
151
|
+
try {
|
|
152
|
+
result = await fetchSkillsForCLI({ limit, page, sortBy: 'stars' });
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
console.log(chalk.gray('Falling back to GitHub sources...'));
|
|
156
|
+
const skills = await listMarketplaceSkills();
|
|
157
|
+
result = { skills: skills.slice(0, limit), total: skills.length, hasNext: false };
|
|
158
|
+
}
|
|
159
|
+
console.log(chalk.gray(`Showing ${result.skills.length} of ${result.total.toLocaleString()} skills (page ${page})\n`));
|
|
160
|
+
for (const skill of result.skills) {
|
|
161
|
+
const stars = skill.stars ? chalk.yellow(`⭐${skill.stars.toLocaleString()}`) : '';
|
|
162
|
+
console.log(chalk.white(` ${skill.name} ${stars}`));
|
|
163
|
+
if (skill.description) {
|
|
164
|
+
const desc = skill.description.length > 55
|
|
165
|
+
? skill.description.slice(0, 55) + '...'
|
|
166
|
+
: skill.description;
|
|
167
|
+
console.log(chalk.gray(` ${desc}`));
|
|
168
|
+
}
|
|
169
|
+
console.log(chalk.dim(` by ${skill.author || 'unknown'}`));
|
|
170
|
+
}
|
|
171
|
+
console.log(chalk.gray(`\nTotal: ${result.total.toLocaleString()} skills`));
|
|
172
|
+
if (result.hasNext) {
|
|
173
|
+
console.log(chalk.gray(`Next page: skills market-list --page ${page + 1}`));
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
console.log(chalk.gray('\nUse: skills (interactive) to install\n'));
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
console.error(chalk.red('Error:'), error);
|
|
180
|
+
process.exit(1);
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
// Market search - search skills
|
|
184
|
+
program
|
|
185
|
+
.command('market-search <query>')
|
|
186
|
+
.alias('ms')
|
|
187
|
+
.description('Search skills in the marketplace')
|
|
188
|
+
.option('-l, --limit <number>', 'Number of results', '20')
|
|
189
|
+
.action(async (query, options) => {
|
|
190
|
+
try {
|
|
191
|
+
console.log(chalk.bold(`\n🔍 Searching for "${query}"...\n`));
|
|
192
|
+
const limit = parseInt(options.limit) || 20;
|
|
193
|
+
let result = null;
|
|
194
|
+
// Try database first, fallback to GitHub
|
|
195
|
+
try {
|
|
196
|
+
result = await fetchSkillsForCLI({ search: query, limit, sortBy: 'stars' });
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
// Fallback to GitHub-based search
|
|
200
|
+
console.log(chalk.gray('Falling back to GitHub sources...'));
|
|
201
|
+
const skills = await searchSkills(query);
|
|
202
|
+
result = { skills: skills.slice(0, limit), total: skills.length };
|
|
203
|
+
}
|
|
204
|
+
if (!result || result.skills.length === 0) {
|
|
205
|
+
console.log(chalk.yellow(`No skills found matching "${query}"`));
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
console.log(chalk.gray(`Found ${result.total.toLocaleString()} skills (showing top ${result.skills.length}):\n`));
|
|
209
|
+
for (const skill of result.skills) {
|
|
210
|
+
const stars = skill.stars ? chalk.yellow(`⭐${skill.stars.toLocaleString()}`) : '';
|
|
211
|
+
console.log(chalk.cyan(` ${skill.name} ${stars}`));
|
|
212
|
+
console.log(chalk.gray(` ${skill.description?.slice(0, 70)}${(skill.description?.length || 0) > 70 ? '...' : ''}`));
|
|
213
|
+
console.log(chalk.dim(` by ${skill.author || 'unknown'}`));
|
|
214
|
+
console.log('');
|
|
215
|
+
}
|
|
216
|
+
console.log(chalk.gray('Use: skills (interactive) to install\n'));
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
console.error(chalk.red('Error searching skills:'), error);
|
|
220
|
+
process.exit(1);
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
// Alias for backward compatibility
|
|
224
|
+
program
|
|
225
|
+
.command('market-install <name>')
|
|
226
|
+
.alias('mi')
|
|
227
|
+
.description('Install a skill (alias for: skills install)')
|
|
228
|
+
.action(async (name) => {
|
|
229
|
+
console.log(chalk.gray('Tip: Use `skills install <id-or-name>` directly\n'));
|
|
230
|
+
const { execSync } = await import('child_process');
|
|
231
|
+
try {
|
|
232
|
+
execSync(`"${process.argv[0]}" "${process.argv[1]}" install "${name}"`, { stdio: 'inherit' });
|
|
233
|
+
}
|
|
234
|
+
catch { }
|
|
235
|
+
});
|
|
236
|
+
// Install from URL
|
|
237
|
+
program
|
|
238
|
+
.command('install-url <url>')
|
|
239
|
+
.alias('iu')
|
|
240
|
+
.description('Install a skill from GitHub URL or SkillsMP page URL')
|
|
241
|
+
.action(async (url) => {
|
|
242
|
+
try {
|
|
243
|
+
let githubUrl = url;
|
|
244
|
+
// Convert SkillsMP URL to GitHub URL
|
|
245
|
+
if (url.includes('skillsmp.com/skills/')) {
|
|
246
|
+
console.log(chalk.bold(`\n📦 Fetching skill info from SkillsMP...`));
|
|
247
|
+
const skillId = url.split('/skills/').pop()?.replace(/\/$/, '');
|
|
248
|
+
const response = await fetch(`https://skillsmp.com/api/skills/${skillId}`);
|
|
249
|
+
if (!response.ok) {
|
|
250
|
+
throw new Error('Could not find skill on SkillsMP');
|
|
251
|
+
}
|
|
252
|
+
const data = await response.json();
|
|
253
|
+
githubUrl = data.skill.githubUrl;
|
|
254
|
+
console.log(chalk.gray(`Found: ${data.skill.name} by ${data.skill.author}\n`));
|
|
255
|
+
}
|
|
256
|
+
// Validate GitHub URL
|
|
257
|
+
if (!githubUrl.includes('github.com')) {
|
|
258
|
+
console.log(chalk.red('Invalid URL. Please provide a GitHub URL or SkillsMP skill page URL.'));
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
console.log(chalk.gray(`Installing from: ${githubUrl}\n`));
|
|
262
|
+
const homedir = (await import('os')).homedir();
|
|
263
|
+
const skillsDir = `${homedir}/.antigravity/skills`;
|
|
264
|
+
const installed = await installFromGitHubUrl(githubUrl, skillsDir);
|
|
265
|
+
console.log(chalk.green(`✓ Successfully installed: ${installed.name}`));
|
|
266
|
+
console.log(chalk.gray(` Path: ${installed.path}`));
|
|
267
|
+
console.log('');
|
|
268
|
+
}
|
|
269
|
+
catch (error) {
|
|
270
|
+
console.error(chalk.red('Error installing skill:'), error.message || error);
|
|
271
|
+
process.exit(1);
|
|
272
|
+
}
|
|
273
|
+
});
|
|
274
|
+
// Market uninstall
|
|
275
|
+
program
|
|
276
|
+
.command('market-uninstall <name>')
|
|
277
|
+
.alias('mu')
|
|
278
|
+
.description('Uninstall a marketplace-installed skill')
|
|
279
|
+
.action(async (name) => {
|
|
280
|
+
try {
|
|
281
|
+
await uninstallSkill(name);
|
|
282
|
+
console.log(chalk.green(`✓ Uninstalled: ${name}`));
|
|
283
|
+
}
|
|
284
|
+
catch (error) {
|
|
285
|
+
console.error(chalk.red('Error uninstalling skill:'), error);
|
|
286
|
+
process.exit(1);
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
// Market installed
|
|
290
|
+
program
|
|
291
|
+
.command('market-installed')
|
|
292
|
+
.alias('mind')
|
|
293
|
+
.description('List skills installed from marketplaces')
|
|
294
|
+
.action(async () => {
|
|
295
|
+
try {
|
|
296
|
+
const installed = await getInstalledSkills();
|
|
297
|
+
if (installed.length === 0) {
|
|
298
|
+
console.log(chalk.yellow('\nNo marketplace skills installed.'));
|
|
299
|
+
console.log(chalk.gray('Use: skills market-install <name> to install\n'));
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
console.log(chalk.bold(`\nInstalled marketplace skills:\n`));
|
|
303
|
+
for (const skill of installed) {
|
|
304
|
+
console.log(chalk.cyan(` ${skill.name}`));
|
|
305
|
+
console.log(chalk.gray(` Path: ${skill.localPath}`));
|
|
306
|
+
if (skill.source) {
|
|
307
|
+
console.log(chalk.gray(` Source: ${skill.source.name}`));
|
|
308
|
+
}
|
|
309
|
+
if (skill.version) {
|
|
310
|
+
console.log(chalk.gray(` Version: ${skill.version}`));
|
|
311
|
+
}
|
|
312
|
+
console.log(chalk.gray(` Installed: ${skill.installedAt}`));
|
|
313
|
+
console.log('');
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
catch (error) {
|
|
317
|
+
console.error(chalk.red('Error listing installed skills:'), error);
|
|
318
|
+
process.exit(1);
|
|
319
|
+
}
|
|
320
|
+
});
|
|
321
|
+
// Market sources
|
|
322
|
+
program
|
|
323
|
+
.command('market-sources')
|
|
324
|
+
.description('List registered marketplace sources')
|
|
325
|
+
.action(async () => {
|
|
326
|
+
try {
|
|
327
|
+
// Show SkillsMP as primary
|
|
328
|
+
console.log(chalk.bold('\n🌐 Primary Marketplace:\n'));
|
|
329
|
+
console.log(chalk.cyan(` SkillsMP`) + chalk.green(' ✓'));
|
|
330
|
+
console.log(chalk.gray(` URL: https://skillsmp.com`));
|
|
331
|
+
console.log(chalk.gray(` Skills: 40,000+`));
|
|
332
|
+
console.log(chalk.gray(` The largest Agent Skills marketplace`));
|
|
333
|
+
console.log('');
|
|
334
|
+
// Show legacy sources
|
|
335
|
+
const sources = await listMarketplaces();
|
|
336
|
+
if (sources.length > 0) {
|
|
337
|
+
console.log(chalk.bold('Legacy GitHub Sources:\n'));
|
|
338
|
+
for (const source of sources) {
|
|
339
|
+
const verified = source.verified ? chalk.green(' ✓') : '';
|
|
340
|
+
console.log(chalk.cyan(` ${source.name}${verified}`));
|
|
341
|
+
console.log(chalk.gray(` ID: ${source.id}`));
|
|
342
|
+
console.log(chalk.gray(` Repo: ${source.owner}/${source.repo}`));
|
|
343
|
+
if (source.description) {
|
|
344
|
+
console.log(chalk.gray(` ${source.description}`));
|
|
345
|
+
}
|
|
346
|
+
console.log('');
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
catch (error) {
|
|
351
|
+
console.error(chalk.red('Error listing sources:'), error);
|
|
352
|
+
process.exit(1);
|
|
353
|
+
}
|
|
354
|
+
});
|
|
355
|
+
// Market add-source
|
|
356
|
+
program
|
|
357
|
+
.command('market-add-source')
|
|
358
|
+
.description('Add a custom marketplace source')
|
|
359
|
+
.requiredOption('--id <id>', 'Unique identifier')
|
|
360
|
+
.requiredOption('--name <name>', 'Display name')
|
|
361
|
+
.requiredOption('--owner <owner>', 'GitHub owner')
|
|
362
|
+
.requiredOption('--repo <repo>', 'GitHub repository')
|
|
363
|
+
.option('--branch <branch>', 'Branch name', 'main')
|
|
364
|
+
.option('--path <path>', 'Path to skills directory', 'skills')
|
|
365
|
+
.action(async (options) => {
|
|
366
|
+
try {
|
|
367
|
+
await addMarketplace({
|
|
368
|
+
id: options.id,
|
|
369
|
+
name: options.name,
|
|
370
|
+
owner: options.owner,
|
|
371
|
+
repo: options.repo,
|
|
372
|
+
branch: options.branch,
|
|
373
|
+
skillsPath: options.path,
|
|
374
|
+
verified: false
|
|
375
|
+
});
|
|
376
|
+
console.log(chalk.green(`✓ Added marketplace: ${options.name}`));
|
|
377
|
+
}
|
|
378
|
+
catch (error) {
|
|
379
|
+
console.error(chalk.red('Error adding marketplace:'), error);
|
|
380
|
+
process.exit(1);
|
|
381
|
+
}
|
|
382
|
+
});
|
|
383
|
+
// Market update-check
|
|
384
|
+
program
|
|
385
|
+
.command('market-update-check')
|
|
386
|
+
.alias('muc')
|
|
387
|
+
.description('Check for updates to installed skills')
|
|
388
|
+
.action(async () => {
|
|
389
|
+
try {
|
|
390
|
+
console.log(chalk.bold('\nChecking for updates...\n'));
|
|
391
|
+
const updates = await checkUpdates();
|
|
392
|
+
if (updates.length === 0) {
|
|
393
|
+
console.log(chalk.yellow('No installed marketplace skills to check.'));
|
|
394
|
+
return;
|
|
395
|
+
}
|
|
396
|
+
const hasUpdates = updates.filter(u => u.hasUpdate);
|
|
397
|
+
if (hasUpdates.length === 0) {
|
|
398
|
+
console.log(chalk.green('All skills are up to date! ✓'));
|
|
399
|
+
}
|
|
400
|
+
else {
|
|
401
|
+
console.log(chalk.yellow(`${hasUpdates.length} skill(s) have updates available:\n`));
|
|
402
|
+
for (const update of hasUpdates) {
|
|
403
|
+
console.log(chalk.cyan(` ${update.skill.name}`));
|
|
404
|
+
console.log(chalk.gray(` Current: ${update.currentVersion || 'unknown'}`));
|
|
405
|
+
console.log(chalk.green(` Latest: ${update.latestVersion}`));
|
|
406
|
+
console.log('');
|
|
407
|
+
}
|
|
408
|
+
console.log(chalk.gray('To update, uninstall and reinstall the skill.'));
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
catch (error) {
|
|
412
|
+
console.error(chalk.red('Error checking updates:'), error);
|
|
413
|
+
process.exit(1);
|
|
414
|
+
}
|
|
415
|
+
});
|
|
416
|
+
}
|
|
417
|
+
//# sourceMappingURL=marketplace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marketplace.js","sourceRoot":"","sources":["../../../src/cli/commands/marketplace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"method.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/method.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqEpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkD5D"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Method Command
|
|
3
|
+
* Methodology packs — apply development methodologies as skills
|
|
4
|
+
*/
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import { writeFile, mkdir } from 'fs/promises';
|
|
7
|
+
import { resolve, join } from 'path';
|
|
8
|
+
const PACKS = {
|
|
9
|
+
tdd: {
|
|
10
|
+
name: 'Test-Driven Development',
|
|
11
|
+
description: 'Write tests first, then implement',
|
|
12
|
+
rules: [
|
|
13
|
+
'1. Write a failing test before writing any production code',
|
|
14
|
+
'2. Write only enough test code to make it fail',
|
|
15
|
+
'3. Write only enough production code to pass the test',
|
|
16
|
+
'4. Refactor while keeping all tests green',
|
|
17
|
+
'5. Repeat the red-green-refactor cycle',
|
|
18
|
+
],
|
|
19
|
+
},
|
|
20
|
+
ddd: {
|
|
21
|
+
name: 'Domain-Driven Design',
|
|
22
|
+
description: 'Model software around business domains',
|
|
23
|
+
rules: [
|
|
24
|
+
'1. Use ubiquitous language from the domain',
|
|
25
|
+
'2. Separate domain logic from infrastructure',
|
|
26
|
+
'3. Define bounded contexts clearly',
|
|
27
|
+
'4. Use aggregates to enforce invariants',
|
|
28
|
+
'5. Communicate between contexts via events',
|
|
29
|
+
],
|
|
30
|
+
},
|
|
31
|
+
clean: {
|
|
32
|
+
name: 'Clean Architecture',
|
|
33
|
+
description: 'Separate concerns into concentric layers',
|
|
34
|
+
rules: [
|
|
35
|
+
'1. Dependencies point inward only',
|
|
36
|
+
'2. Entities contain business rules',
|
|
37
|
+
'3. Use cases orchestrate entity interactions',
|
|
38
|
+
'4. Adapters translate between layers',
|
|
39
|
+
'5. Frameworks are outer-layer details',
|
|
40
|
+
],
|
|
41
|
+
},
|
|
42
|
+
solid: {
|
|
43
|
+
name: 'SOLID Principles',
|
|
44
|
+
description: 'Five object-oriented design principles',
|
|
45
|
+
rules: [
|
|
46
|
+
'1. Single Responsibility: one class, one reason to change',
|
|
47
|
+
'2. Open/Closed: open for extension, closed for modification',
|
|
48
|
+
'3. Liskov Substitution: subtypes must be substitutable',
|
|
49
|
+
'4. Interface Segregation: prefer small, focused interfaces',
|
|
50
|
+
'5. Dependency Inversion: depend on abstractions, not concretions',
|
|
51
|
+
],
|
|
52
|
+
},
|
|
53
|
+
trunk: {
|
|
54
|
+
name: 'Trunk-Based Development',
|
|
55
|
+
description: 'Short-lived branches merged frequently',
|
|
56
|
+
rules: [
|
|
57
|
+
'1. Main branch is always deployable',
|
|
58
|
+
'2. Feature branches live max 1-2 days',
|
|
59
|
+
'3. Use feature flags for incomplete work',
|
|
60
|
+
'4. Review code before merging',
|
|
61
|
+
'5. Deploy from trunk continuously',
|
|
62
|
+
],
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
export function registerMethodCommand(program) {
|
|
66
|
+
const method = program
|
|
67
|
+
.command('method')
|
|
68
|
+
.alias('mt')
|
|
69
|
+
.description('Apply development methodology packs');
|
|
70
|
+
method.command('list')
|
|
71
|
+
.description('List available methodology packs')
|
|
72
|
+
.action(() => {
|
|
73
|
+
console.log('');
|
|
74
|
+
console.log(chalk.bold('📚 Methodology Packs'));
|
|
75
|
+
console.log('');
|
|
76
|
+
for (const [key, pack] of Object.entries(PACKS)) {
|
|
77
|
+
console.log(` ${chalk.cyan(key.padEnd(10))} ${pack.name} — ${chalk.dim(pack.description)}`);
|
|
78
|
+
}
|
|
79
|
+
console.log('');
|
|
80
|
+
console.log(chalk.dim(' Apply: skills method apply <name>'));
|
|
81
|
+
console.log('');
|
|
82
|
+
});
|
|
83
|
+
method.command('show <name>')
|
|
84
|
+
.description('Show methodology details')
|
|
85
|
+
.action((name) => {
|
|
86
|
+
const pack = PACKS[name.toLowerCase()];
|
|
87
|
+
if (!pack) {
|
|
88
|
+
console.error(chalk.red(`Unknown method: ${name}`));
|
|
89
|
+
console.log(chalk.dim(`Available: ${Object.keys(PACKS).join(', ')}`));
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
console.log('');
|
|
93
|
+
console.log(chalk.bold(`📖 ${pack.name}`));
|
|
94
|
+
console.log(chalk.dim(` ${pack.description}`));
|
|
95
|
+
console.log('');
|
|
96
|
+
for (const rule of pack.rules) {
|
|
97
|
+
console.log(` ${rule}`);
|
|
98
|
+
}
|
|
99
|
+
console.log('');
|
|
100
|
+
});
|
|
101
|
+
method.command('apply <name>')
|
|
102
|
+
.description('Apply a methodology as a skill')
|
|
103
|
+
.option('-o, --output <dir>', 'Output directory', '.')
|
|
104
|
+
.action(async (name, options) => {
|
|
105
|
+
try {
|
|
106
|
+
await methodApply(name, options.output);
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
console.error(chalk.red('Error:'), err.message);
|
|
110
|
+
process.exit(1);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
async function methodApply(name, outputDir) {
|
|
115
|
+
const pack = PACKS[name.toLowerCase()];
|
|
116
|
+
if (!pack) {
|
|
117
|
+
console.error(chalk.red(`Unknown method: ${name}`));
|
|
118
|
+
console.log(chalk.dim(`Available: ${Object.keys(PACKS).join(', ')}`));
|
|
119
|
+
process.exit(1);
|
|
120
|
+
}
|
|
121
|
+
const skillDir = join(resolve(outputDir), `method-${name}`);
|
|
122
|
+
await mkdir(skillDir, { recursive: true });
|
|
123
|
+
const content = `---
|
|
124
|
+
name: method-${name}
|
|
125
|
+
description: ${pack.name} methodology
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
# ${pack.name}
|
|
129
|
+
|
|
130
|
+
${pack.description}
|
|
131
|
+
|
|
132
|
+
## Rules
|
|
133
|
+
|
|
134
|
+
${pack.rules.map(r => `- ${r}`).join('\n')}
|
|
135
|
+
`;
|
|
136
|
+
await writeFile(join(skillDir, 'SKILL.md'), content);
|
|
137
|
+
console.log(chalk.green(`✨ Applied ${pack.name} as skill`));
|
|
138
|
+
console.log(` ${chalk.dim('Location:')} ${chalk.cyan(skillDir)}`);
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=method.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"method.js","sourceRoot":"","sources":["../../../src/cli/commands/method.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mine Command
|
|
3
|
+
* Extract patterns and conventions from git history
|
|
4
|
+
* (SkillKit calls this "learn" — we call it "mine")
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
/**
|
|
8
|
+
* Register the mine command
|
|
9
|
+
*/
|
|
10
|
+
export declare function registerMineCommand(program: Command): void;
|
|
11
|
+
//# sourceMappingURL=mine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mine.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/mine.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgB1D"}
|