skillpkg-cli 0.1.1 → 0.3.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 (37) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +40 -3
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/deps.d.ts +17 -0
  5. package/dist/commands/deps.d.ts.map +1 -0
  6. package/dist/commands/deps.js +234 -0
  7. package/dist/commands/deps.js.map +1 -0
  8. package/dist/commands/init.d.ts.map +1 -1
  9. package/dist/commands/init.js +77 -107
  10. package/dist/commands/init.js.map +1 -1
  11. package/dist/commands/install.d.ts.map +1 -1
  12. package/dist/commands/install.js +272 -148
  13. package/dist/commands/install.js.map +1 -1
  14. package/dist/commands/list.d.ts.map +1 -1
  15. package/dist/commands/list.js +47 -17
  16. package/dist/commands/list.js.map +1 -1
  17. package/dist/commands/migrate.d.ts +10 -0
  18. package/dist/commands/migrate.d.ts.map +1 -0
  19. package/dist/commands/migrate.js +122 -0
  20. package/dist/commands/migrate.js.map +1 -0
  21. package/dist/commands/search.d.ts +0 -3
  22. package/dist/commands/search.d.ts.map +1 -1
  23. package/dist/commands/search.js +38 -44
  24. package/dist/commands/search.js.map +1 -1
  25. package/dist/commands/status.d.ts +9 -0
  26. package/dist/commands/status.d.ts.map +1 -0
  27. package/dist/commands/status.js +180 -0
  28. package/dist/commands/status.js.map +1 -0
  29. package/dist/commands/sync.d.ts.map +1 -1
  30. package/dist/commands/sync.js +105 -127
  31. package/dist/commands/sync.js.map +1 -1
  32. package/dist/commands/uninstall.d.ts +1 -0
  33. package/dist/commands/uninstall.d.ts.map +1 -1
  34. package/dist/commands/uninstall.js +56 -12
  35. package/dist/commands/uninstall.js.map +1 -1
  36. package/dist/index.js +0 -0
  37. package/package.json +8 -8
@@ -1,162 +1,140 @@
1
1
  /**
2
2
  * sync command - Sync skills to platforms
3
+ *
4
+ * v2.0: Uses new Syncer module from core
3
5
  */
4
- import { createLocalStore, createAdapterManager, parse, } from 'skillpkg-core';
5
- import { readFile } from 'fs/promises';
6
6
  import { join } from 'path';
7
+ import { createSyncer, createConfigManager, loadSkillsFromDirectory, getTargetConfig, getImplementedTargets, } from 'skillpkg-core';
7
8
  import { logger, colors, withSpinner } from '../ui/index.js';
8
9
  /**
9
10
  * sync command handler
10
11
  */
