skillpkg-cli 0.5.4 → 0.5.7

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 (41) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +28 -15
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/config.d.ts +37 -0
  5. package/dist/commands/config.d.ts.map +1 -0
  6. package/dist/commands/config.js +238 -0
  7. package/dist/commands/config.js.map +1 -0
  8. package/dist/commands/doctor.d.ts +11 -0
  9. package/dist/commands/doctor.d.ts.map +1 -0
  10. package/dist/commands/doctor.js +154 -0
  11. package/dist/commands/doctor.js.map +1 -0
  12. package/dist/commands/info.d.ts +2 -2
  13. package/dist/commands/info.d.ts.map +1 -1
  14. package/dist/commands/info.js.map +1 -1
  15. package/dist/commands/init.d.ts +4 -0
  16. package/dist/commands/init.d.ts.map +1 -1
  17. package/dist/commands/init.js +456 -75
  18. package/dist/commands/init.js.map +1 -1
  19. package/dist/commands/install.d.ts +2 -0
  20. package/dist/commands/install.d.ts.map +1 -1
  21. package/dist/commands/install.js +79 -10
  22. package/dist/commands/install.js.map +1 -1
  23. package/dist/commands/login.d.ts +2 -2
  24. package/dist/commands/login.d.ts.map +1 -1
  25. package/dist/commands/login.js.map +1 -1
  26. package/dist/commands/publish.d.ts +2 -2
  27. package/dist/commands/publish.d.ts.map +1 -1
  28. package/dist/commands/publish.js.map +1 -1
  29. package/dist/commands/search.d.ts +3 -2
  30. package/dist/commands/search.d.ts.map +1 -1
  31. package/dist/commands/search.js +97 -31
  32. package/dist/commands/search.js.map +1 -1
  33. package/dist/commands/uninstall.d.ts +1 -0
  34. package/dist/commands/uninstall.d.ts.map +1 -1
  35. package/dist/commands/uninstall.js +26 -0
  36. package/dist/commands/uninstall.js.map +1 -1
  37. package/dist/index.js +13 -0
  38. package/dist/index.js.map +1 -1
  39. package/package.json +8 -7
  40. package/dist/commands/sync.d.ts +0 -10
  41. package/dist/commands/sync.js +0 -161
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skillpkg-cli",
3
- "version": "0.5.4",
3
+ "version": "0.5.7",
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",
@@ -53,6 +48,7 @@
53
48
  "chalk": "^5.3.0",
54
49
  "cli-table3": "^0.6.3",
55
50
  "commander": "^12.0.0",
51
+ "dotenv": "^17.2.3",
56
52
  "gray-matter": "^4.0.3",
57
53
  "inquirer": "^9.2.0",
58
54
  "ora": "^8.0.0",
@@ -64,5 +60,10 @@
64
60
  "@types/node": "^20.10.0",
65
61
  "@types/tar-stream": "^3.1.4",
66
62
  "typescript": "^5.3.0"
63
+ },
64
+ "scripts": {
65
+ "build": "tsc",
66
+ "dev": "tsc --watch",
67
+ "start": "node dist/index.js"
67
68
  }
68
- }
69
+ }
@@ -1,10 +0,0 @@
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
@@ -1,161 +0,0 @@
1
- /**
2
- * sync command - Sync skills to platforms
3
- *
4
- * v2.0: Uses new Syncer module from core
5
- */
6
- import { join } from 'path';
7
- import { createSyncer, createConfigManager, createLocalStore, createStateManager, loadSkillsFromDirectory, getTargetConfig, getImplementedTargets, } from 'skillpkg-core';
8
- import { logger, colors, withSpinner } from '../ui/index.js';
9
- /**
10
- * sync command handler
11
- */
12
- export async function syncCommand(skillName, options) {
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) {
23
- logger.error('No skills installed');
24
- logger.log(`Run ${colors.cyan('skillpkg install <skill>')} first`);
25
- process.exit(1);
26
- }
27
- // Filter by name if provided
28
- if (skillName) {
29
- if (!skills.has(skillName)) {
30
- logger.error(`Skill ${colors.cyan(skillName)} not found`);
31
- process.exit(1);
32
- }
33
- const skill = skills.get(skillName);
34
- skills = new Map([[skillName, skill]]);
35
- }
36
- logger.header('Sync Skills to Platforms');
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);
55
- }
56
- // Get target configs for valid targets
57
- targetConfigs = requestedTargets.map((t) => getTargetConfig(t));
58
- }
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));
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(', '))}`);
85
- logger.blank();
86
- if (options.dryRun) {
87
- logger.warn('Dry run mode - no changes will be made');
88
- logger.blank();
89
- }
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
- }
103
- logger.blank();
104
- // Show results
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
- }
122
- }
123
- if (deleted.length > 0) {
124
- logger.log(`${result.target} cleaned ${deleted.length} orphan(s)`);
125
- }
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
- }
131
- }
132
- }
133
- logger.blank();
134
- // Update sync status (only if not dry run and sync was successful)
135
- if (!options.dryRun && totalSynced > 0) {
136
- const store = createLocalStore(cwd);
137
- const stateManager = createStateManager();
138
- const syncedTargets = results
139
- .filter((r) => r.files.some((f) => f.action === 'created' || f.action === 'updated'))
140
- .map((r) => r.target);
141
- // Update each skill's syncedPlatforms in registry
142
- for (const skillName of skills.keys()) {
143
- const entry = await store.getSkillEntry(skillName);
144
- if (entry) {
145
- const currentPlatforms = entry.syncedPlatforms || [];
146
- const newPlatforms = [...new Set([...currentPlatforms, ...syncedTargets])];
147
- await store.updateSyncedPlatforms(skillName, newPlatforms);
148
- }
149
- }
150
- // Record sync in state (for status command)
151
- for (const target of syncedTargets) {
152
- await stateManager.recordSync(cwd, target);
153
- }
154
- }
155
- // Summary
156
- logger.log(`Summary: ${colors.green(String(totalSynced))} synced, ` +
157
- `${colors.yellow(String(totalSkipped))} unchanged, ` +
158
- `${colors.red(String(totalErrors))} errors`);
159
- logger.blank();
160
- }
161
- //# sourceMappingURL=sync.js.map