@open-skills-hub/cli 1.0.0

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 (57) hide show
  1. package/dist/commands/cache.d.ts +6 -0
  2. package/dist/commands/cache.d.ts.map +1 -0
  3. package/dist/commands/cache.js +145 -0
  4. package/dist/commands/cache.js.map +1 -0
  5. package/dist/commands/config.d.ts +6 -0
  6. package/dist/commands/config.d.ts.map +1 -0
  7. package/dist/commands/config.js +128 -0
  8. package/dist/commands/config.js.map +1 -0
  9. package/dist/commands/create.d.ts +7 -0
  10. package/dist/commands/create.d.ts.map +1 -0
  11. package/dist/commands/create.js +449 -0
  12. package/dist/commands/create.js.map +1 -0
  13. package/dist/commands/feedback.d.ts +6 -0
  14. package/dist/commands/feedback.d.ts.map +1 -0
  15. package/dist/commands/feedback.js +137 -0
  16. package/dist/commands/feedback.js.map +1 -0
  17. package/dist/commands/get.d.ts +6 -0
  18. package/dist/commands/get.d.ts.map +1 -0
  19. package/dist/commands/get.js +122 -0
  20. package/dist/commands/get.js.map +1 -0
  21. package/dist/commands/index.d.ts +13 -0
  22. package/dist/commands/index.d.ts.map +1 -0
  23. package/dist/commands/index.js +13 -0
  24. package/dist/commands/index.js.map +1 -0
  25. package/dist/commands/publish.d.ts +7 -0
  26. package/dist/commands/publish.d.ts.map +1 -0
  27. package/dist/commands/publish.js +593 -0
  28. package/dist/commands/publish.js.map +1 -0
  29. package/dist/commands/scan.d.ts +6 -0
  30. package/dist/commands/scan.d.ts.map +1 -0
  31. package/dist/commands/scan.js +165 -0
  32. package/dist/commands/scan.js.map +1 -0
  33. package/dist/commands/search.d.ts +6 -0
  34. package/dist/commands/search.d.ts.map +1 -0
  35. package/dist/commands/search.js +80 -0
  36. package/dist/commands/search.js.map +1 -0
  37. package/dist/commands/validate.d.ts +7 -0
  38. package/dist/commands/validate.d.ts.map +1 -0
  39. package/dist/commands/validate.js +328 -0
  40. package/dist/commands/validate.js.map +1 -0
  41. package/dist/index.d.ts +6 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +107 -0
  44. package/dist/index.js.map +1 -0
  45. package/package.json +51 -0
  46. package/src/commands/cache.ts +166 -0
  47. package/src/commands/config.ts +142 -0
  48. package/src/commands/create.ts +490 -0
  49. package/src/commands/feedback.ts +161 -0
  50. package/src/commands/get.ts +141 -0
  51. package/src/commands/index.ts +13 -0
  52. package/src/commands/publish.ts +688 -0
  53. package/src/commands/scan.ts +190 -0
  54. package/src/commands/search.ts +92 -0
  55. package/src/commands/validate.ts +391 -0
  56. package/src/index.ts +118 -0
  57. package/tsconfig.json +13 -0
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Open Skills Hub CLI - Scan Command
3
+ */
4
+ import { Command } from 'commander';
5
+ import chalk from 'chalk';
6
+ import ora from 'ora';
7
+ import * as fs from 'fs';
8
+ import * as path from 'path';
9
+ import Table from 'cli-table3';
10
+ import { getConfig, initScanner, getScanner, } from '@open-skills-hub/core';
11
+ export const scanCommand = new Command('scan')
12
+ .description('Scan content for security issues')
13
+ .argument('<file>', 'Path to file to scan')
14
+ .option('--json', 'Output as JSON')
15
+ .option('-q, --quick', 'Quick check (high severity only)')
16
+ .option('--rules', 'Show available rules')
17
+ .action(async (file, options) => {
18
+ // Show rules if requested
19
+ if (options.rules) {
20
+ const config = getConfig();
21
+ initScanner({
22
+ enabled: true,
23
+ timeout: 30000,
24
+ maxFileSize: 10485760,
25
+ });
26
+ const scanner = getScanner();
27
+ const rules = scanner.getEnabledRules();
28
+ console.log(chalk.bold('\nAvailable Security Rules:\n'));
29
+ const table = new Table({
30
+ head: [
31
+ chalk.cyan('ID'),
32
+ chalk.cyan('Name'),
33
+ chalk.cyan('Category'),
34
+ chalk.cyan('Severity'),
35
+ ],
36
+ colWidths: [10, 30, 12, 10],
37
+ });
38
+ for (const rule of rules) {
39
+ const severityColor = {
40
+ high: chalk.red,
41
+ medium: chalk.yellow,
42
+ low: chalk.blue,
43
+ }[rule.severity] ?? chalk.white;
44
+ table.push([
45
+ rule.id,
46
+ rule.name,
47
+ rule.category,
48
+ severityColor(rule.severity),
49
+ ]);
50
+ }
51
+ console.log(table.toString());
52
+ console.log(chalk.gray(`\nTotal: ${rules.length} rules`));
53
+ return;
54
+ }
55
+ const spinner = ora('Scanning file...').start();
56
+ try {
57
+ // Read file
58
+ const filePath = path.resolve(file);
59
+ if (!fs.existsSync(filePath)) {
60
+ spinner.fail(`File not found: ${filePath}`);
61
+ process.exit(1);
62
+ }
63
+ const content = fs.readFileSync(filePath, 'utf-8');
64
+ // Initialize scanner
65
+ const config = getConfig();
66
+ initScanner({
67
+ enabled: true,
68
+ timeout: config.get().scanner.timeout,
69
+ maxFileSize: config.get().scanner.maxFileSize,
70
+ });
71
+ const scanner = getScanner();
72
+ let result;
73
+ if (options.quick) {
74
+ // Quick check
75
+ const quickResult = await scanner.quickCheck(content);
76
+ spinner.stop();
77
+ if (quickResult.safe) {
78
+ console.log(chalk.green('\n✓ No high-severity issues found'));
79
+ }
80
+ else {
81
+ console.log(chalk.red(`\n✗ Found ${quickResult.highSeverityCount} high-severity issue(s)`));
82
+ console.log(chalk.yellow(` Security level: ${quickResult.level}`));
83
+ }
84
+ process.exit(quickResult.safe ? 0 : 1);
85
+ }
86
+ // Full scan
87
+ result = await scanner.scan(content);
88
+ spinner.stop();
89
+ // JSON output
90
+ if (options.json) {
91
+ console.log(JSON.stringify({
92
+ score: result.summary.score,
93
+ level: result.summary.level,
94
+ issueCount: result.summary.issueCount,
95
+ issues: result.issues,
96
+ recommendations: result.summary.recommendations,
97
+ }, null, 2));
98
+ return;
99
+ }
100
+ // Display results
101
+ console.log('\n' + chalk.bold.blue('═'.repeat(60)));
102
+ console.log(chalk.bold.white(' Security Scan Results'));
103
+ console.log(chalk.bold.blue('═'.repeat(60)) + '\n');
104
+ // Score and level
105
+ const levelColor = {
106
+ safe: chalk.green,
107
+ low: chalk.blue,
108
+ medium: chalk.yellow,
109
+ high: chalk.red,
110
+ }[result.summary.level] ?? chalk.white;
111
+ console.log(`${chalk.bold('Score:')} ${result.summary.score}/100`);
112
+ console.log(`${chalk.bold('Level:')} ${levelColor(result.summary.level.toUpperCase())}`);
113
+ console.log(`${chalk.bold('File:')} ${filePath}`);
114
+ console.log();
115
+ // Issue counts
116
+ console.log(chalk.bold('Issues:'));
117
+ console.log(` ${chalk.red('●')} High: ${result.summary.issueCount.high}`);
118
+ console.log(` ${chalk.yellow('●')} Medium: ${result.summary.issueCount.medium}`);
119
+ console.log(` ${chalk.blue('●')} Low: ${result.summary.issueCount.low}`);
120
+ console.log();
121
+ // Issue details
122
+ if (result.issues.length > 0) {
123
+ console.log(chalk.bold('Issue Details:\n'));
124
+ for (const issue of result.issues) {
125
+ const severityColor = {
126
+ high: chalk.red,
127
+ medium: chalk.yellow,
128
+ low: chalk.blue,
129
+ }[issue.severity] ?? chalk.white;
130
+ console.log(severityColor(`[${issue.severity.toUpperCase()}]`) + ` ${chalk.bold(issue.ruleName)} (${issue.ruleId})`);
131
+ console.log(chalk.gray(` Line ${issue.line}: `) + issue.content);
132
+ console.log(chalk.gray(` ${issue.message}`));
133
+ if (issue.suggestion) {
134
+ console.log(chalk.cyan(` 💡 ${issue.suggestion}`));
135
+ }
136
+ console.log();
137
+ }
138
+ }
139
+ // Recommendations
140
+ if (result.summary.recommendations.length > 0) {
141
+ console.log(chalk.bold('Recommendations:\n'));
142
+ for (const rec of result.summary.recommendations) {
143
+ console.log(` • ${rec}`);
144
+ }
145
+ console.log();
146
+ }
147
+ // Summary
148
+ console.log(chalk.bold.blue('─'.repeat(60)));
149
+ if (result.summary.level === 'safe') {
150
+ console.log(chalk.green.bold('✓ Content passed security scan'));
151
+ }
152
+ else if (result.summary.level === 'high') {
153
+ console.log(chalk.red.bold('✗ Content has high-risk security issues'));
154
+ process.exit(1);
155
+ }
156
+ else {
157
+ console.log(chalk.yellow.bold('⚠ Content has some security concerns'));
158
+ }
159
+ }
160
+ catch (error) {
161
+ spinner.fail('Scan failed');
162
+ throw error;
163
+ }
164
+ });
165
+ //# sourceMappingURL=scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Open Skills Hub CLI - Search Command
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare const searchCommand: Command;
6
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,aAAa,SAiFtB,CAAC"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Open Skills Hub CLI - Search Command
3
+ */
4
+ import { Command } from 'commander';
5
+ import chalk from 'chalk';
6
+ import ora from 'ora';
7
+ import Table from 'cli-table3';
8
+ import { getStorage } from '@open-skills-hub/core';
9
+ export const searchCommand = new Command('search')
10
+ .description('Search for skills')
11
+ .argument('[query]', 'Search query')
12
+ .option('-c, --category <category>', 'Filter by category')
13
+ .option('-a, --author <author>', 'Filter by author')
14
+ .option('-s, --sort <sort>', 'Sort by: relevance, uses, updated, created, name', 'relevance')
15
+ .option('-o, --order <order>', 'Sort order: asc, desc', 'desc')
16
+ .option('-l, --limit <limit>', 'Number of results', '20')
17
+ .option('--json', 'Output as JSON')
18
+ .action(async (query, options) => {
19
+ const spinner = ora('Searching skills...').start();
20
+ try {
21
+ const storage = await getStorage();
22
+ await storage.initialize();
23
+ const result = await storage.searchSkills({
24
+ query,
25
+ category: options.category,
26
+ author: options.author,
27
+ sort: options.sort,
28
+ order: options.order,
29
+ limit: parseInt(options.limit, 10),
30
+ });
31
+ spinner.stop();
32
+ if (options.json) {
33
+ console.log(JSON.stringify(result, null, 2));
34
+ return;
35
+ }
36
+ if (result.items.length === 0) {
37
+ console.log(chalk.yellow('\nNo skills found matching your query.'));
38
+ console.log(chalk.gray('Try a different search term or browse by category.'));
39
+ return;
40
+ }
41
+ console.log(chalk.bold(`\nFound ${result.pagination.total} skills:\n`));
42
+ const table = new Table({
43
+ head: [
44
+ chalk.cyan('Name'),
45
+ chalk.cyan('Description'),
46
+ chalk.cyan('Version'),
47
+ chalk.cyan('Security'),
48
+ chalk.cyan('Uses'),
49
+ ],
50
+ colWidths: [25, 40, 10, 10, 10],
51
+ wordWrap: true,
52
+ });
53
+ for (const skill of result.items) {
54
+ const securityColor = {
55
+ safe: chalk.green,
56
+ low: chalk.blue,
57
+ medium: chalk.yellow,
58
+ high: chalk.red,
59
+ }[skill.securityLevel ?? 'safe'] ?? chalk.white;
60
+ table.push([
61
+ chalk.bold(skill.fullName),
62
+ skill.description.substring(0, 80) + (skill.description.length > 80 ? '...' : ''),
63
+ skill.latestVersion,
64
+ securityColor(skill.securityLevel ?? 'unknown'),
65
+ skill.stats.totalUses.toString(),
66
+ ]);
67
+ }
68
+ console.log(table.toString());
69
+ if (result.pagination.hasMore) {
70
+ console.log(chalk.gray(`\nShowing ${result.items.length} of ${result.pagination.total} results.`));
71
+ console.log(chalk.gray('Use --limit to see more results.'));
72
+ }
73
+ await storage.close();
74
+ }
75
+ catch (error) {
76
+ spinner.fail('Search failed');
77
+ throw error;
78
+ }
79
+ });
80
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Open Skills Hub CLI - Validate Command
3
+ * Validates skill file or directory structure
4
+ */
5
+ import { Command } from 'commander';
6
+ export declare const validateCommand: Command;
7
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsRpC,eAAO,MAAM,eAAe,SA2GxB,CAAC"}
@@ -0,0 +1,328 @@
1
+ /**
2
+ * Open Skills Hub CLI - Validate Command
3
+ * Validates skill file or directory structure
4
+ */
5
+ import { Command } from 'commander';
6
+ import chalk from 'chalk';
7
+ import * as fs from 'fs';
8
+ import * as path from 'path';
9
+ import { parse as parseYaml } from 'yaml';
10
+ import { isValidSkillName } from '@open-skills-hub/core';
11
+ function parseFrontmatter(content) {
12
+ const match = content.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);
13
+ if (!match || !match[1]) {
14
+ return null;
15
+ }
16
+ try {
17
+ const frontmatter = parseYaml(match[1]);
18
+ return {
19
+ frontmatter,
20
+ markdown: match[2]?.trim() || '',
21
+ };
22
+ }
23
+ catch {
24
+ return null;
25
+ }
26
+ }
27
+ function formatSize(bytes) {
28
+ if (bytes < 1024)
29
+ return `${bytes} B`;
30
+ if (bytes < 1024 * 1024)
31
+ return `${(bytes / 1024).toFixed(1)} KB`;
32
+ return `${(bytes / 1024 / 1024).toFixed(2)} MB`;
33
+ }
34
+ function countFiles(dirPath) {
35
+ let count = 0;
36
+ let size = 0;
37
+ if (!fs.existsSync(dirPath)) {
38
+ return { count: 0, size: 0 };
39
+ }
40
+ const entries = fs.readdirSync(dirPath, { withFileTypes: true });
41
+ for (const entry of entries) {
42
+ const fullPath = path.join(dirPath, entry.name);
43
+ if (entry.isDirectory()) {
44
+ const sub = countFiles(fullPath);
45
+ count += sub.count;
46
+ size += sub.size;
47
+ }
48
+ else if (entry.isFile()) {
49
+ count++;
50
+ size += fs.statSync(fullPath).size;
51
+ }
52
+ }
53
+ return { count, size };
54
+ }
55
+ function validateSkill(skillPath) {
56
+ const result = {
57
+ valid: true,
58
+ errors: [],
59
+ warnings: [],
60
+ info: {
61
+ hasScripts: false,
62
+ hasReferences: false,
63
+ hasAssets: false,
64
+ fileCount: 0,
65
+ totalSize: 0,
66
+ },
67
+ };
68
+ const resolvedPath = path.resolve(skillPath);
69
+ // Check if path exists
70
+ if (!fs.existsSync(resolvedPath)) {
71
+ result.errors.push(`Path not found: ${resolvedPath}`);
72
+ result.valid = false;
73
+ return result;
74
+ }
75
+ const stat = fs.statSync(resolvedPath);
76
+ const isDirectory = stat.isDirectory();
77
+ let skillMdPath;
78
+ let skillDir;
79
+ if (isDirectory) {
80
+ skillDir = resolvedPath;
81
+ skillMdPath = path.join(resolvedPath, 'SKILL.md');
82
+ // Also check for lowercase
83
+ if (!fs.existsSync(skillMdPath)) {
84
+ const altPath = path.join(resolvedPath, 'skill.md');
85
+ if (fs.existsSync(altPath)) {
86
+ skillMdPath = altPath;
87
+ result.warnings.push('SKILL.md should be uppercase (found skill.md)');
88
+ }
89
+ }
90
+ }
91
+ else {
92
+ skillDir = path.dirname(resolvedPath);
93
+ skillMdPath = resolvedPath;
94
+ }
95
+ // Check SKILL.md exists
96
+ if (!fs.existsSync(skillMdPath)) {
97
+ result.errors.push('SKILL.md not found');
98
+ result.valid = false;
99
+ return result;
100
+ }
101
+ // Read and parse SKILL.md
102
+ const content = fs.readFileSync(skillMdPath, 'utf-8');
103
+ result.info.totalSize = content.length;
104
+ result.info.fileCount = 1;
105
+ // Check for frontmatter
106
+ const parsed = parseFrontmatter(content);
107
+ if (!parsed) {
108
+ result.errors.push('Invalid or missing YAML frontmatter (must start with ---)');
109
+ result.valid = false;
110
+ return result;
111
+ }
112
+ const { frontmatter, markdown } = parsed;
113
+ // Validate name field
114
+ if (!frontmatter.name) {
115
+ result.errors.push('Missing required field: name');
116
+ result.valid = false;
117
+ }
118
+ else {
119
+ result.info.name = frontmatter.name;
120
+ // Check name format
121
+ if (!isValidSkillName(frontmatter.name)) {
122
+ result.errors.push(`Invalid name format: "${frontmatter.name}". Must be lowercase letters, numbers, and hyphens only.`);
123
+ result.valid = false;
124
+ }
125
+ // Check name matches directory
126
+ if (isDirectory) {
127
+ const dirName = path.basename(skillDir);
128
+ if (frontmatter.name !== dirName) {
129
+ result.warnings.push(`Name "${frontmatter.name}" doesn't match directory name "${dirName}"`);
130
+ }
131
+ }
132
+ // Check name length
133
+ if (frontmatter.name.length > 64) {
134
+ result.errors.push(`Name too long: ${frontmatter.name.length} chars (max 64)`);
135
+ result.valid = false;
136
+ }
137
+ // Check for invalid patterns
138
+ if (frontmatter.name.startsWith('-')) {
139
+ result.errors.push('Name cannot start with a hyphen');
140
+ result.valid = false;
141
+ }
142
+ if (frontmatter.name.endsWith('-')) {
143
+ result.errors.push('Name cannot end with a hyphen');
144
+ result.valid = false;
145
+ }
146
+ if (frontmatter.name.includes('--')) {
147
+ result.errors.push('Name cannot contain consecutive hyphens');
148
+ result.valid = false;
149
+ }
150
+ }
151
+ // Validate description field
152
+ if (!frontmatter.description) {
153
+ result.errors.push('Missing required field: description');
154
+ result.valid = false;
155
+ }
156
+ else {
157
+ result.info.description = frontmatter.description;
158
+ if (frontmatter.description.length > 1024) {
159
+ result.errors.push(`Description too long: ${frontmatter.description.length} chars (max 1024)`);
160
+ result.valid = false;
161
+ }
162
+ if (frontmatter.description.length < 10) {
163
+ result.warnings.push('Description is very short. Consider adding more detail.');
164
+ }
165
+ }
166
+ // Validate optional fields
167
+ if (frontmatter.license) {
168
+ result.info.license = frontmatter.license;
169
+ }
170
+ if (frontmatter.compatibility && frontmatter.compatibility.length > 500) {
171
+ result.errors.push(`Compatibility too long: ${frontmatter.compatibility.length} chars (max 500)`);
172
+ result.valid = false;
173
+ }
174
+ // Check markdown content
175
+ if (!markdown || markdown.length === 0) {
176
+ result.warnings.push('SKILL.md has no body content after frontmatter');
177
+ }
178
+ else if (markdown.length > 50000) {
179
+ result.warnings.push(`SKILL.md body is very large (${(markdown.length / 1000).toFixed(1)}K chars). Consider splitting into reference files.`);
180
+ }
181
+ // Check directory structure (only for directories)
182
+ if (isDirectory) {
183
+ const scriptsDir = path.join(skillDir, 'scripts');
184
+ const referencesDir = path.join(skillDir, 'references');
185
+ const referenceDir = path.join(skillDir, 'reference'); // Alternative name
186
+ const assetsDir = path.join(skillDir, 'assets');
187
+ if (fs.existsSync(scriptsDir)) {
188
+ result.info.hasScripts = true;
189
+ const stats = countFiles(scriptsDir);
190
+ result.info.fileCount += stats.count;
191
+ result.info.totalSize += stats.size;
192
+ }
193
+ if (fs.existsSync(referencesDir)) {
194
+ result.info.hasReferences = true;
195
+ const stats = countFiles(referencesDir);
196
+ result.info.fileCount += stats.count;
197
+ result.info.totalSize += stats.size;
198
+ }
199
+ else if (fs.existsSync(referenceDir)) {
200
+ result.info.hasReferences = true;
201
+ const stats = countFiles(referenceDir);
202
+ result.info.fileCount += stats.count;
203
+ result.info.totalSize += stats.size;
204
+ }
205
+ if (fs.existsSync(assetsDir)) {
206
+ result.info.hasAssets = true;
207
+ const stats = countFiles(assetsDir);
208
+ result.info.fileCount += stats.count;
209
+ result.info.totalSize += stats.size;
210
+ }
211
+ // Check for LICENSE file
212
+ const licensePath = path.join(skillDir, 'LICENSE.txt');
213
+ const licensePathAlt = path.join(skillDir, 'LICENSE');
214
+ if (!fs.existsSync(licensePath) && !fs.existsSync(licensePathAlt)) {
215
+ if (frontmatter.license) {
216
+ result.warnings.push('License specified in frontmatter but no LICENSE.txt file found');
217
+ }
218
+ }
219
+ // Check total size
220
+ if (result.info.totalSize > 150 * 1024 * 1024) {
221
+ result.errors.push(`Total size exceeds 150MB limit: ${formatSize(result.info.totalSize)}`);
222
+ result.valid = false;
223
+ }
224
+ else if (result.info.totalSize > 50 * 1024 * 1024) {
225
+ result.warnings.push(`Large skill size: ${formatSize(result.info.totalSize)}. Consider optimizing.`);
226
+ }
227
+ }
228
+ return result;
229
+ }
230
+ export const validateCommand = new Command('validate')
231
+ .description('Validate a skill file or directory')
232
+ .argument('<path>', 'Path to skill file (.md) or directory containing SKILL.md')
233
+ .option('--json', 'Output result as JSON')
234
+ .action((skillPath, options) => {
235
+ const result = validateSkill(skillPath);
236
+ if (options.json) {
237
+ console.log(JSON.stringify(result, null, 2));
238
+ process.exit(result.valid ? 0 : 1);
239
+ }
240
+ // Pretty output
241
+ const resolvedPath = path.resolve(skillPath);
242
+ console.log(`\nValidating ${chalk.cyan(resolvedPath)}...\n`);
243
+ // SKILL.md check
244
+ if (result.errors.some(e => e.includes('SKILL.md not found'))) {
245
+ console.log(chalk.red('✗ SKILL.md not found'));
246
+ process.exit(1);
247
+ }
248
+ else {
249
+ console.log(chalk.green('✓ SKILL.md exists'));
250
+ }
251
+ // Frontmatter check
252
+ if (result.errors.some(e => e.includes('frontmatter'))) {
253
+ console.log(chalk.red('✗ Frontmatter is invalid'));
254
+ for (const error of result.errors.filter(e => e.includes('frontmatter'))) {
255
+ console.log(chalk.red(` └── ${error}`));
256
+ }
257
+ }
258
+ else {
259
+ console.log(chalk.green('✓ Frontmatter is valid'));
260
+ // Show field details
261
+ if (result.info.name) {
262
+ const nameValid = !result.errors.some(e => e.toLowerCase().includes('name'));
263
+ const icon = nameValid ? chalk.green('✓') : chalk.red('✗');
264
+ console.log(` ├── name: ${result.info.name} ${icon}`);
265
+ // Show name errors
266
+ for (const error of result.errors.filter(e => e.toLowerCase().includes('name') && !e.includes('frontmatter'))) {
267
+ console.log(chalk.red(` │ └── ${error}`));
268
+ }
269
+ }
270
+ if (result.info.description) {
271
+ const descValid = !result.errors.some(e => e.toLowerCase().includes('description'));
272
+ const icon = descValid ? chalk.green('✓') : chalk.red('✗');
273
+ const preview = result.info.description.length > 40
274
+ ? result.info.description.substring(0, 40) + '...'
275
+ : result.info.description;
276
+ console.log(` ├── description: ${preview} ${icon}`);
277
+ // Show description errors
278
+ for (const error of result.errors.filter(e => e.toLowerCase().includes('description'))) {
279
+ console.log(chalk.red(` │ └── ${error}`));
280
+ }
281
+ }
282
+ else {
283
+ console.log(chalk.red(` ├── description: (missing)`));
284
+ console.log(chalk.red(` │ └── Error: Description is required`));
285
+ }
286
+ if (result.info.license) {
287
+ console.log(` └── license: ${result.info.license} ${chalk.green('✓')}`);
288
+ }
289
+ }
290
+ // Directory structure check
291
+ const stat = fs.statSync(resolvedPath);
292
+ if (stat.isDirectory()) {
293
+ const hasAnyDirs = result.info.hasScripts || result.info.hasReferences || result.info.hasAssets;
294
+ if (hasAnyDirs || result.info.fileCount > 1) {
295
+ console.log(chalk.green('✓ Directory structure is valid'));
296
+ if (result.info.hasScripts) {
297
+ console.log(chalk.gray(' ├── scripts/ ✓'));
298
+ }
299
+ if (result.info.hasReferences) {
300
+ console.log(chalk.gray(' ├── references/ ✓'));
301
+ }
302
+ if (result.info.hasAssets) {
303
+ console.log(chalk.gray(' ├── assets/ ✓'));
304
+ }
305
+ console.log(chalk.gray(` └── ${result.info.fileCount} files, ${formatSize(result.info.totalSize)}`));
306
+ }
307
+ }
308
+ // Warnings
309
+ if (result.warnings.length > 0) {
310
+ console.log('');
311
+ for (const warning of result.warnings) {
312
+ console.log(chalk.yellow(`⚠ ${warning}`));
313
+ }
314
+ }
315
+ // Summary
316
+ console.log('');
317
+ if (result.valid) {
318
+ console.log(chalk.green.bold('✓ Skill is valid and ready to publish!'));
319
+ console.log(chalk.gray(`\nRun: skills publish ${skillPath}`));
320
+ }
321
+ else {
322
+ const errorCount = result.errors.length;
323
+ console.log(chalk.red.bold(`Found ${errorCount} error${errorCount > 1 ? 's' : ''}. Please fix before publishing.`));
324
+ }
325
+ console.log('');
326
+ process.exit(result.valid ? 0 : 1);
327
+ });
328
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Open Skills Hub CLI - Entry Point
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;GAEG"}