skillstore 0.1.2 → 0.1.3
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/commands/install.js +44 -20
- package/dist/commands/install.js.map +1 -1
- 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/package.json +1 -1
package/dist/commands/install.js
CHANGED
|
@@ -3,8 +3,8 @@ import { mkdir, writeFile, access } from 'node:fs/promises';
|
|
|
3
3
|
import { dirname, join } from 'node:path';
|
|
4
4
|
import { getPluginConfig } from '../lib/plugin-config.js';
|
|
5
5
|
import { fetchManifest, reportInstallation, reportSkillInstall, PluginApiError } from '../lib/plugin-api.js';
|
|
6
|
-
import {
|
|
7
|
-
import { verifyManifest } from '../lib/plugin-verify.js';
|
|
6
|
+
import { fetchSkillManifest, downloadSkillZip, SkillApiError } from '../lib/skill-api.js';
|
|
7
|
+
import { verifyManifest, verifySkillManifest, verifyZipHash } from '../lib/plugin-verify.js';
|
|
8
8
|
import { downloadAllSkills, printDownloadSummary } from '../lib/plugin-download.js';
|
|
9
9
|
import { logger } from '../lib/plugin-logger.js';
|
|
10
10
|
/**
|
|
@@ -38,7 +38,7 @@ export default defineCommand({
|
|
|
38
38
|
},
|
|
39
39
|
'skip-verify': {
|
|
40
40
|
type: 'boolean',
|
|
41
|
-
description: 'Skip manifest signature verification
|
|
41
|
+
description: 'Skip manifest signature verification',
|
|
42
42
|
default: false,
|
|
43
43
|
},
|
|
44
44
|
'dry-run': {
|
|
@@ -63,7 +63,7 @@ export default defineCommand({
|
|
|
63
63
|
await installPlugin(slug, { dir, skipVerify, dryRun, overwrite });
|
|
64
64
|
}
|
|
65
65
|
else {
|
|
66
|
-
await installSkill(slug, { dir, dryRun, overwrite });
|
|
66
|
+
await installSkill(slug, { dir, skipVerify, dryRun, overwrite });
|
|
67
67
|
}
|
|
68
68
|
},
|
|
69
69
|
});
|
|
@@ -71,9 +71,10 @@ export default defineCommand({
|
|
|
71
71
|
* Install a single skill
|
|
72
72
|
*/
|
|
73
73
|
async function installSkill(slug, options) {
|
|
74
|
-
const { dir, dryRun, overwrite } = options;
|
|
74
|
+
const { dir, skipVerify, dryRun, overwrite } = options;
|
|
75
75
|
const config = getPluginConfig({
|
|
76
76
|
installDir: dir,
|
|
77
|
+
skipVerify,
|
|
77
78
|
dryRun,
|
|
78
79
|
});
|
|
79
80
|
logger.info(`Installing skill: ${slug}`);
|
|
@@ -82,18 +83,31 @@ async function installSkill(slug, options) {
|
|
|
82
83
|
logger.warn('Dry run mode - no files will be written');
|
|
83
84
|
}
|
|
84
85
|
try {
|
|
85
|
-
// Step 1: Fetch skill
|
|
86
|
-
logger.startSpinner('Fetching skill
|
|
87
|
-
const
|
|
88
|
-
logger.spinnerSuccess(`Found skill: "${
|
|
89
|
-
// Step 2:
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
86
|
+
// Step 1: Fetch skill manifest
|
|
87
|
+
logger.startSpinner('Fetching skill manifest...');
|
|
88
|
+
const manifest = await fetchSkillManifest(config, slug);
|
|
89
|
+
logger.spinnerSuccess(`Found skill: "${manifest.skill.name}"`);
|
|
90
|
+
// Step 2: Verify manifest signature
|
|
91
|
+
if (!skipVerify) {
|
|
92
|
+
logger.startSpinner('Verifying manifest signature...');
|
|
93
|
+
const verifyResult = await verifySkillManifest(manifest);
|
|
94
|
+
if (!verifyResult.valid) {
|
|
95
|
+
logger.spinnerError('Manifest verification failed');
|
|
96
|
+
logger.error(verifyResult.error || 'Unknown verification error');
|
|
97
|
+
process.exit(1);
|
|
98
|
+
}
|
|
99
|
+
logger.spinnerSuccess('Manifest verified');
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
logger.warn('Skipping signature verification');
|
|
103
|
+
}
|
|
104
|
+
// Step 3: Show skill info
|
|
105
|
+
logger.box(`Skill: ${manifest.skill.name}`, [
|
|
106
|
+
`Slug: ${manifest.skill.slug}`,
|
|
107
|
+
`Version: ${manifest.skill.version}`,
|
|
108
|
+
`Author: ${manifest.skill.author || 'Unknown'}`,
|
|
95
109
|
]);
|
|
96
|
-
// Step
|
|
110
|
+
// Step 4: Check if already installed
|
|
97
111
|
const skillDir = join(config.installDir, slug);
|
|
98
112
|
if (!overwrite) {
|
|
99
113
|
try {
|
|
@@ -111,15 +125,25 @@ async function installSkill(slug, options) {
|
|
|
111
125
|
console.log(`Would install to: ${skillDir}`);
|
|
112
126
|
return;
|
|
113
127
|
}
|
|
114
|
-
// Step
|
|
128
|
+
// Step 5: Download skill ZIP
|
|
115
129
|
logger.startSpinner('Downloading skill...');
|
|
116
130
|
const zipBuffer = await downloadSkillZip(config, slug);
|
|
117
131
|
logger.spinnerSuccess('Downloaded skill package');
|
|
118
|
-
// Step
|
|
132
|
+
// Step 6: Verify ZIP hash
|
|
133
|
+
if (!skipVerify) {
|
|
134
|
+
logger.startSpinner('Verifying content integrity...');
|
|
135
|
+
if (!verifyZipHash(zipBuffer, manifest.skill.zipHash)) {
|
|
136
|
+
logger.spinnerError('Content verification failed');
|
|
137
|
+
logger.error('ZIP hash mismatch - content may be corrupted or tampered');
|
|
138
|
+
process.exit(1);
|
|
139
|
+
}
|
|
140
|
+
logger.spinnerSuccess('Content verified');
|
|
141
|
+
}
|
|
142
|
+
// Step 7: Extract ZIP
|
|
119
143
|
logger.startSpinner('Extracting files...');
|
|
120
144
|
await extractZip(zipBuffer, config.installDir);
|
|
121
145
|
logger.spinnerSuccess('Extracted files');
|
|
122
|
-
// Step
|
|
146
|
+
// Step 8: Report installation (non-blocking telemetry)
|
|
123
147
|
try {
|
|
124
148
|
await reportSkillInstall(config, slug);
|
|
125
149
|
logger.debug('Installation telemetry reported');
|
|
@@ -127,7 +151,7 @@ async function installSkill(slug, options) {
|
|
|
127
151
|
catch {
|
|
128
152
|
logger.debug('Failed to report telemetry (non-critical)');
|
|
129
153
|
}
|
|
130
|
-
logger.success(`Skill "${
|
|
154
|
+
logger.success(`Skill "${manifest.skill.name}" installed successfully!`);
|
|
131
155
|
console.log('');
|
|
132
156
|
console.log(`Installed to: ${skillDir}`);
|
|
133
157
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC7G,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { PluginManifest } from './plugin-api.js';
|
|
2
|
+
import type { SkillManifest } from './skill-api.js';
|
|
2
3
|
/**
|
|
3
4
|
* Plugin Manifest Verification
|
|
4
5
|
*
|
|
@@ -32,4 +33,22 @@ export declare function verifyContentHash(content: string, expectedHash: string)
|
|
|
32
33
|
export declare function verifyManifest(manifest: PluginManifest, options?: {
|
|
33
34
|
skipSignature?: boolean;
|
|
34
35
|
}): Promise<VerifyResult>;
|
|
36
|
+
/**
|
|
37
|
+
* Verify skill manifest signature using HMAC-SHA256
|
|
38
|
+
*
|
|
39
|
+
* Similar to verifyManifestSignature but for single skill manifests.
|
|
40
|
+
*/
|
|
41
|
+
export declare function verifySkillManifestSignature(manifest: SkillManifest, key: string): VerifyResult;
|
|
42
|
+
/**
|
|
43
|
+
* Verify skill manifest (signature + structure)
|
|
44
|
+
*/
|
|
45
|
+
export declare function verifySkillManifest(manifest: SkillManifest, options?: {
|
|
46
|
+
skipSignature?: boolean;
|
|
47
|
+
}): Promise<VerifyResult>;
|
|
48
|
+
/**
|
|
49
|
+
* Verify ZIP content hash
|
|
50
|
+
*
|
|
51
|
+
* Computes SHA-256 hash of the ZIP buffer and compares with expected hash.
|
|
52
|
+
*/
|
|
53
|
+
export declare function verifyZipHash(zipBuffer: ArrayBuffer, expectedHash: string): boolean;
|
|
35
54
|
//# sourceMappingURL=plugin-verify.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-verify.d.ts","sourceRoot":"","sources":["../../src/lib/plugin-verify.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin-verify.d.ts","sourceRoot":"","sources":["../../src/lib/plugin-verify.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD;;;;GAIG;AAEH,0BAA0B;AAC1B,MAAM,WAAW,YAAY;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAQD;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACtC,QAAQ,EAAE,cAAc,EACxB,GAAG,EAAE,MAAM,GACT,YAAY,CA6Bd;AAgBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAMhF;AAED;;GAEG;AACH,wBAAsB,cAAc,CACnC,QAAQ,EAAE,cAAc,EACxB,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GACvC,OAAO,CAAC,YAAY,CAAC,CA+BvB;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC3C,QAAQ,EAAE,aAAa,EACvB,GAAG,EAAE,MAAM,GACT,YAAY,CA6Bd;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACxC,QAAQ,EAAE,aAAa,EACvB,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GACvC,OAAO,CAAC,YAAY,CAAC,CAwBvB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAMnF"}
|
|
@@ -94,4 +94,70 @@ export async function verifyManifest(manifest, options = {}) {
|
|
|
94
94
|
}
|
|
95
95
|
return { valid: true };
|
|
96
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* Verify skill manifest signature using HMAC-SHA256
|
|
99
|
+
*
|
|
100
|
+
* Similar to verifyManifestSignature but for single skill manifests.
|
|
101
|
+
*/
|
|
102
|
+
export function verifySkillManifestSignature(manifest, key) {
|
|
103
|
+
try {
|
|
104
|
+
// Extract signature and create unsigned manifest
|
|
105
|
+
const { signature, ...unsignedManifest } = manifest;
|
|
106
|
+
if (!signature) {
|
|
107
|
+
return { valid: false, error: 'Manifest has no signature' };
|
|
108
|
+
}
|
|
109
|
+
// Compute expected signature (matching server-side implementation)
|
|
110
|
+
const dataToSign = JSON.stringify(unsignedManifest, null, 0);
|
|
111
|
+
const expectedSignature = createHmac('sha256', key)
|
|
112
|
+
.update(dataToSign)
|
|
113
|
+
.digest('hex');
|
|
114
|
+
// Constant-time comparison to prevent timing attacks
|
|
115
|
+
const valid = timingSafeEqual(signature, expectedSignature);
|
|
116
|
+
if (!valid) {
|
|
117
|
+
return { valid: false, error: 'Signature verification failed' };
|
|
118
|
+
}
|
|
119
|
+
return { valid: true };
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
return {
|
|
123
|
+
valid: false,
|
|
124
|
+
error: `Verification error: ${err instanceof Error ? err.message : 'Unknown error'}`,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Verify skill manifest (signature + structure)
|
|
130
|
+
*/
|
|
131
|
+
export async function verifySkillManifest(manifest, options = {}) {
|
|
132
|
+
// Validate manifest structure
|
|
133
|
+
if (!manifest.version || manifest.version !== '1.0') {
|
|
134
|
+
return { valid: false, error: 'Unsupported manifest version' };
|
|
135
|
+
}
|
|
136
|
+
if (!manifest.skill?.slug) {
|
|
137
|
+
return { valid: false, error: 'Missing skill slug in manifest' };
|
|
138
|
+
}
|
|
139
|
+
if (!manifest.skill?.zipHash) {
|
|
140
|
+
return { valid: false, error: 'Missing zipHash in manifest' };
|
|
141
|
+
}
|
|
142
|
+
// Verify signature unless skipped
|
|
143
|
+
if (!options.skipSignature) {
|
|
144
|
+
const key = getVerificationKey();
|
|
145
|
+
const signatureResult = verifySkillManifestSignature(manifest, key);
|
|
146
|
+
if (!signatureResult.valid) {
|
|
147
|
+
return signatureResult;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return { valid: true };
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Verify ZIP content hash
|
|
154
|
+
*
|
|
155
|
+
* Computes SHA-256 hash of the ZIP buffer and compares with expected hash.
|
|
156
|
+
*/
|
|
157
|
+
export function verifyZipHash(zipBuffer, expectedHash) {
|
|
158
|
+
const hash = createHash('sha256')
|
|
159
|
+
.update(Buffer.from(zipBuffer))
|
|
160
|
+
.digest('hex');
|
|
161
|
+
return hash === expectedHash;
|
|
162
|
+
}
|
|
97
163
|
//# sourceMappingURL=plugin-verify.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-verify.js","sourceRoot":"","sources":["../../src/lib/plugin-verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,IAAI,qBAAqB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"plugin-verify.js","sourceRoot":"","sources":["../../src/lib/plugin-verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,IAAI,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAgB/F;;;GAGG;AACH,MAAM,wBAAwB,GAAG,kEAAkE,CAAC;AAEpG;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IACjC,OAAO,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,wBAAwB,CAAC;AACtE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CACtC,QAAwB,EACxB,GAAW;IAEX,IAAI,CAAC;QACJ,iDAAiD;QACjD,MAAM,EAAE,SAAS,EAAE,GAAG,gBAAgB,EAAE,GAAG,QAAQ,CAAC;QAEpD,IAAI,CAAC,SAAS,EAAE,CAAC;YAChB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC;QAC7D,CAAC;QAED,mEAAmE;QACnE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC7D,MAAM,iBAAiB,GAAG,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC;aACjD,MAAM,CAAC,UAAU,CAAC;aAClB,MAAM,CAAC,KAAK,CAAC,CAAC;QAEhB,qDAAqD;QACrD,MAAM,KAAK,GAAG,eAAe,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;QAE5D,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAC;QACjE,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO;YACN,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,uBAAuB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE;SACpF,CAAC;IACH,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,CAAS,EAAE,CAAS;IAC5C,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAEpC,OAAO,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,YAAoB;IACtE,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEtE,yDAAyD;IACzD,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IACvE,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,CAAC,KAAK,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;AAC5F,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CACnC,QAAwB,EACxB,UAAuC,EAAE;IAEzC,8BAA8B;IAC9B,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QACrD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC;IAChE,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;QAC5B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC;IACnE,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC;IAC/D,CAAC;IAED,yBAAyB;IACzB,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YACvC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,wBAAwB,KAAK,CAAC,IAAI,IAAI,SAAS,EAAE,EAAE,CAAC;QACnF,CAAC;IACF,CAAC;IAED,kCAAkC;IAClC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,kBAAkB,EAAE,CAAC;QACjC,MAAM,eAAe,GAAG,uBAAuB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC/D,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YAC5B,OAAO,eAAe,CAAC;QACxB,CAAC;IACF,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACxB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,4BAA4B,CAC3C,QAAuB,EACvB,GAAW;IAEX,IAAI,CAAC;QACJ,iDAAiD;QACjD,MAAM,EAAE,SAAS,EAAE,GAAG,gBAAgB,EAAE,GAAG,QAAQ,CAAC;QAEpD,IAAI,CAAC,SAAS,EAAE,CAAC;YAChB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC;QAC7D,CAAC;QAED,mEAAmE;QACnE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC7D,MAAM,iBAAiB,GAAG,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC;aACjD,MAAM,CAAC,UAAU,CAAC;aAClB,MAAM,CAAC,KAAK,CAAC,CAAC;QAEhB,qDAAqD;QACrD,MAAM,KAAK,GAAG,eAAe,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;QAE5D,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAC;QACjE,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACxB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO;YACN,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,uBAAuB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE;SACpF,CAAC;IACH,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,QAAuB,EACvB,UAAuC,EAAE;IAEzC,8BAA8B;IAC9B,IAAI,CAAC,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QACrD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,8BAA8B,EAAE,CAAC;IAChE,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;QAC3B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,gCAAgC,EAAE,CAAC;IAClE,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;QAC9B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,6BAA6B,EAAE,CAAC;IAC/D,CAAC;IAED,kCAAkC;IAClC,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,kBAAkB,EAAE,CAAC;QACjC,MAAM,eAAe,GAAG,4BAA4B,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACpE,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YAC5B,OAAO,eAAe,CAAC;QACxB,CAAC;IACF,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACxB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,SAAsB,EAAE,YAAoB;IACzE,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC;SAC/B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC9B,MAAM,CAAC,KAAK,CAAC,CAAC;IAEhB,OAAO,IAAI,KAAK,YAAY,CAAC;AAC9B,CAAC"}
|
package/dist/lib/skill-api.d.ts
CHANGED
|
@@ -16,6 +16,20 @@ export interface SkillInfo {
|
|
|
16
16
|
qualityScore: number | null;
|
|
17
17
|
pluginPath: string | null;
|
|
18
18
|
}
|
|
19
|
+
/** Skill manifest for verification */
|
|
20
|
+
export interface SkillManifest {
|
|
21
|
+
version: '1.0';
|
|
22
|
+
skill: {
|
|
23
|
+
slug: string;
|
|
24
|
+
name: string;
|
|
25
|
+
version: string;
|
|
26
|
+
author?: string;
|
|
27
|
+
zipHash: string;
|
|
28
|
+
};
|
|
29
|
+
downloadUrl: string;
|
|
30
|
+
signature: string;
|
|
31
|
+
generatedAt: string;
|
|
32
|
+
}
|
|
19
33
|
/** API Error */
|
|
20
34
|
export declare class SkillApiError extends Error {
|
|
21
35
|
statusCode: number;
|
|
@@ -26,6 +40,10 @@ export declare class SkillApiError extends Error {
|
|
|
26
40
|
* Fetch skill info/details
|
|
27
41
|
*/
|
|
28
42
|
export declare function fetchSkillInfo(config: PluginConfig, skillSlug: string): Promise<SkillInfo>;
|
|
43
|
+
/**
|
|
44
|
+
* Fetch skill manifest for verification
|
|
45
|
+
*/
|
|
46
|
+
export declare function fetchSkillManifest(config: PluginConfig, skillSlug: string): Promise<SkillManifest>;
|
|
29
47
|
/**
|
|
30
48
|
* Download skill as ZIP
|
|
31
49
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-api.d.ts","sourceRoot":"","sources":["../../src/lib/skill-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;;GAIG;AAEH,0BAA0B;AAC1B,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,gBAAgB;AAChB,qBAAa,aAAc,SAAQ,KAAK;IAG/B,UAAU,EAAE,MAAM;IAClB,IAAI,CAAC,EAAE,MAAM;gBAFpB,OAAO,EAAE,MAAM,EACR,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE,MAAM,YAAA;CAKrB;AAgBD;;GAEG;AACH,wBAAsB,cAAc,CACnC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,SAAS,CAAC,CA6BpB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACrC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,CAAC,CAgBtB"}
|
|
1
|
+
{"version":3,"file":"skill-api.d.ts","sourceRoot":"","sources":["../../src/lib/skill-api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;;GAIG;AAEH,0BAA0B;AAC1B,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,sCAAsC;AACtC,MAAM,WAAW,aAAa;IAC7B,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,gBAAgB;AAChB,qBAAa,aAAc,SAAQ,KAAK;IAG/B,UAAU,EAAE,MAAM;IAClB,IAAI,CAAC,EAAE,MAAM;gBAFpB,OAAO,EAAE,MAAM,EACR,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE,MAAM,YAAA;CAKrB;AAgBD;;GAEG;AACH,wBAAsB,cAAc,CACnC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,SAAS,CAAC,CA6BpB;AASD;;GAEG;AACH,wBAAsB,kBAAkB,CACvC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,aAAa,CAAC,CA4BxB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACrC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,CAAC,CAgBtB"}
|
package/dist/lib/skill-api.js
CHANGED
|
@@ -47,6 +47,37 @@ export async function fetchSkillInfo(config, skillSlug) {
|
|
|
47
47
|
const result = (await response.json());
|
|
48
48
|
return result.data;
|
|
49
49
|
}
|
|
50
|
+
/**
|
|
51
|
+
* Get the manifest URL for a skill
|
|
52
|
+
*/
|
|
53
|
+
function getSkillManifestUrl(config, skillSlug) {
|
|
54
|
+
return `${config.apiBaseUrl}/skills/${skillSlug}/manifest`;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Fetch skill manifest for verification
|
|
58
|
+
*/
|
|
59
|
+
export async function fetchSkillManifest(config, skillSlug) {
|
|
60
|
+
const url = getSkillManifestUrl(config, skillSlug);
|
|
61
|
+
const response = await fetch(url, {
|
|
62
|
+
method: 'GET',
|
|
63
|
+
headers: {
|
|
64
|
+
Accept: 'application/json',
|
|
65
|
+
},
|
|
66
|
+
signal: AbortSignal.timeout(config.timeout),
|
|
67
|
+
});
|
|
68
|
+
if (!response.ok) {
|
|
69
|
+
const errorText = await response.text().catch(() => 'Unknown error');
|
|
70
|
+
let errorData = {};
|
|
71
|
+
try {
|
|
72
|
+
errorData = JSON.parse(errorText);
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
// Not JSON
|
|
76
|
+
}
|
|
77
|
+
throw new SkillApiError(errorData.error || `Failed to fetch manifest: ${response.statusText}`, response.status, errorData.code);
|
|
78
|
+
}
|
|
79
|
+
return (await response.json());
|
|
80
|
+
}
|
|
50
81
|
/**
|
|
51
82
|
* Download skill as ZIP
|
|
52
83
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-api.js","sourceRoot":"","sources":["../../src/lib/skill-api.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"skill-api.js","sourceRoot":"","sources":["../../src/lib/skill-api.ts"],"names":[],"mappings":"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"}
|