skillpkg-cli 0.1.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 (73) hide show
  1. package/dist/cli.d.ts +9 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +119 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/commands/export.d.ts +13 -0
  6. package/dist/commands/export.d.ts.map +1 -0
  7. package/dist/commands/export.js +117 -0
  8. package/dist/commands/export.js.map +1 -0
  9. package/dist/commands/import.d.ts +12 -0
  10. package/dist/commands/import.d.ts.map +1 -0
  11. package/dist/commands/import.js +126 -0
  12. package/dist/commands/import.js.map +1 -0
  13. package/dist/commands/info.d.ts +10 -0
  14. package/dist/commands/info.d.ts.map +1 -0
  15. package/dist/commands/info.js +118 -0
  16. package/dist/commands/info.js.map +1 -0
  17. package/dist/commands/init.d.ts +10 -0
  18. package/dist/commands/init.d.ts.map +1 -0
  19. package/dist/commands/init.js +161 -0
  20. package/dist/commands/init.js.map +1 -0
  21. package/dist/commands/install.d.ts +10 -0
  22. package/dist/commands/install.d.ts.map +1 -0
  23. package/dist/commands/install.js +190 -0
  24. package/dist/commands/install.js.map +1 -0
  25. package/dist/commands/list.d.ts +10 -0
  26. package/dist/commands/list.d.ts.map +1 -0
  27. package/dist/commands/list.js +74 -0
  28. package/dist/commands/list.js.map +1 -0
  29. package/dist/commands/login.d.ts +22 -0
  30. package/dist/commands/login.d.ts.map +1 -0
  31. package/dist/commands/login.js +100 -0
  32. package/dist/commands/login.js.map +1 -0
  33. package/dist/commands/publish.d.ts +12 -0
  34. package/dist/commands/publish.d.ts.map +1 -0
  35. package/dist/commands/publish.js +161 -0
  36. package/dist/commands/publish.js.map +1 -0
  37. package/dist/commands/search.d.ts +13 -0
  38. package/dist/commands/search.d.ts.map +1 -0
  39. package/dist/commands/search.js +94 -0
  40. package/dist/commands/search.js.map +1 -0
  41. package/dist/commands/sync.d.ts +10 -0
  42. package/dist/commands/sync.d.ts.map +1 -0
  43. package/dist/commands/sync.js +162 -0
  44. package/dist/commands/sync.js.map +1 -0
  45. package/dist/commands/uninstall.d.ts +10 -0
  46. package/dist/commands/uninstall.d.ts.map +1 -0
  47. package/dist/commands/uninstall.js +48 -0
  48. package/dist/commands/uninstall.js.map +1 -0
  49. package/dist/index.d.ts +3 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +17 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/ui/index.d.ts +8 -0
  54. package/dist/ui/index.d.ts.map +1 -0
  55. package/dist/ui/index.js +8 -0
  56. package/dist/ui/index.js.map +1 -0
  57. package/dist/ui/logger.d.ts +43 -0
  58. package/dist/ui/logger.d.ts.map +1 -0
  59. package/dist/ui/logger.js +77 -0
  60. package/dist/ui/logger.js.map +1 -0
  61. package/dist/ui/prompt.d.ts +35 -0
  62. package/dist/ui/prompt.d.ts.map +1 -0
  63. package/dist/ui/prompt.js +66 -0
  64. package/dist/ui/prompt.js.map +1 -0
  65. package/dist/ui/spinner.d.ts +16 -0
  66. package/dist/ui/spinner.d.ts.map +1 -0
  67. package/dist/ui/spinner.js +30 -0
  68. package/dist/ui/spinner.js.map +1 -0
  69. package/dist/ui/table.d.ts +20 -0
  70. package/dist/ui/table.d.ts.map +1 -0
  71. package/dist/ui/table.js +46 -0
  72. package/dist/ui/table.js.map +1 -0
  73. package/package.json +67 -0