11
12
  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())) {
13
+ const cwd = process.cwd();
14
+ const configManager = createConfigManager();
15
+ const syncer = createSyncer();
16
+ // Load project config
17
+ const config = await configManager.loadProjectConfig(cwd);
18
+ // Get skills directory
19
+ const skillsDir = join(cwd, '.skillpkg', 'skills');
20
+ // Load skills from store (returns Map<string, SkillContent>)
21
+ let skills = await loadSkillsFromDirectory(skillsDir);
22
+ if (skills.size === 0) {
16
23
  logger.error('No skills installed');
17
24
  logger.log(`Run ${colors.cyan('skillpkg install <skill>')} first`);
18
25
  process.exit(1);
19
26
  }
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
27
  // 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);
28
+ if (skillName) {
29
+ if (!skills.has(skillName)) {
30
+ logger.error(`Skill ${colors.cyan(skillName)} not found`);
31
+ process.exit(1);
40
32
  }
33
+ const skill = skills.get(skillName);
34
+ skills = new Map([[skillName, skill]]);
41
35
  }
42
- // Parse target platforms
43
- const platforms = options.target
44
- ? options.target.split(',').map((p) => p.trim())
45
- : undefined; // undefined = all platforms
46
36
  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})`);
37
+ // Determine targets
38
+ let targetConfigs;
39
+ // Get implemented targets (TargetConfig[])
40
+ const implementedTargets = getImplementedTargets();
41
+ const implementedIds = implementedTargets.map((t) => t.id);
42
+ if (options.target) {
43
+ // User specified targets
44
+ const requestedTargets = options.target.split(',').map((t) => t.trim());
45
+ // Validate target names
46
+ const invalidTargets = requestedTargets.filter((t) => !implementedIds.includes(t));
47
+ if (invalidTargets.length > 0) {
48
+ logger.error(`Unknown or unimplemented targets: ${invalidTargets.join(', ')}`);
49
+ logger.blank();
50
+ logger.log('Available targets:');
51
+ for (const tc of implementedTargets) {
52
+ logger.item(`${colors.cyan(tc.id)} - ${tc.description}`);
53
+ }
54
+ process.exit(1);
56
55
  }
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;
56
+ // Get target configs for valid targets
57
+ targetConfigs = requestedTargets.map((t) => getTargetConfig(t));
65
58
  }
66
- logger.log('Detected platforms:');
67
- for (const platform of presentPlatforms) {
68
- logger.item(`${colors.green('✓')} ${platform.displayName}`);
59
+ else if (config?.sync_targets) {
60
+ // Use targets from config
61
+ const enabledTargets = Object.entries(config.sync_targets)
62
+ .filter(([_, enabled]) => enabled)
63
+ .map(([name]) => name);
64
+ if (enabledTargets.length === 0) {
65
+ logger.warn('No sync targets enabled in skillpkg.json');
66
+ logger.log(`Add targets to ${colors.cyan('sync_targets')} in skillpkg.json`);
67
+ logger.blank();
68
+ logger.log('Available targets:');
69
+ for (const tc of implementedTargets) {
70
+ logger.item(`${colors.cyan(tc.id)} - ${tc.description}`);
71
+ }
72
+ process.exit(1);
73
+ }
74
+ // Filter to only implemented targets
75
+ const validTargets = enabledTargets.filter((t) => implementedIds.includes(t));
76
+ targetConfigs = validTargets.map((t) => getTargetConfig(t));
69
77
  }
78
+ else {
79
+ // Default to claude-code
80
+ targetConfigs = [getTargetConfig('claude-code')];
81
+ logger.warn('No skillpkg.json found, using default target: claude-code');
82
+ }
83
+ logger.log(`Skills to sync: ${colors.cyan(String(skills.size))}`);
84
+ logger.log(`Targets: ${colors.cyan(targetConfigs.map((t) => t.id).join(', '))}`);
70
85
  logger.blank();
71
86
  if (options.dryRun) {
72
87
  logger.warn('Dry run mode - no changes will be made');
73
88
  logger.blank();
74
89
  }
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
- });
90
+ // Sync to each target
91
+ const results = [];
92
+ for (const targetConfig of targetConfigs) {
93
+ const result = await withSpinner(`Syncing to ${targetConfig.displayName}`, async () => {
94
+ return syncer.syncToTarget(cwd, skills, targetConfig, {
95
+ dryRun: options.dryRun,
96
+ });
97
+ }, {
98
+ successText: `Synced to ${targetConfig.displayName}`,
99
+ failText: `Failed to sync to ${targetConfig.displayName}`,
100
+ });
101
+ results.push(result);
102
+ }
86
103
  logger.blank();
87
104
  // 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)}`);
