@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,593 @@
1
+ /**
2
+ * Open Skills Hub CLI - Publish Command
3
+ * Supports both single file and directory publishing
4
+ */
5
+ import { Command } from 'commander';
6
+ import chalk from 'chalk';
7
+ import ora from 'ora';
8
+ import * as fs from 'fs';
9
+ import * as path from 'path';
10
+ import { parse as parseYaml } from 'yaml';
11
+ import inquirer from 'inquirer';
12
+ import { getStorage, getConfig, initScanner, getScanner, generateUUID, now, sha256, buildSkillFullName, isValidSkillName, isValidSemver, } from '@open-skills-hub/core';
13
+ // File extensions to include (text-based files)
14
+ const TEXT_EXTENSIONS = new Set([
15
+ '.md', '.txt', '.py', '.js', '.ts', '.sh', '.bash', '.zsh',
16
+ '.json', '.yaml', '.yml', '.xml', '.xsd', '.html', '.css',
17
+ '.sql', '.r', '.rb', '.pl', '.lua', '.go', '.rs', '.java',
18
+ '.c', '.cpp', '.h', '.hpp', '.swift', '.kt', '.scala',
19
+ '.template', '.tpl', '.cfg', '.conf', '.ini', '.env',
20
+ '.csv', '.tsv', '.log',
21
+ ]);
22
+ // Binary extensions to include (will be base64 encoded)
23
+ const BINARY_EXTENSIONS = new Set([
24
+ '.ttf', '.otf', '.woff', '.woff2',
25
+ '.png', '.jpg', '.jpeg', '.gif', '.svg', '.ico', '.webp',
26
+ '.pdf', '.zip', '.tar', '.gz',
27
+ ]);
28
+ // Directories to skip
29
+ const SKIP_DIRS = new Set([
30
+ 'node_modules', '.git', '.svn', '__pycache__', '.DS_Store',
31
+ 'dist', 'build', '.cache', '.vscode', '.idea',
32
+ ]);
33
+ // Files to skip
34
+ const SKIP_FILES = new Set([
35
+ '.DS_Store', 'Thumbs.db', '.gitignore', '.npmignore',
36
+ ]);
37
+ function parseSkillFile(content) {
38
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---\n?([\s\S]*)$/);
39
+ if (frontmatterMatch && frontmatterMatch[1] && frontmatterMatch[2] !== undefined) {
40
+ return {
41
+ frontmatter: parseYaml(frontmatterMatch[1]),
42
+ markdown: frontmatterMatch[2].trim(),
43
+ };
44
+ }
45
+ return {
46
+ frontmatter: {},
47
+ markdown: content.trim(),
48
+ };
49
+ }
50
+ function isTextFile(filePath) {
51
+ const ext = path.extname(filePath).toLowerCase();
52
+ return TEXT_EXTENSIONS.has(ext);
53
+ }
54
+ function isBinaryFile(filePath) {
55
+ const ext = path.extname(filePath).toLowerCase();
56
+ return BINARY_EXTENSIONS.has(ext);
57
+ }
58
+ function shouldIncludeFile(filePath) {
59
+ const basename = path.basename(filePath);
60
+ if (SKIP_FILES.has(basename))
61
+ return false;
62
+ return isTextFile(filePath) || isBinaryFile(filePath);
63
+ }
64
+ function shouldSkipDir(dirName) {
65
+ return SKIP_DIRS.has(dirName);
66
+ }
67
+ function collectFiles(dirPath, basePath = dirPath) {
68
+ const result = {
69
+ skillMd: null,
70
+ files: [],
71
+ totalSize: 0,
72
+ stats: { scripts: 0, references: 0, assets: 0, other: 0 },
73
+ };
74
+ const entries = fs.readdirSync(dirPath, { withFileTypes: true });
75
+ for (const entry of entries) {
76
+ const fullPath = path.join(dirPath, entry.name);
77
+ const relativePath = path.relative(basePath, fullPath);
78
+ if (entry.isDirectory()) {
79
+ if (shouldSkipDir(entry.name))
80
+ continue;
81
+ // Recursively collect files
82
+ const subResult = collectFiles(fullPath, basePath);
83
+ result.files.push(...subResult.files);
84
+ result.totalSize += subResult.totalSize;
85
+ // Merge stats
86
+ result.stats.scripts += subResult.stats.scripts;
87
+ result.stats.references += subResult.stats.references;
88
+ result.stats.assets += subResult.stats.assets;
89
+ result.stats.other += subResult.stats.other;
90
+ if (subResult.skillMd && !result.skillMd) {
91
+ result.skillMd = subResult.skillMd;
92
+ }
93
+ }
94
+ else if (entry.isFile()) {
95
+ // Handle SKILL.md specially
96
+ if (entry.name.toUpperCase() === 'SKILL.MD') {
97
+ const content = fs.readFileSync(fullPath, 'utf-8');
98
+ result.skillMd = { path: relativePath, content };
99
+ result.totalSize += content.length;
100
+ continue;
101
+ }
102
+ // Skip files we don't want to include
103
+ if (!shouldIncludeFile(entry.name))
104
+ continue;
105
+ const stat = fs.statSync(fullPath);
106
+ // Skip files larger than 10MB
107
+ if (stat.size > 10 * 1024 * 1024) {
108
+ console.log(chalk.yellow(` ⚠ Skipping large file: ${relativePath} (${(stat.size / 1024 / 1024).toFixed(2)} MB)`));
109
+ continue;
110
+ }
111
+ let content;
112
+ if (isTextFile(fullPath)) {
113
+ content = fs.readFileSync(fullPath, 'utf-8');
114
+ }
115
+ else if (isBinaryFile(fullPath)) {
116
+ // Base64 encode binary files
117
+ const buffer = fs.readFileSync(fullPath);
118
+ content = `data:${getMimeType(fullPath)};base64,${buffer.toString('base64')}`;
119
+ }
120
+ else {
121
+ continue;
122
+ }
123
+ result.files.push({
124
+ path: relativePath,
125
+ content,
126
+ size: stat.size,
127
+ });
128
+ result.totalSize += stat.size;
129
+ // Update stats
130
+ if (relativePath.startsWith('scripts/') || relativePath.startsWith('scripts\\')) {
131
+ result.stats.scripts++;
132
+ }
133
+ else if (relativePath.startsWith('references/') || relativePath.startsWith('references\\') ||
134
+ relativePath.startsWith('reference/') || relativePath.startsWith('reference\\')) {
135
+ result.stats.references++;
136
+ }
137
+ else if (relativePath.startsWith('assets/') || relativePath.startsWith('assets\\')) {
138
+ result.stats.assets++;
139
+ }
140
+ else {
141
+ result.stats.other++;
142
+ }
143
+ }
144
+ }
145
+ return result;
146
+ }
147
+ function getMimeType(filePath) {
148
+ const ext = path.extname(filePath).toLowerCase();
149
+ const mimeTypes = {
150
+ '.ttf': 'font/ttf',
151
+ '.otf': 'font/otf',
152
+ '.woff': 'font/woff',
153
+ '.woff2': 'font/woff2',
154
+ '.png': 'image/png',
155
+ '.jpg': 'image/jpeg',
156
+ '.jpeg': 'image/jpeg',
157
+ '.gif': 'image/gif',
158
+ '.svg': 'image/svg+xml',
159
+ '.webp': 'image/webp',
160
+ '.ico': 'image/x-icon',
161
+ '.pdf': 'application/pdf',
162
+ '.zip': 'application/zip',
163
+ };
164
+ return mimeTypes[ext] || 'application/octet-stream';
165
+ }
166
+ function formatSize(bytes) {
167
+ if (bytes < 1024)
168
+ return `${bytes} B`;
169
+ if (bytes < 1024 * 1024)
170
+ return `${(bytes / 1024).toFixed(1)} KB`;
171
+ return `${(bytes / 1024 / 1024).toFixed(2)} MB`;
172
+ }
173
+ export const publishCommand = new Command('publish')
174
+ .description('Publish a skill to the hub (supports both file and directory)')
175
+ .argument('<path>', 'Path to skill file (.md) or directory containing SKILL.md')
176
+ .option('-n, --name <name>', 'Skill name (overrides frontmatter)')
177
+ .option('-v, --version <version>', 'Version (default: 1.0.0 for new, auto-increment for updates)')
178
+ .option('-s, --scope <scope>', 'Scope/namespace (e.g., @myorg)')
179
+ .option('-a, --author <author>', 'Author name or organization (overrides frontmatter)')
180
+ .option('--category <category>', 'Skill category')
181
+ .option('--keywords <keywords>', 'Comma-separated keywords')
182
+ .option('--visibility <visibility>', 'Visibility: public, private, unlisted', 'public')
183
+ .option('--skip-scan', 'Skip security scan')
184
+ .option('--dry-run', 'Validate without publishing')
185
+ .option('-y, --yes', 'Skip confirmation prompts')
186
+ .action(async (inputPath, options) => {
187
+ const spinner = ora('Reading skill...').start();
188
+ try {
189
+ const resolvedPath = path.resolve(inputPath);
190
+ if (!fs.existsSync(resolvedPath)) {
191
+ spinner.fail(`Path not found: ${resolvedPath}`);
192
+ process.exit(1);
193
+ }
194
+ const stat = fs.statSync(resolvedPath);
195
+ const isDirectory = stat.isDirectory();
196
+ let skillMdContent;
197
+ let collectedFiles = [];
198
+ let totalSize = 0;
199
+ let fileStats = { scripts: 0, references: 0, assets: 0, other: 0 };
200
+ let skillDirName;
201
+ if (isDirectory) {
202
+ // Directory mode: collect all files
203
+ spinner.text = 'Reading directory...';
204
+ skillDirName = path.basename(resolvedPath);
205
+ const collected = collectFiles(resolvedPath);
206
+ if (!collected.skillMd) {
207
+ spinner.fail('SKILL.md not found in directory');
208
+ process.exit(1);
209
+ }
210
+ skillMdContent = collected.skillMd.content;
211
+ collectedFiles = collected.files;
212
+ totalSize = collected.totalSize;
213
+ fileStats = collected.stats;
214
+ spinner.succeed(`Found SKILL.md and ${collected.files.length} additional files`);
215
+ if (collected.files.length > 0) {
216
+ console.log(chalk.gray(` ├── scripts: ${fileStats.scripts} files`));
217
+ console.log(chalk.gray(` ├── references: ${fileStats.references} files`));
218
+ console.log(chalk.gray(` ├── assets: ${fileStats.assets} files`));
219
+ if (fileStats.other > 0) {
220
+ console.log(chalk.gray(` └── other: ${fileStats.other} files`));
221
+ }
222
+ console.log(chalk.gray(` Total size: ${formatSize(totalSize)}`));
223
+ }
224
+ }
225
+ else {
226
+ // Single file mode
227
+ skillDirName = path.basename(path.dirname(resolvedPath));
228
+ skillMdContent = fs.readFileSync(resolvedPath, 'utf-8');
229
+ totalSize = skillMdContent.length;
230
+ spinner.succeed('Read skill file');
231
+ }
232
+ // Parse SKILL.md
233
+ const parsed = parseSkillFile(skillMdContent);
234
+ // Extract metadata
235
+ const skillName = options.name ?? parsed.frontmatter['name'] ?? skillDirName;
236
+ if (!skillName) {
237
+ spinner.fail('Skill name is required. Use --name or add "name" to frontmatter.');
238
+ process.exit(1);
239
+ }
240
+ if (!isValidSkillName(skillName)) {
241
+ spinner.fail(`Invalid skill name: ${skillName}. Use lowercase letters, numbers, and hyphens.`);
242
+ process.exit(1);
243
+ }
244
+ // Validate name matches directory
245
+ if (isDirectory && skillName !== skillDirName) {
246
+ console.log(chalk.yellow(` ⚠ Warning: name "${skillName}" doesn't match directory "${skillDirName}"`));
247
+ }
248
+ // Extract and validate author
249
+ const author = options.author
250
+ ?? parsed.frontmatter['author']
251
+ ?? parsed.frontmatter['metadata']?.[' author'];
252
+ if (!author) {
253
+ spinner.fail(chalk.red('Author is required!'));
254
+ console.log(chalk.yellow('\n📝 Please provide author information:'));
255
+ console.log(chalk.gray(' Option 1: Add to SKILL.md frontmatter:'));
256
+ console.log(chalk.cyan(' ---'));
257
+ console.log(chalk.cyan(' name: your-skill'));
258
+ console.log(chalk.cyan(' description: ...'));
259
+ console.log(chalk.cyan(' author: Your Name'));
260
+ console.log(chalk.cyan(' ---'));
261
+ console.log(chalk.gray('\n Option 2: Use command line flag:'));
262
+ console.log(chalk.cyan(' skills publish ./your-skill --author "Your Name"'));
263
+ process.exit(1);
264
+ }
265
+ const scope = options.scope?.replace(/^@/, '');
266
+ const fullName = buildSkillFullName(skillName, scope);
267
+ const prepareSpinner = ora(`Preparing ${fullName}...`).start();
268
+ // Initialize storage
269
+ const storage = await getStorage();
270
+ await storage.initialize();
271
+ const config = getConfig();
272
+ // Check if skill exists
273
+ const existingSkill = await storage.getSkillByName(fullName);
274
+ const isUpdate = !!existingSkill;
275
+ // Determine version
276
+ let version = options.version ?? parsed.frontmatter['version'];
277
+ if (!version) {
278
+ if (isUpdate) {
279
+ // Auto-increment patch version
280
+ const [major, minor, patch] = existingSkill.latestVersion.split('.').map(Number);
281
+ version = `${major}.${minor}.${(patch ?? 0) + 1}`;
282
+ }
283
+ else {
284
+ version = '1.0.0';
285
+ }
286
+ }
287
+ if (!isValidSemver(version)) {
288
+ prepareSpinner.fail(`Invalid version: ${version}. Use semantic versioning (e.g., 1.0.0).`);
289
+ process.exit(1);
290
+ }
291
+ // Check version doesn't exist
292
+ if (isUpdate) {
293
+ const existingVersion = await storage.getVersion(existingSkill.id, version);
294
+ if (existingVersion) {
295
+ prepareSpinner.fail(`Version ${version} already exists for ${fullName}.`);
296
+ process.exit(1);
297
+ }
298
+ }
299
+ prepareSpinner.succeed(`Prepared ${fullName}@${version} (${isUpdate ? 'new version' : 'new skill'})`);
300
+ // Security scan
301
+ let scanResult;
302
+ if (!options.skipScan) {
303
+ const scanSpinner = ora('Running security scan...').start();
304
+ initScanner({
305
+ enabled: config.get().scanner.enabled,
306
+ timeout: config.get().scanner.timeout,
307
+ maxFileSize: config.get().scanner.maxFileSize,
308
+ });
309
+ const scanner = getScanner();
310
+ // Scan SKILL.md content
311
+ scanResult = await scanner.scan(skillMdContent);
312
+ // Also scan script files if any
313
+ for (const file of collectedFiles) {
314
+ if (file.path.startsWith('scripts/') && (file.path.endsWith('.py') || file.path.endsWith('.sh') || file.path.endsWith('.js'))) {
315
+ const fileScanResult = await scanner.scan(file.content);
316
+ scanResult.issues.push(...fileScanResult.issues);
317
+ scanResult.summary.score = Math.min(scanResult.summary.score, fileScanResult.summary.score);
318
+ if (fileScanResult.summary.level === 'high') {
319
+ scanResult.summary.level = 'high';
320
+ }
321
+ else if (fileScanResult.summary.level === 'medium' && scanResult.summary.level !== 'high') {
322
+ scanResult.summary.level = 'medium';
323
+ }
324
+ }
325
+ }
326
+ // Determine level color
327
+ const levelColor = {
328
+ safe: chalk.green,
329
+ low: chalk.blue,
330
+ medium: chalk.yellow,
331
+ high: chalk.red,
332
+ }[scanResult.summary.level] ?? chalk.white;
333
+ // Show scan result
334
+ if (scanResult.summary.level === 'high') {
335
+ scanSpinner.fail(`Security scan: ${levelColor(scanResult.summary.level)} (score: ${scanResult.summary.score})`);
336
+ }
337
+ else {
338
+ scanSpinner.succeed(`Security scan: ${levelColor(scanResult.summary.level)} (score: ${scanResult.summary.score})`);
339
+ }
340
+ // Show issue details if any issues found
341
+ if (scanResult.issues.length > 0) {
342
+ // Count issues by severity
343
+ const highCount = scanResult.issues.filter(i => i.severity === 'high').length;
344
+ const mediumCount = scanResult.issues.filter(i => i.severity === 'medium').length;
345
+ const lowCount = scanResult.issues.filter(i => i.severity === 'low').length;
346
+ const parts = [];
347
+ if (highCount > 0)
348
+ parts.push(`${highCount} high`);
349
+ if (mediumCount > 0)
350
+ parts.push(`${mediumCount} medium`);
351
+ if (lowCount > 0)
352
+ parts.push(`${lowCount} low`);
353
+ const severityText = parts.length > 0 ? parts.join(', ') : 'none critical';
354
+ console.log(chalk.gray(` ${scanResult.issues.length} issue(s) found - ${severityText}\n`));
355
+ // Show detailed issues grouped by severity
356
+ if (highCount > 0) {
357
+ console.log(chalk.red.bold('High-Risk Issues:'));
358
+ for (const issue of scanResult.issues.filter(i => i.severity === 'high')) {
359
+ console.log(chalk.red(` • [${issue.ruleId}] ${issue.message}`));
360
+ console.log(chalk.gray(` Line ${issue.line}: ${issue.content}`));
361
+ if (issue.suggestion) {
362
+ console.log(chalk.yellow(` Suggestion: ${issue.suggestion}`));
363
+ }
364
+ }
365
+ console.log('');
366
+ }
367
+ if (mediumCount > 0) {
368
+ console.log(chalk.yellow.bold('Medium-Risk Issues:'));
369
+ for (const issue of scanResult.issues.filter(i => i.severity === 'medium')) {
370
+ console.log(chalk.yellow(` • [${issue.ruleId}] ${issue.message}`));
371
+ console.log(chalk.gray(` Line ${issue.line}: ${issue.content}`));
372
+ if (issue.suggestion) {
373
+ console.log(chalk.blue(` Suggestion: ${issue.suggestion}`));
374
+ }
375
+ }
376
+ console.log('');
377
+ }
378
+ if (lowCount > 0) {
379
+ console.log(chalk.blue.bold('Low-Risk Issues:'));
380
+ for (const issue of scanResult.issues.filter(i => i.severity === 'low')) {
381
+ console.log(chalk.blue(` • [${issue.ruleId}] ${issue.message}`));
382
+ console.log(chalk.gray(` Line ${issue.line}: ${issue.content}`));
383
+ if (issue.suggestion) {
384
+ console.log(chalk.cyan(` Suggestion: ${issue.suggestion}`));
385
+ }
386
+ }
387
+ console.log('');
388
+ }
389
+ }
390
+ // Ask for confirmation if high-risk issues found
391
+ if (scanResult.summary.level === 'high' && !options.yes) {
392
+ const { proceed } = await inquirer.prompt([{
393
+ type: 'confirm',
394
+ name: 'proceed',
395
+ message: 'Do you want to proceed despite high-risk security warnings?',
396
+ default: false,
397
+ }]);
398
+ if (!proceed) {
399
+ console.log(chalk.yellow('\nPublish cancelled.'));
400
+ process.exit(1);
401
+ }
402
+ }
403
+ }
404
+ // Build skill content
405
+ const skillContent = {
406
+ frontmatter: {
407
+ name: skillName,
408
+ description: parsed.frontmatter['description'] ?? '',
409
+ allowedTools: parsed.frontmatter['allowedTools'],
410
+ argumentHint: parsed.frontmatter['argumentHint'],
411
+ disableModelInvocation: parsed.frontmatter['disableModelInvocation'],
412
+ userInvocable: parsed.frontmatter['userInvocable'],
413
+ model: parsed.frontmatter['model'],
414
+ license: parsed.frontmatter['license'],
415
+ compatibility: parsed.frontmatter['compatibility'],
416
+ metadata: parsed.frontmatter['metadata'],
417
+ },
418
+ markdown: parsed.markdown,
419
+ files: collectedFiles.length > 0 ? collectedFiles : undefined,
420
+ };
421
+ // Dry run check
422
+ if (options.dryRun) {
423
+ console.log(chalk.cyan('\n[Dry Run] Would publish:'));
424
+ console.log(` Name: ${fullName}`);
425
+ console.log(` Version: ${version}`);
426
+ console.log(` Author: ${author}`);
427
+ console.log(` Visibility: ${options.visibility}`);
428
+ console.log(` Category: ${options.category ?? 'none'}`);
429
+ console.log(` Keywords: ${options.keywords ?? 'none'}`);
430
+ console.log(` Files: ${collectedFiles.length + 1}`); // +1 for SKILL.md
431
+ console.log(` Size: ${formatSize(totalSize)}`);
432
+ if (collectedFiles.length > 0) {
433
+ console.log('\n File breakdown:');
434
+ console.log(` SKILL.md: ${formatSize(skillMdContent.length)}`);
435
+ if (fileStats.scripts > 0)
436
+ console.log(` scripts/: ${fileStats.scripts} files`);
437
+ if (fileStats.references > 0)
438
+ console.log(` references/: ${fileStats.references} files`);
439
+ if (fileStats.assets > 0)
440
+ console.log(` assets/: ${fileStats.assets} files`);
441
+ }
442
+ console.log(chalk.green('\n✓ Validation passed'));
443
+ process.exit(0);
444
+ }
445
+ // Confirmation prompt
446
+ if (!options.yes) {
447
+ console.log(chalk.cyan('\nPublish Summary:'));
448
+ console.log(` Name: ${chalk.bold(fullName)}`);
449
+ console.log(` Version: ${chalk.bold(version)}`);
450
+ console.log(` Author: ${chalk.bold(author)}`);
451
+ console.log(` Visibility: ${options.visibility}`);
452
+ console.log(` Action: ${isUpdate ? 'New version' : 'New skill'}`);
453
+ console.log(` Files: ${collectedFiles.length + 1}`);
454
+ console.log(` Size: ${formatSize(totalSize)}`);
455
+ const { confirm } = await inquirer.prompt([{
456
+ type: 'confirm',
457
+ name: 'confirm',
458
+ message: 'Proceed with publish?',
459
+ default: true,
460
+ }]);
461
+ if (!confirm) {
462
+ console.log(chalk.yellow('Publish cancelled.'));
463
+ process.exit(0);
464
+ }
465
+ }
466
+ // Publish
467
+ const publishSpinner = ora('Publishing...').start();
468
+ const contentString = JSON.stringify(skillContent);
469
+ const contentHash = sha256(contentString);
470
+ const timestamp = now();
471
+ const versionId = generateUUID();
472
+ if (isUpdate) {
473
+ // Create new version
474
+ const versionRecord = {
475
+ id: versionId,
476
+ skillId: existingSkill.id,
477
+ version,
478
+ tag: 'latest',
479
+ content: skillContent,
480
+ packageUrl: `local://${fullName}/${version}`,
481
+ packageSize: contentString.length,
482
+ packageHash: contentHash,
483
+ status: 'published',
484
+ uses: 0,
485
+ createdAt: timestamp,
486
+ publishedAt: timestamp,
487
+ };
488
+ await storage.createVersion(versionRecord);
489
+ // Update previous latest tag
490
+ const versions = await storage.getVersions(existingSkill.id, { limit: 100 });
491
+ for (const v of versions.items) {
492
+ if (v.id !== versionId && v.tag === 'latest') {
493
+ await storage.updateVersion(v.id, { tag: undefined });
494
+ }
495
+ }
496
+ // Update skill
497
+ await storage.updateSkill(existingSkill.id, {
498
+ latestVersion: version,
499
+ latestVersionId: versionId,
500
+ securityLevel: scanResult ? scanResult.summary.level : existingSkill.securityLevel,
501
+ securityScore: scanResult ? scanResult.summary.score : existingSkill.securityScore,
502
+ stats: {
503
+ ...existingSkill.stats,
504
+ versionCount: existingSkill.stats.versionCount + 1,
505
+ },
506
+ });
507
+ }
508
+ else {
509
+ // Create new skill
510
+ const skillId = generateUUID();
511
+ const keywords = options.keywords?.split(',').map((k) => k.trim()) ?? [];
512
+ const skillRecord = {
513
+ id: skillId,
514
+ name: skillName,
515
+ scope,
516
+ fullName,
517
+ ownerId: author, // Save author to ownerId
518
+ ownerType: author.startsWith('@') || scope ? 'organization' : 'user',
519
+ displayName: parsed.frontmatter['displayName'],
520
+ description: parsed.frontmatter['description'] ?? '',
521
+ category: options.category,
522
+ keywords,
523
+ visibility: options.visibility,
524
+ status: 'active',
525
+ latestVersion: version,
526
+ latestVersionId: versionId,
527
+ securityLevel: scanResult?.summary.level,
528
+ securityScore: scanResult?.summary.score,
529
+ stats: { totalUses: 0, weeklyUses: 0, monthlyUses: 0, versionCount: 1, derivationCount: 0 },
530
+ rating: { average: 0, count: 0 },
531
+ createdAt: timestamp,
532
+ updatedAt: timestamp,
533
+ publishedAt: timestamp,
534
+ };
535
+ await storage.createSkill(skillRecord);
536
+ // Create version
537
+ const versionRecord = {
538
+ id: versionId,
539
+ skillId,
540
+ version,
541
+ tag: 'latest',
542
+ content: skillContent,
543
+ packageUrl: `local://${fullName}/${version}`,
544
+ packageSize: contentString.length,
545
+ packageHash: contentHash,
546
+ status: 'published',
547
+ uses: 0,
548
+ createdAt: timestamp,
549
+ publishedAt: timestamp,
550
+ };
551
+ await storage.createVersion(versionRecord);
552
+ }
553
+ // Create audit log
554
+ const auditLog = {
555
+ id: generateUUID(),
556
+ timestamp,
557
+ eventType: isUpdate ? 'version.published' : 'skill.published',
558
+ actor: {
559
+ type: 'user',
560
+ id: 'cli-user',
561
+ },
562
+ resource: {
563
+ type: 'skill',
564
+ name: fullName,
565
+ version,
566
+ },
567
+ action: 'publish',
568
+ result: 'success',
569
+ details: {
570
+ filesCount: collectedFiles.length + 1,
571
+ totalSize: totalSize,
572
+ },
573
+ };
574
+ await storage.createAuditLog(auditLog);
575
+ publishSpinner.succeed(chalk.green(`Published ${fullName}@${version}`));
576
+ console.log('\n' + chalk.gray('─'.repeat(50)));
577
+ console.log(chalk.bold.green('✓ Published successfully!\n'));
578
+ console.log(` ${chalk.cyan('Name:')} ${fullName}`);
579
+ console.log(` ${chalk.cyan('Version:')} ${version}`);
580
+ console.log(` ${chalk.cyan('Author:')} ${author}`);
581
+ console.log(` ${chalk.cyan('Files:')} ${collectedFiles.length + 1}`);
582
+ console.log(` ${chalk.cyan('Size:')} ${formatSize(totalSize)}`);
583
+ console.log(` ${chalk.cyan('Action:')} ${isUpdate ? 'New version' : 'New skill'}`);
584
+ console.log('\n' + chalk.gray(' Use: ') + chalk.white(`skills use ${fullName}`));
585
+ console.log(chalk.gray('─'.repeat(50)) + '\n');
586
+ await storage.close();
587
+ }
588
+ catch (error) {
589
+ spinner.fail('Publish failed');
590
+ throw error;
591
+ }
592
+ });
593
+ //# sourceMappingURL=publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/commands/publish.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Open Skills Hub CLI - Scan Command
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare const scanCommand: Command;
6
+ //# sourceMappingURL=scan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,eAAO,MAAM,WAAW,SA6KpB,CAAC"}