package/dist/cli.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ /**
2
+ * CLI command registration
3
+ */
4
+ import type { Command } from 'commander';
5
+ /**
6
+ * Register all CLI commands
7
+ */
8
+ export declare function registerCommands(program: Command): void;
9
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAazC;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmHvD"}
package/dist/cli.js ADDED
@@ -0,0 +1,119 @@
1
+ import { initCommand } from './commands/init.js';
2
+ import { installCommand } from './commands/install.js';
3
+ import { listCommand } from './commands/list.js';
4
+ import { uninstallCommand } from './commands/uninstall.js';
5
+ import { syncCommand } from './commands/sync.js';
6
+ import { importCommand } from './commands/import.js';
7
+ import { exportCommand } from './commands/export.js';
8
+ import { searchCommand } from './commands/search.js';
9
+ import { infoCommand } from './commands/info.js';
10
+ import { loginCommand, logoutCommand, whoamiCommand } from './commands/login.js';
11
+ import { publishCommand } from './commands/publish.js';
12
+ /**
13
+ * Register all CLI commands
14
+ */
15
+ export function registerCommands(program) {
16
+ // init - Create a new skill.yaml
17
+ program
18
+ .command('init')
19
+ .description('Create a new skill.yaml file')
20
+ .option('-y, --yes', 'Use default values without prompts')
21
+ .option('-n, --name <name>', 'Skill name')
22
+ .action(initCommand);
23
+ // install - Install a skill
24
+ program
25
+ .command('install [skill]')
26
+ .alias('i')
27
+ .description('Install a skill from registry or local path')
28
+ .option('-g, --global', 'Install globally')
29
+ .option('--registry <url>', 'Use custom registry')
30
+ .action(installCommand);
31
+ // list - List installed skills
32
+ program
33
+ .command('list')
34
+ .alias('ls')
35
+ .description('List installed skills')
36
+ .option('-g, --global', 'List globally installed skills')
37
+ .option('--json', 'Output as JSON')
38
+ .action(listCommand);
39
+ // uninstall - Remove a skill
40
+ program
41
+ .command('uninstall <skill>')
42
+ .alias('rm')
43
+ .description('Uninstall a skill')
44
+ .option('-g, --global', 'Uninstall from global store')
45
+ .option('-c, --clean', 'Also remove synced files from all platforms')
46
+ .action(uninstallCommand);
47
+ // sync - Sync skills to platforms
48
+ program
49
+ .command('sync [skill]')
50
+ .description('Sync skills to AI platforms')
51
+ .option('-t, --target <platforms>', 'Target platforms (comma-separated)')
52
+ .option('--dry-run', 'Show what would be synced without making changes')
53
+ .action(syncCommand);
54
+ // import - Import skills from platform formats
55
+ program
56
+ .command('import [path]')
57
+ .description('Import skills from platform formats (Claude Code, Codex, etc.)')
58
+ .option('-f, --from <path>', 'Source path to import from')
59
+ .option('-g, --global', 'Import to global store')
60
+ .option('--dry-run', 'Show what would be imported without making changes')
61
+ .option('--overwrite', 'Overwrite existing skills')
62
+ .action(importCommand);
63
+ // export - Export skills to various formats
64
+ program
65
+ .command('export [skill]')
66
+ .description('Export skills to various formats (dir, zip, tarball, pack)')
67
+ .option('-f, --format <format>', 'Export format (dir, zip, tarball, pack)', 'dir')
68
+ .option('-o, --output <path>', 'Output directory')
69
+ .option('-g, --global', 'Export from global store')
70
+ .option('-a, --all', 'Export all skills')
71
+ .option('--overwrite', 'Overwrite existing files')
72
+ .action(exportCommand);
73
+ // search - Search for skills in the registry
74
+ program
75
+ .command('search <query>')
76
+ .description('Search for skills in the registry')
77
+ .option('-l, --limit <number>', 'Number of results per page', '20')
78
+ .option('-p, --page <number>', 'Page number', '1')
79
+ .option('-s, --sort <field>', 'Sort by (relevance, downloads, updated, name)')
80
+ .option('--json', 'Output as JSON')
81
+ .option('--registry <url>', 'Use custom registry')
82
+ .action(searchCommand);
83
+ // info - Get detailed information about a skill
84
+ program
85
+ .command('info <skill>')
86
+ .description('Get detailed information about a skill from the registry')
87
+ .option('--json', 'Output as JSON')
88
+ .option('--registry <url>', 'Use custom registry')
89
+ .action(infoCommand);
90
+ // login - Authenticate with a registry
91
+ program
92
+ .command('login')
93
+ .description('Authenticate with a registry')
94
+ .option('--registry <url>', 'Registry URL')
95
+ .option('-t, --token <token>', 'Auth token (for non-interactive use)')
96
+ .action(loginCommand);
97
+ // logout - Log out from a registry
98
+ program
99
+ .command('logout')
100
+ .description('Log out from a registry')
101
+ .option('--registry <url>', 'Registry URL')
102
+ .action(logoutCommand);
103
+ // whoami - Show current logged in user
104
+ program
105
+ .command('whoami')
106
+ .description('Show current logged in user')
107
+ .option('--registry <url>', 'Registry URL')
108
+ .action(whoamiCommand);
109
+ // publish - Publish a skill to the registry
110
+ program
111
+ .command('publish')
112
+ .description('Publish a skill to the registry')
113
+ .option('--tag <tag>', 'Publish with tag (default: latest)')
114
+ .option('--access <access>', 'Access level (public, restricted)')
115
+ .option('--registry <url>', 'Registry URL')
116
+ .option('--dry-run', 'Show what would be published without publishing')
117
+ .action(publishCommand);
118
+ }
119
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ interface ExportOptions {
2
+ format?: string;
3
+ output?: string;
4
+ global?: boolean;
5
+ overwrite?: boolean;
6
+ all?: boolean;
7
+ }
8
+ /**
9
+ * export command handler
10
+ */
11
+ export declare function exportCommand(skillName: string | undefined, options: ExportOptions): Promise<void>;
12
+ export {};
13
+ //# sourceMappingURL=export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.d.ts","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"AAWA,UAAU,aAAa;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CA+Ff"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * export command - Export skills to various formats
3
+ */
4
+ import { createExporter, createLocalStore, createGlobalStore, } from 'skillpkg-core';
5
+ import { logger, colors, withSpinner } from '../ui/index.js';
6
+ /**
7
+ * export command handler
8
+ */
9
+ export async function exportCommand(skillName, options) {
10
+ const exporter = createExporter();
11
+ const store = options.global ? createGlobalStore() : createLocalStore();
12
+ // Check if store is initialized
13
+ if (!(await store.isInitialized())) {
14
+ logger.error('No skills installed');
15
+ logger.log(`Run ${colors.cyan('skillpkg install <skill>')} first`);
16
+ process.exit(1);
17
+ }
18
+ logger.header('Export Skills');
19
+ // Validate format
20
+ const format = validateFormat(options.format || 'dir');
21
+ if (!format) {
22
+ logger.error(`Invalid format: ${options.format}`);
23
+ logger.log('Valid formats: dir, zip, tarball, pack');
24
+ process.exit(1);
25
+ }
26
+ // Get skills to export
27
+ let skills = [];
28
+ if (options.all || !skillName) {
29
+ // Export all skills
30
+ const skillsMeta = await store.listSkills();
31
+ for (const meta of skillsMeta) {
32
+ const skill = await store.getSkill(meta.name);
33
+ if (skill) {
34
+ skills.push(skill);
35
+ }
36
+ }
37
+ }
38
+ else {
39
+ // Export specific skill
40
+ const skill = await store.getSkill(skillName);
41
+ if (!skill) {
42
+ logger.error(`Skill ${colors.cyan(skillName)} not found`);
43
+ process.exit(1);
44
+ }
45
+ skills.push(skill);
46
+ }
47
+ if (skills.length === 0) {
48
+ logger.warn('No skills to export');
49
+ return;
50
+ }
51
+ logger.log(`Exporting ${colors.cyan(String(skills.length))} skill(s) as ${colors.cyan(format)}`);
52
+ logger.blank();
53
+ const outputDir = options.output || process.cwd();
54
+ let successCount = 0;
55
+ let failCount = 0;
56
+ for (const skill of skills) {
57
+ const result = await withSpinner(`Exporting ${colors.cyan(skill.name)}`, () => exporter.export(skill, {
58
+ format,
59
+ output: outputDir,
60
+ overwrite: options.overwrite,
61
+ }), {
62
+ successText: `Exported ${colors.cyan(skill.name)}`,
63
+ failText: `Failed to export ${skill.name}`,
64
+ });
65
+ if (result.success) {
66
+ successCount++;
67
+ logger.log(` ${colors.dim(result.outputPath)}`);
68
+ if (result.size) {
69
+ logger.log(` ${colors.dim(`Size: ${formatSize(result.size)}`)}`);
70
+ }
71
+ }
72
+ else {
73
+ failCount++;
74
+ logger.error(` ${result.error}`);
75
+ }
76
+ }
77
+ // Summary
78
+ logger.blank();
79
+ logger.log(`Summary: ${colors.green(String(successCount))} exported, ` +
80
+ `${colors.red(String(failCount))} failed`);
81
+ logger.blank();
82
+ if (successCount > 0 && format === 'pack') {
83
+ logger.log('Install with:');
84
+ logger.item(`${colors.cyan('skillpkg install <file>.skillpkg')}`);
85
+ logger.blank();
86
+ }
87
+ }
88
+ /**
89
+ * Validate and normalize export format
90
+ */
91
+ function validateFormat(format) {
92
+ const validFormats = ['dir', 'zip', 'tarball', 'pack'];
93
+ const normalized = format.toLowerCase();
94
+ // Handle aliases
95
+ if (format === 'tar.gz' || format === 'tgz') {
96
+ return 'tarball';
97
+ }
98
+ if (validFormats.includes(normalized)) {
99
+ return normalized;
100
+ }
101
+ return null;
102
+ }
103
+ /**
104
+ * Format file size for display
105
+ */
106
+ function formatSize(bytes) {
107
+ if (bytes < 1024) {
108
+ return `${bytes} B`;
109
+ }
110
+ else if (bytes < 1024 * 1024) {
111
+ return `${(bytes / 1024).toFixed(1)} KB`;
112
+ }
113
+ else {
114
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
115
+ }
116
+ }
117
+ //# sourceMappingURL=export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export.js","sourceRoot":"","sources":["../../src/commands/export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ interface ImportOptions {
2
+ from?: string;
3
+ global?: boolean;
4
+ dryRun?: boolean;
5
+ overwrite?: boolean;
6
+ }
7
+ /**
8
+ * import command handler
9
+ */
10
+ export declare function importCommand(path: string | undefined, options: ImportOptions): Promise<void>;
11
+ export {};
12
+ //# sourceMappingURL=import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":"AAWA,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CA8Gf"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * import command - Import skills from platform formats
3
+ */
4
+ import { createImporter, createLocalStore, createGlobalStore, } from 'skillpkg-core';
5
+ import { logger, colors, withSpinner, createTable } from '../ui/index.js';
6
+ /**
7
+ * import command handler
8
+ */
9
+ export async function importCommand(path, options) {
10
+ const importer = createImporter();
11
+ const store = options.global ? createGlobalStore() : createLocalStore();
12
+ // Determine source path
13
+ const sourcePath = path || options.from || process.cwd();
14
+ logger.header('Import Skills');
15
+ // Detect importable files
16
+ const detected = await withSpinner(`Scanning ${colors.cyan(sourcePath)}`, () => importer.detect(sourcePath), {
17
+ successText: 'Scan complete',
18
+ failText: 'Scan failed',
19
+ });
20
+ if (detected.length === 0) {
21
+ logger.blank();
22
+ logger.warn('No importable skill files found');
23
+ logger.blank();
24
+ logger.log('Supported formats:');
25
+ logger.item(`${colors.cyan('Claude Code')}: .claude/skills/*/SKILL.md`);
26
+ logger.item(`${colors.cyan('Codex')}: .codex/agents/*.md`);
27
+ logger.item(`${colors.cyan('Copilot')}: .github/copilot-instructions.md`);
28
+ logger.item(`${colors.cyan('Cline')}: .cline/rules/*.md`);
29
+ logger.blank();
30
+ return;
31
+ }
32
+ // Show detected files
33
+ logger.blank();
34
+ logger.log(`Found ${colors.cyan(String(detected.length))} importable file(s):`);
35
+ logger.blank();
36
+ showDetectedTable(detected);
37
+ if (options.dryRun) {
38
+ logger.blank();
39
+ logger.warn('Dry run mode - no changes will be made');
40
+ logger.blank();
41
+ return;
42
+ }
43
+ logger.blank();
44
+ // Import each file
45
+ const results = [];
46
+ let successCount = 0;
47
+ let failCount = 0;
48
+ for (const file of detected) {
49
+ const result = await importer.importFile(file.path);
50
+ results.push(result);
51
+ if (result.success && result.skill) {
52
+ // Save to store
53
+ try {
54
+ // Initialize store if needed
55
+ if (!(await store.isInitialized())) {
56
+ await store.init();
57
+ }
58
+ // Check if skill already exists
59
+ if (await store.hasSkill(result.skill.name)) {
60
+ if (options.overwrite) {
61
+ await store.removeSkill(result.skill.name);
62
+ }
63
+ else {
64
+ logger.warn(`${colors.cyan(result.skill.name)} already exists (use --overwrite to replace)`);
65
+ failCount++;
66
+ continue;
67
+ }
68
+ }
69
+ // Add skill to store
70
+ await store.addSkill(result.skill);
71
+ logger.success(`Imported ${colors.cyan(result.skill.name)}@${result.skill.version} from ${file.displayName}`);
72
+ successCount++;
73
+ }
74
+ catch (error) {
75
+ logger.error(`Failed to save ${result.skill.name}: ${error instanceof Error ? error.message : String(error)}`);
76
+ failCount++;
77
+ }
78
+ }
79
+ else {
80
+ logger.error(`Failed to import ${file.path}: ${result.error}`);
81
+ failCount++;
82
+ }
83
+ }
84
+ // Summary
85
+ logger.blank();
86
+ logger.log(`Summary: ${colors.green(String(successCount))} imported, ` +
87
+ `${colors.red(String(failCount))} failed`);
88
+ logger.blank();
89
+ if (successCount > 0) {
90
+ logger.log('Next steps:');
91
+ logger.item(`Run ${colors.cyan('skillpkg list')} to see imported skills`);
92
+ logger.item(`Run ${colors.cyan('skillpkg sync')} to sync to platforms`);
93
+ logger.blank();
94
+ }
95
+ }
96
+ /**
97
+ * Show detected files in a table
98
+ */
99
+ function showDetectedTable(detected) {
100
+ const table = createTable({
101
+ head: ['File', 'Platform'],
102
+ });
103
+ for (const file of detected) {
104
+ // Shorten path for display
105
+ const displayPath = shortenPath(file.path, 50);
106
+ table.push([displayPath, file.displayName]);
107
+ }
108
+ logger.log(table.toString());
109
+ }
110
+ /**
111
+ * Shorten a path for display
112
+ */
113
+ function shortenPath(path, maxLength) {
114
+ if (path.length <= maxLength) {
115
+ return path;
116
+ }
117
+ const parts = path.split('/');
118
+ if (parts.length <= 3) {
119
+ return path;
120
+ }
121
+ // Keep first and last parts
122
+ const first = parts[0] || '';
123
+ const last = parts.slice(-2).join('/');
124
+ return `${first}/.../${last}`;
125
+ }
126
+ //# sourceMappingURL=import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import.js","sourceRoot":"","sources":["../../src/commands/import.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ interface InfoCommandOptions {
2
+ json?: boolean;
3
+ registry?: string;
4
+ }
5
+ /**
6
+ * info command handler
7
+ */
8
+ export declare function infoCommand(skillName: string | undefined, options: InfoCommandOptions): Promise<void>;
9
+ export {};
10
+ //# sourceMappingURL=info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"AAUA,UAAU,kBAAkB;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAoGf"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * info command - Get detailed information about a skill
3
+ */
4
+ import { createRegistryClient, RegistryError, DEFAULT_REGISTRY_URL, } from 'skillpkg-core';
5
+ import { logger, colors } from '../ui/index.js';
6
+ /**
7
+ * info command handler
8
+ */
9
+ export async function infoCommand(skillName, options) {
10
+ if (!skillName) {
11
+ logger.error('Skill name is required');
12
+ logger.log(`Usage: ${colors.cyan('skillpkg info <skill>')}`);
13
+ process.exit(1);
14
+ }
15
+ const client = createRegistryClient({
16
+ registryUrl: options.registry || DEFAULT_REGISTRY_URL,
17
+ });
18
+ try {
19
+ const info = await client.getSkillInfo(skillName);
20
+ // JSON output mode
21
+ if (options.json) {
22
+ console.log(JSON.stringify(info, null, 2));
23
+ return;
24
+ }
25
+ logger.header(`${info.name}`);
26
+ // Basic info
27
+ logger.log(`${colors.dim('Version:')} ${info.version}`);
28
+ if (info.description) {
29
+ logger.log(`${colors.dim('Description:')} ${info.description}`);
30
+ }
31
+ if (info.author) {
32
+ const author = info.author.email
33
+ ? `${info.author.name} <${info.author.email}>`
34
+ : info.author.name;
35
+ logger.log(`${colors.dim('Author:')} ${author}`);
36
+ }
37
+ if (info.license) {
38
+ logger.log(`${colors.dim('License:')} ${info.license}`);
39
+ }
40
+ if (info.homepage) {
41
+ logger.log(`${colors.dim('Homepage:')} ${colors.cyan(info.homepage)}`);
42
+ }
43
+ if (info.repository) {
44
+ logger.log(`${colors.dim('Repository:')} ${colors.cyan(info.repository)}`);
45
+ }
46
+ logger.blank();
47
+ // Downloads
48
+ logger.log(colors.dim('Downloads:'));
49
+ logger.log(` Total: ${formatNumber(info.downloads.total)}`);
50
+ logger.log(` Weekly: ${formatNumber(info.downloads.weekly)}`);
51
+ logger.log(` Monthly: ${formatNumber(info.downloads.monthly)}`);
52
+ logger.blank();
53
+ // Keywords
54
+ if (info.keywords && info.keywords.length > 0) {
55
+ logger.log(`${colors.dim('Keywords:')} ${info.keywords.join(', ')}`);
56
+ logger.blank();
57
+ }
58
+ // Versions
59
+ if (info.versions && info.versions.length > 0) {
60
+ logger.log(colors.dim('Versions:'));
61
+ const displayVersions = info.versions.slice(0, 5);
62
+ for (const ver of displayVersions) {
63
+ const date = new Date(ver.publishedAt).toLocaleDateString();
64
+ const deprecated = ver.deprecated ? colors.yellow(' (deprecated)') : '';
65
+ logger.log(` ${ver.version} - ${colors.dim(date)}${deprecated}`);
66
+ }
67
+ if (info.versions.length > 5) {
68
+ logger.log(colors.dim(` ... and ${info.versions.length - 5} more`));
69
+ }
70
+ logger.blank();
71
+ }
72
+ // Dates
73
+ logger.log(`${colors.dim('Created:')} ${formatDate(info.createdAt)}`);
74
+ logger.log(`${colors.dim('Updated:')} ${formatDate(info.updatedAt)}`);
75
+ logger.blank();
76
+ // Install command
77
+ logger.log('Install:');
78
+ logger.log(` ${colors.cyan(`skillpkg install ${info.name}`)}`);
79
+ logger.blank();
80
+ }
81
+ catch (error) {
82
+ if (error instanceof RegistryError) {
83
+ if (error.code === 'SKILL_NOT_IN_REGISTRY') {
84
+ logger.error(`Skill '${skillName}' not found in registry`);
85
+ logger.log(`Try: ${colors.cyan(`skillpkg search ${skillName}`)}`);
86
+ }
87
+ else if (error.code === 'NETWORK_ERROR') {
88
+ logger.error('Unable to connect to registry');
89
+ logger.log(`Registry URL: ${colors.dim(client.getRegistryUrl())}`);
90
+ }
91
+ else {
92
+ logger.error(`Registry error: ${error.message}`);
93
+ }
94
+ }
95
+ else {
96
+ logger.error(`Failed to get skill info: ${error instanceof Error ? error.message : error}`);
97
+ }
98
+ process.exit(1);
99
+ }
100
+ }
101
+ /**
102
+ * Format number with thousands separator
103
+ */
104
+ function formatNumber(num) {
105
+ return num.toLocaleString();
106
+ }
107
+ /**
108
+ * Format date for display
109
+ */
110
+ function formatDate(isoDate) {
111
+ const date = new Date(isoDate);
112
+ return date.toLocaleDateString('en-US', {
113
+ year: 'numeric',
114
+ month: 'short',
115
+ day: 'numeric',
116
+ });
117
+ }
118
+ //# sourceMappingURL=info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ interface InitOptions {
2
+ yes?: boolean;
3
+ name?: string;
4
+ }
5
+ /**
6
+ * init command handler
7
+ */
8
+ export declare function initCommand(options: InitOptions): Promise<void>;
9
+ export {};
10
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAWA,UAAU,WAAW;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AA4CD;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAwGrE"}