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 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
- if (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 {
216
- const pack = await getPackFiles(skill);
217
- if (pack) {
218
- files = pack.files;
219
- if (pack.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";
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 }];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skillmds",
3
- "version": "1.3.7",
3
+ "version": "1.3.8",
4
4
  "description": "Find, install, lint and publish Agent Skills (SKILL.md) from skillmd.com: the get-skill CLI and MCP server.",
5
5
  "license": "MIT",
6
6
  "author": "SkillMD",