skillstore 0.1.2 → 0.1.4
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/index.js +11 -3
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/add.d.ts +41 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +374 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/check.d.ts +12 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +133 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/generate-lock.d.ts +17 -0
- package/dist/commands/generate-lock.d.ts.map +1 -0
- package/dist/commands/generate-lock.js +134 -0
- package/dist/commands/generate-lock.js.map +1 -0
- package/dist/commands/install.js +44 -20
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/list.d.ts +12 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +97 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/update.d.ts +22 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +203 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/lib/agents.d.ts +38 -0
- package/dist/lib/agents.d.ts.map +1 -0
- package/dist/lib/agents.js +223 -0
- package/dist/lib/agents.js.map +1 -0
- package/dist/lib/installer.d.ts +82 -0
- package/dist/lib/installer.d.ts.map +1 -0
- package/dist/lib/installer.js +226 -0
- package/dist/lib/installer.js.map +1 -0
- package/dist/lib/plugin-verify.d.ts +19 -0
- package/dist/lib/plugin-verify.d.ts.map +1 -1
- package/dist/lib/plugin-verify.js +66 -0
- package/dist/lib/plugin-verify.js.map +1 -1
- package/dist/lib/skill-api.d.ts +18 -0
- package/dist/lib/skill-api.d.ts.map +1 -1
- package/dist/lib/skill-api.js +31 -0
- package/dist/lib/skill-api.js.map +1 -1
- package/dist/lib/skill-lock.d.ts +64 -0
- package/dist/lib/skill-lock.d.ts.map +1 -0
- package/dist/lib/skill-lock.js +101 -0
- package/dist/lib/skill-lock.js.map +1 -0
- package/package.json +6 -1
package/dist/cli/index.js
CHANGED
|
@@ -3,12 +3,20 @@ import { defineCommand, runMain } from 'citty';
|
|
|
3
3
|
const main = defineCommand({
|
|
4
4
|
meta: {
|
|
5
5
|
name: 'skillstore',
|
|
6
|
-
version: '0.
|
|
6
|
+
version: '0.2.0',
|
|
7
7
|
description: 'Skillstore CLI - Manage AI skills for Claude, Codex, and Claude Code',
|
|
8
8
|
},
|
|
9
9
|
subCommands: {
|
|
10
|
-
// Primary command:
|
|
11
|
-
|
|
10
|
+
// Primary command: add skills or plugins
|
|
11
|
+
add: () => import('../commands/add.js').then((m) => m.default),
|
|
12
|
+
// List installed skills
|
|
13
|
+
list: () => import('../commands/list.js').then((m) => m.default),
|
|
14
|
+
// Check for updates
|
|
15
|
+
check: () => import('../commands/check.js').then((m) => m.default),
|
|
16
|
+
// Update skills
|
|
17
|
+
update: () => import('../commands/update.js').then((m) => m.default),
|
|
18
|
+
// Generate lock file
|
|
19
|
+
'generate-lock': () => import('../commands/generate-lock.js').then((m) => m.default),
|
|
12
20
|
// Plugin management (info, list)
|
|
13
21
|
plugin: () => import('../commands/plugin/index.js').then((m) => m.default),
|
|
14
22
|
},
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAE/C,MAAM,IAAI,GAAG,aAAa,CAAC;IAC1B,IAAI,EAAE;QACL,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,sEAAsE;KACnF;IACD,WAAW,EAAE;QACZ,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAE/C,MAAM,IAAI,GAAG,aAAa,CAAC;IAC1B,IAAI,EAAE;QACL,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,sEAAsE;KACnF;IACD,WAAW,EAAE;QACZ,yCAAyC;QACzC,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAC9D,wBAAwB;QACxB,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAChE,oBAAoB;QACpB,KAAK,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAClE,gBAAgB;QAChB,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACpE,qBAAqB;QACrB,eAAe,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACpF,iCAAiC;QACjC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;KAC1E;IACD,KAAK;QACJ,0EAA0E;QAC1E,qEAAqE;IACtE,CAAC;CACD,CAAC,CAAC;AAEH,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unified add command
|
|
3
|
+
*
|
|
4
|
+
* - `skillstore add <slug>` → Add single skill
|
|
5
|
+
* - `skillstore add @<plugin>` → Add plugin (skill collection)
|
|
6
|
+
*/
|
|
7
|
+
declare const _default: import("citty").CommandDef<{
|
|
8
|
+
target: {
|
|
9
|
+
type: "positional";
|
|
10
|
+
description: string;
|
|
11
|
+
required: true;
|
|
12
|
+
};
|
|
13
|
+
agent: {
|
|
14
|
+
type: "string";
|
|
15
|
+
alias: string;
|
|
16
|
+
description: string;
|
|
17
|
+
};
|
|
18
|
+
global: {
|
|
19
|
+
type: "boolean";
|
|
20
|
+
alias: string;
|
|
21
|
+
description: string;
|
|
22
|
+
default: true;
|
|
23
|
+
};
|
|
24
|
+
'skip-verify': {
|
|
25
|
+
type: "boolean";
|
|
26
|
+
description: string;
|
|
27
|
+
default: false;
|
|
28
|
+
};
|
|
29
|
+
'dry-run': {
|
|
30
|
+
type: "boolean";
|
|
31
|
+
description: string;
|
|
32
|
+
default: false;
|
|
33
|
+
};
|
|
34
|
+
overwrite: {
|
|
35
|
+
type: "boolean";
|
|
36
|
+
description: string;
|
|
37
|
+
default: false;
|
|
38
|
+
};
|
|
39
|
+
}>;
|
|
40
|
+
export default _default;
|
|
41
|
+
//# sourceMappingURL=add.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAkCA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACH,wBAmFG"}
|
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
import { defineCommand } from 'citty';
|
|
2
|
+
import { mkdir, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { dirname, join } from 'node:path';
|
|
4
|
+
import { getPluginConfig } from '../lib/plugin-config.js';
|
|
5
|
+
import { fetchManifest, reportInstallation, reportSkillInstall, PluginApiError, } from '../lib/plugin-api.js';
|
|
6
|
+
import { fetchSkillManifest, downloadSkillZip, SkillApiError } from '../lib/skill-api.js';
|
|
7
|
+
import { verifyManifest, verifySkillManifest, verifyZipHash } from '../lib/plugin-verify.js';
|
|
8
|
+
import { downloadAllSkills, printDownloadSummary } from '../lib/plugin-download.js';
|
|
9
|
+
import { logger } from '../lib/plugin-logger.js';
|
|
10
|
+
import { agents, detectInstalledAgents, getAgentsByIds, isValidAgentId, CANONICAL_SKILLS_DIR, } from '../lib/agents.js';
|
|
11
|
+
import { addToLock, getLockEntry } from '../lib/skill-lock.js';
|
|
12
|
+
import { installToAgents, getCanonicalSkillPath } from '../lib/installer.js';
|
|
13
|
+
/**
|
|
14
|
+
* Normalize skill/plugin slug
|
|
15
|
+
* Converts "owner/name" format to "owner-name" format
|
|
16
|
+
*/
|
|
17
|
+
function normalizeSlug(slug) {
|
|
18
|
+
return slug.replace(/\//g, '-');
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Unified add command
|
|
22
|
+
*
|
|
23
|
+
* - `skillstore add <slug>` → Add single skill
|
|
24
|
+
* - `skillstore add @<plugin>` → Add plugin (skill collection)
|
|
25
|
+
*/
|
|
26
|
+
export default defineCommand({
|
|
27
|
+
meta: {
|
|
28
|
+
name: 'add',
|
|
29
|
+
description: 'Add skills or plugins from skillstore.io',
|
|
30
|
+
},
|
|
31
|
+
args: {
|
|
32
|
+
target: {
|
|
33
|
+
type: 'positional',
|
|
34
|
+
description: 'Skill slug or @plugin to add',
|
|
35
|
+
required: true,
|
|
36
|
+
},
|
|
37
|
+
agent: {
|
|
38
|
+
type: 'string',
|
|
39
|
+
alias: 'a',
|
|
40
|
+
description: 'Target specific agents (comma-separated)',
|
|
41
|
+
},
|
|
42
|
+
global: {
|
|
43
|
+
type: 'boolean',
|
|
44
|
+
alias: 'g',
|
|
45
|
+
description: 'Install to user-level (~/) instead of project-level',
|
|
46
|
+
default: true, // Default to global for skillstore
|
|
47
|
+
},
|
|
48
|
+
'skip-verify': {
|
|
49
|
+
type: 'boolean',
|
|
50
|
+
description: 'Skip manifest signature verification',
|
|
51
|
+
default: false,
|
|
52
|
+
},
|
|
53
|
+
'dry-run': {
|
|
54
|
+
type: 'boolean',
|
|
55
|
+
description: 'Show what would be installed without actually installing',
|
|
56
|
+
default: false,
|
|
57
|
+
},
|
|
58
|
+
overwrite: {
|
|
59
|
+
type: 'boolean',
|
|
60
|
+
description: 'Overwrite existing files',
|
|
61
|
+
default: false,
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
async run({ args }) {
|
|
65
|
+
const { target, agent: agentArg, global: isGlobal, 'skip-verify': skipVerify, 'dry-run': dryRun, overwrite, } = args;
|
|
66
|
+
// Detect if target is a plugin (@prefix) or skill
|
|
67
|
+
const isPlugin = target.startsWith('@');
|
|
68
|
+
const rawSlug = isPlugin ? target.slice(1) : target;
|
|
69
|
+
// Normalize slug: convert "owner/name" format to "owner-name"
|
|
70
|
+
const slug = normalizeSlug(rawSlug);
|
|
71
|
+
// Determine target agents
|
|
72
|
+
let targetAgents;
|
|
73
|
+
if (agentArg) {
|
|
74
|
+
// Parse comma-separated agent IDs
|
|
75
|
+
const agentIds = agentArg.split(',').map((s) => s.trim());
|
|
76
|
+
const invalidIds = agentIds.filter((id) => !isValidAgentId(id));
|
|
77
|
+
if (invalidIds.length > 0) {
|
|
78
|
+
logger.error(`Invalid agent ID(s): ${invalidIds.join(', ')}`);
|
|
79
|
+
console.log('');
|
|
80
|
+
console.log('Valid agents: claude-code, cursor, windsurf, cline, codex, continue, etc.');
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
targetAgents = getAgentsByIds(agentIds);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
// Auto-detect installed agents
|
|
87
|
+
targetAgents = detectInstalledAgents();
|
|
88
|
+
if (targetAgents.length === 0) {
|
|
89
|
+
logger.warn('No AI coding agents detected. Installing to Claude Code by default.');
|
|
90
|
+
targetAgents = [agents['claude-code']];
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (isPlugin) {
|
|
94
|
+
await addPlugin(slug, { targetAgents, isGlobal, skipVerify, dryRun, overwrite });
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
await addSkill(slug, { targetAgents, isGlobal, skipVerify, dryRun, overwrite });
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
/**
|
|
102
|
+
* Add a single skill
|
|
103
|
+
*/
|
|
104
|
+
async function addSkill(slug, options) {
|
|
105
|
+
const { targetAgents, isGlobal, skipVerify, dryRun, overwrite } = options;
|
|
106
|
+
const config = getPluginConfig({
|
|
107
|
+
installDir: CANONICAL_SKILLS_DIR, // Use canonical dir for extraction
|
|
108
|
+
skipVerify,
|
|
109
|
+
dryRun,
|
|
110
|
+
});
|
|
111
|
+
logger.info(`Adding skill: ${slug}`);
|
|
112
|
+
logger.info(`Target agents: ${targetAgents.map((a) => a.name).join(', ')}`);
|
|
113
|
+
if (dryRun) {
|
|
114
|
+
logger.warn('Dry run mode - no files will be written');
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
117
|
+
// Step 1: Fetch skill manifest
|
|
118
|
+
logger.startSpinner('Fetching skill manifest...');
|
|
119
|
+
const manifest = await fetchSkillManifest(config, slug);
|
|
120
|
+
logger.spinnerSuccess(`Found skill: "${manifest.skill.name}"`);
|
|
121
|
+
// Step 2: Verify manifest signature
|
|
122
|
+
if (!skipVerify) {
|
|
123
|
+
logger.startSpinner('Verifying manifest signature...');
|
|
124
|
+
const verifyResult = await verifySkillManifest(manifest);
|
|
125
|
+
if (!verifyResult.valid) {
|
|
126
|
+
logger.spinnerError('Manifest verification failed');
|
|
127
|
+
logger.error(verifyResult.error || 'Unknown verification error');
|
|
128
|
+
process.exit(1);
|
|
129
|
+
}
|
|
130
|
+
logger.spinnerSuccess('Manifest verified');
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
logger.warn('Skipping signature verification');
|
|
134
|
+
}
|
|
135
|
+
// Step 3: Show skill info
|
|
136
|
+
logger.box(`Skill: ${manifest.skill.name}`, [
|
|
137
|
+
`Slug: ${manifest.skill.slug}`,
|
|
138
|
+
`Version: ${manifest.skill.version}`,
|
|
139
|
+
`Author: ${manifest.skill.author || 'Unknown'}`,
|
|
140
|
+
]);
|
|
141
|
+
// Step 4: Check if already installed
|
|
142
|
+
const existingLock = await getLockEntry(slug);
|
|
143
|
+
if (existingLock && !overwrite) {
|
|
144
|
+
if (existingLock.zipHash === manifest.skill.zipHash) {
|
|
145
|
+
logger.warn(`Skill "${slug}" is already installed (v${existingLock.version})`);
|
|
146
|
+
logger.info('Use --overwrite to reinstall');
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
logger.info(`Updating "${slug}" from v${existingLock.version} to v${manifest.skill.version}`);
|
|
150
|
+
}
|
|
151
|
+
if (dryRun) {
|
|
152
|
+
logger.success('Dry run complete - no files were written');
|
|
153
|
+
console.log('');
|
|
154
|
+
console.log(`Would install to: ${getCanonicalSkillPath(slug)}`);
|
|
155
|
+
console.log(`Would symlink to: ${targetAgents.map((a) => a.name).join(', ')}`);
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
// Step 5: Download skill ZIP
|
|
159
|
+
logger.startSpinner('Downloading skill...');
|
|
160
|
+
const zipBuffer = await downloadSkillZip(config, slug);
|
|
161
|
+
logger.spinnerSuccess('Downloaded skill package');
|
|
162
|
+
// Step 6: Verify ZIP hash
|
|
163
|
+
if (!skipVerify) {
|
|
164
|
+
logger.startSpinner('Verifying content integrity...');
|
|
165
|
+
if (!verifyZipHash(zipBuffer, manifest.skill.zipHash)) {
|
|
166
|
+
logger.spinnerError('Content verification failed');
|
|
167
|
+
logger.error('ZIP hash mismatch - content may be corrupted or tampered');
|
|
168
|
+
process.exit(1);
|
|
169
|
+
}
|
|
170
|
+
logger.spinnerSuccess('Content verified');
|
|
171
|
+
}
|
|
172
|
+
// Step 7: Extract ZIP to canonical location
|
|
173
|
+
logger.startSpinner('Extracting files...');
|
|
174
|
+
const canonicalPath = getCanonicalSkillPath(slug);
|
|
175
|
+
await extractZip(zipBuffer, canonicalPath);
|
|
176
|
+
logger.spinnerSuccess('Extracted files');
|
|
177
|
+
// Step 8: Create symlinks to agents
|
|
178
|
+
logger.startSpinner('Creating symlinks to agents...');
|
|
179
|
+
const installResult = await installToAgents(slug, targetAgents, { global: isGlobal });
|
|
180
|
+
if (installResult.successCount > 0) {
|
|
181
|
+
logger.spinnerSuccess(`Linked to ${installResult.successCount} agent${installResult.successCount > 1 ? 's' : ''}`);
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
logger.spinnerError('Failed to link to any agents');
|
|
185
|
+
}
|
|
186
|
+
// Show symlink results
|
|
187
|
+
for (const result of installResult.agents) {
|
|
188
|
+
if (result.success) {
|
|
189
|
+
if (result.symlinkFailed) {
|
|
190
|
+
logger.warn(` ${result.agentId}: copied (symlink failed)`);
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
logger.debug(` ${result.agentId}: symlinked`);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
logger.error(` ${result.agentId}: ${result.error}`);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// Step 9: Update lock file
|
|
201
|
+
await addToLock({
|
|
202
|
+
slug,
|
|
203
|
+
version: manifest.skill.version,
|
|
204
|
+
zipHash: manifest.skill.zipHash,
|
|
205
|
+
source: 'skillstore',
|
|
206
|
+
installedAt: new Date().toISOString(),
|
|
207
|
+
});
|
|
208
|
+
logger.debug('Updated lock file');
|
|
209
|
+
// Step 10: Report installation (non-blocking telemetry)
|
|
210
|
+
try {
|
|
211
|
+
await reportSkillInstall(config, slug);
|
|
212
|
+
logger.debug('Installation telemetry reported');
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
logger.debug('Failed to report telemetry (non-critical)');
|
|
216
|
+
}
|
|
217
|
+
logger.success(`Skill "${manifest.skill.name}" added successfully!`);
|
|
218
|
+
console.log('');
|
|
219
|
+
console.log(`Installed to: ${canonicalPath}`);
|
|
220
|
+
console.log(`Agents: ${installResult.agents.filter((r) => r.success).map((r) => r.agentId).join(', ')}`);
|
|
221
|
+
}
|
|
222
|
+
catch (err) {
|
|
223
|
+
logger.stopSpinner();
|
|
224
|
+
if (err instanceof SkillApiError) {
|
|
225
|
+
if (err.statusCode === 404) {
|
|
226
|
+
logger.error(`Skill "${slug}" not found`);
|
|
227
|
+
console.log('');
|
|
228
|
+
console.log('Tip: Use @ prefix to add a plugin, e.g.:');
|
|
229
|
+
console.log(` npx skillstore add @${slug}`);
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
logger.error(`API error: ${err.message}`);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
logger.error('Installation failed', err instanceof Error ? err : undefined);
|
|
237
|
+
}
|
|
238
|
+
process.exit(1);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Add a plugin (skill collection)
|
|
243
|
+
*/
|
|
244
|
+
async function addPlugin(slug, options) {
|
|
245
|
+
const { targetAgents, isGlobal, skipVerify, dryRun, overwrite } = options;
|
|
246
|
+
// For plugins, use first agent's path as install dir (legacy behavior)
|
|
247
|
+
// TODO: Update plugin download to use multi-agent installation
|
|
248
|
+
const installDir = isGlobal
|
|
249
|
+
? targetAgents[0]?.globalPath || agents['claude-code'].globalPath
|
|
250
|
+
: join(process.cwd(), targetAgents[0]?.projectPath || '.claude/skills');
|
|
251
|
+
const config = getPluginConfig({
|
|
252
|
+
installDir,
|
|
253
|
+
skipVerify,
|
|
254
|
+
dryRun,
|
|
255
|
+
});
|
|
256
|
+
logger.info(`Adding plugin: @${slug}`);
|
|
257
|
+
logger.info(`Target directory: ${config.installDir}`);
|
|
258
|
+
if (dryRun) {
|
|
259
|
+
logger.warn('Dry run mode - no files will be written');
|
|
260
|
+
}
|
|
261
|
+
try {
|
|
262
|
+
// Step 1: Fetch manifest
|
|
263
|
+
logger.startSpinner('Fetching plugin manifest...');
|
|
264
|
+
const manifest = await fetchManifest(config, slug);
|
|
265
|
+
logger.spinnerSuccess(`Fetched manifest for "${manifest.plugin.name}"`);
|
|
266
|
+
// Step 2: Verify manifest
|
|
267
|
+
if (!skipVerify) {
|
|
268
|
+
logger.startSpinner('Verifying manifest signature...');
|
|
269
|
+
const verifyResult = await verifyManifest(manifest, { skipSignature: skipVerify });
|
|
270
|
+
if (!verifyResult.valid) {
|
|
271
|
+
logger.spinnerError('Manifest verification failed');
|
|
272
|
+
logger.error(verifyResult.error || 'Unknown verification error');
|
|
273
|
+
process.exit(1);
|
|
274
|
+
}
|
|
275
|
+
if (verifyResult.error) {
|
|
276
|
+
logger.spinnerSuccess('Manifest structure valid');
|
|
277
|
+
logger.warn(verifyResult.error);
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
logger.spinnerSuccess('Manifest verified');
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
logger.warn('Skipping manifest signature verification');
|
|
285
|
+
}
|
|
286
|
+
// Step 3: Show plugin info
|
|
287
|
+
logger.box(`Plugin: ${manifest.plugin.name}`, [
|
|
288
|
+
`Version: ${manifest.plugin.version}`,
|
|
289
|
+
`Skills: ${manifest.skills.length}`,
|
|
290
|
+
`Generated: ${new Date(manifest.generatedAt).toLocaleDateString()}`,
|
|
291
|
+
]);
|
|
292
|
+
// Step 4: Download skills
|
|
293
|
+
logger.info('');
|
|
294
|
+
const downloadResult = await downloadAllSkills(config, manifest.skills, {
|
|
295
|
+
overwrite,
|
|
296
|
+
verifyHash: !skipVerify,
|
|
297
|
+
});
|
|
298
|
+
// Step 5: Print summary
|
|
299
|
+
printDownloadSummary(downloadResult);
|
|
300
|
+
// Step 6: Report installation (non-blocking)
|
|
301
|
+
if (!dryRun && downloadResult.success > 0) {
|
|
302
|
+
try {
|
|
303
|
+
const reportResult = await reportInstallation(config, slug, 'cli');
|
|
304
|
+
if (reportResult.duplicate) {
|
|
305
|
+
logger.debug('Installation already recorded');
|
|
306
|
+
}
|
|
307
|
+
else if (reportResult.success) {
|
|
308
|
+
logger.debug('Installation reported successfully');
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
catch {
|
|
312
|
+
logger.debug('Failed to report installation (non-critical)');
|
|
313
|
+
}
|
|
314
|
+
// Report telemetry for each successfully installed skill
|
|
315
|
+
const successfulSkills = downloadResult.results.filter((r) => r.success && !r.skipped);
|
|
316
|
+
if (successfulSkills.length > 0) {
|
|
317
|
+
// Report in parallel, non-blocking
|
|
318
|
+
Promise.all(successfulSkills.map((r) => reportSkillInstall(config, r.slug))).catch(() => {
|
|
319
|
+
logger.debug('Telemetry reporting failed (non-critical)');
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
// Final status
|
|
324
|
+
if (downloadResult.failed > 0) {
|
|
325
|
+
logger.warn(`Installation completed with ${downloadResult.failed} failures`);
|
|
326
|
+
process.exit(1);
|
|
327
|
+
}
|
|
328
|
+
else if (dryRun) {
|
|
329
|
+
logger.success('Dry run complete - no files were written');
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
logger.success(`Plugin "@${manifest.plugin.slug}" added successfully!`);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
catch (err) {
|
|
336
|
+
logger.stopSpinner();
|
|
337
|
+
if (err instanceof PluginApiError) {
|
|
338
|
+
if (err.statusCode === 404) {
|
|
339
|
+
logger.error(`Plugin "@${slug}" not found`);
|
|
340
|
+
console.log('');
|
|
341
|
+
console.log('Tip: Without @ prefix to add a single skill, e.g.:');
|
|
342
|
+
console.log(` npx skillstore add ${slug}`);
|
|
343
|
+
}
|
|
344
|
+
else if (err.statusCode === 403) {
|
|
345
|
+
logger.error('Access denied - plugin may be private or require purchase');
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
logger.error(`API error: ${err.message}`);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
logger.error('Installation failed', err instanceof Error ? err : undefined);
|
|
353
|
+
}
|
|
354
|
+
process.exit(1);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Extract ZIP buffer to directory
|
|
359
|
+
*/
|
|
360
|
+
async function extractZip(buffer, targetDir) {
|
|
361
|
+
// Use fflate for extraction
|
|
362
|
+
const { unzipSync } = await import('fflate');
|
|
363
|
+
const data = new Uint8Array(buffer);
|
|
364
|
+
const unzipped = unzipSync(data);
|
|
365
|
+
for (const [path, content] of Object.entries(unzipped)) {
|
|
366
|
+
// Skip directories (they end with /)
|
|
367
|
+
if (path.endsWith('/'))
|
|
368
|
+
continue;
|
|
369
|
+
const fullPath = join(targetDir, path);
|
|
370
|
+
await mkdir(dirname(fullPath), { recursive: true });
|
|
371
|
+
await writeFile(fullPath, Buffer.from(content));
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
//# sourceMappingURL=add.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAaA;;GAEG;;;;;;;;AACH,wBA0IG"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { defineCommand } from 'citty';
|
|
2
|
+
import { getAllLockedSkills } from '../lib/skill-lock.js';
|
|
3
|
+
import { fetchSkillManifest, SkillApiError } from '../lib/skill-api.js';
|
|
4
|
+
import { getPluginConfig } from '../lib/plugin-config.js';
|
|
5
|
+
import { logger } from '../lib/plugin-logger.js';
|
|
6
|
+
/**
|
|
7
|
+
* Check for available skill updates
|
|
8
|
+
*/
|
|
9
|
+
export default defineCommand({
|
|
10
|
+
meta: {
|
|
11
|
+
name: 'check',
|
|
12
|
+
description: 'Check for available skill updates',
|
|
13
|
+
},
|
|
14
|
+
args: {
|
|
15
|
+
json: {
|
|
16
|
+
type: 'boolean',
|
|
17
|
+
description: 'Output as JSON',
|
|
18
|
+
default: false,
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
async run({ args }) {
|
|
22
|
+
const { json: outputJson } = args;
|
|
23
|
+
try {
|
|
24
|
+
const skills = await getAllLockedSkills();
|
|
25
|
+
if (skills.length === 0) {
|
|
26
|
+
if (outputJson) {
|
|
27
|
+
console.log(JSON.stringify({ skills: [], updates: 0 }));
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
logger.info('No skills installed.');
|
|
31
|
+
console.log('');
|
|
32
|
+
console.log('To add a skill, run:');
|
|
33
|
+
console.log(' npx skillstore add <skill-slug>');
|
|
34
|
+
}
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const config = getPluginConfig({});
|
|
38
|
+
if (!outputJson) {
|
|
39
|
+
logger.info('Checking for updates...');
|
|
40
|
+
console.log('');
|
|
41
|
+
}
|
|
42
|
+
const updates = [];
|
|
43
|
+
const upToDate = [];
|
|
44
|
+
const errors = [];
|
|
45
|
+
// Check each skill
|
|
46
|
+
for (const skill of skills) {
|
|
47
|
+
try {
|
|
48
|
+
const manifest = await fetchSkillManifest(config, skill.slug);
|
|
49
|
+
const info = {
|
|
50
|
+
skill,
|
|
51
|
+
currentVersion: skill.version,
|
|
52
|
+
latestVersion: manifest.skill.version,
|
|
53
|
+
hasUpdate: skill.zipHash !== manifest.skill.zipHash,
|
|
54
|
+
};
|
|
55
|
+
if (info.hasUpdate) {
|
|
56
|
+
updates.push(info);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
upToDate.push(info);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
if (err instanceof SkillApiError && err.statusCode === 404) {
|
|
64
|
+
errors.push({ slug: skill.slug, error: 'Skill no longer available' });
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
errors.push({
|
|
68
|
+
slug: skill.slug,
|
|
69
|
+
error: err instanceof Error ? err.message : 'Unknown error',
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (outputJson) {
|
|
75
|
+
console.log(JSON.stringify({
|
|
76
|
+
updates: updates.map((u) => ({
|
|
77
|
+
slug: u.skill.slug,
|
|
78
|
+
currentVersion: u.currentVersion,
|
|
79
|
+
latestVersion: u.latestVersion,
|
|
80
|
+
})),
|
|
81
|
+
upToDate: upToDate.map((u) => u.skill.slug),
|
|
82
|
+
errors,
|
|
83
|
+
}, null, 2));
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
// Display updates available
|
|
87
|
+
if (updates.length > 0) {
|
|
88
|
+
console.log(`Updates available (${updates.length}):`);
|
|
89
|
+
for (let i = 0; i < updates.length; i++) {
|
|
90
|
+
const update = updates[i];
|
|
91
|
+
const isLast = i === updates.length - 1;
|
|
92
|
+
const prefix = isLast ? '└─' : '├─';
|
|
93
|
+
console.log(` ${prefix} ${update.skill.slug} v${update.currentVersion} → v${update.latestVersion}`);
|
|
94
|
+
}
|
|
95
|
+
console.log('');
|
|
96
|
+
}
|
|
97
|
+
// Display up-to-date skills
|
|
98
|
+
if (upToDate.length > 0) {
|
|
99
|
+
console.log(`No updates (${upToDate.length}):`);
|
|
100
|
+
for (let i = 0; i < upToDate.length; i++) {
|
|
101
|
+
const skill = upToDate[i];
|
|
102
|
+
const isLast = i === upToDate.length - 1;
|
|
103
|
+
const prefix = isLast ? '└─' : '├─';
|
|
104
|
+
console.log(` ${prefix} ${skill.skill.slug} v${skill.currentVersion} (latest)`);
|
|
105
|
+
}
|
|
106
|
+
console.log('');
|
|
107
|
+
}
|
|
108
|
+
// Display errors
|
|
109
|
+
if (errors.length > 0) {
|
|
110
|
+
console.log(`Errors (${errors.length}):`);
|
|
111
|
+
for (let i = 0; i < errors.length; i++) {
|
|
112
|
+
const err = errors[i];
|
|
113
|
+
const isLast = i === errors.length - 1;
|
|
114
|
+
const prefix = isLast ? '└─' : '├─';
|
|
115
|
+
console.log(` ${prefix} ${err.slug} (${err.error})`);
|
|
116
|
+
}
|
|
117
|
+
console.log('');
|
|
118
|
+
}
|
|
119
|
+
// Summary
|
|
120
|
+
if (updates.length > 0) {
|
|
121
|
+
logger.info(`Run 'skillstore update' to install ${updates.length} update${updates.length > 1 ? 's' : ''}.`);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
logger.success('All skills are up to date!');
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch (err) {
|
|
128
|
+
logger.error('Failed to check for updates', err instanceof Error ? err : undefined);
|
|
129
|
+
process.exit(1);
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
});
|
|
133
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate lock file from installed skills
|
|
3
|
+
*/
|
|
4
|
+
declare const _default: import("citty").CommandDef<{
|
|
5
|
+
dir: {
|
|
6
|
+
type: "string";
|
|
7
|
+
description: string;
|
|
8
|
+
default: string;
|
|
9
|
+
};
|
|
10
|
+
'dry-run': {
|
|
11
|
+
type: "boolean";
|
|
12
|
+
description: string;
|
|
13
|
+
default: false;
|
|
14
|
+
};
|
|
15
|
+
}>;
|
|
16
|
+
export default _default;
|
|
17
|
+
//# sourceMappingURL=generate-lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate-lock.d.ts","sourceRoot":"","sources":["../../src/commands/generate-lock.ts"],"names":[],"mappings":"AAQA;;GAEG;;;;;;;;;;;;;AACH,wBAyIG"}
|