@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.
Files changed (315) hide show
  1. package/package.json +3 -2
  2. package/src/assets/docs/USER_GUIDE.md +192 -0
  3. package/src/assets/skills/skillsmith/SKILL.md +147 -0
  4. package/src/assets/skills/skillsmith/docs/QUOTAS.md +182 -0
  5. package/src/assets/skills/skillsmith/docs/SECURITY.md +174 -0
  6. package/src/assets/skills/skillsmith/docs/TRUST_TIERS.md +142 -0
  7. package/dist/.tsbuildinfo +0 -1
  8. package/dist/src/__tests__/get-skill.test.d.ts +0 -6
  9. package/dist/src/__tests__/get-skill.test.d.ts.map +0 -1
  10. package/dist/src/__tests__/get-skill.test.js +0 -88
  11. package/dist/src/__tests__/get-skill.test.js.map +0 -1
  12. package/dist/src/__tests__/middleware/errorFormatter.test.d.ts +0 -7
  13. package/dist/src/__tests__/middleware/errorFormatter.test.d.ts.map +0 -1
  14. package/dist/src/__tests__/middleware/errorFormatter.test.js +0 -304
  15. package/dist/src/__tests__/middleware/errorFormatter.test.js.map +0 -1
  16. package/dist/src/__tests__/middleware/license.test.d.ts +0 -7
  17. package/dist/src/__tests__/middleware/license.test.d.ts.map +0 -1
  18. package/dist/src/__tests__/middleware/license.test.js +0 -500
  19. package/dist/src/__tests__/middleware/license.test.js.map +0 -1
  20. package/dist/src/__tests__/search.test.d.ts +0 -6
  21. package/dist/src/__tests__/search.test.d.ts.map +0 -1
  22. package/dist/src/__tests__/search.test.js +0 -86
  23. package/dist/src/__tests__/search.test.js.map +0 -1
  24. package/dist/src/__tests__/test-utils.d.ts +0 -20
  25. package/dist/src/__tests__/test-utils.d.ts.map +0 -1
  26. package/dist/src/__tests__/test-utils.js +0 -91
  27. package/dist/src/__tests__/test-utils.js.map +0 -1
  28. package/dist/src/context/index.d.ts +0 -19
  29. package/dist/src/context/index.d.ts.map +0 -1
  30. package/dist/src/context/index.js +0 -25
  31. package/dist/src/context/index.js.map +0 -1
  32. package/dist/src/context/project-detector.d.ts +0 -145
  33. package/dist/src/context/project-detector.d.ts.map +0 -1
  34. package/dist/src/context/project-detector.js +0 -321
  35. package/dist/src/context/project-detector.js.map +0 -1
  36. package/dist/src/context.d.ts +0 -135
  37. package/dist/src/context.d.ts.map +0 -1
  38. package/dist/src/context.js +0 -191
  39. package/dist/src/context.js.map +0 -1
  40. package/dist/src/core-shim.d.ts +0 -7
  41. package/dist/src/core-shim.d.ts.map +0 -1
  42. package/dist/src/core-shim.js +0 -9
  43. package/dist/src/core-shim.js.map +0 -1
  44. package/dist/src/health/healthCheck.d.ts +0 -88
  45. package/dist/src/health/healthCheck.d.ts.map +0 -1
  46. package/dist/src/health/healthCheck.js +0 -117
  47. package/dist/src/health/healthCheck.js.map +0 -1
  48. package/dist/src/health/index.d.ts +0 -21
  49. package/dist/src/health/index.d.ts.map +0 -1
  50. package/dist/src/health/index.js +0 -21
  51. package/dist/src/health/index.js.map +0 -1
  52. package/dist/src/health/readinessCheck.d.ts +0 -139
  53. package/dist/src/health/readinessCheck.d.ts.map +0 -1
  54. package/dist/src/health/readinessCheck.js +0 -266
  55. package/dist/src/health/readinessCheck.js.map +0 -1
  56. package/dist/src/index.d.ts +0 -8
  57. package/dist/src/index.d.ts.map +0 -1
  58. package/dist/src/index.js +0 -178
  59. package/dist/src/index.js.map +0 -1
  60. package/dist/src/index.test.d.ts +0 -2
  61. package/dist/src/index.test.d.ts.map +0 -1
  62. package/dist/src/index.test.js +0 -43
  63. package/dist/src/index.test.js.map +0 -1
  64. package/dist/src/logger.d.ts +0 -26
  65. package/dist/src/logger.d.ts.map +0 -1
  66. package/dist/src/logger.js +0 -179
  67. package/dist/src/logger.js.map +0 -1
  68. package/dist/src/middleware/__tests__/csp.test.d.ts +0 -2
  69. package/dist/src/middleware/__tests__/csp.test.d.ts.map +0 -1
  70. package/dist/src/middleware/__tests__/csp.test.js +0 -390
  71. package/dist/src/middleware/__tests__/csp.test.js.map +0 -1
  72. package/dist/src/middleware/csp.d.ts +0 -103
  73. package/dist/src/middleware/csp.d.ts.map +0 -1
  74. package/dist/src/middleware/csp.js +0 -273
  75. package/dist/src/middleware/csp.js.map +0 -1
  76. package/dist/src/middleware/degradation.d.ts +0 -105
  77. package/dist/src/middleware/degradation.d.ts.map +0 -1
  78. package/dist/src/middleware/degradation.js +0 -319
  79. package/dist/src/middleware/degradation.js.map +0 -1
  80. package/dist/src/middleware/errorFormatter.d.ts +0 -119
  81. package/dist/src/middleware/errorFormatter.d.ts.map +0 -1
  82. package/dist/src/middleware/errorFormatter.js +0 -294
  83. package/dist/src/middleware/errorFormatter.js.map +0 -1
  84. package/dist/src/middleware/index.d.ts +0 -11
  85. package/dist/src/middleware/index.d.ts.map +0 -1
  86. package/dist/src/middleware/index.js +0 -16
  87. package/dist/src/middleware/index.js.map +0 -1
  88. package/dist/src/middleware/license.d.ts +0 -169
  89. package/dist/src/middleware/license.d.ts.map +0 -1
  90. package/dist/src/middleware/license.js +0 -292
  91. package/dist/src/middleware/license.js.map +0 -1
  92. package/dist/src/middleware/quota.d.ts +0 -182
  93. package/dist/src/middleware/quota.d.ts.map +0 -1
  94. package/dist/src/middleware/quota.js +0 -309
  95. package/dist/src/middleware/quota.js.map +0 -1
  96. package/dist/src/middleware/toolFeatureMapping.d.ts +0 -36
  97. package/dist/src/middleware/toolFeatureMapping.d.ts.map +0 -1
  98. package/dist/src/middleware/toolFeatureMapping.js +0 -96
  99. package/dist/src/middleware/toolFeatureMapping.js.map +0 -1
  100. package/dist/src/onboarding/first-run.d.ts +0 -64
  101. package/dist/src/onboarding/first-run.d.ts.map +0 -1
  102. package/dist/src/onboarding/first-run.js +0 -77
  103. package/dist/src/onboarding/first-run.js.map +0 -1
  104. package/dist/src/onboarding/index.d.ts +0 -7
  105. package/dist/src/onboarding/index.d.ts.map +0 -1
  106. package/dist/src/onboarding/index.js +0 -7
  107. package/dist/src/onboarding/index.js.map +0 -1
  108. package/dist/src/suggestions/index.d.ts +0 -21
  109. package/dist/src/suggestions/index.d.ts.map +0 -1
  110. package/dist/src/suggestions/index.js +0 -20
  111. package/dist/src/suggestions/index.js.map +0 -1
  112. package/dist/src/suggestions/suggestion-engine.d.ts +0 -185
  113. package/dist/src/suggestions/suggestion-engine.d.ts.map +0 -1
  114. package/dist/src/suggestions/suggestion-engine.js +0 -352
  115. package/dist/src/suggestions/suggestion-engine.js.map +0 -1
  116. package/dist/src/suggestions/types.d.ts +0 -88
  117. package/dist/src/suggestions/types.d.ts.map +0 -1
  118. package/dist/src/suggestions/types.js +0 -21
  119. package/dist/src/suggestions/types.js.map +0 -1
  120. package/dist/src/tools/analyze.d.ts +0 -151
  121. package/dist/src/tools/analyze.d.ts.map +0 -1
  122. package/dist/src/tools/analyze.js +0 -205
  123. package/dist/src/tools/analyze.js.map +0 -1
  124. package/dist/src/tools/compare.d.ts +0 -149
  125. package/dist/src/tools/compare.d.ts.map +0 -1
  126. package/dist/src/tools/compare.js +0 -464
  127. package/dist/src/tools/compare.js.map +0 -1
  128. package/dist/src/tools/get-skill.d.ts +0 -107
  129. package/dist/src/tools/get-skill.d.ts.map +0 -1
  130. package/dist/src/tools/get-skill.js +0 -260
  131. package/dist/src/tools/get-skill.js.map +0 -1
  132. package/dist/src/tools/index.d.ts +0 -20
  133. package/dist/src/tools/index.d.ts.map +0 -1
  134. package/dist/src/tools/index.js +0 -20
  135. package/dist/src/tools/index.js.map +0 -1
  136. package/dist/src/tools/install.d.ts +0 -122
  137. package/dist/src/tools/install.d.ts.map +0 -1
  138. package/dist/src/tools/install.js +0 -326
  139. package/dist/src/tools/install.js.map +0 -1
  140. package/dist/src/tools/recommend.d.ts +0 -169
  141. package/dist/src/tools/recommend.d.ts.map +0 -1
  142. package/dist/src/tools/recommend.js +0 -357
  143. package/dist/src/tools/recommend.js.map +0 -1
  144. package/dist/src/tools/search.d.ts +0 -114
  145. package/dist/src/tools/search.d.ts.map +0 -1
  146. package/dist/src/tools/search.js +0 -247
  147. package/dist/src/tools/search.js.map +0 -1
  148. package/dist/src/tools/suggest.d.ts +0 -181
  149. package/dist/src/tools/suggest.d.ts.map +0 -1
  150. package/dist/src/tools/suggest.js +0 -310
  151. package/dist/src/tools/suggest.js.map +0 -1
  152. package/dist/src/tools/uninstall.d.ts +0 -123
  153. package/dist/src/tools/uninstall.d.ts.map +0 -1
  154. package/dist/src/tools/uninstall.js +0 -250
  155. package/dist/src/tools/uninstall.js.map +0 -1
  156. package/dist/src/tools/validate.d.ts +0 -122
  157. package/dist/src/tools/validate.d.ts.map +0 -1
  158. package/dist/src/tools/validate.js +0 -497
  159. package/dist/src/tools/validate.js.map +0 -1
  160. package/dist/src/utils/installed-skills.d.ts +0 -101
  161. package/dist/src/utils/installed-skills.d.ts.map +0 -1
  162. package/dist/src/utils/installed-skills.js +0 -220
  163. package/dist/src/utils/installed-skills.js.map +0 -1
  164. package/dist/src/utils/validation.d.ts +0 -95
  165. package/dist/src/utils/validation.d.ts.map +0 -1
  166. package/dist/src/utils/validation.js +0 -186
  167. package/dist/src/utils/validation.js.map +0 -1
  168. package/dist/src/webhooks/index.d.ts +0 -8
  169. package/dist/src/webhooks/index.d.ts.map +0 -1
  170. package/dist/src/webhooks/index.js +0 -9
  171. package/dist/src/webhooks/index.js.map +0 -1
  172. package/dist/src/webhooks/webhook-endpoint.d.ts +0 -149
  173. package/dist/src/webhooks/webhook-endpoint.d.ts.map +0 -1
  174. package/dist/src/webhooks/webhook-endpoint.js +0 -339
  175. package/dist/src/webhooks/webhook-endpoint.js.map +0 -1
  176. package/dist/tests/compare.test.d.ts +0 -6
  177. package/dist/tests/compare.test.d.ts.map +0 -1
  178. package/dist/tests/compare.test.js +0 -225
  179. package/dist/tests/compare.test.js.map +0 -1
  180. package/dist/tests/context/project-detector.test.d.ts +0 -6
  181. package/dist/tests/context/project-detector.test.d.ts.map +0 -1
  182. package/dist/tests/context/project-detector.test.js +0 -719
  183. package/dist/tests/context/project-detector.test.js.map +0 -1
  184. package/dist/tests/e2e/compare.e2e.test.d.ts +0 -10
  185. package/dist/tests/e2e/compare.e2e.test.d.ts.map +0 -1
  186. package/dist/tests/e2e/compare.e2e.test.js +0 -296
  187. package/dist/tests/e2e/compare.e2e.test.js.map +0 -1
  188. package/dist/tests/e2e/install-flow.e2e.test.d.ts +0 -10
  189. package/dist/tests/e2e/install-flow.e2e.test.d.ts.map +0 -1
  190. package/dist/tests/e2e/install-flow.e2e.test.js +0 -229
  191. package/dist/tests/e2e/install-flow.e2e.test.js.map +0 -1
  192. package/dist/tests/e2e/recommend.e2e.test.d.ts +0 -12
  193. package/dist/tests/e2e/recommend.e2e.test.d.ts.map +0 -1
  194. package/dist/tests/e2e/recommend.e2e.test.js +0 -357
  195. package/dist/tests/e2e/recommend.e2e.test.js.map +0 -1
  196. package/dist/tests/e2e/skill-flow.e2e.test.d.ts +0 -10
  197. package/dist/tests/e2e/skill-flow.e2e.test.d.ts.map +0 -1
  198. package/dist/tests/e2e/skill-flow.e2e.test.js +0 -311
  199. package/dist/tests/e2e/skill-flow.e2e.test.js.map +0 -1
  200. package/dist/tests/e2e/suggest.e2e.test.d.ts +0 -13
  201. package/dist/tests/e2e/suggest.e2e.test.d.ts.map +0 -1
  202. package/dist/tests/e2e/suggest.e2e.test.js +0 -367
  203. package/dist/tests/e2e/suggest.e2e.test.js.map +0 -1
  204. package/dist/tests/e2e/utils/baseline-collector.d.ts +0 -107
  205. package/dist/tests/e2e/utils/baseline-collector.d.ts.map +0 -1
  206. package/dist/tests/e2e/utils/baseline-collector.js +0 -211
  207. package/dist/tests/e2e/utils/baseline-collector.js.map +0 -1
  208. package/dist/tests/e2e/utils/hardcoded-detector.d.ts +0 -46
  209. package/dist/tests/e2e/utils/hardcoded-detector.d.ts.map +0 -1
  210. package/dist/tests/e2e/utils/hardcoded-detector.js +0 -255
  211. package/dist/tests/e2e/utils/hardcoded-detector.js.map +0 -1
  212. package/dist/tests/e2e/utils/index.d.ts +0 -7
  213. package/dist/tests/e2e/utils/index.d.ts.map +0 -1
  214. package/dist/tests/e2e/utils/index.js +0 -7
  215. package/dist/tests/e2e/utils/index.js.map +0 -1
  216. package/dist/tests/e2e/utils/linear-reporter.d.ts +0 -60
  217. package/dist/tests/e2e/utils/linear-reporter.d.ts.map +0 -1
  218. package/dist/tests/e2e/utils/linear-reporter.js +0 -232
  219. package/dist/tests/e2e/utils/linear-reporter.js.map +0 -1
  220. package/dist/tests/health.test.d.ts +0 -9
  221. package/dist/tests/health.test.d.ts.map +0 -1
  222. package/dist/tests/health.test.js +0 -308
  223. package/dist/tests/health.test.js.map +0 -1
  224. package/dist/tests/integration/analyze.integration.test.d.ts +0 -2
  225. package/dist/tests/integration/analyze.integration.test.d.ts.map +0 -1
  226. package/dist/tests/integration/analyze.integration.test.js +0 -244
  227. package/dist/tests/integration/analyze.integration.test.js.map +0 -1
  228. package/dist/tests/integration/compare.integration.test.d.ts +0 -2
  229. package/dist/tests/integration/compare.integration.test.d.ts.map +0 -1
  230. package/dist/tests/integration/compare.integration.test.js +0 -120
  231. package/dist/tests/integration/compare.integration.test.js.map +0 -1
  232. package/dist/tests/integration/fixtures/test-skills.d.ts +0 -62
  233. package/dist/tests/integration/fixtures/test-skills.d.ts.map +0 -1
  234. package/dist/tests/integration/fixtures/test-skills.js +0 -644
  235. package/dist/tests/integration/fixtures/test-skills.js.map +0 -1
  236. package/dist/tests/integration/get-skill.integration.test.d.ts +0 -6
  237. package/dist/tests/integration/get-skill.integration.test.d.ts.map +0 -1
  238. package/dist/tests/integration/get-skill.integration.test.js +0 -203
  239. package/dist/tests/integration/get-skill.integration.test.js.map +0 -1
  240. package/dist/tests/integration/github-api.integration.test.d.ts +0 -14
  241. package/dist/tests/integration/github-api.integration.test.d.ts.map +0 -1
  242. package/dist/tests/integration/github-api.integration.test.js +0 -190
  243. package/dist/tests/integration/github-api.integration.test.js.map +0 -1
  244. package/dist/tests/integration/install.integration.test.d.ts +0 -6
  245. package/dist/tests/integration/install.integration.test.d.ts.map +0 -1
  246. package/dist/tests/integration/install.integration.test.js +0 -282
  247. package/dist/tests/integration/install.integration.test.js.map +0 -1
  248. package/dist/tests/integration/recommend.integration.test.d.ts +0 -2
  249. package/dist/tests/integration/recommend.integration.test.d.ts.map +0 -1
  250. package/dist/tests/integration/recommend.integration.test.js +0 -217
  251. package/dist/tests/integration/recommend.integration.test.js.map +0 -1
  252. package/dist/tests/integration/search.integration.test.d.ts +0 -6
  253. package/dist/tests/integration/search.integration.test.d.ts.map +0 -1
  254. package/dist/tests/integration/search.integration.test.js +0 -229
  255. package/dist/tests/integration/search.integration.test.js.map +0 -1
  256. package/dist/tests/integration/setup.d.ts +0 -74
  257. package/dist/tests/integration/setup.d.ts.map +0 -1
  258. package/dist/tests/integration/setup.js +0 -131
  259. package/dist/tests/integration/setup.js.map +0 -1
  260. package/dist/tests/integration/uninstall.integration.test.d.ts +0 -6
  261. package/dist/tests/integration/uninstall.integration.test.d.ts.map +0 -1
  262. package/dist/tests/integration/uninstall.integration.test.js +0 -296
  263. package/dist/tests/integration/uninstall.integration.test.js.map +0 -1
  264. package/dist/tests/integration/validate.integration.test.d.ts +0 -2
  265. package/dist/tests/integration/validate.integration.test.d.ts.map +0 -1
  266. package/dist/tests/integration/validate.integration.test.js +0 -181
  267. package/dist/tests/integration/validate.integration.test.js.map +0 -1
  268. package/dist/tests/onboarding/first-run.test.d.ts +0 -7
  269. package/dist/tests/onboarding/first-run.test.d.ts.map +0 -1
  270. package/dist/tests/onboarding/first-run.test.js +0 -258
  271. package/dist/tests/onboarding/first-run.test.js.map +0 -1
  272. package/dist/tests/performance/search-performance.test.d.ts +0 -10
  273. package/dist/tests/performance/search-performance.test.d.ts.map +0 -1
  274. package/dist/tests/performance/search-performance.test.js +0 -222
  275. package/dist/tests/performance/search-performance.test.js.map +0 -1
  276. package/dist/tests/recommend.test.d.ts +0 -6
  277. package/dist/tests/recommend.test.d.ts.map +0 -1
  278. package/dist/tests/recommend.test.js +0 -210
  279. package/dist/tests/recommend.test.js.map +0 -1
  280. package/dist/tests/suggestions/suggestion-engine.test.d.ts +0 -6
  281. package/dist/tests/suggestions/suggestion-engine.test.d.ts.map +0 -1
  282. package/dist/tests/suggestions/suggestion-engine.test.js +0 -448
  283. package/dist/tests/suggestions/suggestion-engine.test.js.map +0 -1
  284. package/dist/tests/test-utils.d.ts +0 -74
  285. package/dist/tests/test-utils.d.ts.map +0 -1
  286. package/dist/tests/test-utils.js +0 -98
  287. package/dist/tests/test-utils.js.map +0 -1
  288. package/dist/tests/tools.test.d.ts +0 -5
  289. package/dist/tests/tools.test.d.ts.map +0 -1
  290. package/dist/tests/tools.test.js +0 -138
  291. package/dist/tests/tools.test.js.map +0 -1
  292. package/dist/tests/unit/installed-skills.test.d.ts +0 -6
  293. package/dist/tests/unit/installed-skills.test.d.ts.map +0 -1
  294. package/dist/tests/unit/installed-skills.test.js +0 -285
  295. package/dist/tests/unit/installed-skills.test.js.map +0 -1
  296. package/dist/tests/unit/logger.test.d.ts +0 -6
  297. package/dist/tests/unit/logger.test.d.ts.map +0 -1
  298. package/dist/tests/unit/logger.test.js +0 -281
  299. package/dist/tests/unit/logger.test.js.map +0 -1
  300. package/dist/tests/validate.test.d.ts +0 -5
  301. package/dist/tests/validate.test.d.ts.map +0 -1
  302. package/dist/tests/validate.test.js +0 -303
  303. package/dist/tests/validate.test.js.map +0 -1
  304. package/dist/tests/webhooks/proxy-trust.security.test.d.ts +0 -8
  305. package/dist/tests/webhooks/proxy-trust.security.test.d.ts.map +0 -1
  306. package/dist/tests/webhooks/proxy-trust.security.test.js +0 -145
  307. package/dist/tests/webhooks/proxy-trust.security.test.js.map +0 -1
  308. package/dist/tests/webhooks/rate-limiter.security.test.d.ts +0 -8
  309. package/dist/tests/webhooks/rate-limiter.security.test.d.ts.map +0 -1
  310. package/dist/tests/webhooks/rate-limiter.security.test.js +0 -122
  311. package/dist/tests/webhooks/rate-limiter.security.test.js.map +0 -1
  312. package/dist/vitest.config.d.ts +0 -6
  313. package/dist/vitest.config.d.ts.map +0 -1
  314. package/dist/vitest.config.js +0 -13
  315. package/dist/vitest.config.js.map +0 -1
