@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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/__tests__/LocalIndexer.test.d.ts +5 -0
- package/dist/src/__tests__/LocalIndexer.test.d.ts.map +1 -0
- package/dist/src/__tests__/LocalIndexer.test.js +396 -0
- package/dist/src/__tests__/LocalIndexer.test.js.map +1 -0
- package/dist/src/__tests__/get-skill.test.js +195 -0
- package/dist/src/__tests__/get-skill.test.js.map +1 -1
- package/dist/src/__tests__/index-local.test.d.ts +5 -0
- package/dist/src/__tests__/index-local.test.d.ts.map +1 -0
- package/dist/src/__tests__/index-local.test.js +203 -0
- package/dist/src/__tests__/index-local.test.js.map +1 -0
- package/dist/src/__tests__/recommend.test.d.ts +7 -0
- package/dist/src/__tests__/recommend.test.d.ts.map +1 -0
- package/dist/src/__tests__/recommend.test.js +277 -0
- package/dist/src/__tests__/recommend.test.js.map +1 -0
- package/dist/src/__tests__/search.test.js +138 -0
- package/dist/src/__tests__/search.test.js.map +1 -1
- package/dist/src/context.d.ts +6 -0
- package/dist/src/context.d.ts.map +1 -1
- package/dist/src/context.js +7 -1
- package/dist/src/context.js.map +1 -1
- package/dist/src/index.js +14 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/indexer/FrontmatterParser.d.ts +30 -0
- package/dist/src/indexer/FrontmatterParser.d.ts.map +1 -0
- package/dist/src/indexer/FrontmatterParser.js +109 -0
- package/dist/src/indexer/FrontmatterParser.js.map +1 -0
- package/dist/src/indexer/LocalIndexer.d.ts +136 -0
- package/dist/src/indexer/LocalIndexer.d.ts.map +1 -0
- package/dist/src/indexer/LocalIndexer.js +271 -0
- package/dist/src/indexer/LocalIndexer.js.map +1 -0
- package/dist/src/indexer/index.d.ts +8 -0
- package/dist/src/indexer/index.d.ts.map +1 -0
- package/dist/src/indexer/index.js +8 -0
- package/dist/src/indexer/index.js.map +1 -0
- package/dist/src/llm/failover.d.ts +11 -1
- package/dist/src/llm/failover.d.ts.map +1 -1
- package/dist/src/llm/failover.js.map +1 -1
- package/dist/src/middleware/errorFormatter.d.ts +27 -0
- package/dist/src/middleware/errorFormatter.d.ts.map +1 -1
- package/dist/src/middleware/errorFormatter.js +95 -0
- package/dist/src/middleware/errorFormatter.js.map +1 -1
- package/dist/src/middleware/index.d.ts +1 -1
- package/dist/src/middleware/index.d.ts.map +1 -1
- package/dist/src/middleware/index.js.map +1 -1
- package/dist/src/middleware/quota-helpers.d.ts +40 -0
- package/dist/src/middleware/quota-helpers.d.ts.map +1 -0
- package/dist/src/middleware/quota-helpers.js +90 -0
- package/dist/src/middleware/quota-helpers.js.map +1 -0
- package/dist/src/middleware/quota-types.d.ts +105 -0
- package/dist/src/middleware/quota-types.d.ts.map +1 -0
- package/dist/src/middleware/quota-types.js +4 -0
- package/dist/src/middleware/quota-types.js.map +1 -0
- package/dist/src/middleware/quota.d.ts +3 -97
- package/dist/src/middleware/quota.d.ts.map +1 -1
- package/dist/src/middleware/quota.js +2 -87
- package/dist/src/middleware/quota.js.map +1 -1
- package/dist/src/tools/LocalSkillSearch.d.ts +32 -0
- package/dist/src/tools/LocalSkillSearch.d.ts.map +1 -0
- package/dist/src/tools/LocalSkillSearch.js +74 -0
- package/dist/src/tools/LocalSkillSearch.js.map +1 -0
- package/dist/src/tools/compare.helpers.js.map +1 -1
- package/dist/src/tools/compare.types.d.ts +1 -0
- package/dist/src/tools/compare.types.d.ts.map +1 -1
- package/dist/src/tools/compare.types.js +2 -0
- package/dist/src/tools/compare.types.js.map +1 -1
- package/dist/src/tools/get-skill.js +3 -0
- package/dist/src/tools/get-skill.js.map +1 -1
- package/dist/src/tools/index-local.d.ts +117 -0
- package/dist/src/tools/index-local.d.ts.map +1 -0
- package/dist/src/tools/index-local.js +126 -0
- package/dist/src/tools/index-local.js.map +1 -0
- package/dist/src/tools/index.d.ts +2 -0
- package/dist/src/tools/index.d.ts.map +1 -1
- package/dist/src/tools/index.js +2 -0
- package/dist/src/tools/index.js.map +1 -1
- package/dist/src/tools/install.conflict-helpers.d.ts +64 -0
- package/dist/src/tools/install.conflict-helpers.d.ts.map +1 -0
- package/dist/src/tools/install.conflict-helpers.js +165 -0
- package/dist/src/tools/install.conflict-helpers.js.map +1 -0
- package/dist/src/tools/install.conflict-helpers.test.d.ts +15 -0
- package/dist/src/tools/install.conflict-helpers.test.d.ts.map +1 -0
- package/dist/src/tools/install.conflict-helpers.test.js +243 -0
- package/dist/src/tools/install.conflict-helpers.test.js.map +1 -0
- package/dist/src/tools/install.conflict.d.ts +58 -0
- package/dist/src/tools/install.conflict.d.ts.map +1 -0
- package/dist/src/tools/install.conflict.js +160 -0
- package/dist/src/tools/install.conflict.js.map +1 -0
- package/dist/src/tools/install.conflict.test.d.ts +15 -0
- package/dist/src/tools/install.conflict.test.d.ts.map +1 -0
- package/dist/src/tools/install.conflict.test.js +354 -0
- package/dist/src/tools/install.conflict.test.js.map +1 -0
- package/dist/src/tools/install.d.ts +5 -0
- package/dist/src/tools/install.d.ts.map +1 -1
- package/dist/src/tools/install.helpers.d.ts +5 -4
- package/dist/src/tools/install.helpers.d.ts.map +1 -1
- package/dist/src/tools/install.helpers.js +13 -4
- package/dist/src/tools/install.helpers.js.map +1 -1
- package/dist/src/tools/install.js +96 -17
- package/dist/src/tools/install.js.map +1 -1
- package/dist/src/tools/install.types.d.ts +75 -11
- package/dist/src/tools/install.types.d.ts.map +1 -1
- package/dist/src/tools/install.types.js +15 -1
- package/dist/src/tools/install.types.js.map +1 -1
- package/dist/src/tools/merge.d.ts +53 -0
- package/dist/src/tools/merge.d.ts.map +1 -0
- package/dist/src/tools/merge.js +276 -0
- package/dist/src/tools/merge.js.map +1 -0
- package/dist/src/tools/merge.test.d.ts +11 -0
- package/dist/src/tools/merge.test.d.ts.map +1 -0
- package/dist/src/tools/merge.test.js +224 -0
- package/dist/src/tools/merge.test.js.map +1 -0
- package/dist/src/tools/recommend.d.ts +1 -0
- package/dist/src/tools/recommend.d.ts.map +1 -1
- package/dist/src/tools/recommend.js +165 -38
- package/dist/src/tools/recommend.js.map +1 -1
- package/dist/src/tools/search.d.ts.map +1 -1
- package/dist/src/tools/search.js +31 -4
- package/dist/src/tools/search.js.map +1 -1
- package/dist/src/utils/validation.d.ts +6 -2
- package/dist/src/utils/validation.d.ts.map +1 -1
- package/dist/src/utils/validation.js +11 -2
- package/dist/src/utils/validation.js.map +1 -1
- package/dist/src/webhooks/webhook-endpoint.d.ts +4 -49
- package/dist/src/webhooks/webhook-endpoint.d.ts.map +1 -1
- package/dist/src/webhooks/webhook-endpoint.js +3 -125
- package/dist/src/webhooks/webhook-endpoint.js.map +1 -1
- package/dist/src/webhooks/webhook-helpers.d.ts +69 -0
- package/dist/src/webhooks/webhook-helpers.d.ts.map +1 -0
- package/dist/src/webhooks/webhook-helpers.js +146 -0
- package/dist/src/webhooks/webhook-helpers.js.map +1 -0
- package/dist/tests/e2e/conflict-resolution.e2e.test.d.ts +12 -0
- package/dist/tests/e2e/conflict-resolution.e2e.test.d.ts.map +1 -0
- package/dist/tests/e2e/conflict-resolution.e2e.test.js +343 -0
- package/dist/tests/e2e/conflict-resolution.e2e.test.js.map +1 -0
- package/dist/tests/integration/fixtures/development-skills.d.ts +22 -0
- package/dist/tests/integration/fixtures/development-skills.d.ts.map +1 -0
- package/dist/tests/integration/fixtures/development-skills.js +165 -0
- package/dist/tests/integration/fixtures/development-skills.js.map +1 -0
- package/dist/tests/integration/fixtures/devops-skills.d.ts +10 -0
- package/dist/tests/integration/fixtures/devops-skills.d.ts.map +1 -0
- package/dist/tests/integration/fixtures/devops-skills.js +70 -0
- package/dist/tests/integration/fixtures/devops-skills.js.map +1 -0
- package/dist/tests/integration/fixtures/experimental-skills.d.ts +14 -0
- package/dist/tests/integration/fixtures/experimental-skills.d.ts.map +1 -0
- package/dist/tests/integration/fixtures/experimental-skills.js +255 -0
- package/dist/tests/integration/fixtures/experimental-skills.js.map +1 -0
- package/dist/tests/integration/fixtures/skill-types.d.ts +18 -0
- package/dist/tests/integration/fixtures/skill-types.d.ts.map +1 -0
- package/dist/tests/integration/fixtures/skill-types.js +6 -0
- package/dist/tests/integration/fixtures/skill-types.js.map +1 -0
- package/dist/tests/integration/fixtures/test-skills.d.ts +10 -14
- package/dist/tests/integration/fixtures/test-skills.d.ts.map +1 -1
- package/dist/tests/integration/fixtures/test-skills.js +23 -590
- package/dist/tests/integration/fixtures/test-skills.js.map +1 -1
- package/dist/tests/integration/fixtures/testing-skills.d.ts +10 -0
- package/dist/tests/integration/fixtures/testing-skills.d.ts.map +1 -0
- package/dist/tests/integration/fixtures/testing-skills.js +70 -0
- package/dist/tests/integration/fixtures/testing-skills.js.map +1 -0
- package/dist/tests/integration/fixtures/verified-skills.d.ts +11 -0
- package/dist/tests/integration/fixtures/verified-skills.d.ts.map +1 -0
- package/dist/tests/integration/fixtures/verified-skills.js +91 -0
- package/dist/tests/integration/fixtures/verified-skills.js.map +1 -0
- package/dist/tests/integration/install-conflict.integration.test.d.ts +8 -0
- package/dist/tests/integration/install-conflict.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/install-conflict.integration.test.js +384 -0
- package/dist/tests/integration/install-conflict.integration.test.js.map +1 -0
- package/dist/tests/integration/install-trust-parsing.integration.test.d.ts +13 -0
- package/dist/tests/integration/install-trust-parsing.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/install-trust-parsing.integration.test.js +290 -0
- package/dist/tests/integration/install-trust-parsing.integration.test.js.map +1 -0
- package/dist/tests/integration/install.integration.test.js +3 -0
- package/dist/tests/integration/install.integration.test.js.map +1 -1
- 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":"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"}
|
|
@@ -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"}
|