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
@@ -0,0 +1,161 @@
1
+ /**
2
+ * publish command - Publish a skill to the registry
3
+ */
4
+ import { existsSync } from 'fs';
5
+ import { readFile } from 'fs/promises';
6
+ import { resolve } from 'path';
7
+ import { parse, createRegistryClient, createExporter, isAuthenticated, RegistryError, DEFAULT_REGISTRY_URL, } from 'skillpkg-core';
8
+ import { logger, colors, withSpinner, confirm } from '../ui/index.js';
9
+ /**
10
+ * publish command handler
11
+ */
12
+ export async function publishCommand(options) {
13
+ const registryUrl = options.registry || DEFAULT_REGISTRY_URL;
14
+ logger.header('Publish Skill');
15
+ // Check authentication
16
+ if (!(await isAuthenticated(registryUrl))) {
17
+ logger.error('Not logged in');
18
+ logger.log(`Run ${colors.cyan('skillpkg login')} first`);
19
+ process.exit(1);
20
+ }
21
+ // Find skill.yaml
22
+ const skillPath = resolve(process.cwd(), 'skill.yaml');
23
+ if (!existsSync(skillPath)) {
24
+ logger.error('No skill.yaml found in current directory');
25
+ logger.log(`Run ${colors.cyan('skillpkg init')} to create one`);
26
+ process.exit(1);
27
+ }
28
+ // Parse skill.yaml
29
+ let skill;
30
+ try {
31
+ const content = await readFile(skillPath, 'utf-8');
32
+ const result = parse(content);
33
+ if (!result.success || !result.data) {
34
+ logger.error('Failed to parse skill.yaml:');
35
+ result.errors?.forEach((e) => logger.error(` ${e.message}`));
36
+ process.exit(1);
37
+ }
38
+ skill = result.data;
39
+ }
40
+ catch (error) {
41
+ logger.error(`Failed to read skill.yaml: ${error instanceof Error ? error.message : error}`);
42
+ process.exit(1);
43
+ }
44
+ // Validate required fields
45
+ const errors = validateForPublish(skill);
46
+ if (errors.length > 0) {
47
+ logger.error('Skill validation failed:');
48
+ errors.forEach((e) => logger.error(` • ${e}`));
49
+ process.exit(1);
50
+ }
51
+ logger.log(`Publishing ${colors.cyan(skill.name)}@${colors.cyan(skill.version)}`);
52
+ if (skill.description) {
53
+ logger.log(colors.dim(skill.description));
54
+ }
55
+ logger.blank();
56
+ // Dry run mode
57
+ if (options.dryRun) {
58
+ logger.info('Dry run mode - not actually publishing');
59
+ logger.blank();
60
+ logger.log('Would publish:');
61
+ logger.log(` Name: ${skill.name}`);
62
+ logger.log(` Version: ${skill.version}`);
63
+ logger.log(` Tag: ${options.tag || 'latest'}`);
64
+ logger.log(` Access: ${options.access || 'public'}`);
65
+ return;
66
+ }
67
+ // Confirm publish
68
+ const shouldPublish = await confirm(`Publish ${skill.name}@${skill.version} to ${registryUrl}?`, true);
69
+ if (!shouldPublish) {
70
+ logger.info('Publish cancelled');
71
+ return;
72
+ }
73
+ // Create tarball
74
+ const exporter = createExporter();
75
+ let tarball;
76
+ try {
77
+ tarball = await withSpinner('Creating package', async () => {
78
+ const result = await exporter.export(skill, { format: 'pack' });
79
+ if (!result.success) {
80
+ throw new Error(result.error || 'Failed to create package');
81
+ }
82
+ // Read the tarball from disk
83
+ const tarballPath = result.outputPath;
84
+ return readFile(tarballPath);
85
+ });
86
+ }
87
+ catch (error) {
88
+ logger.error(`Failed to create package: ${error instanceof Error ? error.message : error}`);
89
+ process.exit(1);
90
+ }
91
+ // Publish to registry
92
+ const client = createRegistryClient({ registryUrl });
93
+ const publishOptions = {};
94
+ if (options.tag) {
95
+ publishOptions.tag = options.tag;
96
+ }
97
+ if (options.access) {
98
+ publishOptions.access = options.access;
99
+ }
100
+ try {
101
+ const result = await withSpinner('Publishing to registry', () => client.publish(tarball, publishOptions));
102
+ logger.blank();
103
+ logger.success(`Published ${colors.cyan(skill.name)}@${colors.cyan(skill.version)}`);
104
+ logger.blank();
105
+ logger.log(`View at: ${colors.cyan(result.url)}`);
106
+ logger.blank();
107
+ logger.log('Install with:');
108
+ logger.log(` ${colors.cyan(`skillpkg install ${skill.name}`)}`);
109
+ logger.blank();
110
+ }
111
+ catch (error) {
112
+ if (error instanceof RegistryError) {
113
+ switch (error.code) {
114
+ case 'AUTH_REQUIRED':
115
+ logger.error('Authentication required');
116
+ logger.log(`Run ${colors.cyan('skillpkg login')} first`);
117
+ break;
118
+ case 'VERSION_EXISTS':
119
+ logger.error(`Version ${skill.version} already exists`);
120
+ logger.log('Update the version in skill.yaml and try again');
121
+ break;
122
+ case 'AUTH_FAILED':
123
+ logger.error('Permission denied');
124
+ logger.log('You may not have permission to publish this skill');
125
+ break;
126
+ default:
127
+ logger.error(`Publish failed: ${error.message}`);
128
+ }
129
+ }
130
+ else {
131
+ logger.error(`Publish failed: ${error instanceof Error ? error.message : error}`);
132
+ }
133
+ process.exit(1);
134
+ }
135
+ }
136
+ /**
137
+ * Validate skill for publishing
138
+ */
139
+ function validateForPublish(skill) {
140
+ const errors = [];
141
+ if (!skill.name) {
142
+ errors.push('name is required');
143
+ }
144
+ else if (!/^[a-z0-9-]+$/.test(skill.name)) {
145
+ errors.push('name must be lowercase alphanumeric with hyphens only');
146
+ }
147
+ if (!skill.version) {
148
+ errors.push('version is required');
149
+ }
150
+ else if (!/^\d+\.\d+\.\d+/.test(skill.version)) {
151
+ errors.push('version must be a valid semver (e.g., 1.0.0)');
152
+ }
153
+ if (!skill.description) {
154
+ errors.push('description is recommended for publishing');
155
+ }
156
+ if (!skill.instructions || skill.instructions.trim() === '') {
157
+ errors.push('instructions are required');
158
+ }
159
+ return errors;
160
+ }
161
+ //# 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,13 @@
1
+ interface SearchCommandOptions {
2
+ limit?: string;
3
+ page?: string;
4
+ sort?: string;
5
+ json?: boolean;
6
+ registry?: string;
7
+ }
8
+ /**
9
+ * search command handler
10
+ */
11
+ export declare function searchCommand(query: string | undefined, options: SearchCommandOptions): Promise<void>;
12
+ export {};
13
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAWA,UAAU,oBAAoB;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAkFf"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * search command - Search for skills in the registry
3
+ */
4
+ import { createRegistryClient, RegistryError, DEFAULT_REGISTRY_URL, } from 'skillpkg-core';
5
+ import { logger, colors } from '../ui/index.js';
6
+ /**
7
+ * search command handler
8
+ */
9
+ export async function searchCommand(query, options) {
10
+ if (!query) {
11
+ logger.error('Search query is required');
12
+ logger.log(`Usage: ${colors.cyan('skillpkg search <query>')}`);
13
+ process.exit(1);
14
+ }
15
+ const client = createRegistryClient({
16
+ registryUrl: options.registry || DEFAULT_REGISTRY_URL,
17
+ });
18
+ logger.header('Search Skills');
19
+ logger.log(`Searching for: ${colors.cyan(query)}`);
20
+ logger.blank();
21
+ try {
22
+ const searchOptions = {};
23
+ if (options.limit) {
24
+ searchOptions.limit = parseInt(options.limit, 10);
25
+ }
26
+ if (options.page) {
27
+ searchOptions.page = parseInt(options.page, 10);
28
+ }
29
+ if (options.sort) {
30
+ searchOptions.sort = options.sort;
31
+ }
32
+ const result = await client.search(query, searchOptions);
33
+ // JSON output mode
34
+ if (options.json) {
35
+ console.log(JSON.stringify(result, null, 2));
36
+ return;
37
+ }
38
+ if (result.results.length === 0) {
39
+ logger.warn('No skills found matching your query');
40
+ return;
41
+ }
42
+ logger.log(`Found ${colors.cyan(String(result.total))} skill(s)`);
43
+ logger.blank();
44
+ // Display results
45
+ for (const item of result.results) {
46
+ const name = colors.cyan(item.name);
47
+ const version = colors.dim(`@${item.version}`);
48
+ const downloads = colors.dim(`(${formatDownloads(item.downloads)} downloads)`);
49
+ logger.log(`${name}${version} ${downloads}`);
50
+ if (item.description) {
51
+ logger.log(` ${colors.dim(item.description)}`);
52
+ }
53
+ if (item.keywords && item.keywords.length > 0) {
54
+ logger.log(` ${colors.dim('Keywords:')} ${item.keywords.join(', ')}`);
55
+ }
56
+ logger.blank();
57
+ }
58
+ // Pagination info
59
+ const totalPages = Math.ceil(result.total / result.limit);
60
+ if (totalPages > 1) {
61
+ logger.log(colors.dim(`Page ${result.page} of ${totalPages}. `) +
62
+ colors.dim(`Use --page to navigate.`));
63
+ }
64
+ }
65
+ catch (error) {
66
+ if (error instanceof RegistryError) {
67
+ if (error.code === 'NETWORK_ERROR') {
68
+ logger.error('Unable to connect to registry');
69
+ logger.log(`Registry URL: ${colors.dim(client.getRegistryUrl())}`);
70
+ logger.log('Check your network connection or try again later.');
71
+ }
72
+ else {
73
+ logger.error(`Registry error: ${error.message}`);
74
+ }
75
+ }
76
+ else {
77
+ logger.error(`Search failed: ${error instanceof Error ? error.message : error}`);
78
+ }
79
+ process.exit(1);
80
+ }
81
+ }
82
+ /**
83
+ * Format download count for display
84
+ */
85
+ function formatDownloads(count) {
86
+ if (count >= 1000000) {
87
+ return `${(count / 1000000).toFixed(1)}M`;
88
+ }
89
+ if (count >= 1000) {
90
+ return `${(count / 1000).toFixed(1)}K`;
91
+ }
92
+ return String(count);
93
+ }
94
+ //# 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,10 @@
1
+ interface SyncOptions {
2
+ target?: string;
3
+ dryRun?: boolean;
4
+ }
5
+ /**
6
+ * sync command handler
7
+ */
8
+ export declare function syncCommand(skillName: string | undefined, options: SyncOptions): Promise<void>;
9
+ export {};
10
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAaA,UAAU,WAAW;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CA6If"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * sync command - Sync skills to platforms
3
+ */
4
+ import { createLocalStore, createAdapterManager, parse, } from 'skillpkg-core';
5
+ import { readFile } from 'fs/promises';
6
+ import { join } from 'path';
7
+ import { logger, colors, withSpinner } from '../ui/index.js';
8
+ /**
9
+ * sync command handler
10
+ */
11
+ export async function syncCommand(skillName, options) {
12
+ const store = createLocalStore();
13
+ const adapterManager = createAdapterManager();
14
+ // Check if store is initialized
15
+ if (!(await store.isInitialized())) {
16
+ logger.error('No skills installed');
17
+ logger.log(`Run ${colors.cyan('skillpkg install <skill>')} first`);
18
+ process.exit(1);
19
+ }
20
+ // Get skills metadata
21
+ const skillsMeta = await store.listSkills();
22
+ if (skillsMeta.length === 0) {
23
+ logger.info('No skills to sync');
24
+ return;
25
+ }
26
+ // Filter by name if provided
27
+ const targetSkillsMeta = skillName
28
+ ? skillsMeta.filter((s) => s.name === skillName)
29
+ : skillsMeta;
30
+ if (targetSkillsMeta.length === 0) {
31
+ logger.error(`Skill ${colors.cyan(skillName || '')} not found`);
32
+ process.exit(1);
33
+ }
34
+ // Load full skill data
35
+ const skills = [];
36
+ for (const meta of targetSkillsMeta) {
37
+ const skill = await loadSkillContent(meta.name);
38
+ if (skill) {
39
+ skills.push(skill);
40
+ }
41
+ }
42
+ // Parse target platforms
43
+ const platforms = options.target
44
+ ? options.target.split(',').map((p) => p.trim())
45
+ : undefined; // undefined = all platforms
46
+ logger.header('Sync Skills to Platforms');
47
+ // Detect available platforms
48
+ const detected = await adapterManager.detectPlatforms(process.cwd());
49
+ const presentPlatforms = detected.filter((p) => p.detected);
50
+ if (presentPlatforms.length === 0) {
51
+ logger.warn('No AI platforms detected in this project');
52
+ logger.blank();
53
+ logger.log('Supported platforms:');
54
+ for (const adapter of adapterManager.listAdapters()) {
55
+ logger.item(`${colors.cyan(adapter.displayName)} (${adapter.name})`);
56
+ }
57
+ logger.blank();
58
+ logger.log('Create platform directories to enable sync:');
59
+ logger.item(`${colors.dim('.claude/')} for Claude Code`);
60
+ logger.item(`${colors.dim('.codex/')} or ${colors.dim('AGENTS.md')} for Codex`);
61
+ logger.item(`${colors.dim('.github/')} for GitHub Copilot`);
62
+ logger.item(`${colors.dim('.cline/')} for VS Code Cline`);
63
+ logger.blank();
64
+ return;
65
+ }
66
+ logger.log('Detected platforms:');
67
+ for (const platform of presentPlatforms) {
68
+ logger.item(`${colors.green('✓')} ${platform.displayName}`);
69
+ }
70
+ logger.blank();
71
+ if (options.dryRun) {
72
+ logger.warn('Dry run mode - no changes will be made');
73
+ logger.blank();
74
+ }
75
+ logger.log(`Skills to sync: ${colors.cyan(String(skills.length))}`);
76
+ logger.blank();
77
+ // Sync
78
+ const result = await withSpinner('Syncing skills to platforms', () => adapterManager.sync(skills, {
79
+ projectPath: process.cwd(),
80
+ platforms,
81
+ dryRun: options.dryRun,
82
+ }), {
83
+ successText: 'Sync complete',
84
+ failText: 'Sync failed',
85
+ });
86
+ logger.blank();
87
+ // Show results
88
+ if (result.synced.length > 0) {
89
+ logger.success('Synced:');
90
+ for (const item of result.synced) {
91
+ logger.item(`${colors.cyan(item.skill)} → ${colors.green(item.platform)}`);
92
+ logger.log(` ${colors.dim(item.path)}`);
93
+ }
94
+ logger.blank();
95
+ }
96
+ if (result.skipped.length > 0) {
97
+ logger.warn('Skipped:');
98
+ for (const item of result.skipped) {
99
+ logger.item(`${colors.cyan(item.skill)} → ${colors.yellow(item.platform)}: ${item.reason}`);
100
+ }
101
+ logger.blank();
102
+ }
103
+ if (result.errors.length > 0) {
104
+ logger.error('Errors:');
105
+ for (const item of result.errors) {
106
+ logger.item(`${colors.cyan(item.skill)} → ${colors.red(item.platform)}: ${item.error}`);
107
+ }
108
+ logger.blank();
109
+ }
110
+ // Update registry with synced platforms
111
+ if (!options.dryRun && result.synced.length > 0) {
112
+ await updateSyncedPlatformsInRegistry(store, result.synced);
113
+ }
114
+ // Summary
115
+ logger.log(`Summary: ${colors.green(String(result.synced.length))} synced, ` +
116
+ `${colors.yellow(String(result.skipped.length))} skipped, ` +
117
+ `${colors.red(String(result.errors.length))} errors`);
118
+ logger.blank();
119
+ }
120
+ /**
121
+ * Load skill content from store
122
+ */
123
+ async function loadSkillContent(skillName) {
124
+ const skillDir = join(process.cwd(), '.skillpkg', 'skills', skillName);
125
+ const yamlPath = join(skillDir, 'skill.yaml');
126
+ try {
127
+ const content = await readFile(yamlPath, 'utf-8');
128
+ const result = parse(content);
129
+ return result.success && result.data ? result.data : null;
130
+ }
131
+ catch {
132
+ return null;
133
+ }
134
+ }
135
+ /**
136
+ * Update synced platforms in registry
137
+ */
138
+ async function updateSyncedPlatformsInRegistry(store, synced) {
139
+ // Group by skill
140
+ const bySkill = new Map();
141
+ for (const item of synced) {
142
+ if (!bySkill.has(item.skill)) {
143
+ bySkill.set(item.skill, []);
144
+ }
145
+ bySkill.get(item.skill).push(item.platform);
146
+ }
147
+ // Update each skill's synced platforms
148
+ for (const [skillName, platforms] of bySkill) {
149
+ // Get existing entry to merge platforms
150
+ const entry = await store.getSkillEntry(skillName);
151
+ if (entry) {
152
+ // Merge with existing platforms
153
+ const existingPlatforms = new Set(entry.syncedPlatforms || []);
154
+ for (const p of platforms) {
155
+ existingPlatforms.add(p);
156
+ }
157
+ // Update using store method
158
+ await store.updateSyncedPlatforms(skillName, Array.from(existingPlatforms));
159
+ }
160
+ }
161
+ }
162
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ interface UninstallOptions {
2
+ global?: boolean;
3
+ clean?: boolean;
4
+ }
5
+ /**
6
+ * uninstall command handler
7
+ */
8
+ export declare function uninstallCommand(skillName: string, options: UninstallOptions): Promise<void>;
9
+ export {};
10
+ //# sourceMappingURL=uninstall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AAMA,UAAU,gBAAgB;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CAqDf"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * uninstall command - Remove a skill
3
+ */
4
+ import { createGlobalStore, createLocalStore, createAdapterManager } from 'skillpkg-core';
5
+ import { logger, colors, withSpinner } from '../ui/index.js';
6
+ /**
7
+ * uninstall command handler
8
+ */
9
+ export async function uninstallCommand(skillName, options) {
10
+ const store = options.global ? createGlobalStore() : createLocalStore();
11
+ // Check if store is initialized
12
+ if (!(await store.isInitialized())) {
13
+ logger.error('No skills installed');
14
+ process.exit(1);
15
+ }
16
+ // Check if skill exists
17
+ if (!(await store.hasSkill(skillName))) {
18
+ logger.error(`Skill ${colors.cyan(skillName)} is not installed`);
19
+ process.exit(1);
20
+ }
21
+ // Get skill info before removal
22
+ const skill = await store.getSkill(skillName);
23
+ const version = skill?.version || 'unknown';
24
+ // Remove skill from store
25
+ const removed = await withSpinner(`Uninstalling ${colors.cyan(skillName)}@${version}`, () => store.removeSkill(skillName), {
26
+ successText: `Uninstalled ${colors.cyan(skillName)}@${version}`,
27
+ failText: `Failed to uninstall ${skillName}`,
28
+ });
29
+ if (!removed) {
30
+ logger.error(`Failed to remove skill ${skillName}`);
31
+ process.exit(1);
32
+ }
33
+ // Clean synced platform files if --clean flag is set
34
+ if (options.clean) {
35
+ const adapterManager = createAdapterManager();
36
+ await withSpinner(`Cleaning synced files from platforms`, () => adapterManager.removeFromAllPlatforms(skillName, process.cwd()), {
37
+ successText: `Cleaned synced files`,
38
+ failText: `Failed to clean some platform files`,
39
+ });
40
+ }
41
+ logger.blank();
42
+ logger.success(`Removed ${colors.cyan(skillName)}`);
43
+ if (options.clean) {
44
+ logger.log(`${colors.dim('Also removed synced files from all platforms')}`);
45
+ }
46
+ logger.blank();
47
+ }
48
+ //# sourceMappingURL=uninstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1F,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAO7D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,SAAiB,EACjB,OAAyB;IAEzB,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAExE,gCAAgC;IAChC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC;QACnC,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,wBAAwB;IACxB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QACvC,MAAM,CAAC,KAAK,CAAC,SAAS,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,gCAAgC;IAChC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,KAAK,EAAE,OAAO,IAAI,SAAS,CAAC;IAE5C,0BAA0B;IAC1B,MAAM,OAAO,GAAG,MAAM,WAAW,CAC/B,gBAAgB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,OAAO,EAAE,EACnD,GAAG,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,EAClC;QACE,WAAW,EAAE,eAAe,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,OAAO,EAAE;QAC/D,QAAQ,EAAE,uBAAuB,SAAS,EAAE;KAC7C,CACF,CAAC;IAEF,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,0BAA0B,SAAS,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,qDAAqD;IACrD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,cAAc,GAAG,oBAAoB,EAAE,CAAC;QAC9C,MAAM,WAAW,CACf,sCAAsC,EACtC,GAAG,EAAE,CAAC,cAAc,CAAC,sBAAsB,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,EACrE;YACE,WAAW,EAAE,sBAAsB;YACnC,QAAQ,EAAE,qCAAqC;SAChD,CACF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,KAAK,EAAE,CAAC;IACf,MAAM,CAAC,OAAO,CAAC,WAAW,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACpD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,8CAA8C,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * @skillpkg/cli - Agent Skills Package Manager CLI
4
+ */
5
+ import { program } from 'commander';
6
+ import { registerCommands } from './cli.js';
7
+ // Get version from package.json
8
+ const VERSION = '0.0.1';
9
+ program
10
+ .name('skillpkg')
11
+ .description('Agent Skills Package Manager - Install once, use everywhere')
12
+ .version(VERSION, '-v, --version', 'Output the current version');
13
+ // Register all commands
14
+ registerCommands(program);
15
+ // Parse arguments
16
+ program.parse();
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;GAEG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAE5C,gCAAgC;AAChC,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,OAAO;KACJ,IAAI,CAAC,UAAU,CAAC;KAChB,WAAW,CAAC,6DAA6D,CAAC;KAC1E,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,4BAA4B,CAAC,CAAC;AAEnE,wBAAwB;AACxB,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAE1B,kBAAkB;AAClB,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * UI utilities - public API
3
+ */
4
+ export { logger, colors } from './logger.js';
5
+ export { createSpinner, withSpinner } from './spinner.js';
6
+ export { createTable, printTable, type TableOptions } from './table.js';
7
+ export { createPrompt, confirm, input, password, select } from './prompt.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * UI utilities - public API
3
+ */
4
+ export { logger, colors } from './logger.js';
5
+ export { createSpinner, withSpinner } from './spinner.js';
6
+ export { createTable, printTable } from './table.js';
7
+ export { createPrompt, confirm, input, password, select } from './prompt.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAqB,MAAM,YAAY,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}