skillmds 1.3.7 → 1.3.8
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/CHANGELOG.md +4 -0
- package/dist/cli.js +15 -14
- package/dist/mcp.js +16 -17
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `get-skill` (published as `skillmds` until 1.3.6) are documented here. Versions follow [semver](https://semver.org).
|
|
4
4
|
|
|
5
|
+
## 1.3.8
|
|
6
|
+
|
|
7
|
+
- **Skills install all their files.** `add`, `update` and the MCP install tool now fetch every registry skill's bundle, not only skills marked as packs. Some skills were recorded as single-file while carrying scripts or references, and installed only their SKILL.md. A single-file skill whose bundle can't be reached still installs from its SKILL.md, as before.
|
|
8
|
+
|
|
5
9
|
## 1.3.7
|
|
6
10
|
|
|
7
11
|
- **The package is now `get-skill`.** Install and run it as `npx get-skill add owner/name`, `npx get-skill search "pdf"`, and so on; MCP clients start the server with `npx -y get-skill`. `npm i -g get-skill` installs the `get-skill` and `skillmd` commands. Every release is still published as `skillmds` too, with identical contents, so existing setups keep working.
|
package/dist/cli.js
CHANGED
|
@@ -920,19 +920,20 @@ async function registryCandidate(owner, name, source, client) {
|
|
|
920
920
|
type: skill.type,
|
|
921
921
|
securityFlags: skill.security_flags
|
|
922
922
|
};
|
|
923
|
+
const missing = [];
|
|
924
|
+
const bundle = await fetchBundle(client.base, registrySlug, client.token, { missing });
|
|
925
|
+
if (bundle && bundle.length) {
|
|
926
|
+
const sk = bundle.find((file) => file.path === "SKILL.md");
|
|
927
|
+
const note2 = bundleNote(bundle, missing);
|
|
928
|
+
return {
|
|
929
|
+
...meta,
|
|
930
|
+
type: bundle.length > 1 ? "pack" : meta.type,
|
|
931
|
+
raw: sk ? sk.contents.toString("utf8") : skillMdFor(skill),
|
|
932
|
+
files: bundle,
|
|
933
|
+
...note2 ? { note: note2 } : {}
|
|
934
|
+
};
|
|
935
|
+
}
|
|
923
936
|
if (skill.type === "pack") {
|
|
924
|
-
const missing = [];
|
|
925
|
-
const bundle = await fetchBundle(client.base, registrySlug, client.token, { missing });
|
|
926
|
-
if (bundle && bundle.length) {
|
|
927
|
-
const sk = bundle.find((file) => file.path === "SKILL.md");
|
|
928
|
-
const note2 = bundleNote(bundle, missing);
|
|
929
|
-
return {
|
|
930
|
-
...meta,
|
|
931
|
-
raw: sk ? sk.contents.toString("utf8") : skillMdFor(skill),
|
|
932
|
-
files: bundle,
|
|
933
|
-
...note2 ? { note: note2 } : {}
|
|
934
|
-
};
|
|
935
|
-
}
|
|
936
937
|
const pack = await resolvePackFiles(skill);
|
|
937
938
|
if (pack) return { ...meta, ...pack };
|
|
938
939
|
}
|
|
@@ -1666,9 +1667,9 @@ function makeDefaultUpdateDeps(opts = {}) {
|
|
|
1666
1667
|
if (e.status === 404) return null;
|
|
1667
1668
|
throw e;
|
|
1668
1669
|
}
|
|
1670
|
+
const bundle = await fetchBundle(base, slug, token);
|
|
1671
|
+
if (bundle?.length) return { files: bundle, commit_sha: skill.commit_sha ?? void 0 };
|
|
1669
1672
|
if (skill.type === "pack") {
|
|
1670
|
-
const bundle = await fetchBundle(base, slug, token);
|
|
1671
|
-
if (bundle?.length) return { files: bundle, commit_sha: skill.commit_sha ?? void 0 };
|
|
1672
1673
|
const pack = await resolvePackFiles(skill);
|
|
1673
1674
|
if (pack) return { files: pack.files, commit_sha: skill.commit_sha ?? void 0 };
|
|
1674
1675
|
}
|
package/dist/mcp.js
CHANGED
|
@@ -205,24 +205,23 @@ async function installFromRegistry(args, ctx, deps = {}) {
|
|
|
205
205
|
if (bad) return bad;
|
|
206
206
|
let files = [{ path: "SKILL.md", contents: raw }];
|
|
207
207
|
let note = "";
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
}
|
|
222
|
-
} catch (e) {
|
|
223
|
-
if (e instanceof IntegrityError) return notice(`Refused: ${owner}/${name} failed integrity verification \u2014 ${e.message}. Not installed.`);
|
|
224
|
-
note = `pack assets could not be fetched (${e instanceof Error ? e.message : String(e)}) \u2014 only SKILL.md was written`;
|
|
208
|
+
const pack = skill.type === "pack";
|
|
209
|
+
try {
|
|
210
|
+
const missing = [];
|
|
211
|
+
const bundle = await getBundle(ctx.base, `${owner}/${name}`, ctx.token, { missing });
|
|
212
|
+
if (bundle?.length) {
|
|
213
|
+
files = bundle.some((f) => f.path === "SKILL.md") ? bundle : [...bundle, { path: "SKILL.md", contents: raw }];
|
|
214
|
+
if (missing.length) note = missingFilesNote(missing);
|
|
215
|
+
} else if (pack) {
|
|
216
|
+
const fromGitHub = await getPackFiles(skill);
|
|
217
|
+
if (fromGitHub) {
|
|
218
|
+
files = fromGitHub.files;
|
|
219
|
+
if (fromGitHub.pinMiss) note = "pinned commit unavailable upstream \u2014 fetched the source repo's default branch instead";
|
|
220
|
+
} else note = "pack assets could not be fetched \u2014 only SKILL.md was written";
|
|
225
221
|
}
|
|
222
|
+
} catch (e) {
|
|
223
|
+
if (e instanceof IntegrityError) return notice(`Refused: ${owner}/${name} failed integrity verification \u2014 ${e.message}. Not installed.`);
|
|
224
|
+
if (pack) note = `pack assets could not be fetched (${e instanceof Error ? e.message : String(e)}) \u2014 only SKILL.md was written`;
|
|
226
225
|
}
|
|
227
226
|
const written = skillMdOf(files);
|
|
228
227
|
if (written === null) files = [...files, { path: "SKILL.md", contents: raw }];
|