@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.
Files changed (306) hide show
  1. package/dist/.tsbuildinfo +1 -0
  2. package/dist/src/__tests__/get-skill.test.d.ts +6 -0
  3. package/dist/src/__tests__/get-skill.test.d.ts.map +1 -0
  4. package/dist/src/__tests__/get-skill.test.js +88 -0
  5. package/dist/src/__tests__/get-skill.test.js.map +1 -0
  6. package/dist/src/__tests__/middleware/errorFormatter.test.d.ts +7 -0
  7. package/dist/src/__tests__/middleware/errorFormatter.test.d.ts.map +1 -0
  8. package/dist/src/__tests__/middleware/errorFormatter.test.js +304 -0
  9. package/dist/src/__tests__/middleware/errorFormatter.test.js.map +1 -0
  10. package/dist/src/__tests__/middleware/license.test.d.ts +7 -0
  11. package/dist/src/__tests__/middleware/license.test.d.ts.map +1 -0
  12. package/dist/src/__tests__/middleware/license.test.js +500 -0
  13. package/dist/src/__tests__/middleware/license.test.js.map +1 -0
  14. package/dist/src/__tests__/search.test.d.ts +6 -0
  15. package/dist/src/__tests__/search.test.d.ts.map +1 -0
  16. package/dist/src/__tests__/search.test.js +86 -0
  17. package/dist/src/__tests__/search.test.js.map +1 -0
  18. package/dist/src/__tests__/test-utils.d.ts +19 -0
  19. package/dist/src/__tests__/test-utils.d.ts.map +1 -0
  20. package/dist/src/__tests__/test-utils.js +87 -0
  21. package/dist/src/__tests__/test-utils.js.map +1 -0
  22. package/dist/src/context/index.d.ts +19 -0
  23. package/dist/src/context/index.d.ts.map +1 -0
  24. package/dist/src/context/index.js +25 -0
  25. package/dist/src/context/index.js.map +1 -0
  26. package/dist/src/context/project-detector.d.ts +145 -0
  27. package/dist/src/context/project-detector.d.ts.map +1 -0
  28. package/dist/src/context/project-detector.js +321 -0
  29. package/dist/src/context/project-detector.js.map +1 -0
  30. package/dist/src/context.d.ts +100 -0
  31. package/dist/src/context.d.ts.map +1 -0
  32. package/dist/src/context.js +157 -0
  33. package/dist/src/context.js.map +1 -0
  34. package/dist/src/core-shim.d.ts +7 -0
  35. package/dist/src/core-shim.d.ts.map +1 -0
  36. package/dist/src/core-shim.js +9 -0
  37. package/dist/src/core-shim.js.map +1 -0
  38. package/dist/src/health/healthCheck.d.ts +88 -0
  39. package/dist/src/health/healthCheck.d.ts.map +1 -0
  40. package/dist/src/health/healthCheck.js +117 -0
  41. package/dist/src/health/healthCheck.js.map +1 -0
  42. package/dist/src/health/index.d.ts +21 -0
  43. package/dist/src/health/index.d.ts.map +1 -0
  44. package/dist/src/health/index.js +21 -0
  45. package/dist/src/health/index.js.map +1 -0
  46. package/dist/src/health/readinessCheck.d.ts +139 -0
  47. package/dist/src/health/readinessCheck.d.ts.map +1 -0
  48. package/dist/src/health/readinessCheck.js +266 -0
  49. package/dist/src/health/readinessCheck.js.map +1 -0
  50. package/dist/src/index.d.ts +8 -0
  51. package/dist/src/index.d.ts.map +1 -0
  52. package/dist/src/index.js +178 -0
  53. package/dist/src/index.js.map +1 -0
  54. package/dist/src/index.test.d.ts +2 -0
  55. package/dist/src/index.test.d.ts.map +1 -0
  56. package/dist/src/index.test.js +43 -0
  57. package/dist/src/index.test.js.map +1 -0
  58. package/dist/src/logger.d.ts +26 -0
  59. package/dist/src/logger.d.ts.map +1 -0
  60. package/dist/src/logger.js +179 -0
  61. package/dist/src/logger.js.map +1 -0
  62. package/dist/src/middleware/__tests__/csp.test.d.ts +2 -0
  63. package/dist/src/middleware/__tests__/csp.test.d.ts.map +1 -0
  64. package/dist/src/middleware/__tests__/csp.test.js +389 -0
  65. package/dist/src/middleware/__tests__/csp.test.js.map +1 -0
  66. package/dist/src/middleware/csp.d.ts +87 -0
  67. package/dist/src/middleware/csp.d.ts.map +1 -0
  68. package/dist/src/middleware/csp.js +273 -0
  69. package/dist/src/middleware/csp.js.map +1 -0
  70. package/dist/src/middleware/degradation.d.ts +99 -0
  71. package/dist/src/middleware/degradation.d.ts.map +1 -0
  72. package/dist/src/middleware/degradation.js +315 -0
  73. package/dist/src/middleware/degradation.js.map +1 -0
  74. package/dist/src/middleware/errorFormatter.d.ts +119 -0
  75. package/dist/src/middleware/errorFormatter.d.ts.map +1 -0
  76. package/dist/src/middleware/errorFormatter.js +294 -0
  77. package/dist/src/middleware/errorFormatter.js.map +1 -0
  78. package/dist/src/middleware/index.d.ts +10 -0
  79. package/dist/src/middleware/index.d.ts.map +1 -0
  80. package/dist/src/middleware/index.js +14 -0
  81. package/dist/src/middleware/index.js.map +1 -0
  82. package/dist/src/middleware/license.d.ts +161 -0
  83. package/dist/src/middleware/license.d.ts.map +1 -0
  84. package/dist/src/middleware/license.js +281 -0
  85. package/dist/src/middleware/license.js.map +1 -0
  86. package/dist/src/middleware/toolFeatureMapping.d.ts +36 -0
  87. package/dist/src/middleware/toolFeatureMapping.d.ts.map +1 -0
  88. package/dist/src/middleware/toolFeatureMapping.js +90 -0
  89. package/dist/src/middleware/toolFeatureMapping.js.map +1 -0
  90. package/dist/src/onboarding/first-run.d.ts +64 -0
  91. package/dist/src/onboarding/first-run.d.ts.map +1 -0
  92. package/dist/src/onboarding/first-run.js +77 -0
  93. package/dist/src/onboarding/first-run.js.map +1 -0
  94. package/dist/src/onboarding/index.d.ts +7 -0
  95. package/dist/src/onboarding/index.d.ts.map +1 -0
  96. package/dist/src/onboarding/index.js +7 -0
  97. package/dist/src/onboarding/index.js.map +1 -0
  98. package/dist/src/suggestions/index.d.ts +21 -0
  99. package/dist/src/suggestions/index.d.ts.map +1 -0
  100. package/dist/src/suggestions/index.js +20 -0
  101. package/dist/src/suggestions/index.js.map +1 -0
  102. package/dist/src/suggestions/suggestion-engine.d.ts +185 -0
  103. package/dist/src/suggestions/suggestion-engine.d.ts.map +1 -0
  104. package/dist/src/suggestions/suggestion-engine.js +352 -0
  105. package/dist/src/suggestions/suggestion-engine.js.map +1 -0
  106. package/dist/src/suggestions/types.d.ts +88 -0
  107. package/dist/src/suggestions/types.d.ts.map +1 -0
  108. package/dist/src/suggestions/types.js +21 -0
  109. package/dist/src/suggestions/types.js.map +1 -0
  110. package/dist/src/tools/analyze.d.ts +151 -0
  111. package/dist/src/tools/analyze.d.ts.map +1 -0
  112. package/dist/src/tools/analyze.js +205 -0
  113. package/dist/src/tools/analyze.js.map +1 -0
  114. package/dist/src/tools/compare.d.ts +149 -0
  115. package/dist/src/tools/compare.d.ts.map +1 -0
  116. package/dist/src/tools/compare.js +464 -0
  117. package/dist/src/tools/compare.js.map +1 -0
  118. package/dist/src/tools/get-skill.d.ts +116 -0
  119. package/dist/src/tools/get-skill.d.ts.map +1 -0
  120. package/dist/src/tools/get-skill.js +224 -0
  121. package/dist/src/tools/get-skill.js.map +1 -0
  122. package/dist/src/tools/index.d.ts +20 -0
  123. package/dist/src/tools/index.d.ts.map +1 -0
  124. package/dist/src/tools/index.js +20 -0
  125. package/dist/src/tools/index.js.map +1 -0
  126. package/dist/src/tools/install.d.ts +122 -0
  127. package/dist/src/tools/install.d.ts.map +1 -0
  128. package/dist/src/tools/install.js +314 -0
  129. package/dist/src/tools/install.js.map +1 -0
  130. package/dist/src/tools/recommend.d.ts +171 -0
  131. package/dist/src/tools/recommend.d.ts.map +1 -0
  132. package/dist/src/tools/recommend.js +325 -0
  133. package/dist/src/tools/recommend.js.map +1 -0
  134. package/dist/src/tools/search.d.ts +121 -0
  135. package/dist/src/tools/search.d.ts.map +1 -0
  136. package/dist/src/tools/search.js +249 -0
  137. package/dist/src/tools/search.js.map +1 -0
  138. package/dist/src/tools/suggest.d.ts +181 -0
  139. package/dist/src/tools/suggest.d.ts.map +1 -0
  140. package/dist/src/tools/suggest.js +342 -0
  141. package/dist/src/tools/suggest.js.map +1 -0
  142. package/dist/src/tools/uninstall.d.ts +123 -0
  143. package/dist/src/tools/uninstall.d.ts.map +1 -0
  144. package/dist/src/tools/uninstall.js +250 -0
  145. package/dist/src/tools/uninstall.js.map +1 -0
  146. package/dist/src/tools/validate.d.ts +122 -0
  147. package/dist/src/tools/validate.d.ts.map +1 -0
  148. package/dist/src/tools/validate.js +497 -0
  149. package/dist/src/tools/validate.js.map +1 -0
  150. package/dist/src/utils/installed-skills.d.ts +101 -0
  151. package/dist/src/utils/installed-skills.d.ts.map +1 -0
  152. package/dist/src/utils/installed-skills.js +220 -0
  153. package/dist/src/utils/installed-skills.js.map +1 -0
  154. package/dist/src/utils/validation.d.ts +76 -0
  155. package/dist/src/utils/validation.d.ts.map +1 -0
  156. package/dist/src/utils/validation.js +153 -0
  157. package/dist/src/utils/validation.js.map +1 -0
  158. package/dist/src/webhooks/index.d.ts +8 -0
  159. package/dist/src/webhooks/index.d.ts.map +1 -0
  160. package/dist/src/webhooks/index.js +9 -0
  161. package/dist/src/webhooks/index.js.map +1 -0
  162. package/dist/src/webhooks/webhook-endpoint.d.ts +149 -0
  163. package/dist/src/webhooks/webhook-endpoint.d.ts.map +1 -0
  164. package/dist/src/webhooks/webhook-endpoint.js +339 -0
  165. package/dist/src/webhooks/webhook-endpoint.js.map +1 -0
  166. package/dist/tests/compare.test.d.ts +6 -0
  167. package/dist/tests/compare.test.d.ts.map +1 -0
  168. package/dist/tests/compare.test.js +225 -0
  169. package/dist/tests/compare.test.js.map +1 -0
  170. package/dist/tests/context/project-detector.test.d.ts +6 -0
  171. package/dist/tests/context/project-detector.test.d.ts.map +1 -0
  172. package/dist/tests/context/project-detector.test.js +719 -0
  173. package/dist/tests/context/project-detector.test.js.map +1 -0
  174. package/dist/tests/e2e/compare.e2e.test.d.ts +10 -0
  175. package/dist/tests/e2e/compare.e2e.test.d.ts.map +1 -0
  176. package/dist/tests/e2e/compare.e2e.test.js +286 -0
  177. package/dist/tests/e2e/compare.e2e.test.js.map +1 -0
  178. package/dist/tests/e2e/install-flow.e2e.test.d.ts +10 -0
  179. package/dist/tests/e2e/install-flow.e2e.test.d.ts.map +1 -0
  180. package/dist/tests/e2e/install-flow.e2e.test.js +209 -0
  181. package/dist/tests/e2e/install-flow.e2e.test.js.map +1 -0
  182. package/dist/tests/e2e/recommend.e2e.test.d.ts +12 -0
  183. package/dist/tests/e2e/recommend.e2e.test.d.ts.map +1 -0
  184. package/dist/tests/e2e/recommend.e2e.test.js +347 -0
  185. package/dist/tests/e2e/recommend.e2e.test.js.map +1 -0
  186. package/dist/tests/e2e/skill-flow.e2e.test.d.ts +10 -0
  187. package/dist/tests/e2e/skill-flow.e2e.test.d.ts.map +1 -0
  188. package/dist/tests/e2e/skill-flow.e2e.test.js +280 -0
  189. package/dist/tests/e2e/skill-flow.e2e.test.js.map +1 -0
  190. package/dist/tests/e2e/suggest.e2e.test.d.ts +13 -0
  191. package/dist/tests/e2e/suggest.e2e.test.d.ts.map +1 -0
  192. package/dist/tests/e2e/suggest.e2e.test.js +347 -0
  193. package/dist/tests/e2e/suggest.e2e.test.js.map +1 -0
  194. package/dist/tests/e2e/utils/baseline-collector.d.ts +107 -0
  195. package/dist/tests/e2e/utils/baseline-collector.d.ts.map +1 -0
  196. package/dist/tests/e2e/utils/baseline-collector.js +211 -0
  197. package/dist/tests/e2e/utils/baseline-collector.js.map +1 -0
  198. package/dist/tests/e2e/utils/hardcoded-detector.d.ts +46 -0
  199. package/dist/tests/e2e/utils/hardcoded-detector.d.ts.map +1 -0
  200. package/dist/tests/e2e/utils/hardcoded-detector.js +255 -0
  201. package/dist/tests/e2e/utils/hardcoded-detector.js.map +1 -0
  202. package/dist/tests/e2e/utils/index.d.ts +7 -0
  203. package/dist/tests/e2e/utils/index.d.ts.map +1 -0
  204. package/dist/tests/e2e/utils/index.js +7 -0
  205. package/dist/tests/e2e/utils/index.js.map +1 -0
  206. package/dist/tests/e2e/utils/linear-reporter.d.ts +60 -0
  207. package/dist/tests/e2e/utils/linear-reporter.d.ts.map +1 -0
  208. package/dist/tests/e2e/utils/linear-reporter.js +232 -0
  209. package/dist/tests/e2e/utils/linear-reporter.js.map +1 -0
  210. package/dist/tests/health.test.d.ts +9 -0
  211. package/dist/tests/health.test.d.ts.map +1 -0
  212. package/dist/tests/health.test.js +308 -0
  213. package/dist/tests/health.test.js.map +1 -0
  214. package/dist/tests/integration/analyze.integration.test.d.ts +2 -0
  215. package/dist/tests/integration/analyze.integration.test.d.ts.map +1 -0
  216. package/dist/tests/integration/analyze.integration.test.js +244 -0
  217. package/dist/tests/integration/analyze.integration.test.js.map +1 -0
  218. package/dist/tests/integration/compare.integration.test.d.ts +2 -0
  219. package/dist/tests/integration/compare.integration.test.d.ts.map +1 -0
  220. package/dist/tests/integration/compare.integration.test.js +120 -0
  221. package/dist/tests/integration/compare.integration.test.js.map +1 -0
  222. package/dist/tests/integration/fixtures/test-skills.d.ts +62 -0
  223. package/dist/tests/integration/fixtures/test-skills.d.ts.map +1 -0
  224. package/dist/tests/integration/fixtures/test-skills.js +644 -0
  225. package/dist/tests/integration/fixtures/test-skills.js.map +1 -0
  226. package/dist/tests/integration/get-skill.integration.test.d.ts +6 -0
  227. package/dist/tests/integration/get-skill.integration.test.d.ts.map +1 -0
  228. package/dist/tests/integration/get-skill.integration.test.js +203 -0
  229. package/dist/tests/integration/get-skill.integration.test.js.map +1 -0
  230. package/dist/tests/integration/github-api.integration.test.d.ts +14 -0
  231. package/dist/tests/integration/github-api.integration.test.d.ts.map +1 -0
  232. package/dist/tests/integration/github-api.integration.test.js +190 -0
  233. package/dist/tests/integration/github-api.integration.test.js.map +1 -0
  234. package/dist/tests/integration/install.integration.test.d.ts +6 -0
  235. package/dist/tests/integration/install.integration.test.d.ts.map +1 -0
  236. package/dist/tests/integration/install.integration.test.js +282 -0
  237. package/dist/tests/integration/install.integration.test.js.map +1 -0
  238. package/dist/tests/integration/recommend.integration.test.d.ts +2 -0
  239. package/dist/tests/integration/recommend.integration.test.d.ts.map +1 -0
  240. package/dist/tests/integration/recommend.integration.test.js +215 -0
  241. package/dist/tests/integration/recommend.integration.test.js.map +1 -0
  242. package/dist/tests/integration/search.integration.test.d.ts +6 -0
  243. package/dist/tests/integration/search.integration.test.d.ts.map +1 -0
  244. package/dist/tests/integration/search.integration.test.js +229 -0
  245. package/dist/tests/integration/search.integration.test.js.map +1 -0
  246. package/dist/tests/integration/setup.d.ts +71 -0
  247. package/dist/tests/integration/setup.d.ts.map +1 -0
  248. package/dist/tests/integration/setup.js +124 -0
  249. package/dist/tests/integration/setup.js.map +1 -0
  250. package/dist/tests/integration/uninstall.integration.test.d.ts +6 -0
  251. package/dist/tests/integration/uninstall.integration.test.d.ts.map +1 -0
  252. package/dist/tests/integration/uninstall.integration.test.js +296 -0
  253. package/dist/tests/integration/uninstall.integration.test.js.map +1 -0
  254. package/dist/tests/integration/validate.integration.test.d.ts +2 -0
  255. package/dist/tests/integration/validate.integration.test.d.ts.map +1 -0
  256. package/dist/tests/integration/validate.integration.test.js +181 -0
  257. package/dist/tests/integration/validate.integration.test.js.map +1 -0
  258. package/dist/tests/onboarding/first-run.test.d.ts +7 -0
  259. package/dist/tests/onboarding/first-run.test.d.ts.map +1 -0
  260. package/dist/tests/onboarding/first-run.test.js +258 -0
  261. package/dist/tests/onboarding/first-run.test.js.map +1 -0
  262. package/dist/tests/performance/search-performance.test.d.ts +10 -0
  263. package/dist/tests/performance/search-performance.test.d.ts.map +1 -0
  264. package/dist/tests/performance/search-performance.test.js +218 -0
  265. package/dist/tests/performance/search-performance.test.js.map +1 -0
  266. package/dist/tests/recommend.test.d.ts +6 -0
  267. package/dist/tests/recommend.test.d.ts.map +1 -0
  268. package/dist/tests/recommend.test.js +208 -0
  269. package/dist/tests/recommend.test.js.map +1 -0
  270. package/dist/tests/suggestions/suggestion-engine.test.d.ts +6 -0
  271. package/dist/tests/suggestions/suggestion-engine.test.d.ts.map +1 -0
  272. package/dist/tests/suggestions/suggestion-engine.test.js +448 -0
  273. package/dist/tests/suggestions/suggestion-engine.test.js.map +1 -0
  274. package/dist/tests/test-utils.d.ts +74 -0
  275. package/dist/tests/test-utils.d.ts.map +1 -0
  276. package/dist/tests/test-utils.js +98 -0
  277. package/dist/tests/test-utils.js.map +1 -0
  278. package/dist/tests/tools.test.d.ts +5 -0
  279. package/dist/tests/tools.test.d.ts.map +1 -0
  280. package/dist/tests/tools.test.js +138 -0
  281. package/dist/tests/tools.test.js.map +1 -0
  282. package/dist/tests/unit/installed-skills.test.d.ts +6 -0
  283. package/dist/tests/unit/installed-skills.test.d.ts.map +1 -0
  284. package/dist/tests/unit/installed-skills.test.js +285 -0
  285. package/dist/tests/unit/installed-skills.test.js.map +1 -0
  286. package/dist/tests/unit/logger.test.d.ts +6 -0
  287. package/dist/tests/unit/logger.test.d.ts.map +1 -0
  288. package/dist/tests/unit/logger.test.js +281 -0
  289. package/dist/tests/unit/logger.test.js.map +1 -0
  290. package/dist/tests/validate.test.d.ts +5 -0
  291. package/dist/tests/validate.test.d.ts.map +1 -0
  292. package/dist/tests/validate.test.js +303 -0
  293. package/dist/tests/validate.test.js.map +1 -0
  294. package/dist/tests/webhooks/proxy-trust.security.test.d.ts +8 -0
  295. package/dist/tests/webhooks/proxy-trust.security.test.d.ts.map +1 -0
  296. package/dist/tests/webhooks/proxy-trust.security.test.js +145 -0
  297. package/dist/tests/webhooks/proxy-trust.security.test.js.map +1 -0
  298. package/dist/tests/webhooks/rate-limiter.security.test.d.ts +8 -0
  299. package/dist/tests/webhooks/rate-limiter.security.test.d.ts.map +1 -0
  300. package/dist/tests/webhooks/rate-limiter.security.test.js +122 -0
  301. package/dist/tests/webhooks/rate-limiter.security.test.js.map +1 -0
  302. package/dist/vitest.config.d.ts +6 -0
  303. package/dist/vitest.config.d.ts.map +1 -0
  304. package/dist/vitest.config.js +13 -0
  305. package/dist/vitest.config.js.map +1 -0
  306. package/package.json +63 -0
