@skillsmith/mcp-server 0.3.7 → 0.3.9

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.
@@ -1,384 +0,0 @@
1
- /**
2
- * SMI-1869: Conflict Resolution Flow Integration Tests
3
- * Tests for conflict detection and resolution during skill reinstallation
4
- *
5
- * Split from install.integration.test.ts per governance standards (SMI-1880)
6
- */
7
- import { describe, it, expect, beforeEach, afterEach, beforeAll } from 'vitest';
8
- import * as fs from 'fs/promises';
9
- import * as path from 'path';
10
- import { createTestFilesystem, createMockManifest, fileExists, readJsonFile, } from './setup.js';
11
- describe('SMI-1869: Conflict Resolution Flow', () => {
12
- let fsContext;
13
- // Import conflict resolution helpers
14
- let hashContent;
15
- let storeOriginal;
16
- let loadOriginal;
17
- let detectModifications;
18
- let createSkillBackup;
19
- // Import merge function
20
- let threeWayMerge;
21
- beforeAll(async () => {
22
- const conflictHelpers = await import('../../src/tools/install.conflict-helpers.js');
23
- hashContent = conflictHelpers.hashContent;
24
- storeOriginal = conflictHelpers.storeOriginal;
25
- loadOriginal = conflictHelpers.loadOriginal;
26
- detectModifications = conflictHelpers.detectModifications;
27
- createSkillBackup = conflictHelpers.createSkillBackup;
28
- const mergeModule = await import('../../src/tools/merge.js');
29
- threeWayMerge = mergeModule.threeWayMerge;
30
- });
31
- beforeEach(async () => {
32
- fsContext = await createTestFilesystem();
33
- });
34
- afterEach(async () => {
35
- await fsContext.cleanup();
36
- });
37
- describe('Scenario 1: Detect conflict on reinstall with local modifications', () => {
38
- it('should detect local modifications when force=true reinstall', async () => {
39
- const skillName = 'modified-skill';
40
- const skillPath = path.join(fsContext.skillsDir, skillName);
41
- // 1. Install skill initially
42
- await fs.mkdir(skillPath, { recursive: true });
43
- const originalContent = `# Modified Skill
44
-
45
- This is the original content from GitHub that was installed initially.
46
- It has enough content to pass validation requirements for testing.
47
-
48
- ## Usage
49
- Use this skill by mentioning it in Claude Code.
50
- `;
51
- await fs.writeFile(path.join(skillPath, 'SKILL.md'), originalContent);
52
- // Store original hash
53
- const originalHash = hashContent(originalContent);
54
- // Create manifest with original hash
55
- await createMockManifest(fsContext.manifestDir, {
56
- [skillName]: {
57
- id: 'owner/modified-skill',
58
- name: skillName,
59
- version: '1.0.0',
60
- source: 'github:owner/modified-skill',
61
- installPath: skillPath,
62
- installedAt: new Date().toISOString(),
63
- lastUpdated: new Date().toISOString(),
64
- },
65
- });
66
- // 2. Modify the skill locally
67
- const modifiedContent = `# Modified Skill
68
-
69
- This is the MODIFIED content that the user changed locally.
70
- The user added custom instructions and configurations here.
71
- It has enough content to pass validation requirements for testing.
72
-
73
- ## Usage
74
- Use this skill by mentioning it in Claude Code.
75
-
76
- ## My Custom Section
77
- This section was added by the user.
78
- `;
79
- await fs.writeFile(path.join(skillPath, 'SKILL.md'), modifiedContent);
80
- // 3. Detect modifications
81
- const modResult = await detectModifications(skillPath, originalHash);
82
- expect(modResult.modified).toBe(true);
83
- expect(modResult.currentHash).not.toBe(originalHash);
84
- expect(modResult.originalHash).toBe(originalHash);
85
- });
86
- it('should not detect modifications when content unchanged', async () => {
87
- const skillName = 'unchanged-skill';
88
- const skillPath = path.join(fsContext.skillsDir, skillName);
89
- await fs.mkdir(skillPath, { recursive: true });
90
- const content = `# Unchanged Skill
91
-
92
- This skill content has not been modified since installation.
93
- It remains exactly as it was when first installed from GitHub.
94
-
95
- ## Usage
96
- Use this skill by mentioning it in Claude Code.
97
- `;
98
- await fs.writeFile(path.join(skillPath, 'SKILL.md'), content);
99
- const contentHash = hashContent(content);
100
- const modResult = await detectModifications(skillPath, contentHash);
101
- expect(modResult.modified).toBe(false);
102
- expect(modResult.currentHash).toBe(contentHash);
103
- });
104
- });
105
- describe('Scenario 2: conflictAction=overwrite creates backup and replaces', () => {
106
- it('should create backup before overwriting modified skill', async () => {
107
- const skillName = 'overwrite-test-skill';
108
- const skillPath = path.join(fsContext.skillsDir, skillName);
109
- // Setup skill with content
110
- await fs.mkdir(skillPath, { recursive: true });
111
- const originalContent = `# Overwrite Test
112
-
113
- Original content that will be backed up before overwrite.
114
- This tests the backup functionality during conflict resolution.
115
-
116
- ## Original Section
117
- This content existed before the update.
118
- `;
119
- await fs.writeFile(path.join(skillPath, 'SKILL.md'), originalContent);
120
- // Create backup
121
- const backupPath = await createSkillBackup(skillName, skillPath, 'pre-update');
122
- // Verify backup was created
123
- expect(await fileExists(backupPath)).toBe(true);
124
- expect(await fileExists(path.join(backupPath, 'SKILL.md'))).toBe(true);
125
- // Verify backup content matches original
126
- const backupContent = await fs.readFile(path.join(backupPath, 'SKILL.md'), 'utf-8');
127
- expect(backupContent).toBe(originalContent);
128
- // Now simulate overwrite with new content
129
- const newContent = `# Overwrite Test
130
-
131
- This is the new upstream content from GitHub.
132
- The original content has been backed up and replaced.
133
-
134
- ## Updated Section
135
- This content is from the latest version.
136
- `;
137
- await fs.writeFile(path.join(skillPath, 'SKILL.md'), newContent);
138
- // Verify skill has new content
139
- const currentContent = await fs.readFile(path.join(skillPath, 'SKILL.md'), 'utf-8');
140
- expect(currentContent).toBe(newContent);
141
- // Backup still has original
142
- const stillBackedUp = await fs.readFile(path.join(backupPath, 'SKILL.md'), 'utf-8');
143
- expect(stillBackedUp).toBe(originalContent);
144
- });
145
- });
146
- describe('Scenario 3: conflictAction=merge with clean merge (no conflicts)', () => {
147
- it('should cleanly merge non-overlapping changes', async () => {
148
- const base = `# Merge Test Skill
149
-
150
- This is the base content that both versions started from.
151
-
152
- ## Section A
153
- Original section A content.
154
-
155
- ## Section B
156
- Original section B content.
157
- `;
158
- // Local adds Section C
159
- const local = `# Merge Test Skill
160
-
161
- This is the base content that both versions started from.
162
-
163
- ## Section A
164
- Original section A content.
165
-
166
- ## Section B
167
- Original section B content.
168
-
169
- ## Section C (Local Addition)
170
- This section was added by the user locally.
171
- `;
172
- // Upstream modifies Section A
173
- const upstream = `# Merge Test Skill
174
-
175
- This is the base content that both versions started from.
176
-
177
- ## Section A
178
- UPDATED section A content from upstream.
179
-
180
- ## Section B
181
- Original section B content.
182
- `;
183
- const mergeResult = threeWayMerge(base, local, upstream);
184
- expect(mergeResult.success).toBe(true);
185
- expect(mergeResult.conflicts).toBeUndefined();
186
- expect(mergeResult.merged).toBeDefined();
187
- // Merged result should contain both changes
188
- expect(mergeResult.merged).toContain('UPDATED section A content from upstream');
189
- expect(mergeResult.merged).toContain('Section C (Local Addition)');
190
- });
191
- it('should preserve local changes when upstream is unchanged', async () => {
192
- const base = `# Simple Skill
193
-
194
- Original content.
195
- `;
196
- const local = `# Simple Skill
197
-
198
- Modified by user.
199
- `;
200
- const upstream = base; // Upstream unchanged
201
- const mergeResult = threeWayMerge(base, local, upstream);
202
- expect(mergeResult.success).toBe(true);
203
- expect(mergeResult.merged).toBe(local);
204
- });
205
- it('should take upstream changes when local is unchanged', async () => {
206
- const base = `# Simple Skill
207
-
208
- Original content.
209
- `;
210
- const local = base; // Local unchanged
211
- const upstream = `# Simple Skill
212
-
213
- Updated by author.
214
- `;
215
- const mergeResult = threeWayMerge(base, local, upstream);
216
- expect(mergeResult.success).toBe(true);
217
- expect(mergeResult.merged).toBe(upstream);
218
- });
219
- });
220
- describe('Scenario 4: conflictAction=merge with conflicts (should have markers)', () => {
221
- it('should insert conflict markers when both sides modify same section', async () => {
222
- const base = `# Conflicting Skill
223
-
224
- This line will be modified by both sides.
225
-
226
- ## End Section
227
- Unchanged content.
228
- `;
229
- // Local modifies the line one way
230
- const local = `# Conflicting Skill
231
-
232
- LOCAL: This is the user's modification to the line.
233
-
234
- ## End Section
235
- Unchanged content.
236
- `;
237
- // Upstream modifies the same line differently
238
- const upstream = `# Conflicting Skill
239
-
240
- UPSTREAM: This is the author's modification to the line.
241
-
242
- ## End Section
243
- Unchanged content.
244
- `;
245
- const mergeResult = threeWayMerge(base, local, upstream);
246
- expect(mergeResult.success).toBe(false);
247
- expect(mergeResult.conflicts).toBeDefined();
248
- expect(mergeResult.conflicts.length).toBeGreaterThan(0);
249
- // Merged content should have conflict markers
250
- expect(mergeResult.merged).toContain('<<<<<<< LOCAL');
251
- expect(mergeResult.merged).toContain('=======');
252
- expect(mergeResult.merged).toContain('>>>>>>> UPSTREAM');
253
- });
254
- it('should identify conflict line numbers', async () => {
255
- const base = `Line 1
256
- Line 2
257
- Line 3`;
258
- const local = `Line 1
259
- LOCAL change
260
- Line 3`;
261
- const upstream = `Line 1
262
- UPSTREAM change
263
- Line 3`;
264
- const mergeResult = threeWayMerge(base, local, upstream);
265
- expect(mergeResult.success).toBe(false);
266
- expect(mergeResult.conflicts).toBeDefined();
267
- expect(mergeResult.conflicts[0].lineNumber).toBeDefined();
268
- });
269
- });
270
- describe('Scenario 5: conflictAction=cancel aborts installation', () => {
271
- it('should preserve original content when cancel is chosen', async () => {
272
- const skillName = 'cancel-test-skill';
273
- const skillPath = path.join(fsContext.skillsDir, skillName);
274
- await fs.mkdir(skillPath, { recursive: true });
275
- const originalContent = `# Cancel Test Skill
276
-
277
- This content should remain unchanged after cancel.
278
- The user decided not to proceed with the update.
279
-
280
- ## User Customization
281
- Important customizations that must be preserved.
282
- `;
283
- await fs.writeFile(path.join(skillPath, 'SKILL.md'), originalContent);
284
- // Simulate cancel action - content should not change
285
- // (In real implementation, the install function returns early)
286
- // Verify content unchanged
287
- const currentContent = await fs.readFile(path.join(skillPath, 'SKILL.md'), 'utf-8');
288
- expect(currentContent).toBe(originalContent);
289
- });
290
- });
291
- describe('Original Content Storage and Retrieval', () => {
292
- it('should store and retrieve original content for future merges', async () => {
293
- const skillName = 'storage-test-skill';
294
- const originalContent = `# Storage Test
295
-
296
- This content will be stored for future conflict resolution.
297
- It serves as the base for three-way merges.
298
-
299
- ## Important
300
- This section contains critical information.
301
- `;
302
- const metadata = {
303
- version: '1.0.0',
304
- source: 'github:owner/storage-test-skill',
305
- installedAt: new Date().toISOString(),
306
- };
307
- // Store original
308
- await storeOriginal(skillName, originalContent, metadata);
309
- // Retrieve original
310
- const retrieved = await loadOriginal(skillName);
311
- expect(retrieved).toBe(originalContent);
312
- });
313
- it('should return null for skill without stored original', async () => {
314
- const result = await loadOriginal('nonexistent-skill');
315
- expect(result).toBeNull();
316
- });
317
- });
318
- describe('Hash Computation', () => {
319
- it('should produce consistent hashes for same content', () => {
320
- const content = 'Test content for hashing';
321
- const hash1 = hashContent(content);
322
- const hash2 = hashContent(content);
323
- expect(hash1).toBe(hash2);
324
- });
325
- it('should produce different hashes for different content', () => {
326
- const hash1 = hashContent('Content A');
327
- const hash2 = hashContent('Content B');
328
- expect(hash1).not.toBe(hash2);
329
- });
330
- it('should produce 64-character SHA-256 hex string', () => {
331
- const hash = hashContent('Any content');
332
- expect(hash).toMatch(/^[a-f0-9]{64}$/);
333
- });
334
- });
335
- describe('Manifest Update with Original Hash', () => {
336
- it('should store originalContentHash in manifest entry', async () => {
337
- const skillName = 'hash-manifest-skill';
338
- const content = `# Hash Manifest Test
339
-
340
- Testing that the original content hash is stored in manifest.
341
- This enables future modification detection.
342
-
343
- ## Section
344
- Content section.
345
- `;
346
- const contentHash = hashContent(content);
347
- await createMockManifest(fsContext.manifestDir, {
348
- [skillName]: {
349
- id: 'owner/hash-manifest-skill',
350
- name: skillName,
351
- version: '1.0.0',
352
- source: 'github:owner/hash-manifest-skill',
353
- installPath: path.join(fsContext.skillsDir, skillName),
354
- installedAt: new Date().toISOString(),
355
- lastUpdated: new Date().toISOString(),
356
- },
357
- });
358
- // Update manifest to include originalContentHash
359
- const manifestPath = path.join(fsContext.manifestDir, 'manifest.json');
360
- const manifest = await readJsonFile(manifestPath);
361
- manifest.installedSkills[skillName].originalContentHash = contentHash;
362
- await fs.writeFile(manifestPath, JSON.stringify(manifest, null, 2));
363
- // Verify hash is stored
364
- const updated = await readJsonFile(manifestPath);
365
- expect(updated.installedSkills[skillName].originalContentHash).toBe(contentHash);
366
- });
367
- });
368
- describe('Backup Cleanup', () => {
369
- it('should create multiple backups with unique timestamps', async () => {
370
- const skillName = 'multi-backup-skill';
371
- const skillPath = path.join(fsContext.skillsDir, skillName);
372
- await fs.mkdir(skillPath, { recursive: true });
373
- await fs.writeFile(path.join(skillPath, 'SKILL.md'), '# Multi Backup\n\nContent for backup testing with multiple versions.');
374
- // Create multiple backups
375
- const backup1 = await createSkillBackup(skillName, skillPath, 'backup-1');
376
- await new Promise((r) => setTimeout(r, 10)); // Ensure different timestamps
377
- const backup2 = await createSkillBackup(skillName, skillPath, 'backup-2');
378
- expect(backup1).not.toBe(backup2);
379
- expect(await fileExists(backup1)).toBe(true);
380
- expect(await fileExists(backup2)).toBe(true);
381
- });
382
- });
383
- });
384
- //# sourceMappingURL=install-conflict.integration.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"install-conflict.integration.test.js","sourceRoot":"","sources":["../../../tests/integration/install-conflict.integration.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAC/E,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,UAAU,EACV,YAAY,GAEb,MAAM,YAAY,CAAA;AAEnB,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAClD,IAAI,SAAgC,CAAA;IAEpC,qCAAqC;IACrC,IAAI,WAAwC,CAAA;IAC5C,IAAI,aAIc,CAAA;IAClB,IAAI,YAA2D,CAAA;IAC/D,IAAI,mBAG0E,CAAA;IAC9E,IAAI,iBAIgB,CAAA;IAEpB,wBAAwB;IACxB,IAAI,aAIiF,CAAA;IAErF,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,eAAe,GAAG,MAAM,MAAM,CAAC,6CAA6C,CAAC,CAAA;QACnF,WAAW,GAAG,eAAe,CAAC,WAAW,CAAA;QACzC,aAAa,GAAG,eAAe,CAAC,aAAa,CAAA;QAC7C,YAAY,GAAG,eAAe,CAAC,YAAY,CAAA;QAC3C,mBAAmB,GAAG,eAAe,CAAC,mBAAmB,CAAA;QACzD,iBAAiB,GAAG,eAAe,CAAC,iBAAiB,CAAA;QAErD,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAA;QAC5D,aAAa,GAAG,WAAW,CAAC,aAAa,CAAA;IAC3C,CAAC,CAAC,CAAA;IAEF,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,SAAS,GAAG,MAAM,oBAAoB,EAAE,CAAA;IAC1C,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,SAAS,CAAC,OAAO,EAAE,CAAA;IAC3B,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,mEAAmE,EAAE,GAAG,EAAE;QACjF,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;YAC3E,MAAM,SAAS,GAAG,gBAAgB,CAAA;YAClC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;YAE3D,6BAA6B;YAC7B,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAC9C,MAAM,eAAe,GAAG;;;;;;;CAO7B,CAAA;YACK,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,eAAe,CAAC,CAAA;YAErE,sBAAsB;YACtB,MAAM,YAAY,GAAG,WAAW,CAAC,eAAe,CAAC,CAAA;YAEjD,qCAAqC;YACrC,MAAM,kBAAkB,CAAC,SAAS,CAAC,WAAW,EAAE;gBAC9C,CAAC,SAAS,CAAC,EAAE;oBACX,EAAE,EAAE,sBAAsB;oBAC1B,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,OAAO;oBAChB,MAAM,EAAE,6BAA6B;oBACrC,WAAW,EAAE,SAAS;oBACtB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACrC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACtC;aACF,CAAC,CAAA;YAEF,8BAA8B;YAC9B,MAAM,eAAe,GAAG;;;;;;;;;;;CAW7B,CAAA;YACK,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,eAAe,CAAC,CAAA;YAErE,0BAA0B;YAC1B,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;YAEpE,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACrC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;YACpD,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QACnD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACtE,MAAM,SAAS,GAAG,iBAAiB,CAAA;YACnC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;YAE3D,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAC9C,MAAM,OAAO,GAAG;;;;;;;CAOrB,CAAA;YACK,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAA;YAE7D,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;YACxC,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;YAEnE,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACtC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QACjD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAChF,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACtE,MAAM,SAAS,GAAG,sBAAsB,CAAA;YACxC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;YAE3D,2BAA2B;YAC3B,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAC9C,MAAM,eAAe,GAAG;;;;;;;CAO7B,CAAA;YACK,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,eAAe,CAAC,CAAA;YAErE,gBAAgB;YAChB,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,YAAY,CAAC,CAAA;YAE9E,4BAA4B;YAC5B,MAAM,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC/C,MAAM,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAEtE,yCAAyC;YACzC,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAA;YACnF,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;YAE3C,0CAA0C;YAC1C,MAAM,UAAU,GAAG;;;;;;;CAOxB,CAAA;YACK,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,CAAA;YAEhE,+BAA+B;YAC/B,MAAM,cAAc,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAA;YACnF,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAEvC,4BAA4B;YAC5B,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAA;YACnF,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QAC7C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAChF,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,IAAI,GAAG;;;;;;;;;CASlB,CAAA;YACK,uBAAuB;YACvB,MAAM,KAAK,GAAG;;;;;;;;;;;;CAYnB,CAAA;YACK,8BAA8B;YAC9B,MAAM,QAAQ,GAAG;;;;;;;;;CAStB,CAAA;YACK,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;YAExD,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACtC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE,CAAA;YAC7C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAA;YAExC,4CAA4C;YAC5C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,yCAAyC,CAAC,CAAA;YAC/E,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAA;QACpE,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,IAAI,GAAG;;;CAGlB,CAAA;YACK,MAAM,KAAK,GAAG;;;CAGnB,CAAA;YACK,MAAM,QAAQ,GAAG,IAAI,CAAA,CAAC,qBAAqB;YAE3C,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;YAExD,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACtC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACxC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,IAAI,GAAG;;;CAGlB,CAAA;YACK,MAAM,KAAK,GAAG,IAAI,CAAA,CAAC,kBAAkB;YACrC,MAAM,QAAQ,GAAG;;;CAGtB,CAAA;YAEK,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;YAExD,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACtC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC3C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,uEAAuE,EAAE,GAAG,EAAE;QACrF,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;YAClF,MAAM,IAAI,GAAG;;;;;;CAMlB,CAAA;YACK,kCAAkC;YAClC,MAAM,KAAK,GAAG;;;;;;CAMnB,CAAA;YACK,8CAA8C;YAC9C,MAAM,QAAQ,GAAG;;;;;;CAMtB,CAAA;YAEK,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;YAExD,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACvC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAA;YAC3C,MAAM,CAAC,WAAW,CAAC,SAAU,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YAExD,8CAA8C;YAC9C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAA;YACrD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;YAC/C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAA;QAC1D,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,IAAI,GAAG;;OAEZ,CAAA;YACD,MAAM,KAAK,GAAG;;OAEb,CAAA;YACD,MAAM,QAAQ,GAAG;;OAEhB,CAAA;YAED,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;YAExD,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACvC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAA;YAC3C,MAAM,CAAC,WAAW,CAAC,SAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAA;QAC5D,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,uDAAuD,EAAE,GAAG,EAAE;QACrE,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACtE,MAAM,SAAS,GAAG,mBAAmB,CAAA;YACrC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;YAE3D,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAC9C,MAAM,eAAe,GAAG;;;;;;;CAO7B,CAAA;YACK,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,eAAe,CAAC,CAAA;YAErE,qDAAqD;YACrD,+DAA+D;YAE/D,2BAA2B;YAC3B,MAAM,cAAc,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAA;YACnF,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QAC9C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,wCAAwC,EAAE,GAAG,EAAE;QACtD,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;YAC5E,MAAM,SAAS,GAAG,oBAAoB,CAAA;YACtC,MAAM,eAAe,GAAG;;;;;;;CAO7B,CAAA;YACK,MAAM,QAAQ,GAAG;gBACf,OAAO,EAAE,OAAO;gBAChB,MAAM,EAAE,iCAAiC;gBACzC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACtC,CAAA;YAED,iBAAiB;YACjB,MAAM,aAAa,CAAC,SAAS,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAA;YAEzD,oBAAoB;YACpB,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,CAAA;YAE/C,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QACzC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,mBAAmB,CAAC,CAAA;YACtD,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAA;QAC3B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,OAAO,GAAG,0BAA0B,CAAA;YAC1C,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;YAClC,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;YAElC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC3B,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,CAAA;YACtC,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,CAAA;YAEtC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC/B,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,IAAI,GAAG,WAAW,CAAC,aAAa,CAAC,CAAA;YAEvC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;QACxC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAClD,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,MAAM,SAAS,GAAG,qBAAqB,CAAA;YACvC,MAAM,OAAO,GAAG;;;;;;;CAOrB,CAAA;YACK,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;YAExC,MAAM,kBAAkB,CAAC,SAAS,CAAC,WAAW,EAAE;gBAC9C,CAAC,SAAS,CAAC,EAAE;oBACX,EAAE,EAAE,2BAA2B;oBAC/B,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,OAAO;oBAChB,MAAM,EAAE,kCAAkC;oBAC1C,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC;oBACtD,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACrC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACtC;aACF,CAAC,CAAA;YAEF,iDAAiD;YACjD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,eAAe,CAAC,CAAA;YACtE,MAAM,QAAQ,GAAG,MAAM,YAAY,CAehC,YAAY,CAAC,CAAA;YAEhB,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,mBAAmB,GAAG,WAAW,CAAA;YACrE,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;YAEnE,wBAAwB;YACxB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAkB,YAAY,CAAC,CAAA;YACjE,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAClF,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,MAAM,SAAS,GAAG,oBAAoB,CAAA;YACtC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;YAE3D,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAC9C,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAChC,sEAAsE,CACvE,CAAA;YAED,0BAA0B;YAC1B,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAA;YACzE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA,CAAC,8BAA8B;YAC1E,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAA;YAEzE,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACjC,MAAM,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC5C,MAAM,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC9C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,13 +0,0 @@
1
- /**
2
- * @fileoverview SMI-1491 & SMI-1533: Install Tool Parsing and Trust Tier Tests
3
- * @module @skillsmith/mcp-server/tests/integration/install-trust-parsing
4
- * @see SMI-1491, SMI-1533, SMI-1880
5
- *
6
- * Split from install.integration.test.ts per governance (500 line limit)
7
- *
8
- * Tests cover:
9
- * - SMI-1491: parseRepoUrl and parseSkillId with isRegistryId
10
- * - SMI-1533: Trust-tier security scanning
11
- */
12
- export {};
13
- //# sourceMappingURL=install-trust-parsing.integration.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"install-trust-parsing.integration.test.d.ts","sourceRoot":"","sources":["../../../tests/integration/install-trust-parsing.integration.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}