@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,282 +0,0 @@
1
- /**
2
- * SMI-616: Install Skill Tool Integration Tests
3
- * Tests the install_skill tool with mocked GitHub and real filesystem
4
- */
5
- import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
6
- import * as fs from 'fs/promises';
7
- import * as path from 'path';
8
- import { createTestFilesystem, createMockManifest, createMockGitHubFetch, fileExists, readJsonFile, } from './setup.js';
9
- // We need to mock the paths used by the install module
10
- // Since the install.ts uses os.homedir(), we'll test the core logic
11
- describe('Install Skill Tool Integration Tests', () => {
12
- let fsContext;
13
- beforeEach(async () => {
14
- fsContext = await createTestFilesystem();
15
- });
16
- afterEach(async () => {
17
- await fsContext.cleanup();
18
- vi.restoreAllMocks();
19
- });
20
- describe('Skill ID Parsing', () => {
21
- it('should parse owner/repo format correctly', () => {
22
- const parseSkillId = (input) => {
23
- if (input.startsWith('https://github.com/')) {
24
- const url = new URL(input);
25
- const parts = url.pathname.split('/').filter(Boolean);
26
- return {
27
- owner: parts[0],
28
- repo: parts[1],
29
- path: parts.slice(2).join('/') || '',
30
- };
31
- }
32
- if (input.includes('/')) {
33
- const [owner, ...rest] = input.split('/');
34
- const repo = rest[0];
35
- const skillPath = rest.slice(1).join('/');
36
- return { owner, repo, path: skillPath };
37
- }
38
- throw new Error('Invalid skill ID format');
39
- };
40
- const result1 = parseSkillId('anthropic/claude-skills/commit');
41
- expect(result1).toEqual({
42
- owner: 'anthropic',
43
- repo: 'claude-skills',
44
- path: 'commit',
45
- });
46
- const result2 = parseSkillId('owner/repo');
47
- expect(result2).toEqual({
48
- owner: 'owner',
49
- repo: 'repo',
50
- path: '',
51
- });
52
- });
53
- it('should parse GitHub URL correctly', () => {
54
- const parseSkillId = (input) => {
55
- if (input.startsWith('https://github.com/')) {
56
- const url = new URL(input);
57
- const parts = url.pathname.split('/').filter(Boolean);
58
- return {
59
- owner: parts[0],
60
- repo: parts[1],
61
- path: parts.slice(2).join('/') || '',
62
- };
63
- }
64
- throw new Error('Invalid URL');
65
- };
66
- const result = parseSkillId('https://github.com/anthropic/claude-skills/tree/main/commit');
67
- expect(result.owner).toBe('anthropic');
68
- expect(result.repo).toBe('claude-skills');
69
- });
70
- });
71
- describe('SKILL.md Validation', () => {
72
- it('should accept valid SKILL.md content', () => {
73
- const validateSkillMd = (content) => {
74
- const errors = [];
75
- if (!content.includes('# ')) {
76
- errors.push('Missing title (# heading)');
77
- }
78
- if (content.length < 100) {
79
- errors.push('SKILL.md is too short (minimum 100 characters)');
80
- }
81
- return { valid: errors.length === 0, errors };
82
- };
83
- const validContent = `# My Amazing Skill
84
-
85
- This is a comprehensive skill that helps developers with their daily tasks.
86
- It provides utilities for code generation, refactoring, and more.
87
-
88
- ## Usage
89
-
90
- Use this skill by mentioning it in Claude Code.
91
- `;
92
- const result = validateSkillMd(validContent);
93
- expect(result.valid).toBe(true);
94
- expect(result.errors).toEqual([]);
95
- });
96
- it('should reject SKILL.md without title', () => {
97
- const validateSkillMd = (content) => {
98
- const errors = [];
99
- if (!content.includes('# ')) {
100
- errors.push('Missing title');
101
- }
102
- if (content.length < 100) {
103
- errors.push('Too short');
104
- }
105
- return { valid: errors.length === 0, errors };
106
- };
107
- const invalidContent = 'This content has no title heading and is long enough but still invalid.'.repeat(3);
108
- const result = validateSkillMd(invalidContent);
109
- expect(result.valid).toBe(false);
110
- expect(result.errors).toContain('Missing title');
111
- });
112
- it('should reject SKILL.md that is too short', () => {
113
- const validateSkillMd = (content) => {
114
- const errors = [];
115
- if (!content.includes('# ')) {
116
- errors.push('Missing title');
117
- }
118
- if (content.length < 100) {
119
- errors.push('Too short');
120
- }
121
- return { valid: errors.length === 0, errors };
122
- };
123
- const shortContent = '# Short\n\nToo short.';
124
- const result = validateSkillMd(shortContent);
125
- expect(result.valid).toBe(false);
126
- expect(result.errors).toContain('Too short');
127
- });
128
- });
129
- describe('Filesystem Operations', () => {
130
- it('should create skill directory', async () => {
131
- const skillPath = path.join(fsContext.skillsDir, 'test-skill');
132
- await fs.mkdir(skillPath, { recursive: true });
133
- const exists = await fileExists(skillPath);
134
- expect(exists).toBe(true);
135
- });
136
- it('should write SKILL.md file', async () => {
137
- const skillPath = path.join(fsContext.skillsDir, 'test-skill');
138
- await fs.mkdir(skillPath, { recursive: true });
139
- const content = '# Test Skill\n\nThis is test content with enough characters to pass validation requirements.';
140
- await fs.writeFile(path.join(skillPath, 'SKILL.md'), content);
141
- const exists = await fileExists(path.join(skillPath, 'SKILL.md'));
142
- expect(exists).toBe(true);
143
- const readContent = await fs.readFile(path.join(skillPath, 'SKILL.md'), 'utf-8');
144
- expect(readContent).toBe(content);
145
- });
146
- it('should create and update manifest', async () => {
147
- await createMockManifest(fsContext.manifestDir, {});
148
- const manifestPath = path.join(fsContext.manifestDir, 'manifest.json');
149
- const manifest = await readJsonFile(manifestPath);
150
- expect(manifest.version).toBe('1.0.0');
151
- expect(manifest.installedSkills).toEqual({});
152
- // Add a skill to manifest
153
- manifest.installedSkills['test-skill'] = {
154
- id: 'owner/test-skill',
155
- name: 'test-skill',
156
- version: '1.0.0',
157
- source: 'github:owner/test-skill',
158
- installPath: path.join(fsContext.skillsDir, 'test-skill'),
159
- installedAt: new Date().toISOString(),
160
- lastUpdated: new Date().toISOString(),
161
- };
162
- await fs.writeFile(manifestPath, JSON.stringify(manifest, null, 2));
163
- const updatedManifest = await readJsonFile(manifestPath);
164
- expect(updatedManifest.installedSkills['test-skill']).toBeDefined();
165
- });
166
- });
167
- describe('Duplicate Installation Detection', () => {
168
- it('should detect already installed skill', async () => {
169
- // Create manifest with existing skill
170
- await createMockManifest(fsContext.manifestDir, {
171
- 'existing-skill': {
172
- id: 'owner/existing-skill',
173
- name: 'existing-skill',
174
- version: '1.0.0',
175
- source: 'github:owner/existing-skill',
176
- installPath: path.join(fsContext.skillsDir, 'existing-skill'),
177
- installedAt: new Date().toISOString(),
178
- lastUpdated: new Date().toISOString(),
179
- },
180
- });
181
- const manifestPath = path.join(fsContext.manifestDir, 'manifest.json');
182
- const manifest = await readJsonFile(manifestPath);
183
- expect(manifest.installedSkills['existing-skill']).toBeDefined();
184
- });
185
- });
186
- describe('GitHub Fetch Mocking', () => {
187
- it('should mock successful GitHub fetch', async () => {
188
- const mockFetch = createMockGitHubFetch({
189
- 'raw.githubusercontent.com/owner/repo/main/SKILL.md': {
190
- status: 200,
191
- body: '# Mock Skill\n\nThis is a mock skill with sufficient content for validation testing purposes.',
192
- },
193
- });
194
- const response = await mockFetch('https://raw.githubusercontent.com/owner/repo/main/SKILL.md');
195
- expect(response.status).toBe(200);
196
- const body = await response.text();
197
- expect(body).toContain('# Mock Skill');
198
- });
199
- it('should mock 404 for non-existent files', async () => {
200
- const mockFetch = createMockGitHubFetch({});
201
- const response = await mockFetch('https://raw.githubusercontent.com/owner/repo/main/NONEXISTENT.md');
202
- expect(response.status).toBe(404);
203
- });
204
- it('should try master branch if main fails', async () => {
205
- const mockFetch = createMockGitHubFetch({
206
- 'raw.githubusercontent.com/owner/repo/master/SKILL.md': {
207
- status: 200,
208
- body: '# Master Branch Skill\n\nContent from master branch with enough text for validation.',
209
- },
210
- });
211
- // Simulate the logic of trying main then master
212
- let response = await mockFetch('https://raw.githubusercontent.com/owner/repo/main/SKILL.md');
213
- if (response.status === 404) {
214
- response = await mockFetch('https://raw.githubusercontent.com/owner/repo/master/SKILL.md');
215
- }
216
- expect(response.status).toBe(200);
217
- const body = await response.text();
218
- expect(body).toContain('Master Branch');
219
- });
220
- });
221
- describe('Post-Install Tips', () => {
222
- it('should generate correct tips', () => {
223
- const generateTips = (skillName) => [
224
- `Skill "${skillName}" installed successfully!`,
225
- `To use this skill, mention it in Claude Code: "Use the ${skillName} skill to..."`,
226
- 'View installed skills: ls ~/.claude/skills/',
227
- 'To uninstall: use the uninstall_skill tool',
228
- ];
229
- const tips = generateTips('my-skill');
230
- expect(tips[0]).toContain('my-skill');
231
- expect(tips[1]).toContain('my-skill');
232
- expect(tips.length).toBe(4);
233
- });
234
- });
235
- describe('Full Installation Flow Simulation', () => {
236
- it('should complete full installation flow', async () => {
237
- const skillName = 'complete-skill';
238
- const skillPath = path.join(fsContext.skillsDir, skillName);
239
- // 1. Create skill directory
240
- await fs.mkdir(skillPath, { recursive: true });
241
- // 2. Write SKILL.md
242
- const skillContent = `# Complete Skill
243
-
244
- A comprehensive skill for testing the full installation flow.
245
- This content is long enough to pass the validation requirements.
246
-
247
- ## Features
248
-
249
- - Feature 1
250
- - Feature 2
251
-
252
- ## Usage
253
-
254
- Use this skill by mentioning it in Claude Code.
255
- `;
256
- await fs.writeFile(path.join(skillPath, 'SKILL.md'), skillContent);
257
- // 3. Write optional README.md
258
- await fs.writeFile(path.join(skillPath, 'README.md'), '# Complete Skill\n\nAdditional documentation.');
259
- // 4. Update manifest
260
- const manifestPath = path.join(fsContext.manifestDir, 'manifest.json');
261
- await createMockManifest(fsContext.manifestDir, {
262
- [skillName]: {
263
- id: 'owner/complete-skill',
264
- name: skillName,
265
- version: '1.0.0',
266
- source: 'github:owner/complete-skill',
267
- installPath: skillPath,
268
- installedAt: new Date().toISOString(),
269
- lastUpdated: new Date().toISOString(),
270
- },
271
- });
272
- // Verify installation
273
- expect(await fileExists(skillPath)).toBe(true);
274
- expect(await fileExists(path.join(skillPath, 'SKILL.md'))).toBe(true);
275
- expect(await fileExists(path.join(skillPath, 'README.md'))).toBe(true);
276
- expect(await fileExists(manifestPath)).toBe(true);
277
- const manifest = await readJsonFile(manifestPath);
278
- expect(manifest.installedSkills[skillName]).toBeDefined();
279
- });
280
- });
281
- });
282
- //# sourceMappingURL=install.integration.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"install.integration.test.js","sourceRoot":"","sources":["../../../tests/integration/install.integration.test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AACxE,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,UAAU,EACV,YAAY,GAEb,MAAM,YAAY,CAAA;AAEnB,uDAAuD;AACvD,oEAAoE;AAEpE,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;IACpD,IAAI,SAAgC,CAAA;IAEpC,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,SAAS,GAAG,MAAM,oBAAoB,EAAE,CAAA;IAC1C,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,SAAS,CAAC,OAAO,EAAE,CAAA;QACzB,EAAE,CAAC,eAAe,EAAE,CAAA;IACtB,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,EAAE;gBACrC,IAAI,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;oBAC5C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAA;oBAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;oBACrD,OAAO;wBACL,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;wBACf,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;wBACd,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;qBACrC,CAAA;gBACH,CAAC;gBAED,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACxB,MAAM,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;oBACzC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;oBACpB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;oBACzC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;gBACzC,CAAC;gBAED,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;YAC5C,CAAC,CAAA;YAED,MAAM,OAAO,GAAG,YAAY,CAAC,gCAAgC,CAAC,CAAA;YAC9D,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;gBACtB,KAAK,EAAE,WAAW;gBAClB,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,QAAQ;aACf,CAAC,CAAA;YAEF,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,CAAC,CAAA;YAC1C,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;gBACtB,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,EAAE;aACT,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,EAAE;gBACrC,IAAI,KAAK,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;oBAC5C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAA;oBAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;oBACrD,OAAO;wBACL,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;wBACf,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;wBACd,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;qBACrC,CAAA;gBACH,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,aAAa,CAAC,CAAA;YAChC,CAAC,CAAA;YAED,MAAM,MAAM,GAAG,YAAY,CAAC,6DAA6D,CAAC,CAAA;YAC1F,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;YACtC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QAC3C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,eAAe,GAAG,CAAC,OAAe,EAAE,EAAE;gBAC1C,MAAM,MAAM,GAAa,EAAE,CAAA;gBAC3B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5B,MAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;gBAC1C,CAAC;gBACD,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;oBACzB,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;gBAC/D,CAAC;gBACD,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;YAC/C,CAAC,CAAA;YAED,MAAM,YAAY,GAAG;;;;;;;;CAQ1B,CAAA;YAEK,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,CAAA;YAC5C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC/B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACnC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,eAAe,GAAG,CAAC,OAAe,EAAE,EAAE;gBAC1C,MAAM,MAAM,GAAa,EAAE,CAAA;gBAC3B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5B,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;gBAC9B,CAAC;gBACD,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;oBACzB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBAC1B,CAAC;gBACD,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;YAC/C,CAAC,CAAA;YAED,MAAM,cAAc,GAClB,yEAAyE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;YACrF,MAAM,MAAM,GAAG,eAAe,CAAC,cAAc,CAAC,CAAA;YAC9C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAChC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAA;QAClD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,eAAe,GAAG,CAAC,OAAe,EAAE,EAAE;gBAC1C,MAAM,MAAM,GAAa,EAAE,CAAA;gBAC3B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5B,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;gBAC9B,CAAC;gBACD,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;oBACzB,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBAC1B,CAAC;gBACD,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;YAC/C,CAAC,CAAA;YAED,MAAM,YAAY,GAAG,uBAAuB,CAAA;YAC5C,MAAM,MAAM,GAAG,eAAe,CAAC,YAAY,CAAC,CAAA;YAC5C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAChC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;QAC9C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;YAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;YAC9D,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAE9C,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,CAAA;YAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3B,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;YAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;YAC9D,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAE9C,MAAM,OAAO,GACX,8FAA8F,CAAA;YAChG,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAA;YAE7D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAA;YACjE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAEzB,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAA;YAChF,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACnC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;YACjD,MAAM,kBAAkB,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;YAEnD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,eAAe,CAAC,CAAA;YACtE,MAAM,QAAQ,GAAG,MAAM,YAAY,CAGhC,YAAY,CAAC,CAAA;YAEhB,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACtC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;YAE5C,0BAA0B;YAC1B,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,GAAG;gBACvC,EAAE,EAAE,kBAAkB;gBACtB,IAAI,EAAE,YAAY;gBAClB,OAAO,EAAE,OAAO;gBAChB,MAAM,EAAE,yBAAyB;gBACjC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,YAAY,CAAC;gBACzD,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gBACrC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACtC,CAAA;YAED,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;YAEnE,MAAM,eAAe,GAAG,MAAM,YAAY,CAAkB,YAAY,CAAC,CAAA;YACzE,MAAM,CAAC,eAAe,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;QACrE,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAChD,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,sCAAsC;YACtC,MAAM,kBAAkB,CAAC,SAAS,CAAC,WAAW,EAAE;gBAC9C,gBAAgB,EAAE;oBAChB,EAAE,EAAE,sBAAsB;oBAC1B,IAAI,EAAE,gBAAgB;oBACtB,OAAO,EAAE,OAAO;oBAChB,MAAM,EAAE,6BAA6B;oBACrC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,gBAAgB,CAAC;oBAC7D,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACrC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACtC;aACF,CAAC,CAAA;YAEF,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,eAAe,CAAC,CAAA;YACtE,MAAM,QAAQ,GAAG,MAAM,YAAY,CACjC,YAAY,CACb,CAAA;YAED,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;QAClE,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,SAAS,GAAG,qBAAqB,CAAC;gBACtC,oDAAoD,EAAE;oBACpD,MAAM,EAAE,GAAG;oBACX,IAAI,EAAE,+FAA+F;iBACtG;aACF,CAAC,CAAA;YAEF,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,4DAA4D,CAAC,CAAA;YAC9F,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YAEjC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;YAClC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAA;QACxC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,SAAS,GAAG,qBAAqB,CAAC,EAAE,CAAC,CAAA;YAE3C,MAAM,QAAQ,GAAG,MAAM,SAAS,CAC9B,kEAAkE,CACnE,CAAA;YACD,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACnC,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,SAAS,GAAG,qBAAqB,CAAC;gBACtC,sDAAsD,EAAE;oBACtD,MAAM,EAAE,GAAG;oBACX,IAAI,EAAE,sFAAsF;iBAC7F;aACF,CAAC,CAAA;YAEF,gDAAgD;YAChD,IAAI,QAAQ,GAAG,MAAM,SAAS,CAAC,4DAA4D,CAAC,CAAA;YAC5F,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,QAAQ,GAAG,MAAM,SAAS,CAAC,8DAA8D,CAAC,CAAA;YAC5F,CAAC;YAED,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACjC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;YAClC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAA;QACzC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;QACjC,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACtC,MAAM,YAAY,GAAG,CAAC,SAAiB,EAAE,EAAE,CAAC;gBAC1C,UAAU,SAAS,2BAA2B;gBAC9C,0DAA0D,SAAS,eAAe;gBAClF,6CAA6C;gBAC7C,4CAA4C;aAC7C,CAAA;YAED,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC,CAAA;YACrC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;YACrC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;YACrC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;QACjD,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;YACtD,MAAM,SAAS,GAAG,gBAAgB,CAAA;YAClC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;YAE3D,4BAA4B;YAC5B,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAE9C,oBAAoB;YACpB,MAAM,YAAY,GAAG;;;;;;;;;;;;;CAa1B,CAAA;YACK,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,YAAY,CAAC,CAAA;YAElE,8BAA8B;YAC9B,MAAM,EAAE,CAAC,SAAS,CAChB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EACjC,+CAA+C,CAChD,CAAA;YAED,qBAAqB;YACrB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,eAAe,CAAC,CAAA;YACtE,MAAM,kBAAkB,CAAC,SAAS,CAAC,WAAW,EAAE;gBAC9C,CAAC,SAAS,CAAC,EAAE;oBACX,EAAE,EAAE,sBAAsB;oBAC1B,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,OAAO;oBAChB,MAAM,EAAE,6BAA6B;oBACrC,WAAW,EAAE,SAAS;oBACtB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACrC,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACtC;aACF,CAAC,CAAA;YAEF,sBAAsB;YACtB,MAAM,CAAC,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC9C,MAAM,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACrE,MAAM,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACtE,MAAM,CAAC,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAEjD,MAAM,QAAQ,GAAG,MAAM,YAAY,CACjC,YAAY,CACb,CAAA;YACD,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;QAC3D,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=recommend.integration.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"recommend.integration.test.d.ts","sourceRoot":"","sources":["../../../tests/integration/recommend.integration.test.ts"],"names":[],"mappings":""}
@@ -1,217 +0,0 @@
1
- /**
2
- * SMI-756: Integration tests for recommend MCP tool
3
- * Tests skill recommendations with real database and matching
4
- * Updated for SMI-902: Use real database instead of hardcoded skills
5
- */
6
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
7
- import { createTestDatabase } from './setup.js';
8
- import { executeRecommend, formatRecommendations } from '../../src/tools/recommend.js';
9
- describe('Recommend Tool Integration', () => {
10
- let ctx;
11
- let toolContext;
12
- beforeEach(async () => {
13
- ctx = await createTestDatabase();
14
- // SMI-1183: Include apiClient for API integration
15
- toolContext = {
16
- db: ctx.db,
17
- searchService: ctx.searchService,
18
- skillRepository: ctx.skillRepository,
19
- apiClient: ctx.apiClient,
20
- };
21
- });
22
- afterEach(async () => {
23
- await ctx.cleanup();
24
- });
25
- describe('executeRecommend', () => {
26
- it('should return recommendations with auto-detected skills when installed skills is empty', async () => {
27
- // SMI-906: Empty installed_skills now triggers auto-detection from ~/.claude/skills/
28
- const result = await executeRecommend({
29
- installed_skills: [],
30
- limit: 5,
31
- }, toolContext);
32
- expect(result.recommendations).toBeDefined();
33
- expect(result.recommendations.length).toBeGreaterThan(0);
34
- expect(result.recommendations.length).toBeLessThanOrEqual(5);
35
- // installed_count may be > 0 due to auto-detection from ~/.claude/skills/
36
- expect(result.context.installed_count).toBeGreaterThanOrEqual(0);
37
- expect(result.context.using_semantic_matching).toBe(true);
38
- });
39
- it('should return recommendations based on installed skills', async () => {
40
- const result = await executeRecommend({
41
- installed_skills: ['anthropic/commit'],
42
- detect_overlap: false,
43
- limit: 5,
44
- }, toolContext);
45
- expect(result.recommendations).toBeDefined();
46
- expect(result.recommendations.length).toBeGreaterThan(0);
47
- expect(result.context.installed_count).toBe(1);
48
- // Should not include installed skill
49
- const ids = result.recommendations.map((r) => r.skill_id);
50
- expect(ids).not.toContain('anthropic/commit');
51
- });
52
- it('should filter overlapping skills when enabled', async () => {
53
- const withOverlap = await executeRecommend({
54
- installed_skills: ['anthropic/commit'],
55
- detect_overlap: true,
56
- limit: 10,
57
- }, toolContext);
58
- const withoutOverlap = await executeRecommend({
59
- installed_skills: ['anthropic/commit'],
60
- detect_overlap: false,
61
- limit: 10,
62
- }, toolContext);
63
- // With overlap detection, fewer skills may be recommended
64
- expect(withOverlap.overlap_filtered).toBeGreaterThanOrEqual(0);
65
- expect(withoutOverlap.overlap_filtered).toBe(0);
66
- });
67
- it('should respect project context', async () => {
68
- const result = await executeRecommend({
69
- installed_skills: [],
70
- project_context: 'React frontend with Jest testing',
71
- detect_overlap: false,
72
- limit: 10,
73
- }, toolContext);
74
- expect(result.context.has_project_context).toBe(true);
75
- expect(result.recommendations.length).toBeGreaterThan(0);
76
- });
77
- it('should respect minimum similarity threshold', async () => {
78
- const highThreshold = await executeRecommend({
79
- installed_skills: ['anthropic/commit'],
80
- detect_overlap: false,
81
- min_similarity: 0.9,
82
- limit: 10,
83
- }, toolContext);
84
- const lowThreshold = await executeRecommend({
85
- installed_skills: ['anthropic/commit'],
86
- detect_overlap: false,
87
- min_similarity: 0.1,
88
- limit: 10,
89
- }, toolContext);
90
- // Lower threshold should return more results
91
- expect(lowThreshold.recommendations.length).toBeGreaterThanOrEqual(highThreshold.recommendations.length);
92
- });
93
- it('should include quality scores and trust tiers', async () => {
94
- const result = await executeRecommend({
95
- installed_skills: [],
96
- detect_overlap: false,
97
- limit: 5,
98
- }, toolContext);
99
- for (const rec of result.recommendations) {
100
- expect(rec.quality_score).toBeGreaterThanOrEqual(0);
101
- expect(rec.quality_score).toBeLessThanOrEqual(100);
102
- expect(['verified', 'community', 'standard', 'unverified']).toContain(rec.trust_tier);
103
- expect(rec.reason).toBeDefined();
104
- expect(rec.similarity_score).toBeGreaterThanOrEqual(0);
105
- expect(rec.similarity_score).toBeLessThanOrEqual(1);
106
- }
107
- });
108
- it('should respect limit parameter', async () => {
109
- const result = await executeRecommend({
110
- installed_skills: [],
111
- detect_overlap: false,
112
- limit: 3,
113
- }, toolContext);
114
- expect(result.recommendations.length).toBeLessThanOrEqual(3);
115
- });
116
- it('should track timing information', async () => {
117
- const result = await executeRecommend({
118
- installed_skills: [],
119
- limit: 5,
120
- }, toolContext);
121
- expect(result.timing.totalMs).toBeGreaterThanOrEqual(0);
122
- });
123
- });
124
- // SMI-907: Tests for improved overlap detection with semantically similar names
125
- describe('SMI-907: Name-based overlap detection', () => {
126
- it('should NOT recommend docker-compose when docker is installed', async () => {
127
- const result = await executeRecommend({
128
- installed_skills: ['community/docker'],
129
- detect_overlap: false, // Disable semantic overlap to test name-based filtering
130
- limit: 50,
131
- }, toolContext);
132
- const recommendedIds = result.recommendations.map((r) => r.skill_id);
133
- // docker-compose should be filtered because "docker-compose" contains "docker"
134
- expect(recommendedIds).not.toContain('community/docker-compose');
135
- // Also verify the installed skill itself is not recommended
136
- expect(recommendedIds).not.toContain('community/docker');
137
- });
138
- it('should still recommend vitest-helper when jest-helper is installed', async () => {
139
- const result = await executeRecommend({
140
- installed_skills: ['community/jest-helper'],
141
- detect_overlap: false, // Disable semantic overlap to test name-based filtering
142
- limit: 50,
143
- }, toolContext);
144
- const recommendedIds = result.recommendations.map((r) => r.skill_id);
145
- // vitest-helper should still be recommended - different testing framework
146
- // "jest-helper" and "vitest-helper" don't share name containment
147
- expect(recommendedIds).toContain('community/vitest-helper');
148
- // jest-helper itself should not be recommended (installed)
149
- expect(recommendedIds).not.toContain('community/jest-helper');
150
- });
151
- it('should NOT recommend git-commit-helper when commit is installed', async () => {
152
- const result = await executeRecommend({
153
- installed_skills: ['anthropic/commit'],
154
- detect_overlap: false, // Disable semantic overlap to test name-based filtering
155
- limit: 50,
156
- }, toolContext);
157
- const recommendedIds = result.recommendations.map((r) => r.skill_id);
158
- // git-commit-helper should be filtered because "git-commit-helper" contains "commit"
159
- expect(recommendedIds).not.toContain('community/git-commit-helper');
160
- // The installed skill itself should not be recommended
161
- expect(recommendedIds).not.toContain('anthropic/commit');
162
- });
163
- it('should filter skills when only skill name (not full ID) is provided', async () => {
164
- // Test with just "docker" as installed (simulating user-provided short name)
165
- const result = await executeRecommend({
166
- installed_skills: ['docker'],
167
- detect_overlap: false,
168
- limit: 50,
169
- }, toolContext);
170
- const recommendedIds = result.recommendations.map((r) => r.skill_id);
171
- // Should filter docker-compose because "docker-compose" contains "docker"
172
- expect(recommendedIds).not.toContain('community/docker-compose');
173
- });
174
- it('should handle case-insensitive name matching', async () => {
175
- const result = await executeRecommend({
176
- installed_skills: ['COMMUNITY/DOCKER'],
177
- detect_overlap: false,
178
- limit: 50,
179
- }, toolContext);
180
- const recommendedIds = result.recommendations.map((r) => r.skill_id);
181
- // Should still filter docker-compose with case-insensitive matching
182
- expect(recommendedIds).not.toContain('community/docker-compose');
183
- });
184
- });
185
- describe('formatRecommendations', () => {
186
- it('should format recommendations for terminal display', async () => {
187
- const result = await executeRecommend({
188
- installed_skills: [],
189
- detect_overlap: false,
190
- limit: 3,
191
- }, toolContext);
192
- const formatted = formatRecommendations(result);
193
- expect(formatted).toContain('Skill Recommendations');
194
- expect(formatted).toContain('Candidates considered:');
195
- expect(formatted).toContain('Semantic matching: enabled');
196
- });
197
- it('should show no recommendations message when empty', async () => {
198
- // Create a result with no recommendations
199
- const emptyResult = {
200
- recommendations: [],
201
- candidates_considered: 0,
202
- overlap_filtered: 0,
203
- context: {
204
- installed_count: 0,
205
- has_project_context: false,
206
- using_semantic_matching: true,
207
- auto_detected: false,
208
- },
209
- timing: { totalMs: 1 },
210
- };
211
- const formatted = formatRecommendations(emptyResult);
212
- expect(formatted).toContain('No recommendations found');
213
- expect(formatted).toContain('Suggestions:');
214
- });
215
- });
216
- });
217
- //# sourceMappingURL=recommend.integration.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"recommend.integration.test.js","sourceRoot":"","sources":["../../../tests/integration/recommend.integration.test.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- /**
2
- * SMI-616: Search Tool Integration Tests
3
- * Tests the search tool with a real SQLite database
4
- */
5
- export {};
6
- //# sourceMappingURL=search.integration.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search.integration.test.d.ts","sourceRoot":"","sources":["../../../tests/integration/search.integration.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}