@@ -1,310 +0,0 @@
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 { TriggerDetector, ContextScorer } from '@skillsmith/core';
29
- import { CodebaseAnalyzer } from '@skillsmith/core';
30
- import { SkillMatcher } from '@skillsmith/core';
31
- import { RateLimiter } from '@skillsmith/core';
32
- import { mapTrustTierFromDb, getTrustBadge } from '../utils/validation.js';
33
- /**
34
- * Zod schema for suggest tool input validation
35
- */
36
- export const suggestInputSchema = z.object({
37
- /** Root path of the project */
38
- project_path: z.string().min(1),
39
- /** Current file being edited (optional) */
40
- current_file: z.string().optional(),
41
- /** Recent terminal commands (last 5) */
42
- recent_commands: z.array(z.string()).max(10).default([]),
43
- /** Recent error message if any */
44
- error_message: z.string().optional(),
45
- /** Currently installed skill IDs */
46
- installed_skills: z.array(z.string()).default([]),
47
- /** Maximum suggestions to return (default 3) */
48
- limit: z.number().min(1).max(10).default(3),
49
- /** Session ID for rate limiting */
50
- session_id: z.string().default('default'),
51
- });
52
- /**
53
- * MCP tool schema definition for skill_suggest
54
- */
55
- export const suggestToolSchema = {
56
- name: 'skill_suggest',
57
- description: 'Proactively suggest relevant skills based on current context (files, commands, errors, project structure). Rate-limited to max 1 per 5 minutes per session.',
58
- inputSchema: {
59
- type: 'object',
60
- properties: {
61
- project_path: {
62
- type: 'string',
63
- description: 'Root path of the project to analyze',
64
- },
65
- current_file: {
66
- type: 'string',
67
- description: 'Current file being edited (e.g., "src/App.test.tsx")',
68
- },
69
- recent_commands: {
70
- type: 'array',
71
- items: { type: 'string' },
72
- description: 'Recent terminal commands (last 5, e.g., ["npm test", "git commit"])',
73
- },
74
- error_message: {
75
- type: 'string',
76
- description: 'Recent error message if any',
77
- },
78
- installed_skills: {
79
- type: 'array',
80
- items: { type: 'string' },
81
- description: 'Currently installed skill IDs (for filtering)',
82
- },
83
- limit: {
84
- type: 'number',
85
- description: 'Maximum suggestions to return (default 3, max 10)',
86
- minimum: 1,
87
- maximum: 10,
88
- default: 3,
89
- },
90
- session_id: {
91
- type: 'string',
92
- description: 'Session ID for rate limiting (default: "default")',
93
- default: 'default',
94
- },
95
- },
96
- required: ['project_path'],
97
- },
98
- };
99
- /**
100
- * Transform a database skill to SkillData format for matching
101
- */
102
- function transformSkillToMatchData(skill) {
103
- // Generate trigger phrases from name and first few tags
104
- const triggerPhrases = [
105
- skill.name,
106
- `use ${skill.name}`,
107
- `${skill.name} help`,
108
- ...skill.tags.slice(0, 3).map((tag) => `${tag} ${skill.name}`),
109
- ];
110
- return {
111
- id: skill.id,
112
- name: skill.name,
113
- description: skill.description || '',
114
- triggerPhrases,
115
- keywords: skill.tags,
116
- qualityScore: Math.round((skill.qualityScore ?? 0.5) * 100),
117
- trustTier: mapTrustTierFromDb(skill.trustTier),
118
- // Use tags as categories for filtering
119
- categories: skill.tags,
120
- };
121
- }
122
- /**
123
- * Load skills from database via ToolContext
124
- * Returns skills transformed to SkillData format for matching
125
- */
126
- async function loadSkillsFromDatabase(context, limit = 500) {
127
- const result = context.skillRepository.findAll(limit, 0);
128
- return result.items.map(transformSkillToMatchData);
129
- }
130
- // Rate limiter instance (singleton)
131
- let rateLimiter = null;
132
- /**
133
- * Get or create the rate limiter
134
- */
135
- function getRateLimiter() {
136
- if (!rateLimiter) {
137
- // Use STRICT preset: 10 requests per minute = ~1 per 6 seconds
138
- // For suggestions, we want max 1 per 5 minutes, so we'll use custom config
139
- rateLimiter = new RateLimiter({
140
- maxTokens: 1, // Only 1 suggestion at a time
141
- refillRate: 1 / 300, // 1 token per 300 seconds (5 minutes)
142
- windowMs: 300000, // 5 minute window
143
- keyPrefix: 'suggest',
144
- failMode: 'open', // Allow on errors (graceful degradation)
145
- });
146
- }
147
- return rateLimiter;
148
- }
149
- /**
150
- * Execute skill suggestion based on context.
151
- *
152
- * @param input - Suggestion parameters
153
- * @param context - Tool context with database access
154
- * @returns Promise resolving to suggestion response
155
- *
156
- * @example
157
- * const response = await executeSuggest({
158
- * project_path: '/path/to/project',
159
- * current_file: 'src/App.test.tsx',
160
- * recent_commands: ['npm test'],
161
- * installed_skills: ['anthropic/commit'],
162
- * limit: 3
163
- * }, toolContext);
164
- */
165
- export async function executeSuggest(input, context) {
166
- const startTime = performance.now();
167
- // Validate input
168
- const validated = suggestInputSchema.parse(input);
169
- const { project_path, current_file, recent_commands, error_message, installed_skills, limit, session_id, } = validated;
170
- // Check rate limit
171
- const limiter = getRateLimiter();
172
- const rateLimitResult = await limiter.checkLimit(session_id);
173
- if (!rateLimitResult.allowed) {
174
- return {
175
- suggestions: [],
176
- context_score: 0,
177
- rate_limited: true,
178
- next_suggestion_at: rateLimitResult.resetAt,
179
- triggers_fired: [],
180
- timing: {
181
- totalMs: Math.round(performance.now() - startTime),
182
- },
183
- };
184
- }
185
- const analysisStart = performance.now();
186
- // Analyze codebase (with timeout and caching)
187
- let codebaseContext = null;
188
- try {
189
- const analyzer = new CodebaseAnalyzer();
190
- codebaseContext = await analyzer.analyze(project_path, {
191
- maxFiles: 500,
192
- includeDevDeps: true,
193
- });
194
- }
195
- catch (error) {
196
- // Log error but continue with trigger detection
197
- console.warn('CodebaseAnalyzer failed:', error);
198
- }
199
- const analysisMs = Math.round(performance.now() - analysisStart);
200
- // Detect triggers
201
- const detector = new TriggerDetector();
202
- const triggers = detector.detectTriggers(codebaseContext, {
203
- currentFile: current_file,
204
- recentCommands: recent_commands,
205
- errorMessage: error_message,
206
- minConfidence: 0.5,
207
- });
208
- // Score context
209
- const scorer = new ContextScorer();
210
- const contextScore = scorer.scoreContext(triggers, codebaseContext);
211
- // Check if we should suggest
212
- if (!scorer.shouldSuggest(contextScore)) {
213
- return {
214
- suggestions: [],
215
- context_score: contextScore.score,
216
- rate_limited: false,
217
- triggers_fired: contextScore.triggers,
218
- timing: {
219
- totalMs: Math.round(performance.now() - startTime),
220
- analysisMs,
221
- },
222
- };
223
- }
224
- const matchingStart = performance.now();
225
- // Load skills from database
226
- const skillDatabase = await loadSkillsFromDatabase(context, 500);
227
- // Filter skills by detected categories
228
- const relevantCategories = new Set(contextScore.recommendedCategories);
229
- const candidateSkills = skillDatabase.filter((skill) => {
230
- // Skip already installed skills
231
- if (installed_skills.some((id) => id.toLowerCase() === skill.id.toLowerCase())) {
232
- return false;
233
- }
234
- // Check if skill matches any detected category
235
- return skill.categories.some((cat) => relevantCategories.has(cat));
236
- });
237
- // Use SkillMatcher for semantic ranking
238
- const matcher = new SkillMatcher({
239
- useFallback: true,
240
- minSimilarity: 0.3,
241
- qualityWeight: 0.3,
242
- });
243
- // Build query from triggered categories
244
- const query = contextScore.recommendedCategories.join(' ');
245
- const matchResults = await matcher.findSimilarSkills(query, candidateSkills, limit);
246
- const matchingMs = Math.round(performance.now() - matchingStart);
247
- // Transform to response format
248
- const suggestions = matchResults.map((result) => {
249
- const skill = result.skill;
250
- return {
251
- skill_id: skill.id,
252
- name: skill.name,
253
- reason: result.matchReason,
254
- confidence: contextScore.confidence,
255
- trigger_types: contextScore.triggers,
256
- trust_tier: skill.trustTier,
257
- quality_score: skill.qualityScore,
258
- };
259
- });
260
- matcher.close();
261
- const totalMs = Math.round(performance.now() - startTime);
262
- return {
263
- suggestions,
264
- context_score: contextScore.score,
265
- rate_limited: false,
266
- triggers_fired: contextScore.triggers,
267
- timing: {
268
- totalMs,
269
- analysisMs,
270
- matchingMs,
271
- },
272
- };
273
- }
274
- /**
275
- * Format suggestions for terminal display
276
- */
277
- export function formatSuggestions(response) {
278
- const lines = [];
279
- lines.push('\n=== Skill Suggestions ===\n');
280
- if (response.rate_limited) {
281
- lines.push('Rate limited. Please wait before requesting more suggestions.');
282
- if (response.next_suggestion_at) {
283
- lines.push(`Next suggestion available at: ${response.next_suggestion_at}`);
284
- }
285
- return lines.join('\n');
286
- }
287
- if (response.suggestions.length === 0) {
288
- lines.push('No relevant suggestions at this time.');
289
- lines.push('');
290
- lines.push(`Context score: ${Math.round(response.context_score * 100)}%`);
291
- lines.push(`Triggers: ${response.triggers_fired.join(', ') || 'none'}`);
292
- return lines.join('\n');
293
- }
294
- lines.push(`Found ${response.suggestions.length} suggestion(s):\n`);
295
- response.suggestions.forEach((sug, index) => {
296
- const trustBadge = getTrustBadge(sug.trust_tier);
297
- lines.push(`${index + 1}. ${sug.name} ${trustBadge}`);
298
- lines.push(` Confidence: ${Math.round(sug.confidence * 100)}%`);
299
- lines.push(` ${sug.reason}`);
300
- lines.push(` Triggers: ${sug.trigger_types.join(', ')}`);
301
- lines.push(` ID: ${sug.skill_id}`);
302
- lines.push('');
303
- });
304
- lines.push('---');
305
- lines.push(`Context score: ${Math.round(response.context_score * 100)}%`);
306
- lines.push(`Triggers fired: ${response.triggers_fired.join(', ')}`);
307
- lines.push(`Completed in ${response.timing.totalMs}ms`);
308
- return lines.join('\n');
309
- }
310
- //# sourceMappingURL=suggest.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"suggest.js","sourceRoot":"","sources":["../../../src/tools/suggest.ts"],"names":[],"mappings":"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"}
@@ -1,123 +0,0 @@
1
- /**
2
- * @fileoverview MCP Uninstall Skill Tool for safely removing installed skills
3
- * @module @skillsmith/mcp-server/tools/uninstall
4
- * @see {@link https://github.com/wrsmith108/skillsmith|Skillsmith Repository}
5
- *
6
- * Provides skill uninstallation functionality with:
7
- * - Manifest-based tracking of installed skills
8
- * - Modification detection (warns if files changed since install)
9
- * - Force removal option for modified or untracked skills
10
- * - Clean removal from ~/.claude/skills/ directory
11
- *
12
- * @example
13
- * // Uninstall a skill
14
- * const result = await uninstallSkill({ skillName: 'commit' });
15
- * if (result.success) {
16
- * console.log(result.message);
17
- * }
18
- *
19
- * @example
20
- * // Force uninstall modified skill
21
- * const result = await uninstallSkill({
22
- * skillName: 'my-custom-skill',
23
- * force: true
24
- * });
25
- */
26
- import { z } from 'zod';
27
- import type { ToolContext } from '../context.js';
28
- export declare const uninstallInputSchema: z.ZodObject<{
29
- skillName: z.ZodString;
30
- force: z.ZodDefault<z.ZodBoolean>;
31
- }, "strip", z.ZodTypeAny, {
32
- force: boolean;
33
- skillName: string;
34
- }, {
35
- skillName: string;
36
- force?: boolean | undefined;
37
- }>;
38
- export type UninstallInput = z.infer<typeof uninstallInputSchema>;
39
- export interface UninstallResult {
40
- success: boolean;
41
- skillName: string;
42
- message: string;
43
- removedPath?: string;
44
- warning?: string;
45
- }
46
- /**
47
- * Uninstall a skill from the local Claude Code skills directory.
48
- *
49
- * This function:
50
- * 1. Loads the manifest to find the skill
51
- * 2. Checks for local modifications (warns unless force=true)
52
- * 3. Removes the skill directory from ~/.claude/skills/
53
- * 4. Updates the manifest to remove the skill entry
54
- *
55
- * If the skill exists on disk but not in manifest, force=true is required.
56
- *
57
- * @param input - Uninstall parameters
58
- * @param input.skillName - Name of the skill to uninstall
59
- * @param input.force - Force removal even if modified (default: false)
60
- * @returns Promise resolving to uninstall result with success status
61
- *
62
- * @example
63
- * // Standard uninstall
64
- * const result = await uninstallSkill({ skillName: 'jest-helper' });
65
- * if (result.success) {
66
- * console.log(`Removed from ${result.removedPath}`);
67
- * }
68
- *
69
- * @example
70
- * // Handle modified skill
71
- * const result = await uninstallSkill({ skillName: 'custom-skill' });
72
- * if (!result.success && result.warning) {
73
- * console.log(result.warning); // 'Local modifications will be lost...'
74
- * // Ask user confirmation, then:
75
- * await uninstallSkill({ skillName: 'custom-skill', force: true });
76
- * }
77
- *
78
- * @example
79
- * // Check if skill is installed first
80
- * const installed = await listInstalledSkills();
81
- * if (installed.includes('my-skill')) {
82
- * await uninstallSkill({ skillName: 'my-skill' });
83
- * }
84
- */
85
- export declare function uninstallSkill(input: UninstallInput, _context?: ToolContext): Promise<UninstallResult>;
86
- /**
87
- * List all skills currently installed via Skillsmith.
88
- *
89
- * Reads the manifest file and returns an array of skill names.
90
- * This only includes skills tracked in the manifest, not skills
91
- * manually placed in ~/.claude/skills/.
92
- *
93
- * @returns Promise resolving to array of installed skill names
94
- *
95
- * @example
96
- * const skills = await listInstalledSkills();
97
- * console.log(`${skills.length} skills installed:`);
98
- * skills.forEach(s => console.log(` - ${s}`));
99
- */
100
- export declare function listInstalledSkills(): Promise<string[]>;
101
- /**
102
- * MCP tool definition
103
- */
104
- export declare const uninstallTool: {
105
- name: string;
106
- description: string;
107
- inputSchema: {
108
- type: "object";
109
- properties: {
110
- skillName: {
111
- type: string;
112
- description: string;
113
- };
114
- force: {
115
- type: string;
116
- description: string;
117
- };
118
- };
119
- required: string[];
120
- };
121
- };
122
- export default uninstallTool;
123
- //# sourceMappingURL=uninstall.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../../src/tools/uninstall.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAGhD,eAAO,MAAM,oBAAoB;;;;;;;;;EAG/B,CAAA;AAEF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAGjE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAiFD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAsB,cAAc,CAClC,KAAK,EAAE,cAAc,EACrB,QAAQ,CAAC,EAAE,WAAW,GACrB,OAAO,CAAC,eAAe,CAAC,CAuF1B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAG7D;AAED;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;CAiBzB,CAAA;AAED,eAAe,aAAa,CAAA"}