@skillsmith/mcp-server 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -0
- package/dist/src/__tests__/get-skill.test.d.ts +6 -0
- package/dist/src/__tests__/get-skill.test.d.ts.map +1 -0
- package/dist/src/__tests__/get-skill.test.js +88 -0
- package/dist/src/__tests__/get-skill.test.js.map +1 -0
- package/dist/src/__tests__/middleware/errorFormatter.test.d.ts +7 -0
- package/dist/src/__tests__/middleware/errorFormatter.test.d.ts.map +1 -0
- package/dist/src/__tests__/middleware/errorFormatter.test.js +304 -0
- package/dist/src/__tests__/middleware/errorFormatter.test.js.map +1 -0
- package/dist/src/__tests__/middleware/license.test.d.ts +7 -0
- package/dist/src/__tests__/middleware/license.test.d.ts.map +1 -0
- package/dist/src/__tests__/middleware/license.test.js +500 -0
- package/dist/src/__tests__/middleware/license.test.js.map +1 -0
- package/dist/src/__tests__/search.test.d.ts +6 -0
- package/dist/src/__tests__/search.test.d.ts.map +1 -0
- package/dist/src/__tests__/search.test.js +86 -0
- package/dist/src/__tests__/search.test.js.map +1 -0
- package/dist/src/__tests__/test-utils.d.ts +19 -0
- package/dist/src/__tests__/test-utils.d.ts.map +1 -0
- package/dist/src/__tests__/test-utils.js +87 -0
- package/dist/src/__tests__/test-utils.js.map +1 -0
- package/dist/src/context/index.d.ts +19 -0
- package/dist/src/context/index.d.ts.map +1 -0
- package/dist/src/context/index.js +25 -0
- package/dist/src/context/index.js.map +1 -0
- package/dist/src/context/project-detector.d.ts +145 -0
- package/dist/src/context/project-detector.d.ts.map +1 -0
- package/dist/src/context/project-detector.js +321 -0
- package/dist/src/context/project-detector.js.map +1 -0
- package/dist/src/context.d.ts +100 -0
- package/dist/src/context.d.ts.map +1 -0
- package/dist/src/context.js +157 -0
- package/dist/src/context.js.map +1 -0
- package/dist/src/core-shim.d.ts +7 -0
- package/dist/src/core-shim.d.ts.map +1 -0
- package/dist/src/core-shim.js +9 -0
- package/dist/src/core-shim.js.map +1 -0
- package/dist/src/health/healthCheck.d.ts +88 -0
- package/dist/src/health/healthCheck.d.ts.map +1 -0
- package/dist/src/health/healthCheck.js +117 -0
- package/dist/src/health/healthCheck.js.map +1 -0
- package/dist/src/health/index.d.ts +21 -0
- package/dist/src/health/index.d.ts.map +1 -0
- package/dist/src/health/index.js +21 -0
- package/dist/src/health/index.js.map +1 -0
- package/dist/src/health/readinessCheck.d.ts +139 -0
- package/dist/src/health/readinessCheck.d.ts.map +1 -0
- package/dist/src/health/readinessCheck.js +266 -0
- package/dist/src/health/readinessCheck.js.map +1 -0
- package/dist/src/index.d.ts +8 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +178 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/index.test.d.ts +2 -0
- package/dist/src/index.test.d.ts.map +1 -0
- package/dist/src/index.test.js +43 -0
- package/dist/src/index.test.js.map +1 -0
- package/dist/src/logger.d.ts +26 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js +179 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/middleware/__tests__/csp.test.d.ts +2 -0
- package/dist/src/middleware/__tests__/csp.test.d.ts.map +1 -0
- package/dist/src/middleware/__tests__/csp.test.js +389 -0
- package/dist/src/middleware/__tests__/csp.test.js.map +1 -0
- package/dist/src/middleware/csp.d.ts +87 -0
- package/dist/src/middleware/csp.d.ts.map +1 -0
- package/dist/src/middleware/csp.js +273 -0
- package/dist/src/middleware/csp.js.map +1 -0
- package/dist/src/middleware/degradation.d.ts +99 -0
- package/dist/src/middleware/degradation.d.ts.map +1 -0
- package/dist/src/middleware/degradation.js +315 -0
- package/dist/src/middleware/degradation.js.map +1 -0
- package/dist/src/middleware/errorFormatter.d.ts +119 -0
- package/dist/src/middleware/errorFormatter.d.ts.map +1 -0
- package/dist/src/middleware/errorFormatter.js +294 -0
- package/dist/src/middleware/errorFormatter.js.map +1 -0
- package/dist/src/middleware/index.d.ts +10 -0
- package/dist/src/middleware/index.d.ts.map +1 -0
- package/dist/src/middleware/index.js +14 -0
- package/dist/src/middleware/index.js.map +1 -0
- package/dist/src/middleware/license.d.ts +161 -0
- package/dist/src/middleware/license.d.ts.map +1 -0
- package/dist/src/middleware/license.js +281 -0
- package/dist/src/middleware/license.js.map +1 -0
- package/dist/src/middleware/toolFeatureMapping.d.ts +36 -0
- package/dist/src/middleware/toolFeatureMapping.d.ts.map +1 -0
- package/dist/src/middleware/toolFeatureMapping.js +90 -0
- package/dist/src/middleware/toolFeatureMapping.js.map +1 -0
- package/dist/src/onboarding/first-run.d.ts +64 -0
- package/dist/src/onboarding/first-run.d.ts.map +1 -0
- package/dist/src/onboarding/first-run.js +77 -0
- package/dist/src/onboarding/first-run.js.map +1 -0
- package/dist/src/onboarding/index.d.ts +7 -0
- package/dist/src/onboarding/index.d.ts.map +1 -0
- package/dist/src/onboarding/index.js +7 -0
- package/dist/src/onboarding/index.js.map +1 -0
- package/dist/src/suggestions/index.d.ts +21 -0
- package/dist/src/suggestions/index.d.ts.map +1 -0
- package/dist/src/suggestions/index.js +20 -0
- package/dist/src/suggestions/index.js.map +1 -0
- package/dist/src/suggestions/suggestion-engine.d.ts +185 -0
- package/dist/src/suggestions/suggestion-engine.d.ts.map +1 -0
- package/dist/src/suggestions/suggestion-engine.js +352 -0
- package/dist/src/suggestions/suggestion-engine.js.map +1 -0
- package/dist/src/suggestions/types.d.ts +88 -0
- package/dist/src/suggestions/types.d.ts.map +1 -0
- package/dist/src/suggestions/types.js +21 -0
- package/dist/src/suggestions/types.js.map +1 -0
- package/dist/src/tools/analyze.d.ts +151 -0
- package/dist/src/tools/analyze.d.ts.map +1 -0
- package/dist/src/tools/analyze.js +205 -0
- package/dist/src/tools/analyze.js.map +1 -0
- package/dist/src/tools/compare.d.ts +149 -0
- package/dist/src/tools/compare.d.ts.map +1 -0
- package/dist/src/tools/compare.js +464 -0
- package/dist/src/tools/compare.js.map +1 -0
- package/dist/src/tools/get-skill.d.ts +116 -0
- package/dist/src/tools/get-skill.d.ts.map +1 -0
- package/dist/src/tools/get-skill.js +224 -0
- package/dist/src/tools/get-skill.js.map +1 -0
- package/dist/src/tools/index.d.ts +20 -0
- package/dist/src/tools/index.d.ts.map +1 -0
- package/dist/src/tools/index.js +20 -0
- package/dist/src/tools/index.js.map +1 -0
- package/dist/src/tools/install.d.ts +122 -0
- package/dist/src/tools/install.d.ts.map +1 -0
- package/dist/src/tools/install.js +314 -0
- package/dist/src/tools/install.js.map +1 -0
- package/dist/src/tools/recommend.d.ts +171 -0
- package/dist/src/tools/recommend.d.ts.map +1 -0
- package/dist/src/tools/recommend.js +325 -0
- package/dist/src/tools/recommend.js.map +1 -0
- package/dist/src/tools/search.d.ts +121 -0
- package/dist/src/tools/search.d.ts.map +1 -0
- package/dist/src/tools/search.js +249 -0
- package/dist/src/tools/search.js.map +1 -0
- package/dist/src/tools/suggest.d.ts +181 -0
- package/dist/src/tools/suggest.d.ts.map +1 -0
- package/dist/src/tools/suggest.js +342 -0
- package/dist/src/tools/suggest.js.map +1 -0
- package/dist/src/tools/uninstall.d.ts +123 -0
- package/dist/src/tools/uninstall.d.ts.map +1 -0
- package/dist/src/tools/uninstall.js +250 -0
- package/dist/src/tools/uninstall.js.map +1 -0
- package/dist/src/tools/validate.d.ts +122 -0
- package/dist/src/tools/validate.d.ts.map +1 -0
- package/dist/src/tools/validate.js +497 -0
- package/dist/src/tools/validate.js.map +1 -0
- package/dist/src/utils/installed-skills.d.ts +101 -0
- package/dist/src/utils/installed-skills.d.ts.map +1 -0
- package/dist/src/utils/installed-skills.js +220 -0
- package/dist/src/utils/installed-skills.js.map +1 -0
- package/dist/src/utils/validation.d.ts +76 -0
- package/dist/src/utils/validation.d.ts.map +1 -0
- package/dist/src/utils/validation.js +153 -0
- package/dist/src/utils/validation.js.map +1 -0
- package/dist/src/webhooks/index.d.ts +8 -0
- package/dist/src/webhooks/index.d.ts.map +1 -0
- package/dist/src/webhooks/index.js +9 -0
- package/dist/src/webhooks/index.js.map +1 -0
- package/dist/src/webhooks/webhook-endpoint.d.ts +149 -0
- package/dist/src/webhooks/webhook-endpoint.d.ts.map +1 -0
- package/dist/src/webhooks/webhook-endpoint.js +339 -0
- package/dist/src/webhooks/webhook-endpoint.js.map +1 -0
- package/dist/tests/compare.test.d.ts +6 -0
- package/dist/tests/compare.test.d.ts.map +1 -0
- package/dist/tests/compare.test.js +225 -0
- package/dist/tests/compare.test.js.map +1 -0
- package/dist/tests/context/project-detector.test.d.ts +6 -0
- package/dist/tests/context/project-detector.test.d.ts.map +1 -0
- package/dist/tests/context/project-detector.test.js +719 -0
- package/dist/tests/context/project-detector.test.js.map +1 -0
- package/dist/tests/e2e/compare.e2e.test.d.ts +10 -0
- package/dist/tests/e2e/compare.e2e.test.d.ts.map +1 -0
- package/dist/tests/e2e/compare.e2e.test.js +286 -0
- package/dist/tests/e2e/compare.e2e.test.js.map +1 -0
- package/dist/tests/e2e/install-flow.e2e.test.d.ts +10 -0
- package/dist/tests/e2e/install-flow.e2e.test.d.ts.map +1 -0
- package/dist/tests/e2e/install-flow.e2e.test.js +209 -0
- package/dist/tests/e2e/install-flow.e2e.test.js.map +1 -0
- package/dist/tests/e2e/recommend.e2e.test.d.ts +12 -0
- package/dist/tests/e2e/recommend.e2e.test.d.ts.map +1 -0
- package/dist/tests/e2e/recommend.e2e.test.js +347 -0
- package/dist/tests/e2e/recommend.e2e.test.js.map +1 -0
- package/dist/tests/e2e/skill-flow.e2e.test.d.ts +10 -0
- package/dist/tests/e2e/skill-flow.e2e.test.d.ts.map +1 -0
- package/dist/tests/e2e/skill-flow.e2e.test.js +280 -0
- package/dist/tests/e2e/skill-flow.e2e.test.js.map +1 -0
- package/dist/tests/e2e/suggest.e2e.test.d.ts +13 -0
- package/dist/tests/e2e/suggest.e2e.test.d.ts.map +1 -0
- package/dist/tests/e2e/suggest.e2e.test.js +347 -0
- package/dist/tests/e2e/suggest.e2e.test.js.map +1 -0
- package/dist/tests/e2e/utils/baseline-collector.d.ts +107 -0
- package/dist/tests/e2e/utils/baseline-collector.d.ts.map +1 -0
- package/dist/tests/e2e/utils/baseline-collector.js +211 -0
- package/dist/tests/e2e/utils/baseline-collector.js.map +1 -0
- package/dist/tests/e2e/utils/hardcoded-detector.d.ts +46 -0
- package/dist/tests/e2e/utils/hardcoded-detector.d.ts.map +1 -0
- package/dist/tests/e2e/utils/hardcoded-detector.js +255 -0
- package/dist/tests/e2e/utils/hardcoded-detector.js.map +1 -0
- package/dist/tests/e2e/utils/index.d.ts +7 -0
- package/dist/tests/e2e/utils/index.d.ts.map +1 -0
- package/dist/tests/e2e/utils/index.js +7 -0
- package/dist/tests/e2e/utils/index.js.map +1 -0
- package/dist/tests/e2e/utils/linear-reporter.d.ts +60 -0
- package/dist/tests/e2e/utils/linear-reporter.d.ts.map +1 -0
- package/dist/tests/e2e/utils/linear-reporter.js +232 -0
- package/dist/tests/e2e/utils/linear-reporter.js.map +1 -0
- package/dist/tests/health.test.d.ts +9 -0
- package/dist/tests/health.test.d.ts.map +1 -0
- package/dist/tests/health.test.js +308 -0
- package/dist/tests/health.test.js.map +1 -0
- package/dist/tests/integration/analyze.integration.test.d.ts +2 -0
- package/dist/tests/integration/analyze.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/analyze.integration.test.js +244 -0
- package/dist/tests/integration/analyze.integration.test.js.map +1 -0
- package/dist/tests/integration/compare.integration.test.d.ts +2 -0
- package/dist/tests/integration/compare.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/compare.integration.test.js +120 -0
- package/dist/tests/integration/compare.integration.test.js.map +1 -0
- package/dist/tests/integration/fixtures/test-skills.d.ts +62 -0
- package/dist/tests/integration/fixtures/test-skills.d.ts.map +1 -0
- package/dist/tests/integration/fixtures/test-skills.js +644 -0
- package/dist/tests/integration/fixtures/test-skills.js.map +1 -0
- package/dist/tests/integration/get-skill.integration.test.d.ts +6 -0
- package/dist/tests/integration/get-skill.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/get-skill.integration.test.js +203 -0
- package/dist/tests/integration/get-skill.integration.test.js.map +1 -0
- package/dist/tests/integration/github-api.integration.test.d.ts +14 -0
- package/dist/tests/integration/github-api.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/github-api.integration.test.js +190 -0
- package/dist/tests/integration/github-api.integration.test.js.map +1 -0
- package/dist/tests/integration/install.integration.test.d.ts +6 -0
- package/dist/tests/integration/install.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/install.integration.test.js +282 -0
- package/dist/tests/integration/install.integration.test.js.map +1 -0
- package/dist/tests/integration/recommend.integration.test.d.ts +2 -0
- package/dist/tests/integration/recommend.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/recommend.integration.test.js +215 -0
- package/dist/tests/integration/recommend.integration.test.js.map +1 -0
- package/dist/tests/integration/search.integration.test.d.ts +6 -0
- package/dist/tests/integration/search.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/search.integration.test.js +229 -0
- package/dist/tests/integration/search.integration.test.js.map +1 -0
- package/dist/tests/integration/setup.d.ts +71 -0
- package/dist/tests/integration/setup.d.ts.map +1 -0
- package/dist/tests/integration/setup.js +124 -0
- package/dist/tests/integration/setup.js.map +1 -0
- package/dist/tests/integration/uninstall.integration.test.d.ts +6 -0
- package/dist/tests/integration/uninstall.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/uninstall.integration.test.js +296 -0
- package/dist/tests/integration/uninstall.integration.test.js.map +1 -0
- package/dist/tests/integration/validate.integration.test.d.ts +2 -0
- package/dist/tests/integration/validate.integration.test.d.ts.map +1 -0
- package/dist/tests/integration/validate.integration.test.js +181 -0
- package/dist/tests/integration/validate.integration.test.js.map +1 -0
- package/dist/tests/onboarding/first-run.test.d.ts +7 -0
- package/dist/tests/onboarding/first-run.test.d.ts.map +1 -0
- package/dist/tests/onboarding/first-run.test.js +258 -0
- package/dist/tests/onboarding/first-run.test.js.map +1 -0
- package/dist/tests/performance/search-performance.test.d.ts +10 -0
- package/dist/tests/performance/search-performance.test.d.ts.map +1 -0
- package/dist/tests/performance/search-performance.test.js +218 -0
- package/dist/tests/performance/search-performance.test.js.map +1 -0
- package/dist/tests/recommend.test.d.ts +6 -0
- package/dist/tests/recommend.test.d.ts.map +1 -0
- package/dist/tests/recommend.test.js +208 -0
- package/dist/tests/recommend.test.js.map +1 -0
- package/dist/tests/suggestions/suggestion-engine.test.d.ts +6 -0
- package/dist/tests/suggestions/suggestion-engine.test.d.ts.map +1 -0
- package/dist/tests/suggestions/suggestion-engine.test.js +448 -0
- package/dist/tests/suggestions/suggestion-engine.test.js.map +1 -0
- package/dist/tests/test-utils.d.ts +74 -0
- package/dist/tests/test-utils.d.ts.map +1 -0
- package/dist/tests/test-utils.js +98 -0
- package/dist/tests/test-utils.js.map +1 -0
- package/dist/tests/tools.test.d.ts +5 -0
- package/dist/tests/tools.test.d.ts.map +1 -0
- package/dist/tests/tools.test.js +138 -0
- package/dist/tests/tools.test.js.map +1 -0
- package/dist/tests/unit/installed-skills.test.d.ts +6 -0
- package/dist/tests/unit/installed-skills.test.d.ts.map +1 -0
- package/dist/tests/unit/installed-skills.test.js +285 -0
- package/dist/tests/unit/installed-skills.test.js.map +1 -0
- package/dist/tests/unit/logger.test.d.ts +6 -0
- package/dist/tests/unit/logger.test.d.ts.map +1 -0
- package/dist/tests/unit/logger.test.js +281 -0
- package/dist/tests/unit/logger.test.js.map +1 -0
- package/dist/tests/validate.test.d.ts +5 -0
- package/dist/tests/validate.test.d.ts.map +1 -0
- package/dist/tests/validate.test.js +303 -0
- package/dist/tests/validate.test.js.map +1 -0
- package/dist/tests/webhooks/proxy-trust.security.test.d.ts +8 -0
- package/dist/tests/webhooks/proxy-trust.security.test.d.ts.map +1 -0
- package/dist/tests/webhooks/proxy-trust.security.test.js +145 -0
- package/dist/tests/webhooks/proxy-trust.security.test.js.map +1 -0
- package/dist/tests/webhooks/rate-limiter.security.test.d.ts +8 -0
- package/dist/tests/webhooks/rate-limiter.security.test.d.ts.map +1 -0
- package/dist/tests/webhooks/rate-limiter.security.test.js +122 -0
- package/dist/tests/webhooks/rate-limiter.security.test.js.map +1 -0
- package/dist/vitest.config.d.ts +6 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +13 -0
- package/dist/vitest.config.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview MCP Search Tool for Claude Code skill discovery
|
|
3
|
+
* @module @skillsmith/mcp-server/tools/search
|
|
4
|
+
* @see {@link https://github.com/wrsmith108/skillsmith|Skillsmith Repository}
|
|
5
|
+
* @see SMI-789: Wire search tool to SearchService
|
|
6
|
+
*
|
|
7
|
+
* Provides skill search functionality with support for:
|
|
8
|
+
* - Full-text search across skill names, descriptions, and authors
|
|
9
|
+
* - Category filtering (development, testing, devops, etc.)
|
|
10
|
+
* - Trust tier filtering (verified, community, standard, unverified)
|
|
11
|
+
* - Minimum quality score filtering
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* // Basic search with context
|
|
15
|
+
* const results = await executeSearch({ query: 'commit' }, context);
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* // Search with filters
|
|
19
|
+
* const results = await executeSearch({
|
|
20
|
+
* query: 'test',
|
|
21
|
+
* category: 'testing',
|
|
22
|
+
* trust_tier: 'verified',
|
|
23
|
+
* min_score: 80
|
|
24
|
+
* }, context);
|
|
25
|
+
*/
|
|
26
|
+
import { SkillsmithError, ErrorCodes, } from '@skillsmith/core';
|
|
27
|
+
import { extractCategoryFromTags } from '../utils/validation.js';
|
|
28
|
+
/**
|
|
29
|
+
* Map MCP trust tier to database trust tier
|
|
30
|
+
* MCP: verified, community, standard, unverified
|
|
31
|
+
* DB: verified, community, experimental, unknown
|
|
32
|
+
*/
|
|
33
|
+
function mapTrustTierToDb(mcpTier) {
|
|
34
|
+
switch (mcpTier) {
|
|
35
|
+
case 'verified':
|
|
36
|
+
return 'verified';
|
|
37
|
+
case 'community':
|
|
38
|
+
return 'community';
|
|
39
|
+
case 'standard':
|
|
40
|
+
return 'experimental';
|
|
41
|
+
case 'unverified':
|
|
42
|
+
return 'unknown';
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Map database trust tier to MCP trust tier
|
|
47
|
+
*/
|
|
48
|
+
function mapTrustTierFromDb(dbTier) {
|
|
49
|
+
switch (dbTier) {
|
|
50
|
+
case 'verified':
|
|
51
|
+
return 'verified';
|
|
52
|
+
case 'community':
|
|
53
|
+
return 'community';
|
|
54
|
+
case 'experimental':
|
|
55
|
+
return 'standard';
|
|
56
|
+
case 'unknown':
|
|
57
|
+
return 'unverified';
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Search tool schema for MCP
|
|
62
|
+
*/
|
|
63
|
+
export const searchToolSchema = {
|
|
64
|
+
name: 'search',
|
|
65
|
+
description: 'Search for Claude Code skills by query with optional filters',
|
|
66
|
+
inputSchema: {
|
|
67
|
+
type: 'object',
|
|
68
|
+
properties: {
|
|
69
|
+
query: {
|
|
70
|
+
type: 'string',
|
|
71
|
+
description: 'Search query for finding skills',
|
|
72
|
+
},
|
|
73
|
+
category: {
|
|
74
|
+
type: 'string',
|
|
75
|
+
description: 'Filter by skill category',
|
|
76
|
+
enum: [
|
|
77
|
+
'development',
|
|
78
|
+
'testing',
|
|
79
|
+
'documentation',
|
|
80
|
+
'devops',
|
|
81
|
+
'database',
|
|
82
|
+
'security',
|
|
83
|
+
'productivity',
|
|
84
|
+
'integration',
|
|
85
|
+
'ai-ml',
|
|
86
|
+
'other',
|
|
87
|
+
],
|
|
88
|
+
},
|
|
89
|
+
trust_tier: {
|
|
90
|
+
type: 'string',
|
|
91
|
+
description: 'Filter by trust tier level',
|
|
92
|
+
enum: ['verified', 'community', 'standard', 'unverified'],
|
|
93
|
+
},
|
|
94
|
+
min_score: {
|
|
95
|
+
type: 'number',
|
|
96
|
+
description: 'Minimum quality score (0-100)',
|
|
97
|
+
minimum: 0,
|
|
98
|
+
maximum: 100,
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
required: ['query'],
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* Execute a search for Claude Code skills with optional filters.
|
|
106
|
+
*
|
|
107
|
+
* Uses SearchService with FTS5/BM25 ranking for relevance-based results.
|
|
108
|
+
* Results are sorted by BM25 rank and limited to specified count.
|
|
109
|
+
*
|
|
110
|
+
* @param input - Search parameters including query and optional filters
|
|
111
|
+
* @param context - Tool context with database and services
|
|
112
|
+
* @returns Promise resolving to search response with results and timing
|
|
113
|
+
* @throws {SkillsmithError} When query is empty or less than 2 characters
|
|
114
|
+
* @throws {SkillsmithError} When min_score is outside 0-100 range
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* // Search for commit-related skills
|
|
118
|
+
* const response = await executeSearch({ query: 'commit' }, context);
|
|
119
|
+
* console.log(`Found ${response.total} skills in ${response.timing.totalMs}ms`);
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* // Search with multiple filters
|
|
123
|
+
* const response = await executeSearch({
|
|
124
|
+
* query: 'react',
|
|
125
|
+
* category: 'testing',
|
|
126
|
+
* min_score: 85
|
|
127
|
+
* }, context);
|
|
128
|
+
*/
|
|
129
|
+
export async function executeSearch(input, context) {
|
|
130
|
+
const startTime = performance.now();
|
|
131
|
+
// Validate query
|
|
132
|
+
if (!input.query || input.query.trim().length < 2) {
|
|
133
|
+
throw new SkillsmithError(ErrorCodes.SEARCH_QUERY_EMPTY, 'Search query must be at least 2 characters');
|
|
134
|
+
}
|
|
135
|
+
const filters = {};
|
|
136
|
+
// Apply category filter
|
|
137
|
+
if (input.category) {
|
|
138
|
+
filters.category = input.category;
|
|
139
|
+
}
|
|
140
|
+
// Apply trust tier filter
|
|
141
|
+
if (input.trust_tier) {
|
|
142
|
+
filters.trustTier = input.trust_tier;
|
|
143
|
+
}
|
|
144
|
+
// Apply minimum score filter (convert 0-100 to 0-1 for database)
|
|
145
|
+
if (input.min_score !== undefined) {
|
|
146
|
+
if (input.min_score < 0 || input.min_score > 100) {
|
|
147
|
+
throw new SkillsmithError(ErrorCodes.VALIDATION_OUT_OF_RANGE, 'min_score must be between 0 and 100', { details: { min_score: input.min_score } });
|
|
148
|
+
}
|
|
149
|
+
filters.minScore = input.min_score / 100; // Convert to 0-1 scale for DB
|
|
150
|
+
}
|
|
151
|
+
const searchStart = performance.now();
|
|
152
|
+
// Map MCP trust tier to DB trust tier if provided
|
|
153
|
+
const dbTrustTier = filters.trustTier ? mapTrustTierToDb(filters.trustTier) : undefined;
|
|
154
|
+
// Use SearchService for FTS5 search with BM25 ranking
|
|
155
|
+
const searchResults = context.searchService.search({
|
|
156
|
+
query: input.query.trim(),
|
|
157
|
+
limit: 10,
|
|
158
|
+
offset: 0,
|
|
159
|
+
trustTier: dbTrustTier,
|
|
160
|
+
minQualityScore: filters.minScore,
|
|
161
|
+
category: filters.category,
|
|
162
|
+
});
|
|
163
|
+
const searchEnd = performance.now();
|
|
164
|
+
// Convert SearchResult to SkillSearchResult format
|
|
165
|
+
const results = searchResults.items.map((item) => ({
|
|
166
|
+
id: item.skill.id,
|
|
167
|
+
name: item.skill.name,
|
|
168
|
+
description: item.skill.description || '',
|
|
169
|
+
author: item.skill.author || 'unknown',
|
|
170
|
+
category: extractCategoryFromTags(item.skill.tags),
|
|
171
|
+
trustTier: mapTrustTierFromDb(item.skill.trustTier),
|
|
172
|
+
score: Math.round((item.skill.qualityScore ?? 0) * 100), // Convert 0-1 to 0-100
|
|
173
|
+
}));
|
|
174
|
+
const endTime = performance.now();
|
|
175
|
+
return {
|
|
176
|
+
results,
|
|
177
|
+
total: searchResults.total,
|
|
178
|
+
query: input.query,
|
|
179
|
+
filters,
|
|
180
|
+
timing: {
|
|
181
|
+
searchMs: Math.round(searchEnd - searchStart),
|
|
182
|
+
totalMs: Math.round(endTime - startTime),
|
|
183
|
+
},
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Format search results for terminal/CLI display.
|
|
188
|
+
*
|
|
189
|
+
* Produces a human-readable string with skill listings including
|
|
190
|
+
* trust badges, scores, and timing information.
|
|
191
|
+
*
|
|
192
|
+
* @param response - Search response from executeSearch
|
|
193
|
+
* @returns Formatted string suitable for terminal output
|
|
194
|
+
*
|
|
195
|
+
* @example
|
|
196
|
+
* const response = await executeSearch({ query: 'test' });
|
|
197
|
+
* console.log(formatSearchResults(response));
|
|
198
|
+
* // Output:
|
|
199
|
+
* // === Search Results for "test" ===
|
|
200
|
+
* // Found 3 skill(s):
|
|
201
|
+
* // 1. jest-helper [COMMUNITY]
|
|
202
|
+
* // Author: community | Score: 87/100
|
|
203
|
+
* // Generate Jest test cases...
|
|
204
|
+
*/
|
|
205
|
+
export function formatSearchResults(response) {
|
|
206
|
+
const lines = [];
|
|
207
|
+
lines.push('\n=== Search Results for "' + response.query + '" ===\n');
|
|
208
|
+
if (response.results.length === 0) {
|
|
209
|
+
lines.push('No skills found matching your query.');
|
|
210
|
+
lines.push('');
|
|
211
|
+
lines.push('Suggestions:');
|
|
212
|
+
lines.push(' - Try different keywords');
|
|
213
|
+
lines.push(' - Remove filters to broaden the search');
|
|
214
|
+
lines.push(' - Check spelling');
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
lines.push('Found ' + response.total + ' skill(s):\n');
|
|
218
|
+
response.results.forEach((skill, index) => {
|
|
219
|
+
const trustBadge = getTrustBadge(skill.trustTier);
|
|
220
|
+
lines.push(index + 1 + '. ' + skill.name + ' ' + trustBadge);
|
|
221
|
+
lines.push(' Author: ' + skill.author + ' | Score: ' + skill.score + '/100');
|
|
222
|
+
lines.push(' ' + skill.description);
|
|
223
|
+
lines.push(' ID: ' + skill.id);
|
|
224
|
+
lines.push('');
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
// Add timing info
|
|
228
|
+
lines.push('---');
|
|
229
|
+
lines.push('Search: ' + response.timing.searchMs + 'ms | Total: ' + response.timing.totalMs + 'ms');
|
|
230
|
+
return lines.join('\n');
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Get trust badge for display
|
|
234
|
+
*/
|
|
235
|
+
function getTrustBadge(tier) {
|
|
236
|
+
switch (tier) {
|
|
237
|
+
case 'verified':
|
|
238
|
+
return '[VERIFIED]';
|
|
239
|
+
case 'community':
|
|
240
|
+
return '[COMMUNITY]';
|
|
241
|
+
case 'standard':
|
|
242
|
+
return '[STANDARD]';
|
|
243
|
+
case 'unverified':
|
|
244
|
+
return '[UNVERIFIED]';
|
|
245
|
+
default:
|
|
246
|
+
return '[UNKNOWN]';
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../../src/tools/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview MCP Skill Suggest Tool for proactive skill recommendations
|
|
3
|
+
* @module @skillsmith/mcp-server/tools/suggest
|
|
4
|
+
* @see Phase 4: Trigger System Architecture
|
|
5
|
+
*
|
|
6
|
+
* Provides proactive skill suggestions based on user context including:
|
|
7
|
+
* - Current file being edited
|
|
8
|
+
* - Recent terminal commands
|
|
9
|
+
* - Error messages
|
|
10
|
+
* - Project structure analysis
|
|
11
|
+
*
|
|
12
|
+
* Features:
|
|
13
|
+
* - Rate limiting (max 1 suggestion per 5 minutes per session)
|
|
14
|
+
* - Context scoring to filter low-relevance suggestions
|
|
15
|
+
* - Integration with CodebaseAnalyzer
|
|
16
|
+
* - Semantic skill matching
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* // Client calls suggest when user is working
|
|
20
|
+
* const result = await executeSuggest({
|
|
21
|
+
* project_path: '/path/to/project',
|
|
22
|
+
* current_file: 'src/App.test.tsx',
|
|
23
|
+
* recent_commands: ['npm test'],
|
|
24
|
+
* installed_skills: ['anthropic/commit']
|
|
25
|
+
* }, toolContext);
|
|
26
|
+
*/
|
|
27
|
+
import { z } from 'zod';
|
|
28
|
+
import type { ToolContext } from '../context.js';
|
|
29
|
+
import type { MCPTrustTier as TrustTier } from '@skillsmith/core';
|
|
30
|
+
/**
|
|
31
|
+
* Zod schema for suggest tool input validation
|
|
32
|
+
*/
|
|
33
|
+
export declare const suggestInputSchema: z.ZodObject<{
|
|
34
|
+
/** Root path of the project */
|
|
35
|
+
project_path: z.ZodString;
|
|
36
|
+
/** Current file being edited (optional) */
|
|
37
|
+
current_file: z.ZodOptional<z.ZodString>;
|
|
38
|
+
/** Recent terminal commands (last 5) */
|
|
39
|
+
recent_commands: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
40
|
+
/** Recent error message if any */
|
|
41
|
+
error_message: z.ZodOptional<z.ZodString>;
|
|
42
|
+
/** Currently installed skill IDs */
|
|
43
|
+
installed_skills: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
44
|
+
/** Maximum suggestions to return (default 3) */
|
|
45
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
46
|
+
/** Session ID for rate limiting */
|
|
47
|
+
session_id: z.ZodDefault<z.ZodString>;
|
|
48
|
+
}, "strip", z.ZodTypeAny, {
|
|
49
|
+
installed_skills: string[];
|
|
50
|
+
limit: number;
|
|
51
|
+
project_path: string;
|
|
52
|
+
recent_commands: string[];
|
|
53
|
+
session_id: string;
|
|
54
|
+
current_file?: string | undefined;
|
|
55
|
+
error_message?: string | undefined;
|
|
56
|
+
}, {
|
|
57
|
+
project_path: string;
|
|
58
|
+
installed_skills?: string[] | undefined;
|
|
59
|
+
limit?: number | undefined;
|
|
60
|
+
current_file?: string | undefined;
|
|
61
|
+
recent_commands?: string[] | undefined;
|
|
62
|
+
error_message?: string | undefined;
|
|
63
|
+
session_id?: string | undefined;
|
|
64
|
+
}>;
|
|
65
|
+
/**
|
|
66
|
+
* Input type (before parsing)
|
|
67
|
+
*/
|
|
68
|
+
export type SuggestInput = z.input<typeof suggestInputSchema>;
|
|
69
|
+
/**
|
|
70
|
+
* Individual skill suggestion
|
|
71
|
+
*/
|
|
72
|
+
export interface SkillSuggestion {
|
|
73
|
+
/** Skill identifier */
|
|
74
|
+
skill_id: string;
|
|
75
|
+
/** Skill name */
|
|
76
|
+
name: string;
|
|
77
|
+
/** Why this skill is being suggested */
|
|
78
|
+
reason: string;
|
|
79
|
+
/** Confidence in this suggestion (0-1) */
|
|
80
|
+
confidence: number;
|
|
81
|
+
/** Trigger types that fired */
|
|
82
|
+
trigger_types: string[];
|
|
83
|
+
/** Trust tier */
|
|
84
|
+
trust_tier: TrustTier;
|
|
85
|
+
/** Quality score */
|
|
86
|
+
quality_score: number;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Suggest response with metadata
|
|
90
|
+
*/
|
|
91
|
+
export interface SuggestResponse {
|
|
92
|
+
/** List of suggested skills */
|
|
93
|
+
suggestions: SkillSuggestion[];
|
|
94
|
+
/** Overall context relevance score (0-1) */
|
|
95
|
+
context_score: number;
|
|
96
|
+
/** Whether request was rate limited */
|
|
97
|
+
rate_limited: boolean;
|
|
98
|
+
/** When next suggestion is allowed (ISO timestamp) */
|
|
99
|
+
next_suggestion_at?: string;
|
|
100
|
+
/** Which triggers fired */
|
|
101
|
+
triggers_fired: string[];
|
|
102
|
+
/** Performance timing */
|
|
103
|
+
timing: {
|
|
104
|
+
totalMs: number;
|
|
105
|
+
analysisMs?: number;
|
|
106
|
+
matchingMs?: number;
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* MCP tool schema definition for skill_suggest
|
|
111
|
+
*/
|
|
112
|
+
export declare const suggestToolSchema: {
|
|
113
|
+
name: string;
|
|
114
|
+
description: string;
|
|
115
|
+
inputSchema: {
|
|
116
|
+
type: "object";
|
|
117
|
+
properties: {
|
|
118
|
+
project_path: {
|
|
119
|
+
type: string;
|
|
120
|
+
description: string;
|
|
121
|
+
};
|
|
122
|
+
current_file: {
|
|
123
|
+
type: string;
|
|
124
|
+
description: string;
|
|
125
|
+
};
|
|
126
|
+
recent_commands: {
|
|
127
|
+
type: string;
|
|
128
|
+
items: {
|
|
129
|
+
type: string;
|
|
130
|
+
};
|
|
131
|
+
description: string;
|
|
132
|
+
};
|
|
133
|
+
error_message: {
|
|
134
|
+
type: string;
|
|
135
|
+
description: string;
|
|
136
|
+
};
|
|
137
|
+
installed_skills: {
|
|
138
|
+
type: string;
|
|
139
|
+
items: {
|
|
140
|
+
type: string;
|
|
141
|
+
};
|
|
142
|
+
description: string;
|
|
143
|
+
};
|
|
144
|
+
limit: {
|
|
145
|
+
type: string;
|
|
146
|
+
description: string;
|
|
147
|
+
minimum: number;
|
|
148
|
+
maximum: number;
|
|
149
|
+
default: number;
|
|
150
|
+
};
|
|
151
|
+
session_id: {
|
|
152
|
+
type: string;
|
|
153
|
+
description: string;
|
|
154
|
+
default: string;
|
|
155
|
+
};
|
|
156
|
+
};
|
|
157
|
+
required: string[];
|
|
158
|
+
};
|
|
159
|
+
};
|
|
160
|
+
/**
|
|
161
|
+
* Execute skill suggestion based on context.
|
|
162
|
+
*
|
|
163
|
+
* @param input - Suggestion parameters
|
|
164
|
+
* @param context - Tool context with database access
|
|
165
|
+
* @returns Promise resolving to suggestion response
|
|
166
|
+
*
|
|
167
|
+
* @example
|
|
168
|
+
* const response = await executeSuggest({
|
|
169
|
+
* project_path: '/path/to/project',
|
|
170
|
+
* current_file: 'src/App.test.tsx',
|
|
171
|
+
* recent_commands: ['npm test'],
|
|
172
|
+
* installed_skills: ['anthropic/commit'],
|
|
173
|
+
* limit: 3
|
|
174
|
+
* }, toolContext);
|
|
175
|
+
*/
|
|
176
|
+
export declare function executeSuggest(input: SuggestInput, context: ToolContext): Promise<SuggestResponse>;
|
|
177
|
+
/**
|
|
178
|
+
* Format suggestions for terminal display
|
|
179
|
+
*/
|
|
180
|
+
export declare function formatSuggestions(response: SuggestResponse): string;
|
|
181
|
+
//# sourceMappingURL=suggest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"suggest.d.ts","sourceRoot":"","sources":["../../../src/tools/suggest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,KAAK,EAAE,YAAY,IAAI,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjE;;GAEG;AACH,eAAO,MAAM,kBAAkB;IAC7B,+BAA+B;;IAE/B,2CAA2C;;IAE3C,wCAAwC;;IAExC,kCAAkC;;IAElC,oCAAoC;;IAEpC,gDAAgD;;IAEhD,mCAAmC;;;;;;;;;;;;;;;;;;EAEnC,CAAA;AAEF;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAE7D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAA;IACd,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAA;IAClB,+BAA+B;IAC/B,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,iBAAiB;IACjB,UAAU,EAAE,SAAS,CAAA;IACrB,oBAAoB;IACpB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,+BAA+B;IAC/B,WAAW,EAAE,eAAe,EAAE,CAAA;IAC9B,4CAA4C;IAC5C,aAAa,EAAE,MAAM,CAAA;IACrB,uCAAuC;IACvC,YAAY,EAAE,OAAO,CAAA;IACrB,sDAAsD;IACtD,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,2BAA2B;IAC3B,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,yBAAyB;IACzB,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAA;QACf,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,UAAU,CAAC,EAAE,MAAM,CAAA;KACpB,CAAA;CACF;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4C7B,CAAA;AA2GD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,eAAe,CAAC,CAuI1B;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAuCnE"}
|