@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,100 @@
1
+ /**
2
+ * @fileoverview MCP Server Tool Context - Database initialization and shared services
3
+ * @module @skillsmith/mcp-server/context
4
+ * @see SMI-792: Add database initialization to MCP server
5
+ * @see SMI-898: Path traversal protection for DB_PATH
6
+ *
7
+ * Provides shared context for MCP tool handlers including:
8
+ * - SQLite database connection with FTS5 search
9
+ * - SearchService for skill discovery
10
+ * - SkillRepository for CRUD operations
11
+ * - Secure path validation for database paths
12
+ *
13
+ * @example
14
+ * // Initialize context at server startup
15
+ * const context = createToolContext();
16
+ *
17
+ * // Pass to tool handlers
18
+ * const result = await executeSearch(input, context);
19
+ */
20
+ import type { Database as DatabaseType } from 'better-sqlite3';
21
+ import { SearchService, SkillRepository } from '@skillsmith/core';
22
+ /**
23
+ * Shared context for MCP tool handlers
24
+ */
25
+ export interface ToolContext {
26
+ /** SQLite database connection */
27
+ db: DatabaseType;
28
+ /** Search service with FTS5/BM25 */
29
+ searchService: SearchService;
30
+ /** Skill repository for CRUD operations */
31
+ skillRepository: SkillRepository;
32
+ }
33
+ /**
34
+ * Options for creating tool context
35
+ */
36
+ export interface ToolContextOptions {
37
+ /** Custom database path (defaults to ~/.skillsmith/skills.db) */
38
+ dbPath?: string;
39
+ /** Search cache TTL in seconds (default: 300) */
40
+ searchCacheTtl?: number;
41
+ }
42
+ /**
43
+ * Get the default database path
44
+ * Respects SKILLSMITH_DB_PATH environment variable
45
+ *
46
+ * @see SMI-898: Path traversal protection
47
+ * - Validates SKILLSMITH_DB_PATH against path traversal attacks
48
+ * - Rejects paths with ".." traversal sequences
49
+ * - Ensures path is within allowed directories
50
+ *
51
+ * @throws Error if SKILLSMITH_DB_PATH contains path traversal attempt
52
+ */
53
+ export declare function getDefaultDbPath(): string;
54
+ /**
55
+ * Create the shared tool context with database and services
56
+ *
57
+ * @param options - Configuration options
58
+ * @returns Initialized tool context
59
+ *
60
+ * @see SMI-898: Path traversal protection
61
+ * - Custom dbPath is validated for path traversal attacks
62
+ * - Rejects paths with ".." or outside allowed directories
63
+ *
64
+ * @example
65
+ * // With default path (~/.skillsmith/skills.db)
66
+ * const context = createToolContext();
67
+ *
68
+ * @example
69
+ * // With custom path (must be in allowed directory)
70
+ * const context = createToolContext({ dbPath: '~/.skillsmith/custom.db' });
71
+ *
72
+ * @example
73
+ * // For testing with in-memory database
74
+ * const context = createToolContext({ dbPath: ':memory:' });
75
+ *
76
+ * @throws Error if dbPath contains path traversal attempt
77
+ */
78
+ export declare function createToolContext(options?: ToolContextOptions): ToolContext;
79
+ /**
80
+ * Close the tool context and release resources
81
+ *
82
+ * @param context - Tool context to close
83
+ */
84
+ export declare function closeToolContext(context: ToolContext): void;
85
+ /**
86
+ * Get or create the global tool context
87
+ * Uses singleton pattern for MCP server lifecycle
88
+ *
89
+ * Note: Options are only applied on first call. Subsequent calls
90
+ * return the cached context and ignore any options.
91
+ *
92
+ * @param options - Configuration options (only used on first call)
93
+ * @returns The global tool context
94
+ */
95
+ export declare function getToolContext(options?: ToolContextOptions): ToolContext;
96
+ /**
97
+ * Reset the global context (for testing)
98
+ */
99
+ export declare function resetToolContext(): void;
100
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC9D,OAAO,EAAkB,aAAa,EAAE,eAAe,EAAkB,MAAM,kBAAkB,CAAA;AAEjG;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,iCAAiC;IACjC,EAAE,EAAE,YAAY,CAAA;IAChB,oCAAoC;IACpC,aAAa,EAAE,aAAa,CAAA;IAC5B,2CAA2C;IAC3C,eAAe,EAAE,eAAe,CAAA;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,iEAAiE;IACjE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iDAAiD;IACjD,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAqBzC;AAYD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,kBAAuB,GAAG,WAAW,CA0C/E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAE3D;AAKD;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,WAAW,CAUxE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAKvC"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * @fileoverview MCP Server Tool Context - Database initialization and shared services
3
+ * @module @skillsmith/mcp-server/context
4
+ * @see SMI-792: Add database initialization to MCP server
5
+ * @see SMI-898: Path traversal protection for DB_PATH
6
+ *
7
+ * Provides shared context for MCP tool handlers including:
8
+ * - SQLite database connection with FTS5 search
9
+ * - SearchService for skill discovery
10
+ * - SkillRepository for CRUD operations
11
+ * - Secure path validation for database paths
12
+ *
13
+ * @example
14
+ * // Initialize context at server startup
15
+ * const context = createToolContext();
16
+ *
17
+ * // Pass to tool handlers
18
+ * const result = await executeSearch(input, context);
19
+ */
20
+ import { homedir } from 'os';
21
+ import { join, dirname } from 'path';
22
+ import { mkdirSync, existsSync } from 'fs';
23
+ import { createDatabase, SearchService, SkillRepository, validateDbPath } from '@skillsmith/core';
24
+ /**
25
+ * Get the default database path
26
+ * Respects SKILLSMITH_DB_PATH environment variable
27
+ *
28
+ * @see SMI-898: Path traversal protection
29
+ * - Validates SKILLSMITH_DB_PATH against path traversal attacks
30
+ * - Rejects paths with ".." traversal sequences
31
+ * - Ensures path is within allowed directories
32
+ *
33
+ * @throws Error if SKILLSMITH_DB_PATH contains path traversal attempt
34
+ */
35
+ export function getDefaultDbPath() {
36
+ const envPath = process.env.SKILLSMITH_DB_PATH;
37
+ if (envPath) {
38
+ // SMI-898: Validate environment variable path for path traversal
39
+ const validation = validateDbPath(envPath, {
40
+ allowInMemory: true,
41
+ allowTempDir: true,
42
+ });
43
+ if (!validation.valid) {
44
+ throw new Error(`Invalid SKILLSMITH_DB_PATH: ${validation.error}. ` +
45
+ 'Path must be within ~/.skillsmith, ~/.claude, or temp directories.');
46
+ }
47
+ return validation.resolvedPath;
48
+ }
49
+ return join(homedir(), '.skillsmith', 'skills.db');
50
+ }
51
+ /**
52
+ * Ensure the database directory exists
53
+ */
54
+ function ensureDbDirectory(dbPath) {
55
+ const dir = dirname(dbPath);
56
+ if (!existsSync(dir)) {
57
+ mkdirSync(dir, { recursive: true });
58
+ }
59
+ }
60
+ /**
61
+ * Create the shared tool context with database and services
62
+ *
63
+ * @param options - Configuration options
64
+ * @returns Initialized tool context
65
+ *
66
+ * @see SMI-898: Path traversal protection
67
+ * - Custom dbPath is validated for path traversal attacks
68
+ * - Rejects paths with ".." or outside allowed directories
69
+ *
70
+ * @example
71
+ * // With default path (~/.skillsmith/skills.db)
72
+ * const context = createToolContext();
73
+ *
74
+ * @example
75
+ * // With custom path (must be in allowed directory)
76
+ * const context = createToolContext({ dbPath: '~/.skillsmith/custom.db' });
77
+ *
78
+ * @example
79
+ * // For testing with in-memory database
80
+ * const context = createToolContext({ dbPath: ':memory:' });
81
+ *
82
+ * @throws Error if dbPath contains path traversal attempt
83
+ */
84
+ export function createToolContext(options = {}) {
85
+ let dbPath;
86
+ if (options.dbPath) {
87
+ // SMI-898: Validate custom path for path traversal
88
+ const validation = validateDbPath(options.dbPath, {
89
+ allowInMemory: true,
90
+ allowTempDir: true,
91
+ });
92
+ if (!validation.valid) {
93
+ throw new Error(`Invalid database path: ${validation.error}. ` +
94
+ 'Path must be within ~/.skillsmith, ~/.claude, or temp directories.');
95
+ }
96
+ dbPath = validation.resolvedPath;
97
+ }
98
+ else {
99
+ dbPath = getDefaultDbPath();
100
+ }
101
+ // Ensure directory exists (skip for in-memory)
102
+ if (dbPath !== ':memory:') {
103
+ ensureDbDirectory(dbPath);
104
+ }
105
+ // Create database with schema
106
+ const db = createDatabase(dbPath);
107
+ // Initialize services
108
+ const searchService = new SearchService(db, {
109
+ cacheTtl: options.searchCacheTtl ?? 300,
110
+ });
111
+ const skillRepository = new SkillRepository(db);
112
+ return {
113
+ db,
114
+ searchService,
115
+ skillRepository,
116
+ };
117
+ }
118
+ /**
119
+ * Close the tool context and release resources
120
+ *
121
+ * @param context - Tool context to close
122
+ */
123
+ export function closeToolContext(context) {
124
+ context.db.close();
125
+ }
126
+ // Singleton context for the MCP server
127
+ let globalContext = null;
128
+ /**
129
+ * Get or create the global tool context
130
+ * Uses singleton pattern for MCP server lifecycle
131
+ *
132
+ * Note: Options are only applied on first call. Subsequent calls
133
+ * return the cached context and ignore any options.
134
+ *
135
+ * @param options - Configuration options (only used on first call)
136
+ * @returns The global tool context
137
+ */
138
+ export function getToolContext(options) {
139
+ if (!globalContext) {
140
+ globalContext = createToolContext(options);
141
+ }
142
+ else if (options) {
143
+ // Warn if options are provided after context is already created
144
+ console.warn('[skillsmith] getToolContext called with options after context was already initialized. Options ignored.');
145
+ }
146
+ return globalContext;
147
+ }
148
+ /**
149
+ * Reset the global context (for testing)
150
+ */
151
+ export function resetToolContext() {
152
+ if (globalContext) {
153
+ closeToolContext(globalContext);
154
+ globalContext = null;
155
+ }
156
+ }
157
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Core package shim for testing
3
+ * Re-exports only the modules needed by MCP server, avoiding heavy dependencies like ONNX
4
+ */
5
+ export { ErrorCodes, ErrorSuggestions, SkillsmithError, createErrorResponse, withErrorBoundary, type ErrorCategory, type ErrorCode, type ErrorResponse, } from '../../core/src/errors.js';
6
+ export { TrustTierDescriptions, type TrustTier as MCPTrustTier, type SkillCategory, type ScoreBreakdown, type Skill as MCPSkill, type SkillSearchResult, type SearchFilters, type SearchResponse as MCPSearchResponse, type GetSkillResponse, } from '../../core/src/types.js';
7
+ //# sourceMappingURL=core-shim.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-shim.d.ts","sourceRoot":"","sources":["../../src/core-shim.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,aAAa,GACnB,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EACL,qBAAqB,EACrB,KAAK,SAAS,IAAI,YAAY,EAC9B,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,KAAK,IAAI,QAAQ,EACtB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,cAAc,IAAI,iBAAiB,EACxC,KAAK,gBAAgB,GACtB,MAAM,yBAAyB,CAAA"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Core package shim for testing
3
+ * Re-exports only the modules needed by MCP server, avoiding heavy dependencies like ONNX
4
+ */
5
+ // Error handling
6
+ export { ErrorCodes, ErrorSuggestions, SkillsmithError, createErrorResponse, withErrorBoundary, } from '../../core/src/errors.js';
7
+ // MCP types
8
+ export { TrustTierDescriptions, } from '../../core/src/types.js';
9
+ //# sourceMappingURL=core-shim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core-shim.js","sourceRoot":"","sources":["../../src/core-shim.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,iBAAiB;AACjB,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,iBAAiB,GAIlB,MAAM,0BAA0B,CAAA;AAEjC,YAAY;AACZ,OAAO,EACL,qBAAqB,GAStB,MAAM,yBAAyB,CAAA"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * SMI-740: Health Check Endpoint Handler
3
+ *
4
+ * Provides a simple health check endpoint that returns:
5
+ * - status: "ok" | "degraded" | "unhealthy"
6
+ * - uptime: number (seconds)
7
+ * - version: string
8
+ *
9
+ * This endpoint should always return quickly and not perform
10
+ * expensive operations like database queries.
11
+ */
12
+ /**
13
+ * Health check response
14
+ */
15
+ export interface HealthResponse {
16
+ /** Current health status */
17
+ status: 'ok' | 'degraded' | 'unhealthy';
18
+ /** Process uptime in seconds */
19
+ uptime: number;
20
+ /** Application version */
21
+ version: string;
22
+ /** Timestamp of the health check */
23
+ timestamp: string;
24
+ /** Optional additional info */
25
+ info?: Record<string, unknown>;
26
+ }
27
+ /**
28
+ * Health check configuration
29
+ */
30
+ export interface HealthCheckConfig {
31
+ /** Application version (default: from package.json or '0.0.0') */
32
+ version?: string;
33
+ /** Custom health check function */
34
+ customCheck?: () => Promise<{
35
+ healthy: boolean;
36
+ info?: Record<string, unknown>;
37
+ }>;
38
+ }
39
+ /**
40
+ * Health Check Handler
41
+ *
42
+ * Provides lightweight health check functionality that can be used
43
+ * with any HTTP framework or MCP tool.
44
+ */
45
+ export declare class HealthCheck {
46
+ private readonly version;
47
+ private readonly customCheck?;
48
+ constructor(config?: HealthCheckConfig);
49
+ /**
50
+ * Perform health check
51
+ *
52
+ * This is a lightweight check that should return quickly.
53
+ * For deep health checks including dependencies, use ReadinessCheck.
54
+ */
55
+ check(): Promise<HealthResponse>;
56
+ /**
57
+ * Get uptime in seconds
58
+ */
59
+ getUptime(): number;
60
+ /**
61
+ * Get version
62
+ */
63
+ getVersion(): string;
64
+ /**
65
+ * Check if the service is healthy (for simple boolean checks)
66
+ */
67
+ isHealthy(): Promise<boolean>;
68
+ }
69
+ /**
70
+ * Get the default health check instance
71
+ */
72
+ export declare function getHealthCheck(): HealthCheck;
73
+ /**
74
+ * Create a new health check instance with custom configuration
75
+ */
76
+ export declare function createHealthCheck(config: HealthCheckConfig): HealthCheck;
77
+ /**
78
+ * Perform a quick health check using the default instance
79
+ */
80
+ export declare function checkHealth(): Promise<HealthResponse>;
81
+ /**
82
+ * Format health response for HTTP (includes status code)
83
+ */
84
+ export declare function formatHealthResponse(response: HealthResponse): {
85
+ statusCode: number;
86
+ body: HealthResponse;
87
+ };
88
+ //# sourceMappingURL=healthCheck.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"healthCheck.d.ts","sourceRoot":"","sources":["../../../src/health/healthCheck.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,4BAA4B;IAC5B,MAAM,EAAE,IAAI,GAAG,UAAU,GAAG,WAAW,CAAA;IACvC,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAA;IACjB,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,mCAAmC;IACnC,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAA;CAClF;AAOD;;;;;GAKG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAqE;gBAEtF,MAAM,GAAE,iBAAsB;IAK1C;;;;;OAKG;IACG,KAAK,IAAI,OAAO,CAAC,cAAc,CAAC;IAgCtC;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;OAEG;IACH,UAAU,IAAI,MAAM;IAIpB;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;CAIpC;AAKD;;GAEG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAK5C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,WAAW,CAExE;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,cAAc,CAAC,CAE3D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,GAAG;IAC9D,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,cAAc,CAAA;CACrB,CAOA"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * SMI-740: Health Check Endpoint Handler
3
+ *
4
+ * Provides a simple health check endpoint that returns:
5
+ * - status: "ok" | "degraded" | "unhealthy"
6
+ * - uptime: number (seconds)
7
+ * - version: string
8
+ *
9
+ * This endpoint should always return quickly and not perform
10
+ * expensive operations like database queries.
11
+ */
12
+ /**
13
+ * Process start time for uptime calculation
14
+ */
15
+ const processStartTime = Date.now();
16
+ /**
17
+ * Health Check Handler
18
+ *
19
+ * Provides lightweight health check functionality that can be used
20
+ * with any HTTP framework or MCP tool.
21
+ */
22
+ export class HealthCheck {
23
+ version;
24
+ customCheck;
25
+ constructor(config = {}) {
26
+ this.version = config.version ?? process.env.npm_package_version ?? '0.1.0';
27
+ this.customCheck = config.customCheck;
28
+ }
29
+ /**
30
+ * Perform health check
31
+ *
32
+ * This is a lightweight check that should return quickly.
33
+ * For deep health checks including dependencies, use ReadinessCheck.
34
+ */
35
+ async check() {
36
+ const uptimeMs = Date.now() - processStartTime;
37
+ const uptimeSeconds = Math.floor(uptimeMs / 1000);
38
+ const response = {
39
+ status: 'ok',
40
+ uptime: uptimeSeconds,
41
+ version: this.version,
42
+ timestamp: new Date().toISOString(),
43
+ };
44
+ // Run custom check if provided
45
+ if (this.customCheck) {
46
+ try {
47
+ const result = await this.customCheck();
48
+ if (!result.healthy) {
49
+ response.status = 'degraded';
50
+ }
51
+ if (result.info) {
52
+ response.info = result.info;
53
+ }
54
+ }
55
+ catch (error) {
56
+ response.status = 'degraded';
57
+ response.info = {
58
+ customCheckError: error instanceof Error ? error.message : 'Unknown error',
59
+ };
60
+ }
61
+ }
62
+ return response;
63
+ }
64
+ /**
65
+ * Get uptime in seconds
66
+ */
67
+ getUptime() {
68
+ return Math.floor((Date.now() - processStartTime) / 1000);
69
+ }
70
+ /**
71
+ * Get version
72
+ */
73
+ getVersion() {
74
+ return this.version;
75
+ }
76
+ /**
77
+ * Check if the service is healthy (for simple boolean checks)
78
+ */
79
+ async isHealthy() {
80
+ const result = await this.check();
81
+ return result.status === 'ok';
82
+ }
83
+ }
84
+ // Default health check instance
85
+ let defaultHealthCheck = null;
86
+ /**
87
+ * Get the default health check instance
88
+ */
89
+ export function getHealthCheck() {
90
+ if (!defaultHealthCheck) {
91
+ defaultHealthCheck = new HealthCheck();
92
+ }
93
+ return defaultHealthCheck;
94
+ }
95
+ /**
96
+ * Create a new health check instance with custom configuration
97
+ */
98
+ export function createHealthCheck(config) {
99
+ return new HealthCheck(config);
100
+ }
101
+ /**
102
+ * Perform a quick health check using the default instance
103
+ */
104
+ export async function checkHealth() {
105
+ return getHealthCheck().check();
106
+ }
107
+ /**
108
+ * Format health response for HTTP (includes status code)
109
+ */
110
+ export function formatHealthResponse(response) {
111
+ const statusCode = response.status === 'ok' ? 200 : response.status === 'degraded' ? 200 : 503;
112
+ return {
113
+ statusCode,
114
+ body: response,
115
+ };
116
+ }
117
+ //# sourceMappingURL=healthCheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"healthCheck.js","sourceRoot":"","sources":["../../../src/health/healthCheck.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA4BH;;GAEG;AACH,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;AAEnC;;;;;GAKG;AACH,MAAM,OAAO,WAAW;IACL,OAAO,CAAQ;IACf,WAAW,CAAsE;IAElG,YAAY,SAA4B,EAAE;QACxC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAA;QAC3E,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAA;IACvC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAA;QAC9C,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAA;QAEjD,MAAM,QAAQ,GAAmB;YAC/B,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAA;QAED,+BAA+B;QAC/B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAA;gBACvC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpB,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAA;gBAC9B,CAAC;gBACD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;oBAChB,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;gBAC7B,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,QAAQ,CAAC,MAAM,GAAG,UAAU,CAAA;gBAC5B,QAAQ,CAAC,IAAI,GAAG;oBACd,gBAAgB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;iBAC3E,CAAA;YACH,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAC,GAAG,IAAI,CAAC,CAAA;IAC3D,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QACjC,OAAO,MAAM,CAAC,MAAM,KAAK,IAAI,CAAA;IAC/B,CAAC;CACF;AAED,gCAAgC;AAChC,IAAI,kBAAkB,GAAuB,IAAI,CAAA;AAEjD;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,kBAAkB,GAAG,IAAI,WAAW,EAAE,CAAA;IACxC,CAAC;IACD,OAAO,kBAAkB,CAAA;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAyB;IACzD,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC,CAAA;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,OAAO,cAAc,EAAE,CAAC,KAAK,EAAE,CAAA;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAwB;IAI3D,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;IAE9F,OAAO;QACL,UAAU;QACV,IAAI,EAAE,QAAQ;KACf,CAAA;AACH,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * SMI-740: Health Check Module Exports
3
+ *
4
+ * Provides health and readiness check endpoints for the MCP server:
5
+ * - /health: Quick liveness check
6
+ * - /ready: Deep readiness check with dependency verification
7
+ */
8
+ export { HealthCheck, getHealthCheck, createHealthCheck, checkHealth, formatHealthResponse, type HealthResponse, type HealthCheckConfig, } from './healthCheck.js';
9
+ export { ReadinessCheck, getReadinessCheck, createReadinessCheck, checkReadiness, configureReadinessCheck, formatReadinessResponse, type ReadinessResponse, type ReadinessCheckConfig, type DependencyCheck, } from './readinessCheck.js';
10
+ /**
11
+ * Combined health and readiness check response
12
+ */
13
+ export interface HealthAndReadiness {
14
+ health: import('./healthCheck.js').HealthResponse;
15
+ readiness: import('./readinessCheck.js').ReadinessResponse;
16
+ }
17
+ /**
18
+ * Perform both health and readiness checks
19
+ */
20
+ export declare function checkAll(): Promise<HealthAndReadiness>;
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/health/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,oBAAoB,EACpB,KAAK,cAAc,EACnB,KAAK,iBAAiB,GACvB,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,uBAAuB,EACvB,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,eAAe,GACrB,MAAM,qBAAqB,CAAA;AAE5B;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,OAAO,kBAAkB,EAAE,cAAc,CAAA;IACjD,SAAS,EAAE,OAAO,qBAAqB,EAAE,iBAAiB,CAAA;CAC3D;AAED;;GAEG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAO5D"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * SMI-740: Health Check Module Exports
3
+ *
4
+ * Provides health and readiness check endpoints for the MCP server:
5
+ * - /health: Quick liveness check
6
+ * - /ready: Deep readiness check with dependency verification
7
+ */
8
+ // Health check exports
9
+ export { HealthCheck, getHealthCheck, createHealthCheck, checkHealth, formatHealthResponse, } from './healthCheck.js';
10
+ // Readiness check exports
11
+ export { ReadinessCheck, getReadinessCheck, createReadinessCheck, checkReadiness, configureReadinessCheck, formatReadinessResponse, } from './readinessCheck.js';
12
+ /**
13
+ * Perform both health and readiness checks
14
+ */
15
+ export async function checkAll() {
16
+ const { checkHealth } = await import('./healthCheck.js');
17
+ const { checkReadiness } = await import('./readinessCheck.js');
18
+ const [health, readiness] = await Promise.all([checkHealth(), checkReadiness()]);
19
+ return { health, readiness };
20
+ }
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/health/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,uBAAuB;AACvB,OAAO,EACL,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,oBAAoB,GAGrB,MAAM,kBAAkB,CAAA;AAEzB,0BAA0B;AAC1B,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,uBAAuB,EACvB,uBAAuB,GAIxB,MAAM,qBAAqB,CAAA;AAU5B;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC5B,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAA;IACxD,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;IAE9D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,cAAc,EAAE,CAAC,CAAC,CAAA;IAEhF,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAA;AAC9B,CAAC"}