@@ -0,0 +1,139 @@
1
+ /**
2
+ * SMI-740: Readiness Check with Dependency Checks
3
+ *
4
+ * Provides a comprehensive readiness check that verifies:
5
+ * - Database connectivity
6
+ * - Cache status
7
+ * - External service availability
8
+ *
9
+ * Returns 503 if any critical dependency fails.
10
+ */
11
+ import type { Database as DatabaseType } from 'better-sqlite3';
12
+ /**
13
+ * Dependency check result
14
+ */
15
+ export interface DependencyCheck {
16
+ /** Dependency name */
17
+ name: string;
18
+ /** Check status */
19
+ status: 'ok' | 'degraded' | 'unhealthy';
20
+ /** Response time in ms */
21
+ responseTime?: number;
22
+ /** Error message if unhealthy */
23
+ error?: string;
24
+ /** Additional details */
25
+ details?: Record<string, unknown>;
26
+ }
27
+ /**
28
+ * Readiness response
29
+ */
30
+ export interface ReadinessResponse {
31
+ /** Overall readiness status */
32
+ ready: boolean;
33
+ /** HTTP status code to return */
34
+ statusCode: number;
35
+ /** Timestamp of the check */
36
+ timestamp: string;
37
+ /** Individual dependency check results */
38
+ checks: DependencyCheck[];
39
+ /** Total check duration in ms */
40
+ totalDuration: number;
41
+ }
42
+ /**
43
+ * Readiness check configuration
44
+ */
45
+ export interface ReadinessCheckConfig {
46
+ /** Database instance for connectivity check */
47
+ database?: DatabaseType | null;
48
+ /** Cache check function */
49
+ cacheCheck?: () => Promise<boolean>;
50
+ /** Custom dependency checks */
51
+ customChecks?: Array<{
52
+ name: string;
53
+ check: () => Promise<{
54
+ ok: boolean;
55
+ details?: Record<string, unknown>;
56
+ }>;
57
+ critical?: boolean;
58
+ }>;
59
+ /** Timeout for each check in ms (default: 5000) */
60
+ checkTimeout?: number;
61
+ }
62
+ /**
63
+ * Readiness Check Handler
64
+ *
65
+ * Performs deep health checks including database connectivity,
66
+ * cache status, and other dependencies.
67
+ */
68
+ export declare class ReadinessCheck {
69
+ private database;
70
+ private cacheCheck;
71
+ private customChecks;
72
+ private checkTimeout;
73
+ constructor(config?: ReadinessCheckConfig);
74
+ /**
75
+ * Set the database instance
76
+ */
77
+ setDatabase(db: DatabaseType | null): void;
78
+ /**
79
+ * Set the cache check function
80
+ */
81
+ setCacheCheck(check: (() => Promise<boolean>) | null): void;
82
+ /**
83
+ * Add a custom dependency check
84
+ */
85
+ addCheck(name: string, check: () => Promise<{
86
+ ok: boolean;
87
+ details?: Record<string, unknown>;
88
+ }>, critical?: boolean): void;
89
+ /**
90
+ * Perform full readiness check
91
+ *
92
+ * Checks all dependencies and returns overall readiness status.
93
+ */
94
+ check(): Promise<ReadinessResponse>;
95
+ /**
96
+ * Check database connectivity
97
+ */
98
+ private checkDatabase;
99
+ /**
100
+ * Check cache status
101
+ */
102
+ private checkCache;
103
+ /**
104
+ * Run a custom check
105
+ */
106
+ private runCustomCheck;
107
+ /**
108
+ * Execute a function with timeout
109
+ */
110
+ private withTimeout;
111
+ /**
112
+ * Quick readiness check (boolean result)
113
+ */
114
+ isReady(): Promise<boolean>;
115
+ }
116
+ /**
117
+ * Get the default readiness check instance
118
+ */
119
+ export declare function getReadinessCheck(): ReadinessCheck;
120
+ /**
121
+ * Create a new readiness check instance with custom configuration
122
+ */
123
+ export declare function createReadinessCheck(config: ReadinessCheckConfig): ReadinessCheck;
124
+ /**
125
+ * Perform a quick readiness check using the default instance
126
+ */
127
+ export declare function checkReadiness(): Promise<ReadinessResponse>;
128
+ /**
129
+ * Configure the default readiness check
130
+ */
131
+ export declare function configureReadinessCheck(config: Partial<ReadinessCheckConfig>): void;
132
+ /**
133
+ * Format readiness response for HTTP
134
+ */
135
+ export declare function formatReadinessResponse(response: ReadinessResponse): {
136
+ statusCode: number;
137
+ body: ReadinessResponse;
138
+ };
139
+ //# sourceMappingURL=readinessCheck.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readinessCheck.d.ts","sourceRoot":"","sources":["../../../src/health/readinessCheck.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,266 @@
1
+ /**
2
+ * SMI-740: Readiness Check with Dependency Checks
3
+ *
4
+ * Provides a comprehensive readiness check that verifies:
5
+ * - Database connectivity
6
+ * - Cache status
7
+ * - External service availability
8
+ *
9
+ * Returns 503 if any critical dependency fails.
10
+ */
11
+ /**
12
+ * Readiness Check Handler
13
+ *
14
+ * Performs deep health checks including database connectivity,
15
+ * cache status, and other dependencies.
16
+ */
17
+ export class ReadinessCheck {
18
+ database;
19
+ cacheCheck;
20
+ customChecks;
21
+ checkTimeout;
22
+ constructor(config = {}) {
23
+ this.database = config.database ?? null;
24
+ this.cacheCheck = config.cacheCheck ?? null;
25
+ this.customChecks = (config.customChecks ?? []).map((c) => ({
26
+ ...c,
27
+ critical: c.critical ?? true,
28
+ }));
29
+ this.checkTimeout = config.checkTimeout ?? 5000;
30
+ }
31
+ /**
32
+ * Set the database instance
33
+ */
34
+ setDatabase(db) {
35
+ this.database = db;
36
+ }
37
+ /**
38
+ * Set the cache check function
39
+ */
40
+ setCacheCheck(check) {
41
+ this.cacheCheck = check;
42
+ }
43
+ /**
44
+ * Add a custom dependency check
45
+ */
46
+ addCheck(name, check, critical = true) {
47
+ this.customChecks.push({ name, check, critical });
48
+ }
49
+ /**
50
+ * Perform full readiness check
51
+ *
52
+ * Checks all dependencies and returns overall readiness status.
53
+ */
54
+ async check() {
55
+ const startTime = performance.now();
56
+ const checks = [];
57
+ let allCriticalOk = true;
58
+ // Check database
59
+ const dbCheck = await this.checkDatabase();
60
+ checks.push(dbCheck);
61
+ if (dbCheck.status === 'unhealthy') {
62
+ allCriticalOk = false;
63
+ }
64
+ // Check cache
65
+ const cacheCheckResult = await this.checkCache();
66
+ checks.push(cacheCheckResult);
67
+ if (cacheCheckResult.status === 'unhealthy') {
68
+ allCriticalOk = false;
69
+ }
70
+ // Run custom checks
71
+ for (const customCheck of this.customChecks) {
72
+ const result = await this.runCustomCheck(customCheck);
73
+ checks.push(result);
74
+ if (result.status === 'unhealthy' && customCheck.critical) {
75
+ allCriticalOk = false;
76
+ }
77
+ }
78
+ const totalDuration = performance.now() - startTime;
79
+ return {
80
+ ready: allCriticalOk,
81
+ statusCode: allCriticalOk ? 200 : 503,
82
+ timestamp: new Date().toISOString(),
83
+ checks,
84
+ totalDuration: Math.round(totalDuration * 100) / 100,
85
+ };
86
+ }
87
+ /**
88
+ * Check database connectivity
89
+ */
90
+ async checkDatabase() {
91
+ const startTime = performance.now();
92
+ if (!this.database) {
93
+ return {
94
+ name: 'database',
95
+ status: 'degraded',
96
+ details: { reason: 'Database not configured' },
97
+ };
98
+ }
99
+ try {
100
+ // Perform a simple query to check connectivity
101
+ const result = await this.withTimeout(async () => {
102
+ // Use a simple query that should always work
103
+ const stmt = this.database.prepare('SELECT 1 as health_check');
104
+ return stmt.get();
105
+ }, this.checkTimeout);
106
+ const responseTime = performance.now() - startTime;
107
+ if (result) {
108
+ return {
109
+ name: 'database',
110
+ status: 'ok',
111
+ responseTime: Math.round(responseTime * 100) / 100,
112
+ details: { type: 'sqlite' },
113
+ };
114
+ }
115
+ else {
116
+ return {
117
+ name: 'database',
118
+ status: 'unhealthy',
119
+ responseTime: Math.round(responseTime * 100) / 100,
120
+ error: 'Query returned no result',
121
+ };
122
+ }
123
+ }
124
+ catch (error) {
125
+ const responseTime = performance.now() - startTime;
126
+ return {
127
+ name: 'database',
128
+ status: 'unhealthy',
129
+ responseTime: Math.round(responseTime * 100) / 100,
130
+ error: error instanceof Error ? error.message : 'Unknown error',
131
+ };
132
+ }
133
+ }
134
+ /**
135
+ * Check cache status
136
+ */
137
+ async checkCache() {
138
+ const startTime = performance.now();
139
+ if (!this.cacheCheck) {
140
+ return {
141
+ name: 'cache',
142
+ status: 'ok',
143
+ details: { reason: 'Cache check not configured, assuming healthy' },
144
+ };
145
+ }
146
+ try {
147
+ const result = await this.withTimeout(this.cacheCheck, this.checkTimeout);
148
+ const responseTime = performance.now() - startTime;
149
+ return {
150
+ name: 'cache',
151
+ status: result ? 'ok' : 'unhealthy',
152
+ responseTime: Math.round(responseTime * 100) / 100,
153
+ };
154
+ }
155
+ catch (error) {
156
+ const responseTime = performance.now() - startTime;
157
+ return {
158
+ name: 'cache',
159
+ status: 'unhealthy',
160
+ responseTime: Math.round(responseTime * 100) / 100,
161
+ error: error instanceof Error ? error.message : 'Unknown error',
162
+ };
163
+ }
164
+ }
165
+ /**
166
+ * Run a custom check
167
+ */
168
+ async runCustomCheck(customCheck) {
169
+ const startTime = performance.now();
170
+ try {
171
+ const result = await this.withTimeout(customCheck.check, this.checkTimeout);
172
+ const responseTime = performance.now() - startTime;
173
+ return {
174
+ name: customCheck.name,
175
+ status: result.ok ? 'ok' : 'unhealthy',
176
+ responseTime: Math.round(responseTime * 100) / 100,
177
+ details: result.details,
178
+ };
179
+ }
180
+ catch (error) {
181
+ const responseTime = performance.now() - startTime;
182
+ return {
183
+ name: customCheck.name,
184
+ status: 'unhealthy',
185
+ responseTime: Math.round(responseTime * 100) / 100,
186
+ error: error instanceof Error ? error.message : 'Unknown error',
187
+ };
188
+ }
189
+ }
190
+ /**
191
+ * Execute a function with timeout
192
+ */
193
+ async withTimeout(fn, timeoutMs) {
194
+ return new Promise((resolve, reject) => {
195
+ const timer = setTimeout(() => {
196
+ reject(new Error(`Check timed out after ${timeoutMs}ms`));
197
+ }, timeoutMs);
198
+ fn()
199
+ .then((result) => {
200
+ clearTimeout(timer);
201
+ resolve(result);
202
+ })
203
+ .catch((error) => {
204
+ clearTimeout(timer);
205
+ reject(error);
206
+ });
207
+ });
208
+ }
209
+ /**
210
+ * Quick readiness check (boolean result)
211
+ */
212
+ async isReady() {
213
+ const result = await this.check();
214
+ return result.ready;
215
+ }
216
+ }
217
+ // Default readiness check instance
218
+ let defaultReadinessCheck = null;
219
+ /**
220
+ * Get the default readiness check instance
221
+ */
222
+ export function getReadinessCheck() {
223
+ if (!defaultReadinessCheck) {
224
+ defaultReadinessCheck = new ReadinessCheck();
225
+ }
226
+ return defaultReadinessCheck;
227
+ }
228
+ /**
229
+ * Create a new readiness check instance with custom configuration
230
+ */
231
+ export function createReadinessCheck(config) {
232
+ return new ReadinessCheck(config);
233
+ }
234
+ /**
235
+ * Perform a quick readiness check using the default instance
236
+ */
237
+ export async function checkReadiness() {
238
+ return getReadinessCheck().check();
239
+ }
240
+ /**
241
+ * Configure the default readiness check
242
+ */
243
+ export function configureReadinessCheck(config) {
244
+ const check = getReadinessCheck();
245
+ if (config.database !== undefined) {
246
+ check.setDatabase(config.database);
247
+ }
248
+ if (config.cacheCheck !== undefined) {
249
+ check.setCacheCheck(config.cacheCheck);
250
+ }
251
+ if (config.customChecks) {
252
+ for (const custom of config.customChecks) {
253
+ check.addCheck(custom.name, custom.check, custom.critical);
254
+ }
255
+ }
256
+ }
257
+ /**
258
+ * Format readiness response for HTTP
259
+ */
260
+ export function formatReadinessResponse(response) {
261
+ return {
262
+ statusCode: response.statusCode,
263
+ body: response,
264
+ };
265
+ }
266
+ //# sourceMappingURL=readinessCheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readinessCheck.js","sourceRoot":"","sources":["../../../src/health/readinessCheck.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAsDH;;;;;GAKG;AACH,MAAM,OAAO,cAAc;IACjB,QAAQ,CAAqB;IAC7B,UAAU,CAAiC;IAC3C,YAAY,CAIlB;IACM,YAAY,CAAQ;IAE5B,YAAY,SAA+B,EAAE;QAC3C,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAA;QACvC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,CAAA;QAC3C,IAAI,CAAC,YAAY,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC1D,GAAG,CAAC;YACJ,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,IAAI;SAC7B,CAAC,CAAC,CAAA;QACH,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,IAAI,CAAA;IACjD,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,EAAuB;QACjC,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAA;IACpB,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,KAAsC;QAClD,IAAI,CAAC,UAAU,GAAG,KAAK,CAAA;IACzB,CAAC;IAED;;OAEG;IACH,QAAQ,CACN,IAAY,EACZ,KAAwE,EACxE,QAAQ,GAAG,IAAI;QAEf,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;IACnD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;QACnC,MAAM,MAAM,GAAsB,EAAE,CAAA;QACpC,IAAI,aAAa,GAAG,IAAI,CAAA;QAExB,iBAAiB;QACjB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAA;QAC1C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACpB,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACnC,aAAa,GAAG,KAAK,CAAA;QACvB,CAAC;QAED,cAAc;QACd,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAA;QAChD,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAC7B,IAAI,gBAAgB,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAC5C,aAAa,GAAG,KAAK,CAAA;QACvB,CAAC;QAED,oBAAoB;QACpB,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;YACrD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACnB,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;gBAC1D,aAAa,GAAG,KAAK,CAAA;YACvB,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAA;QAEnD,OAAO;YACL,KAAK,EAAE,aAAa;YACpB,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;YACrC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,MAAM;YACN,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,GAAG,CAAC,GAAG,GAAG;SACrD,CAAA;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa;QACzB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;QAEnC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO;gBACL,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,UAAU;gBAClB,OAAO,EAAE,EAAE,MAAM,EAAE,yBAAyB,EAAE;aAC/C,CAAA;QACH,CAAC;QAED,IAAI,CAAC;YACH,+CAA+C;YAC/C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE;gBAC/C,6CAA6C;gBAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAA;gBAC/D,OAAO,IAAI,CAAC,GAAG,EAAE,CAAA;YACnB,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;YAErB,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAA;YAElD,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO;oBACL,IAAI,EAAE,UAAU;oBAChB,MAAM,EAAE,IAAI;oBACZ,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,GAAG;oBAClD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;iBAC5B,CAAA;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO;oBACL,IAAI,EAAE,UAAU;oBAChB,MAAM,EAAE,WAAW;oBACnB,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,GAAG;oBAClD,KAAK,EAAE,0BAA0B;iBAClC,CAAA;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAA;YAClD,OAAO;gBACL,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,WAAW;gBACnB,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,GAAG;gBAClD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAChE,CAAA;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,UAAU;QACtB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;QAEnC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,EAAE,MAAM,EAAE,8CAA8C,EAAE;aACpE,CAAA;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;YACzE,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAA;YAElD,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW;gBACnC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,GAAG;aACnD,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAA;YAClD,OAAO;gBACL,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,WAAW;gBACnB,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,GAAG;gBAClD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAChE,CAAA;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAC,WAI5B;QACC,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;QAEnC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;YAC3E,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAA;YAElD,OAAO;gBACL,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW;gBACtC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,GAAG;gBAClD,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,SAAS,CAAA;YAClD,OAAO;gBACL,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,MAAM,EAAE,WAAW;gBACnB,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,GAAG,CAAC,GAAG,GAAG;gBAClD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAChE,CAAA;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,WAAW,CAAI,EAAoB,EAAE,SAAiB;QAClE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,MAAM,CAAC,IAAI,KAAK,CAAC,yBAAyB,SAAS,IAAI,CAAC,CAAC,CAAA;YAC3D,CAAC,EAAE,SAAS,CAAC,CAAA;YAEb,EAAE,EAAE;iBACD,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;gBACf,YAAY,CAAC,KAAK,CAAC,CAAA;gBACnB,OAAO,CAAC,MAAM,CAAC,CAAA;YACjB,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACf,YAAY,CAAC,KAAK,CAAC,CAAA;gBACnB,MAAM,CAAC,KAAK,CAAC,CAAA;YACf,CAAC,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QACjC,OAAO,MAAM,CAAC,KAAK,CAAA;IACrB,CAAC;CACF;AAED,mCAAmC;AACnC,IAAI,qBAAqB,GAA0B,IAAI,CAAA;AAEvD;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC3B,qBAAqB,GAAG,IAAI,cAAc,EAAE,CAAA;IAC9C,CAAC;IACD,OAAO,qBAAqB,CAAA;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAA4B;IAC/D,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAA;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,OAAO,iBAAiB,EAAE,CAAC,KAAK,EAAE,CAAA;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAqC;IAC3E,MAAM,KAAK,GAAG,iBAAiB,EAAE,CAAA;IACjC,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAClC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;IACpC,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACpC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IACxC,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACzC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAA;QAC5D,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAA2B;IAIjE,OAAO;QACL,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,IAAI,EAAE,QAAQ;KACf,CAAA;AACH,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Skillsmith MCP Server
3
+ * Provides skill discovery, installation, and management tools
4
+ *
5
+ * @see SMI-792: Database initialization with tool context
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Skillsmith MCP Server
3
+ * Provides skill discovery, installation, and management tools
4
+ *
5
+ * @see SMI-792: Database initialization with tool context
6
+ */
7
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
8
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
9
+ import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
10
+ import { getToolContext } from './context.js';
11
+ import { searchToolSchema, executeSearch } from './tools/search.js';
12
+ import { getSkillToolSchema, executeGetSkill } from './tools/get-skill.js';
13
+ import { installTool, installSkill, installInputSchema } from './tools/install.js';
14
+ import { uninstallTool, uninstallSkill, uninstallInputSchema } from './tools/uninstall.js';
15
+ import { recommendToolSchema, recommendInputSchema, executeRecommend } from './tools/recommend.js';
16
+ import { validateToolSchema, validateInputSchema, executeValidate } from './tools/validate.js';
17
+ import { compareToolSchema, compareInputSchema, executeCompare } from './tools/compare.js';
18
+ import { suggestToolSchema, suggestInputSchema, executeSuggest } from './tools/suggest.js';
19
+ // Initialize tool context with database connection
20
+ let toolContext;
21
+ // Tool definitions for MCP
22
+ const toolDefinitions = [
23
+ searchToolSchema,
24
+ getSkillToolSchema,
25
+ installTool,
26
+ uninstallTool,
27
+ recommendToolSchema,
28
+ validateToolSchema,
29
+ compareToolSchema,
30
+ suggestToolSchema,
31
+ ];
32
+ // Create server
33
+ const server = new Server({
34
+ name: 'skillsmith',
35
+ version: '0.1.0',
36
+ }, {
37
+ capabilities: {
38
+ tools: {},
39
+ },
40
+ });
41
+ // Handle list tools request
42
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
43
+ return {
44
+ tools: toolDefinitions.map((tool) => ({
45
+ name: tool.name,
46
+ description: tool.description,
47
+ inputSchema: tool.inputSchema,
48
+ })),
49
+ };
50
+ });
51
+ // Handle tool calls
52
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
53
+ const { name, arguments: args } = request.params;
54
+ try {
55
+ switch (name) {
56
+ case 'search': {
57
+ const input = (args ?? {});
58
+ const result = await executeSearch(input, toolContext);
59
+ return {
60
+ content: [
61
+ {
62
+ type: 'text',
63
+ text: JSON.stringify(result, null, 2),
64
+ },
65
+ ],
66
+ };
67
+ }
68
+ case 'get_skill': {
69
+ const input = (args ?? {});
70
+ const result = await executeGetSkill(input, toolContext);
71
+ return {
72
+ content: [
73
+ {
74
+ type: 'text',
75
+ text: JSON.stringify(result, null, 2),
76
+ },
77
+ ],
78
+ };
79
+ }
80
+ case 'install_skill': {
81
+ const input = installInputSchema.parse(args);
82
+ const result = await installSkill(input, toolContext);
83
+ return {
84
+ content: [
85
+ {
86
+ type: 'text',
87
+ text: JSON.stringify(result, null, 2),
88
+ },
89
+ ],
90
+ };
91
+ }
92
+ case 'uninstall_skill': {
93
+ const input = uninstallInputSchema.parse(args);
94
+ const result = await uninstallSkill(input, toolContext);
95
+ return {
96
+ content: [
97
+ {
98
+ type: 'text',
99
+ text: JSON.stringify(result, null, 2),
100
+ },
101
+ ],
102
+ };
103
+ }
104
+ case 'skill_recommend': {
105
+ const input = recommendInputSchema.parse(args);
106
+ const result = await executeRecommend(input, toolContext);
107
+ return {
108
+ content: [
109
+ {
110
+ type: 'text',
111
+ text: JSON.stringify(result, null, 2),
112
+ },
113
+ ],
114
+ };
115
+ }
116
+ case 'skill_validate': {
117
+ const input = validateInputSchema.parse(args);
118
+ const result = await executeValidate(input, toolContext);
119
+ return {
120
+ content: [
121
+ {
122
+ type: 'text',
123
+ text: JSON.stringify(result, null, 2),
124
+ },
125
+ ],
126
+ };
127
+ }
128
+ case 'skill_compare': {
129
+ const input = compareInputSchema.parse(args);
130
+ const result = await executeCompare(input, toolContext);
131
+ return {
132
+ content: [
133
+ {
134
+ type: 'text',
135
+ text: JSON.stringify(result, null, 2),
136
+ },
137
+ ],
138
+ };
139
+ }
140
+ case 'skill_suggest': {
141
+ const input = suggestInputSchema.parse(args);
142
+ const result = await executeSuggest(input, toolContext);
143
+ return {
144
+ content: [
145
+ {
146
+ type: 'text',
147
+ text: JSON.stringify(result, null, 2),
148
+ },
149
+ ],
150
+ };
151
+ }
152
+ default:
153
+ throw new Error('Unknown tool: ' + name);
154
+ }
155
+ }
156
+ catch (error) {
157
+ return {
158
+ content: [
159
+ {
160
+ type: 'text',
161
+ text: 'Error: ' + (error instanceof Error ? error.message : 'Unknown error'),
162
+ },
163
+ ],
164
+ isError: true,
165
+ };
166
+ }
167
+ });
168
+ // Start server
169
+ async function main() {
170
+ // Initialize database and services
171
+ toolContext = getToolContext();
172
+ console.error('Database initialized at:', process.env.SKILLSMITH_DB_PATH || '~/.skillsmith/skills.db');
173
+ const transport = new StdioServerTransport();
174
+ await server.connect(transport);
175
+ console.error('Skillsmith MCP server running');
176
+ }
177
+ main().catch(console.error);
178
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../src/index.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,43 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ // Basic tests - full MCP server testing requires more complex setup
3
+ describe('MCP Server Module', () => {
4
+ it('should define server constants', async () => {
5
+ // Test that the module can be imported without errors
6
+ // Note: Full testing requires mocking the MCP SDK transport
7
+ expect(true).toBe(true);
8
+ });
9
+ });
10
+ describe('Server Configuration', () => {
11
+ it('should have valid server name', () => {
12
+ const SERVER_NAME = 'skillsmith-mcp';
13
+ expect(SERVER_NAME).toBe('skillsmith-mcp');
14
+ expect(SERVER_NAME).toMatch(/^[a-z][a-z0-9-]*$/);
15
+ });
16
+ it('should have valid semver version', () => {
17
+ const SERVER_VERSION = '0.1.0';
18
+ expect(SERVER_VERSION).toMatch(/^\d+\.\d+\.\d+$/);
19
+ });
20
+ });
21
+ describe('Tool Definitions', () => {
22
+ it('should define ping tool schema', () => {
23
+ const pingSchema = {
24
+ type: 'object',
25
+ properties: {
26
+ message: {
27
+ type: 'string',
28
+ description: 'Optional message to include in response',
29
+ },
30
+ },
31
+ };
32
+ expect(pingSchema.type).toBe('object');
33
+ expect(pingSchema.properties.message).toBeDefined();
34
+ });
35
+ it('should define server_info tool schema', () => {
36
+ const serverInfoSchema = {
37
+ type: 'object',
38
+ properties: {},
39
+ };
40
+ expect(serverInfoSchema.type).toBe('object');
41
+ });
42
+ });
43
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE7C,oEAAoE;AACpE,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAC9C,sDAAsD;QACtD,4DAA4D;QAC5D,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,WAAW,GAAG,gBAAgB,CAAA;QACpC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QAC1C,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAClD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,cAAc,GAAG,OAAO,CAAA;QAC9B,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;IACnD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,UAAU,GAAG;YACjB,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,yCAAyC;iBACvD;aACF;SACF,CAAA;QAED,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACtC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAA;IACrD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,gBAAgB,GAAG;YACvB,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,EAAE;SACf,CAAA;QAED,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC9C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}