@skillsmith/mcp-server 0.4.3 → 0.4.5

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 (104) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/src/context.async.d.ts.map +1 -1
  3. package/dist/src/context.async.js +3 -1
  4. package/dist/src/context.async.js.map +1 -1
  5. package/dist/src/context.d.ts.map +1 -1
  6. package/dist/src/context.js +3 -1
  7. package/dist/src/context.js.map +1 -1
  8. package/dist/src/context.types.d.ts +3 -1
  9. package/dist/src/context.types.d.ts.map +1 -1
  10. package/dist/src/index.js +4 -0
  11. package/dist/src/index.js.map +1 -1
  12. package/dist/src/middleware/toolFeatureMapping.d.ts.map +1 -1
  13. package/dist/src/middleware/toolFeatureMapping.js +2 -0
  14. package/dist/src/middleware/toolFeatureMapping.js.map +1 -1
  15. package/dist/src/tool-dispatch.d.ts.map +1 -1
  16. package/dist/src/tool-dispatch.js +15 -0
  17. package/dist/src/tool-dispatch.js.map +1 -1
  18. package/dist/src/tools/compare.types.d.ts +5 -1
  19. package/dist/src/tools/compare.types.d.ts.map +1 -1
  20. package/dist/src/tools/compare.types.js.map +1 -1
  21. package/dist/src/tools/get-skill.d.ts.map +1 -1
  22. package/dist/src/tools/get-skill.js +16 -0
  23. package/dist/src/tools/get-skill.js.map +1 -1
  24. package/dist/src/tools/index.d.ts +2 -0
  25. package/dist/src/tools/index.d.ts.map +1 -1
  26. package/dist/src/tools/index.js +2 -0
  27. package/dist/src/tools/index.js.map +1 -1
  28. package/dist/src/tools/install.d.ts +4 -23
  29. package/dist/src/tools/install.d.ts.map +1 -1
  30. package/dist/src/tools/install.dep-helpers.d.ts +41 -0
  31. package/dist/src/tools/install.dep-helpers.d.ts.map +1 -0
  32. package/dist/src/tools/install.dep-helpers.js +68 -0
  33. package/dist/src/tools/install.dep-helpers.js.map +1 -0
  34. package/dist/src/tools/install.dep-helpers.test.d.ts +6 -0
  35. package/dist/src/tools/install.dep-helpers.test.d.ts.map +1 -0
  36. package/dist/src/tools/install.dep-helpers.test.js +109 -0
  37. package/dist/src/tools/install.dep-helpers.test.js.map +1 -0
  38. package/dist/src/tools/install.helpers.d.ts +6 -0
  39. package/dist/src/tools/install.helpers.d.ts.map +1 -1
  40. package/dist/src/tools/install.helpers.js +21 -2
  41. package/dist/src/tools/install.helpers.js.map +1 -1
  42. package/dist/src/tools/install.js +27 -35
  43. package/dist/src/tools/install.js.map +1 -1
  44. package/dist/src/tools/install.types.d.ts +7 -0
  45. package/dist/src/tools/install.types.d.ts.map +1 -1
  46. package/dist/src/tools/install.types.js.map +1 -1
  47. package/dist/src/tools/merge.test.d.ts +9 -0
  48. package/dist/src/tools/merge.test.d.ts.map +1 -0
  49. package/dist/src/tools/merge.test.js +161 -0
  50. package/dist/src/tools/merge.test.js.map +1 -0
  51. package/dist/src/tools/outdated.d.ts +101 -0
  52. package/dist/src/tools/outdated.d.ts.map +1 -0
  53. package/dist/src/tools/outdated.js +214 -0
  54. package/dist/src/tools/outdated.js.map +1 -0
  55. package/dist/src/tools/outdated.test.d.ts +6 -0
  56. package/dist/src/tools/outdated.test.d.ts.map +1 -0
  57. package/dist/src/tools/outdated.test.js +287 -0
  58. package/dist/src/tools/outdated.test.js.map +1 -0
  59. package/dist/src/tools/recommend.types.d.ts +3 -3
  60. package/dist/src/tools/skill-audit.test.js +1 -1
  61. package/dist/src/tools/skill-audit.test.js.map +1 -1
  62. package/dist/src/tools/skill-diff.d.ts +2 -2
  63. package/dist/src/tools/skill-pack-audit.d.ts +96 -0
  64. package/dist/src/tools/skill-pack-audit.d.ts.map +1 -0
  65. package/dist/src/tools/skill-pack-audit.js +183 -0
  66. package/dist/src/tools/skill-pack-audit.js.map +1 -0
  67. package/dist/src/tools/suggest.d.ts +4 -4
  68. package/dist/src/tools/uninstall.d.ts +1 -1
  69. package/dist/src/tools/uninstall.d.ts.map +1 -1
  70. package/dist/src/tools/uninstall.js +9 -0
  71. package/dist/src/tools/uninstall.js.map +1 -1
  72. package/dist/src/tools/validate.d.ts.map +1 -1
  73. package/dist/src/tools/validate.dep.test.d.ts +6 -0
  74. package/dist/src/tools/validate.dep.test.d.ts.map +1 -0
  75. package/dist/src/tools/validate.dep.test.js +77 -0
  76. package/dist/src/tools/validate.dep.test.js.map +1 -0
  77. package/dist/src/tools/validate.helpers.d.ts +12 -0
  78. package/dist/src/tools/validate.helpers.d.ts.map +1 -1
  79. package/dist/src/tools/validate.helpers.js +59 -19
  80. package/dist/src/tools/validate.helpers.js.map +1 -1
  81. package/dist/src/tools/validate.js +3 -1
  82. package/dist/src/tools/validate.js.map +1 -1
  83. package/dist/tests/integration/recommend.integration.test.js +1 -0
  84. package/dist/tests/integration/recommend.integration.test.js.map +1 -1
  85. package/dist/tests/integration/setup.d.ts +2 -1
  86. package/dist/tests/integration/setup.d.ts.map +1 -1
  87. package/dist/tests/integration/setup.js +3 -1
  88. package/dist/tests/integration/setup.js.map +1 -1
  89. package/dist/tests/integration/validate.integration.test.js +4 -2
  90. package/dist/tests/integration/validate.integration.test.js.map +1 -1
  91. package/dist/tests/recommend.test.js +1 -0
  92. package/dist/tests/recommend.test.js.map +1 -1
  93. package/dist/tests/unit/install-helpers.test.js +41 -1
  94. package/dist/tests/unit/install-helpers.test.js.map +1 -1
  95. package/dist/tests/unit/skill-pack-audit.test.d.ts +8 -0
  96. package/dist/tests/unit/skill-pack-audit.test.d.ts.map +1 -0
  97. package/dist/tests/unit/skill-pack-audit.test.js +343 -0
  98. package/dist/tests/unit/skill-pack-audit.test.js.map +1 -0
  99. package/dist/tests/unit/validate-helpers.test.js +47 -4
  100. package/dist/tests/unit/validate-helpers.test.js.map +1 -1
  101. package/dist/tests/validate.test.js +4 -0
  102. package/dist/tests/validate.test.js.map +1 -1
  103. package/package.json +2 -2
  104. package/server.json +3 -3
