@skillsmith/mcp-server 0.3.3 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -3
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/__tests__/context.test.d.ts +10 -0
- package/dist/src/__tests__/context.test.d.ts.map +1 -0
- package/dist/src/__tests__/context.test.js +345 -0
- package/dist/src/__tests__/context.test.js.map +1 -0
- package/dist/src/__tests__/get-skill.test.d.ts +1 -0
- package/dist/src/__tests__/get-skill.test.d.ts.map +1 -1
- package/dist/src/__tests__/get-skill.test.js +84 -0
- package/dist/src/__tests__/get-skill.test.js.map +1 -1
- package/dist/src/__tests__/middleware/license.test.js +180 -78
- package/dist/src/__tests__/middleware/license.test.js.map +1 -1
- package/dist/src/__tests__/search.test.js +2 -1
- package/dist/src/__tests__/search.test.js.map +1 -1
- package/dist/src/__tests__/utils/validation.test.d.ts +7 -0
- package/dist/src/__tests__/utils/validation.test.d.ts.map +1 -0
- package/dist/src/__tests__/utils/validation.test.js +82 -0
- package/dist/src/__tests__/utils/validation.test.js.map +1 -0
- package/dist/src/context.d.ts +16 -0
- package/dist/src/context.d.ts.map +1 -1
- package/dist/src/context.js +57 -9
- package/dist/src/context.js.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/llm/failover.d.ts +200 -0
- package/dist/src/llm/failover.d.ts.map +1 -0
- package/dist/src/llm/failover.js +329 -0
- package/dist/src/llm/failover.js.map +1 -0
- package/dist/src/middleware/license.d.ts +5 -0
- package/dist/src/middleware/license.d.ts.map +1 -1
- package/dist/src/middleware/license.js +2 -1
- package/dist/src/middleware/license.js.map +1 -1
- package/dist/src/tools/compare.d.ts +3 -102
- package/dist/src/tools/compare.d.ts.map +1 -1
- package/dist/src/tools/compare.helpers.d.ts +36 -0
- package/dist/src/tools/compare.helpers.d.ts.map +1 -0
- package/dist/src/tools/compare.helpers.js +252 -0
- package/dist/src/tools/compare.helpers.js.map +1 -0
- package/dist/src/tools/compare.js +6 -288
- package/dist/src/tools/compare.js.map +1 -1
- package/dist/src/tools/compare.types.d.ts +133 -0
- package/dist/src/tools/compare.types.d.ts.map +1 -0
- package/dist/src/tools/compare.types.js +45 -0
- package/dist/src/tools/compare.types.js.map +1 -0
- package/dist/src/tools/get-skill.d.ts.map +1 -1
- package/dist/src/tools/get-skill.js +35 -2
- package/dist/src/tools/get-skill.js.map +1 -1
- package/dist/src/tools/install.d.ts +6 -60
- package/dist/src/tools/install.d.ts.map +1 -1
- package/dist/src/tools/install.helpers.d.ts +82 -0
- package/dist/src/tools/install.helpers.d.ts.map +1 -0
- package/dist/src/tools/install.helpers.js +324 -0
- package/dist/src/tools/install.helpers.js.map +1 -0
- package/dist/src/tools/install.js +117 -252
- package/dist/src/tools/install.js.map +1 -1
- package/dist/src/tools/install.types.d.ts +114 -0
- package/dist/src/tools/install.types.d.ts.map +1 -0
- package/dist/src/tools/install.types.js +91 -0
- package/dist/src/tools/install.types.js.map +1 -0
- package/dist/src/tools/recommend.d.ts +2 -148
- package/dist/src/tools/recommend.d.ts.map +1 -1
- package/dist/src/tools/recommend.helpers.d.ts +42 -0
- package/dist/src/tools/recommend.helpers.d.ts.map +1 -0
- package/dist/src/tools/recommend.helpers.js +155 -0
- package/dist/src/tools/recommend.helpers.js.map +1 -0
- package/dist/src/tools/recommend.js +75 -140
- package/dist/src/tools/recommend.js.map +1 -1
- package/dist/src/tools/recommend.types.d.ts +164 -0
- package/dist/src/tools/recommend.types.d.ts.map +1 -0
- package/dist/src/tools/recommend.types.js +87 -0
- package/dist/src/tools/recommend.types.js.map +1 -0
- package/dist/src/tools/search.d.ts +18 -4
- package/dist/src/tools/search.d.ts.map +1 -1
- package/dist/src/tools/search.js +60 -12
- package/dist/src/tools/search.js.map +1 -1
- package/dist/src/tools/validate.d.ts +3 -70
- package/dist/src/tools/validate.d.ts.map +1 -1
- package/dist/src/tools/validate.helpers.d.ts +22 -0
- package/dist/src/tools/validate.helpers.d.ts.map +1 -0
- package/dist/src/tools/validate.helpers.js +276 -0
- package/dist/src/tools/validate.helpers.js.map +1 -0
- package/dist/src/tools/validate.js +4 -337
- package/dist/src/tools/validate.js.map +1 -1
- package/dist/src/tools/validate.types.d.ts +96 -0
- package/dist/src/tools/validate.types.d.ts.map +1 -0
- package/dist/src/tools/validate.types.js +71 -0
- package/dist/src/tools/validate.types.js.map +1 -0
- package/dist/src/webhooks/index.d.ts +1 -0
- package/dist/src/webhooks/index.d.ts.map +1 -1
- package/dist/src/webhooks/index.js +2 -0
- package/dist/src/webhooks/index.js.map +1 -1
- package/dist/src/webhooks/stripe-webhook-endpoint.d.ts +68 -0
- package/dist/src/webhooks/stripe-webhook-endpoint.d.ts.map +1 -0
- package/dist/src/webhooks/stripe-webhook-endpoint.js +213 -0
- package/dist/src/webhooks/stripe-webhook-endpoint.js.map +1 -0
- package/dist/tests/integration/install.integration.test.js +148 -1
- package/dist/tests/integration/install.integration.test.js.map +1 -1
- package/dist/tests/integration/recommend.integration.test.js +2 -1
- package/dist/tests/integration/recommend.integration.test.js.map +1 -1
- package/dist/tests/llm/failover.test.d.ts +13 -0
- package/dist/tests/llm/failover.test.d.ts.map +1 -0
- package/dist/tests/llm/failover.test.js +250 -0
- package/dist/tests/llm/failover.test.js.map +1 -0
- package/dist/tests/recommend.test.js +133 -1
- package/dist/tests/recommend.test.js.map +1 -1
- package/dist/tests/tools.test.d.ts +1 -0
- package/dist/tests/tools.test.d.ts.map +1 -1
- package/dist/tests/tools.test.js +59 -1
- package/dist/tests/tools.test.js.map +1 -1
- package/dist/tests/unit/compare-helpers.test.d.ts +8 -0
- package/dist/tests/unit/compare-helpers.test.d.ts.map +1 -0
- package/dist/tests/unit/compare-helpers.test.js +224 -0
- package/dist/tests/unit/compare-helpers.test.js.map +1 -0
- package/dist/tests/unit/install-helpers.test.d.ts +8 -0
- package/dist/tests/unit/install-helpers.test.d.ts.map +1 -0
- package/dist/tests/unit/install-helpers.test.js +460 -0
- package/dist/tests/unit/install-helpers.test.js.map +1 -0
- package/dist/tests/unit/recommend-helpers.test.d.ts +8 -0
- package/dist/tests/unit/recommend-helpers.test.d.ts.map +1 -0
- package/dist/tests/unit/recommend-helpers.test.js +117 -0
- package/dist/tests/unit/recommend-helpers.test.js.map +1 -0
- package/dist/tests/unit/validate-helpers.test.d.ts +8 -0
- package/dist/tests/unit/validate-helpers.test.d.ts.map +1 -0
- package/dist/tests/unit/validate-helpers.test.js +243 -0
- package/dist/tests/unit/validate-helpers.test.js.map +1 -0
- package/package.json +1 -1
- package/src/assets/docs/USER_GUIDE.md +0 -220
- package/src/assets/skills/skillsmith/docs/QUOTAS.md +0 -182
- package/src/assets/skills/skillsmith/docs/SECURITY.md +0 -174
- package/src/assets/skills/skillsmith/docs/TRUST_TIERS.md +0 -142
|
@@ -11,225 +11,18 @@
|
|
|
11
11
|
* - Optional file fetching (README.md, examples.md, config.json)
|
|
12
12
|
*
|
|
13
13
|
* Skills are installed to ~/.claude/skills/ and tracked in ~/.skillsmith/manifest.json
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* // Install from owner/repo format
|
|
17
|
-
* const result = await installSkill({ skillId: 'anthropic/commit' });
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* // Install from GitHub URL
|
|
21
|
-
* const result = await installSkill({
|
|
22
|
-
* skillId: 'https://github.com/user/repo/tree/main/skills/my-skill'
|
|
23
|
-
* });
|
|
24
|
-
*
|
|
25
|
-
* @example
|
|
26
|
-
* // Force reinstall with security scan skip
|
|
27
|
-
* const result = await installSkill({
|
|
28
|
-
* skillId: 'community/helper',
|
|
29
|
-
* force: true,
|
|
30
|
-
* skipScan: true // Not recommended
|
|
31
|
-
* });
|
|
32
14
|
*/
|
|
33
|
-
import {
|
|
34
|
-
import { SecurityScanner } from '@skillsmith/core';
|
|
15
|
+
import { SecurityScanner, TransformationService } from '@skillsmith/core';
|
|
35
16
|
import * as fs from 'fs/promises';
|
|
36
17
|
import * as path from 'path';
|
|
37
18
|
import * as os from 'os';
|
|
38
19
|
import { getToolContext } from '../context.js';
|
|
39
|
-
//
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
// Paths
|
|
46
|
-
const CLAUDE_SKILLS_DIR = path.join(os.homedir(), '.claude', 'skills');
|
|
47
|
-
const SKILLSMITH_DIR = path.join(os.homedir(), '.skillsmith');
|
|
48
|
-
const MANIFEST_PATH = path.join(SKILLSMITH_DIR, 'manifest.json');
|
|
49
|
-
/**
|
|
50
|
-
* Load or create manifest
|
|
51
|
-
*/
|
|
52
|
-
async function loadManifest() {
|
|
53
|
-
try {
|
|
54
|
-
const content = await fs.readFile(MANIFEST_PATH, 'utf-8');
|
|
55
|
-
return JSON.parse(content);
|
|
56
|
-
}
|
|
57
|
-
catch {
|
|
58
|
-
return {
|
|
59
|
-
version: '1.0.0',
|
|
60
|
-
installedSkills: {},
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* Save manifest
|
|
66
|
-
*/
|
|
67
|
-
async function saveManifest(manifest) {
|
|
68
|
-
await fs.mkdir(path.dirname(MANIFEST_PATH), { recursive: true });
|
|
69
|
-
await fs.writeFile(MANIFEST_PATH, JSON.stringify(manifest, null, 2));
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Parse skill ID or URL to get components
|
|
73
|
-
* SMI-1491: Added isRegistryId flag to detect registry skill IDs vs direct GitHub URLs
|
|
74
|
-
*/
|
|
75
|
-
function parseSkillId(input) {
|
|
76
|
-
// Handle full GitHub URLs - not registry IDs
|
|
77
|
-
if (input.startsWith('https://github.com/')) {
|
|
78
|
-
const url = new URL(input);
|
|
79
|
-
const parts = url.pathname.split('/').filter(Boolean);
|
|
80
|
-
return {
|
|
81
|
-
owner: parts[0],
|
|
82
|
-
repo: parts[1],
|
|
83
|
-
path: parts.slice(2).join('/') || '',
|
|
84
|
-
isRegistryId: false,
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
// Handle slash-separated IDs
|
|
88
|
-
if (input.includes('/')) {
|
|
89
|
-
const parts = input.split('/');
|
|
90
|
-
// 2-part format: Could be registry ID (author/skill-name) - needs lookup
|
|
91
|
-
if (parts.length === 2) {
|
|
92
|
-
return {
|
|
93
|
-
owner: parts[0],
|
|
94
|
-
repo: parts[1],
|
|
95
|
-
path: '',
|
|
96
|
-
isRegistryId: true, // Mark as potential registry ID for lookup
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
// 3+ parts: owner/repo/path format (direct GitHub reference)
|
|
100
|
-
return {
|
|
101
|
-
owner: parts[0],
|
|
102
|
-
repo: parts[1],
|
|
103
|
-
path: parts.slice(2).join('/'),
|
|
104
|
-
isRegistryId: false,
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
// Handle skill ID from registry
|
|
108
|
-
throw new Error('Invalid skill ID format: ' + input + '. Use owner/repo or GitHub URL.');
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Parse repo_url from registry to extract GitHub components
|
|
112
|
-
* SMI-1491: Handles various GitHub URL formats stored in registry
|
|
113
|
-
*
|
|
114
|
-
* @example
|
|
115
|
-
* // Repo root
|
|
116
|
-
* parseRepoUrl('https://github.com/owner/repo')
|
|
117
|
-
* // => { owner: 'owner', repo: 'repo', path: '', branch: 'main' }
|
|
118
|
-
*
|
|
119
|
-
* @example
|
|
120
|
-
* // Skill in subdirectory
|
|
121
|
-
* parseRepoUrl('https://github.com/owner/repo/tree/main/skills/commit')
|
|
122
|
-
* // => { owner: 'owner', repo: 'repo', path: 'skills/commit', branch: 'main' }
|
|
123
|
-
*/
|
|
124
|
-
function parseRepoUrl(repoUrl) {
|
|
125
|
-
const url = new URL(repoUrl);
|
|
126
|
-
const parts = url.pathname.split('/').filter(Boolean);
|
|
127
|
-
const owner = parts[0];
|
|
128
|
-
const repo = parts[1];
|
|
129
|
-
// /owner/repo (skill at repo root)
|
|
130
|
-
if (parts.length === 2) {
|
|
131
|
-
return { owner, repo, path: '', branch: 'main' };
|
|
132
|
-
}
|
|
133
|
-
// /owner/repo/tree/branch/path... or /owner/repo/blob/branch/path...
|
|
134
|
-
if (parts[2] === 'tree' || parts[2] === 'blob') {
|
|
135
|
-
return {
|
|
136
|
-
owner,
|
|
137
|
-
repo,
|
|
138
|
-
branch: parts[3],
|
|
139
|
-
path: parts.slice(4).join('/'),
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
// Unknown format - assume path starts at index 2, default to main branch
|
|
143
|
-
return { owner, repo, path: parts.slice(2).join('/'), branch: 'main' };
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Look up skill in registry to get repo_url
|
|
147
|
-
* SMI-1491: Enables install to work with registry IDs like "author/skill-name"
|
|
148
|
-
*
|
|
149
|
-
* Follows API-first pattern: tries live API, falls back to local DB
|
|
150
|
-
*
|
|
151
|
-
* @param skillId - Skill ID in author/skill-name format
|
|
152
|
-
* @param context - Tool context with apiClient and skillRepository
|
|
153
|
-
* @returns Skill info with repoUrl, or null if not found/no repo_url
|
|
154
|
-
*/
|
|
155
|
-
async function lookupSkillFromRegistry(skillId, context) {
|
|
156
|
-
// Try API first (primary data source)
|
|
157
|
-
if (!context.apiClient.isOffline()) {
|
|
158
|
-
try {
|
|
159
|
-
const response = await context.apiClient.getSkill(skillId);
|
|
160
|
-
if (response.data.repo_url) {
|
|
161
|
-
return {
|
|
162
|
-
repoUrl: response.data.repo_url,
|
|
163
|
-
name: response.data.name,
|
|
164
|
-
};
|
|
165
|
-
}
|
|
166
|
-
// API found skill but no repo_url - it's seed data
|
|
167
|
-
return null;
|
|
168
|
-
}
|
|
169
|
-
catch {
|
|
170
|
-
// API failed, fall through to local DB
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
// Fallback: Local database
|
|
174
|
-
const dbSkill = context.skillRepository.findById(skillId);
|
|
175
|
-
if (dbSkill?.repoUrl) {
|
|
176
|
-
return {
|
|
177
|
-
repoUrl: dbSkill.repoUrl,
|
|
178
|
-
name: dbSkill.name,
|
|
179
|
-
};
|
|
180
|
-
}
|
|
181
|
-
return null;
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Fetch file from GitHub
|
|
185
|
-
* SMI-1491: Added optional branch parameter to use branch from repo_url
|
|
186
|
-
*/
|
|
187
|
-
async function fetchFromGitHub(owner, repo, filePath, branch = 'main') {
|
|
188
|
-
const url = 'https://raw.githubusercontent.com/' + owner + '/' + repo + '/' + branch + '/' + filePath;
|
|
189
|
-
const response = await fetch(url);
|
|
190
|
-
if (!response.ok) {
|
|
191
|
-
// If specified branch fails and it was 'main', try 'master' as fallback
|
|
192
|
-
if (branch === 'main') {
|
|
193
|
-
const masterUrl = 'https://raw.githubusercontent.com/' + owner + '/' + repo + '/master/' + filePath;
|
|
194
|
-
const masterResponse = await fetch(masterUrl);
|
|
195
|
-
if (!masterResponse.ok) {
|
|
196
|
-
throw new Error('Failed to fetch ' + filePath + ': ' + response.status);
|
|
197
|
-
}
|
|
198
|
-
return masterResponse.text();
|
|
199
|
-
}
|
|
200
|
-
throw new Error('Failed to fetch ' + filePath + ': ' + response.status);
|
|
201
|
-
}
|
|
202
|
-
return response.text();
|
|
203
|
-
}
|
|
204
|
-
/**
|
|
205
|
-
* Validate SKILL.md content
|
|
206
|
-
*/
|
|
207
|
-
function validateSkillMd(content) {
|
|
208
|
-
const errors = [];
|
|
209
|
-
// Check for required sections
|
|
210
|
-
if (!content.includes('# ')) {
|
|
211
|
-
errors.push('Missing title (# heading)');
|
|
212
|
-
}
|
|
213
|
-
// Check minimum length
|
|
214
|
-
if (content.length < 100) {
|
|
215
|
-
errors.push('SKILL.md is too short (minimum 100 characters)');
|
|
216
|
-
}
|
|
217
|
-
return {
|
|
218
|
-
valid: errors.length === 0,
|
|
219
|
-
errors,
|
|
220
|
-
};
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* Generate post-install tips
|
|
224
|
-
*/
|
|
225
|
-
function generateTips(skillName) {
|
|
226
|
-
return [
|
|
227
|
-
'Skill "' + skillName + '" installed successfully!',
|
|
228
|
-
'To use this skill, mention it in Claude Code: "Use the ' + skillName + ' skill to..."',
|
|
229
|
-
'View installed skills: ls ~/.claude/skills/',
|
|
230
|
-
'To uninstall: use the uninstall_skill tool',
|
|
231
|
-
];
|
|
232
|
-
}
|
|
20
|
+
// Import types
|
|
21
|
+
import { TRUST_TIER_SCANNER_OPTIONS, CLAUDE_SKILLS_DIR, } from './install.types.js';
|
|
22
|
+
// Import helpers
|
|
23
|
+
import { loadManifest, updateManifestSafely, parseSkillId, parseRepoUrl, lookupSkillFromRegistry, fetchFromGitHub, validateSkillMd, generateOptimizedTips, } from './install.helpers.js';
|
|
24
|
+
// Re-export only public API types (SMI-1718: trimmed internal exports)
|
|
25
|
+
export { installInputSchema } from './install.types.js';
|
|
233
26
|
/**
|
|
234
27
|
* Install a skill from GitHub to the local Claude Code skills directory.
|
|
235
28
|
*
|
|
@@ -248,29 +41,12 @@ function generateTips(skillName) {
|
|
|
248
41
|
* @param input.force - Force reinstall if skill already exists (default: false)
|
|
249
42
|
* @param input.skipScan - Skip security scan (default: false, not recommended)
|
|
250
43
|
* @returns Promise resolving to installation result with success status
|
|
251
|
-
*
|
|
252
|
-
* @example
|
|
253
|
-
* // Successful installation
|
|
254
|
-
* const result = await installSkill({ skillId: 'anthropic/commit' });
|
|
255
|
-
* if (result.success) {
|
|
256
|
-
* console.log(`Installed to ${result.installPath}`);
|
|
257
|
-
* result.tips?.forEach(tip => console.log(tip));
|
|
258
|
-
* }
|
|
259
|
-
*
|
|
260
|
-
* @example
|
|
261
|
-
* // Handle security scan failure
|
|
262
|
-
* const result = await installSkill({ skillId: 'untrusted/skill' });
|
|
263
|
-
* if (!result.success && result.securityReport) {
|
|
264
|
-
* console.log('Security issues found:');
|
|
265
|
-
* result.securityReport.findings.forEach(f =>
|
|
266
|
-
* console.log(` ${f.severity}: ${f.message}`)
|
|
267
|
-
* );
|
|
268
|
-
* }
|
|
269
44
|
*/
|
|
270
45
|
export async function installSkill(input, _context) {
|
|
271
|
-
const scanner = new SecurityScanner();
|
|
272
46
|
// SMI-1491: Get context for registry lookup (use provided or fallback to singleton)
|
|
273
47
|
const context = _context ?? getToolContext();
|
|
48
|
+
// SMI-1533: Trust tier for security scan configuration (default to unknown for direct paths)
|
|
49
|
+
let trustTier = 'unknown';
|
|
274
50
|
try {
|
|
275
51
|
// Parse skill ID
|
|
276
52
|
const parsed = parseSkillId(input.skillId);
|
|
@@ -309,6 +85,8 @@ export async function installSkill(input, _context) {
|
|
|
309
85
|
basePath = repoInfo.path ? repoInfo.path + '/' : '';
|
|
310
86
|
branch = repoInfo.branch;
|
|
311
87
|
skillName = registrySkill.name;
|
|
88
|
+
// SMI-1533: Use trust tier from registry for security scan configuration
|
|
89
|
+
trustTier = registrySkill.trustTier;
|
|
312
90
|
}
|
|
313
91
|
else {
|
|
314
92
|
// DIRECT PATH (existing behavior)
|
|
@@ -372,35 +150,111 @@ export async function installSkill(input, _context) {
|
|
|
372
150
|
],
|
|
373
151
|
};
|
|
374
152
|
}
|
|
375
|
-
// Security scan
|
|
153
|
+
// SMI-1533: Security scan with trust-tier sensitive configuration
|
|
376
154
|
let securityReport;
|
|
377
155
|
if (!input.skipScan) {
|
|
156
|
+
// Get scanner options based on trust tier
|
|
157
|
+
const scannerOptions = TRUST_TIER_SCANNER_OPTIONS[trustTier];
|
|
158
|
+
const scanner = new SecurityScanner(scannerOptions);
|
|
378
159
|
securityReport = scanner.scan(input.skillId, skillMdContent);
|
|
379
160
|
if (!securityReport.passed) {
|
|
380
161
|
const criticalFindings = securityReport.findings.filter((f) => f.severity === 'critical' || f.severity === 'high');
|
|
162
|
+
// SMI-1533: Include trust tier context in error message
|
|
163
|
+
const tierContext = trustTier === 'unknown'
|
|
164
|
+
? ' (Direct GitHub install - strictest scanning applied)'
|
|
165
|
+
: trustTier === 'experimental'
|
|
166
|
+
? ' (Experimental skill - aggressive scanning applied)'
|
|
167
|
+
: '';
|
|
381
168
|
return {
|
|
382
169
|
success: false,
|
|
383
170
|
skillId: input.skillId,
|
|
384
171
|
installPath,
|
|
385
172
|
securityReport,
|
|
173
|
+
trustTier,
|
|
386
174
|
error: 'Security scan failed with ' +
|
|
387
175
|
criticalFindings.length +
|
|
388
|
-
' critical/high findings
|
|
176
|
+
' critical/high findings' +
|
|
177
|
+
tierContext +
|
|
178
|
+
'. Use skipScan=true to override (not recommended).',
|
|
179
|
+
tips: [
|
|
180
|
+
'Trust tier: ' + trustTier + ' (threshold: ' + scannerOptions.riskThreshold + ')',
|
|
181
|
+
'Risk score: ' + securityReport.riskScore,
|
|
182
|
+
'Consider reviewing the skill content for the flagged issues',
|
|
183
|
+
trustTier === 'unknown'
|
|
184
|
+
? 'Skills from the registry have more lenient scanning thresholds'
|
|
185
|
+
: undefined,
|
|
186
|
+
].filter(Boolean),
|
|
389
187
|
};
|
|
390
188
|
}
|
|
391
189
|
}
|
|
190
|
+
// SMI-XXX: Apply Skillsmith Optimization Layer (unless skipped)
|
|
191
|
+
let optimizationInfo = { optimized: false };
|
|
192
|
+
let finalSkillContent = skillMdContent;
|
|
193
|
+
let subSkillFiles = [];
|
|
194
|
+
let subagentContent;
|
|
195
|
+
let claudeMdSnippet;
|
|
196
|
+
if (!input.skipOptimize) {
|
|
197
|
+
try {
|
|
198
|
+
const transformService = new TransformationService(context.db, {
|
|
199
|
+
cacheTtl: 3600, // 1 hour cache
|
|
200
|
+
version: '1.0.0',
|
|
201
|
+
});
|
|
202
|
+
// Extract skill name and description for transformation
|
|
203
|
+
const nameMatch = skillMdContent.match(/^name:\s*(.+)$/m);
|
|
204
|
+
const descMatch = skillMdContent.match(/^description:\s*(.+)$/m);
|
|
205
|
+
const extractedName = nameMatch ? nameMatch[1].trim() : skillName;
|
|
206
|
+
const extractedDesc = descMatch ? descMatch[1].trim() : '';
|
|
207
|
+
const transformResult = await transformService.transform(input.skillId, extractedName, extractedDesc, skillMdContent);
|
|
208
|
+
if (transformResult.transformed) {
|
|
209
|
+
finalSkillContent = transformResult.mainSkillContent;
|
|
210
|
+
subSkillFiles = transformResult.subSkills;
|
|
211
|
+
subagentContent = transformResult.subagent?.content;
|
|
212
|
+
claudeMdSnippet = transformResult.claudeMdSnippet;
|
|
213
|
+
optimizationInfo = {
|
|
214
|
+
optimized: true,
|
|
215
|
+
subSkills: subSkillFiles.map((s) => s.filename),
|
|
216
|
+
subagentGenerated: !!subagentContent,
|
|
217
|
+
tokenReductionPercent: transformResult.stats.tokenReductionPercent,
|
|
218
|
+
originalLines: transformResult.stats.originalLines,
|
|
219
|
+
optimizedLines: transformResult.stats.optimizedLines,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
catch (transformError) {
|
|
224
|
+
// Transformation failed - continue with original content
|
|
225
|
+
console.warn('[install] Optimization failed, using original content:', transformError);
|
|
226
|
+
finalSkillContent = skillMdContent;
|
|
227
|
+
optimizationInfo = { optimized: false };
|
|
228
|
+
}
|
|
229
|
+
}
|
|
392
230
|
// Create installation directory
|
|
393
231
|
await fs.mkdir(installPath, { recursive: true });
|
|
394
|
-
// Write SKILL.md
|
|
395
|
-
await fs.writeFile(path.join(installPath, 'SKILL.md'),
|
|
232
|
+
// Write SKILL.md (optimized or original)
|
|
233
|
+
await fs.writeFile(path.join(installPath, 'SKILL.md'), finalSkillContent);
|
|
234
|
+
// Write sub-skills if any
|
|
235
|
+
for (const subSkill of subSkillFiles) {
|
|
236
|
+
await fs.writeFile(path.join(installPath, subSkill.filename), subSkill.content);
|
|
237
|
+
}
|
|
238
|
+
// Write companion subagent if generated
|
|
239
|
+
if (subagentContent) {
|
|
240
|
+
const agentsDir = path.join(os.homedir(), '.claude', 'agents');
|
|
241
|
+
await fs.mkdir(agentsDir, { recursive: true });
|
|
242
|
+
const subagentPath = path.join(agentsDir, `${skillName}-specialist.md`);
|
|
243
|
+
await fs.writeFile(subagentPath, subagentContent);
|
|
244
|
+
optimizationInfo.subagentPath = subagentPath;
|
|
245
|
+
}
|
|
396
246
|
// Try to fetch optional files
|
|
247
|
+
// SMI-1533: Use same trust-tier scanner for optional files
|
|
248
|
+
const optionalFileScanner = input.skipScan
|
|
249
|
+
? null
|
|
250
|
+
: new SecurityScanner(TRUST_TIER_SCANNER_OPTIONS[trustTier]);
|
|
397
251
|
const optionalFiles = ['README.md', 'examples.md', 'config.json'];
|
|
398
252
|
for (const file of optionalFiles) {
|
|
399
253
|
try {
|
|
400
254
|
const content = await fetchFromGitHub(owner, repo, basePath + file, branch);
|
|
401
255
|
// Scan optional files too
|
|
402
|
-
if (
|
|
403
|
-
const fileScan =
|
|
256
|
+
if (optionalFileScanner) {
|
|
257
|
+
const fileScan = optionalFileScanner.scan(input.skillId + '/' + file, content);
|
|
404
258
|
if (!fileScan.passed) {
|
|
405
259
|
console.warn('Skipping ' + file + ' due to security findings');
|
|
406
260
|
continue;
|
|
@@ -412,23 +266,30 @@ export async function installSkill(input, _context) {
|
|
|
412
266
|
// Optional files are fine to skip
|
|
413
267
|
}
|
|
414
268
|
}
|
|
415
|
-
// Update manifest
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
269
|
+
// Update manifest with locking to prevent race conditions
|
|
270
|
+
await updateManifestSafely((currentManifest) => ({
|
|
271
|
+
...currentManifest,
|
|
272
|
+
installedSkills: {
|
|
273
|
+
...currentManifest.installedSkills,
|
|
274
|
+
[skillName]: {
|
|
275
|
+
id: input.skillId,
|
|
276
|
+
name: skillName,
|
|
277
|
+
version: '1.0.0',
|
|
278
|
+
source: 'github:' + owner + '/' + repo,
|
|
279
|
+
installPath,
|
|
280
|
+
installedAt: new Date().toISOString(),
|
|
281
|
+
lastUpdated: new Date().toISOString(),
|
|
282
|
+
},
|
|
283
|
+
},
|
|
284
|
+
}));
|
|
426
285
|
return {
|
|
427
286
|
success: true,
|
|
428
287
|
skillId: input.skillId,
|
|
429
288
|
installPath,
|
|
430
289
|
securityReport,
|
|
431
|
-
|
|
290
|
+
trustTier, // SMI-1533: Include trust tier in result
|
|
291
|
+
optimization: optimizationInfo,
|
|
292
|
+
tips: generateOptimizedTips(skillName, optimizationInfo, claudeMdSnippet),
|
|
432
293
|
};
|
|
433
294
|
}
|
|
434
295
|
catch (error) {
|
|
@@ -445,7 +306,7 @@ export async function installSkill(input, _context) {
|
|
|
445
306
|
*/
|
|
446
307
|
export const installTool = {
|
|
447
308
|
name: 'install_skill',
|
|
448
|
-
description: 'Install a Claude Code skill from GitHub. Performs security scan before installation.',
|
|
309
|
+
description: 'Install a Claude Code skill from GitHub. Performs security scan and Skillsmith optimization before installation.',
|
|
449
310
|
inputSchema: {
|
|
450
311
|
type: 'object',
|
|
451
312
|
properties: {
|
|
@@ -461,6 +322,10 @@ export const installTool = {
|
|
|
461
322
|
type: 'boolean',
|
|
462
323
|
description: 'Skip security scan (not recommended)',
|
|
463
324
|
},
|
|
325
|
+
skipOptimize: {
|
|
326
|
+
type: 'boolean',
|
|
327
|
+
description: 'Skip Skillsmith optimization (decomposition, subagent generation)',
|
|
328
|
+
},
|
|
464
329
|
},
|
|
465
330
|
required: ['skillId'],
|
|
466
331
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/tools/install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,eAAe,EAAmB,MAAM,kBAAkB,CAAA;AACnE,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C,eAAe;AACf,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAC7D,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACvE,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC;CACtF,CAAC,CAAA;AAcF,QAAQ;AACR,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAA;AACtE,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAA;AAC7D,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,eAAe,CAAC,CAAA;AAkBhE;;GAEG;AACH,KAAK,UAAU,YAAY;IACzB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;QACzD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,OAAO,EAAE,OAAO;YAChB,eAAe,EAAE,EAAE;SACpB,CAAA;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CAAC,QAAuB;IACjD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAChE,MAAM,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;AACtE,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CAAC,KAAa;IAMjC,6CAA6C;IAC7C,IAAI,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAA;QAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QACrD,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;YACf,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;YACd,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;YACpC,YAAY,EAAE,KAAK;SACpB,CAAA;IACH,CAAC;IAED,6BAA6B;IAC7B,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAE9B,yEAAyE;QACzE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO;gBACL,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;gBACf,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;gBACd,IAAI,EAAE,EAAE;gBACR,YAAY,EAAE,IAAI,EAAE,2CAA2C;aAChE,CAAA;QACH,CAAC;QAED,6DAA6D;QAC7D,OAAO;YACL,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;YACf,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;YACd,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAC9B,YAAY,EAAE,KAAK;SACpB,CAAA;IACH,CAAC;IAED,gCAAgC;IAChC,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,KAAK,GAAG,iCAAiC,CAAC,CAAA;AAC1F,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,YAAY,CAAC,OAAe;IAMnC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAA;IAC5B,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAErD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IACtB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;IAErB,mCAAmC;IACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;IAClD,CAAC;IAED,qEAAqE;IACrE,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QAC/C,OAAO;YACL,KAAK;YACL,IAAI;YACJ,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;YAChB,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;SAC/B,CAAA;IACH,CAAC;IAED,yEAAyE;IACzE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;AACxE,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,uBAAuB,CACpC,OAAe,EACf,OAAoB;IAEpB,sCAAsC;IACtC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;YAC1D,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC3B,OAAO;oBACL,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ;oBAC/B,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI;iBACzB,CAAA;YACH,CAAC;YACD,mDAAmD;YACnD,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,MAAM,CAAC;YACP,uCAAuC;QACzC,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IACzD,IAAI,OAAO,EAAE,OAAO,EAAE,CAAC;QACrB,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAA;IACH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,eAAe,CAC5B,KAAa,EACb,IAAY,EACZ,QAAgB,EAChB,SAAiB,MAAM;IAEvB,MAAM,GAAG,GACP,oCAAoC,GAAG,KAAK,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG,GAAG,QAAQ,CAAA;IAC3F,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;IAEjC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,wEAAwE;QACxE,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,MAAM,SAAS,GACb,oCAAoC,GAAG,KAAK,GAAG,GAAG,GAAG,IAAI,GAAG,UAAU,GAAG,QAAQ,CAAA;YACnF,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAA;YAE7C,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,QAAQ,GAAG,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;YACzE,CAAC;YAED,OAAO,cAAc,CAAC,IAAI,EAAE,CAAA;QAC9B,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,QAAQ,GAAG,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAA;IACzE,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAA;AACxB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,OAAe;IACtC,MAAM,MAAM,GAAa,EAAE,CAAA;IAE3B,8BAA8B;IAC9B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;IAC1C,CAAC;IAED,uBAAuB;IACvB,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;IAC/D,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,MAAM;KACP,CAAA;AACH,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,SAAiB;IACrC,OAAO;QACL,SAAS,GAAG,SAAS,GAAG,2BAA2B;QACnD,yDAAyD,GAAG,SAAS,GAAG,eAAe;QACvF,6CAA6C;QAC7C,4CAA4C;KAC7C,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,KAAmB,EACnB,QAAsB;IAEtB,MAAM,OAAO,GAAG,IAAI,eAAe,EAAE,CAAA;IACrC,oFAAoF;IACpF,MAAM,OAAO,GAAG,QAAQ,IAAI,cAAc,EAAE,CAAA;IAE5C,IAAI,CAAC;QACH,iBAAiB;QACjB,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAE1C,oFAAoF;QACpF,IAAI,KAAa,CAAA;QACjB,IAAI,IAAY,CAAA;QAChB,IAAI,QAAgB,CAAA;QACpB,IAAI,SAAiB,CAAA;QACrB,IAAI,MAAM,GAAW,MAAM,CAAA;QAE3B,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACxB,kCAAkC;YAClC,gFAAgF;YAChF,MAAM,aAAa,GAAG,MAAM,uBAAuB,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YAE3E,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,iDAAiD;gBACjD,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,WAAW,EAAE,EAAE;oBACf,KAAK,EACH,SAAS;wBACT,KAAK,CAAC,OAAO;wBACb,mCAAmC;wBACnC,0DAA0D;wBAC1D,6DAA6D;oBAC/D,IAAI,EAAE;wBACJ,2FAA2F;wBAC3F,qDAAqD;wBACrD,wEAAwE;qBACzE;iBACF,CAAA;YACH,CAAC;YAED,8CAA8C;YAC9C,MAAM,QAAQ,GAAG,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;YACpD,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAA;YACtB,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAA;YACpB,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;YACnD,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAA;YACxB,SAAS,GAAG,aAAa,CAAC,IAAI,CAAA;QAChC,CAAC;aAAM,CAAC;YACN,kCAAkC;YAClC,6CAA6C;YAC7C,KAAK,GAAG,MAAM,CAAC,KAAK,CAAA;YACpB,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;YAClB,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;YAC/C,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAC7D,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAA;QAE3D,6BAA6B;QAC7B,MAAM,QAAQ,GAAG,MAAM,YAAY,EAAE,CAAA;QACrC,IAAI,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACxD,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,WAAW;gBACX,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,sDAAsD;aACtF,CAAA;QACH,CAAC;QAED,2BAA2B;QAC3B,MAAM,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAA;QAEzC,4BAA4B;QAC5B,IAAI,cAAsB,CAAA;QAC1B,IAAI,CAAC;YACH,cAAc,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,CAAA;QAC1E,CAAC;QAAC,MAAM,CAAC;YACP,mCAAmC;YACnC,MAAM,OAAO,GAAG,qBAAqB,GAAG,KAAK,GAAG,GAAG,GAAG,IAAI,CAAA;YAC1D,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,WAAW;gBACX,KAAK,EACH,6BAA6B;oBAC7B,CAAC,QAAQ,IAAI,iBAAiB,CAAC;oBAC/B,IAAI;oBACJ,gGAAgG;oBAChG,cAAc;oBACd,OAAO;gBACT,IAAI,EAAE;oBACJ,kEAAkE;oBAClE,gCAAgC,GAAG,OAAO;oBAC1C,oGAAoG;oBACpG,2EAA2E;iBAC5E;aACF,CAAA;QACH,CAAC;QAED,oBAAoB;QACpB,MAAM,UAAU,GAAG,eAAe,CAAC,cAAc,CAAC,CAAA;QAClD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,WAAW;gBACX,KAAK,EAAE,oBAAoB,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC1D,IAAI,EAAE;oBACJ,sEAAsE;oBACtE,yCAAyC;oBACzC,mGAAmG;iBACpG;aACF,CAAA;QACH,CAAC;QAED,gBAAgB;QAChB,IAAI,cAAsC,CAAA;QAC1C,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACpB,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,cAAc,CAAC,CAAA;YAE5D,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;gBAC3B,MAAM,gBAAgB,GAAG,cAAc,CAAC,QAAQ,CAAC,MAAM,CACrD,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,CAC1D,CAAA;gBACD,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,WAAW;oBACX,cAAc;oBACd,KAAK,EACH,4BAA4B;wBAC5B,gBAAgB,CAAC,MAAM;wBACvB,2EAA2E;iBAC9E,CAAA;YACH,CAAC;QACH,CAAC;QAED,gCAAgC;QAChC,MAAM,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAEhD,iBAAiB;QACjB,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,cAAc,CAAC,CAAA;QAEtE,8BAA8B;QAC9B,MAAM,aAAa,GAAG,CAAC,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC,CAAA;QACjE,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAE,MAAM,CAAC,CAAA;gBAE3E,0BAA0B;gBAC1B,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACpB,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,GAAG,IAAI,EAAE,OAAO,CAAC,CAAA;oBAClE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;wBACrB,OAAO,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,2BAA2B,CAAC,CAAA;wBAC9D,SAAQ;oBACV,CAAC;gBACH,CAAC;gBAED,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAA;YAC3D,CAAC;YAAC,MAAM,CAAC;gBACP,kCAAkC;YACpC,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,GAAG;YACpC,EAAE,EAAE,KAAK,CAAC,OAAO;YACjB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,SAAS,GAAG,KAAK,GAAG,GAAG,GAAG,IAAI;YACtC,WAAW;YACX,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAA;QACD,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAA;QAE5B,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,WAAW;YACX,cAAc;YACd,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC;SAC9B,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,WAAW,EAAE,EAAE;YACf,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAA;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,IAAI,EAAE,eAAe;IACrB,WAAW,EACT,sFAAsF;IACxF,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,2CAA2C;aACzD;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,yCAAyC;aACvD;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,sCAAsC;aACpD;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,CAAC;KACtB;CACF,CAAA;AAED,eAAe,WAAW,CAAA"}
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/tools/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Install Tool Types and Constants
|
|
3
|
+
* @module @skillsmith/mcp-server/tools/install.types
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import type { ScanReport, ScannerOptions } from '@skillsmith/core';
|
|
7
|
+
import type { TrustTier } from '@skillsmith/core';
|
|
8
|
+
/**
|
|
9
|
+
* SMI-1533: Valid trust tier values
|
|
10
|
+
*/
|
|
11
|
+
export declare const VALID_TRUST_TIERS: readonly TrustTier[];
|
|
12
|
+
/**
|
|
13
|
+
* SMI-1533: Validate and normalize trust tier value
|
|
14
|
+
* Returns 'unknown' for invalid or missing values to ensure strictest scanning
|
|
15
|
+
*
|
|
16
|
+
* NOTE: 'verified' tier currently relies on registry data without cryptographic
|
|
17
|
+
* verification. Future enhancement: implement signature verification for
|
|
18
|
+
* Anthropic-verified skills using PKI.
|
|
19
|
+
*/
|
|
20
|
+
export declare function validateTrustTier(value: string | null | undefined): TrustTier;
|
|
21
|
+
/**
|
|
22
|
+
* SMI-1533: Security scan configuration per trust tier
|
|
23
|
+
*
|
|
24
|
+
* - verified: Minimal scanning (trust Anthropic-verified skills)
|
|
25
|
+
* - community: Standard scanning (balanced security)
|
|
26
|
+
* - experimental: Aggressive scanning (highest scrutiny for new/beta skills)
|
|
27
|
+
* - unknown: Most aggressive scanning
|
|
28
|
+
*/
|
|
29
|
+
export declare const TRUST_TIER_SCANNER_OPTIONS: Record<TrustTier, ScannerOptions>;
|
|
30
|
+
/** Input schema for install tool */
|
|
31
|
+
export declare const installInputSchema: z.ZodObject<{
|
|
32
|
+
skillId: z.ZodString;
|
|
33
|
+
force: z.ZodDefault<z.ZodBoolean>;
|
|
34
|
+
skipScan: z.ZodDefault<z.ZodBoolean>;
|
|
35
|
+
/** SMI-XXX: Skip optimization transformation */
|
|
36
|
+
skipOptimize: z.ZodDefault<z.ZodBoolean>;
|
|
37
|
+
}, "strip", z.ZodTypeAny, {
|
|
38
|
+
skillId: string;
|
|
39
|
+
force: boolean;
|
|
40
|
+
skipScan: boolean;
|
|
41
|
+
skipOptimize: boolean;
|
|
42
|
+
}, {
|
|
43
|
+
skillId: string;
|
|
44
|
+
force?: boolean | undefined;
|
|
45
|
+
skipScan?: boolean | undefined;
|
|
46
|
+
skipOptimize?: boolean | undefined;
|
|
47
|
+
}>;
|
|
48
|
+
export type InstallInput = z.infer<typeof installInputSchema>;
|
|
49
|
+
/** Output type for install tool */
|
|
50
|
+
export interface InstallResult {
|
|
51
|
+
success: boolean;
|
|
52
|
+
skillId: string;
|
|
53
|
+
installPath: string;
|
|
54
|
+
securityReport?: ScanReport;
|
|
55
|
+
tips?: string[];
|
|
56
|
+
error?: string;
|
|
57
|
+
/** SMI-1533: Trust tier used for security scanning */
|
|
58
|
+
trustTier?: TrustTier;
|
|
59
|
+
/** SMI-XXX: Optimization info (Skillsmith Optimization Layer) */
|
|
60
|
+
optimization?: OptimizationInfo;
|
|
61
|
+
}
|
|
62
|
+
/** Optimization info included in install result */
|
|
63
|
+
export interface OptimizationInfo {
|
|
64
|
+
/** Whether skill was optimized */
|
|
65
|
+
optimized: boolean;
|
|
66
|
+
/** Sub-skills created (filenames) */
|
|
67
|
+
subSkills?: string[];
|
|
68
|
+
/** Whether companion subagent was generated */
|
|
69
|
+
subagentGenerated?: boolean;
|
|
70
|
+
/** Path to generated subagent (if any) */
|
|
71
|
+
subagentPath?: string;
|
|
72
|
+
/** Estimated token reduction percentage */
|
|
73
|
+
tokenReductionPercent?: number;
|
|
74
|
+
/** Original line count */
|
|
75
|
+
originalLines?: number;
|
|
76
|
+
/** Optimized line count */
|
|
77
|
+
optimizedLines?: number;
|
|
78
|
+
}
|
|
79
|
+
export declare const CLAUDE_SKILLS_DIR: string;
|
|
80
|
+
export declare const SKILLSMITH_DIR: string;
|
|
81
|
+
export declare const MANIFEST_PATH: string;
|
|
82
|
+
export interface SkillManifest {
|
|
83
|
+
version: string;
|
|
84
|
+
installedSkills: Record<string, {
|
|
85
|
+
id: string;
|
|
86
|
+
name: string;
|
|
87
|
+
version: string;
|
|
88
|
+
source: string;
|
|
89
|
+
installPath: string;
|
|
90
|
+
installedAt: string;
|
|
91
|
+
lastUpdated: string;
|
|
92
|
+
}>;
|
|
93
|
+
}
|
|
94
|
+
/** Parsed skill ID components */
|
|
95
|
+
export interface ParsedSkillId {
|
|
96
|
+
owner: string;
|
|
97
|
+
repo: string;
|
|
98
|
+
path: string;
|
|
99
|
+
isRegistryId: boolean;
|
|
100
|
+
}
|
|
101
|
+
/** Parsed repository URL components */
|
|
102
|
+
export interface ParsedRepoUrl {
|
|
103
|
+
owner: string;
|
|
104
|
+
repo: string;
|
|
105
|
+
path: string;
|
|
106
|
+
branch: string;
|
|
107
|
+
}
|
|
108
|
+
/** Registry lookup result */
|
|
109
|
+
export interface RegistrySkillInfo {
|
|
110
|
+
repoUrl: string;
|
|
111
|
+
name: string;
|
|
112
|
+
trustTier: TrustTier;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=install.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.types.d.ts","sourceRoot":"","sources":["../../../src/tools/install.types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAQjD;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,SAAS,SAAS,EAKjD,CAAA;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,CAc7E;AAMD;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,EAAE,MAAM,CAAC,SAAS,EAAE,cAAc,CAqBxE,CAAA;AAMD,oCAAoC;AACpC,eAAO,MAAM,kBAAkB;;;;IAI7B,gDAAgD;;;;;;;;;;;;EAEhD,CAAA;AAEF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAE7D,mCAAmC;AACnC,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,UAAU,CAAA;IAC3B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,sDAAsD;IACtD,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,iEAAiE;IACjE,YAAY,CAAC,EAAE,gBAAgB,CAAA;CAChC;AAED,mDAAmD;AACnD,MAAM,WAAW,gBAAgB;IAC/B,kCAAkC;IAClC,SAAS,EAAE,OAAO,CAAA;IAClB,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,+CAA+C;IAC/C,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,2CAA2C;IAC3C,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,0BAA0B;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,2BAA2B;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAMD,eAAO,MAAM,iBAAiB,QAA+C,CAAA;AAC7E,eAAO,MAAM,cAAc,QAAyC,CAAA;AACpE,eAAO,MAAM,aAAa,QAA6C,CAAA;AAMvE,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,MAAM,CACrB,MAAM,EACN;QACE,EAAE,EAAE,MAAM,CAAA;QACV,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;QACf,MAAM,EAAE,MAAM,CAAA;QACd,WAAW,EAAE,MAAM,CAAA;QACnB,WAAW,EAAE,MAAM,CAAA;QACnB,WAAW,EAAE,MAAM,CAAA;KACpB,CACF,CAAA;CACF;AAED,iCAAiC;AACjC,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,OAAO,CAAA;CACtB;AAED,uCAAuC;AACvC,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;CACf;AAED,6BAA6B;AAC7B,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,SAAS,CAAA;CACrB"}
|