105
+ let totalSynced = 0;
106
+ let totalSkipped = 0;
107
+ let totalErrors = 0;
108
+ for (const result of results) {
109
+ // Count synced files
110
+ const synced = result.files.filter((f) => f.action === 'created' || f.action === 'updated');
111
+ const skipped = result.files.filter((f) => f.action === 'skipped' || f.action === 'unchanged');
112
+ const deleted = result.files.filter((f) => f.action === 'deleted');
113
+ totalSynced += synced.length;
114
+ totalSkipped += skipped.length;
115
+ totalErrors += result.errors?.length || 0;
116
+ if (synced.length > 0) {
117
+ logger.success(`${result.target} (${synced.length} files):`);
118
+ for (const file of synced) {
119
+ const action = file.action === 'created' ? colors.green('+') : colors.yellow('~');
120
+ logger.log(` ${action} ${colors.dim(file.path)}`);
121
+ }
93
122
  }
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}`);
123
+ if (deleted.length > 0) {
124
+ logger.log(`${result.target} cleaned ${deleted.length} orphan(s)`);
100
125
  }
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}`);
126
+ if (result.errors && result.errors.length > 0) {
127
+ logger.error(`${result.target} errors:`);
128
+ for (const error of result.errors) {
129
+ logger.log(` ${colors.red('×')} ${error}`);
130
+ }
107
131
  }
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
132
  }
133
+ logger.blank();
114
134
  // 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`);
135
+ logger.log(`Summary: ${colors.green(String(totalSynced))} synced, ` +
136
+ `${colors.yellow(String(totalSkipped))} unchanged, ` +
137
+ `${colors.red(String(totalErrors))} errors`);
118
138
  logger.blank();
119
139
  }
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
140
  //# sourceMappingURL=sync.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  interface UninstallOptions {
2
2
  global?: boolean;
3
3
  clean?: boolean;
4
+ force?: boolean;
4
5
  }
5
6
  /**
6
7
  * uninstall command handler
@@ -1 +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"}
1
+ {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"AAgBA,UAAU,gBAAgB;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CAsGf"}
@@ -1,47 +1,91 @@
1
1
  /**
2
- * uninstall command - Remove a skill
2
+ * uninstall command - Remove a skill with dependency checking
3
+ *
4
+ * v2.0: Uses new Installer module with dependency awareness
3
5
  */
4
- import { createGlobalStore, createLocalStore, createAdapterManager } from 'skillpkg-core';
6
+ import { createGlobalStore, createLocalStore, createStateManager, createConfigManager, createInstaller, createAdapterManager, } from 'skillpkg-core';
5
7
  import { logger, colors, withSpinner } from '../ui/index.js';
6
8
  /**
7
9
  * uninstall command handler
8
10
  */
