@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.
Files changed (56) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +69 -31
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/src/index.js +4 -2
  5. package/dist/src/index.js.map +1 -1
  6. package/dist/src/tool-dispatch.d.ts.map +1 -1
  7. package/dist/src/tool-dispatch.js +3 -0
  8. package/dist/src/tool-dispatch.js.map +1 -1
  9. package/dist/src/tools/index.d.ts +2 -0
  10. package/dist/src/tools/index.d.ts.map +1 -1
  11. package/dist/src/tools/index.js +2 -0
  12. package/dist/src/tools/index.js.map +1 -1
  13. package/dist/src/tools/install.d.ts +10 -0
  14. package/dist/src/tools/install.d.ts.map +1 -1
  15. package/dist/src/tools/install.helpers.d.ts +6 -0
  16. package/dist/src/tools/install.helpers.d.ts.map +1 -1
  17. package/dist/src/tools/install.helpers.js +23 -2
  18. package/dist/src/tools/install.helpers.js.map +1 -1
  19. package/dist/src/tools/install.js +64 -370
  20. package/dist/src/tools/install.js.map +1 -1
  21. package/dist/src/tools/install.types.d.ts +3 -1
  22. package/dist/src/tools/install.types.d.ts.map +1 -1
  23. package/dist/src/tools/merge.test.d.ts +9 -0
  24. package/dist/src/tools/merge.test.d.ts.map +1 -0
  25. package/dist/src/tools/merge.test.js +161 -0
  26. package/dist/src/tools/merge.test.js.map +1 -0
  27. package/dist/src/tools/outdated.test.js +1 -1
  28. package/dist/src/tools/outdated.test.js.map +1 -1
  29. package/dist/src/tools/recommend.types.d.ts +2 -2
  30. package/dist/src/tools/skill-audit.test.js +1 -1
  31. package/dist/src/tools/skill-audit.test.js.map +1 -1
  32. package/dist/src/tools/skill-diff.d.ts +2 -2
  33. package/dist/src/tools/skill-rescan.d.ts +107 -0
  34. package/dist/src/tools/skill-rescan.d.ts.map +1 -0
  35. package/dist/src/tools/skill-rescan.js +194 -0
  36. package/dist/src/tools/skill-rescan.js.map +1 -0
  37. package/dist/src/tools/skill-rescan.test.d.ts +6 -0
  38. package/dist/src/tools/skill-rescan.test.d.ts.map +1 -0
  39. package/dist/src/tools/skill-rescan.test.js +238 -0
  40. package/dist/src/tools/skill-rescan.test.js.map +1 -0
  41. package/dist/src/tools/uninstall.d.ts +8 -58
  42. package/dist/src/tools/uninstall.d.ts.map +1 -1
  43. package/dist/src/tools/uninstall.js +29 -199
  44. package/dist/src/tools/uninstall.js.map +1 -1
  45. package/dist/tests/integration/install.integration.test.js +16 -1
  46. package/dist/tests/integration/install.integration.test.js.map +1 -1
  47. package/dist/tests/unit/install-helpers.test.js +41 -1
  48. package/dist/tests/unit/install-helpers.test.js.map +1 -1
  49. package/dist/tests/unit/skill-pack-audit.test.js +2 -1
  50. package/dist/tests/unit/skill-pack-audit.test.js.map +1 -1
  51. package/package.json +7 -4
  52. package/server.json +3 -3
  53. package/dist/vitest.config.d.ts +0 -6
  54. package/dist/vitest.config.d.ts.map +0 -1
  55. package/dist/vitest.config.js +0 -13
  56. 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 { SecurityScanner, safeWriteFile } from '@skillsmith/core';
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 { TRUST_TIER_SCANNER_OPTIONS, CLAUDE_SKILLS_DIR, } from './install.types.js';
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, handleMergeAction } from './install.conflict.js';
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-1533: Trust tier for security scan configuration (default to unknown for direct paths)
38
- let trustTier = 'unknown';
39
- try {
40
- // Parse skill ID
41
- const parsed = parseSkillId(input.skillId);
42
- // SMI-1491: Variables that will be set differently based on registry vs direct path
43
- let owner;
44
- let repo;
45
- let basePath;
46
- let skillName;
47
- let branch = 'main';
48
- if (parsed.isRegistryId) {
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
- skillMdContent = await fetchFromGitHub(owner, repo, skillMdPath, branch);
136
- }
137
- catch {
138
- // SMI-1491: Improved error message
139
- // SMI-2723: Distinguish registry data quality issues from user path errors
140
- const repoUrl = 'https://github.com/' + owner + '/' + repo;
141
- return {
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
- // Dependency persistence is best-effort
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
- catch (error) {
373
- // SMI-1793: Sanitize error messages to avoid exposing internal details
374
- let safeErrorMessage = 'Installation failed';
375
- if (error instanceof Error) {
376
- // Allow specific known error types through
377
- const knownPrefixes = [
378
- 'already installed',
379
- 'Could not find SKILL.md',
380
- 'registry data quality issue',
381
- 'Invalid SKILL.md',
382
- 'Security scan failed',
383
- 'exceeds maximum length',
384
- 'Refusing to write to symlink',
385
- 'Refusing to write to hardlinked file',
386
- 'Install path escapes skills directory',
387
- ];
388
- if (knownPrefixes.some((p) => error.message.includes(p))) {
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"}