@skillsmith/cli 0.6.4 → 0.7.0

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.
Files changed (43) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/commands/audit-sources.action.d.ts.map +1 -1
  4. package/dist/src/commands/audit-sources.action.js +26 -5
  5. package/dist/src/commands/audit-sources.action.js.map +1 -1
  6. package/dist/src/commands/diff.d.ts.map +1 -1
  7. package/dist/src/commands/diff.js +36 -15
  8. package/dist/src/commands/diff.js.map +1 -1
  9. package/dist/src/commands/diff.test.js +22 -0
  10. package/dist/src/commands/diff.test.js.map +1 -1
  11. package/dist/src/commands/index.d.ts +1 -0
  12. package/dist/src/commands/index.d.ts.map +1 -1
  13. package/dist/src/commands/index.js +2 -0
  14. package/dist/src/commands/index.js.map +1 -1
  15. package/dist/src/commands/inventory.action.d.ts +55 -0
  16. package/dist/src/commands/inventory.action.d.ts.map +1 -0
  17. package/dist/src/commands/inventory.action.js +179 -0
  18. package/dist/src/commands/inventory.action.js.map +1 -0
  19. package/dist/src/commands/inventory.action.test.d.ts +19 -0
  20. package/dist/src/commands/inventory.action.test.d.ts.map +1 -0
  21. package/dist/src/commands/inventory.action.test.js +371 -0
  22. package/dist/src/commands/inventory.action.test.js.map +1 -0
  23. package/dist/src/commands/inventory.d.ts +21 -0
  24. package/dist/src/commands/inventory.d.ts.map +1 -0
  25. package/dist/src/commands/inventory.js +42 -0
  26. package/dist/src/commands/inventory.js.map +1 -0
  27. package/dist/src/index.js +3 -1
  28. package/dist/src/index.js.map +1 -1
  29. package/dist/src/utils/skills-directory.d.ts +42 -0
  30. package/dist/src/utils/skills-directory.d.ts.map +1 -1
  31. package/dist/src/utils/skills-directory.js +76 -0
  32. package/dist/src/utils/skills-directory.js.map +1 -1
  33. package/dist/tests/e2e/audit-sources-affix.test.d.ts +11 -0
  34. package/dist/tests/e2e/audit-sources-affix.test.d.ts.map +1 -0
  35. package/dist/tests/e2e/audit-sources-affix.test.js +121 -0
  36. package/dist/tests/e2e/audit-sources-affix.test.js.map +1 -0
  37. package/dist/tests/e2e/audit-sources-roundtrip.test.js +32 -0
  38. package/dist/tests/e2e/audit-sources-roundtrip.test.js.map +1 -1
  39. package/dist/tests/skills-directory-per-harness.test.d.ts +2 -0
  40. package/dist/tests/skills-directory-per-harness.test.d.ts.map +1 -0
  41. package/dist/tests/skills-directory-per-harness.test.js +116 -0
  42. package/dist/tests/skills-directory-per-harness.test.js.map +1 -0
  43. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"skills-directory.js","sourceRoot":"","sources":["../../../src/utils/skills-directory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skills-directory.js","sourceRoot":"","sources":["../../../src/utils/skills-directory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @fileoverview SMI-5413 e2e — affix-tolerant registry-name recovery.
3
+ *
4
+ * A skill installed under a SHORT local dir name (`affixdemo`) is recovered from
5
+ * its `claude-skill-affixdemo` registry entry; an EXACT name match is preferred
6
+ * over affix variants so a clean hit is never downgraded to ambiguous. Real temp
7
+ * filesystem + real temp SQLite (seeded `skills`); $HOME redirected before the
8
+ * dynamic import so the action's module-level MANIFEST_PATH freezes onto it.
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=audit-sources-affix.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-sources-affix.test.d.ts","sourceRoot":"","sources":["../../../tests/e2e/audit-sources-affix.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * @fileoverview SMI-5413 e2e — affix-tolerant registry-name recovery.
3
+ *
4
+ * A skill installed under a SHORT local dir name (`affixdemo`) is recovered from
5
+ * its `claude-skill-affixdemo` registry entry; an EXACT name match is preferred
6
+ * over affix variants so a clean hit is never downgraded to ambiguous. Real temp
7
+ * filesystem + real temp SQLite (seeded `skills`); $HOME redirected before the
8
+ * dynamic import so the action's module-level MANIFEST_PATH freezes onto it.
9
+ */
10
+ import { describe, it, expect, beforeAll, afterAll, vi } from 'vitest';
11
+ import * as fs from 'node:fs';
12
+ import * as os from 'node:os';
13
+ import * as path from 'node:path';
14
+ import { skillMd, seedSkillsDb } from './utils/source-recovery-fixture.js';
15
+ let runAuditSources;
16
+ let tempHome = '';
17
+ let originalHome;
18
+ beforeAll(async () => {
19
+ originalHome = process.env['HOME'];
20
+ tempHome = fs.mkdtempSync(path.join(os.tmpdir(), 'smi5413-home-'));
21
+ process.env['HOME'] = tempHome;
22
+ ({ runAuditSources } = await import('../../src/commands/audit-sources.action.js'));
23
+ });
24
+ afterAll(() => {
25
+ if (originalHome === undefined)
26
+ delete process.env['HOME'];
27
+ else
28
+ process.env['HOME'] = originalHome;
29
+ if (tempHome)
30
+ fs.rmSync(tempHome, { recursive: true, force: true });
31
+ });
32
+ function writeLocalSkill(root, name) {
33
+ const dir = path.join(root, name);
34
+ fs.mkdirSync(dir, { recursive: true });
35
+ fs.writeFileSync(path.join(dir, 'SKILL.md'), skillMd(name));
36
+ }
37
+ function makeOpts(skillsRoot, db) {
38
+ return {
39
+ skillsRoot,
40
+ apply: false,
41
+ yes: false,
42
+ set: undefined,
43
+ minConfidence: 'high',
44
+ json: true,
45
+ embedding: false,
46
+ catalogHint: false,
47
+ writeFrontmatter: false,
48
+ forceWriteFrontmatter: false,
49
+ db,
50
+ };
51
+ }
52
+ async function recover(skillsRoot, db) {
53
+ const chunks = [];
54
+ const spy = vi
55
+ .spyOn(process.stdout, 'write')
56
+ .mockImplementation((chunk) => {
57
+ chunks.push(typeof chunk === 'string' ? chunk : Buffer.from(chunk).toString('utf-8'));
58
+ return true;
59
+ });
60
+ try {
61
+ await runAuditSources(makeOpts(skillsRoot, db));
62
+ }
63
+ finally {
64
+ spy.mockRestore();
65
+ }
66
+ return JSON.parse(chunks.join('').trim()).skills;
67
+ }
68
+ function tmpRoot(tag) {
69
+ return fs.mkdtempSync(path.join(os.tmpdir(), `smi5413-${tag}-`));
70
+ }
71
+ function tmpDb(tag) {
72
+ return path.join(fs.mkdtempSync(path.join(os.tmpdir(), `smi5413-db-${tag}-`)), 'skills.db');
73
+ }
74
+ describe('SMI-5413 e2e — affix-tolerant registry-name recovery', () => {
75
+ it('recovers a short local name from its claude-skill-<name> registry entry', async () => {
76
+ const root = tmpRoot('affix');
77
+ writeLocalSkill(root, 'affixdemo');
78
+ const db = tmpDb('affix');
79
+ await seedSkillsDb(db, [
80
+ {
81
+ id: 'uuid-affix',
82
+ name: 'claude-skill-affixdemo',
83
+ repoUrl: 'https://github.com/wrsmith108/claude-skill-affixdemo',
84
+ qualityScore: 0.5,
85
+ },
86
+ ]);
87
+ const skills = await recover(root, db);
88
+ const s = skills.find((x) => x.skillName === 'affixdemo');
89
+ expect(s?.method).toBe('registry-name');
90
+ expect(s?.confidence).toBe('medium');
91
+ expect(s?.recoveredSource?.url).toBe('https://github.com/wrsmith108/claude-skill-affixdemo');
92
+ fs.rmSync(root, { recursive: true, force: true });
93
+ });
94
+ it('prefers an EXACT name match over affix variants (no ambiguous downgrade)', async () => {
95
+ const root = tmpRoot('exact');
96
+ writeLocalSkill(root, 'affixdemo');
97
+ const db = tmpDb('exact');
98
+ // Both an exact `affixdemo` and an affixed `claude-skill-affixdemo` exist;
99
+ // the exact one must win as a single medium candidate, not become low/ambiguous.
100
+ await seedSkillsDb(db, [
101
+ {
102
+ id: 'uuid-exact',
103
+ name: 'affixdemo',
104
+ repoUrl: 'https://github.com/someone/affixdemo',
105
+ qualityScore: 0.4,
106
+ },
107
+ {
108
+ id: 'uuid-affix2',
109
+ name: 'claude-skill-affixdemo',
110
+ repoUrl: 'https://github.com/wrsmith108/claude-skill-affixdemo',
111
+ qualityScore: 0.9,
112
+ },
113
+ ]);
114
+ const skills = await recover(root, db);
115
+ const s = skills.find((x) => x.skillName === 'affixdemo');
116
+ expect(s?.confidence).toBe('medium');
117
+ expect(s?.recoveredSource?.url).toBe('https://github.com/someone/affixdemo');
118
+ fs.rmSync(root, { recursive: true, force: true });
119
+ });
120
+ });
121
+ //# sourceMappingURL=audit-sources-affix.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-sources-affix.test.js","sourceRoot":"","sources":["../../../tests/e2e/audit-sources-affix.test.ts"],"names":[],"mappings":"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"}
@@ -32,6 +32,10 @@ let originalHome;
32
32
  let dbCounter = 0;
33
33
  // git tier: owner/skill-name id (no registry UUID).
34
34
  const GIT_ID = `${GIT_OWNER}/${FIXTURE_DIRS.git}`;
35
+ // git tier canonical recovered source (both git fixtures share owner/repo).
36
+ const GIT_SOURCE = `https://github.com/${GIT_OWNER}/${GIT_REPO}`;
37
+ // SMI-5411: registry UUID a catalog-known git repo enriches its manifest id to.
38
+ const GIT_REG_UUID = 'b2c3d4e5-0000-4000-8000-000000000002';
35
39
  // registry tier: a single-name match carrying the UUID.
36
40
  const REG_UUID = 'a1b2c3d4-0000-4000-8000-000000000001';
37
41
  const REG_OWNER = 'regowner';
@@ -103,5 +107,33 @@ describe('SMI-5407 e2e GATE (write) — recover -> backfill (scenario 2)', () =>
103
107
  expect(entry(FIXTURE_DIRS.registry)).toBeUndefined();
104
108
  expect(entry(FIXTURE_DIRS.git)).toBeDefined();
105
109
  });
110
+ // SMI-5411: when the git skill's recovered repo_url IS in the local catalog,
111
+ // `audit sources --apply` enriches its manifest id from owner/skill-name to the
112
+ // registry UUID (so skill_outdated can resolve it) WITHOUT changing the exact
113
+ // git SOURCE (View-Changes unchanged). The READ half — that real
114
+ // skill_outdated resolves this UUID id and rejects decoy forms — lives in
115
+ // packages/mcp-server/src/__tests__/skill-outdated-resolution.test.ts.
116
+ it('enriches a catalog-known git skill id to the registry UUID at default confidence', async () => {
117
+ const db = path.join(tempHome, `rt-${dbCounter++}.db`);
118
+ // Seed a catalog row whose repo_url matches the git fixture's recovered
119
+ // source. `name` is distinct from the git fixture dir so the name-match tier
120
+ // is never reached — the git tier short-circuits and only the id is enriched.
121
+ await seedSkillsDb(db, [{ id: GIT_REG_UUID, name: GIT_REPO, repoUrl: GIT_SOURCE }]);
122
+ await runAuditSources(makeOpts({ db, apply: true, yes: true }));
123
+ const git = entry(FIXTURE_DIRS.git);
124
+ expect(git.id).toBe(GIT_REG_UUID); // enriched UUID, not owner/skill-name
125
+ expect(git.id).not.toBe(GIT_ID); // the un-enriched decoy form must not win
126
+ expect(git.source).toBe(GIT_SOURCE); // exact git source unchanged
127
+ expect(buildRawUrl(git.source)).toBe(`https://raw.githubusercontent.com/${GIT_OWNER}/${GIT_REPO}/main/SKILL.md`);
128
+ });
129
+ it('leaves the git id as owner/skill-name when the repo is NOT catalog-known (graceful)', async () => {
130
+ const db = path.join(tempHome, `rt-${dbCounter++}.db`);
131
+ // No skills row for the git repo_url -> findRegistryIdByRepoUrl returns null.
132
+ await seedSkillsDb(db, [{ id: REG_UUID, name: FIXTURE_DIRS.registry, repoUrl: REG_SOURCE }]);
133
+ await runAuditSources(makeOpts({ db, apply: true, yes: true }));
134
+ const git = entry(FIXTURE_DIRS.git);
135
+ expect(git.id).toBe(GIT_ID); // unchanged fallback
136
+ expect(git.source).toBe(GIT_SOURCE);
137
+ });
106
138
  });