9
11
  export async function uninstallCommand(skillName, options) {
10
- const store = options.global ? createGlobalStore() : createLocalStore();
12
+ const cwd = process.cwd();
13
+ const storeManager = options.global ? createGlobalStore() : createLocalStore();
14
+ const stateManager = createStateManager();
15
+ const configManager = createConfigManager();
11
16
  // Check if store is initialized
12
- if (!(await store.isInitialized())) {
17
+ if (!(await storeManager.isInitialized())) {
13
18
  logger.error('No skills installed');
14
19
  process.exit(1);
15
20
  }
16
21
  // Check if skill exists
17
- if (!(await store.hasSkill(skillName))) {
22
+ if (!(await storeManager.hasSkill(skillName))) {
18
23
  logger.error(`Skill ${colors.cyan(skillName)} is not installed`);
19
24
  process.exit(1);
20
25
  }
21
26
  // Get skill info before removal
22
- const skill = await store.getSkill(skillName);
27
+ const skill = await storeManager.getSkill(skillName);
23
28
  const version = skill?.version || 'unknown';
24
- // Remove skill from store
25
- const removed = await withSpinner(`Uninstalling ${colors.cyan(skillName)}@${version}`, () => store.removeSkill(skillName), {
29
+ // Create installer (with minimal fetcher since we're uninstalling)
30
+ const fetcher = {
31
+ async fetchMetadata() {
32
+ return null;
33
+ },
34
+ async fetchSkill() {
35
+ return null;
36
+ },
37
+ };
38
+ const installer = createInstaller(stateManager, configManager, storeManager, fetcher);
39
+ // Check for dependents (unless --force)
40
+ if (!options.force) {
41
+ const check = await installer.canUninstall(cwd, skillName);
42
+ if (!check.canUninstall) {
43
+ logger.error(`Cannot uninstall ${colors.cyan(skillName)}`);
44
+ logger.blank();
45
+ logger.log('The following skills depend on it:');
46
+ for (const dep of check.dependents) {
47
+ logger.item(colors.cyan(dep));
48
+ }
49
+ logger.blank();
50
+ logger.log(`Use ${colors.cyan('--force')} to uninstall anyway`);
51
+ logger.warn('Warning: This may break the dependent skills!');
52
+ process.exit(1);
53
+ }
54
+ }
55
+ // Perform uninstall
56
+ const result = await withSpinner(`Uninstalling ${colors.cyan(skillName)}@${version}`, () => installer.uninstall(cwd, skillName, {
57
+ force: options.force,
58
+ removeOrphans: true,
59
+ }), {
26
60
  successText: `Uninstalled ${colors.cyan(skillName)}@${version}`,
27
61
  failText: `Failed to uninstall ${skillName}`,
28
62
  });
29
- if (!removed) {
30
- logger.error(`Failed to remove skill ${skillName}`);
63
+ if (!result.success) {
64
+ logger.error('Uninstall failed:');
65
+ for (const error of result.errors) {
66
+ logger.log(` ${colors.red('×')} ${error}`);
67
+ }
31
68
  process.exit(1);
32
69
  }
33
70
  // Clean synced platform files if --clean flag is set
34
71
  if (options.clean) {
35
72
  const adapterManager = createAdapterManager();
36
- await withSpinner(`Cleaning synced files from platforms`, () => adapterManager.removeFromAllPlatforms(skillName, process.cwd()), {
73
+ await withSpinner(`Cleaning synced files from platforms`, () => adapterManager.removeFromAllPlatforms(skillName, cwd), {
37
74
  successText: `Cleaned synced files`,
38
75
  failText: `Failed to clean some platform files`,
39
76
  });
40
77
  }
41
78
  logger.blank();
42
79
  logger.success(`Removed ${colors.cyan(skillName)}`);
80
+ // Show removed orphans
81
+ if (result.orphansRemoved.length > 0) {
82
+ logger.log(`Also removed ${result.orphansRemoved.length} orphan dependency(s):`);
83
+ for (const orphan of result.orphansRemoved) {
84
+ logger.item(colors.dim(orphan));
85
+ }
86
+ }
43
87
  if (options.clean) {
44
- logger.log(`${colors.dim('Also removed synced files from all platforms')}`);
88
+ logger.log(colors.dim('Also removed synced files from all platforms'));
45
89
  }
46
90
  logger.blank();
47
91
  }
@@ -1 +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"}
1
+ {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/commands/uninstall.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skillpkg-cli",
3
- "version": "0.1.1",
3
+ "version": "0.3.0",
4
4
  "description": "CLI for skillpkg - Agent Skills Package Manager. Install once, use everywhere.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -15,11 +15,6 @@
15
15
  "files": [
16
16
  "dist"
17
17
  ],
18
- "scripts": {
19
- "build": "tsc",
20
- "dev": "tsc --watch",
21
- "start": "node dist/index.js"
22
- },
23
18
  "keywords": [
24
19
  "cli",
25
20
  "skillpkg",
@@ -50,12 +45,12 @@
50
45
  "node": ">=18.0.0"
51
46
  },
52
47
  "dependencies": {
53
- "skillpkg-core": "^0.1.0",
54
48
  "chalk": "^5.3.0",
55
49
  "cli-table3": "^0.6.3",
56
50
  "commander": "^12.0.0",
57
51
  "inquirer": "^9.2.0",
58
52
  "ora": "^8.0.0",
53
+ "skillpkg-core": "^0.3.0",
59
54
  "tar-stream": "^3.1.7"
60
55
  },
61
56
  "devDependencies": {
@@ -63,5 +58,10 @@
63
58
  "@types/node": "^20.10.0",
64
59
  "@types/tar-stream": "^3.1.4",
65
60
  "typescript": "^5.3.0"
61
+ },
62
+ "scripts": {
63
+ "build": "tsc",
64
+ "dev": "tsc --watch",
65
+ "start": "node dist/index.js"
66
66
  }
67
- }
67
+ }