@skillsmith/mcp-server 0.4.4 → 0.4.6
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/CHANGELOG.md +20 -0
- package/README.md +69 -31
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/index.js +4 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/tool-dispatch.d.ts.map +1 -1
- package/dist/src/tool-dispatch.js +3 -0
- package/dist/src/tool-dispatch.js.map +1 -1
- 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.d.ts +10 -0
- package/dist/src/tools/install.d.ts.map +1 -1
- package/dist/src/tools/install.helpers.d.ts +6 -0
- package/dist/src/tools/install.helpers.d.ts.map +1 -1
- package/dist/src/tools/install.helpers.js +23 -2
- package/dist/src/tools/install.helpers.js.map +1 -1
- package/dist/src/tools/install.js +64 -370
- package/dist/src/tools/install.js.map +1 -1
- package/dist/src/tools/install.types.d.ts +3 -1
- package/dist/src/tools/install.types.d.ts.map +1 -1
- package/dist/src/tools/merge.test.d.ts +9 -0
- package/dist/src/tools/merge.test.d.ts.map +1 -0
- package/dist/src/tools/merge.test.js +161 -0
- package/dist/src/tools/merge.test.js.map +1 -0
- package/dist/src/tools/outdated.test.js +1 -1
- package/dist/src/tools/outdated.test.js.map +1 -1
- package/dist/src/tools/recommend.types.d.ts +2 -2
- package/dist/src/tools/skill-audit.test.js +1 -1
- package/dist/src/tools/skill-audit.test.js.map +1 -1
- package/dist/src/tools/skill-diff.d.ts +2 -2
- package/dist/src/tools/skill-rescan.d.ts +107 -0
- package/dist/src/tools/skill-rescan.d.ts.map +1 -0
- package/dist/src/tools/skill-rescan.js +194 -0
- package/dist/src/tools/skill-rescan.js.map +1 -0
- package/dist/src/tools/skill-rescan.test.d.ts +6 -0
- package/dist/src/tools/skill-rescan.test.d.ts.map +1 -0
- package/dist/src/tools/skill-rescan.test.js +238 -0
- package/dist/src/tools/skill-rescan.test.js.map +1 -0
- package/dist/src/tools/uninstall.d.ts +8 -58
- package/dist/src/tools/uninstall.d.ts.map +1 -1
- package/dist/src/tools/uninstall.js +29 -199
- package/dist/src/tools/uninstall.js.map +1 -1
- package/dist/tests/integration/install.integration.test.js +16 -1
- package/dist/tests/integration/install.integration.test.js.map +1 -1
- package/dist/tests/unit/install-helpers.test.js +41 -1
- package/dist/tests/unit/install-helpers.test.js.map +1 -1
- package/dist/tests/unit/skill-pack-audit.test.js +2 -1
- package/dist/tests/unit/skill-pack-audit.test.js.map +1 -1
- package/package.json +7 -4
- package/server.json +3 -3
- package/dist/vitest.config.d.ts +0 -6
- package/dist/vitest.config.d.ts.map +0 -1
- package/dist/vitest.config.js +0 -13
- package/dist/vitest.config.js.map +0 -1
|
@@ -3,402 +3,96 @@
|
|
|
3
3
|
* @module @skillsmith/mcp-server/tools/install
|
|
4
4
|
* @see SMI-2741: Split to meet 500-line standard
|
|
5
5
|
* @see SMI-3137: Wave 4 — Dependency intelligence persistence
|
|
6
|
+
* @see SMI-3483: Wave 0 — Delegate to SkillInstallationService from core
|
|
6
7
|
*
|
|
7
8
|
* Skills are installed to ~/.claude/skills/ and tracked in ~/.skillsmith/manifest.json
|
|
9
|
+
*
|
|
10
|
+
* The core install logic lives in @skillsmith/core SkillInstallationService.
|
|
11
|
+
* This file is the MCP tool wrapper that:
|
|
12
|
+
* - Bridges ToolContext to the service's constructor params
|
|
13
|
+
* - Adds conflict resolution (three-way merge, backup) on top
|
|
14
|
+
* - Wires onProgress to MCP protocol notifications
|
|
8
15
|
*/
|
|
9
|
-
import {
|
|
10
|
-
import * as fs from 'fs/promises';
|
|
11
|
-
import * as path from 'path';
|
|
12
|
-
import * as os from 'os';
|
|
16
|
+
import { SkillInstallationService, } from '@skillsmith/core';
|
|
13
17
|
import { getToolContext } from '../context.js';
|
|
14
|
-
import {
|
|
15
|
-
import { loadManifest, updateManifestSafely, parseSkillId, parseRepoUrl, lookupSkillFromRegistry, fetchFromGitHub, validateSkillMd, generateOptimizedTips, hashContent, storeOriginal, } from './install.helpers.js';
|
|
18
|
+
import { loadManifest, lookupSkillFromRegistry } from './install.helpers.js';
|
|
16
19
|
// SMI-1867: Conflict resolution logic (extracted per governance review)
|
|
17
|
-
import { checkForConflicts
|
|
18
|
-
// SMI-1788/SMI-2741: Optimization layer extracted to companion file
|
|
19
|
-
import { applySkillOptimization } from './install.optimize.js';
|
|
20
|
-
// SMI-3137: Dependency intelligence persistence
|
|
21
|
-
import { extractDepIntel, persistDependencies } from './install.dep-helpers.js';
|
|
20
|
+
import { checkForConflicts } from './install.conflict.js';
|
|
22
21
|
// SMI-2741: MCP tool definition extracted to companion file
|
|
23
22
|
export { installTool } from './install.tool.js';
|
|
24
23
|
export { default } from './install.tool.js';
|
|
25
24
|
// Re-export only public API types (SMI-1718: trimmed internal exports)
|
|
26
25
|
export { installInputSchema } from './install.types.js';
|
|
26
|
+
/**
|
|
27
|
+
* Adapter that wraps ToolContext's registry lookup as a RegistryLookup.
|
|
28
|
+
* Bridges the MCP-specific ToolContext to the core service abstraction.
|
|
29
|
+
*/
|
|
30
|
+
class McpRegistryLookup {
|
|
31
|
+
context;
|
|
32
|
+
constructor(context) {
|
|
33
|
+
this.context = context;
|
|
34
|
+
}
|
|
35
|
+
async lookup(skillId) {
|
|
36
|
+
return lookupSkillFromRegistry(skillId, this.context);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
27
39
|
/**
|
|
28
40
|
* Install a skill from GitHub to the local Claude Code skills directory.
|
|
29
41
|
*
|
|
42
|
+
* Delegates core logic to SkillInstallationService from @skillsmith/core.
|
|
43
|
+
* Adds MCP-specific conflict resolution (three-way merge, backup).
|
|
44
|
+
*
|
|
30
45
|
* @param input - Installation parameters (skillId, force, skipScan)
|
|
31
46
|
* @param _context - Optional tool context (falls back to singleton)
|
|
32
47
|
* @returns Installation result with success status, security report, and dep intel
|
|
33
48
|
*/
|
|
34
49
|
export async function installSkill(input, _context) {
|
|
35
|
-
// SMI-1491: Get context for registry lookup (use provided or fallback to singleton)
|
|
36
50
|
const context = _context ?? getToolContext();
|
|
37
|
-
// SMI-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
// REGISTRY LOOKUP PATH (SMI-1491)
|
|
50
|
-
// 2-part IDs like "author/skill-name" need registry lookup to get real repo_url
|
|
51
|
-
const registrySkill = await lookupSkillFromRegistry(input.skillId, context);
|
|
52
|
-
if (!registrySkill) {
|
|
53
|
-
// Skill not found or has no repo_url (seed data)
|
|
54
|
-
return {
|
|
55
|
-
success: false,
|
|
56
|
-
skillId: input.skillId,
|
|
57
|
-
installPath: '',
|
|
58
|
-
error: 'Skill "' +
|
|
59
|
-
input.skillId +
|
|
60
|
-
'" is indexed for discovery only. ' +
|
|
61
|
-
'No installation source available (repo_url is missing). ' +
|
|
62
|
-
'This may be placeholder/seed data or a metadata-only entry.',
|
|
63
|
-
tips: [
|
|
64
|
-
'Use a full GitHub URL instead: install_skill { skillId: "https://github.com/owner/repo" }',
|
|
65
|
-
'Search for installable skills using the search tool',
|
|
66
|
-
'Many indexed skills are metadata-only and cannot be installed directly',
|
|
67
|
-
],
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
// SMI-2383: Block installation of quarantined skills
|
|
71
|
-
if (registrySkill.quarantined) {
|
|
72
|
-
return {
|
|
73
|
-
success: false,
|
|
74
|
-
skillId: input.skillId,
|
|
75
|
-
installPath: '',
|
|
76
|
-
error: 'Skill "' +
|
|
77
|
-
input.skillId +
|
|
78
|
-
'" has been quarantined due to security concerns. ' +
|
|
79
|
-
'Installation is blocked to protect your environment.',
|
|
80
|
-
tips: [
|
|
81
|
-
'Visit https://skillsmith.app/docs/quarantine for details on quarantine policies',
|
|
82
|
-
'If you believe this is a false positive, contact support via https://skillsmith.app/contact?topic=security',
|
|
83
|
-
'You can install from a direct GitHub URL to bypass registry quarantine (at your own risk)',
|
|
84
|
-
],
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
// Parse the repo_url to get GitHub components
|
|
88
|
-
const repoInfo = parseRepoUrl(registrySkill.repoUrl);
|
|
89
|
-
owner = repoInfo.owner;
|
|
90
|
-
repo = repoInfo.repo;
|
|
91
|
-
basePath = repoInfo.path ? repoInfo.path + '/' : '';
|
|
92
|
-
branch = repoInfo.branch;
|
|
93
|
-
skillName = registrySkill.name;
|
|
94
|
-
// SMI-1533: Use trust tier from registry for security scan configuration
|
|
95
|
-
trustTier = registrySkill.trustTier;
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
// DIRECT PATH (existing behavior)
|
|
99
|
-
// Full GitHub URLs or owner/repo/path format
|
|
100
|
-
owner = parsed.owner;
|
|
101
|
-
repo = parsed.repo;
|
|
102
|
-
basePath = parsed.path ? parsed.path + '/' : '';
|
|
103
|
-
skillName = parsed.path ? path.basename(parsed.path) : repo;
|
|
104
|
-
}
|
|
105
|
-
// SMI-2723: Track whether this install originated from a registry lookup so that
|
|
106
|
-
// SKILL.md fetch failures can surface registry data quality issues instead of
|
|
107
|
-
// misleading "path format" error messages.
|
|
108
|
-
const fromRegistry = parsed.isRegistryId;
|
|
109
|
-
const installPath = path.join(CLAUDE_SKILLS_DIR, skillName);
|
|
110
|
-
// Check if already installed
|
|
111
|
-
const manifest = await loadManifest();
|
|
112
|
-
if (manifest.installedSkills[skillName] && !input.force) {
|
|
113
|
-
return {
|
|
114
|
-
success: false,
|
|
115
|
-
skillId: input.skillId,
|
|
116
|
-
installPath,
|
|
117
|
-
error: 'Skill "' + skillName + '" is already installed. Use force=true to reinstall.',
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
// SMI-1867: Check for local modifications on reinstall
|
|
121
|
-
// SMI-1895: Track backup path to include in result
|
|
122
|
-
let backupPath;
|
|
123
|
-
if (manifest.installedSkills[skillName] && input.force) {
|
|
124
|
-
const conflictCheck = await checkForConflicts(skillName, installPath, manifest, input.conflictAction, input.skillId);
|
|
125
|
-
if (!conflictCheck.shouldProceed) {
|
|
126
|
-
return conflictCheck.earlyReturn;
|
|
127
|
-
}
|
|
128
|
-
backupPath = conflictCheck.backupPath;
|
|
129
|
-
}
|
|
130
|
-
// Determine files to fetch
|
|
131
|
-
const skillMdPath = basePath + 'SKILL.md';
|
|
132
|
-
// Fetch SKILL.md (required)
|
|
133
|
-
let skillMdContent;
|
|
51
|
+
// SMI-3483: Create core service instance with MCP context wiring
|
|
52
|
+
const service = new SkillInstallationService({
|
|
53
|
+
db: context.db,
|
|
54
|
+
skillRepo: context.skillRepository,
|
|
55
|
+
skillDependencyRepo: context.skillDependencyRepository,
|
|
56
|
+
registryLookup: new McpRegistryLookup(context),
|
|
57
|
+
coInstallRecorder: context.coInstallRepository,
|
|
58
|
+
sessionInstalledSkillIds: context.sessionInstalledSkillIds,
|
|
59
|
+
});
|
|
60
|
+
// SMI-1867: Pre-flight conflict check for reinstall with force
|
|
61
|
+
// This is MCP-specific (three-way merge UI, backup, storeOriginal)
|
|
62
|
+
if (input.force && input.conflictAction) {
|
|
134
63
|
try {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
success: false,
|
|
143
|
-
skillId: input.skillId,
|
|
144
|
-
installPath,
|
|
145
|
-
error: fromRegistry
|
|
146
|
-
? 'This skill is indexed in the Skillsmith registry but its installation source ' +
|
|
147
|
-
'appears broken (SKILL.md not found at ' +
|
|
148
|
-
(basePath || 'repository root') +
|
|
149
|
-
'). ' +
|
|
150
|
-
'This is a registry data quality issue — the path registered does not match the ' +
|
|
151
|
-
'actual repository structure. ' +
|
|
152
|
-
'Please report it at https://skillsmith.app/contact?topic=registry-quality. ' +
|
|
153
|
-
'Repository: ' +
|
|
154
|
-
repoUrl
|
|
155
|
-
: 'Could not find SKILL.md at ' +
|
|
156
|
-
(basePath || 'repository root') +
|
|
157
|
-
'. ' +
|
|
158
|
-
'Skills must have a SKILL.md file with YAML frontmatter (name, description) to be installable. ' +
|
|
159
|
-
'Repository: ' +
|
|
160
|
-
repoUrl,
|
|
161
|
-
tips: fromRegistry
|
|
162
|
-
? [
|
|
163
|
-
'This is a registry data quality issue, not a path format error',
|
|
164
|
-
'The other skills in this repository may still be installable',
|
|
165
|
-
'Report the broken entry: https://skillsmith.app/contact?topic=registry-quality',
|
|
166
|
-
'Workaround: clone the repo and manually copy the skill directory to ~/.claude/skills/',
|
|
167
|
-
]
|
|
168
|
-
: [
|
|
169
|
-
'This skill may be browse-only (no SKILL.md at expected location)',
|
|
170
|
-
'Verify the repository exists: ' + repoUrl,
|
|
171
|
-
'You can manually install by: 1) Clone the repo, 2) Create a SKILL.md, 3) Copy to ~/.claude/skills/',
|
|
172
|
-
'Check if the skill has a SKILL.md in a subdirectory and use the full path',
|
|
173
|
-
],
|
|
174
|
-
};
|
|
175
|
-
}
|
|
176
|
-
// SMI-1867: Handle merge action for conflict resolution
|
|
177
|
-
if (input.conflictAction === 'merge') {
|
|
178
|
-
const mergeOp = await handleMergeAction(skillName, installPath, skillMdContent, manifest, owner, repo, input.skillId);
|
|
179
|
-
if (!mergeOp.shouldProceed) {
|
|
180
|
-
return mergeOp.earlyReturn;
|
|
181
|
-
}
|
|
182
|
-
if (mergeOp.mergedContent) {
|
|
183
|
-
skillMdContent = mergeOp.mergedContent;
|
|
184
|
-
}
|
|
185
|
-
// SMI-1895: Capture backup path from merge operation
|
|
186
|
-
if (mergeOp.backupPath) {
|
|
187
|
-
backupPath = mergeOp.backupPath;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
// Validate SKILL.md
|
|
191
|
-
const validation = validateSkillMd(skillMdContent);
|
|
192
|
-
if (!validation.valid) {
|
|
193
|
-
return {
|
|
194
|
-
success: false,
|
|
195
|
-
skillId: input.skillId,
|
|
196
|
-
installPath,
|
|
197
|
-
error: 'Invalid SKILL.md: ' + validation.errors.join(', '),
|
|
198
|
-
tips: [
|
|
199
|
-
'SKILL.md must have YAML frontmatter with name and description fields',
|
|
200
|
-
'Content must be at least 100 characters',
|
|
201
|
-
'See template: https://github.com/wrsmith108/skillsmith/blob/main/.claude/templates/skill-template.md',
|
|
202
|
-
],
|
|
203
|
-
};
|
|
204
|
-
}
|
|
205
|
-
// SMI-1533: Security scan with trust-tier sensitive configuration
|
|
206
|
-
let securityReport;
|
|
207
|
-
if (!input.skipScan) {
|
|
208
|
-
// Get scanner options based on trust tier
|
|
209
|
-
const scannerOptions = TRUST_TIER_SCANNER_OPTIONS[trustTier];
|
|
210
|
-
const scanner = new SecurityScanner(scannerOptions);
|
|
211
|
-
securityReport = scanner.scan(input.skillId, skillMdContent);
|
|
212
|
-
if (!securityReport.passed) {
|
|
213
|
-
const criticalFindings = securityReport.findings.filter((f) => f.severity === 'critical' || f.severity === 'high');
|
|
214
|
-
// SMI-1533: Include trust tier context in error message
|
|
215
|
-
const tierContext = trustTier === 'unknown'
|
|
216
|
-
? ' (Direct GitHub install - strictest scanning applied)'
|
|
217
|
-
: trustTier === 'experimental'
|
|
218
|
-
? ' (Experimental skill - aggressive scanning applied)'
|
|
219
|
-
: '';
|
|
220
|
-
return {
|
|
221
|
-
success: false,
|
|
222
|
-
skillId: input.skillId,
|
|
223
|
-
installPath,
|
|
224
|
-
securityReport,
|
|
225
|
-
trustTier,
|
|
226
|
-
error: 'Security scan failed with ' +
|
|
227
|
-
criticalFindings.length +
|
|
228
|
-
' critical/high findings' +
|
|
229
|
-
tierContext +
|
|
230
|
-
'. Use skipScan=true to override (not recommended).',
|
|
231
|
-
tips: [
|
|
232
|
-
'Trust tier: ' + trustTier + ' (threshold: ' + scannerOptions.riskThreshold + ')',
|
|
233
|
-
'Risk score: ' + securityReport.riskScore,
|
|
234
|
-
'Consider reviewing the skill content for the flagged issues',
|
|
235
|
-
trustTier === 'unknown'
|
|
236
|
-
? 'Skills from the registry have more lenient scanning thresholds'
|
|
237
|
-
: undefined,
|
|
238
|
-
].filter(Boolean),
|
|
239
|
-
};
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
// SMI-1788: Apply Skillsmith Optimization Layer (unless skipped)
|
|
243
|
-
const optimizeResult = input.skipOptimize
|
|
244
|
-
? {
|
|
245
|
-
finalSkillContent: skillMdContent,
|
|
246
|
-
subSkillFiles: [],
|
|
247
|
-
subagentContent: undefined,
|
|
248
|
-
claudeMdSnippet: undefined,
|
|
249
|
-
optimizationInfo: { optimized: false },
|
|
250
|
-
}
|
|
251
|
-
: await applySkillOptimization(input.skillId, skillName, skillMdContent, context.db);
|
|
252
|
-
const { finalSkillContent, subSkillFiles, subagentContent, claudeMdSnippet, optimizationInfo } = optimizeResult;
|
|
253
|
-
// SMI-1867: Compute hash before file operations (needed in manifest update)
|
|
254
|
-
const contentHash = hashContent(finalSkillContent);
|
|
255
|
-
// SMI-1792, SMI-1797: Atomic file installation with transaction pattern
|
|
256
|
-
// SMI-1804: Parallelize file writes for better performance
|
|
257
|
-
const writtenFiles = [];
|
|
258
|
-
try {
|
|
259
|
-
// Create installation directory
|
|
260
|
-
await fs.mkdir(installPath, { recursive: true });
|
|
261
|
-
// SMI-2287: Validate directory is not a symlink escape
|
|
262
|
-
const realInstallPath = await fs.realpath(installPath);
|
|
263
|
-
const expectedPrefix = path.resolve(CLAUDE_SKILLS_DIR);
|
|
264
|
-
if (!realInstallPath.startsWith(expectedPrefix + path.sep) &&
|
|
265
|
-
realInstallPath !== expectedPrefix) {
|
|
266
|
-
throw new Error(`Install path escapes skills directory: ${installPath}`);
|
|
267
|
-
}
|
|
268
|
-
// Write SKILL.md (optimized or original)
|
|
269
|
-
// SMI-2274: Use safeWriteFile to prevent symlink attacks
|
|
270
|
-
const mainSkillPath = path.join(installPath, 'SKILL.md');
|
|
271
|
-
await safeWriteFile(mainSkillPath, finalSkillContent);
|
|
272
|
-
writtenFiles.push(mainSkillPath);
|
|
273
|
-
// SMI-1867: Store original content for future conflict detection
|
|
274
|
-
await storeOriginal(skillName, finalSkillContent, {
|
|
275
|
-
version: '1.0.0',
|
|
276
|
-
source: 'github:' + owner + '/' + repo,
|
|
277
|
-
installedAt: new Date().toISOString(),
|
|
278
|
-
});
|
|
279
|
-
// Write sub-skills in parallel (SMI-1804: Performance optimization)
|
|
280
|
-
if (subSkillFiles.length > 0) {
|
|
281
|
-
await Promise.all(subSkillFiles.map(async (subSkill) => {
|
|
282
|
-
const subPath = path.join(installPath, subSkill.filename);
|
|
283
|
-
await safeWriteFile(subPath, subSkill.content);
|
|
284
|
-
writtenFiles.push(subPath);
|
|
285
|
-
}));
|
|
286
|
-
}
|
|
287
|
-
// Write companion subagent if generated
|
|
288
|
-
if (subagentContent) {
|
|
289
|
-
const agentsDir = path.join(os.homedir(), '.claude', 'agents');
|
|
290
|
-
await fs.mkdir(agentsDir, { recursive: true });
|
|
291
|
-
const subagentPath = path.join(agentsDir, `${skillName}-specialist.md`);
|
|
292
|
-
await safeWriteFile(subagentPath, subagentContent);
|
|
293
|
-
writtenFiles.push(subagentPath);
|
|
294
|
-
optimizationInfo.subagentPath = subagentPath;
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
catch (writeError) {
|
|
298
|
-
// SMI-1792: Rollback on failure - remove any files we wrote
|
|
299
|
-
for (const filePath of writtenFiles) {
|
|
300
|
-
await fs.unlink(filePath).catch(() => { });
|
|
301
|
-
}
|
|
302
|
-
// Try to remove the directory if we created it and it's now empty
|
|
303
|
-
await fs.rmdir(installPath).catch(() => { });
|
|
304
|
-
throw writeError;
|
|
305
|
-
}
|
|
306
|
-
// Try to fetch optional files
|
|
307
|
-
// SMI-1533: Use same trust-tier scanner for optional files
|
|
308
|
-
const optionalFileScanner = input.skipScan
|
|
309
|
-
? null
|
|
310
|
-
: new SecurityScanner(TRUST_TIER_SCANNER_OPTIONS[trustTier]);
|
|
311
|
-
const optionalFiles = ['README.md', 'examples.md', 'config.json'];
|
|
312
|
-
for (const file of optionalFiles) {
|
|
313
|
-
try {
|
|
314
|
-
const content = await fetchFromGitHub(owner, repo, basePath + file, branch);
|
|
315
|
-
// Scan optional files too
|
|
316
|
-
if (optionalFileScanner) {
|
|
317
|
-
const fileScan = optionalFileScanner.scan(input.skillId + '/' + file, content);
|
|
318
|
-
if (!fileScan.passed) {
|
|
319
|
-
console.warn('Skipping ' + file + ' due to security findings');
|
|
320
|
-
continue;
|
|
321
|
-
}
|
|
64
|
+
const manifest = await loadManifest();
|
|
65
|
+
const skillName = extractSkillName(input.skillId);
|
|
66
|
+
if (manifest.installedSkills[skillName]) {
|
|
67
|
+
const installPath = manifest.installedSkills[skillName].installPath;
|
|
68
|
+
const conflictCheck = await checkForConflicts(skillName, installPath, manifest, input.conflictAction, input.skillId);
|
|
69
|
+
if (!conflictCheck.shouldProceed) {
|
|
70
|
+
return conflictCheck.earlyReturn;
|
|
322
71
|
}
|
|
323
|
-
await safeWriteFile(path.join(installPath, file), content);
|
|
324
|
-
}
|
|
325
|
-
catch {
|
|
326
|
-
// Optional files are fine to skip
|
|
327
72
|
}
|
|
328
73
|
}
|
|
329
|
-
// Update manifest with locking to prevent race conditions
|
|
330
|
-
await updateManifestSafely((currentManifest) => ({
|
|
331
|
-
...currentManifest,
|
|
332
|
-
installedSkills: {
|
|
333
|
-
...currentManifest.installedSkills,
|
|
334
|
-
[skillName]: {
|
|
335
|
-
id: input.skillId,
|
|
336
|
-
name: skillName,
|
|
337
|
-
version: '1.0.0',
|
|
338
|
-
source: 'github:' + owner + '/' + repo,
|
|
339
|
-
installPath,
|
|
340
|
-
installedAt: new Date().toISOString(),
|
|
341
|
-
lastUpdated: new Date().toISOString(),
|
|
342
|
-
originalContentHash: contentHash, // SMI-1867: Track original hash
|
|
343
|
-
},
|
|
344
|
-
},
|
|
345
|
-
}));
|
|
346
|
-
// SMI-2761: Record session co-install pairs for "also installed" recommendations
|
|
347
|
-
context.coInstallRepository.recordSessionCoInstalls([
|
|
348
|
-
...context.sessionInstalledSkillIds,
|
|
349
|
-
input.skillId,
|
|
350
|
-
]);
|
|
351
|
-
context.sessionInstalledSkillIds.push(input.skillId);
|
|
352
|
-
// SMI-3137: Extract and persist dependency intelligence
|
|
353
|
-
const depIntel = extractDepIntel(skillMdContent, null);
|
|
354
|
-
try {
|
|
355
|
-
persistDependencies(context.skillDependencyRepository, input.skillId, skillMdContent, depIntel.dep_declared);
|
|
356
|
-
}
|
|
357
74
|
catch {
|
|
358
|
-
//
|
|
75
|
+
// Conflict check failed; proceed with normal install
|
|
359
76
|
}
|
|
360
|
-
return {
|
|
361
|
-
success: true,
|
|
362
|
-
skillId: input.skillId,
|
|
363
|
-
installPath,
|
|
364
|
-
securityReport,
|
|
365
|
-
trustTier, // SMI-1533: Include trust tier in result
|
|
366
|
-
optimization: optimizationInfo,
|
|
367
|
-
backupPath, // SMI-1895: Include backup path if created during conflict resolution
|
|
368
|
-
depIntel, // SMI-3137: Dependency intelligence
|
|
369
|
-
tips: generateOptimizedTips(skillName, optimizationInfo, claudeMdSnippet),
|
|
370
|
-
};
|
|
371
77
|
}
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
safeErrorMessage = error.message;
|
|
390
|
-
}
|
|
391
|
-
else {
|
|
392
|
-
console.error('[install] Error during installation:', error);
|
|
393
|
-
safeErrorMessage = 'Installation failed due to an internal error';
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
return {
|
|
397
|
-
success: false,
|
|
398
|
-
skillId: input.skillId,
|
|
399
|
-
installPath: '',
|
|
400
|
-
error: safeErrorMessage,
|
|
401
|
-
};
|
|
78
|
+
// Delegate to core service
|
|
79
|
+
const result = await service.install(input.skillId, {
|
|
80
|
+
force: input.force,
|
|
81
|
+
skipScan: input.skipScan,
|
|
82
|
+
skipOptimize: input.skipOptimize,
|
|
83
|
+
conflictAction: input.conflictAction,
|
|
84
|
+
});
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Best-effort skill name extraction for conflict pre-check.
|
|
89
|
+
* Does not need to be perfect -- just needs to match manifest keys.
|
|
90
|
+
*/
|
|
91
|
+
function extractSkillName(skillId) {
|
|
92
|
+
if (skillId.includes('/')) {
|
|
93
|
+
const parts = skillId.split('/');
|
|
94
|
+
return parts[parts.length - 1];
|
|
402
95
|
}
|
|
96
|
+
return skillId;
|
|
403
97
|
}
|
|
404
98
|
//# sourceMappingURL=install.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/tools/install.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/tools/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -83,8 +83,8 @@ export declare const installInputSchema: z.ZodObject<{
|
|
|
83
83
|
/** SMI-1864: Action to take when a conflict is detected during update */
|
|
84
84
|
conflictAction: z.ZodOptional<z.ZodEnum<["overwrite", "merge", "cancel"]>>;
|
|
85
85
|
}, "strip", z.ZodTypeAny, {
|
|
86
|
-
force: boolean;
|
|
87
86
|
skillId: string;
|
|
87
|
+
force: boolean;
|
|
88
88
|
skipScan: boolean;
|
|
89
89
|
skipOptimize: boolean;
|
|
90
90
|
conflictAction?: "overwrite" | "merge" | "cancel" | undefined;
|
|
@@ -182,5 +182,7 @@ export interface RegistrySkillInfo {
|
|
|
182
182
|
name: string;
|
|
183
183
|
trustTier: TrustTier;
|
|
184
184
|
quarantined?: boolean;
|
|
185
|
+
/** SHA-256 hash of SKILL.md at index time for tamper detection */
|
|
186
|
+
contentHash?: string;
|
|
185
187
|
}
|
|
186
188
|
//# sourceMappingURL=install.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.types.d.ts","sourceRoot":"","sources":["../../../src/tools/install.types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"install.types.d.ts","sourceRoot":"","sources":["../../../src/tools/install.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SMI-3416: Three-Way Merge Algorithm Tests
|
|
3
|
+
*
|
|
4
|
+
* Tests for LCS-based diff3 merge in merge.ts:
|
|
5
|
+
* - computeDiff: line-level diff between two texts
|
|
6
|
+
* - threeWayMerge: three-way merge with conflict detection
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=merge.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.test.d.ts","sourceRoot":"","sources":["../../../src/tools/merge.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|