107
139
  //# sourceMappingURL=audit-sources-roundtrip.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"audit-sources-roundtrip.test.js","sourceRoot":"","sources":["../../../tests/e2e/audit-sources-roundtrip.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audit-sources-roundtrip.test.js","sourceRoot":"","sources":["../../../tests/e2e/audit-sources-roundtrip.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAC9E,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAC7B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,SAAS,EACT,QAAQ,GACT,MAAM,oCAAoC,CAAA;AAI3C,IAAI,eAA0D,CAAA;AAC9D,IAAI,QAAQ,GAAG,EAAE,CAAA;AACjB,IAAI,UAAU,GAAG,EAAE,CAAA;AACnB,IAAI,YAAY,GAAG,EAAE,CAAA;AACrB,IAAI,YAAgC,CAAA;AACpC,IAAI,SAAS,GAAG,CAAC,CAAA;AAEjB,oDAAoD;AACpD,MAAM,MAAM,GAAG,GAAG,SAAS,IAAI,YAAY,CAAC,GAAG,EAAE,CAAA;AACjD,4EAA4E;AAC5E,MAAM,UAAU,GAAG,sBAAsB,SAAS,IAAI,QAAQ,EAAE,CAAA;AAChE,gFAAgF;AAChF,MAAM,YAAY,GAAG,sCAAsC,CAAA;AAC3D,wDAAwD;AACxD,MAAM,QAAQ,GAAG,sCAAsC,CAAA;AACvD,MAAM,SAAS,GAAG,UAAU,CAAA;AAC5B,MAAM,QAAQ,GAAG,SAAS,CAAA;AAC1B,MAAM,UAAU,GAAG,sBAAsB,SAAS,IAAI,QAAQ,EAAE,CAAA;AAEhE,SAAS,QAAQ,CAAC,CAAgD;IAChE,OAAO;QACL,UAAU;QACV,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,KAAK;QACvB,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,KAAK;QACnB,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,aAAa,EAAE,CAAC,CAAC,aAAa,IAAI,MAAM;QACxC,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,KAAK;QACrB,SAAS,EAAE,KAAK;QAChB,WAAW,EAAE,KAAK;QAClB,gBAAgB,EAAE,KAAK;QACvB,qBAAqB,EAAE,KAAK;QAC5B,EAAE,EAAE,CAAC,CAAC,EAAE;KACT,CAAA;AACH,CAAC;AAED,SAAS,KAAK,CAAC,IAAY;IACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAkB,CAAA;IACpF,OAAO,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;AACvC,CAAC;AAED,SAAS,CAAC,KAAK,IAAI,EAAE;IACnB,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAClC,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,kBAAkB,CAAC,CAAC,CAAA;IACrE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAA;IAC9B,UAAU,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,oBAAoB,CAAC,CAAC,CAAA;IACzE,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,eAAe,CAAC,CAAA;IAClE,kBAAkB,CAAC,UAAU,CAAC,CAC7B;IAAA,CAAC,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,4CAA4C,CAAC,CAAC,CAAA;AACrF,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,GAAG,EAAE;IACZ,IAAI,YAAY,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;;QACrD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,YAAY,CAAA;IACvC,KAAK,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC;QACzC,IAAI,GAAG;YAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAC3D,CAAC;AACH,CAAC,CAAC,CAAA;AAEF,UAAU,CAAC,GAAG,EAAE;IACd,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;AAC1C,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,8DAA8D,EAAE,GAAG,EAAE;IAC5E,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;QAC5F,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,SAAS,EAAE,KAAK,CAAC,CAAA;QACtD,MAAM,YAAY,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA;QAE5F,sEAAsE;QACtE,6EAA6E;QAC7E,MAAM,eAAe,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;QAExF,gEAAgE;QAChE,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAE,CAAA;QAC9C,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAClC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACxC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CACvC,qCAAqC,SAAS,IAAI,QAAQ,gBAAgB,CAC3E,CAAA;QAED,iEAAiE;QACjE,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAE,CAAA;QACpC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC3B,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,sBAAsB,SAAS,IAAI,QAAQ,EAAE,CAAC,CAAA;QACtE,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAA;IAChD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACxF,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,SAAS,EAAE,KAAK,CAAC,CAAA;QACtD,MAAM,YAAY,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA;QAE5F,MAAM,eAAe,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QAE/D,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,EAAE,CAAA;QACpD,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;IAC/C,CAAC,CAAC,CAAA;IAEF,6EAA6E;IAC7E,gFAAgF;IAChF,8EAA8E;IAC9E,iEAAiE;IACjE,0EAA0E;IAC1E,uEAAuE;IACvE,EAAE,CAAC,kFAAkF,EAAE,KAAK,IAAI,EAAE;QAChG,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,SAAS,EAAE,KAAK,CAAC,CAAA;QACtD,wEAAwE;QACxE,6EAA6E;QAC7E,8EAA8E;QAC9E,MAAM,YAAY,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA;QAEnF,MAAM,eAAe,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QAE/D,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAE,CAAA;QACpC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA,CAAC,sCAAsC;QACxE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA,CAAC,0CAA0C;QAC1E,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA,CAAC,6BAA6B;QACjE,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAClC,qCAAqC,SAAS,IAAI,QAAQ,gBAAgB,CAC3E,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qFAAqF,EAAE,KAAK,IAAI,EAAE;QACnG,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,SAAS,EAAE,KAAK,CAAC,CAAA;QACtD,8EAA8E;QAC9E,MAAM,YAAY,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,CAAA;QAE5F,MAAM,eAAe,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QAE/D,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAE,CAAA;QACpC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA,CAAC,qBAAqB;QACjD,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=skills-directory-per-harness.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-directory-per-harness.test.d.ts","sourceRoot":"","sources":["../../tests/skills-directory-per-harness.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * SMI-5390: Tests for `getInstalledSkillsPerHarness` — the cross-harness
