@skillsmith/mcp-server 0.2.3 → 0.3.1
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/package.json +3 -2
- package/src/assets/docs/USER_GUIDE.md +192 -0
- package/src/assets/skills/skillsmith/SKILL.md +147 -0
- package/src/assets/skills/skillsmith/docs/QUOTAS.md +182 -0
- package/src/assets/skills/skillsmith/docs/SECURITY.md +174 -0
- package/src/assets/skills/skillsmith/docs/TRUST_TIERS.md +142 -0
- package/dist/.tsbuildinfo +0 -1
- package/dist/src/__tests__/get-skill.test.d.ts +0 -6
- package/dist/src/__tests__/get-skill.test.d.ts.map +0 -1
- package/dist/src/__tests__/get-skill.test.js +0 -88
- package/dist/src/__tests__/get-skill.test.js.map +0 -1
- package/dist/src/__tests__/middleware/errorFormatter.test.d.ts +0 -7
- package/dist/src/__tests__/middleware/errorFormatter.test.d.ts.map +0 -1
- package/dist/src/__tests__/middleware/errorFormatter.test.js +0 -304
- package/dist/src/__tests__/middleware/errorFormatter.test.js.map +0 -1
- package/dist/src/__tests__/middleware/license.test.d.ts +0 -7
- package/dist/src/__tests__/middleware/license.test.d.ts.map +0 -1
- package/dist/src/__tests__/middleware/license.test.js +0 -500
- package/dist/src/__tests__/middleware/license.test.js.map +0 -1
- package/dist/src/__tests__/search.test.d.ts +0 -6
- package/dist/src/__tests__/search.test.d.ts.map +0 -1
- package/dist/src/__tests__/search.test.js +0 -86
- package/dist/src/__tests__/search.test.js.map +0 -1
- package/dist/src/__tests__/test-utils.d.ts +0 -20
- package/dist/src/__tests__/test-utils.d.ts.map +0 -1
- package/dist/src/__tests__/test-utils.js +0 -91
- package/dist/src/__tests__/test-utils.js.map +0 -1
- package/dist/src/context/index.d.ts +0 -19
- package/dist/src/context/index.d.ts.map +0 -1
- package/dist/src/context/index.js +0 -25
- package/dist/src/context/index.js.map +0 -1
- package/dist/src/context/project-detector.d.ts +0 -145
- package/dist/src/context/project-detector.d.ts.map +0 -1
- package/dist/src/context/project-detector.js +0 -321
- package/dist/src/context/project-detector.js.map +0 -1
- package/dist/src/context.d.ts +0 -135
- package/dist/src/context.d.ts.map +0 -1
- package/dist/src/context.js +0 -191
- package/dist/src/context.js.map +0 -1
- package/dist/src/core-shim.d.ts +0 -7
- package/dist/src/core-shim.d.ts.map +0 -1
- package/dist/src/core-shim.js +0 -9
- package/dist/src/core-shim.js.map +0 -1
- package/dist/src/health/healthCheck.d.ts +0 -88
- package/dist/src/health/healthCheck.d.ts.map +0 -1
- package/dist/src/health/healthCheck.js +0 -117
- package/dist/src/health/healthCheck.js.map +0 -1
- package/dist/src/health/index.d.ts +0 -21
- package/dist/src/health/index.d.ts.map +0 -1
- package/dist/src/health/index.js +0 -21
- package/dist/src/health/index.js.map +0 -1
- package/dist/src/health/readinessCheck.d.ts +0 -139
- package/dist/src/health/readinessCheck.d.ts.map +0 -1
- package/dist/src/health/readinessCheck.js +0 -266
- package/dist/src/health/readinessCheck.js.map +0 -1
- package/dist/src/index.d.ts +0 -8
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -178
- package/dist/src/index.js.map +0 -1
- package/dist/src/index.test.d.ts +0 -2
- package/dist/src/index.test.d.ts.map +0 -1
- package/dist/src/index.test.js +0 -43
- package/dist/src/index.test.js.map +0 -1
- package/dist/src/logger.d.ts +0 -26
- package/dist/src/logger.d.ts.map +0 -1
- package/dist/src/logger.js +0 -179
- package/dist/src/logger.js.map +0 -1
- package/dist/src/middleware/__tests__/csp.test.d.ts +0 -2
- package/dist/src/middleware/__tests__/csp.test.d.ts.map +0 -1
- package/dist/src/middleware/__tests__/csp.test.js +0 -390
- package/dist/src/middleware/__tests__/csp.test.js.map +0 -1
- package/dist/src/middleware/csp.d.ts +0 -103
- package/dist/src/middleware/csp.d.ts.map +0 -1
- package/dist/src/middleware/csp.js +0 -273
- package/dist/src/middleware/csp.js.map +0 -1
- package/dist/src/middleware/degradation.d.ts +0 -105
- package/dist/src/middleware/degradation.d.ts.map +0 -1
- package/dist/src/middleware/degradation.js +0 -319
- package/dist/src/middleware/degradation.js.map +0 -1
- package/dist/src/middleware/errorFormatter.d.ts +0 -119
- package/dist/src/middleware/errorFormatter.d.ts.map +0 -1
- package/dist/src/middleware/errorFormatter.js +0 -294
- package/dist/src/middleware/errorFormatter.js.map +0 -1
- package/dist/src/middleware/index.d.ts +0 -11
- package/dist/src/middleware/index.d.ts.map +0 -1
- package/dist/src/middleware/index.js +0 -16
- package/dist/src/middleware/index.js.map +0 -1
- package/dist/src/middleware/license.d.ts +0 -169
- package/dist/src/middleware/license.d.ts.map +0 -1
- package/dist/src/middleware/license.js +0 -292
- package/dist/src/middleware/license.js.map +0 -1
- package/dist/src/middleware/quota.d.ts +0 -182
- package/dist/src/middleware/quota.d.ts.map +0 -1
- package/dist/src/middleware/quota.js +0 -309
- package/dist/src/middleware/quota.js.map +0 -1
- package/dist/src/middleware/toolFeatureMapping.d.ts +0 -36
- package/dist/src/middleware/toolFeatureMapping.d.ts.map +0 -1
- package/dist/src/middleware/toolFeatureMapping.js +0 -96
- package/dist/src/middleware/toolFeatureMapping.js.map +0 -1
- package/dist/src/onboarding/first-run.d.ts +0 -64
- package/dist/src/onboarding/first-run.d.ts.map +0 -1
- package/dist/src/onboarding/first-run.js +0 -77
- package/dist/src/onboarding/first-run.js.map +0 -1
- package/dist/src/onboarding/index.d.ts +0 -7
- package/dist/src/onboarding/index.d.ts.map +0 -1
- package/dist/src/onboarding/index.js +0 -7
- package/dist/src/onboarding/index.js.map +0 -1
- package/dist/src/suggestions/index.d.ts +0 -21
- package/dist/src/suggestions/index.d.ts.map +0 -1
- package/dist/src/suggestions/index.js +0 -20
- package/dist/src/suggestions/index.js.map +0 -1
- package/dist/src/suggestions/suggestion-engine.d.ts +0 -185
- package/dist/src/suggestions/suggestion-engine.d.ts.map +0 -1
- package/dist/src/suggestions/suggestion-engine.js +0 -352
- package/dist/src/suggestions/suggestion-engine.js.map +0 -1
- package/dist/src/suggestions/types.d.ts +0 -88
- package/dist/src/suggestions/types.d.ts.map +0 -1
- package/dist/src/suggestions/types.js +0 -21
- package/dist/src/suggestions/types.js.map +0 -1
- package/dist/src/tools/analyze.d.ts +0 -151
- package/dist/src/tools/analyze.d.ts.map +0 -1
- package/dist/src/tools/analyze.js +0 -205
- package/dist/src/tools/analyze.js.map +0 -1
- package/dist/src/tools/compare.d.ts +0 -149
- package/dist/src/tools/compare.d.ts.map +0 -1
- package/dist/src/tools/compare.js +0 -464
- package/dist/src/tools/compare.js.map +0 -1
- package/dist/src/tools/get-skill.d.ts +0 -107
- package/dist/src/tools/get-skill.d.ts.map +0 -1
- package/dist/src/tools/get-skill.js +0 -260
- package/dist/src/tools/get-skill.js.map +0 -1
- package/dist/src/tools/index.d.ts +0 -20
- package/dist/src/tools/index.d.ts.map +0 -1
- package/dist/src/tools/index.js +0 -20
- package/dist/src/tools/index.js.map +0 -1
- package/dist/src/tools/install.d.ts +0 -122
- package/dist/src/tools/install.d.ts.map +0 -1
- package/dist/src/tools/install.js +0 -326
- package/dist/src/tools/install.js.map +0 -1
- package/dist/src/tools/recommend.d.ts +0 -169
- package/dist/src/tools/recommend.d.ts.map +0 -1
- package/dist/src/tools/recommend.js +0 -357
- package/dist/src/tools/recommend.js.map +0 -1
- package/dist/src/tools/search.d.ts +0 -114
- package/dist/src/tools/search.d.ts.map +0 -1
- package/dist/src/tools/search.js +0 -247
- package/dist/src/tools/search.js.map +0 -1
- package/dist/src/tools/suggest.d.ts +0 -181
- package/dist/src/tools/suggest.d.ts.map +0 -1
- package/dist/src/tools/suggest.js +0 -310
- package/dist/src/tools/suggest.js.map +0 -1
- package/dist/src/tools/uninstall.d.ts +0 -123
- package/dist/src/tools/uninstall.d.ts.map +0 -1
- package/dist/src/tools/uninstall.js +0 -250
- package/dist/src/tools/uninstall.js.map +0 -1
- package/dist/src/tools/validate.d.ts +0 -122
- package/dist/src/tools/validate.d.ts.map +0 -1
- package/dist/src/tools/validate.js +0 -497
- package/dist/src/tools/validate.js.map +0 -1
- package/dist/src/utils/installed-skills.d.ts +0 -101
- package/dist/src/utils/installed-skills.d.ts.map +0 -1
- package/dist/src/utils/installed-skills.js +0 -220
- package/dist/src/utils/installed-skills.js.map +0 -1
- package/dist/src/utils/validation.d.ts +0 -95
- package/dist/src/utils/validation.d.ts.map +0 -1
- package/dist/src/utils/validation.js +0 -186
- package/dist/src/utils/validation.js.map +0 -1
- package/dist/src/webhooks/index.d.ts +0 -8
- package/dist/src/webhooks/index.d.ts.map +0 -1
- package/dist/src/webhooks/index.js +0 -9
- package/dist/src/webhooks/index.js.map +0 -1
- package/dist/src/webhooks/webhook-endpoint.d.ts +0 -149
- package/dist/src/webhooks/webhook-endpoint.d.ts.map +0 -1
- package/dist/src/webhooks/webhook-endpoint.js +0 -339
- package/dist/src/webhooks/webhook-endpoint.js.map +0 -1
- package/dist/tests/compare.test.d.ts +0 -6
- package/dist/tests/compare.test.d.ts.map +0 -1
- package/dist/tests/compare.test.js +0 -225
- package/dist/tests/compare.test.js.map +0 -1
- package/dist/tests/context/project-detector.test.d.ts +0 -6
- package/dist/tests/context/project-detector.test.d.ts.map +0 -1
- package/dist/tests/context/project-detector.test.js +0 -719
- package/dist/tests/context/project-detector.test.js.map +0 -1
- package/dist/tests/e2e/compare.e2e.test.d.ts +0 -10
- package/dist/tests/e2e/compare.e2e.test.d.ts.map +0 -1
- package/dist/tests/e2e/compare.e2e.test.js +0 -296
- package/dist/tests/e2e/compare.e2e.test.js.map +0 -1
- package/dist/tests/e2e/install-flow.e2e.test.d.ts +0 -10
- package/dist/tests/e2e/install-flow.e2e.test.d.ts.map +0 -1
- package/dist/tests/e2e/install-flow.e2e.test.js +0 -229
- package/dist/tests/e2e/install-flow.e2e.test.js.map +0 -1
- package/dist/tests/e2e/recommend.e2e.test.d.ts +0 -12
- package/dist/tests/e2e/recommend.e2e.test.d.ts.map +0 -1
- package/dist/tests/e2e/recommend.e2e.test.js +0 -357
- package/dist/tests/e2e/recommend.e2e.test.js.map +0 -1
- package/dist/tests/e2e/skill-flow.e2e.test.d.ts +0 -10
- package/dist/tests/e2e/skill-flow.e2e.test.d.ts.map +0 -1
- package/dist/tests/e2e/skill-flow.e2e.test.js +0 -311
- package/dist/tests/e2e/skill-flow.e2e.test.js.map +0 -1
- package/dist/tests/e2e/suggest.e2e.test.d.ts +0 -13
- package/dist/tests/e2e/suggest.e2e.test.d.ts.map +0 -1
- package/dist/tests/e2e/suggest.e2e.test.js +0 -367
- package/dist/tests/e2e/suggest.e2e.test.js.map +0 -1
- package/dist/tests/e2e/utils/baseline-collector.d.ts +0 -107
- package/dist/tests/e2e/utils/baseline-collector.d.ts.map +0 -1
- package/dist/tests/e2e/utils/baseline-collector.js +0 -211
- package/dist/tests/e2e/utils/baseline-collector.js.map +0 -1
- package/dist/tests/e2e/utils/hardcoded-detector.d.ts +0 -46
- package/dist/tests/e2e/utils/hardcoded-detector.d.ts.map +0 -1
- package/dist/tests/e2e/utils/hardcoded-detector.js +0 -255
- package/dist/tests/e2e/utils/hardcoded-detector.js.map +0 -1
- package/dist/tests/e2e/utils/index.d.ts +0 -7
- package/dist/tests/e2e/utils/index.d.ts.map +0 -1
- package/dist/tests/e2e/utils/index.js +0 -7
- package/dist/tests/e2e/utils/index.js.map +0 -1
- package/dist/tests/e2e/utils/linear-reporter.d.ts +0 -60
- package/dist/tests/e2e/utils/linear-reporter.d.ts.map +0 -1
- package/dist/tests/e2e/utils/linear-reporter.js +0 -232
- package/dist/tests/e2e/utils/linear-reporter.js.map +0 -1
- package/dist/tests/health.test.d.ts +0 -9
- package/dist/tests/health.test.d.ts.map +0 -1
- package/dist/tests/health.test.js +0 -308
- package/dist/tests/health.test.js.map +0 -1
- package/dist/tests/integration/analyze.integration.test.d.ts +0 -2
- package/dist/tests/integration/analyze.integration.test.d.ts.map +0 -1
- package/dist/tests/integration/analyze.integration.test.js +0 -244
- package/dist/tests/integration/analyze.integration.test.js.map +0 -1
- package/dist/tests/integration/compare.integration.test.d.ts +0 -2
- package/dist/tests/integration/compare.integration.test.d.ts.map +0 -1
- package/dist/tests/integration/compare.integration.test.js +0 -120
- package/dist/tests/integration/compare.integration.test.js.map +0 -1
- package/dist/tests/integration/fixtures/test-skills.d.ts +0 -62
- package/dist/tests/integration/fixtures/test-skills.d.ts.map +0 -1
- package/dist/tests/integration/fixtures/test-skills.js +0 -644
- package/dist/tests/integration/fixtures/test-skills.js.map +0 -1
- package/dist/tests/integration/get-skill.integration.test.d.ts +0 -6
- package/dist/tests/integration/get-skill.integration.test.d.ts.map +0 -1
- package/dist/tests/integration/get-skill.integration.test.js +0 -203
- package/dist/tests/integration/get-skill.integration.test.js.map +0 -1
- package/dist/tests/integration/github-api.integration.test.d.ts +0 -14
- package/dist/tests/integration/github-api.integration.test.d.ts.map +0 -1
- package/dist/tests/integration/github-api.integration.test.js +0 -190
- package/dist/tests/integration/github-api.integration.test.js.map +0 -1
- package/dist/tests/integration/install.integration.test.d.ts +0 -6
- package/dist/tests/integration/install.integration.test.d.ts.map +0 -1
- package/dist/tests/integration/install.integration.test.js +0 -282
- package/dist/tests/integration/install.integration.test.js.map +0 -1
- package/dist/tests/integration/recommend.integration.test.d.ts +0 -2
- package/dist/tests/integration/recommend.integration.test.d.ts.map +0 -1
- package/dist/tests/integration/recommend.integration.test.js +0 -217
- package/dist/tests/integration/recommend.integration.test.js.map +0 -1
- package/dist/tests/integration/search.integration.test.d.ts +0 -6
- package/dist/tests/integration/search.integration.test.d.ts.map +0 -1
- package/dist/tests/integration/search.integration.test.js +0 -229
- package/dist/tests/integration/search.integration.test.js.map +0 -1
- package/dist/tests/integration/setup.d.ts +0 -74
- package/dist/tests/integration/setup.d.ts.map +0 -1
- package/dist/tests/integration/setup.js +0 -131
- package/dist/tests/integration/setup.js.map +0 -1
- package/dist/tests/integration/uninstall.integration.test.d.ts +0 -6
- package/dist/tests/integration/uninstall.integration.test.d.ts.map +0 -1
- package/dist/tests/integration/uninstall.integration.test.js +0 -296
- package/dist/tests/integration/uninstall.integration.test.js.map +0 -1
- package/dist/tests/integration/validate.integration.test.d.ts +0 -2
- package/dist/tests/integration/validate.integration.test.d.ts.map +0 -1
- package/dist/tests/integration/validate.integration.test.js +0 -181
- package/dist/tests/integration/validate.integration.test.js.map +0 -1
- package/dist/tests/onboarding/first-run.test.d.ts +0 -7
- package/dist/tests/onboarding/first-run.test.d.ts.map +0 -1
- package/dist/tests/onboarding/first-run.test.js +0 -258
- package/dist/tests/onboarding/first-run.test.js.map +0 -1
- package/dist/tests/performance/search-performance.test.d.ts +0 -10
- package/dist/tests/performance/search-performance.test.d.ts.map +0 -1
- package/dist/tests/performance/search-performance.test.js +0 -222
- package/dist/tests/performance/search-performance.test.js.map +0 -1
- package/dist/tests/recommend.test.d.ts +0 -6
- package/dist/tests/recommend.test.d.ts.map +0 -1
- package/dist/tests/recommend.test.js +0 -210
- package/dist/tests/recommend.test.js.map +0 -1
- package/dist/tests/suggestions/suggestion-engine.test.d.ts +0 -6
- package/dist/tests/suggestions/suggestion-engine.test.d.ts.map +0 -1
- package/dist/tests/suggestions/suggestion-engine.test.js +0 -448
- package/dist/tests/suggestions/suggestion-engine.test.js.map +0 -1
- package/dist/tests/test-utils.d.ts +0 -74
- package/dist/tests/test-utils.d.ts.map +0 -1
- package/dist/tests/test-utils.js +0 -98
- package/dist/tests/test-utils.js.map +0 -1
- package/dist/tests/tools.test.d.ts +0 -5
- package/dist/tests/tools.test.d.ts.map +0 -1
- package/dist/tests/tools.test.js +0 -138
- package/dist/tests/tools.test.js.map +0 -1
- package/dist/tests/unit/installed-skills.test.d.ts +0 -6
- package/dist/tests/unit/installed-skills.test.d.ts.map +0 -1
- package/dist/tests/unit/installed-skills.test.js +0 -285
- package/dist/tests/unit/installed-skills.test.js.map +0 -1
- package/dist/tests/unit/logger.test.d.ts +0 -6
- package/dist/tests/unit/logger.test.d.ts.map +0 -1
- package/dist/tests/unit/logger.test.js +0 -281
- package/dist/tests/unit/logger.test.js.map +0 -1
- package/dist/tests/validate.test.d.ts +0 -5
- package/dist/tests/validate.test.d.ts.map +0 -1
- package/dist/tests/validate.test.js +0 -303
- package/dist/tests/validate.test.js.map +0 -1
- package/dist/tests/webhooks/proxy-trust.security.test.d.ts +0 -8
- package/dist/tests/webhooks/proxy-trust.security.test.d.ts.map +0 -1
- package/dist/tests/webhooks/proxy-trust.security.test.js +0 -145
- package/dist/tests/webhooks/proxy-trust.security.test.js.map +0 -1
- package/dist/tests/webhooks/rate-limiter.security.test.d.ts +0 -8
- package/dist/tests/webhooks/rate-limiter.security.test.d.ts.map +0 -1
- package/dist/tests/webhooks/rate-limiter.security.test.js +0 -122
- package/dist/tests/webhooks/rate-limiter.security.test.js.map +0 -1
- 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
|
@@ -1,260 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview MCP Get Skill Tool for retrieving detailed skill information
|
|
3
|
-
* @module @skillsmith/mcp-server/tools/get-skill
|
|
4
|
-
* @see {@link https://github.com/wrsmith108/skillsmith|Skillsmith Repository}
|
|
5
|
-
* @see SMI-790: Wire get-skill tool to SkillRepository
|
|
6
|
-
*
|
|
7
|
-
* Retrieves comprehensive details for a specific skill including:
|
|
8
|
-
* - Basic metadata (name, author, version, category)
|
|
9
|
-
* - Quality scores with breakdown (quality, popularity, maintenance, security, documentation)
|
|
10
|
-
* - Trust tier with explanation
|
|
11
|
-
* - Repository link and tags
|
|
12
|
-
* - Installation command
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* // Get skill by ID with context
|
|
16
|
-
* const response = await executeGetSkill({ id: 'anthropic/commit' }, context);
|
|
17
|
-
* console.log(response.skill.description);
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
* // Format for terminal display
|
|
21
|
-
* const response = await executeGetSkill({ id: 'community/jest-helper' }, context);
|
|
22
|
-
* console.log(formatSkillDetails(response));
|
|
23
|
-
*/
|
|
24
|
-
import { z } from 'zod';
|
|
25
|
-
import { TrustTierDescriptions, SkillsmithError, ErrorCodes, trackSkillView, } from '@skillsmith/core';
|
|
26
|
-
import { isValidSkillId, mapTrustTierFromDb, extractCategoryFromTags } from '../utils/validation.js';
|
|
27
|
-
/**
|
|
28
|
-
* Zod schema for get-skill input validation
|
|
29
|
-
*/
|
|
30
|
-
export const getSkillInputSchema = z.object({
|
|
31
|
-
id: z.string().min(1, 'Skill ID is required'),
|
|
32
|
-
});
|
|
33
|
-
/**
|
|
34
|
-
* Get skill tool schema for MCP
|
|
35
|
-
*/
|
|
36
|
-
export const getSkillToolSchema = {
|
|
37
|
-
name: 'get_skill',
|
|
38
|
-
description: 'Get full details for a specific skill by ID',
|
|
39
|
-
inputSchema: {
|
|
40
|
-
type: 'object',
|
|
41
|
-
properties: {
|
|
42
|
-
id: {
|
|
43
|
-
type: 'string',
|
|
44
|
-
description: 'The skill ID (e.g., "anthropic/commit" or UUID)',
|
|
45
|
-
},
|
|
46
|
-
},
|
|
47
|
-
required: ['id'],
|
|
48
|
-
},
|
|
49
|
-
};
|
|
50
|
-
// isValidSkillId imported from ../utils/validation.js
|
|
51
|
-
/**
|
|
52
|
-
* Retrieve full details for a specific skill by ID.
|
|
53
|
-
*
|
|
54
|
-
* SMI-1183: Uses API as primary source with local DB fallback.
|
|
55
|
-
* - Tries live API first (api.skillsmith.app)
|
|
56
|
-
* - Falls back to local SkillRepository if API is offline or fails
|
|
57
|
-
*
|
|
58
|
-
* @param input - Input containing the skill ID to retrieve
|
|
59
|
-
* @param context - Tool context with API client and local services
|
|
60
|
-
* @returns Promise resolving to skill details and install command
|
|
61
|
-
* @throws {SkillsmithError} VALIDATION_REQUIRED_FIELD - When ID is empty
|
|
62
|
-
* @throws {SkillsmithError} SKILL_INVALID_ID - When ID format is invalid
|
|
63
|
-
* @throws {SkillsmithError} SKILL_NOT_FOUND - When skill doesn't exist
|
|
64
|
-
*
|
|
65
|
-
* @example
|
|
66
|
-
* // Get a verified skill
|
|
67
|
-
* const response = await executeGetSkill({ id: 'anthropic/commit' }, context);
|
|
68
|
-
* console.log(response.skill.score); // 95
|
|
69
|
-
*/
|
|
70
|
-
export async function executeGetSkill(input, context) {
|
|
71
|
-
const startTime = performance.now();
|
|
72
|
-
// Validate input
|
|
73
|
-
if (!input.id || input.id.trim().length === 0) {
|
|
74
|
-
throw new SkillsmithError(ErrorCodes.VALIDATION_REQUIRED_FIELD, 'Skill ID is required', {
|
|
75
|
-
details: { field: 'id' },
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
const skillId = input.id.trim();
|
|
79
|
-
// Validate ID format
|
|
80
|
-
if (!isValidSkillId(skillId)) {
|
|
81
|
-
throw new SkillsmithError(ErrorCodes.SKILL_INVALID_ID, 'Invalid skill ID format: "' + input.id + '"', {
|
|
82
|
-
details: { id: input.id },
|
|
83
|
-
suggestion: 'Skill IDs should be in format "author/skill-name" (e.g., "anthropic/commit") or a valid UUID',
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
// SMI-1183: Try API first, fall back to local DB
|
|
87
|
-
if (!context.apiClient.isOffline()) {
|
|
88
|
-
try {
|
|
89
|
-
const apiResponse = await context.apiClient.getSkill(skillId);
|
|
90
|
-
const apiSkill = apiResponse.data;
|
|
91
|
-
// Convert API skill to MCP skill format
|
|
92
|
-
const skill = {
|
|
93
|
-
id: apiSkill.id,
|
|
94
|
-
name: apiSkill.name,
|
|
95
|
-
description: apiSkill.description || '',
|
|
96
|
-
author: apiSkill.author || 'unknown',
|
|
97
|
-
repository: apiSkill.repo_url || undefined,
|
|
98
|
-
version: undefined,
|
|
99
|
-
category: extractCategoryFromTags(apiSkill.tags),
|
|
100
|
-
trustTier: mapTrustTierFromDb(apiSkill.trust_tier),
|
|
101
|
-
score: Math.round((apiSkill.quality_score ?? 0) * 100),
|
|
102
|
-
scoreBreakdown: undefined,
|
|
103
|
-
tags: apiSkill.tags || [],
|
|
104
|
-
installCommand: 'claude skill add ' + apiSkill.id,
|
|
105
|
-
createdAt: apiSkill.created_at,
|
|
106
|
-
updatedAt: apiSkill.updated_at,
|
|
107
|
-
};
|
|
108
|
-
const endTime = performance.now();
|
|
109
|
-
// SMI-1184: Track skill view event (silent on failure)
|
|
110
|
-
if (context.distinctId) {
|
|
111
|
-
trackSkillView(context.distinctId, skill.id, 'mcp');
|
|
112
|
-
}
|
|
113
|
-
return {
|
|
114
|
-
skill,
|
|
115
|
-
installCommand: skill.installCommand || 'claude skill add ' + skill.id,
|
|
116
|
-
timing: {
|
|
117
|
-
totalMs: Math.round(endTime - startTime),
|
|
118
|
-
},
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
catch (error) {
|
|
122
|
-
// SMI-1183: Log and fall through to local database for all errors
|
|
123
|
-
// This allows local-only skills to be found even if API returns 404
|
|
124
|
-
console.warn('[skillsmith] API getSkill failed, using local database:', error.message);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
// Fallback: Look up skill from local database using SkillRepository
|
|
128
|
-
const dbSkill = context.skillRepository.findById(skillId);
|
|
129
|
-
if (!dbSkill) {
|
|
130
|
-
throw new SkillsmithError(ErrorCodes.SKILL_NOT_FOUND, 'Skill "' + input.id + '" not found', {
|
|
131
|
-
details: { id: input.id },
|
|
132
|
-
suggestion: 'Try searching for similar skills with the search tool',
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
// Convert database skill to MCP skill format
|
|
136
|
-
const skill = {
|
|
137
|
-
id: dbSkill.id,
|
|
138
|
-
name: dbSkill.name,
|
|
139
|
-
description: dbSkill.description || '',
|
|
140
|
-
author: dbSkill.author || 'unknown',
|
|
141
|
-
repository: dbSkill.repoUrl || undefined,
|
|
142
|
-
version: undefined, // Version not stored in current schema
|
|
143
|
-
category: extractCategoryFromTags(dbSkill.tags),
|
|
144
|
-
trustTier: mapTrustTierFromDb(dbSkill.trustTier),
|
|
145
|
-
score: Math.round((dbSkill.qualityScore ?? 0) * 100),
|
|
146
|
-
scoreBreakdown: undefined, // Breakdown not stored in current schema
|
|
147
|
-
tags: dbSkill.tags || [],
|
|
148
|
-
installCommand: 'claude skill add ' + dbSkill.id,
|
|
149
|
-
createdAt: dbSkill.createdAt,
|
|
150
|
-
updatedAt: dbSkill.updatedAt,
|
|
151
|
-
};
|
|
152
|
-
const endTime = performance.now();
|
|
153
|
-
// SMI-1184: Track skill view event (silent on failure)
|
|
154
|
-
if (context.distinctId) {
|
|
155
|
-
trackSkillView(context.distinctId, skill.id, 'mcp');
|
|
156
|
-
}
|
|
157
|
-
return {
|
|
158
|
-
skill,
|
|
159
|
-
installCommand: skill.installCommand || 'claude skill add ' + skill.id,
|
|
160
|
-
timing: {
|
|
161
|
-
totalMs: Math.round(endTime - startTime),
|
|
162
|
-
},
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Format skill details for terminal/CLI display.
|
|
167
|
-
*
|
|
168
|
-
* Produces a comprehensive human-readable string including:
|
|
169
|
-
* - Basic info (ID, author, version, category)
|
|
170
|
-
* - Full description
|
|
171
|
-
* - Trust tier with explanation
|
|
172
|
-
* - Visual score breakdown bars
|
|
173
|
-
* - Repository and tags
|
|
174
|
-
* - Installation command
|
|
175
|
-
*
|
|
176
|
-
* @param response - Get skill response from executeGetSkill
|
|
177
|
-
* @returns Formatted string suitable for terminal output
|
|
178
|
-
*
|
|
179
|
-
* @example
|
|
180
|
-
* const response = await executeGetSkill({ id: 'anthropic/commit' });
|
|
181
|
-
* console.log(formatSkillDetails(response));
|
|
182
|
-
* // Output:
|
|
183
|
-
* // === commit ===
|
|
184
|
-
* // ID: anthropic/commit
|
|
185
|
-
* // Author: anthropic
|
|
186
|
-
* // Version: 1.2.0
|
|
187
|
-
* // ...
|
|
188
|
-
*/
|
|
189
|
-
export function formatSkillDetails(response) {
|
|
190
|
-
const skill = response.skill;
|
|
191
|
-
const lines = [];
|
|
192
|
-
lines.push('\n=== ' + skill.name + ' ===\n');
|
|
193
|
-
// Basic info
|
|
194
|
-
lines.push('ID: ' + skill.id);
|
|
195
|
-
lines.push('Author: ' + skill.author);
|
|
196
|
-
lines.push('Version: ' + (skill.version || 'N/A'));
|
|
197
|
-
lines.push('Category: ' + skill.category);
|
|
198
|
-
lines.push('');
|
|
199
|
-
// Description
|
|
200
|
-
lines.push('Description:');
|
|
201
|
-
lines.push(' ' + skill.description);
|
|
202
|
-
lines.push('');
|
|
203
|
-
// Trust tier with explanation
|
|
204
|
-
lines.push('Trust Tier: ' + formatTrustTier(skill.trustTier));
|
|
205
|
-
lines.push(' ' + TrustTierDescriptions[skill.trustTier]);
|
|
206
|
-
lines.push('');
|
|
207
|
-
// Score breakdown
|
|
208
|
-
lines.push('Overall Score: ' + skill.score + '/100');
|
|
209
|
-
if (skill.scoreBreakdown) {
|
|
210
|
-
lines.push('Score Breakdown:');
|
|
211
|
-
lines.push(' Quality: ' + formatScoreBar(skill.scoreBreakdown.quality));
|
|
212
|
-
lines.push(' Popularity: ' + formatScoreBar(skill.scoreBreakdown.popularity));
|
|
213
|
-
lines.push(' Maintenance: ' + formatScoreBar(skill.scoreBreakdown.maintenance));
|
|
214
|
-
lines.push(' Security: ' + formatScoreBar(skill.scoreBreakdown.security));
|
|
215
|
-
lines.push(' Documentation: ' + formatScoreBar(skill.scoreBreakdown.documentation));
|
|
216
|
-
}
|
|
217
|
-
lines.push('');
|
|
218
|
-
// Repository
|
|
219
|
-
if (skill.repository) {
|
|
220
|
-
lines.push('Repository: ' + skill.repository);
|
|
221
|
-
}
|
|
222
|
-
// Tags
|
|
223
|
-
if (skill.tags && skill.tags.length > 0) {
|
|
224
|
-
lines.push('Tags: ' + skill.tags.join(', '));
|
|
225
|
-
}
|
|
226
|
-
lines.push('');
|
|
227
|
-
// Installation
|
|
228
|
-
lines.push('--- Installation ---');
|
|
229
|
-
lines.push(' ' + response.installCommand);
|
|
230
|
-
lines.push('');
|
|
231
|
-
// Timing
|
|
232
|
-
lines.push('---');
|
|
233
|
-
lines.push('Retrieved in ' + response.timing.totalMs + 'ms');
|
|
234
|
-
return lines.join('\n');
|
|
235
|
-
}
|
|
236
|
-
/**
|
|
237
|
-
* Format trust tier with visual indicator
|
|
238
|
-
*/
|
|
239
|
-
function formatTrustTier(tier) {
|
|
240
|
-
switch (tier) {
|
|
241
|
-
case 'verified':
|
|
242
|
-
return '[*] VERIFIED';
|
|
243
|
-
case 'community':
|
|
244
|
-
return '[+] COMMUNITY';
|
|
245
|
-
case 'experimental':
|
|
246
|
-
return '[~] EXPERIMENTAL';
|
|
247
|
-
case 'unknown':
|
|
248
|
-
return '[?] UNKNOWN';
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
/**
|
|
252
|
-
* Format score as a visual bar
|
|
253
|
-
*/
|
|
254
|
-
function formatScoreBar(score) {
|
|
255
|
-
const filled = Math.round(score / 10);
|
|
256
|
-
const empty = 10 - filled;
|
|
257
|
-
const bar = '='.repeat(filled) + '-'.repeat(empty);
|
|
258
|
-
return '[' + bar + '] ' + score + '/100';
|
|
259
|
-
}
|
|
260
|
-
//# sourceMappingURL=get-skill.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-skill.js","sourceRoot":"","sources":["../../../src/tools/get-skill.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP Tools exports
|
|
3
|
-
*/
|
|
4
|
-
export { searchToolSchema, executeSearch, formatSearchResults } from './search.js';
|
|
5
|
-
export type { SearchInput } from './search.js';
|
|
6
|
-
export { installTool, installSkill, installInputSchema } from './install.js';
|
|
7
|
-
export type { InstallInput, InstallResult } from './install.js';
|
|
8
|
-
export { uninstallTool, uninstallSkill, uninstallInputSchema, listInstalledSkills, } from './uninstall.js';
|
|
9
|
-
export type { UninstallInput, UninstallResult } from './uninstall.js';
|
|
10
|
-
export { getSkillToolSchema, executeGetSkill } from './get-skill.js';
|
|
11
|
-
export type { GetSkillInput } from './get-skill.js';
|
|
12
|
-
export { recommendToolSchema, recommendInputSchema, executeRecommend, formatRecommendations, } from './recommend.js';
|
|
13
|
-
export type { RecommendInput, SkillRecommendation, RecommendResponse } from './recommend.js';
|
|
14
|
-
export { validateToolSchema, validateInputSchema, executeValidate, formatValidationResults, } from './validate.js';
|
|
15
|
-
export type { ValidateInput, ValidationError, ValidateResponse } from './validate.js';
|
|
16
|
-
export { compareToolSchema, compareInputSchema, executeCompare, formatComparisonResults, } from './compare.js';
|
|
17
|
-
export type { CompareInput, SkillSummary, SkillDifference, CompareResponse } from './compare.js';
|
|
18
|
-
export { analyzeToolSchema, analyzeInputSchema, executeAnalyze, formatAnalysisResults, } from './analyze.js';
|
|
19
|
-
export type { AnalyzeInput, AnalyzeFramework, AnalyzeDependency, AnalyzeResponse, } from './analyze.js';
|
|
20
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAClF,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAG9C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAC5E,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAG/D,OAAO,EACL,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,gBAAgB,CAAA;AACvB,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAGrE,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AACpE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAGnD,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,gBAAgB,CAAA;AACvB,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAG5F,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,uBAAuB,GACxB,MAAM,eAAe,CAAA;AACtB,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAGrF,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,uBAAuB,GACxB,MAAM,cAAc,CAAA;AACrB,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAGhG,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,qBAAqB,GACtB,MAAM,cAAc,CAAA;AACrB,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,GAChB,MAAM,cAAc,CAAA"}
|
package/dist/src/tools/index.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP Tools exports
|
|
3
|
-
*/
|
|
4
|
-
// Search tool (SMI-581)
|
|
5
|
-
export { searchToolSchema, executeSearch, formatSearchResults } from './search.js';
|
|
6
|
-
// Install tool (SMI-586)
|
|
7
|
-
export { installTool, installSkill, installInputSchema } from './install.js';
|
|
8
|
-
// Uninstall tool (SMI-588)
|
|
9
|
-
export { uninstallTool, uninstallSkill, uninstallInputSchema, listInstalledSkills, } from './uninstall.js';
|
|
10
|
-
// Get skill tool (SMI-582)
|
|
11
|
-
export { getSkillToolSchema, executeGetSkill } from './get-skill.js';
|
|
12
|
-
// Recommend tool (SMI-741)
|
|
13
|
-
export { recommendToolSchema, recommendInputSchema, executeRecommend, formatRecommendations, } from './recommend.js';
|
|
14
|
-
// Validate tool (SMI-742)
|
|
15
|
-
export { validateToolSchema, validateInputSchema, executeValidate, formatValidationResults, } from './validate.js';
|
|
16
|
-
// Compare tool (SMI-743)
|
|
17
|
-
export { compareToolSchema, compareInputSchema, executeCompare, formatComparisonResults, } from './compare.js';
|
|
18
|
-
// Analyze codebase tool (SMI-600)
|
|
19
|
-
export { analyzeToolSchema, analyzeInputSchema, executeAnalyze, formatAnalysisResults, } from './analyze.js';
|
|
20
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAwB;AACxB,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGlF,yBAAyB;AACzB,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAG5E,2BAA2B;AAC3B,OAAO,EACL,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,gBAAgB,CAAA;AAGvB,2BAA2B;AAC3B,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAGpE,2BAA2B;AAC3B,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,gBAAgB,CAAA;AAGvB,0BAA0B;AAC1B,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,uBAAuB,GACxB,MAAM,eAAe,CAAA;AAGtB,yBAAyB;AACzB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,uBAAuB,GACxB,MAAM,cAAc,CAAA;AAGrB,kCAAkC;AAClC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,qBAAqB,GACtB,MAAM,cAAc,CAAA"}
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview MCP Install Skill Tool for downloading and installing skills
|
|
3
|
-
* @module @skillsmith/mcp-server/tools/install
|
|
4
|
-
* @see {@link https://github.com/wrsmith108/skillsmith|Skillsmith Repository}
|
|
5
|
-
*
|
|
6
|
-
* Provides skill installation functionality with:
|
|
7
|
-
* - GitHub repository fetching (supports owner/repo and full URLs)
|
|
8
|
-
* - Automatic security scanning before installation
|
|
9
|
-
* - SKILL.md validation
|
|
10
|
-
* - Manifest tracking of installed skills
|
|
11
|
-
* - Optional file fetching (README.md, examples.md, config.json)
|
|
12
|
-
*
|
|
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
|
-
*/
|
|
33
|
-
import { z } from 'zod';
|
|
34
|
-
import { type ScanReport } from '@skillsmith/core';
|
|
35
|
-
import type { ToolContext } from '../context.js';
|
|
36
|
-
export declare const installInputSchema: z.ZodObject<{
|
|
37
|
-
skillId: z.ZodString;
|
|
38
|
-
force: z.ZodDefault<z.ZodBoolean>;
|
|
39
|
-
skipScan: z.ZodDefault<z.ZodBoolean>;
|
|
40
|
-
}, "strip", z.ZodTypeAny, {
|
|
41
|
-
skillId: string;
|
|
42
|
-
force: boolean;
|
|
43
|
-
skipScan: boolean;
|
|
44
|
-
}, {
|
|
45
|
-
skillId: string;
|
|
46
|
-
force?: boolean | undefined;
|
|
47
|
-
skipScan?: boolean | undefined;
|
|
48
|
-
}>;
|
|
49
|
-
export type InstallInput = z.infer<typeof installInputSchema>;
|
|
50
|
-
export interface InstallResult {
|
|
51
|
-
success: boolean;
|
|
52
|
-
skillId: string;
|
|
53
|
-
installPath: string;
|
|
54
|
-
securityReport?: ScanReport;
|
|
55
|
-
tips?: string[];
|
|
56
|
-
error?: string;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Install a skill from GitHub to the local Claude Code skills directory.
|
|
60
|
-
*
|
|
61
|
-
* This function:
|
|
62
|
-
* 1. Parses the skill ID or GitHub URL
|
|
63
|
-
* 2. Checks if already installed (returns error unless force=true)
|
|
64
|
-
* 3. Fetches SKILL.md from GitHub (required)
|
|
65
|
-
* 4. Validates SKILL.md content
|
|
66
|
-
* 5. Runs security scan (unless skipScan=true)
|
|
67
|
-
* 6. Creates installation directory at ~/.claude/skills/{skillName}
|
|
68
|
-
* 7. Writes skill files
|
|
69
|
-
* 8. Updates manifest at ~/.skillsmith/manifest.json
|
|
70
|
-
*
|
|
71
|
-
* @param input - Installation parameters
|
|
72
|
-
* @param input.skillId - Skill ID (owner/repo) or full GitHub URL
|
|
73
|
-
* @param input.force - Force reinstall if skill already exists (default: false)
|
|
74
|
-
* @param input.skipScan - Skip security scan (default: false, not recommended)
|
|
75
|
-
* @returns Promise resolving to installation result with success status
|
|
76
|
-
*
|
|
77
|
-
* @example
|
|
78
|
-
* // Successful installation
|
|
79
|
-
* const result = await installSkill({ skillId: 'anthropic/commit' });
|
|
80
|
-
* if (result.success) {
|
|
81
|
-
* console.log(`Installed to ${result.installPath}`);
|
|
82
|
-
* result.tips?.forEach(tip => console.log(tip));
|
|
83
|
-
* }
|
|
84
|
-
*
|
|
85
|
-
* @example
|
|
86
|
-
* // Handle security scan failure
|
|
87
|
-
* const result = await installSkill({ skillId: 'untrusted/skill' });
|
|
88
|
-
* if (!result.success && result.securityReport) {
|
|
89
|
-
* console.log('Security issues found:');
|
|
90
|
-
* result.securityReport.findings.forEach(f =>
|
|
91
|
-
* console.log(` ${f.severity}: ${f.message}`)
|
|
92
|
-
* );
|
|
93
|
-
* }
|
|
94
|
-
*/
|
|
95
|
-
export declare function installSkill(input: InstallInput, _context?: ToolContext): Promise<InstallResult>;
|
|
96
|
-
/**
|
|
97
|
-
* MCP tool definition
|
|
98
|
-
*/
|
|
99
|
-
export declare const installTool: {
|
|
100
|
-
name: string;
|
|
101
|
-
description: string;
|
|
102
|
-
inputSchema: {
|
|
103
|
-
type: "object";
|
|
104
|
-
properties: {
|
|
105
|
-
skillId: {
|
|
106
|
-
type: string;
|
|
107
|
-
description: string;
|
|
108
|
-
};
|
|
109
|
-
force: {
|
|
110
|
-
type: string;
|
|
111
|
-
description: string;
|
|
112
|
-
};
|
|
113
|
-
skipScan: {
|
|
114
|
-
type: string;
|
|
115
|
-
description: string;
|
|
116
|
-
};
|
|
117
|
-
};
|
|
118
|
-
required: string[];
|
|
119
|
-
};
|
|
120
|
-
};
|
|
121
|
-
export default installTool;
|
|
122
|
-
//# sourceMappingURL=install.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/tools/install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAInE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAGhD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAI7B,CAAA;AAEF,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAG7D,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;CACf;AAkID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,YAAY,EACnB,QAAQ,CAAC,EAAE,WAAW,GACrB,OAAO,CAAC,aAAa,CAAC,CAyIxB;AAED;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;CAsBvB,CAAA;AAED,eAAe,WAAW,CAAA"}
|