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.
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +28 -15
- package/dist/cli.js.map +1 -1
- package/dist/commands/config.d.ts +37 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +238 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/doctor.d.ts +11 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +154 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/info.d.ts +2 -2
- package/dist/commands/info.d.ts.map +1 -1
- package/dist/commands/info.js.map +1 -1
- package/dist/commands/init.d.ts +4 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +456 -75
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/install.d.ts +2 -0
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +79 -10
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/login.d.ts +2 -2
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/publish.d.ts +2 -2
- package/dist/commands/publish.d.ts.map +1 -1
- package/dist/commands/publish.js.map +1 -1
- package/dist/commands/search.d.ts +3 -2
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +97 -31
- package/dist/commands/search.js.map +1 -1
- package/dist/commands/uninstall.d.ts +1 -0
- package/dist/commands/uninstall.d.ts.map +1 -1
- package/dist/commands/uninstall.js +26 -0
- package/dist/commands/uninstall.js.map +1 -1
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -1
- package/package.json +8 -7
- package/dist/commands/sync.d.ts +0 -10
- 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.
|
|
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
|
+
}
|
package/dist/commands/sync.d.ts
DELETED
package/dist/commands/sync.js
DELETED
|
@@ -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
|