3
+ * inventory scanner that returns one entry per (harness × skill) with
4
+ * realpath-only deduplication.
5
+ *
6
+ * Harness pattern follows the existing `skills-directory.test.ts` (SMI-4578):
7
+ * temp `$HOME` + `process.cwd()` spy so we never touch the real `~/.claude`
8
+ * directories. Modules are reset per test so CLIENT_NATIVE_PATHS recomputes
9
+ * against the fake home.
10
+ */
11
+ import { createHash } from 'node:crypto';
12
+ import { mkdir, mkdtemp, rm, symlink, writeFile } from 'node:fs/promises';
13
+ import { tmpdir } from 'node:os';
14
+ import * as path from 'node:path';
15
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
16
+ const ORIGINAL_HOME = process.env['HOME'];
17
+ const ORIGINAL_USERPROFILE = process.env['USERPROFILE'];
18
+ let homeDir;
19
+ let cwdDir;
20
+ beforeEach(async () => {
21
+ homeDir = await mkdtemp(path.join(tmpdir(), 'smi5390-perharness-'));
22
+ cwdDir = await mkdtemp(path.join(tmpdir(), 'smi5390-cwd-'));
23
+ process.env['HOME'] = homeDir;
24
+ process.env['USERPROFILE'] = homeDir;
25
+ vi.spyOn(process, 'cwd').mockReturnValue(cwdDir);
26
+ vi.resetModules();
27
+ });
28
+ afterEach(async () => {
29
+ vi.restoreAllMocks();
30
+ if (ORIGINAL_HOME === undefined)
31
+ delete process.env['HOME'];
32
+ else
33
+ process.env['HOME'] = ORIGINAL_HOME;
34
+ if (ORIGINAL_USERPROFILE === undefined)
35
+ delete process.env['USERPROFILE'];
36
+ else
37
+ process.env['USERPROFILE'] = ORIGINAL_USERPROFILE;
38
+ await Promise.all([
39
+ rm(homeDir, { recursive: true, force: true }),
40
+ rm(cwdDir, { recursive: true, force: true }),
41
+ ]);
42
+ });
43
+ /**
44
+ * Write a minimal SKILL.md under `<skillsRoot>/<id>/SKILL.md` and return
45
+ * the full SKILL.md content so callers can compute the expected hash.
46
+ */
47
+ async function plantSkill(skillsRoot, id, body = '# test\n') {
48
+ const dir = path.join(skillsRoot, id);
49
+ await mkdir(dir, { recursive: true });
50
+ const content = `---\nname: ${id}\nversion: 1.0.0\n---\n${body}`;
51
+ await writeFile(path.join(dir, 'SKILL.md'), content, 'utf-8');
52
+ return { dir, content };
53
+ }
54
+ describe('getInstalledSkillsPerHarness (SMI-5390)', () => {
55
+ it('returns empty when no client directories exist', async () => {
56
+ const { getInstalledSkillsPerHarness } = await import('../src/utils/skills-directory.js');
57
+ const skills = await getInstalledSkillsPerHarness();
58
+ expect(skills).toEqual([]);
59
+ });
60
+ it('same-named skill under two distinct harness directories yields two entries', async () => {
61
+ await plantSkill(path.join(homeDir, '.claude', 'skills'), 'docker', '# claude docker\n');
62
+ await plantSkill(path.join(homeDir, '.cursor', 'skills'), 'docker', '# cursor docker\n');
63
+ const { getInstalledSkillsPerHarness } = await import('../src/utils/skills-directory.js');
64
+ const skills = await getInstalledSkillsPerHarness();
65
+ const dockerEntries = skills.filter((s) => s.skillId === 'docker');
66
+ expect(dockerEntries).toHaveLength(2);
67
+ const harnesses = dockerEntries.map((s) => s.harness);
68
+ expect(harnesses).toContain('claude-code');
69
+ expect(harnesses).toContain('cursor');
70
+ });
71
+ it('symlinked alias (same realpath) yields one entry', async () => {
72
+ // Plant the skill under claude-code, then point ~/.agents/skills at the
73
+ // same directory via a symlink — same inode, different harness path.
74
+ const claudeSkillsDir = path.join(homeDir, '.claude', 'skills');
75
+ await plantSkill(claudeSkillsDir, 'shared', '# shared\n');
76
+ const agentsParent = path.join(homeDir, '.agents');
77
+ await mkdir(agentsParent, { recursive: true });
78
+ // Symlink the entire skills directory, not just the skill subdirectory,
79
+ // matching the real-world scenario where a harness shares another's root.
80
+ await symlink(claudeSkillsDir, path.join(agentsParent, 'skills'));
81
+ const { getInstalledSkillsPerHarness } = await import('../src/utils/skills-directory.js');
82
+ const skills = await getInstalledSkillsPerHarness();
83
+ const sharedEntries = skills.filter((s) => s.skillId === 'shared');
84
+ expect(sharedEntries).toHaveLength(1);
85
+ // claude-code is scanned before agents in precedence order so it wins.
86
+ expect(sharedEntries[0]?.harness).toBe('claude-code');
87
+ });
88
+ it('contentHash is populated for a skill with a readable SKILL.md', async () => {
89
+ const body = '# my tool\n';
90
+ const { content } = await plantSkill(path.join(homeDir, '.claude', 'skills'), 'my-tool', body);
91
+ const { getInstalledSkillsPerHarness } = await import('../src/utils/skills-directory.js');
92
+ const skills = await getInstalledSkillsPerHarness();
93
+ const entry = skills.find((s) => s.skillId === 'my-tool');
94
+ expect(entry).toBeDefined();
95
+ const expectedHash = createHash('sha256').update(content, 'utf8').digest('hex');
96
+ expect(entry?.contentHash).toBe(expectedHash);
97
+ });
98
+ it('contentHash is null for a skill directory without a SKILL.md', async () => {
99
+ // Directory exists but has no SKILL.md — scanner still includes it.
100
+ const dir = path.join(homeDir, '.claude', 'skills', 'bare-dir');
101
+ await mkdir(dir, { recursive: true });
102
+ const { getInstalledSkillsPerHarness } = await import('../src/utils/skills-directory.js');
103
+ const skills = await getInstalledSkillsPerHarness();
104
+ const entry = skills.find((s) => s.skillId === 'bare-dir');
105
+ expect(entry).toBeDefined();
106
+ expect(entry?.contentHash).toBeNull();
107
+ });
108
+ it('version field reflects the SKILL.md version front-matter', async () => {
109
+ await plantSkill(path.join(homeDir, '.claude', 'skills'), 'versioned', '# v\n');
110
+ const { getInstalledSkillsPerHarness } = await import('../src/utils/skills-directory.js');
111
+ const skills = await getInstalledSkillsPerHarness();
112
+ const entry = skills.find((s) => s.skillId === 'versioned');
113
+ expect(entry?.version).toBe('1.0.0');
114
+ });
115
+ });
116
+ //# sourceMappingURL=skills-directory-per-harness.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills-directory-per-harness.test.js","sourceRoot":"","sources":["../../tests/skills-directory-per-harness.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skillsmith/cli",
3
- "version": "0.6.4",
3
+ "version": "0.7.0",
4
4
  "description": "CLI tools for Skillsmith skill discovery and authentication",
5
5
  "type": "module",
6
6
  "bin": {
@@ -17,8 +17,8 @@
17
17
  },
18
18
  "dependencies": {
19
19
  "@inquirer/prompts": "7.10.1",
20
- "@skillsmith/core": "^0.8.1",
21
- "@skillsmith/mcp-server": "^0.5.4",
20
+ "@skillsmith/core": "^0.9.0",
21
+ "@skillsmith/mcp-server": "^0.6.0",
22
22
  "chalk": "5.6.2",
23
23
  "chokidar": "4.0.3",
24
24
  "cli-table3": "0.6.5",