@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.
- package/README.md +3 -1
- package/dist/.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/assets/skills/skillsmith/SKILL.md +2 -65
- package/dist/src/tools/install.conflict-helpers.test.d.ts +0 -15
- package/dist/src/tools/install.conflict-helpers.test.d.ts.map +0 -1
- package/dist/src/tools/install.conflict-helpers.test.js +0 -243
- package/dist/src/tools/install.conflict-helpers.test.js.map +0 -1
- package/dist/src/tools/install.conflict.test.d.ts +0 -15
- package/dist/src/tools/install.conflict.test.d.ts.map +0 -1
- package/dist/src/tools/install.conflict.test.js +0 -354
- package/dist/src/tools/install.conflict.test.js.map +0 -1
- package/dist/src/tools/merge.test.d.ts +0 -11
- package/dist/src/tools/merge.test.d.ts.map +0 -1
- package/dist/src/tools/merge.test.js +0 -224
- package/dist/src/tools/merge.test.js.map +0 -1
- package/dist/tests/integration/install-conflict.integration.test.d.ts +0 -8
- package/dist/tests/integration/install-conflict.integration.test.d.ts.map +0 -1
- package/dist/tests/integration/install-conflict.integration.test.js +0 -384
- package/dist/tests/integration/install-conflict.integration.test.js.map +0 -1
- package/dist/tests/integration/install-trust-parsing.integration.test.d.ts +0 -13
- package/dist/tests/integration/install-trust-parsing.integration.test.d.ts.map +0 -1
- package/dist/tests/integration/install-trust-parsing.integration.test.js +0 -290
- package/dist/tests/integration/install-trust-parsing.integration.test.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skillsmith/mcp-server",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.9",
|
|
4
4
|
"description": "MCP server for Skillsmith skill discovery",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/src/index.js",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@modelcontextprotocol/sdk": "1.25.3",
|
|
23
|
-
"@skillsmith/core": "0.4.
|
|
23
|
+
"@skillsmith/core": "0.4.4",
|
|
24
24
|
"esbuild": "0.27.2"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
@@ -5,43 +5,7 @@ description: "Discover, install, compare, and manage Claude Code skills. Use whe
|
|
|
5
5
|
|
|
6
6
|
# Skillsmith
|
|
7
7
|
|
|
8
|
-
Skillsmith is
|
|
9
|
-
|
|
10
|
-
## Top Features
|
|
11
|
-
|
|
12
|
-
**Parallel Agent Spawning**
|
|
13
|
-
- Generate companion subagents for any skill with `author subagent`
|
|
14
|
-
- Transform existing skills into agent-ready workflows with `author transform`
|
|
15
|
-
- Batch process multiple skills for team-wide agent deployment
|
|
16
|
-
|
|
17
|
-
**Skill Optimization**
|
|
18
|
-
- A/B test original vs optimized skills (Team+ tier)
|
|
19
|
-
- Benchmark skill performance with controlled experiments
|
|
20
|
-
- Generate detailed optimization analysis reports
|
|
21
|
-
|
|
22
|
-
## Discovery
|
|
23
|
-
- Search 14,000+ skills by keyword, category, or trust tier
|
|
24
|
-
- Get stack-aware recommendations based on your project context
|
|
25
|
-
- Compare multiple skills side-by-side with quality scores
|
|
26
|
-
|
|
27
|
-
## Management
|
|
28
|
-
- Install skills to `~/.claude/skills/` with security scanning
|
|
29
|
-
- Uninstall skills you no longer need
|
|
30
|
-
- Validate skill structure before publishing
|
|
31
|
-
|
|
32
|
-
## Security
|
|
33
|
-
- All skills are scanned before installation
|
|
34
|
-
- Trust tiers indicate verification level (Official → Verified → Community → Unverified)
|
|
35
|
-
- Typosquatting and blocklist protection
|
|
36
|
-
|
|
37
|
-
What would you like to do? Some examples:
|
|
38
|
-
- "Search for testing skills"
|
|
39
|
-
- "Find verified skills for git"
|
|
40
|
-
- "Recommend skills for my React project"
|
|
41
|
-
- "Install the commit skill"
|
|
42
|
-
- "Compare jest-helper and vitest-helper"
|
|
43
|
-
- "Generate subagent for my skill"
|
|
44
|
-
- "Transform my skills to support agents"
|
|
8
|
+
Skillsmith is your skill discovery and management system for Claude Code. It provides access to 500+ community skills with trust verification, quality scoring, and security scanning.
|
|
45
9
|
|
|
46
10
|
## Quick Reference: MCP Tools
|
|
47
11
|
|
|
@@ -54,34 +18,7 @@ What would you like to do? Some examples:
|
|
|
54
18
|
| `skill_recommend` | Getting contextual recommendations | "Recommend skills for my React project" |
|
|
55
19
|
| `skill_validate` | Checking skill structure before manual install | "Validate this skill" |
|
|
56
20
|
| `skill_compare` | Comparing 2-5 skills side-by-side | "Compare jest-helper and vitest-helper" |
|
|
57
|
-
|
|
58
|
-
## CLI Commands for Agents & Optimization
|
|
59
|
-
|
|
60
|
-
| Command | Description |
|
|
61
|
-
|---------|-------------|
|
|
62
|
-
| `author subagent [path]` | Generate companion subagent for a skill |
|
|
63
|
-
| `author transform [path]` | Upgrade existing skill with subagent configuration |
|
|
64
|
-
| `author transform --batch` | Batch process multiple skills |
|
|
65
|
-
| `ab-test --skill <name>` | Run A/B testing experiments (Team+ tier) |
|
|
66
|
-
|
|
67
|
-
### Subagent Generation Options
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
skillsmith author subagent ./my-skill
|
|
71
|
-
--tools "Read,Write,Bash" # Override detected tools
|
|
72
|
-
--model sonnet # Model: sonnet|opus|haiku
|
|
73
|
-
--force # Overwrite existing subagent
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
### Batch Transform Example
|
|
77
|
-
|
|
78
|
-
```bash
|
|
79
|
-
# Transform all skills in ~/.claude/skills/
|
|
80
|
-
skillsmith author transform ~/.claude/skills --batch
|
|
81
|
-
|
|
82
|
-
# Transform specific skills
|
|
83
|
-
skillsmith author transform skill1,skill2,skill3 --batch --force
|
|
84
|
-
```
|
|
21
|
+
| `skill_suggest` | Getting suggestions based on current work | Automatic based on context |
|
|
85
22
|
|
|
86
23
|
## Trust Tiers
|
|
87
24
|
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Unit Tests for Install Conflict Helpers
|
|
3
|
-
* @module @skillsmith/mcp-server/tools/install.conflict-helpers.test
|
|
4
|
-
* @see SMI-1868, SMI-1879
|
|
5
|
-
*
|
|
6
|
-
* Tests cover:
|
|
7
|
-
* - hashContent: SHA-256 content hashing
|
|
8
|
-
* - detectModifications: Detect if skill files were modified
|
|
9
|
-
* - createSkillBackup: Create timestamped backups
|
|
10
|
-
* - storeOriginal: Store original content for merge
|
|
11
|
-
* - loadOriginal: Load stored original content
|
|
12
|
-
* - cleanupOldBackups: Manage backup retention
|
|
13
|
-
*/
|
|
14
|
-
export {};
|
|
15
|
-
//# sourceMappingURL=install.conflict-helpers.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"install.conflict-helpers.test.d.ts","sourceRoot":"","sources":["../../../src/tools/install.conflict-helpers.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
|
|
@@ -1,243 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Unit Tests for Install Conflict Helpers
|
|
3
|
-
* @module @skillsmith/mcp-server/tools/install.conflict-helpers.test
|
|
4
|
-
* @see SMI-1868, SMI-1879
|
|
5
|
-
*
|
|
6
|
-
* Tests cover:
|
|
7
|
-
* - hashContent: SHA-256 content hashing
|
|
8
|
-
* - detectModifications: Detect if skill files were modified
|
|
9
|
-
* - createSkillBackup: Create timestamped backups
|
|
10
|
-
* - storeOriginal: Store original content for merge
|
|
11
|
-
* - loadOriginal: Load stored original content
|
|
12
|
-
* - cleanupOldBackups: Manage backup retention
|
|
13
|
-
*/
|
|
14
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
15
|
-
import * as fs from 'fs/promises';
|
|
16
|
-
// Import functions under test
|
|
17
|
-
import { hashContent, detectModifications, createSkillBackup, storeOriginal, loadOriginal, cleanupOldBackups, } from './install.conflict-helpers.js';
|
|
18
|
-
// Mock fs module
|
|
19
|
-
vi.mock('fs/promises');
|
|
20
|
-
const mockedFs = vi.mocked(fs);
|
|
21
|
-
// ============================================================================
|
|
22
|
-
// Tests for hashContent
|
|
23
|
-
// ============================================================================
|
|
24
|
-
describe('hashContent', () => {
|
|
25
|
-
it('should return consistent SHA-256 hash for same content', () => {
|
|
26
|
-
const content = 'Hello, World!';
|
|
27
|
-
const hash1 = hashContent(content);
|
|
28
|
-
const hash2 = hashContent(content);
|
|
29
|
-
expect(hash1).toBe(hash2);
|
|
30
|
-
expect(hash1).toHaveLength(64); // SHA-256 produces 64 hex characters
|
|
31
|
-
});
|
|
32
|
-
it('should return different hashes for different content', () => {
|
|
33
|
-
const hash1 = hashContent('Hello');
|
|
34
|
-
const hash2 = hashContent('World');
|
|
35
|
-
expect(hash1).not.toBe(hash2);
|
|
36
|
-
});
|
|
37
|
-
it('should handle empty string', () => {
|
|
38
|
-
const hash = hashContent('');
|
|
39
|
-
// SHA-256 of empty string
|
|
40
|
-
expect(hash).toBe('e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855');
|
|
41
|
-
});
|
|
42
|
-
it('should handle unicode content', () => {
|
|
43
|
-
const hash = hashContent('Hello, World!');
|
|
44
|
-
expect(hash).toHaveLength(64);
|
|
45
|
-
});
|
|
46
|
-
it('should handle multiline content', () => {
|
|
47
|
-
const content = `Line 1
|
|
48
|
-
Line 2
|
|
49
|
-
Line 3`;
|
|
50
|
-
const hash = hashContent(content);
|
|
51
|
-
expect(hash).toHaveLength(64);
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
|
-
// ============================================================================
|
|
55
|
-
// Tests for detectModifications
|
|
56
|
-
// ============================================================================
|
|
57
|
-
describe('detectModifications', () => {
|
|
58
|
-
beforeEach(() => {
|
|
59
|
-
vi.clearAllMocks();
|
|
60
|
-
});
|
|
61
|
-
it('should detect no modification when hashes match', async () => {
|
|
62
|
-
const content = 'Original content';
|
|
63
|
-
const originalHash = hashContent(content);
|
|
64
|
-
mockedFs.readFile.mockResolvedValue(content);
|
|
65
|
-
const result = await detectModifications('/path/to/skill', originalHash);
|
|
66
|
-
expect(result.modified).toBe(false);
|
|
67
|
-
expect(result.currentHash).toBe(originalHash);
|
|
68
|
-
expect(result.originalHash).toBe(originalHash);
|
|
69
|
-
});
|
|
70
|
-
it('should detect modification when hashes differ', async () => {
|
|
71
|
-
const originalContent = 'Original content';
|
|
72
|
-
const modifiedContent = 'Modified content';
|
|
73
|
-
const originalHash = hashContent(originalContent);
|
|
74
|
-
mockedFs.readFile.mockResolvedValue(modifiedContent);
|
|
75
|
-
const result = await detectModifications('/path/to/skill', originalHash);
|
|
76
|
-
expect(result.modified).toBe(true);
|
|
77
|
-
expect(result.currentHash).not.toBe(originalHash);
|
|
78
|
-
expect(result.originalHash).toBe(originalHash);
|
|
79
|
-
});
|
|
80
|
-
it('should treat deleted file as modified', async () => {
|
|
81
|
-
const originalHash = hashContent('Original content');
|
|
82
|
-
const error = new Error('ENOENT');
|
|
83
|
-
error.code = 'ENOENT';
|
|
84
|
-
mockedFs.readFile.mockRejectedValue(error);
|
|
85
|
-
const result = await detectModifications('/path/to/skill', originalHash);
|
|
86
|
-
expect(result.modified).toBe(true);
|
|
87
|
-
expect(result.currentHash).toBe('');
|
|
88
|
-
expect(result.originalHash).toBe(originalHash);
|
|
89
|
-
});
|
|
90
|
-
it('should propagate other file system errors', async () => {
|
|
91
|
-
const originalHash = hashContent('Original content');
|
|
92
|
-
const error = new Error('EACCES');
|
|
93
|
-
error.code = 'EACCES';
|
|
94
|
-
mockedFs.readFile.mockRejectedValue(error);
|
|
95
|
-
await expect(detectModifications('/path/to/skill', originalHash)).rejects.toThrow('EACCES');
|
|
96
|
-
});
|
|
97
|
-
});
|
|
98
|
-
// ============================================================================
|
|
99
|
-
// Tests for createSkillBackup
|
|
100
|
-
// ============================================================================
|
|
101
|
-
describe('createSkillBackup', () => {
|
|
102
|
-
beforeEach(() => {
|
|
103
|
-
vi.clearAllMocks();
|
|
104
|
-
vi.useFakeTimers();
|
|
105
|
-
vi.setSystemTime(new Date('2025-01-27T10:30:00.000Z'));
|
|
106
|
-
});
|
|
107
|
-
afterEach(() => {
|
|
108
|
-
vi.useRealTimers();
|
|
109
|
-
});
|
|
110
|
-
it('should create backup directory with timestamp and reason', async () => {
|
|
111
|
-
mockedFs.mkdir.mockResolvedValue(undefined);
|
|
112
|
-
mockedFs.readdir.mockResolvedValue([
|
|
113
|
-
{ name: 'SKILL.md', isFile: () => true, isDirectory: () => false },
|
|
114
|
-
]);
|
|
115
|
-
mockedFs.copyFile.mockResolvedValue(undefined);
|
|
116
|
-
const backupPath = await createSkillBackup('test-skill', '/path/to/skill', 'pre-update');
|
|
117
|
-
expect(backupPath).toContain('test-skill');
|
|
118
|
-
expect(backupPath).toContain('2025-01-27T10-30-00-000Z');
|
|
119
|
-
expect(backupPath).toContain('pre-update');
|
|
120
|
-
expect(mockedFs.mkdir).toHaveBeenCalled();
|
|
121
|
-
});
|
|
122
|
-
it('should copy all files from install path', async () => {
|
|
123
|
-
mockedFs.mkdir.mockResolvedValue(undefined);
|
|
124
|
-
mockedFs.readdir.mockResolvedValue([
|
|
125
|
-
{ name: 'SKILL.md', isFile: () => true, isDirectory: () => false },
|
|
126
|
-
{ name: 'subskill.md', isFile: () => true, isDirectory: () => false },
|
|
127
|
-
]);
|
|
128
|
-
mockedFs.copyFile.mockResolvedValue(undefined);
|
|
129
|
-
await createSkillBackup('test-skill', '/path/to/skill', 'pre-update');
|
|
130
|
-
expect(mockedFs.copyFile).toHaveBeenCalledTimes(2);
|
|
131
|
-
});
|
|
132
|
-
it('should recursively copy directories', async () => {
|
|
133
|
-
mockedFs.mkdir.mockResolvedValue(undefined);
|
|
134
|
-
mockedFs.readdir.mockImplementation(async (dirPath) => {
|
|
135
|
-
if (String(dirPath).includes('subdir')) {
|
|
136
|
-
return [
|
|
137
|
-
{ name: 'nested.md', isFile: () => true, isDirectory: () => false },
|
|
138
|
-
];
|
|
139
|
-
}
|
|
140
|
-
return [
|
|
141
|
-
{ name: 'SKILL.md', isFile: () => true, isDirectory: () => false },
|
|
142
|
-
{ name: 'subdir', isFile: () => false, isDirectory: () => true },
|
|
143
|
-
];
|
|
144
|
-
});
|
|
145
|
-
mockedFs.copyFile.mockResolvedValue(undefined);
|
|
146
|
-
await createSkillBackup('test-skill', '/path/to/skill', 'pre-update');
|
|
147
|
-
// Should copy SKILL.md and nested.md
|
|
148
|
-
expect(mockedFs.copyFile).toHaveBeenCalledTimes(2);
|
|
149
|
-
// Should create main backup dir and subdir
|
|
150
|
-
expect(mockedFs.mkdir).toHaveBeenCalledTimes(2);
|
|
151
|
-
});
|
|
152
|
-
});
|
|
153
|
-
// ============================================================================
|
|
154
|
-
// Tests for storeOriginal and loadOriginal
|
|
155
|
-
// ============================================================================
|
|
156
|
-
describe('storeOriginal', () => {
|
|
157
|
-
beforeEach(() => {
|
|
158
|
-
vi.clearAllMocks();
|
|
159
|
-
});
|
|
160
|
-
it('should store SKILL.md content and metadata', async () => {
|
|
161
|
-
mockedFs.mkdir.mockResolvedValue(undefined);
|
|
162
|
-
mockedFs.writeFile.mockResolvedValue(undefined);
|
|
163
|
-
const content = '# Test Skill';
|
|
164
|
-
const metadata = { version: '1.0.0', source: 'github:owner/repo' };
|
|
165
|
-
await storeOriginal('test-skill', content, metadata);
|
|
166
|
-
expect(mockedFs.mkdir).toHaveBeenCalledWith(expect.stringContaining('.original'), { recursive: true });
|
|
167
|
-
expect(mockedFs.writeFile).toHaveBeenCalledWith(expect.stringContaining('SKILL.md'), content, 'utf-8');
|
|
168
|
-
expect(mockedFs.writeFile).toHaveBeenCalledWith(expect.stringContaining('metadata.json'), JSON.stringify(metadata, null, 2));
|
|
169
|
-
});
|
|
170
|
-
});
|
|
171
|
-
describe('loadOriginal', () => {
|
|
172
|
-
beforeEach(() => {
|
|
173
|
-
vi.clearAllMocks();
|
|
174
|
-
});
|
|
175
|
-
it('should load stored original content', async () => {
|
|
176
|
-
const content = '# Test Skill';
|
|
177
|
-
mockedFs.readFile.mockResolvedValue(content);
|
|
178
|
-
const result = await loadOriginal('test-skill');
|
|
179
|
-
expect(result).toBe(content);
|
|
180
|
-
});
|
|
181
|
-
it('should return null when original does not exist', async () => {
|
|
182
|
-
const error = new Error('ENOENT');
|
|
183
|
-
error.code = 'ENOENT';
|
|
184
|
-
mockedFs.readFile.mockRejectedValue(error);
|
|
185
|
-
const result = await loadOriginal('test-skill');
|
|
186
|
-
expect(result).toBeNull();
|
|
187
|
-
});
|
|
188
|
-
it('should propagate other errors', async () => {
|
|
189
|
-
const error = new Error('EACCES');
|
|
190
|
-
error.code = 'EACCES';
|
|
191
|
-
mockedFs.readFile.mockRejectedValue(error);
|
|
192
|
-
await expect(loadOriginal('test-skill')).rejects.toThrow('EACCES');
|
|
193
|
-
});
|
|
194
|
-
});
|
|
195
|
-
// ============================================================================
|
|
196
|
-
// Tests for cleanupOldBackups
|
|
197
|
-
// ============================================================================
|
|
198
|
-
describe('cleanupOldBackups', () => {
|
|
199
|
-
beforeEach(() => {
|
|
200
|
-
vi.clearAllMocks();
|
|
201
|
-
});
|
|
202
|
-
it('should keep only the most recent backups', async () => {
|
|
203
|
-
mockedFs.readdir.mockResolvedValue([
|
|
204
|
-
{ name: '.original', isDirectory: () => true },
|
|
205
|
-
{ name: '2025-01-25T10-00-00_backup', isDirectory: () => true },
|
|
206
|
-
{ name: '2025-01-26T10-00-00_backup', isDirectory: () => true },
|
|
207
|
-
{ name: '2025-01-27T10-00-00_backup', isDirectory: () => true },
|
|
208
|
-
{ name: '2025-01-27T12-00-00_backup', isDirectory: () => true },
|
|
209
|
-
{ name: '2025-01-27T14-00-00_backup', isDirectory: () => true },
|
|
210
|
-
]);
|
|
211
|
-
mockedFs.rm.mockResolvedValue(undefined);
|
|
212
|
-
await cleanupOldBackups('test-skill', 3);
|
|
213
|
-
// Should delete 2 oldest backups (keeping 3 most recent + .original)
|
|
214
|
-
expect(mockedFs.rm).toHaveBeenCalledTimes(2);
|
|
215
|
-
expect(mockedFs.rm).toHaveBeenCalledWith(expect.stringContaining('2025-01-25'), { recursive: true, force: true });
|
|
216
|
-
expect(mockedFs.rm).toHaveBeenCalledWith(expect.stringContaining('2025-01-26'), { recursive: true, force: true });
|
|
217
|
-
});
|
|
218
|
-
it('should never delete .original directory', async () => {
|
|
219
|
-
mockedFs.readdir.mockResolvedValue([
|
|
220
|
-
{ name: '.original', isDirectory: () => true },
|
|
221
|
-
{ name: '2025-01-27T10-00-00_backup', isDirectory: () => true },
|
|
222
|
-
]);
|
|
223
|
-
mockedFs.rm.mockResolvedValue(undefined);
|
|
224
|
-
await cleanupOldBackups('test-skill', 0);
|
|
225
|
-
// Should only delete the backup, not .original
|
|
226
|
-
expect(mockedFs.rm).toHaveBeenCalledTimes(1);
|
|
227
|
-
expect(mockedFs.rm).not.toHaveBeenCalledWith(expect.stringContaining('.original'), expect.any(Object));
|
|
228
|
-
});
|
|
229
|
-
it('should handle non-existent backup directory', async () => {
|
|
230
|
-
const error = new Error('ENOENT');
|
|
231
|
-
error.code = 'ENOENT';
|
|
232
|
-
mockedFs.readdir.mockRejectedValue(error);
|
|
233
|
-
// Should not throw
|
|
234
|
-
await expect(cleanupOldBackups('test-skill')).resolves.toBeUndefined();
|
|
235
|
-
});
|
|
236
|
-
it('should propagate other errors', async () => {
|
|
237
|
-
const error = new Error('EACCES');
|
|
238
|
-
error.code = 'EACCES';
|
|
239
|
-
mockedFs.readdir.mockRejectedValue(error);
|
|
240
|
-
await expect(cleanupOldBackups('test-skill')).rejects.toThrow('EACCES');
|
|
241
|
-
});
|
|
242
|
-
});
|
|
243
|
-
//# sourceMappingURL=install.conflict-helpers.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"install.conflict-helpers.test.js","sourceRoot":"","sources":["../../../src/tools/install.conflict-helpers.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Unit Tests for Conflict Detection and Resolution
|
|
3
|
-
* @module @skillsmith/mcp-server/tools/install.conflict.test
|
|
4
|
-
* @see SMI-1868, SMI-1879
|
|
5
|
-
*
|
|
6
|
-
* Tests cover:
|
|
7
|
-
* - checkForConflicts: Detect local modifications before update
|
|
8
|
-
* - handleMergeAction: Three-way merge with conflict resolution
|
|
9
|
-
*
|
|
10
|
-
* Related test files:
|
|
11
|
-
* - install.conflict-helpers.test.ts: hashContent, detectModifications, backups
|
|
12
|
-
* - merge.test.ts: computeDiff, threeWayMerge
|
|
13
|
-
*/
|
|
14
|
-
export {};
|
|
15
|
-
//# sourceMappingURL=install.conflict.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"install.conflict.test.d.ts","sourceRoot":"","sources":["../../../src/tools/install.conflict.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
|