@@ -0,0 +1,287 @@
1
+ /**
2
+ * @fileoverview Unit tests for skill_outdated MCP tool
3
+ * @see SMI-3138: Wave 5 — Dependency intelligence outdated tool
4
+ */
5
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
6
+ import { SkillVersionRepository, SkillDependencyRepository } from '@skillsmith/core';
7
+ import { createTestDatabase, closeDatabase } from '@skillsmith/core/testkit';
8
+ import { executeOutdated } from './outdated.js';
9
+ // ============================================================================
10
+ // Mocks
11
+ // ============================================================================
12
+ vi.mock('./install.helpers.js', () => ({
13
+ loadManifest: vi.fn(),
14
+ }));
15
+ vi.mock('./install.conflict-helpers.js', () => ({
16
+ hashContent: vi.fn((content) => {
17
+ // Simple deterministic mock hash
18
+ if (content === 'latest-content')
19
+ return 'aabbccdd11223344';
20
+ if (content === 'old-content')
21
+ return '11223344aabbccdd';
22
+ return '0000000000000000';
23
+ }),
24
+ }));
25
+ vi.mock('fs', async () => {
26
+ const actual = await vi.importActual('fs');
27
+ return {
28
+ ...actual,
29
+ promises: {
30
+ ...actual.promises,
31
+ readFile: vi.fn(),
32
+ },
33
+ };
34
+ });
35
+ import { loadManifest } from './install.helpers.js';
36
+ import { promises as fs } from 'fs';
37
+ const mockedLoadManifest = vi.mocked(loadManifest);
38
+ const mockedReadFile = vi.mocked(fs.readFile);
39
+ // ============================================================================
40
+ // Helpers
41
+ // ============================================================================
42
+ function makeContext(db) {
43
+ return {
44
+ db,
45
+ skillDependencyRepository: new SkillDependencyRepository(db),
46
+ };
47
+ }
48
+ function emptyManifest() {
49
+ return { version: '1', installedSkills: {} };
50
+ }
51
+ function manifestWithSkills(skills) {
52
+ const installedSkills = {};
53
+ for (const s of skills) {
54
+ installedSkills[s.name] = {
55
+ id: s.id,
56
+ name: s.name,
57
+ version: '1.0.0',
58
+ source: 'registry',
59
+ installPath: s.installPath,
60
+ installedAt: '2026-01-01T00:00:00Z',
61
+ lastUpdated: '2026-01-01T00:00:00Z',
62
+ };
63
+ }
64
+ return { version: '1', installedSkills };
65
+ }
66
+ // ============================================================================
67
+ // Tests
68
+ // ============================================================================
69
+ describe('executeOutdated', () => {
70
+ let db;
71
+ let versionRepo;
72
+ beforeEach(() => {
73
+ db = createTestDatabase();
74
+ versionRepo = new SkillVersionRepository(db);
75
+ vi.clearAllMocks();
76
+ });
77
+ afterEach(() => {
78
+ closeDatabase(db);
79
+ });
80
+ it('returns empty result when manifest has no installed skills', async () => {
81
+ mockedLoadManifest.mockResolvedValue(emptyManifest());
82
+ const result = await executeOutdated({ include_deps: true }, makeContext(db));
83
+ expect(result.skills).toHaveLength(0);
84
+ expect(result.summary.total_installed).toBe(0);
85
+ expect(result.summary.outdated).toBe(0);
86
+ expect(result.summary.up_to_date).toBe(0);
87
+ expect(result.summary.unknown).toBe(0);
88
+ expect(result.summary.missing_deps).toBe(0);
89
+ });
90
+ it('reports all skills as current when hashes match', async () => {
91
+ const skillId = 'community/test-skill';
92
+ mockedLoadManifest.mockResolvedValue(manifestWithSkills([
93
+ { id: skillId, name: 'test-skill', installPath: '/tmp/skills/test-skill' },
94
+ ]));
95
+ mockedReadFile.mockResolvedValue('latest-content');
96
+ // Insert a version record with the same hash as hashContent('latest-content')
97
+ await versionRepo.recordVersion(skillId, 'aabbccdd11223344', '1.2.0');
98
+ const result = await executeOutdated({ include_deps: true }, makeContext(db));
99
+ expect(result.skills).toHaveLength(1);
100
+ expect(result.skills[0].status).toBe('current');
101
+ expect(result.skills[0].installed_hash).toBe('aabbccdd');
102
+ expect(result.skills[0].latest_hash).toBe('aabbccdd');
103
+ expect(result.skills[0].semver).toBe('1.2.0');
104
+ expect(result.summary.up_to_date).toBe(1);
105
+ expect(result.summary.outdated).toBe(0);
106
+ });
107
+ it('reports skill as outdated when hashes differ', async () => {
108
+ const skillId = 'community/outdated-skill';
109
+ mockedLoadManifest.mockResolvedValue(manifestWithSkills([
110
+ { id: skillId, name: 'outdated-skill', installPath: '/tmp/skills/outdated-skill' },
111
+ ]));
112
+ // Local content is old → hashContent returns '11223344aabbccdd'
113
+ mockedReadFile.mockResolvedValue('old-content');
114
+ // Registry has a different hash
115
+ await versionRepo.recordVersion(skillId, 'aabbccdd11223344', '2.0.0');
116
+ const result = await executeOutdated({ include_deps: true }, makeContext(db));
117
+ expect(result.skills).toHaveLength(1);
118
+ expect(result.skills[0].status).toBe('outdated');
119
+ expect(result.skills[0].installed_hash).toBe('11223344');
120
+ expect(result.skills[0].latest_hash).toBe('aabbccdd');
121
+ expect(result.skills[0].semver).toBe('2.0.0');
122
+ expect(result.summary.outdated).toBe(1);
123
+ expect(result.summary.up_to_date).toBe(0);
124
+ });
125
+ it('reports unknown when no version history exists', async () => {
126
+ const skillId = 'community/new-skill';
127
+ mockedLoadManifest.mockResolvedValue(manifestWithSkills([{ id: skillId, name: 'new-skill', installPath: '/tmp/skills/new-skill' }]));
128
+ mockedReadFile.mockResolvedValue('latest-content');
129
+ // No version records in DB for this skill
130
+ const result = await executeOutdated({ include_deps: true }, makeContext(db));
131
+ expect(result.skills).toHaveLength(1);
132
+ expect(result.skills[0].status).toBe('unknown');
133
+ expect(result.summary.unknown).toBe(1);
134
+ });
135
+ it('includes dependency status when include_deps is true', async () => {
136
+ const skillId = 'community/dep-skill';
137
+ const depSkillId = 'community/required-skill';
138
+ mockedLoadManifest.mockResolvedValue(manifestWithSkills([
139
+ { id: skillId, name: 'dep-skill', installPath: '/tmp/skills/dep-skill' },
140
+ { id: depSkillId, name: 'required-skill', installPath: '/tmp/skills/required-skill' },
141
+ ]));
142
+ mockedReadFile.mockResolvedValue('latest-content');
143
+ await versionRepo.recordVersion(skillId, 'aabbccdd11223344', '1.0.0');
144
+ await versionRepo.recordVersion(depSkillId, 'aabbccdd11223344', '1.0.0');
145
+ // Add a dependency: dep-skill depends on required-skill (which IS installed)
146
+ const depRepo = new SkillDependencyRepository(db);
147
+ depRepo.setDependencies(skillId, [
148
+ {
149
+ skill_id: skillId,
150
+ dep_type: 'skill_hard',
151
+ dep_target: depSkillId,
152
+ dep_version: '*',
153
+ dep_source: 'declared',
154
+ confidence: 1.0,
155
+ metadata: null,
156
+ },
157
+ ], 'declared');
158
+ const result = await executeOutdated({ include_deps: true }, makeContext(db));
159
+ const depSkill = result.skills.find((s) => s.id === skillId);
160
+ expect(depSkill?.dependencies).toBeDefined();
161
+ expect(depSkill.dependencies.total).toBe(1);
162
+ expect(depSkill.dependencies.satisfied).toHaveLength(1);
163
+ expect(depSkill.dependencies.missing).toHaveLength(0);
164
+ expect(result.summary.missing_deps).toBe(0);
165
+ });
166
+ it('omits dependency status when include_deps is false', async () => {
167
+ const skillId = 'community/no-dep-check';
168
+ mockedLoadManifest.mockResolvedValue(manifestWithSkills([
169
+ { id: skillId, name: 'no-dep-check', installPath: '/tmp/skills/no-dep-check' },
170
+ ]));
171
+ mockedReadFile.mockResolvedValue('latest-content');
172
+ await versionRepo.recordVersion(skillId, 'aabbccdd11223344', '1.0.0');
173
+ const result = await executeOutdated({ include_deps: false }, makeContext(db));
174
+ expect(result.skills).toHaveLength(1);
175
+ expect(result.skills[0].dependencies).toBeUndefined();
176
+ });
177
+ it('counts missing deps in summary when a skill dep is not installed', async () => {
178
+ const skillId = 'community/lonely-skill';
179
+ mockedLoadManifest.mockResolvedValue(manifestWithSkills([
180
+ { id: skillId, name: 'lonely-skill', installPath: '/tmp/skills/lonely-skill' },
181
+ ]));
182
+ mockedReadFile.mockResolvedValue('latest-content');
183
+ await versionRepo.recordVersion(skillId, 'aabbccdd11223344', '1.0.0');
184
+ // Add a dependency on a skill that is NOT installed
185
+ const depRepo = new SkillDependencyRepository(db);
186
+ depRepo.setDependencies(skillId, [
187
+ {
188
+ skill_id: skillId,
189
+ dep_type: 'skill_hard',
190
+ dep_target: 'community/missing-skill',
191
+ dep_version: '*',
192
+ dep_source: 'declared',
193
+ confidence: 1.0,
194
+ metadata: null,
195
+ },
196
+ ], 'declared');
197
+ const result = await executeOutdated({ include_deps: true }, makeContext(db));
198
+ const skill = result.skills[0];
199
+ expect(skill.dependencies.missing).toHaveLength(1);
200
+ expect(skill.dependencies.missing[0]).toContain('missing-skill');
201
+ expect(result.summary.missing_deps).toBe(1);
202
+ });
203
+ // ===========================================================================
204
+ // SMI-3177: Corrupt manifest entries (missing installPath)
205
+ // ===========================================================================
206
+ it('handles manifest entry with missing installPath gracefully', async () => {
207
+ // Simulate corrupt manifest entry (runtime JSON, not type-checked)
208
+ const corruptManifest = {
209
+ version: '1',
210
+ installedSkills: {
211
+ 'test-skill': {
212
+ id: 'test/test-skill',
213
+ name: 'test-skill',
214
+ version: '1.0.0',
215
+ source: 'registry',
216
+ installedAt: '2026-01-01T00:00:00Z',
217
+ lastUpdated: '2026-01-01T00:00:00Z',
218
+ }, // Cast to bypass TS required field
219
+ },
220
+ };
221
+ mockedLoadManifest.mockResolvedValue(corruptManifest);
222
+ const result = await executeOutdated({ include_deps: true }, makeContext(db));
223
+ expect(result.skills).toHaveLength(1);
224
+ expect(result.skills[0].status).toBe('unknown');
225
+ expect(result.skills[0].installed_hash).toBe('--------');
226
+ expect(result.skills[0].id).toBe('test/test-skill');
227
+ expect(result.skills[0].dependencies).toEqual({ total: 0, satisfied: [], missing: [] });
228
+ expect(result.summary.unknown).toBe(1);
229
+ expect(result.summary.total_installed).toBe(1);
230
+ });
231
+ it('processes valid entries alongside corrupt entries', async () => {
232
+ const manifest = {
233
+ version: '1',
234
+ installedSkills: {
235
+ 'good-skill': {
236
+ id: 'community/good-skill',
237
+ name: 'good-skill',
238
+ version: '1.0.0',
239
+ source: 'registry',
240
+ installPath: '/tmp/skills/good-skill',
241
+ installedAt: '2026-01-01T00:00:00Z',
242
+ lastUpdated: '2026-01-01T00:00:00Z',
243
+ },
244
+ 'bad-skill': {
245
+ id: 'test/bad-skill',
246
+ name: 'bad-skill',
247
+ version: '1.0.0',
248
+ source: 'registry',
249
+ installedAt: '2026-01-01T00:00:00Z',
250
+ lastUpdated: '2026-01-01T00:00:00Z',
251
+ },
252
+ },
253
+ };
254
+ mockedLoadManifest.mockResolvedValue(manifest);
255
+ mockedReadFile.mockResolvedValue('latest-content');
256
+ await versionRepo.recordVersion('community/good-skill', 'aabbccdd11223344', '1.0.0');
257
+ const result = await executeOutdated({ include_deps: true }, makeContext(db));
258
+ expect(result.skills).toHaveLength(2);
259
+ expect(result.summary.total_installed).toBe(2);
260
+ const good = result.skills.find((s) => s.id === 'community/good-skill');
261
+ const bad = result.skills.find((s) => s.id === 'test/bad-skill');
262
+ expect(good?.status).toBe('current');
263
+ expect(bad?.status).toBe('unknown');
264
+ expect(bad?.installed_hash).toBe('--------');
265
+ });
266
+ it('handles corrupt entry with include_deps false', async () => {
267
+ const corruptManifest = {
268
+ version: '1',
269
+ installedSkills: {
270
+ broken: {
271
+ id: 'test/broken',
272
+ name: 'broken',
273
+ version: '1.0.0',
274
+ source: 'registry',
275
+ installedAt: '2026-01-01T00:00:00Z',
276
+ lastUpdated: '2026-01-01T00:00:00Z',
277
+ },
278
+ },
279
+ };
280
+ mockedLoadManifest.mockResolvedValue(corruptManifest);
281
+ const result = await executeOutdated({ include_deps: false }, makeContext(db));
282
+ expect(result.skills).toHaveLength(1);
283
+ expect(result.skills[0].status).toBe('unknown');
284
+ expect(result.skills[0].dependencies).toBeUndefined();
285
+ });
286
+ });
287
+ //# sourceMappingURL=outdated.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outdated.test.js","sourceRoot":"","sources":["../../../src/tools/outdated.test.ts"],"names":[],"mappings":"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"}
@@ -30,14 +30,14 @@ export declare const recommendInputSchema: z.ZodObject<{
30
30
  detect_overlap: boolean;
31
31
  min_similarity: number;
32
32
  project_context?: string | undefined;
33
- role?: "testing" | "documentation" | "security" | "workflow" | "code-quality" | "development-partner" | undefined;
33
+ role?: "testing" | "documentation" | "code-quality" | "workflow" | "security" | "development-partner" | undefined;
34
34
  }, {
35
35
  installed_skills?: string[] | undefined;
36
- limit?: number | undefined;
37
36
  project_context?: string | undefined;
37
+ limit?: number | undefined;
38
38
  detect_overlap?: boolean | undefined;
39
39
  min_similarity?: number | undefined;
40
- role?: "testing" | "documentation" | "security" | "workflow" | "code-quality" | "development-partner" | undefined;
40
+ role?: "testing" | "documentation" | "code-quality" | "workflow" | "security" | "development-partner" | undefined;
41
41
  }>;
