@skillsmith/mcp-server 0.3.4 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/src/__tests__/LocalIndexer.test.d.ts +5 -0
  3. package/dist/src/__tests__/LocalIndexer.test.d.ts.map +1 -0
  4. package/dist/src/__tests__/LocalIndexer.test.js +396 -0
  5. package/dist/src/__tests__/LocalIndexer.test.js.map +1 -0
  6. package/dist/src/__tests__/get-skill.test.js +195 -0
  7. package/dist/src/__tests__/get-skill.test.js.map +1 -1
  8. package/dist/src/__tests__/index-local.test.d.ts +5 -0
  9. package/dist/src/__tests__/index-local.test.d.ts.map +1 -0
  10. package/dist/src/__tests__/index-local.test.js +203 -0
  11. package/dist/src/__tests__/index-local.test.js.map +1 -0
  12. package/dist/src/__tests__/recommend.test.d.ts +7 -0
  13. package/dist/src/__tests__/recommend.test.d.ts.map +1 -0
  14. package/dist/src/__tests__/recommend.test.js +277 -0
  15. package/dist/src/__tests__/recommend.test.js.map +1 -0
  16. package/dist/src/__tests__/search.test.js +138 -0
  17. package/dist/src/__tests__/search.test.js.map +1 -1
  18. package/dist/src/context.d.ts +6 -0
  19. package/dist/src/context.d.ts.map +1 -1
  20. package/dist/src/context.js +7 -1
  21. package/dist/src/context.js.map +1 -1
  22. package/dist/src/index.js +14 -0
  23. package/dist/src/index.js.map +1 -1
  24. package/dist/src/indexer/FrontmatterParser.d.ts +30 -0
  25. package/dist/src/indexer/FrontmatterParser.d.ts.map +1 -0
  26. package/dist/src/indexer/FrontmatterParser.js +109 -0
  27. package/dist/src/indexer/FrontmatterParser.js.map +1 -0
  28. package/dist/src/indexer/LocalIndexer.d.ts +136 -0
  29. package/dist/src/indexer/LocalIndexer.d.ts.map +1 -0
  30. package/dist/src/indexer/LocalIndexer.js +271 -0
  31. package/dist/src/indexer/LocalIndexer.js.map +1 -0
  32. package/dist/src/indexer/index.d.ts +8 -0
  33. package/dist/src/indexer/index.d.ts.map +1 -0
  34. package/dist/src/indexer/index.js +8 -0
  35. package/dist/src/indexer/index.js.map +1 -0
  36. package/dist/src/llm/failover.d.ts +11 -1
  37. package/dist/src/llm/failover.d.ts.map +1 -1
  38. package/dist/src/llm/failover.js.map +1 -1
  39. package/dist/src/middleware/errorFormatter.d.ts +27 -0
  40. package/dist/src/middleware/errorFormatter.d.ts.map +1 -1
  41. package/dist/src/middleware/errorFormatter.js +95 -0
  42. package/dist/src/middleware/errorFormatter.js.map +1 -1
  43. package/dist/src/middleware/index.d.ts +1 -1
  44. package/dist/src/middleware/index.d.ts.map +1 -1
  45. package/dist/src/middleware/index.js.map +1 -1
  46. package/dist/src/middleware/quota-helpers.d.ts +40 -0
  47. package/dist/src/middleware/quota-helpers.d.ts.map +1 -0
  48. package/dist/src/middleware/quota-helpers.js +90 -0
  49. package/dist/src/middleware/quota-helpers.js.map +1 -0
  50. package/dist/src/middleware/quota-types.d.ts +105 -0
  51. package/dist/src/middleware/quota-types.d.ts.map +1 -0
  52. package/dist/src/middleware/quota-types.js +4 -0
  53. package/dist/src/middleware/quota-types.js.map +1 -0
  54. package/dist/src/middleware/quota.d.ts +3 -97
  55. package/dist/src/middleware/quota.d.ts.map +1 -1
  56. package/dist/src/middleware/quota.js +2 -87
  57. package/dist/src/middleware/quota.js.map +1 -1
  58. package/dist/src/tools/LocalSkillSearch.d.ts +32 -0
  59. package/dist/src/tools/LocalSkillSearch.d.ts.map +1 -0
  60. package/dist/src/tools/LocalSkillSearch.js +74 -0
  61. package/dist/src/tools/LocalSkillSearch.js.map +1 -0
  62. package/dist/src/tools/compare.helpers.js.map +1 -1
  63. package/dist/src/tools/compare.types.d.ts +1 -0
  64. package/dist/src/tools/compare.types.d.ts.map +1 -1
  65. package/dist/src/tools/compare.types.js +2 -0
  66. package/dist/src/tools/compare.types.js.map +1 -1
  67. package/dist/src/tools/get-skill.js +3 -0
  68. package/dist/src/tools/get-skill.js.map +1 -1
  69. package/dist/src/tools/index-local.d.ts +117 -0
  70. package/dist/src/tools/index-local.d.ts.map +1 -0
  71. package/dist/src/tools/index-local.js +126 -0
  72. package/dist/src/tools/index-local.js.map +1 -0
  73. package/dist/src/tools/index.d.ts +2 -0
  74. package/dist/src/tools/index.d.ts.map +1 -1
  75. package/dist/src/tools/index.js +2 -0
  76. package/dist/src/tools/index.js.map +1 -1
  77. package/dist/src/tools/install.conflict-helpers.d.ts +64 -0
  78. package/dist/src/tools/install.conflict-helpers.d.ts.map +1 -0
  79. package/dist/src/tools/install.conflict-helpers.js +165 -0
  80. package/dist/src/tools/install.conflict-helpers.js.map +1 -0
  81. package/dist/src/tools/install.conflict-helpers.test.d.ts +15 -0
  82. package/dist/src/tools/install.conflict-helpers.test.d.ts.map +1 -0
  83. package/dist/src/tools/install.conflict-helpers.test.js +243 -0
  84. package/dist/src/tools/install.conflict-helpers.test.js.map +1 -0
  85. package/dist/src/tools/install.conflict.d.ts +58 -0
  86. package/dist/src/tools/install.conflict.d.ts.map +1 -0
  87. package/dist/src/tools/install.conflict.js +160 -0
  88. package/dist/src/tools/install.conflict.js.map +1 -0
  89. package/dist/src/tools/install.conflict.test.d.ts +15 -0
  90. package/dist/src/tools/install.conflict.test.d.ts.map +1 -0
  91. package/dist/src/tools/install.conflict.test.js +354 -0
  92. package/dist/src/tools/install.conflict.test.js.map +1 -0
  93. package/dist/src/tools/install.d.ts +5 -0
  94. package/dist/src/tools/install.d.ts.map +1 -1
  95. package/dist/src/tools/install.helpers.d.ts +5 -4
  96. package/dist/src/tools/install.helpers.d.ts.map +1 -1
  97. package/dist/src/tools/install.helpers.js +13 -4
  98. package/dist/src/tools/install.helpers.js.map +1 -1
  99. package/dist/src/tools/install.js +96 -17
  100. package/dist/src/tools/install.js.map +1 -1
  101. package/dist/src/tools/install.types.d.ts +75 -11
  102. package/dist/src/tools/install.types.d.ts.map +1 -1
  103. package/dist/src/tools/install.types.js +15 -1
  104. package/dist/src/tools/install.types.js.map +1 -1
  105. package/dist/src/tools/merge.d.ts +53 -0
  106. package/dist/src/tools/merge.d.ts.map +1 -0
  107. package/dist/src/tools/merge.js +276 -0
  108. package/dist/src/tools/merge.js.map +1 -0
  109. package/dist/src/tools/merge.test.d.ts +11 -0
  110. package/dist/src/tools/merge.test.d.ts.map +1 -0
  111. package/dist/src/tools/merge.test.js +224 -0
  112. package/dist/src/tools/merge.test.js.map +1 -0
  113. package/dist/src/tools/recommend.d.ts +1 -0
  114. package/dist/src/tools/recommend.d.ts.map +1 -1
  115. package/dist/src/tools/recommend.js +165 -38
  116. package/dist/src/tools/recommend.js.map +1 -1
  117. package/dist/src/tools/search.d.ts.map +1 -1
  118. package/dist/src/tools/search.js +31 -4
  119. package/dist/src/tools/search.js.map +1 -1
  120. package/dist/src/utils/validation.d.ts +6 -2
  121. package/dist/src/utils/validation.d.ts.map +1 -1
  122. package/dist/src/utils/validation.js +11 -2
  123. package/dist/src/utils/validation.js.map +1 -1
  124. package/dist/src/webhooks/webhook-endpoint.d.ts +4 -49
  125. package/dist/src/webhooks/webhook-endpoint.d.ts.map +1 -1
  126. package/dist/src/webhooks/webhook-endpoint.js +3 -125
  127. package/dist/src/webhooks/webhook-endpoint.js.map +1 -1
  128. package/dist/src/webhooks/webhook-helpers.d.ts +69 -0
  129. package/dist/src/webhooks/webhook-helpers.d.ts.map +1 -0
  130. package/dist/src/webhooks/webhook-helpers.js +146 -0
  131. package/dist/src/webhooks/webhook-helpers.js.map +1 -0
  132. package/dist/tests/e2e/conflict-resolution.e2e.test.d.ts +12 -0
  133. package/dist/tests/e2e/conflict-resolution.e2e.test.d.ts.map +1 -0
  134. package/dist/tests/e2e/conflict-resolution.e2e.test.js +343 -0
  135. package/dist/tests/e2e/conflict-resolution.e2e.test.js.map +1 -0
  136. package/dist/tests/integration/fixtures/development-skills.d.ts +22 -0
  137. package/dist/tests/integration/fixtures/development-skills.d.ts.map +1 -0
  138. package/dist/tests/integration/fixtures/development-skills.js +165 -0
  139. package/dist/tests/integration/fixtures/development-skills.js.map +1 -0
  140. package/dist/tests/integration/fixtures/devops-skills.d.ts +10 -0
  141. package/dist/tests/integration/fixtures/devops-skills.d.ts.map +1 -0
  142. package/dist/tests/integration/fixtures/devops-skills.js +70 -0
  143. package/dist/tests/integration/fixtures/devops-skills.js.map +1 -0
  144. package/dist/tests/integration/fixtures/experimental-skills.d.ts +14 -0
  145. package/dist/tests/integration/fixtures/experimental-skills.d.ts.map +1 -0
  146. package/dist/tests/integration/fixtures/experimental-skills.js +255 -0
  147. package/dist/tests/integration/fixtures/experimental-skills.js.map +1 -0
  148. package/dist/tests/integration/fixtures/skill-types.d.ts +18 -0
  149. package/dist/tests/integration/fixtures/skill-types.d.ts.map +1 -0
  150. package/dist/tests/integration/fixtures/skill-types.js +6 -0
  151. package/dist/tests/integration/fixtures/skill-types.js.map +1 -0
  152. package/dist/tests/integration/fixtures/test-skills.d.ts +10 -14
  153. package/dist/tests/integration/fixtures/test-skills.d.ts.map +1 -1
  154. package/dist/tests/integration/fixtures/test-skills.js +23 -590
  155. package/dist/tests/integration/fixtures/test-skills.js.map +1 -1
  156. package/dist/tests/integration/fixtures/testing-skills.d.ts +10 -0
  157. package/dist/tests/integration/fixtures/testing-skills.d.ts.map +1 -0
  158. package/dist/tests/integration/fixtures/testing-skills.js +70 -0
  159. package/dist/tests/integration/fixtures/testing-skills.js.map +1 -0
  160. package/dist/tests/integration/fixtures/verified-skills.d.ts +11 -0
  161. package/dist/tests/integration/fixtures/verified-skills.d.ts.map +1 -0
  162. package/dist/tests/integration/fixtures/verified-skills.js +91 -0
  163. package/dist/tests/integration/fixtures/verified-skills.js.map +1 -0
  164. package/dist/tests/integration/install-conflict.integration.test.d.ts +8 -0
  165. package/dist/tests/integration/install-conflict.integration.test.d.ts.map +1 -0
  166. package/dist/tests/integration/install-conflict.integration.test.js +384 -0
  167. package/dist/tests/integration/install-conflict.integration.test.js.map +1 -0
  168. package/dist/tests/integration/install-trust-parsing.integration.test.d.ts +13 -0
  169. package/dist/tests/integration/install-trust-parsing.integration.test.d.ts.map +1 -0
  170. package/dist/tests/integration/install-trust-parsing.integration.test.js +290 -0
  171. package/dist/tests/integration/install-trust-parsing.integration.test.js.map +1 -0
  172. package/dist/tests/integration/install.integration.test.js +3 -0
  173. package/dist/tests/integration/install.integration.test.js.map +1 -1
  174. package/package.json +7 -6
