@skillsmith/mcp-server 0.4.2 → 0.4.4
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/README.md +11 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/__tests__/LocalIndexer.test.js +158 -0
- package/dist/src/__tests__/LocalIndexer.test.js.map +1 -1
- package/dist/src/__tests__/compare.test.d.ts +8 -0
- package/dist/src/__tests__/compare.test.d.ts.map +1 -0
- package/dist/src/__tests__/compare.test.js +162 -0
- package/dist/src/__tests__/compare.test.js.map +1 -0
- package/dist/src/__tests__/context.async.test.d.ts +8 -0
- package/dist/src/__tests__/context.async.test.d.ts.map +1 -0
- package/dist/src/__tests__/context.async.test.js +223 -0
- package/dist/src/__tests__/context.async.test.js.map +1 -0
- package/dist/src/__tests__/middleware/errorFormatter.builders.test.d.ts +10 -0
- package/dist/src/__tests__/middleware/errorFormatter.builders.test.d.ts.map +1 -0
- package/dist/src/__tests__/middleware/errorFormatter.builders.test.js +93 -0
- package/dist/src/__tests__/middleware/errorFormatter.builders.test.js.map +1 -0
- package/dist/src/__tests__/middleware/license-renewal.test.d.ts +10 -0
- package/dist/src/__tests__/middleware/license-renewal.test.d.ts.map +1 -0
- package/dist/src/__tests__/middleware/license-renewal.test.js +152 -0
- package/dist/src/__tests__/middleware/license-renewal.test.js.map +1 -0
- package/dist/src/__tests__/middleware/quota-helpers.test.d.ts +9 -0
- package/dist/src/__tests__/middleware/quota-helpers.test.d.ts.map +1 -0
- package/dist/src/__tests__/middleware/quota-helpers.test.js +105 -0
- package/dist/src/__tests__/middleware/quota-helpers.test.js.map +1 -0
- package/dist/src/__tests__/middleware/quota.test.d.ts +12 -0
- package/dist/src/__tests__/middleware/quota.test.d.ts.map +1 -0
- package/dist/src/__tests__/middleware/quota.test.js +189 -0
- package/dist/src/__tests__/middleware/quota.test.js.map +1 -0
- package/dist/src/__tests__/recommend-online-path.test.d.ts +10 -0
- package/dist/src/__tests__/recommend-online-path.test.d.ts.map +1 -0
- package/dist/src/__tests__/recommend-online-path.test.js +225 -0
- package/dist/src/__tests__/recommend-online-path.test.js.map +1 -0
- package/dist/src/__tests__/recommend.test.d.ts +2 -0
- package/dist/src/__tests__/recommend.test.d.ts.map +1 -1
- package/dist/src/__tests__/recommend.test.js +14 -2
- package/dist/src/__tests__/recommend.test.js.map +1 -1
- package/dist/src/__tests__/search-online-path.test.d.ts +10 -0
- package/dist/src/__tests__/search-online-path.test.d.ts.map +1 -0
- package/dist/src/__tests__/search-online-path.test.js +140 -0
- package/dist/src/__tests__/search-online-path.test.js.map +1 -0
- package/dist/src/__tests__/search.test.js +153 -5
- package/dist/src/__tests__/search.test.js.map +1 -1
- package/dist/src/context/project-detector.d.ts.map +1 -1
- package/dist/src/context/project-detector.js +1 -0
- package/dist/src/context/project-detector.js.map +1 -1
- package/dist/src/context.async.d.ts +48 -0
- package/dist/src/context.async.d.ts.map +1 -0
- package/dist/src/context.async.js +217 -0
- package/dist/src/context.async.js.map +1 -0
- package/dist/src/context.d.ts +5 -145
- package/dist/src/context.d.ts.map +1 -1
- package/dist/src/context.helpers.d.ts +25 -0
- package/dist/src/context.helpers.d.ts.map +1 -0
- package/dist/src/context.helpers.js +49 -0
- package/dist/src/context.helpers.js.map +1 -0
- package/dist/src/context.js +13 -228
- package/dist/src/context.js.map +1 -1
- package/dist/src/context.types.d.ts +112 -0
- package/dist/src/context.types.d.ts.map +1 -0
- package/dist/src/context.types.js +10 -0
- package/dist/src/context.types.js.map +1 -0
- package/dist/src/health/readinessCheck.d.ts +1 -1
- package/dist/src/health/readinessCheck.d.ts.map +1 -1
- package/dist/src/index.js +25 -152
- package/dist/src/index.js.map +1 -1
- package/dist/src/indexer/FrontmatterParser.d.ts +6 -0
- package/dist/src/indexer/FrontmatterParser.d.ts.map +1 -1
- package/dist/src/indexer/FrontmatterParser.js +15 -0
- package/dist/src/indexer/FrontmatterParser.js.map +1 -1
- package/dist/src/indexer/LocalIndexer.d.ts +4 -0
- package/dist/src/indexer/LocalIndexer.d.ts.map +1 -1
- package/dist/src/indexer/LocalIndexer.js +3 -0
- package/dist/src/indexer/LocalIndexer.js.map +1 -1
- package/dist/src/middleware/degradation.d.ts.map +1 -1
- package/dist/src/middleware/degradation.js +8 -0
- package/dist/src/middleware/degradation.js.map +1 -1
- package/dist/src/middleware/errorFormatter.builders.d.ts +49 -0
- package/dist/src/middleware/errorFormatter.builders.d.ts.map +1 -0
- package/dist/src/middleware/errorFormatter.builders.js +237 -0
- package/dist/src/middleware/errorFormatter.builders.js.map +1 -0
- package/dist/src/middleware/errorFormatter.d.ts +5 -100
- package/dist/src/middleware/errorFormatter.d.ts.map +1 -1
- package/dist/src/middleware/errorFormatter.js +16 -238
- package/dist/src/middleware/errorFormatter.js.map +1 -1
- package/dist/src/middleware/errorFormatter.types.d.ts +81 -0
- package/dist/src/middleware/errorFormatter.types.d.ts.map +1 -0
- package/dist/src/middleware/errorFormatter.types.js +34 -0
- package/dist/src/middleware/errorFormatter.types.js.map +1 -0
- package/dist/src/middleware/toolFeatureMapping.d.ts +1 -1
- package/dist/src/middleware/toolFeatureMapping.d.ts.map +1 -1
- package/dist/src/middleware/toolFeatureMapping.js +10 -0
- package/dist/src/middleware/toolFeatureMapping.js.map +1 -1
- package/dist/src/tool-dispatch.d.ts +27 -0
- package/dist/src/tool-dispatch.d.ts.map +1 -0
- package/dist/src/tool-dispatch.js +142 -0
- package/dist/src/tool-dispatch.js.map +1 -0
- package/dist/src/tools/LocalSkillSearch.d.ts.map +1 -1
- package/dist/src/tools/LocalSkillSearch.js +4 -0
- package/dist/src/tools/LocalSkillSearch.js.map +1 -1
- package/dist/src/tools/compare.types.d.ts +5 -1
- package/dist/src/tools/compare.types.d.ts.map +1 -1
- package/dist/src/tools/compare.types.js.map +1 -1
- package/dist/src/tools/get-skill.d.ts.map +1 -1
- package/dist/src/tools/get-skill.js +30 -0
- package/dist/src/tools/get-skill.js.map +1 -1
- package/dist/src/tools/index.d.ts +8 -0
- package/dist/src/tools/index.d.ts.map +1 -1
- package/dist/src/tools/index.js +8 -0
- package/dist/src/tools/index.js.map +1 -1
- package/dist/src/tools/install.d.ts +7 -58
- package/dist/src/tools/install.d.ts.map +1 -1
- package/dist/src/tools/install.dep-helpers.d.ts +41 -0
- package/dist/src/tools/install.dep-helpers.d.ts.map +1 -0
- package/dist/src/tools/install.dep-helpers.js +68 -0
- package/dist/src/tools/install.dep-helpers.js.map +1 -0
- package/dist/src/tools/install.dep-helpers.test.d.ts +6 -0
- package/dist/src/tools/install.dep-helpers.test.d.ts.map +1 -0
- package/dist/src/tools/install.dep-helpers.test.js +109 -0
- package/dist/src/tools/install.dep-helpers.test.js.map +1 -0
- package/dist/src/tools/install.js +49 -109
- package/dist/src/tools/install.js.map +1 -1
- package/dist/src/tools/install.optimize.d.ts +46 -0
- package/dist/src/tools/install.optimize.d.ts.map +1 -0
- package/dist/src/tools/install.optimize.js +67 -0
- package/dist/src/tools/install.optimize.js.map +1 -0
- package/dist/src/tools/install.tool.d.ts +44 -0
- package/dist/src/tools/install.tool.d.ts.map +1 -0
- package/dist/src/tools/install.tool.js +44 -0
- package/dist/src/tools/install.tool.js.map +1 -0
- package/dist/src/tools/install.types.d.ts +14 -1
- package/dist/src/tools/install.types.d.ts.map +1 -1
- package/dist/src/tools/install.types.js.map +1 -1
- package/dist/src/tools/outdated.d.ts +101 -0
- package/dist/src/tools/outdated.d.ts.map +1 -0
- package/dist/src/tools/outdated.js +214 -0
- package/dist/src/tools/outdated.js.map +1 -0
- package/dist/src/tools/outdated.test.d.ts +6 -0
- package/dist/src/tools/outdated.test.d.ts.map +1 -0
- package/dist/src/tools/outdated.test.js +287 -0
- package/dist/src/tools/outdated.test.js.map +1 -0
- package/dist/src/tools/recommend.d.ts +2 -4
- package/dist/src/tools/recommend.d.ts.map +1 -1
- package/dist/src/tools/recommend.format.d.ts +28 -0
- package/dist/src/tools/recommend.format.d.ts.map +1 -0
- package/dist/src/tools/recommend.format.js +111 -0
- package/dist/src/tools/recommend.format.js.map +1 -0
- package/dist/src/tools/recommend.js +6 -97
- package/dist/src/tools/recommend.js.map +1 -1
- package/dist/src/tools/recommend.types.d.ts +2 -2
- package/dist/src/tools/search.d.ts +24 -21
- package/dist/src/tools/search.d.ts.map +1 -1
- package/dist/src/tools/search.formatter.d.ts +30 -0
- package/dist/src/tools/search.formatter.d.ts.map +1 -0
- package/dist/src/tools/search.formatter.js +64 -0
- package/dist/src/tools/search.formatter.js.map +1 -0
- package/dist/src/tools/search.js +55 -54
- package/dist/src/tools/search.js.map +1 -1
- package/dist/src/tools/skill-audit.d.ts +98 -0
- package/dist/src/tools/skill-audit.d.ts.map +1 -0
- package/dist/src/tools/skill-audit.js +105 -0
- package/dist/src/tools/skill-audit.js.map +1 -0
- package/dist/src/tools/skill-audit.test.d.ts +6 -0
- package/dist/src/tools/skill-audit.test.d.ts.map +1 -0
- package/dist/src/tools/skill-audit.test.js +121 -0
- package/dist/src/tools/skill-audit.test.js.map +1 -0
- package/dist/src/tools/skill-diff.d.ts +107 -0
- package/dist/src/tools/skill-diff.d.ts.map +1 -0
- package/dist/src/tools/skill-diff.js +268 -0
- package/dist/src/tools/skill-diff.js.map +1 -0
- package/dist/src/tools/skill-diff.test.d.ts +6 -0
- package/dist/src/tools/skill-diff.test.d.ts.map +1 -0
- package/dist/src/tools/skill-diff.test.js +260 -0
- package/dist/src/tools/skill-diff.test.js.map +1 -0
- package/dist/src/tools/skill-pack-audit.d.ts +96 -0
- package/dist/src/tools/skill-pack-audit.d.ts.map +1 -0
- package/dist/src/tools/skill-pack-audit.js +183 -0
- package/dist/src/tools/skill-pack-audit.js.map +1 -0
- package/dist/src/tools/skill-updates.d.ts +1 -1
- package/dist/src/tools/skill-updates.d.ts.map +1 -1
- package/dist/src/tools/uninstall.d.ts.map +1 -1
- package/dist/src/tools/uninstall.js +9 -0
- package/dist/src/tools/uninstall.js.map +1 -1
- package/dist/src/tools/validate.d.ts.map +1 -1
- package/dist/src/tools/validate.dep.test.d.ts +6 -0
- package/dist/src/tools/validate.dep.test.d.ts.map +1 -0
- package/dist/src/tools/validate.dep.test.js +77 -0
- package/dist/src/tools/validate.dep.test.js.map +1 -0
- package/dist/src/tools/validate.helpers.d.ts +12 -0
- package/dist/src/tools/validate.helpers.d.ts.map +1 -1
- package/dist/src/tools/validate.helpers.js +90 -19
- package/dist/src/tools/validate.helpers.js.map +1 -1
- package/dist/src/tools/validate.js +3 -1
- package/dist/src/tools/validate.js.map +1 -1
- package/dist/src/utils/validation.d.ts +13 -0
- package/dist/src/utils/validation.d.ts.map +1 -1
- package/dist/src/utils/validation.js +27 -0
- package/dist/src/utils/validation.js.map +1 -1
- package/dist/tests/health.test.js +4 -4
- package/dist/tests/health.test.js.map +1 -1
- package/dist/tests/integration/recommend.integration.test.js +3 -0
- package/dist/tests/integration/recommend.integration.test.js.map +1 -1
- package/dist/tests/integration/setup.d.ts +4 -1
- package/dist/tests/integration/setup.d.ts.map +1 -1
- package/dist/tests/integration/setup.js +6 -1
- package/dist/tests/integration/setup.js.map +1 -1
- package/dist/tests/integration/validate.integration.test.js +4 -2
- package/dist/tests/integration/validate.integration.test.js.map +1 -1
- package/dist/tests/recommend.test.js +3 -0
- package/dist/tests/recommend.test.js.map +1 -1
- package/dist/tests/unit/skill-pack-audit.test.d.ts +8 -0
- package/dist/tests/unit/skill-pack-audit.test.d.ts.map +1 -0
- package/dist/tests/unit/skill-pack-audit.test.js +342 -0
- package/dist/tests/unit/skill-pack-audit.test.js.map +1 -0
- package/dist/tests/unit/validate-helpers.test.js +99 -2
- package/dist/tests/unit/validate-helpers.test.js.map +1 -1
- package/dist/tests/validate.test.js +4 -0
- package/dist/tests/validate.test.js.map +1 -1
- package/package.json +2 -2
- package/server.json +2 -2
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Tests for skill-diff.ts MCP tool
|
|
3
|
+
* @see SMI-skill-version-tracking Wave 2
|
|
4
|
+
*/
|
|
5
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
6
|
+
import { executeSkillDiff, skillDiffInputSchema } from './skill-diff.js';
|
|
7
|
+
// ============================================================================
|
|
8
|
+
// Mock context
|
|
9
|
+
// ============================================================================
|
|
10
|
+
const mockContext = {};
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// Fixtures
|
|
13
|
+
// ============================================================================
|
|
14
|
+
const OLD_CONTENT = `---
|
|
15
|
+
name: test-skill
|
|
16
|
+
version: 1.0.0
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Overview
|
|
20
|
+
|
|
21
|
+
A test skill.
|
|
22
|
+
|
|
23
|
+
## Usage
|
|
24
|
+
|
|
25
|
+
Run with /test.
|
|
26
|
+
|
|
27
|
+
## Configuration
|
|
28
|
+
|
|
29
|
+
Set env vars.
|
|
30
|
+
`;
|
|
31
|
+
const NEW_CONTENT_MINOR = `---
|
|
32
|
+
name: test-skill
|
|
33
|
+
version: 1.1.0
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Overview
|
|
37
|
+
|
|
38
|
+
A test skill.
|
|
39
|
+
|
|
40
|
+
## Usage
|
|
41
|
+
|
|
42
|
+
Run with /test.
|
|
43
|
+
|
|
44
|
+
## Configuration
|
|
45
|
+
|
|
46
|
+
Set env vars.
|
|
47
|
+
|
|
48
|
+
## Examples
|
|
49
|
+
|
|
50
|
+
Here are some examples.
|
|
51
|
+
`;
|
|
52
|
+
const NEW_CONTENT_MAJOR = `---
|
|
53
|
+
name: test-skill
|
|
54
|
+
version: 2.0.0
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Overview
|
|
58
|
+
|
|
59
|
+
A test skill.
|
|
60
|
+
|
|
61
|
+
## Usage
|
|
62
|
+
|
|
63
|
+
Run with /test.
|
|
64
|
+
`;
|
|
65
|
+
const NEW_CONTENT_PATCH = `---
|
|
66
|
+
name: test-skill
|
|
67
|
+
version: 1.0.1
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## Overview
|
|
71
|
+
|
|
72
|
+
An updated test skill.
|
|
73
|
+
|
|
74
|
+
## Usage
|
|
75
|
+
|
|
76
|
+
Run with /test now.
|
|
77
|
+
|
|
78
|
+
## Configuration
|
|
79
|
+
|
|
80
|
+
Updated env vars.
|
|
81
|
+
`;
|
|
82
|
+
const NEW_CONTENT_WITH_CHANGELOG = `---
|
|
83
|
+
name: test-skill
|
|
84
|
+
version: 1.0.1
|
|
85
|
+
changelog: "Fixed a bug in configuration handling"
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Overview
|
|
89
|
+
|
|
90
|
+
An updated test skill.
|
|
91
|
+
|
|
92
|
+
## Usage
|
|
93
|
+
|
|
94
|
+
Run with /test.
|
|
95
|
+
|
|
96
|
+
## Configuration
|
|
97
|
+
|
|
98
|
+
Updated env vars.
|
|
99
|
+
`;
|
|
100
|
+
// ============================================================================
|
|
101
|
+
// Tests
|
|
102
|
+
// ============================================================================
|
|
103
|
+
describe('executeSkillDiff', () => {
|
|
104
|
+
beforeEach(() => {
|
|
105
|
+
vi.clearAllMocks();
|
|
106
|
+
});
|
|
107
|
+
describe('SkillDiffResponse schema', () => {
|
|
108
|
+
it('returns a valid SkillDiffResponse for a minor update', async () => {
|
|
109
|
+
const result = await executeSkillDiff({
|
|
110
|
+
skillId: 'anthropic/test-skill',
|
|
111
|
+
oldContent: OLD_CONTENT,
|
|
112
|
+
newContent: NEW_CONTENT_MINOR,
|
|
113
|
+
hasLocalModifications: false,
|
|
114
|
+
trustTier: 'community',
|
|
115
|
+
}, mockContext);
|
|
116
|
+
// Verify all required fields are present
|
|
117
|
+
expect(result).toHaveProperty('skill', 'anthropic/test-skill');
|
|
118
|
+
expect(result).toHaveProperty('changeType');
|
|
119
|
+
expect(result).toHaveProperty('sectionsAdded');
|
|
120
|
+
expect(result).toHaveProperty('sectionsRemoved');
|
|
121
|
+
expect(result).toHaveProperty('sectionsModified');
|
|
122
|
+
expect(result).toHaveProperty('riskScoreDelta');
|
|
123
|
+
expect(result).toHaveProperty('changelog');
|
|
124
|
+
expect(result).toHaveProperty('recommendation');
|
|
125
|
+
// Type assertions
|
|
126
|
+
expect(['major', 'minor', 'patch', 'unknown']).toContain(result.changeType);
|
|
127
|
+
expect(Array.isArray(result.sectionsAdded)).toBe(true);
|
|
128
|
+
expect(Array.isArray(result.sectionsRemoved)).toBe(true);
|
|
129
|
+
expect(Array.isArray(result.sectionsModified)).toBe(true);
|
|
130
|
+
expect(['auto-update', 'review-then-update', 'manual-review-required']).toContain(result.recommendation);
|
|
131
|
+
});
|
|
132
|
+
it('detects added sections correctly', async () => {
|
|
133
|
+
const result = await executeSkillDiff({
|
|
134
|
+
skillId: 'test/skill',
|
|
135
|
+
oldContent: OLD_CONTENT,
|
|
136
|
+
newContent: NEW_CONTENT_MINOR,
|
|
137
|
+
hasLocalModifications: false,
|
|
138
|
+
trustTier: 'community',
|
|
139
|
+
}, mockContext);
|
|
140
|
+
expect(result.sectionsAdded).toContain('Examples');
|
|
141
|
+
expect(result.sectionsRemoved).toHaveLength(0);
|
|
142
|
+
});
|
|
143
|
+
it('detects removed sections correctly', async () => {
|
|
144
|
+
const result = await executeSkillDiff({
|
|
145
|
+
skillId: 'test/skill',
|
|
146
|
+
oldContent: OLD_CONTENT,
|
|
147
|
+
newContent: NEW_CONTENT_MAJOR,
|
|
148
|
+
hasLocalModifications: false,
|
|
149
|
+
trustTier: 'community',
|
|
150
|
+
}, mockContext);
|
|
151
|
+
expect(result.sectionsRemoved).toContain('Configuration');
|
|
152
|
+
expect(result.sectionsAdded).toHaveLength(0);
|
|
153
|
+
});
|
|
154
|
+
it('detects modified sections correctly', async () => {
|
|
155
|
+
const result = await executeSkillDiff({
|
|
156
|
+
skillId: 'test/skill',
|
|
157
|
+
oldContent: OLD_CONTENT,
|
|
158
|
+
newContent: NEW_CONTENT_PATCH,
|
|
159
|
+
hasLocalModifications: false,
|
|
160
|
+
trustTier: 'community',
|
|
161
|
+
}, mockContext);
|
|
162
|
+
// Body text changed but no headings added/removed
|
|
163
|
+
expect(result.sectionsRemoved).toHaveLength(0);
|
|
164
|
+
expect(result.sectionsAdded).toHaveLength(0);
|
|
165
|
+
expect(result.sectionsModified.length).toBeGreaterThan(0);
|
|
166
|
+
});
|
|
167
|
+
it('returns riskScoreDelta when scores are provided', async () => {
|
|
168
|
+
const result = await executeSkillDiff({
|
|
169
|
+
skillId: 'test/skill',
|
|
170
|
+
oldContent: OLD_CONTENT,
|
|
171
|
+
newContent: NEW_CONTENT_PATCH,
|
|
172
|
+
oldRiskScore: 10,
|
|
173
|
+
newRiskScore: 30,
|
|
174
|
+
hasLocalModifications: false,
|
|
175
|
+
trustTier: 'community',
|
|
176
|
+
}, mockContext);
|
|
177
|
+
expect(result.riskScoreDelta).toBe(20);
|
|
178
|
+
});
|
|
179
|
+
it('returns null riskScoreDelta when scores are not provided', async () => {
|
|
180
|
+
const result = await executeSkillDiff({
|
|
181
|
+
skillId: 'test/skill',
|
|
182
|
+
oldContent: OLD_CONTENT,
|
|
183
|
+
newContent: NEW_CONTENT_PATCH,
|
|
184
|
+
hasLocalModifications: false,
|
|
185
|
+
trustTier: 'community',
|
|
186
|
+
}, mockContext);
|
|
187
|
+
expect(result.riskScoreDelta).toBeNull();
|
|
188
|
+
});
|
|
189
|
+
it('extracts changelog from frontmatter', async () => {
|
|
190
|
+
const result = await executeSkillDiff({
|
|
191
|
+
skillId: 'test/skill',
|
|
192
|
+
oldContent: OLD_CONTENT,
|
|
193
|
+
newContent: NEW_CONTENT_WITH_CHANGELOG,
|
|
194
|
+
hasLocalModifications: false,
|
|
195
|
+
trustTier: 'community',
|
|
196
|
+
}, mockContext);
|
|
197
|
+
expect(result.changelog).toContain('Fixed a bug');
|
|
198
|
+
});
|
|
199
|
+
it('returns null changelog when none present', async () => {
|
|
200
|
+
const result = await executeSkillDiff({
|
|
201
|
+
skillId: 'test/skill',
|
|
202
|
+
oldContent: OLD_CONTENT,
|
|
203
|
+
newContent: NEW_CONTENT_PATCH,
|
|
204
|
+
hasLocalModifications: false,
|
|
205
|
+
trustTier: 'community',
|
|
206
|
+
}, mockContext);
|
|
207
|
+
expect(result.changelog).toBeNull();
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
describe('recommendation based on changeType', () => {
|
|
211
|
+
it('returns auto-update for patch + verified + changelog', async () => {
|
|
212
|
+
const result = await executeSkillDiff({
|
|
213
|
+
skillId: 'test/skill',
|
|
214
|
+
oldContent: OLD_CONTENT,
|
|
215
|
+
newContent: NEW_CONTENT_WITH_CHANGELOG,
|
|
216
|
+
hasLocalModifications: false,
|
|
217
|
+
trustTier: 'verified',
|
|
218
|
+
}, mockContext);
|
|
219
|
+
expect(result.recommendation).toBe('auto-update');
|
|
220
|
+
});
|
|
221
|
+
it('returns manual-review-required for major + local mods + risk increase', async () => {
|
|
222
|
+
const result = await executeSkillDiff({
|
|
223
|
+
skillId: 'test/skill',
|
|
224
|
+
oldContent: OLD_CONTENT,
|
|
225
|
+
newContent: NEW_CONTENT_MAJOR,
|
|
226
|
+
oldRiskScore: 10,
|
|
227
|
+
newRiskScore: 60,
|
|
228
|
+
hasLocalModifications: true,
|
|
229
|
+
trustTier: 'community',
|
|
230
|
+
}, mockContext);
|
|
231
|
+
expect(result.recommendation).toBe('manual-review-required');
|
|
232
|
+
});
|
|
233
|
+
});
|
|
234
|
+
describe('input validation', () => {
|
|
235
|
+
it('rejects empty skillId', () => {
|
|
236
|
+
expect(() => skillDiffInputSchema.parse({
|
|
237
|
+
skillId: '',
|
|
238
|
+
oldContent: 'old',
|
|
239
|
+
newContent: 'new',
|
|
240
|
+
})).toThrow();
|
|
241
|
+
});
|
|
242
|
+
it('rejects empty oldContent', () => {
|
|
243
|
+
expect(() => skillDiffInputSchema.parse({
|
|
244
|
+
skillId: 'test/skill',
|
|
245
|
+
oldContent: '',
|
|
246
|
+
newContent: 'new',
|
|
247
|
+
})).toThrow();
|
|
248
|
+
});
|
|
249
|
+
it('accepts optional fields', () => {
|
|
250
|
+
const parsed = skillDiffInputSchema.parse({
|
|
251
|
+
skillId: 'test/skill',
|
|
252
|
+
oldContent: 'old content',
|
|
253
|
+
newContent: 'new content',
|
|
254
|
+
});
|
|
255
|
+
expect(parsed.hasLocalModifications).toBe(false);
|
|
256
|
+
expect(parsed.trustTier).toBe('community');
|
|
257
|
+
});
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
//# sourceMappingURL=skill-diff.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-diff.test.js","sourceRoot":"","sources":["../../../src/tools/skill-diff.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|
|
@@ -0,0 +1,183 @@
|
|
|
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 { promises as fs } from 'fs';
|
|
22
|
+
import { join, resolve, sep } from 'path';
|
|
23
|
+
import { SkillsmithError, ErrorCodes } from '@skillsmith/core';
|
|
24
|
+
import { parseYamlFrontmatter, hasPathTraversal } from './validate.helpers.js';
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// Input / Output types
|
|
27
|
+
// ============================================================================
|
|
28
|
+
/**
|
|
29
|
+
* Input schema for skill_pack_audit tool
|
|
30
|
+
*/
|
|
31
|
+
export const skillPackAuditInputSchema = z.object({
|
|
32
|
+
pack_path: z
|
|
33
|
+
.string()
|
|
34
|
+
.min(1)
|
|
35
|
+
.describe('Absolute path to the skill pack root directory. ' +
|
|
36
|
+
'Must contain a skills/ subdirectory with skill folders each containing SKILL.md.'),
|
|
37
|
+
});
|
|
38
|
+
// ============================================================================
|
|
39
|
+
// Tool schema (MCP tool definition)
|
|
40
|
+
// ============================================================================
|
|
41
|
+
/**
|
|
42
|
+
* MCP tool definition for skill_pack_audit
|
|
43
|
+
*/
|
|
44
|
+
export const skillPackAuditToolSchema = {
|
|
45
|
+
name: 'skill_pack_audit',
|
|
46
|
+
description: 'Audit a skill pack directory for version drift by comparing each bundled SKILL.md ' +
|
|
47
|
+
'version against the Skillsmith registry cache. Reports which skills are current, ' +
|
|
48
|
+
'outdated, ahead, or missing from the registry. ' +
|
|
49
|
+
'Requires Individual tier or higher.',
|
|
50
|
+
inputSchema: {
|
|
51
|
+
type: 'object',
|
|
52
|
+
properties: {
|
|
53
|
+
pack_path: {
|
|
54
|
+
type: 'string',
|
|
55
|
+
description: 'Absolute path to the skill pack root directory (must contain a skills/ subdirectory).',
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
required: ['pack_path'],
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
// ============================================================================
|
|
62
|
+
// Internal helpers
|
|
63
|
+
// ============================================================================
|
|
64
|
+
/**
|
|
65
|
+
* Compare two semver strings.
|
|
66
|
+
* Returns: 1 if a > b, -1 if a < b, 0 if equal.
|
|
67
|
+
* Both inputs must be valid "X.Y.Z" semver strings.
|
|
68
|
+
*/
|
|
69
|
+
function compareSemver(a, b) {
|
|
70
|
+
const pa = a.split('.').map(Number);
|
|
71
|
+
const pb = b.split('.').map(Number);
|
|
72
|
+
for (let i = 0; i < 3; i++) {
|
|
73
|
+
if ((pa[i] ?? 0) > (pb[i] ?? 0))
|
|
74
|
+
return 1;
|
|
75
|
+
if ((pa[i] ?? 0) < (pb[i] ?? 0))
|
|
76
|
+
return -1;
|
|
77
|
+
}
|
|
78
|
+
return 0;
|
|
79
|
+
}
|
|
80
|
+
/** Semver validation regex — matches only X.Y.Z (no pre-release) */
|
|
81
|
+
const SEMVER_RE = /^\d+\.\d+\.\d+$/;
|
|
82
|
+
// ============================================================================
|
|
83
|
+
// Execution
|
|
84
|
+
// ============================================================================
|
|
85
|
+
/**
|
|
86
|
+
* Execute the skill_pack_audit tool.
|
|
87
|
+
*
|
|
88
|
+
* Scans pack_path/skills/{name}/SKILL.md, parses each skill's name and version
|
|
89
|
+
* from frontmatter, and compares the bundled version against the most recently
|
|
90
|
+
* recorded semver in the local skill_versions table (matched by skill name suffix).
|
|
91
|
+
*
|
|
92
|
+
* @param input Validated tool input
|
|
93
|
+
* @param context Tool context with database connection
|
|
94
|
+
* @returns SkillPackAuditResponse with per-skill drift status
|
|
95
|
+
*/
|
|
96
|
+
export async function executeSkillPackAudit(input, context) {
|
|
97
|
+
// Security: reject path traversal in the pack_path itself
|
|
98
|
+
if (hasPathTraversal(input.pack_path)) {
|
|
99
|
+
throw new SkillsmithError(ErrorCodes.VALIDATION_INVALID_TYPE, 'pack_path contains a path traversal pattern');
|
|
100
|
+
}
|
|
101
|
+
const packPath = resolve(input.pack_path);
|
|
102
|
+
const skillsDir = join(packPath, 'skills');
|
|
103
|
+
// Discover subdirectories in skills/
|
|
104
|
+
let skillDirNames;
|
|
105
|
+
try {
|
|
106
|
+
const entries = await fs.readdir(skillsDir, { withFileTypes: true });
|
|
107
|
+
skillDirNames = entries.filter((e) => e.isDirectory()).map((e) => e.name);
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
throw new SkillsmithError(ErrorCodes.SKILL_NOT_FOUND, `No skills/ directory found at ${skillsDir}`);
|
|
111
|
+
}
|
|
112
|
+
if (skillDirNames.length > 500) {
|
|
113
|
+
throw new SkillsmithError(ErrorCodes.VALIDATION_INVALID_TYPE, `Pack contains ${skillDirNames.length} skill directories; maximum is 500`);
|
|
114
|
+
}
|
|
115
|
+
const skills = [];
|
|
116
|
+
for (const dirName of skillDirNames) {
|
|
117
|
+
const skillMdPath = join(skillsDir, dirName, 'SKILL.md');
|
|
118
|
+
let resolvedMdPath;
|
|
119
|
+
try {
|
|
120
|
+
resolvedMdPath = await fs.realpath(skillMdPath);
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
if (!resolvedMdPath.startsWith(packPath + sep))
|
|
126
|
+
continue;
|
|
127
|
+
let content;
|
|
128
|
+
try {
|
|
129
|
+
content = await fs.readFile(resolvedMdPath, 'utf-8');
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
const metadata = parseYamlFrontmatter(content);
|
|
135
|
+
const name = typeof metadata?.name === 'string' && metadata.name ? metadata.name : dirName;
|
|
136
|
+
const rawVersion = typeof metadata?.version === 'string' ? metadata.version : null;
|
|
137
|
+
const bundledVersion = rawVersion && SEMVER_RE.test(rawVersion) ? rawVersion : null;
|
|
138
|
+
// Look up the most recently recorded registry version for this skill name.
|
|
139
|
+
// skill_id format is "author/skill-name"; we match by name suffix.
|
|
140
|
+
// Escape LIKE special characters in name to prevent injection.
|
|
141
|
+
// Backslash must be escaped first (before adding backslash-prefixed escapes for % and _).
|
|
142
|
+
const escapedName = name.replace(/\\/g, '\\\\').replace(/%/g, '\\%').replace(/_/g, '\\_');
|
|
143
|
+
const row = context.db
|
|
144
|
+
.prepare(`SELECT skill_id, semver
|
|
145
|
+
FROM skill_versions
|
|
146
|
+
WHERE skill_id LIKE '%/' || ? ESCAPE '\\'
|
|
147
|
+
ORDER BY recorded_at DESC
|
|
148
|
+
LIMIT 1`)
|
|
149
|
+
.get(escapedName);
|
|
150
|
+
let status;
|
|
151
|
+
let registryVersion = null;
|
|
152
|
+
let skillId = null;
|
|
153
|
+
if (!bundledVersion) {
|
|
154
|
+
status = 'missing_version';
|
|
155
|
+
}
|
|
156
|
+
else if (!row || !row.semver || !SEMVER_RE.test(row.semver)) {
|
|
157
|
+
status = 'no_registry_data';
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
registryVersion = row.semver;
|
|
161
|
+
skillId = row.skill_id;
|
|
162
|
+
const cmp = compareSemver(bundledVersion, registryVersion);
|
|
163
|
+
if (cmp === 0)
|
|
164
|
+
status = 'current';
|
|
165
|
+
else if (cmp < 0)
|
|
166
|
+
status = 'outdated';
|
|
167
|
+
else
|
|
168
|
+
status = 'ahead';
|
|
169
|
+
}
|
|
170
|
+
skills.push({ name, bundledVersion, registryVersion, skillId, status });
|
|
171
|
+
}
|
|
172
|
+
skills.sort((a, b) => a.name.localeCompare(b.name));
|
|
173
|
+
const driftCount = skills.filter((s) => s.status === 'outdated' || s.status === 'ahead').length;
|
|
174
|
+
const noRegistryDataCount = skills.filter((s) => s.status === 'no_registry_data').length;
|
|
175
|
+
return {
|
|
176
|
+
packPath,
|
|
177
|
+
skillCount: skills.length,
|
|
178
|
+
driftCount,
|
|
179
|
+
noRegistryDataCount,
|
|
180
|
+
skills,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=skill-pack-audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-pack-audit.js","sourceRoot":"","sources":["../../../src/tools/skill-pack-audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,7 +34,7 @@ export interface SkillUpdateInfo {
|
|
|
34
34
|
skillId: string;
|
|
35
35
|
/** 8-char prefix of the oldest recorded hash in skill_versions (earliest registry sync) */
|
|
36
36
|
installedHash: string;
|
|
37
|
-
/** 8-char prefix of the most-recent recorded hash
|
|
37
|
+
/** 8-char prefix of the most-recent recorded hash (current registry state) */
|
|
38
38
|
latestHash: string;
|
|
39
39
|
/** Optional semver from the latest version record */
|
|
40
40
|
semver: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-updates.d.ts","sourceRoot":"","sources":["../../../src/tools/skill-updates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAMhD;;GAEG;AACH,eAAO,MAAM,uBAAuB;IAClC,2DAA2D;;;;;;EAK3D,CAAA;AAEF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAEvE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAA;IACf,2FAA2F;IAC3F,aAAa,EAAE,MAAM,CAAA;IACrB,
|
|
1
|
+
{"version":3,"file":"skill-updates.d.ts","sourceRoot":"","sources":["../../../src/tools/skill-updates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAMhD;;GAEG;AACH,eAAO,MAAM,uBAAuB;IAClC,2DAA2D;;;;;;EAK3D,CAAA;AAEF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAA;AAEvE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAA;IACf,2FAA2F;IAC3F,aAAa,EAAE,MAAM,CAAA;IACrB,8EAA8E;IAC9E,UAAU,EAAE,MAAM,CAAA;IAClB,qDAAqD;IACrD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAA;IACf,qEAAqE;IACrE,MAAM,EAAE,OAAO,CAAA;IACf,oEAAoE;IACpE,eAAe,EAAE,OAAO,CAAA;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,gBAAgB,EAAE,MAAM,CAAA;IACxB,wBAAwB;IACxB,MAAM,EAAE,eAAe,EAAE,CAAA;CAC1B;AAMD;;GAEG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;CAiBlC,CAAA;AAMD;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,iBAAiB,EACxB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,oBAAoB,CAAC,CAqD/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../../src/tools/uninstall.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAGhD,eAAO,MAAM,oBAAoB;;;;;;;;;EAG/B,CAAA;AAEF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAGjE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAiFD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,cAAc,EACrB,QAAQ,CAAC,EAAE,WAAW,GACrB,OAAO,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../../src/tools/uninstall.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAGhD,eAAO,MAAM,oBAAoB;;;;;;;;;EAG/B,CAAA;AAEF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAGjE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAiFD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,cAAc,EACrB,QAAQ,CAAC,EAAE,WAAW,GACrB,OAAO,CAAC,eAAe,CAAC,CAgG1B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAG7D;AAED;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;CAiBzB,CAAA;AAED,eAAe,aAAa,CAAA"}
|
|
@@ -189,6 +189,15 @@ export async function uninstallSkill(input, _context) {
|
|
|
189
189
|
}
|
|
190
190
|
// Already removed, continue to update manifest
|
|
191
191
|
}
|
|
192
|
+
// SMI-3137: Clean up dependency records
|
|
193
|
+
if (_context?.skillDependencyRepository) {
|
|
194
|
+
try {
|
|
195
|
+
_context.skillDependencyRepository.clearAll(skillEntry.id);
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
// Dependency cleanup is best-effort — table may not exist pre-migration
|
|
199
|
+
}
|
|
200
|
+
}
|
|
192
201
|
// Update manifest
|
|
193
202
|
delete manifest.installedSkills[skillName];
|
|
194
203
|
await saveManifest(manifest);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../../src/tools/uninstall.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AAGxB,eAAe;AACf,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACvE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC;CAC7E,CAAC,CAAA;AAaF,QAAQ;AACR,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAA;AACtE,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAA;AAC7D,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC,CAAA;AAkBhE;;GAEG;AACH,KAAK,UAAU,YAAY;IACzB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;QACzD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,OAAO,EAAE,OAAO;YAChB,eAAe,EAAE,EAAE;SACpB,CAAA;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CAAC,QAAuB;IACjD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAChE,MAAM,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;AACtE,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,qBAAqB,CAAC,SAAiB,EAAE,WAAmB;IACzE,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAA;QAEzC,mCAAmC;QACnC,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;QAElE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;gBAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;gBAChD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;gBAErC,uCAAuC;gBACvC,IAAI,KAAK,CAAC,KAAK,GAAG,WAAW,EAAE,CAAC;oBAC9B,OAAO,IAAI,CAAA;gBACb,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAAC,OAAe;IAC5C,MAAM,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;AACxD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,KAAqB,EACrB,QAAsB;IAEtB,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,KAAK,CAAA;IAElC,IAAI,CAAC;QACH,gBAAgB;QAChB,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAA;QACrC,MAAM,UAAU,GAAG,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,CAAA;QAEtD,oCAAoC;QACpC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,oCAAoC;YACpC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAA;YAE7D,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;gBAE9B,2CAA2C;gBAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,OAAO;wBACL,OAAO,EAAE,KAAK;wBACd,SAAS;wBACT,OAAO,EAAE,UAAU,SAAS,iEAAiE;wBAC7F,OAAO,EAAE,8CAA8C;qBACxD,CAAA;gBACH,CAAC;gBAED,eAAe;gBACf,MAAM,eAAe,CAAC,aAAa,CAAC,CAAA;gBACpC,OAAO;oBACL,OAAO,EAAE,IAAI;oBACb,SAAS;oBACT,OAAO,EAAE,UAAU,SAAS,4CAA4C;oBACxE,WAAW,EAAE,aAAa;iBAC3B,CAAA;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,SAAS;oBACT,OAAO,EAAE,UAAU,SAAS,qBAAqB;iBAClD,CAAA;YACH,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAA;QAE1C,0BAA0B;QAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,WAAW,EAAE,UAAU,CAAC,WAAW,CAAC,CAAA;YAEjF,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,SAAS;oBACT,OAAO,EAAE,UAAU,SAAS,0EAA0E;oBACtG,OAAO,EAAE,0DAA0D;iBACpE,CAAA;YACH,CAAC;QACH,CAAC;QAED,yBAAyB;QACzB,IAAI,CAAC;YACH,MAAM,eAAe,CAAC,WAAW,CAAC,CAAA;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,MAAM,KAAK,CAAA;YACb,CAAC;YACD,+CAA+C;QACjD,CAAC;QAED,kBAAkB;QAClB,OAAO,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,CAAA;QAC1C,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAA;QAE5B,OAAO;YACL,OAAO,EAAE,IAAI;YACb,SAAS;YACT,OAAO,EAAE,UAAU,SAAS,sCAAsC;YAClE,WAAW,EAAE,WAAW;SACzB,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,SAAS;YACT,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,gCAAgC;SACnF,CAAA;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAA;IACrC,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAA;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,sDAAsD;IACnE,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,gCAAgC;aAC9C;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,+CAA+C;aAC7D;SACF;QACD,QAAQ,EAAE,CAAC,WAAW,CAAC;KACxB;CACF,CAAA;AAED,eAAe,aAAa,CAAA"}
|
|
1
|
+
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../../src/tools/uninstall.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/tools/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAGhD,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAmB,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/tools/validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAGhD,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAmB,MAAM,qBAAqB,CAAA;AAa3F,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAC3F,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAE7E;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,aAAa,EACpB,QAAQ,CAAC,EAAE,WAAW,GACrB,OAAO,CAAC,gBAAgB,CAAC,CAwF3B;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CAqD1E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.dep.test.d.ts","sourceRoot":"","sources":["../../../src/tools/validate.dep.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|