42
42
  /**
43
43
  * Input type (before parsing, allows optional fields)
@@ -4,7 +4,7 @@
4
4
  */
5
5
  import { describe, it, expect, beforeEach, afterEach } from 'vitest';
6
6
  import { AdvisoryRepository } from '@skillsmith/core';
7
- import { createTestDatabase, closeDatabase } from '../../../core/tests/helpers/database.js';
7
+ import { createTestDatabase, closeDatabase } from '@skillsmith/core/testkit';
8
8
  import { executeSkillAudit } from './skill-audit.js';
9
9
  // ============================================================================
10
10
  // Helpers
@@ -1 +1 @@
1
- {"version":3,"file":"skill-audit.test.js","sourceRoot":"","sources":["../../../src/tools/skill-audit.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skill-audit.test.js","sourceRoot":"","sources":["../../../src/tools/skill-audit.test.ts"],"names":[],"mappings":"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"}
@@ -22,21 +22,21 @@ export declare const skillDiffInputSchema: z.ZodObject<{
22
22
  hasLocalModifications: z.ZodDefault<z.ZodBoolean>;
23
23
  trustTier: z.ZodDefault<z.ZodEnum<["verified", "community", "experimental"]>>;
24
24
  }, "strip", z.ZodTypeAny, {
25
- trustTier: "verified" | "community" | "experimental";
26
25
  skillId: string;
27
26
  oldContent: string;
28
27
  newContent: string;
29
28
  hasLocalModifications: boolean;
29
+ trustTier: "community" | "verified" | "experimental";
30
30
  oldRiskScore?: number | undefined;
31
31
  newRiskScore?: number | undefined;
32
32
  }, {
33
33
  skillId: string;
34
34
  oldContent: string;
35
35
  newContent: string;
36
- trustTier?: "verified" | "community" | "experimental" | undefined;
37
36
  oldRiskScore?: number | undefined;
38
37
  newRiskScore?: number | undefined;
39
38
  hasLocalModifications?: boolean | undefined;
39
+ trustTier?: "community" | "verified" | "experimental" | undefined;
40
40
  }>;
41
41
  export type SkillDiffInput = z.infer<typeof skillDiffInputSchema>;
42
42
  /** Structured section-level diff response */
@@ -0,0 +1,96 @@
1
+ /**
2
+ * @fileoverview skill_pack_audit MCP tool — detect version drift in a skill pack
3
+ * @module @skillsmith/mcp-server/tools/skill-pack-audit
4
+ * @see SMI-2905: Skill registry version drift detection
5
+ *
6
+ * Scans a skill pack directory (pack_path/skills/{name}/SKILL.md), reads each
7
+ * skill's bundled version: frontmatter, and compares it against the latest
8
+ * semver recorded in the local skill_versions registry cache.
9
+ *
10
+ * Status values:
11
+ * - current — bundled version matches registry
12
+ * - outdated — registry has a newer version
13
+ * - ahead — bundled version is newer than registry cache
14
+ * - no_registry_data — skill not found in local skill_versions cache
15
+ * - missing_version — SKILL.md has no valid version: field
16
+ *
17
+ * Tier gate: Individual (version_tracking feature flag).
18
+ * Community users see a graceful license error response, never a hard throw.
19
+ */
20
+ import { z } from 'zod';
21
+ import type { ToolContext } from '../context.js';
22
+ /**
23
+ * Input schema for skill_pack_audit tool
24
+ */
25
+ export declare const skillPackAuditInputSchema: z.ZodObject<{
26
+ pack_path: z.ZodString;
27
+ }, "strip", z.ZodTypeAny, {
28
+ pack_path: string;
29
+ }, {
30
+ pack_path: string;
31
+ }>;
32
+ export type SkillPackAuditInput = z.infer<typeof skillPackAuditInputSchema>;
33
+ /**
34
+ * Drift status for a single skill in the pack
35
+ */
36
+ export type PackSkillStatus = 'current' | 'outdated' | 'ahead' | 'no_registry_data' | 'missing_version';
37
+ /**
38
+ * Per-skill audit result
39
+ */
40
+ export interface PackSkillEntry {
41
+ /** Skill name from SKILL.md frontmatter (falls back to directory name) */
42
+ name: string;
43
+ /** Version string from the pack's SKILL.md frontmatter, or null if absent */
44
+ bundledVersion: string | null;
45
+ /** Latest semver from the local skill_versions registry cache, or null */
46
+ registryVersion: string | null;
47
+ /** Registry skill identifier (e.g. "author/skill-name") or null if not found */
48
+ skillId: string | null;
49
+ /** Drift status */
50
+ status: PackSkillStatus;
51
+ }
52
+ /**
53
+ * Full response from skill_pack_audit tool
54
+ */
55
+ export interface SkillPackAuditResponse {
56
+ /** Resolved absolute path to the pack */
57
+ packPath: string;
58
+ /** Total number of skills found in the pack */
59
+ skillCount: number;
60
+ /** Number of skills where bundled version differs from registry (outdated + ahead) */
61
+ driftCount: number;
62
+ /** Number of skills not found in the local registry cache */
63
+ noRegistryDataCount: number;
64
+ /** Per-skill audit results, sorted alphabetically by name */
65
+ skills: PackSkillEntry[];
66
+ }
67
+ /**
68
+ * MCP tool definition for skill_pack_audit
69
+ */
70
+ export declare const skillPackAuditToolSchema: {
71
+ name: "skill_pack_audit";
72
+ description: string;
73
+ inputSchema: {
74
+ type: "object";
75
+ properties: {
76
+ pack_path: {
77
+ type: string;
78
+ description: string;
79
+ };
80
+ };
81
+ required: string[];
82
+ };
83
+ };
84
+ /**
85
+ * Execute the skill_pack_audit tool.
86
+ *
87
+ * Scans pack_path/skills/{name}/SKILL.md, parses each skill's name and version
88
+ * from frontmatter, and compares the bundled version against the most recently
89
+ * recorded semver in the local skill_versions table (matched by skill name suffix).
90
+ *
91
+ * @param input Validated tool input
92
+ * @param context Tool context with database connection
93
+ * @returns SkillPackAuditResponse with per-skill drift status
94
+ */
95
+ export declare function executeSkillPackAudit(input: SkillPackAuditInput, context: ToolContext): Promise<SkillPackAuditResponse>;
96
+ //# sourceMappingURL=skill-pack-audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-pack-audit.d.ts","sourceRoot":"","sources":["../../../src/tools/skill-pack-audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAMhD;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;EAQpC,CAAA;AAEF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAE3E;;GAEG;AACH,MAAM,MAAM,eAAe,GACvB,SAAS,GACT,UAAU,GACV,OAAO,GACP,kBAAkB,GAClB,iBAAiB,CAAA;AAErB;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAA;IACZ,6EAA6E;IAC7E,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,0EAA0E;IAC1E,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,gFAAgF;IAChF,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,mBAAmB;IACnB,MAAM,EAAE,eAAe,CAAA;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,yCAAyC;IACzC,QAAQ,EAAE,MAAM,CAAA;IAChB,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAA;IAClB,sFAAsF;IACtF,UAAU,EAAE,MAAM,CAAA;IAClB,6DAA6D;IAC7D,mBAAmB,EAAE,MAAM,CAAA;IAC3B,6DAA6D;IAC7D,MAAM,EAAE,cAAc,EAAE,CAAA;CACzB;AAMD;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;CAkBpC,CAAA;AA4BD;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,mBAAmB,EAC1B,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,sBAAsB,CAAC,CAuGjC"}