@@ -0,0 +1,343 @@
1
+ /**
2
+ * E2E Test: Conflict Resolution Merge Flow
3
+ *
4
+ * Tests the complete conflict detection and resolution workflow
5
+ * when reinstalling skills with local modifications.
6
+ *
7
+ * SMI-1889: E2E test for conflict resolution merge flow
8
+ *
9
+ * @see packages/mcp-server/src/tools/install.conflict.ts
10
+ */
11
+ import { describe, it, expect, beforeAll, afterAll, beforeEach } from 'vitest';
12
+ import { existsSync, mkdirSync, rmSync, readFileSync, writeFileSync, readdirSync } from 'fs';
13
+ import { join } from 'path';
14
+ import { tmpdir } from 'os';
15
+ import { checkForConflicts, handleMergeAction } from '../../src/tools/install.conflict.js';
16
+ import { hashContent, storeOriginal, loadOriginal, getBackupsDir, } from '../../src/tools/install.helpers.js';
17
+ // Test configuration
18
+ const TEST_DIR = join(tmpdir(), 'skillsmith-e2e-conflict');
19
+ const TEST_HOME = join(TEST_DIR, 'home');
20
+ const TEST_SKILLS_DIR = join(TEST_HOME, '.claude', 'skills');
21
+ const TEST_SKILLSMITH_DIR = join(TEST_HOME, '.skillsmith');
22
+ // Dynamic paths - computed after HOME is set
23
+ // Note: getBackupsDir() returns ~/.claude/skills/.backups, not ~/.skillsmith/backups
24
+ function getTestBackupsDir() {
25
+ return getBackupsDir();
26
+ }
27
+ // Mock skill content for testing
28
+ const ORIGINAL_SKILL_CONTENT = `---
29
+ name: test-skill
30
+ version: 1.0.0
31
+ description: A test skill for conflict resolution testing
32
+ ---
33
+
34
+ # Test Skill
35
+
36
+ Original content that was installed from upstream.
37
+
38
+ ## Features
39
+ - Feature A
40
+ - Feature B
41
+ `;
42
+ const MODIFIED_SKILL_CONTENT = `---
43
+ name: test-skill
44
+ version: 1.0.0
45
+ description: A test skill for conflict resolution testing
46
+ ---
47
+
48
+ # Test Skill
49
+
50
+ Original content that was installed from upstream.
51
+
52
+ ## Features
53
+ - Feature A
54
+ - Feature B
55
+ - Feature C (local addition)
56
+
57
+ ## Local Notes
58
+ These are my local notes that I added.
59
+ `;
60
+ const UPSTREAM_UPDATE_CONTENT = `---
61
+ name: test-skill
62
+ version: 1.1.0
63
+ description: A test skill for conflict resolution testing (updated)
64
+ ---
65
+
66
+ # Test Skill
67
+
68
+ Original content that was installed from upstream.
69
+
70
+ ## Features
71
+ - Feature A
72
+ - Feature B
73
+ - Feature D (upstream addition)
74
+
75
+ ## Changelog
76
+ - v1.1.0: Added Feature D
77
+ `;
78
+ const CONFLICTING_UPDATE_CONTENT = `---
79
+ name: test-skill
80
+ version: 1.1.0
81
+ description: A test skill for conflict resolution testing (updated)
82
+ ---
83
+
84
+ # Test Skill
85
+
86
+ Completely rewritten content from upstream.
87
+
88
+ ## New Features
89
+ - Feature X
90
+ - Feature Y
91
+ `;
92
+ describe('E2E: conflict resolution merge flow', () => {
93
+ let originalHome;
94
+ beforeAll(() => {
95
+ // Save original HOME
96
+ originalHome = process.env['HOME'];
97
+ // Override HOME for tests FIRST, so getBackupsDir() returns correct path
98
+ process.env['HOME'] = TEST_HOME;
99
+ // Create test environment
100
+ if (existsSync(TEST_DIR)) {
101
+ rmSync(TEST_DIR, { recursive: true, force: true });
102
+ }
103
+ mkdirSync(TEST_DIR, { recursive: true });
104
+ mkdirSync(TEST_SKILLS_DIR, { recursive: true });
105
+ mkdirSync(TEST_SKILLSMITH_DIR, { recursive: true });
106
+ // Create the actual backup directory where the code writes
107
+ // getBackupsDir() returns ~/.claude/skills/.backups
108
+ mkdirSync(getTestBackupsDir(), { recursive: true });
109
+ });
110
+ afterAll(() => {
111
+ // Restore HOME
112
+ if (originalHome) {
113
+ process.env['HOME'] = originalHome;
114
+ }
115
+ if (existsSync(TEST_DIR)) {
116
+ rmSync(TEST_DIR, { recursive: true, force: true });
117
+ }
118
+ });
119
+ beforeEach(() => {
120
+ // Clean up between tests
121
+ const skillPath = join(TEST_SKILLS_DIR, 'test-skill');
122
+ if (existsSync(skillPath)) {
123
+ rmSync(skillPath, { recursive: true, force: true });
124
+ }
125
+ // Clean backups - use the actual backup directory
126
+ const backupsDir = getTestBackupsDir();
127
+ if (existsSync(backupsDir)) {
128
+ const backups = readdirSync(backupsDir);
129
+ for (const backup of backups) {
130
+ rmSync(join(backupsDir, backup), { recursive: true, force: true });
131
+ }
132
+ }
133
+ });
134
+ /**
135
+ * Helper to set up a skill with original content stored
136
+ */
137
+ async function setupInstalledSkill(content = ORIGINAL_SKILL_CONTENT) {
138
+ const skillPath = join(TEST_SKILLS_DIR, 'test-skill');
139
+ mkdirSync(skillPath, { recursive: true });
140
+ writeFileSync(join(skillPath, 'SKILL.md'), content);
141
+ // Store original content for conflict detection
142
+ await storeOriginal('test-skill', ORIGINAL_SKILL_CONTENT, {
143
+ version: '1.0.0',
144
+ source: 'github:test/test-skill',
145
+ installedAt: new Date().toISOString(),
146
+ });
147
+ return skillPath;
148
+ }
149
+ /**
150
+ * Helper to create a manifest entry
151
+ */
152
+ function createManifestEntry() {
153
+ return {
154
+ version: '1.0.0',
155
+ installedSkills: {
156
+ 'test-skill': {
157
+ id: 'test/test-skill',
158
+ name: 'test-skill',
159
+ version: '1.0.0',
160
+ source: 'github:test/test-skill',
161
+ installPath: join(TEST_SKILLS_DIR, 'test-skill'),
162
+ installedAt: new Date().toISOString(),
163
+ lastUpdated: new Date().toISOString(),
164
+ originalContentHash: hashContent(ORIGINAL_SKILL_CONTENT),
165
+ },
166
+ },
167
+ };
168
+ }
169
+ describe('Scenario 1: Cancel Action', () => {
170
+ it('should abort installation without changes when cancel is chosen', async () => {
171
+ const installPath = await setupInstalledSkill(MODIFIED_SKILL_CONTENT);
172
+ const manifest = createManifestEntry();
173
+ // Check for conflicts with cancel action
174
+ const result = await checkForConflicts('test-skill', installPath, manifest, 'cancel', 'test/test-skill');
175
+ // Verify installation was aborted
176
+ expect(result.shouldProceed).toBe(false);
177
+ expect(result.earlyReturn).toBeDefined();
178
+ expect(result.earlyReturn?.success).toBe(false);
179
+ expect(result.earlyReturn?.error).toContain('cancelled');
180
+ // Verify local file was NOT modified
181
+ const currentContent = readFileSync(join(installPath, 'SKILL.md'), 'utf-8');
182
+ expect(currentContent).toBe(MODIFIED_SKILL_CONTENT);
183
+ // Verify no timestamped backup was created (cancel doesn't backup)
184
+ // Note: .original directory may exist from storeOriginal() call, but no timestamped backups
185
+ const backupsDir = getTestBackupsDir();
186
+ const skillBackupDir = join(backupsDir, 'test-skill');
187
+ if (existsSync(skillBackupDir)) {
188
+ const entries = readdirSync(skillBackupDir);
189
+ // Only .original should exist, no timestamped backups
190
+ const timestampedBackups = entries.filter((e) => e !== '.original');
191
+ expect(timestampedBackups.length).toBe(0);
192
+ }
193
+ });
194
+ });
195
+ describe('Scenario 2: Overwrite Action', () => {
196
+ it('should create backup and allow proceeding with overwrite', async () => {
197
+ const installPath = await setupInstalledSkill(MODIFIED_SKILL_CONTENT);
198
+ const manifest = createManifestEntry();
199
+ // Check for conflicts with overwrite action
200
+ const result = await checkForConflicts('test-skill', installPath, manifest, 'overwrite', 'test/test-skill');
201
+ // Verify proceed is allowed
202
+ expect(result.shouldProceed).toBe(true);
203
+ expect(result.backupPath).toBeDefined();
204
+ // Verify backup was created
205
+ expect(existsSync(result.backupPath)).toBe(true);
206
+ // Verify backup directory contains backup files
207
+ const backupsDir = getTestBackupsDir();
208
+ const backupDirs = readdirSync(backupsDir);
209
+ expect(backupDirs.length).toBeGreaterThan(0);
210
+ // Find the backup and verify content preserved
211
+ // Backups are stored in ~/.claude/skills/.backups/test-skill/<timestamp>_<reason>/
212
+ const skillBackupDir = join(backupsDir, 'test-skill');
213
+ expect(existsSync(skillBackupDir)).toBe(true);
214
+ const skillBackups = readdirSync(skillBackupDir).filter((d) => d !== '.original');
215
+ expect(skillBackups.length).toBeGreaterThan(0);
216
+ const backupContent = readFileSync(join(skillBackupDir, skillBackups[0], 'SKILL.md'), 'utf-8');
217
+ expect(backupContent).toBe(MODIFIED_SKILL_CONTENT);
218
+ });
219
+ });
220
+ describe('Scenario 3: Merge Action (Clean)', () => {
221
+ it('should perform clean three-way merge preserving local changes', async () => {
222
+ const installPath = await setupInstalledSkill(MODIFIED_SKILL_CONTENT);
223
+ const manifest = createManifestEntry();
224
+ // Handle merge with non-conflicting upstream update
225
+ const result = await handleMergeAction('test-skill', installPath, UPSTREAM_UPDATE_CONTENT, manifest, 'test', 'test-skill', 'test/test-skill');
226
+ // For clean merge, should proceed with merged content
227
+ // Note: actual merge result depends on diff algorithm
228
+ if (result.shouldProceed && result.mergedContent) {
229
+ // Clean merge succeeded
230
+ expect(result.mergedContent).toBeDefined();
231
+ expect(result.mergedContent).not.toBe(MODIFIED_SKILL_CONTENT);
232
+ expect(result.mergedContent).not.toBe(UPSTREAM_UPDATE_CONTENT);
233
+ }
234
+ else {
235
+ // If merge had conflicts, check appropriate handling
236
+ expect(result.earlyReturn?.mergeResult).toBeDefined();
237
+ }
238
+ });
239
+ });
240
+ describe('Scenario 4: Merge Action with Conflicts', () => {
241
+ it('should handle conflicting changes with markers', async () => {
242
+ const installPath = await setupInstalledSkill(MODIFIED_SKILL_CONTENT);
243
+ const manifest = createManifestEntry();
244
+ // Handle merge with conflicting upstream update
245
+ const result = await handleMergeAction('test-skill', installPath, CONFLICTING_UPDATE_CONTENT, manifest, 'test', 'test-skill', 'test/test-skill');
246
+ // For conflict merge, should stop and report
247
+ if (!result.shouldProceed) {
248
+ // Conflict detected
249
+ expect(result.backupPath).toBeDefined();
250
+ expect(result.earlyReturn).toBeDefined();
251
+ expect(result.earlyReturn?.mergeResult).toBeDefined();
252
+ expect(result.earlyReturn?.tips).toBeDefined();
253
+ expect(result.earlyReturn?.tips?.some((t) => t.includes('conflict'))).toBe(true);
254
+ // Verify backup was created
255
+ expect(existsSync(result.backupPath)).toBe(true);
256
+ // Check that merged file has conflict markers
257
+ const mergedContent = readFileSync(join(installPath, 'SKILL.md'), 'utf-8');
258
+ const hasConflictMarkers = mergedContent.includes('<<<<<<<') || mergedContent.includes('>>>>>>>');
259
+ expect(hasConflictMarkers).toBe(true);
260
+ }
261
+ else {
262
+ // If clean merge somehow succeeded, verify merged content
263
+ expect(result.mergedContent).toBeDefined();
264
+ }
265
+ });
266
+ });
267
+ describe('Conflict Detection', () => {
268
+ it('should detect no conflict when content is unchanged', async () => {
269
+ // Install skill WITHOUT modifications
270
+ const installPath = await setupInstalledSkill(ORIGINAL_SKILL_CONTENT);
271
+ const manifest = createManifestEntry();
272
+ // Check for conflicts
273
+ const result = await checkForConflicts('test-skill', installPath, manifest, undefined, 'test/test-skill');
274
+ // No modifications means proceed without action needed
275
+ expect(result.shouldProceed).toBe(true);
276
+ expect(result.earlyReturn).toBeUndefined();
277
+ });
278
+ it('should detect modifications and require action', async () => {
279
+ const installPath = await setupInstalledSkill(MODIFIED_SKILL_CONTENT);
280
+ const manifest = createManifestEntry();
281
+ // Check for conflicts WITHOUT providing action
282
+ const result = await checkForConflicts('test-skill', installPath, manifest, undefined, 'test/test-skill');
283
+ // Should not proceed and require action
284
+ expect(result.shouldProceed).toBe(false);
285
+ expect(result.earlyReturn).toBeDefined();
286
+ expect(result.earlyReturn?.conflict).toBeDefined();
287
+ expect(result.earlyReturn?.conflict?.hasLocalModifications).toBe(true);
288
+ expect(result.earlyReturn?.requiresAction).toContain('overwrite');
289
+ expect(result.earlyReturn?.requiresAction).toContain('merge');
290
+ expect(result.earlyReturn?.requiresAction).toContain('cancel');
291
+ });
292
+ it('should handle skill without original hash gracefully', async () => {
293
+ const installPath = await setupInstalledSkill(MODIFIED_SKILL_CONTENT);
294
+ // Create manifest WITHOUT originalContentHash
295
+ const manifest = {
296
+ version: '1.0.0',
297
+ installedSkills: {
298
+ 'test-skill': {
299
+ id: 'test/test-skill',
300
+ name: 'test-skill',
301
+ version: '1.0.0',
302
+ source: 'github:test/test-skill',
303
+ installPath,
304
+ installedAt: new Date().toISOString(),
305
+ lastUpdated: new Date().toISOString(),
306
+ // No originalContentHash
307
+ },
308
+ },
309
+ };
310
+ const result = await checkForConflicts('test-skill', installPath, manifest, undefined, 'test/test-skill');
311
+ // Should proceed (can't detect conflicts without original hash)
312
+ expect(result.shouldProceed).toBe(true);
313
+ });
314
+ });
315
+ describe('Original Content Storage', () => {
316
+ it('should store and retrieve original content correctly', async () => {
317
+ await storeOriginal('store-test-skill', ORIGINAL_SKILL_CONTENT, {
318
+ version: '1.0.0',
319
+ source: 'github:test/store-test-skill',
320
+ installedAt: new Date().toISOString(),
321
+ });
322
+ const retrieved = await loadOriginal('store-test-skill');
323
+ expect(retrieved).toBe(ORIGINAL_SKILL_CONTENT);
324
+ });
325
+ it('should return null for non-existent original', async () => {
326
+ const retrieved = await loadOriginal('non-existent-skill');
327
+ expect(retrieved).toBeNull();
328
+ });
329
+ });
330
+ describe('Hash Consistency', () => {
331
+ it('should produce consistent hashes for same content', () => {
332
+ const hash1 = hashContent(ORIGINAL_SKILL_CONTENT);
333
+ const hash2 = hashContent(ORIGINAL_SKILL_CONTENT);
334
+ expect(hash1).toBe(hash2);
335
+ });
336
+ it('should produce different hashes for different content', () => {
337
+ const hash1 = hashContent(ORIGINAL_SKILL_CONTENT);
338
+ const hash2 = hashContent(MODIFIED_SKILL_CONTENT);
339
+ expect(hash1).not.toBe(hash2);
340
+ });
341
+ });
342
+ });
343
+ //# sourceMappingURL=conflict-resolution.e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conflict-resolution.e2e.test.js","sourceRoot":"","sources":["../../../tests/e2e/conflict-resolution.e2e.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * SMI-903: Development-related test skill fixtures
3
+ * Community skills for programming languages and frameworks
4
+ */
5
+ import type { TestSkillData } from './skill-types.js';
6
+ /**
7
+ * Community skills - Development (6 total)
8
+ */
9
+ export declare const DEVELOPMENT_SKILLS: TestSkillData[];
10
+ /**
11
+ * Community skills - Documentation (3 total)
12
+ */
13
+ export declare const DOCUMENTATION_SKILLS: TestSkillData[];
14
+ /**
15
+ * Community skills - Database (3 total)
16
+ */
17
+ export declare const DATABASE_SKILLS: TestSkillData[];
18
+ /**
19
+ * SMI-907: Additional skills for overlap detection testing
20
+ */
21
+ export declare const OVERLAP_DETECTION_SKILLS: TestSkillData[];
22
+ //# sourceMappingURL=development-skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"development-skills.d.ts","sourceRoot":"","sources":["../../../../tests/integration/fixtures/development-skills.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAErD;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,aAAa,EA6D7C,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,aAAa,EA+B/C,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,aAAa,EA+B1C,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,aAAa,EAqBnD,CAAA"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * SMI-903: Development-related test skill fixtures
3
+ * Community skills for programming languages and frameworks
4
+ */
5
+ /**
6
+ * Community skills - Development (6 total)
7
+ */
8
+ export const DEVELOPMENT_SKILLS = [
9
+ {
10
+ id: 'community/typescript-helper',
11
+ name: 'typescript-helper',
12
+ description: 'TypeScript development utilities for type generation and refactoring',
13
+ author: 'community',
14
+ repoUrl: 'https://github.com/skillsmith-community/typescript-helper',
15
+ qualityScore: 0.83,
16
+ trustTier: 'community',
17
+ tags: ['typescript', 'development', 'types', 'development'],
18
+ },
19
+ {
20
+ id: 'community/react-patterns',
21
+ name: 'react-patterns',
22
+ description: 'React component patterns and hooks best practices',
23
+ author: 'community',
24
+ repoUrl: 'https://github.com/skillsmith-community/react-patterns',
25
+ qualityScore: 0.85,
26
+ trustTier: 'community',
27
+ tags: ['react', 'patterns', 'hooks', 'frontend', 'development'],
28
+ },
29
+ {
30
+ id: 'community/nextjs-helper',
31
+ name: 'nextjs-helper',
32
+ description: 'Next.js application development with App Router and Server Components',
33
+ author: 'community',
34
+ repoUrl: 'https://github.com/skillsmith-community/nextjs-helper',
35
+ qualityScore: 0.84,
36
+ trustTier: 'community',
37
+ tags: ['nextjs', 'react', 'ssr', 'frontend', 'development'],
38
+ },
39
+ {
40
+ id: 'community/nodejs-helper',
41
+ name: 'nodejs-helper',
42
+ description: 'Node.js backend development patterns and utilities',
43
+ author: 'community',
44
+ repoUrl: 'https://github.com/skillsmith-community/nodejs-helper',
45
+ qualityScore: 0.82,
46
+ trustTier: 'community',
47
+ tags: ['nodejs', 'backend', 'express', 'api', 'development'],
48
+ },
49
+ {
50
+ id: 'community/python-helper',
51
+ name: 'python-helper',
52
+ description: 'Python development utilities and best practices',
53
+ author: 'community',
54
+ repoUrl: 'https://github.com/skillsmith-community/python-helper',
55
+ qualityScore: 0.81,
56
+ trustTier: 'community',
57
+ tags: ['python', 'development', 'scripting', 'development'],
58
+ },
59
+ {
60
+ id: 'community/rust-helper',
61
+ name: 'rust-helper',
62
+ description: 'Rust development patterns and memory safety guidance',
63
+ author: 'community',
64
+ repoUrl: 'https://github.com/skillsmith-community/rust-helper',
65
+ qualityScore: 0.77,
66
+ trustTier: 'community',
67
+ tags: ['rust', 'systems', 'memory-safety', 'development'],
68
+ },
69
+ ];
70
+ /**
71
+ * Community skills - Documentation (3 total)
72
+ */
73
+ export const DOCUMENTATION_SKILLS = [
74
+ {
75
+ id: 'community/api-docs',
76
+ name: 'api-docs',
77
+ description: 'Generate OpenAPI documentation from code with automatic schema detection',
78
+ author: 'community',
79
+ repoUrl: 'https://github.com/skillsmith-community/api-docs',
80
+ qualityScore: 0.78,
81
+ trustTier: 'community',
82
+ tags: ['openapi', 'documentation', 'api', 'swagger', 'documentation'],
83
+ },
84
+ {
85
+ id: 'community/readme-gen',
86
+ name: 'readme-gen',
87
+ description: 'Generate comprehensive README files from project analysis',
88
+ author: 'community',
89
+ repoUrl: 'https://github.com/skillsmith-community/readme-gen',
90
+ qualityScore: 0.76,
91
+ trustTier: 'community',
92
+ tags: ['readme', 'documentation', 'markdown', 'documentation'],
93
+ },
94
+ {
95
+ id: 'community/jsdoc-helper',
96
+ name: 'jsdoc-helper',
97
+ description: 'JSDoc documentation generation for JavaScript and TypeScript',
98
+ author: 'community',
99
+ repoUrl: 'https://github.com/skillsmith-community/jsdoc-helper',
100
+ qualityScore: 0.74,
101
+ trustTier: 'community',
102
+ tags: ['jsdoc', 'documentation', 'typescript', 'javascript', 'documentation'],
103
+ },
104
+ ];
105
+ /**
106
+ * Community skills - Database (3 total)
107
+ */
108
+ export const DATABASE_SKILLS = [
109
+ {
110
+ id: 'community/prisma-helper',
111
+ name: 'prisma-helper',
112
+ description: 'Prisma schema design and database migrations',
113
+ author: 'community',
114
+ repoUrl: 'https://github.com/skillsmith-community/prisma-helper',
115
+ qualityScore: 0.83,
116
+ trustTier: 'community',
117
+ tags: ['prisma', 'database', 'orm', 'migrations', 'database'],
118
+ },
119
+ {
120
+ id: 'community/sql-helper',
121
+ name: 'sql-helper',
122
+ description: 'SQL query optimization and schema design',
123
+ author: 'community',
124
+ repoUrl: 'https://github.com/skillsmith-community/sql-helper',
125
+ qualityScore: 0.79,
126
+ trustTier: 'community',
127
+ tags: ['sql', 'database', 'queries', 'optimization', 'database'],
128
+ },
129
+ {
130
+ id: 'community/mongodb-helper',
131
+ name: 'mongodb-helper',
132
+ description: 'MongoDB schema design and aggregation pipelines',
133
+ author: 'community',
134
+ repoUrl: 'https://github.com/skillsmith-community/mongodb-helper',
135
+ qualityScore: 0.77,
136
+ trustTier: 'community',
137
+ tags: ['mongodb', 'nosql', 'database', 'aggregation', 'database'],
138
+ },
139
+ ];
140
+ /**
141
+ * SMI-907: Additional skills for overlap detection testing
142
+ */
143
+ export const OVERLAP_DETECTION_SKILLS = [
144
+ {
145
+ id: 'community/docker',
146
+ name: 'docker',
147
+ description: 'Docker container management and Dockerfile generation',
148
+ author: 'community',
149
+ repoUrl: 'https://github.com/skillsmith-community/docker',
150
+ qualityScore: 0.85,
151
+ trustTier: 'community',
152
+ tags: ['docker', 'containers', 'devops', 'devops'],
153
+ },
154
+ {
155
+ id: 'community/git-commit-helper',
156
+ name: 'git-commit-helper',
157
+ description: 'Git commit message generation with conventional commits support',
158
+ author: 'community',
159
+ repoUrl: 'https://github.com/skillsmith-community/git-commit-helper',
160
+ qualityScore: 0.82,
161
+ trustTier: 'community',
162
+ tags: ['git', 'commit', 'conventional-commits', 'development'],
163
+ },
164
+ ];
165
+ //# sourceMappingURL=development-skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"development-skills.js","sourceRoot":"","sources":["../../../../tests/integration/fixtures/development-skills.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAoB;IACjD;QACE,EAAE,EAAE,6BAA6B;QACjC,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,sEAAsE;QACnF,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,2DAA2D;QACpE,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,WAAW;QACtB,IAAI,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,CAAC;KAC5D;IACD;QACE,EAAE,EAAE,0BAA0B;QAC9B,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,mDAAmD;QAChE,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,wDAAwD;QACjE,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,WAAW;QACtB,IAAI,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC;KAChE;IACD;QACE,EAAE,EAAE,yBAAyB;QAC7B,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,uEAAuE;QACpF,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,uDAAuD;QAChE,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,WAAW;QACtB,IAAI,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,aAAa,CAAC;KAC5D;IACD;QACE,EAAE,EAAE,yBAAyB;QAC7B,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,oDAAoD;QACjE,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,uDAAuD;QAChE,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,WAAW;QACtB,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,CAAC;KAC7D;IACD;QACE,EAAE,EAAE,yBAAyB;QAC7B,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,iDAAiD;QAC9D,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,uDAAuD;QAChE,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,WAAW;QACtB,IAAI,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,CAAC;KAC5D;IACD;QACE,EAAE,EAAE,uBAAuB;QAC3B,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,sDAAsD;QACnE,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,qDAAqD;QAC9D,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,WAAW;QACtB,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,CAAC;KAC1D;CACF,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAoB;IACnD;QACE,EAAE,EAAE,oBAAoB;QACxB,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,0EAA0E;QACvF,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,kDAAkD;QAC3D,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,WAAW;QACtB,IAAI,EAAE,CAAC,SAAS,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,CAAC;KACtE;IACD;QACE,EAAE,EAAE,sBAAsB;QAC1B,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,2DAA2D;QACxE,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,oDAAoD;QAC7D,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,WAAW;QACtB,IAAI,EAAE,CAAC,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,eAAe,CAAC;KAC/D;IACD;QACE,EAAE,EAAE,wBAAwB;QAC5B,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,8DAA8D;QAC3E,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,sDAAsD;QAC/D,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,WAAW;QACtB,IAAI,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,CAAC;KAC9E;CACF,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAoB;IAC9C;QACE,EAAE,EAAE,yBAAyB;QAC7B,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,8CAA8C;QAC3D,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,uDAAuD;QAChE,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,WAAW;QACtB,IAAI,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,CAAC;KAC9D;IACD;QACE,EAAE,EAAE,sBAAsB;QAC1B,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,0CAA0C;QACvD,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,oDAAoD;QAC7D,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,WAAW;QACtB,IAAI,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,CAAC;KACjE;IACD;QACE,EAAE,EAAE,0BAA0B;QAC9B,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,iDAAiD;QAC9D,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,wDAAwD;QACjE,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,WAAW;QACtB,IAAI,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,CAAC;KAClE;CACF,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAoB;IACvD;QACE,EAAE,EAAE,kBAAkB;QACtB,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,uDAAuD;QACpE,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,gDAAgD;QACzD,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,WAAW;QACtB,IAAI,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC;KACnD;IACD;QACE,EAAE,EAAE,6BAA6B;QACjC,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,iEAAiE;QAC9E,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,2DAA2D;QACpE,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,WAAW;QACtB,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,sBAAsB,EAAE,aAAa,CAAC;KAC/D;CACF,CAAA"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * SMI-903: DevOps-related test skill fixtures
3
+ * Community skills for container, CI/CD, and infrastructure tools
4
+ */
5
+ import type { TestSkillData } from './skill-types.js';
6
+ /**
7
+ * Community skills - DevOps (6 total)
8
+ */
9
+ export declare const DEVOPS_SKILLS: TestSkillData[];
10
+ //# sourceMappingURL=devops-skills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devops-skills.d.ts","sourceRoot":"","sources":["../../../../tests/integration/fixtures/devops-skills.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAErD;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,aAAa,EA6DxC,CAAA"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * SMI-903: DevOps-related test skill fixtures
3
+ * Community skills for container, CI/CD, and infrastructure tools
4
+ */
5
+ /**
6
+ * Community skills - DevOps (6 total)
7
+ */
8
+ export const DEVOPS_SKILLS = [
9
+ {
10
+ id: 'community/docker-compose',
11
+ name: 'docker-compose',
12
+ description: 'Generate and manage Docker Compose configurations for development',
13
+ author: 'community',
14
+ repoUrl: 'https://github.com/skillsmith-community/docker-compose',
15
+ qualityScore: 0.84,
16
+ trustTier: 'community',
17
+ tags: ['docker', 'devops', 'containers', 'compose', 'devops'],
18
+ },
19
+ {
20
+ id: 'community/kubernetes-helper',
21
+ name: 'kubernetes-helper',
22
+ description: 'Kubernetes manifest generation and cluster management',
23
+ author: 'community',
24
+ repoUrl: 'https://github.com/skillsmith-community/kubernetes-helper',
25
+ qualityScore: 0.81,
26
+ trustTier: 'community',
27
+ tags: ['kubernetes', 'k8s', 'devops', 'containers', 'devops'],
28
+ },
29
+ {
30
+ id: 'community/github-actions',
31
+ name: 'github-actions',
32
+ description: 'GitHub Actions workflow generation and CI/CD pipelines',
33
+ author: 'community',
34
+ repoUrl: 'https://github.com/skillsmith-community/github-actions',
35
+ qualityScore: 0.86,
36
+ trustTier: 'community',
37
+ tags: ['github-actions', 'ci-cd', 'automation', 'devops', 'devops'],
38
+ },
39
+ {
40
+ id: 'community/terraform-helper',
41
+ name: 'terraform-helper',
42
+ description: 'Terraform infrastructure as code generation and best practices',
43
+ author: 'community',
44
+ repoUrl: 'https://github.com/skillsmith-community/terraform-helper',
45
+ qualityScore: 0.79,
46
+ trustTier: 'community',
47
+ tags: ['terraform', 'iac', 'infrastructure', 'cloud', 'devops'],
48
+ },
49
+ {
50
+ id: 'community/nginx-config',
51
+ name: 'nginx-config',
52
+ description: 'Nginx configuration generation for web servers and proxies',
53
+ author: 'community',
54
+ repoUrl: 'https://github.com/skillsmith-community/nginx-config',
55
+ qualityScore: 0.75,
56
+ trustTier: 'community',
57
+ tags: ['nginx', 'webserver', 'proxy', 'devops', 'devops'],
58
+ },
59
+ {
60
+ id: 'community/aws-helper',
61
+ name: 'aws-helper',
62
+ description: 'AWS service configuration and CloudFormation templates',
63
+ author: 'community',
64
+ repoUrl: 'https://github.com/skillsmith-community/aws-helper',
65
+ qualityScore: 0.8,
66
+ trustTier: 'community',
67
+ tags: ['aws', 'cloud', 'cloudformation', 'infrastructure', 'devops'],
68
+ },
69
+ ];
70
+ //# sourceMappingURL=devops-skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devops-skills.js","sourceRoot":"","sources":["../../../../tests/integration/fixtures/devops-skills.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAoB;IAC5C;QACE,EAAE,EAAE,0BAA0B;QAC9B,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,mEAAmE;QAChF,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,wDAAwD;QACjE,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,WAAW;QACtB,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,CAAC;KAC9D;IACD;QACE,EAAE,EAAE,6BAA6B;QACjC,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,uDAAuD;QACpE,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,2DAA2D;QACpE,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,WAAW;QACtB,IAAI,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC;KAC9D;IACD;QACE,EAAE,EAAE,0BAA0B;QAC9B,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,wDAAwD;QACrE,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,wDAAwD;QACjE,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,WAAW;QACtB,IAAI,EAAE,CAAC,gBAAgB,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC;KACpE;IACD;QACE,EAAE,EAAE,4BAA4B;QAChC,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,gEAAgE;QAC7E,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,0DAA0D;QACnE,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,WAAW;QACtB,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,QAAQ,CAAC;KAChE;IACD;QACE,EAAE,EAAE,wBAAwB;QAC5B,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,4DAA4D;QACzE,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,sDAAsD;QAC/D,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,WAAW;QACtB,IAAI,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC;KAC1D;IACD;QACE,EAAE,EAAE,sBAAsB;QAC1B,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,wDAAwD;QACrE,MAAM,EAAE,WAAW;QACnB,OAAO,EAAE,oDAAoD;QAC7D,YAAY,EAAE,GAAG;QACjB,SAAS,EAAE,WAAW;QACtB,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,QAAQ,CAAC;KACrE;CACF,CAAA"}