@contractspec/bundle.workspace 0.0.0-canary-20260113162409

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 (703) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +83 -0
  3. package/dist/_virtual/rolldown_runtime.mjs +20 -0
  4. package/dist/adapters/ai.d.mts +12 -0
  5. package/dist/adapters/ai.d.mts.map +1 -0
  6. package/dist/adapters/ai.mjs +83 -0
  7. package/dist/adapters/ai.mjs.map +1 -0
  8. package/dist/adapters/factory.d.mts +29 -0
  9. package/dist/adapters/factory.d.mts.map +1 -0
  10. package/dist/adapters/factory.mjs +37 -0
  11. package/dist/adapters/factory.mjs.map +1 -0
  12. package/dist/adapters/fs.d.mts +12 -0
  13. package/dist/adapters/fs.d.mts.map +1 -0
  14. package/dist/adapters/fs.mjs +133 -0
  15. package/dist/adapters/fs.mjs.map +1 -0
  16. package/dist/adapters/git.d.mts +11 -0
  17. package/dist/adapters/git.d.mts.map +1 -0
  18. package/dist/adapters/git.mjs +84 -0
  19. package/dist/adapters/git.mjs.map +1 -0
  20. package/dist/adapters/index.d.mts +7 -0
  21. package/dist/adapters/index.mjs +9 -0
  22. package/dist/adapters/logger.d.mts +18 -0
  23. package/dist/adapters/logger.d.mts.map +1 -0
  24. package/dist/adapters/logger.mjs +81 -0
  25. package/dist/adapters/logger.mjs.map +1 -0
  26. package/dist/adapters/watcher.d.mts +11 -0
  27. package/dist/adapters/watcher.d.mts.map +1 -0
  28. package/dist/adapters/watcher.mjs +74 -0
  29. package/dist/adapters/watcher.mjs.map +1 -0
  30. package/dist/adapters/workspace.d.mts +148 -0
  31. package/dist/adapters/workspace.d.mts.map +1 -0
  32. package/dist/adapters/workspace.mjs +275 -0
  33. package/dist/adapters/workspace.mjs.map +1 -0
  34. package/dist/ai/agents/claude-code-agent.d.mts +22 -0
  35. package/dist/ai/agents/claude-code-agent.d.mts.map +1 -0
  36. package/dist/ai/agents/claude-code-agent.mjs +182 -0
  37. package/dist/ai/agents/claude-code-agent.mjs.map +1 -0
  38. package/dist/ai/agents/cursor-agent.d.mts +68 -0
  39. package/dist/ai/agents/cursor-agent.d.mts.map +1 -0
  40. package/dist/ai/agents/cursor-agent.mjs +436 -0
  41. package/dist/ai/agents/cursor-agent.mjs.map +1 -0
  42. package/dist/ai/agents/index.mjs +7 -0
  43. package/dist/ai/agents/openai-codex-agent.d.mts +22 -0
  44. package/dist/ai/agents/openai-codex-agent.d.mts.map +1 -0
  45. package/dist/ai/agents/openai-codex-agent.mjs +167 -0
  46. package/dist/ai/agents/openai-codex-agent.mjs.map +1 -0
  47. package/dist/ai/agents/orchestrator.d.mts +50 -0
  48. package/dist/ai/agents/orchestrator.d.mts.map +1 -0
  49. package/dist/ai/agents/orchestrator.mjs +143 -0
  50. package/dist/ai/agents/orchestrator.mjs.map +1 -0
  51. package/dist/ai/agents/simple-agent.d.mts +17 -0
  52. package/dist/ai/agents/simple-agent.d.mts.map +1 -0
  53. package/dist/ai/agents/simple-agent.mjs +92 -0
  54. package/dist/ai/agents/simple-agent.mjs.map +1 -0
  55. package/dist/ai/agents/types.d.mts +36 -0
  56. package/dist/ai/agents/types.d.mts.map +1 -0
  57. package/dist/ai/client.d.mts +97 -0
  58. package/dist/ai/client.d.mts.map +1 -0
  59. package/dist/ai/client.mjs +189 -0
  60. package/dist/ai/client.mjs.map +1 -0
  61. package/dist/ai/index.d.mts +9 -0
  62. package/dist/ai/index.mjs +11 -0
  63. package/dist/ai/prompts/code-generation.d.mts +26 -0
  64. package/dist/ai/prompts/code-generation.d.mts.map +1 -0
  65. package/dist/ai/prompts/code-generation.mjs +143 -0
  66. package/dist/ai/prompts/code-generation.mjs.map +1 -0
  67. package/dist/ai/prompts/index.d.mts +10 -0
  68. package/dist/ai/prompts/index.d.mts.map +1 -0
  69. package/dist/ai/prompts/index.mjs +13 -0
  70. package/dist/ai/prompts/index.mjs.map +1 -0
  71. package/dist/ai/prompts/spec-creation.d.mts +29 -0
  72. package/dist/ai/prompts/spec-creation.d.mts.map +1 -0
  73. package/dist/ai/prompts/spec-creation.mjs +111 -0
  74. package/dist/ai/prompts/spec-creation.mjs.map +1 -0
  75. package/dist/ai/providers.d.mts +29 -0
  76. package/dist/ai/providers.d.mts.map +1 -0
  77. package/dist/ai/providers.mjs +39 -0
  78. package/dist/ai/providers.mjs.map +1 -0
  79. package/dist/formatters/index.d.mts +11 -0
  80. package/dist/formatters/index.d.mts.map +1 -0
  81. package/dist/formatters/index.mjs +17 -0
  82. package/dist/formatters/index.mjs.map +1 -0
  83. package/dist/formatters/json.d.mts +56 -0
  84. package/dist/formatters/json.d.mts.map +1 -0
  85. package/dist/formatters/json.mjs +43 -0
  86. package/dist/formatters/json.mjs.map +1 -0
  87. package/dist/formatters/sarif.d.mts +101 -0
  88. package/dist/formatters/sarif.d.mts.map +1 -0
  89. package/dist/formatters/sarif.mjs +163 -0
  90. package/dist/formatters/sarif.mjs.map +1 -0
  91. package/dist/formatters/text.d.mts +35 -0
  92. package/dist/formatters/text.d.mts.map +1 -0
  93. package/dist/formatters/text.mjs +209 -0
  94. package/dist/formatters/text.mjs.map +1 -0
  95. package/dist/index.d.mts +125 -0
  96. package/dist/index.mjs +110 -0
  97. package/dist/ports/ai.d.mts +59 -0
  98. package/dist/ports/ai.d.mts.map +1 -0
  99. package/dist/ports/fs.d.mts +81 -0
  100. package/dist/ports/fs.d.mts.map +1 -0
  101. package/dist/ports/git.d.mts +46 -0
  102. package/dist/ports/git.d.mts.map +1 -0
  103. package/dist/ports/index.d.mts +6 -0
  104. package/dist/ports/logger.d.mts +88 -0
  105. package/dist/ports/logger.d.mts.map +1 -0
  106. package/dist/ports/rulesync.d.mts +38 -0
  107. package/dist/ports/rulesync.d.mts.map +1 -0
  108. package/dist/ports/watcher.d.mts +52 -0
  109. package/dist/ports/watcher.d.mts.map +1 -0
  110. package/dist/services/agent-guide/adapters/claude-code.d.mts +35 -0
  111. package/dist/services/agent-guide/adapters/claude-code.d.mts.map +1 -0
  112. package/dist/services/agent-guide/adapters/claude-code.mjs +144 -0
  113. package/dist/services/agent-guide/adapters/claude-code.mjs.map +1 -0
  114. package/dist/services/agent-guide/adapters/cursor-cli.d.mts +39 -0
  115. package/dist/services/agent-guide/adapters/cursor-cli.d.mts.map +1 -0
  116. package/dist/services/agent-guide/adapters/cursor-cli.mjs +135 -0
  117. package/dist/services/agent-guide/adapters/cursor-cli.mjs.map +1 -0
  118. package/dist/services/agent-guide/adapters/generic-mcp.d.mts +53 -0
  119. package/dist/services/agent-guide/adapters/generic-mcp.d.mts.map +1 -0
  120. package/dist/services/agent-guide/adapters/generic-mcp.mjs +159 -0
  121. package/dist/services/agent-guide/adapters/generic-mcp.mjs.map +1 -0
  122. package/dist/services/agent-guide/adapters/index.d.mts +23 -0
  123. package/dist/services/agent-guide/adapters/index.d.mts.map +1 -0
  124. package/dist/services/agent-guide/adapters/index.mjs +31 -0
  125. package/dist/services/agent-guide/adapters/index.mjs.map +1 -0
  126. package/dist/services/agent-guide/agent-guide-service.d.mts +56 -0
  127. package/dist/services/agent-guide/agent-guide-service.d.mts.map +1 -0
  128. package/dist/services/agent-guide/agent-guide-service.mjs +147 -0
  129. package/dist/services/agent-guide/agent-guide-service.mjs.map +1 -0
  130. package/dist/services/agent-guide/index.d.mts +6 -0
  131. package/dist/services/agent-guide/index.mjs +7 -0
  132. package/dist/services/agent-guide/types.d.mts +58 -0
  133. package/dist/services/agent-guide/types.d.mts.map +1 -0
  134. package/dist/services/build.d.mts +61 -0
  135. package/dist/services/build.d.mts.map +1 -0
  136. package/dist/services/build.mjs +151 -0
  137. package/dist/services/build.mjs.map +1 -0
  138. package/dist/services/ci-check/checks/coverage.mjs +77 -0
  139. package/dist/services/ci-check/checks/coverage.mjs.map +1 -0
  140. package/dist/services/ci-check/checks/deps.mjs +32 -0
  141. package/dist/services/ci-check/checks/deps.mjs.map +1 -0
  142. package/dist/services/ci-check/checks/doctor.mjs +38 -0
  143. package/dist/services/ci-check/checks/doctor.mjs.map +1 -0
  144. package/dist/services/ci-check/checks/drift.mjs +40 -0
  145. package/dist/services/ci-check/checks/drift.mjs.map +1 -0
  146. package/dist/services/ci-check/checks/handlers.mjs +38 -0
  147. package/dist/services/ci-check/checks/handlers.mjs.map +1 -0
  148. package/dist/services/ci-check/checks/implementation.mjs +73 -0
  149. package/dist/services/ci-check/checks/implementation.mjs.map +1 -0
  150. package/dist/services/ci-check/checks/index.mjs +13 -0
  151. package/dist/services/ci-check/checks/integrity.mjs +31 -0
  152. package/dist/services/ci-check/checks/integrity.mjs.map +1 -0
  153. package/dist/services/ci-check/checks/layers.mjs +66 -0
  154. package/dist/services/ci-check/checks/layers.mjs.map +1 -0
  155. package/dist/services/ci-check/checks/structure.mjs +35 -0
  156. package/dist/services/ci-check/checks/structure.mjs.map +1 -0
  157. package/dist/services/ci-check/checks/test-refs.mjs +63 -0
  158. package/dist/services/ci-check/checks/test-refs.mjs.map +1 -0
  159. package/dist/services/ci-check/checks/tests.mjs +38 -0
  160. package/dist/services/ci-check/checks/tests.mjs.map +1 -0
  161. package/dist/services/ci-check/ci-check-service.d.mts +16 -0
  162. package/dist/services/ci-check/ci-check-service.d.mts.map +1 -0
  163. package/dist/services/ci-check/ci-check-service.mjs +129 -0
  164. package/dist/services/ci-check/ci-check-service.mjs.map +1 -0
  165. package/dist/services/ci-check/index.d.mts +2 -0
  166. package/dist/services/ci-check/index.mjs +4 -0
  167. package/dist/services/ci-check/types.d.mts +147 -0
  168. package/dist/services/ci-check/types.d.mts.map +1 -0
  169. package/dist/services/ci-check/types.mjs +37 -0
  170. package/dist/services/ci-check/types.mjs.map +1 -0
  171. package/dist/services/ci-check/utils.mjs +76 -0
  172. package/dist/services/ci-check/utils.mjs.map +1 -0
  173. package/dist/services/clean.d.mts +41 -0
  174. package/dist/services/clean.d.mts.map +1 -0
  175. package/dist/services/clean.mjs +72 -0
  176. package/dist/services/clean.mjs.map +1 -0
  177. package/dist/services/config.d.mts +16 -0
  178. package/dist/services/config.d.mts.map +1 -0
  179. package/dist/services/config.mjs +63 -0
  180. package/dist/services/config.mjs.map +1 -0
  181. package/dist/services/coverage/parsers/index.mjs +34 -0
  182. package/dist/services/coverage/parsers/index.mjs.map +1 -0
  183. package/dist/services/coverage/parsers/istanbul-parser.mjs +108 -0
  184. package/dist/services/coverage/parsers/istanbul-parser.mjs.map +1 -0
  185. package/dist/services/coverage/validator.mjs +55 -0
  186. package/dist/services/coverage/validator.mjs.map +1 -0
  187. package/dist/services/create/ai-generator.d.mts +84 -0
  188. package/dist/services/create/ai-generator.d.mts.map +1 -0
  189. package/dist/services/create/ai-generator.mjs +178 -0
  190. package/dist/services/create/ai-generator.mjs.map +1 -0
  191. package/dist/services/create/index.d.mts +28 -0
  192. package/dist/services/create/index.d.mts.map +1 -0
  193. package/dist/services/create/index.mjs +37 -0
  194. package/dist/services/create/index.mjs.map +1 -0
  195. package/dist/services/create/templates.d.mts +22 -0
  196. package/dist/services/create/templates.d.mts.map +1 -0
  197. package/dist/services/create/templates.mjs +39 -0
  198. package/dist/services/create/templates.mjs.map +1 -0
  199. package/dist/services/deps.d.mts +53 -0
  200. package/dist/services/deps.d.mts.map +1 -0
  201. package/dist/services/deps.mjs +62 -0
  202. package/dist/services/deps.mjs.map +1 -0
  203. package/dist/services/diff.d.mts +34 -0
  204. package/dist/services/diff.d.mts.map +1 -0
  205. package/dist/services/diff.mjs +34 -0
  206. package/dist/services/diff.mjs.map +1 -0
  207. package/dist/services/docs/docs-service.d.mts +20 -0
  208. package/dist/services/docs/docs-service.d.mts.map +1 -0
  209. package/dist/services/docs/docs-service.mjs +59 -0
  210. package/dist/services/docs/docs-service.mjs.map +1 -0
  211. package/dist/services/docs/index.d.mts +1 -0
  212. package/dist/services/docs/index.mjs +3 -0
  213. package/dist/services/doctor/checks/ai.mjs +119 -0
  214. package/dist/services/doctor/checks/ai.mjs.map +1 -0
  215. package/dist/services/doctor/checks/cli.mjs +156 -0
  216. package/dist/services/doctor/checks/cli.mjs.map +1 -0
  217. package/dist/services/doctor/checks/config.mjs +303 -0
  218. package/dist/services/doctor/checks/config.mjs.map +1 -0
  219. package/dist/services/doctor/checks/deps.mjs +267 -0
  220. package/dist/services/doctor/checks/deps.mjs.map +1 -0
  221. package/dist/services/doctor/checks/index.mjs +9 -0
  222. package/dist/services/doctor/checks/layers.mjs +139 -0
  223. package/dist/services/doctor/checks/layers.mjs.map +1 -0
  224. package/dist/services/doctor/checks/mcp.mjs +145 -0
  225. package/dist/services/doctor/checks/mcp.mjs.map +1 -0
  226. package/dist/services/doctor/checks/workspace.mjs +263 -0
  227. package/dist/services/doctor/checks/workspace.mjs.map +1 -0
  228. package/dist/services/doctor/doctor-service.d.mts +24 -0
  229. package/dist/services/doctor/doctor-service.d.mts.map +1 -0
  230. package/dist/services/doctor/doctor-service.mjs +118 -0
  231. package/dist/services/doctor/doctor-service.mjs.map +1 -0
  232. package/dist/services/doctor/index.d.mts +2 -0
  233. package/dist/services/doctor/index.mjs +4 -0
  234. package/dist/services/doctor/types.d.mts +118 -0
  235. package/dist/services/doctor/types.d.mts.map +1 -0
  236. package/dist/services/doctor/types.mjs +29 -0
  237. package/dist/services/doctor/types.mjs.map +1 -0
  238. package/dist/services/drift.mjs +73 -0
  239. package/dist/services/drift.mjs.map +1 -0
  240. package/dist/services/extract.d.mts +12 -0
  241. package/dist/services/extract.d.mts.map +1 -0
  242. package/dist/services/extract.mjs +33 -0
  243. package/dist/services/extract.mjs.map +1 -0
  244. package/dist/services/features/completion.d.mts +21 -0
  245. package/dist/services/features/completion.d.mts.map +1 -0
  246. package/dist/services/features/completion.mjs +70 -0
  247. package/dist/services/features/completion.mjs.map +1 -0
  248. package/dist/services/features/feature-editor.d.mts +27 -0
  249. package/dist/services/features/feature-editor.d.mts.map +1 -0
  250. package/dist/services/features/feature-editor.mjs +37 -0
  251. package/dist/services/features/feature-editor.mjs.map +1 -0
  252. package/dist/services/features/index.d.mts +11 -0
  253. package/dist/services/features/index.d.mts.map +1 -0
  254. package/dist/services/features/index.mjs +16 -0
  255. package/dist/services/features/index.mjs.map +1 -0
  256. package/dist/services/features/validation.d.mts +21 -0
  257. package/dist/services/features/validation.d.mts.map +1 -0
  258. package/dist/services/features/validation.mjs +27 -0
  259. package/dist/services/features/validation.mjs.map +1 -0
  260. package/dist/services/fix/fix-link-formatter.d.mts +12 -0
  261. package/dist/services/fix/fix-link-formatter.d.mts.map +1 -0
  262. package/dist/services/fix/fix-link-formatter.mjs +38 -0
  263. package/dist/services/fix/fix-link-formatter.mjs.map +1 -0
  264. package/dist/services/fix/fix-service.d.mts +74 -0
  265. package/dist/services/fix/fix-service.d.mts.map +1 -0
  266. package/dist/services/fix/fix-service.mjs +169 -0
  267. package/dist/services/fix/fix-service.mjs.map +1 -0
  268. package/dist/services/fix/index.d.mts +16 -0
  269. package/dist/services/fix/index.d.mts.map +1 -0
  270. package/dist/services/fix/index.mjs +24 -0
  271. package/dist/services/fix/index.mjs.map +1 -0
  272. package/dist/services/fix/path-resolver.mjs +83 -0
  273. package/dist/services/fix/path-resolver.mjs.map +1 -0
  274. package/dist/services/fix/schemas.d.mts +17 -0
  275. package/dist/services/fix/schemas.d.mts.map +1 -0
  276. package/dist/services/fix/schemas.mjs +12 -0
  277. package/dist/services/fix/schemas.mjs.map +1 -0
  278. package/dist/services/fix/strategies/implement-ai.d.mts +18 -0
  279. package/dist/services/fix/strategies/implement-ai.d.mts.map +1 -0
  280. package/dist/services/fix/strategies/implement-ai.mjs +139 -0
  281. package/dist/services/fix/strategies/implement-ai.mjs.map +1 -0
  282. package/dist/services/fix/strategies/implement-skeleton.d.mts +14 -0
  283. package/dist/services/fix/strategies/implement-skeleton.d.mts.map +1 -0
  284. package/dist/services/fix/strategies/implement-skeleton.mjs +77 -0
  285. package/dist/services/fix/strategies/implement-skeleton.mjs.map +1 -0
  286. package/dist/services/fix/strategies/index.d.mts +3 -0
  287. package/dist/services/fix/strategies/remove-reference.d.mts +17 -0
  288. package/dist/services/fix/strategies/remove-reference.d.mts.map +1 -0
  289. package/dist/services/fix/strategies/remove-reference.mjs +98 -0
  290. package/dist/services/fix/strategies/remove-reference.mjs.map +1 -0
  291. package/dist/services/fix/types.d.mts +207 -0
  292. package/dist/services/fix/types.d.mts.map +1 -0
  293. package/dist/services/fix/types.mjs +20 -0
  294. package/dist/services/fix/types.mjs.map +1 -0
  295. package/dist/services/formatter.d.mts +15 -0
  296. package/dist/services/formatter.d.mts.map +1 -0
  297. package/dist/services/formatter.mjs +26 -0
  298. package/dist/services/formatter.mjs.map +1 -0
  299. package/dist/services/gap.d.mts +18 -0
  300. package/dist/services/gap.d.mts.map +1 -0
  301. package/dist/services/gap.mjs +44 -0
  302. package/dist/services/gap.mjs.map +1 -0
  303. package/dist/services/generate-artifacts.d.mts +11 -0
  304. package/dist/services/generate-artifacts.d.mts.map +1 -0
  305. package/dist/services/generate-artifacts.mjs +27 -0
  306. package/dist/services/generate-artifacts.mjs.map +1 -0
  307. package/dist/services/hooks/hooks-service.d.mts +24 -0
  308. package/dist/services/hooks/hooks-service.d.mts.map +1 -0
  309. package/dist/services/hooks/hooks-service.mjs +126 -0
  310. package/dist/services/hooks/hooks-service.mjs.map +1 -0
  311. package/dist/services/hooks/index.d.mts +10 -0
  312. package/dist/services/hooks/index.d.mts.map +1 -0
  313. package/dist/services/hooks/index.mjs +12 -0
  314. package/dist/services/hooks/index.mjs.map +1 -0
  315. package/dist/services/hooks/types.d.mts +56 -0
  316. package/dist/services/hooks/types.d.mts.map +1 -0
  317. package/dist/services/impact/formatters.d.mts +27 -0
  318. package/dist/services/impact/formatters.d.mts.map +1 -0
  319. package/dist/services/impact/formatters.mjs +139 -0
  320. package/dist/services/impact/formatters.mjs.map +1 -0
  321. package/dist/services/impact/impact-detection-service.d.mts +22 -0
  322. package/dist/services/impact/impact-detection-service.d.mts.map +1 -0
  323. package/dist/services/impact/impact-detection-service.mjs +96 -0
  324. package/dist/services/impact/impact-detection-service.mjs.map +1 -0
  325. package/dist/services/impact/index.d.mts +11 -0
  326. package/dist/services/impact/index.d.mts.map +1 -0
  327. package/dist/services/impact/index.mjs +16 -0
  328. package/dist/services/impact/index.mjs.map +1 -0
  329. package/dist/services/impact/types.d.mts +63 -0
  330. package/dist/services/impact/types.d.mts.map +1 -0
  331. package/dist/services/implementation/discovery.d.mts +30 -0
  332. package/dist/services/implementation/discovery.d.mts.map +1 -0
  333. package/dist/services/implementation/discovery.mjs +144 -0
  334. package/dist/services/implementation/discovery.mjs.map +1 -0
  335. package/dist/services/implementation/index.d.mts +6 -0
  336. package/dist/services/implementation/index.mjs +7 -0
  337. package/dist/services/implementation/resolver/conventions.d.mts +18 -0
  338. package/dist/services/implementation/resolver/conventions.d.mts.map +1 -0
  339. package/dist/services/implementation/resolver/conventions.mjs +59 -0
  340. package/dist/services/implementation/resolver/conventions.mjs.map +1 -0
  341. package/dist/services/implementation/resolver/index.d.mts +24 -0
  342. package/dist/services/implementation/resolver/index.d.mts.map +1 -0
  343. package/dist/services/implementation/resolver/index.mjs +111 -0
  344. package/dist/services/implementation/resolver/index.mjs.map +1 -0
  345. package/dist/services/implementation/resolver/parsers.d.mts +16 -0
  346. package/dist/services/implementation/resolver/parsers.d.mts.map +1 -0
  347. package/dist/services/implementation/resolver/parsers.mjs +100 -0
  348. package/dist/services/implementation/resolver/parsers.mjs.map +1 -0
  349. package/dist/services/implementation/resolver/status.d.mts +21 -0
  350. package/dist/services/implementation/resolver/status.d.mts.map +1 -0
  351. package/dist/services/implementation/resolver/status.mjs +31 -0
  352. package/dist/services/implementation/resolver/status.mjs.map +1 -0
  353. package/dist/services/implementation/types.d.mts +89 -0
  354. package/dist/services/implementation/types.d.mts.map +1 -0
  355. package/dist/services/index.d.mts +103 -0
  356. package/dist/services/index.mjs +100 -0
  357. package/dist/services/integrity-diagram.d.mts +36 -0
  358. package/dist/services/integrity-diagram.d.mts.map +1 -0
  359. package/dist/services/integrity-diagram.mjs +275 -0
  360. package/dist/services/integrity-diagram.mjs.map +1 -0
  361. package/dist/services/integrity.d.mts +152 -0
  362. package/dist/services/integrity.d.mts.map +1 -0
  363. package/dist/services/integrity.mjs +361 -0
  364. package/dist/services/integrity.mjs.map +1 -0
  365. package/dist/services/layer-discovery.d.mts +77 -0
  366. package/dist/services/layer-discovery.d.mts.map +1 -0
  367. package/dist/services/layer-discovery.mjs +121 -0
  368. package/dist/services/layer-discovery.mjs.map +1 -0
  369. package/dist/services/list.d.mts +37 -0
  370. package/dist/services/list.d.mts.map +1 -0
  371. package/dist/services/list.mjs +46 -0
  372. package/dist/services/list.mjs.map +1 -0
  373. package/dist/services/llm/index.d.mts +28 -0
  374. package/dist/services/llm/index.d.mts.map +1 -0
  375. package/dist/services/llm/index.mjs +187 -0
  376. package/dist/services/llm/index.mjs.map +1 -0
  377. package/dist/services/llm/verify-static.d.mts +26 -0
  378. package/dist/services/llm/verify-static.d.mts.map +1 -0
  379. package/dist/services/llm/verify-static.mjs +82 -0
  380. package/dist/services/llm/verify-static.mjs.map +1 -0
  381. package/dist/services/modules/module-resolver.mjs +61 -0
  382. package/dist/services/modules/module-resolver.mjs.map +1 -0
  383. package/dist/services/openapi/export-service.d.mts +53 -0
  384. package/dist/services/openapi/export-service.d.mts.map +1 -0
  385. package/dist/services/openapi/export-service.mjs +50 -0
  386. package/dist/services/openapi/export-service.mjs.map +1 -0
  387. package/dist/services/openapi/import-service.d.mts +17 -0
  388. package/dist/services/openapi/import-service.d.mts.map +1 -0
  389. package/dist/services/openapi/import-service.mjs +168 -0
  390. package/dist/services/openapi/import-service.mjs.map +1 -0
  391. package/dist/services/openapi/index.d.mts +5 -0
  392. package/dist/services/openapi/index.mjs +6 -0
  393. package/dist/services/openapi/sync-service.d.mts +17 -0
  394. package/dist/services/openapi/sync-service.d.mts.map +1 -0
  395. package/dist/services/openapi/sync-service.mjs +120 -0
  396. package/dist/services/openapi/sync-service.mjs.map +1 -0
  397. package/dist/services/openapi/types.d.mts +162 -0
  398. package/dist/services/openapi/types.d.mts.map +1 -0
  399. package/dist/services/openapi/validate-service.d.mts +16 -0
  400. package/dist/services/openapi/validate-service.d.mts.map +1 -0
  401. package/dist/services/openapi/validate-service.mjs +130 -0
  402. package/dist/services/openapi/validate-service.mjs.map +1 -0
  403. package/dist/services/quickstart/dependencies.d.mts +31 -0
  404. package/dist/services/quickstart/dependencies.d.mts.map +1 -0
  405. package/dist/services/quickstart/dependencies.mjs +57 -0
  406. package/dist/services/quickstart/dependencies.mjs.map +1 -0
  407. package/dist/services/quickstart/index.mjs +4 -0
  408. package/dist/services/quickstart/quickstart-service.d.mts +20 -0
  409. package/dist/services/quickstart/quickstart-service.d.mts.map +1 -0
  410. package/dist/services/quickstart/quickstart-service.mjs +196 -0
  411. package/dist/services/quickstart/quickstart-service.mjs.map +1 -0
  412. package/dist/services/quickstart/types.d.mts +81 -0
  413. package/dist/services/quickstart/types.d.mts.map +1 -0
  414. package/dist/services/regenerator.d.mts +18 -0
  415. package/dist/services/regenerator.d.mts.map +1 -0
  416. package/dist/services/regenerator.mjs +23 -0
  417. package/dist/services/regenerator.mjs.map +1 -0
  418. package/dist/services/registry.d.mts +53 -0
  419. package/dist/services/registry.d.mts.map +1 -0
  420. package/dist/services/registry.mjs +74 -0
  421. package/dist/services/registry.mjs.map +1 -0
  422. package/dist/services/rulesync.d.mts +17 -0
  423. package/dist/services/rulesync.d.mts.map +1 -0
  424. package/dist/services/rulesync.mjs +71 -0
  425. package/dist/services/rulesync.mjs.map +1 -0
  426. package/dist/services/setup/config-generators.d.mts +42 -0
  427. package/dist/services/setup/config-generators.d.mts.map +1 -0
  428. package/dist/services/setup/config-generators.mjs +252 -0
  429. package/dist/services/setup/config-generators.mjs.map +1 -0
  430. package/dist/services/setup/file-merger.d.mts +27 -0
  431. package/dist/services/setup/file-merger.d.mts.map +1 -0
  432. package/dist/services/setup/file-merger.mjs +61 -0
  433. package/dist/services/setup/file-merger.mjs.map +1 -0
  434. package/dist/services/setup/setup-service.d.mts +12 -0
  435. package/dist/services/setup/setup-service.d.mts.map +1 -0
  436. package/dist/services/setup/setup-service.mjs +96 -0
  437. package/dist/services/setup/setup-service.mjs.map +1 -0
  438. package/dist/services/setup/targets/agents-md.mjs +47 -0
  439. package/dist/services/setup/targets/agents-md.mjs.map +1 -0
  440. package/dist/services/setup/targets/cli-config.mjs +60 -0
  441. package/dist/services/setup/targets/cli-config.mjs.map +1 -0
  442. package/dist/services/setup/targets/cursor-rules.mjs +48 -0
  443. package/dist/services/setup/targets/cursor-rules.mjs.map +1 -0
  444. package/dist/services/setup/targets/mcp-claude.mjs +60 -0
  445. package/dist/services/setup/targets/mcp-claude.mjs.map +1 -0
  446. package/dist/services/setup/targets/mcp-cursor.mjs +59 -0
  447. package/dist/services/setup/targets/mcp-cursor.mjs.map +1 -0
  448. package/dist/services/setup/targets/vscode-settings.mjs +63 -0
  449. package/dist/services/setup/targets/vscode-settings.mjs.map +1 -0
  450. package/dist/services/setup/types.d.mts +85 -0
  451. package/dist/services/setup/types.d.mts.map +1 -0
  452. package/dist/services/setup/types.mjs +27 -0
  453. package/dist/services/setup/types.mjs.map +1 -0
  454. package/dist/services/sync.d.mts +42 -0
  455. package/dist/services/sync.d.mts.map +1 -0
  456. package/dist/services/sync.mjs +64 -0
  457. package/dist/services/sync.mjs.map +1 -0
  458. package/dist/services/test/index.d.mts +2 -0
  459. package/dist/services/test/index.mjs +4 -0
  460. package/dist/services/test/test-generator-service.d.mts +24 -0
  461. package/dist/services/test/test-generator-service.d.mts.map +1 -0
  462. package/dist/services/test/test-generator-service.mjs +92 -0
  463. package/dist/services/test/test-generator-service.mjs.map +1 -0
  464. package/dist/services/test/test-service.d.mts +27 -0
  465. package/dist/services/test/test-service.d.mts.map +1 -0
  466. package/dist/services/test/test-service.mjs +94 -0
  467. package/dist/services/test/test-service.mjs.map +1 -0
  468. package/dist/services/test-link/index.d.mts +18 -0
  469. package/dist/services/test-link/index.d.mts.map +1 -0
  470. package/dist/services/test-link/index.mjs +60 -0
  471. package/dist/services/test-link/index.mjs.map +1 -0
  472. package/dist/services/test-link/test-ref-validator.d.mts +2 -0
  473. package/dist/services/test-link/test-ref-validator.mjs +50 -0
  474. package/dist/services/test-link/test-ref-validator.mjs.map +1 -0
  475. package/dist/services/upgrade/index.d.mts +10 -0
  476. package/dist/services/upgrade/index.d.mts.map +1 -0
  477. package/dist/services/upgrade/index.mjs +15 -0
  478. package/dist/services/upgrade/index.mjs.map +1 -0
  479. package/dist/services/upgrade/types.d.mts +78 -0
  480. package/dist/services/upgrade/types.d.mts.map +1 -0
  481. package/dist/services/upgrade/upgrade-service.d.mts +38 -0
  482. package/dist/services/upgrade/upgrade-service.d.mts.map +1 -0
  483. package/dist/services/upgrade/upgrade-service.mjs +201 -0
  484. package/dist/services/upgrade/upgrade-service.mjs.map +1 -0
  485. package/dist/services/validate/blueprint-validator.d.mts +23 -0
  486. package/dist/services/validate/blueprint-validator.d.mts.map +1 -0
  487. package/dist/services/validate/blueprint-validator.mjs +50 -0
  488. package/dist/services/validate/blueprint-validator.mjs.map +1 -0
  489. package/dist/services/validate/implementation-agent-validator.d.mts +20 -0
  490. package/dist/services/validate/implementation-agent-validator.d.mts.map +1 -0
  491. package/dist/services/validate/implementation-agent-validator.mjs +42 -0
  492. package/dist/services/validate/implementation-agent-validator.mjs.map +1 -0
  493. package/dist/services/validate/implementation-validator.d.mts +32 -0
  494. package/dist/services/validate/implementation-validator.d.mts.map +1 -0
  495. package/dist/services/validate/implementation-validator.mjs +64 -0
  496. package/dist/services/validate/implementation-validator.mjs.map +1 -0
  497. package/dist/services/validate/index.d.mts +5 -0
  498. package/dist/services/validate/index.mjs +7 -0
  499. package/dist/services/validate/spec-validator.d.mts +42 -0
  500. package/dist/services/validate/spec-validator.d.mts.map +1 -0
  501. package/dist/services/validate/spec-validator.mjs +49 -0
  502. package/dist/services/validate/spec-validator.mjs.map +1 -0
  503. package/dist/services/validate/tenant-validator.d.mts +21 -0
  504. package/dist/services/validate/tenant-validator.d.mts.map +1 -0
  505. package/dist/services/validate/tenant-validator.mjs +165 -0
  506. package/dist/services/validate/tenant-validator.mjs.map +1 -0
  507. package/dist/services/verification-cache/adapters/filesystem.d.mts +46 -0
  508. package/dist/services/verification-cache/adapters/filesystem.d.mts.map +1 -0
  509. package/dist/services/verification-cache/adapters/filesystem.mjs +120 -0
  510. package/dist/services/verification-cache/adapters/filesystem.mjs.map +1 -0
  511. package/dist/services/verification-cache/adapters/in-memory.d.mts +27 -0
  512. package/dist/services/verification-cache/adapters/in-memory.d.mts.map +1 -0
  513. package/dist/services/verification-cache/adapters/in-memory.mjs +46 -0
  514. package/dist/services/verification-cache/adapters/in-memory.mjs.map +1 -0
  515. package/dist/services/verification-cache/adapters/index.d.mts +3 -0
  516. package/dist/services/verification-cache/adapters/index.mjs +5 -0
  517. package/dist/services/verification-cache/adapters/workspace-state.d.mts +49 -0
  518. package/dist/services/verification-cache/adapters/workspace-state.d.mts.map +1 -0
  519. package/dist/services/verification-cache/adapters/workspace-state.mjs +91 -0
  520. package/dist/services/verification-cache/adapters/workspace-state.mjs.map +1 -0
  521. package/dist/services/verification-cache/cache-service.d.mts +70 -0
  522. package/dist/services/verification-cache/cache-service.d.mts.map +1 -0
  523. package/dist/services/verification-cache/cache-service.mjs +256 -0
  524. package/dist/services/verification-cache/cache-service.mjs.map +1 -0
  525. package/dist/services/verification-cache/index.d.mts +6 -0
  526. package/dist/services/verification-cache/index.mjs +8 -0
  527. package/dist/services/verification-cache/types.d.mts +124 -0
  528. package/dist/services/verification-cache/types.d.mts.map +1 -0
  529. package/dist/services/verification-cache/types.mjs +16 -0
  530. package/dist/services/verification-cache/types.mjs.map +1 -0
  531. package/dist/services/verify/ai-verifier.d.mts +25 -0
  532. package/dist/services/verify/ai-verifier.d.mts.map +1 -0
  533. package/dist/services/verify/ai-verifier.mjs +403 -0
  534. package/dist/services/verify/ai-verifier.mjs.map +1 -0
  535. package/dist/services/verify/behavior-verifier.d.mts +12 -0
  536. package/dist/services/verify/behavior-verifier.d.mts.map +1 -0
  537. package/dist/services/verify/behavior-verifier.mjs +186 -0
  538. package/dist/services/verify/behavior-verifier.mjs.map +1 -0
  539. package/dist/services/verify/index.d.mts +5 -0
  540. package/dist/services/verify/index.mjs +6 -0
  541. package/dist/services/verify/structure-verifier.d.mts +12 -0
  542. package/dist/services/verify/structure-verifier.d.mts.map +1 -0
  543. package/dist/services/verify/structure-verifier.mjs +196 -0
  544. package/dist/services/verify/structure-verifier.mjs.map +1 -0
  545. package/dist/services/verify/types.d.mts +137 -0
  546. package/dist/services/verify/types.d.mts.map +1 -0
  547. package/dist/services/verify/verify-service.d.mts +60 -0
  548. package/dist/services/verify/verify-service.d.mts.map +1 -0
  549. package/dist/services/verify/verify-service.mjs +204 -0
  550. package/dist/services/verify/verify-service.mjs.map +1 -0
  551. package/dist/services/versioning/changelog-formatter.d.mts +24 -0
  552. package/dist/services/versioning/changelog-formatter.d.mts.map +1 -0
  553. package/dist/services/versioning/changelog-formatter.mjs +155 -0
  554. package/dist/services/versioning/changelog-formatter.mjs.map +1 -0
  555. package/dist/services/versioning/conventional-commits.d.mts +95 -0
  556. package/dist/services/versioning/conventional-commits.d.mts.map +1 -0
  557. package/dist/services/versioning/conventional-commits.mjs +184 -0
  558. package/dist/services/versioning/conventional-commits.mjs.map +1 -0
  559. package/dist/services/versioning/index.d.mts +12 -0
  560. package/dist/services/versioning/index.d.mts.map +1 -0
  561. package/dist/services/versioning/index.mjs +28 -0
  562. package/dist/services/versioning/index.mjs.map +1 -0
  563. package/dist/services/versioning/types.d.mts +135 -0
  564. package/dist/services/versioning/types.d.mts.map +1 -0
  565. package/dist/services/versioning/versioning-service.d.mts +74 -0
  566. package/dist/services/versioning/versioning-service.d.mts.map +1 -0
  567. package/dist/services/versioning/versioning-service.mjs +501 -0
  568. package/dist/services/versioning/versioning-service.mjs.map +1 -0
  569. package/dist/services/vibe/config.d.mts +12 -0
  570. package/dist/services/vibe/config.d.mts.map +1 -0
  571. package/dist/services/vibe/config.mjs +43 -0
  572. package/dist/services/vibe/config.mjs.map +1 -0
  573. package/dist/services/vibe/context.d.mts +19 -0
  574. package/dist/services/vibe/context.d.mts.map +1 -0
  575. package/dist/services/vibe/context.mjs +92 -0
  576. package/dist/services/vibe/context.mjs.map +1 -0
  577. package/dist/services/vibe/definitions.d.mts +8 -0
  578. package/dist/services/vibe/definitions.d.mts.map +1 -0
  579. package/dist/services/vibe/definitions.mjs +129 -0
  580. package/dist/services/vibe/definitions.mjs.map +1 -0
  581. package/dist/services/vibe/engine.d.mts +44 -0
  582. package/dist/services/vibe/engine.d.mts.map +1 -0
  583. package/dist/services/vibe/engine.mjs +147 -0
  584. package/dist/services/vibe/engine.mjs.map +1 -0
  585. package/dist/services/vibe/index.d.mts +15 -0
  586. package/dist/services/vibe/index.d.mts.map +1 -0
  587. package/dist/services/vibe/index.mjs +26 -0
  588. package/dist/services/vibe/index.mjs.map +1 -0
  589. package/dist/services/vibe/loader.d.mts +15 -0
  590. package/dist/services/vibe/loader.d.mts.map +1 -0
  591. package/dist/services/vibe/loader.mjs +48 -0
  592. package/dist/services/vibe/loader.mjs.map +1 -0
  593. package/dist/services/vibe/pack.d.mts +19 -0
  594. package/dist/services/vibe/pack.d.mts.map +1 -0
  595. package/dist/services/vibe/pack.mjs +66 -0
  596. package/dist/services/vibe/pack.mjs.map +1 -0
  597. package/dist/services/vibe/types.d.mts +59 -0
  598. package/dist/services/vibe/types.d.mts.map +1 -0
  599. package/dist/services/vibe/types.mjs +12 -0
  600. package/dist/services/vibe/types.mjs.map +1 -0
  601. package/dist/services/view/index.d.mts +11 -0
  602. package/dist/services/view/index.d.mts.map +1 -0
  603. package/dist/services/view/index.mjs +119 -0
  604. package/dist/services/view/index.mjs.map +1 -0
  605. package/dist/services/watch.d.mts +25 -0
  606. package/dist/services/watch.d.mts.map +1 -0
  607. package/dist/services/watch.mjs +33 -0
  608. package/dist/services/watch.mjs.map +1 -0
  609. package/dist/services/workspace-info.d.mts +62 -0
  610. package/dist/services/workspace-info.d.mts.map +1 -0
  611. package/dist/services/workspace-info.mjs +103 -0
  612. package/dist/services/workspace-info.mjs.map +1 -0
  613. package/dist/templates/app-config.template.d.mts +7 -0
  614. package/dist/templates/app-config.template.d.mts.map +1 -0
  615. package/dist/templates/app-config.template.mjs +107 -0
  616. package/dist/templates/app-config.template.mjs.map +1 -0
  617. package/dist/templates/data-view.template.d.mts +7 -0
  618. package/dist/templates/data-view.template.d.mts.map +1 -0
  619. package/dist/templates/data-view.template.mjs +70 -0
  620. package/dist/templates/data-view.template.mjs.map +1 -0
  621. package/dist/templates/event.template.d.mts +11 -0
  622. package/dist/templates/event.template.d.mts.map +1 -0
  623. package/dist/templates/event.template.mjs +42 -0
  624. package/dist/templates/event.template.mjs.map +1 -0
  625. package/dist/templates/experiment.template.d.mts +7 -0
  626. package/dist/templates/experiment.template.d.mts.map +1 -0
  627. package/dist/templates/experiment.template.mjs +89 -0
  628. package/dist/templates/experiment.template.mjs.map +1 -0
  629. package/dist/templates/feature.template.d.mts +33 -0
  630. package/dist/templates/feature.template.d.mts.map +1 -0
  631. package/dist/templates/feature.template.mjs +52 -0
  632. package/dist/templates/feature.template.mjs.map +1 -0
  633. package/dist/templates/fix/skeleton-capability.mjs +49 -0
  634. package/dist/templates/fix/skeleton-capability.mjs.map +1 -0
  635. package/dist/templates/fix/skeleton-event.mjs +56 -0
  636. package/dist/templates/fix/skeleton-event.mjs.map +1 -0
  637. package/dist/templates/fix/skeleton-operation.mjs +122 -0
  638. package/dist/templates/fix/skeleton-operation.mjs.map +1 -0
  639. package/dist/templates/fix/skeleton-presentation.mjs +65 -0
  640. package/dist/templates/fix/skeleton-presentation.mjs.map +1 -0
  641. package/dist/templates/fix/utils.mjs +34 -0
  642. package/dist/templates/fix/utils.mjs.map +1 -0
  643. package/dist/templates/handler.template.d.mts +16 -0
  644. package/dist/templates/handler.template.d.mts.map +1 -0
  645. package/dist/templates/handler.template.mjs +100 -0
  646. package/dist/templates/handler.template.mjs.map +1 -0
  647. package/dist/templates/index.d.mts +22 -0
  648. package/dist/templates/index.d.mts.map +1 -0
  649. package/dist/templates/index.mjs +39 -0
  650. package/dist/templates/index.mjs.map +1 -0
  651. package/dist/templates/integration.template.d.mts +7 -0
  652. package/dist/templates/integration.template.d.mts.map +1 -0
  653. package/dist/templates/integration.template.mjs +160 -0
  654. package/dist/templates/integration.template.mjs.map +1 -0
  655. package/dist/templates/knowledge.template.d.mts +7 -0
  656. package/dist/templates/knowledge.template.d.mts.map +1 -0
  657. package/dist/templates/knowledge.template.mjs +75 -0
  658. package/dist/templates/knowledge.template.mjs.map +1 -0
  659. package/dist/templates/migration.template.d.mts +7 -0
  660. package/dist/templates/migration.template.d.mts.map +1 -0
  661. package/dist/templates/migration.template.mjs +62 -0
  662. package/dist/templates/migration.template.mjs.map +1 -0
  663. package/dist/templates/operation.template.d.mts +11 -0
  664. package/dist/templates/operation.template.d.mts.map +1 -0
  665. package/dist/templates/operation.template.mjs +107 -0
  666. package/dist/templates/operation.template.mjs.map +1 -0
  667. package/dist/templates/presentation.template.d.mts +11 -0
  668. package/dist/templates/presentation.template.d.mts.map +1 -0
  669. package/dist/templates/presentation.template.mjs +80 -0
  670. package/dist/templates/presentation.template.mjs.map +1 -0
  671. package/dist/templates/telemetry.template.d.mts +7 -0
  672. package/dist/templates/telemetry.template.d.mts.map +1 -0
  673. package/dist/templates/telemetry.template.mjs +91 -0
  674. package/dist/templates/telemetry.template.mjs.map +1 -0
  675. package/dist/templates/workflow-runner.template.d.mts +16 -0
  676. package/dist/templates/workflow-runner.template.d.mts.map +1 -0
  677. package/dist/templates/workflow-runner.template.mjs +50 -0
  678. package/dist/templates/workflow-runner.template.mjs.map +1 -0
  679. package/dist/templates/workflow.template.d.mts +7 -0
  680. package/dist/templates/workflow.template.d.mts.map +1 -0
  681. package/dist/templates/workflow.template.mjs +69 -0
  682. package/dist/templates/workflow.template.mjs.map +1 -0
  683. package/dist/types/config.d.mts +34 -0
  684. package/dist/types/config.d.mts.map +1 -0
  685. package/dist/types.d.mts +324 -0
  686. package/dist/types.d.mts.map +1 -0
  687. package/dist/utils/filter.d.mts +16 -0
  688. package/dist/utils/filter.d.mts.map +1 -0
  689. package/dist/utils/filter.mjs +22 -0
  690. package/dist/utils/filter.mjs.map +1 -0
  691. package/dist/utils/index.d.mts +11 -0
  692. package/dist/utils/index.d.mts.map +1 -0
  693. package/dist/utils/index.mjs +20 -0
  694. package/dist/utils/index.mjs.map +1 -0
  695. package/dist/utils/module-loader.d.mts +5 -0
  696. package/dist/utils/module-loader.d.mts.map +1 -0
  697. package/dist/utils/module-loader.mjs +41 -0
  698. package/dist/utils/module-loader.mjs.map +1 -0
  699. package/dist/utils/validation.d.mts +37 -0
  700. package/dist/utils/validation.d.mts.map +1 -0
  701. package/dist/utils/validation.mjs +43 -0
  702. package/dist/utils/validation.mjs.map +1 -0
  703. package/package.json +76 -0
@@ -0,0 +1,267 @@
1
+ import { exec } from "node:child_process";
2
+ import { promisify } from "node:util";
3
+
4
+ //#region src/services/doctor/checks/deps.ts
5
+ /**
6
+ * Dependencies health checks.
7
+ */
8
+ const execAsync = promisify(exec);
9
+ /**
10
+ * Run dependency-related health checks.
11
+ */
12
+ async function runDepsChecks(fs, ctx) {
13
+ const results = [];
14
+ results.push(await checkNodeJs(ctx));
15
+ results.push(await checkBun(ctx));
16
+ results.push(await checkPackageManager(fs, ctx));
17
+ results.push(await checkNodeModules(fs, ctx));
18
+ results.push(await checkContractsLibrary(fs, ctx));
19
+ return results;
20
+ }
21
+ /**
22
+ * Check if Node.js is available.
23
+ */
24
+ async function checkNodeJs(ctx) {
25
+ try {
26
+ const { stdout } = await execAsync("node --version", {
27
+ cwd: ctx.workspaceRoot,
28
+ timeout: 5e3
29
+ });
30
+ return {
31
+ category: "deps",
32
+ name: "Node.js",
33
+ status: "pass",
34
+ message: `Node.js ${stdout.trim()} available`
35
+ };
36
+ } catch {
37
+ return {
38
+ category: "deps",
39
+ name: "Node.js",
40
+ status: "fail",
41
+ message: "Node.js not found",
42
+ details: "Install Node.js from https://nodejs.org"
43
+ };
44
+ }
45
+ }
46
+ /**
47
+ * Check if Bun is available.
48
+ */
49
+ async function checkBun(ctx) {
50
+ try {
51
+ const { stdout } = await execAsync("bun --version", {
52
+ cwd: ctx.workspaceRoot,
53
+ timeout: 5e3
54
+ });
55
+ return {
56
+ category: "deps",
57
+ name: "Bun Runtime",
58
+ status: "pass",
59
+ message: `Bun ${stdout.trim()} available`
60
+ };
61
+ } catch {
62
+ return {
63
+ category: "deps",
64
+ name: "Bun Runtime",
65
+ status: "warn",
66
+ message: "Bun not found (optional but recommended)",
67
+ details: "Install Bun from https://bun.sh for faster execution"
68
+ };
69
+ }
70
+ }
71
+ /**
72
+ * Detect and check the package manager.
73
+ */
74
+ async function checkPackageManager(fs, ctx) {
75
+ const lockFiles = [
76
+ {
77
+ file: "bun.lockb",
78
+ name: "bun"
79
+ },
80
+ {
81
+ file: "pnpm-lock.yaml",
82
+ name: "pnpm"
83
+ },
84
+ {
85
+ file: "yarn.lock",
86
+ name: "yarn"
87
+ },
88
+ {
89
+ file: "package-lock.json",
90
+ name: "npm"
91
+ }
92
+ ];
93
+ let detectedManager = null;
94
+ for (const { file, name } of lockFiles) {
95
+ const lockPath = fs.join(ctx.workspaceRoot, file);
96
+ if (await fs.exists(lockPath)) {
97
+ detectedManager = name;
98
+ break;
99
+ }
100
+ }
101
+ if (!detectedManager) {
102
+ const searchDirs = [fs.join(ctx.workspaceRoot, ".."), fs.join(ctx.workspaceRoot, "../..")];
103
+ for (const dir of searchDirs) {
104
+ for (const { file, name } of lockFiles) {
105
+ const lockPath = fs.join(dir, file);
106
+ if (await fs.exists(lockPath)) {
107
+ detectedManager = name;
108
+ break;
109
+ }
110
+ }
111
+ if (detectedManager) break;
112
+ }
113
+ }
114
+ if (!detectedManager) return {
115
+ category: "deps",
116
+ name: "Package Manager",
117
+ status: "warn",
118
+ message: "No lock file found",
119
+ details: "Run npm install, yarn, pnpm install, or bun install"
120
+ };
121
+ try {
122
+ await execAsync(`${detectedManager} --version`, {
123
+ cwd: ctx.workspaceRoot,
124
+ timeout: 5e3
125
+ });
126
+ return {
127
+ category: "deps",
128
+ name: "Package Manager",
129
+ status: "pass",
130
+ message: `Using ${detectedManager}`
131
+ };
132
+ } catch {
133
+ return {
134
+ category: "deps",
135
+ name: "Package Manager",
136
+ status: "fail",
137
+ message: `${detectedManager} detected but not available`,
138
+ details: `Install ${detectedManager} or use a different package manager`
139
+ };
140
+ }
141
+ }
142
+ /**
143
+ * Check if node_modules exists.
144
+ */
145
+ async function checkNodeModules(fs, ctx) {
146
+ const nodeModulesPath = fs.join(ctx.workspaceRoot, "node_modules");
147
+ if (await fs.exists(nodeModulesPath)) return {
148
+ category: "deps",
149
+ name: "Dependencies Installed",
150
+ status: "pass",
151
+ message: "node_modules directory exists"
152
+ };
153
+ return {
154
+ category: "deps",
155
+ name: "Dependencies Installed",
156
+ status: "fail",
157
+ message: "node_modules not found",
158
+ details: "Run your package manager install command",
159
+ fix: {
160
+ description: "Install dependencies",
161
+ apply: async () => {
162
+ try {
163
+ try {
164
+ await execAsync("bun install", {
165
+ cwd: ctx.workspaceRoot,
166
+ timeout: 12e4
167
+ });
168
+ return {
169
+ success: true,
170
+ message: "Installed with bun"
171
+ };
172
+ } catch {
173
+ await execAsync("npm install", {
174
+ cwd: ctx.workspaceRoot,
175
+ timeout: 12e4
176
+ });
177
+ return {
178
+ success: true,
179
+ message: "Installed with npm"
180
+ };
181
+ }
182
+ } catch (error) {
183
+ return {
184
+ success: false,
185
+ message: `Failed: ${error instanceof Error ? error.message : String(error)}`
186
+ };
187
+ }
188
+ }
189
+ }
190
+ };
191
+ }
192
+ /**
193
+ * Check if @contractspec/lib.contracts is installed.
194
+ */
195
+ async function checkContractsLibrary(fs, ctx) {
196
+ const packageJsonPath = fs.join(ctx.workspaceRoot, "package.json");
197
+ try {
198
+ const content = await fs.readFile(packageJsonPath);
199
+ const packageJson = JSON.parse(content);
200
+ const allDeps = {
201
+ ...packageJson.dependencies,
202
+ ...packageJson.devDependencies
203
+ };
204
+ if ("@contractspec/lib.contracts" in allDeps) return {
205
+ category: "deps",
206
+ name: "ContractSpec Library",
207
+ status: "pass",
208
+ message: `@contractspec/lib.contracts installed (${allDeps["@contractspec/lib.contracts"]})`
209
+ };
210
+ if (ctx.isMonorepo && ctx.packageRoot === ctx.workspaceRoot) return {
211
+ category: "deps",
212
+ name: "ContractSpec Library",
213
+ status: "pass",
214
+ message: "Monorepo root detected (library check skipped)",
215
+ details: "Run doctor in specific packages to verify dependencies"
216
+ };
217
+ return {
218
+ category: "deps",
219
+ name: "ContractSpec Library",
220
+ status: "fail",
221
+ message: "@contractspec/lib.contracts not installed",
222
+ details: "Run \"contractspec quickstart\" to install required packages",
223
+ fix: {
224
+ description: "Install @contractspec/lib.contracts and dependencies",
225
+ apply: async () => {
226
+ try {
227
+ try {
228
+ await execAsync("bun add @contractspec/lib.contracts zod", {
229
+ cwd: ctx.workspaceRoot,
230
+ timeout: 12e4
231
+ });
232
+ return {
233
+ success: true,
234
+ message: "Installed with bun"
235
+ };
236
+ } catch {
237
+ await execAsync("npm install @contractspec/lib.contracts zod", {
238
+ cwd: ctx.workspaceRoot,
239
+ timeout: 12e4
240
+ });
241
+ return {
242
+ success: true,
243
+ message: "Installed with npm"
244
+ };
245
+ }
246
+ } catch (error) {
247
+ return {
248
+ success: false,
249
+ message: `Failed: ${error instanceof Error ? error.message : String(error)}`
250
+ };
251
+ }
252
+ }
253
+ }
254
+ };
255
+ } catch {
256
+ return {
257
+ category: "deps",
258
+ name: "ContractSpec Library",
259
+ status: "skip",
260
+ message: "Could not read package.json"
261
+ };
262
+ }
263
+ }
264
+
265
+ //#endregion
266
+ export { runDepsChecks };
267
+ //# sourceMappingURL=deps.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deps.mjs","names":[],"sources":["../../../../src/services/doctor/checks/deps.ts"],"sourcesContent":["/**\n * Dependencies health checks.\n */\n\nimport { exec } from 'node:child_process';\nimport { promisify } from 'node:util';\nimport type { FsAdapter } from '../../../ports/fs';\nimport type { CheckResult, CheckContext } from '../types';\n\nconst execAsync = promisify(exec);\n\n/**\n * Run dependency-related health checks.\n */\nexport async function runDepsChecks(\n fs: FsAdapter,\n ctx: CheckContext\n): Promise<CheckResult[]> {\n const results: CheckResult[] = [];\n\n // Check Node.js availability\n results.push(await checkNodeJs(ctx));\n\n // Check Bun availability\n results.push(await checkBun(ctx));\n\n // Check package manager\n results.push(await checkPackageManager(fs, ctx));\n\n // Check if node_modules exists\n results.push(await checkNodeModules(fs, ctx));\n\n // Check if @contractspec/lib.contracts is installed\n results.push(await checkContractsLibrary(fs, ctx));\n\n return results;\n}\n\n/**\n * Check if Node.js is available.\n */\nasync function checkNodeJs(ctx: CheckContext): Promise<CheckResult> {\n try {\n const { stdout } = await execAsync('node --version', {\n cwd: ctx.workspaceRoot,\n timeout: 5000,\n });\n\n const version = stdout.trim();\n\n return {\n category: 'deps',\n name: 'Node.js',\n status: 'pass',\n message: `Node.js ${version} available`,\n };\n } catch {\n return {\n category: 'deps',\n name: 'Node.js',\n status: 'fail',\n message: 'Node.js not found',\n details: 'Install Node.js from https://nodejs.org',\n };\n }\n}\n\n/**\n * Check if Bun is available.\n */\nasync function checkBun(ctx: CheckContext): Promise<CheckResult> {\n try {\n const { stdout } = await execAsync('bun --version', {\n cwd: ctx.workspaceRoot,\n timeout: 5000,\n });\n\n const version = stdout.trim();\n\n return {\n category: 'deps',\n name: 'Bun Runtime',\n status: 'pass',\n message: `Bun ${version} available`,\n };\n } catch {\n return {\n category: 'deps',\n name: 'Bun Runtime',\n status: 'warn',\n message: 'Bun not found (optional but recommended)',\n details: 'Install Bun from https://bun.sh for faster execution',\n };\n }\n}\n\n/**\n * Detect and check the package manager.\n */\nasync function checkPackageManager(\n fs: FsAdapter,\n ctx: CheckContext\n): Promise<CheckResult> {\n // Check for lock files to determine package manager\n const lockFiles = [\n { file: 'bun.lockb', name: 'bun' },\n { file: 'pnpm-lock.yaml', name: 'pnpm' },\n { file: 'yarn.lock', name: 'yarn' },\n { file: 'package-lock.json', name: 'npm' },\n ];\n\n let detectedManager: string | null = null;\n\n for (const { file, name } of lockFiles) {\n const lockPath = fs.join(ctx.workspaceRoot, file);\n if (await fs.exists(lockPath)) {\n detectedManager = name;\n break;\n }\n }\n\n // If not found, try looking in parent directory (nested monorepo case)\n if (!detectedManager) {\n const parentDir = fs.join(ctx.workspaceRoot, '..');\n const grandParentDir = fs.join(ctx.workspaceRoot, '../..');\n const searchDirs = [parentDir, grandParentDir];\n\n for (const dir of searchDirs) {\n for (const { file, name } of lockFiles) {\n const lockPath = fs.join(dir, file);\n if (await fs.exists(lockPath)) {\n detectedManager = name;\n // Optionally update context or just pass?\n // We'll just use this manager for version check\n break;\n }\n }\n if (detectedManager) break;\n }\n }\n\n if (!detectedManager) {\n return {\n category: 'deps',\n name: 'Package Manager',\n status: 'warn',\n message: 'No lock file found',\n details: 'Run npm install, yarn, pnpm install, or bun install',\n };\n }\n\n // Verify the package manager is available\n try {\n await execAsync(`${detectedManager} --version`, {\n cwd: ctx.workspaceRoot,\n timeout: 5000,\n });\n\n return {\n category: 'deps',\n name: 'Package Manager',\n status: 'pass',\n message: `Using ${detectedManager}`,\n };\n } catch {\n return {\n category: 'deps',\n name: 'Package Manager',\n status: 'fail',\n message: `${detectedManager} detected but not available`,\n details: `Install ${detectedManager} or use a different package manager`,\n };\n }\n}\n\n/**\n * Check if node_modules exists.\n */\nasync function checkNodeModules(\n fs: FsAdapter,\n ctx: CheckContext\n): Promise<CheckResult> {\n const nodeModulesPath = fs.join(ctx.workspaceRoot, 'node_modules');\n\n const exists = await fs.exists(nodeModulesPath);\n if (exists) {\n return {\n category: 'deps',\n name: 'Dependencies Installed',\n status: 'pass',\n message: 'node_modules directory exists',\n };\n }\n\n return {\n category: 'deps',\n name: 'Dependencies Installed',\n status: 'fail',\n message: 'node_modules not found',\n details: 'Run your package manager install command',\n fix: {\n description: 'Install dependencies',\n apply: async () => {\n try {\n // Try bun first, then npm\n try {\n await execAsync('bun install', {\n cwd: ctx.workspaceRoot,\n timeout: 120000,\n });\n return { success: true, message: 'Installed with bun' };\n } catch {\n await execAsync('npm install', {\n cwd: ctx.workspaceRoot,\n timeout: 120000,\n });\n return { success: true, message: 'Installed with npm' };\n }\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n return { success: false, message: `Failed: ${msg}` };\n }\n },\n },\n };\n}\n\n/**\n * Check if @contractspec/lib.contracts is installed.\n */\nasync function checkContractsLibrary(\n fs: FsAdapter,\n ctx: CheckContext\n): Promise<CheckResult> {\n const packageJsonPath = fs.join(ctx.workspaceRoot, 'package.json');\n\n try {\n const content = await fs.readFile(packageJsonPath);\n const packageJson = JSON.parse(content) as {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n };\n\n const allDeps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n if ('@contractspec/lib.contracts' in allDeps) {\n return {\n category: 'deps',\n name: 'ContractSpec Library',\n status: 'pass',\n message: `@contractspec/lib.contracts installed (${allDeps['@contractspec/lib.contracts']})`,\n };\n }\n\n // In monorepo root, we don't expect the library to be installed directly\n if (ctx.isMonorepo && ctx.packageRoot === ctx.workspaceRoot) {\n return {\n category: 'deps',\n name: 'ContractSpec Library',\n status: 'pass',\n message: 'Monorepo root detected (library check skipped)',\n details: 'Run doctor in specific packages to verify dependencies',\n };\n }\n\n return {\n category: 'deps',\n name: 'ContractSpec Library',\n status: 'fail',\n message: '@contractspec/lib.contracts not installed',\n details: 'Run \"contractspec quickstart\" to install required packages',\n fix: {\n description: 'Install @contractspec/lib.contracts and dependencies',\n apply: async () => {\n try {\n // Try bun first, then npm\n try {\n await execAsync('bun add @contractspec/lib.contracts zod', {\n cwd: ctx.workspaceRoot,\n timeout: 120000,\n });\n return { success: true, message: 'Installed with bun' };\n } catch {\n await execAsync('npm install @contractspec/lib.contracts zod', {\n cwd: ctx.workspaceRoot,\n timeout: 120000,\n });\n return { success: true, message: 'Installed with npm' };\n }\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n return { success: false, message: `Failed: ${msg}` };\n }\n },\n },\n };\n } catch {\n return {\n category: 'deps',\n name: 'ContractSpec Library',\n status: 'skip',\n message: 'Could not read package.json',\n };\n }\n}\n"],"mappings":";;;;;;;AASA,MAAM,YAAY,UAAU,KAAK;;;;AAKjC,eAAsB,cACpB,IACA,KACwB;CACxB,MAAM,UAAyB,EAAE;AAGjC,SAAQ,KAAK,MAAM,YAAY,IAAI,CAAC;AAGpC,SAAQ,KAAK,MAAM,SAAS,IAAI,CAAC;AAGjC,SAAQ,KAAK,MAAM,oBAAoB,IAAI,IAAI,CAAC;AAGhD,SAAQ,KAAK,MAAM,iBAAiB,IAAI,IAAI,CAAC;AAG7C,SAAQ,KAAK,MAAM,sBAAsB,IAAI,IAAI,CAAC;AAElD,QAAO;;;;;AAMT,eAAe,YAAY,KAAyC;AAClE,KAAI;EACF,MAAM,EAAE,WAAW,MAAM,UAAU,kBAAkB;GACnD,KAAK,IAAI;GACT,SAAS;GACV,CAAC;AAIF,SAAO;GACL,UAAU;GACV,MAAM;GACN,QAAQ;GACR,SAAS,WANK,OAAO,MAAM,CAMC;GAC7B;SACK;AACN,SAAO;GACL,UAAU;GACV,MAAM;GACN,QAAQ;GACR,SAAS;GACT,SAAS;GACV;;;;;;AAOL,eAAe,SAAS,KAAyC;AAC/D,KAAI;EACF,MAAM,EAAE,WAAW,MAAM,UAAU,iBAAiB;GAClD,KAAK,IAAI;GACT,SAAS;GACV,CAAC;AAIF,SAAO;GACL,UAAU;GACV,MAAM;GACN,QAAQ;GACR,SAAS,OANK,OAAO,MAAM,CAMH;GACzB;SACK;AACN,SAAO;GACL,UAAU;GACV,MAAM;GACN,QAAQ;GACR,SAAS;GACT,SAAS;GACV;;;;;;AAOL,eAAe,oBACb,IACA,KACsB;CAEtB,MAAM,YAAY;EAChB;GAAE,MAAM;GAAa,MAAM;GAAO;EAClC;GAAE,MAAM;GAAkB,MAAM;GAAQ;EACxC;GAAE,MAAM;GAAa,MAAM;GAAQ;EACnC;GAAE,MAAM;GAAqB,MAAM;GAAO;EAC3C;CAED,IAAI,kBAAiC;AAErC,MAAK,MAAM,EAAE,MAAM,UAAU,WAAW;EACtC,MAAM,WAAW,GAAG,KAAK,IAAI,eAAe,KAAK;AACjD,MAAI,MAAM,GAAG,OAAO,SAAS,EAAE;AAC7B,qBAAkB;AAClB;;;AAKJ,KAAI,CAAC,iBAAiB;EAGpB,MAAM,aAAa,CAFD,GAAG,KAAK,IAAI,eAAe,KAAK,EAC3B,GAAG,KAAK,IAAI,eAAe,QAAQ,CACZ;AAE9C,OAAK,MAAM,OAAO,YAAY;AAC5B,QAAK,MAAM,EAAE,MAAM,UAAU,WAAW;IACtC,MAAM,WAAW,GAAG,KAAK,KAAK,KAAK;AACnC,QAAI,MAAM,GAAG,OAAO,SAAS,EAAE;AAC7B,uBAAkB;AAGlB;;;AAGJ,OAAI,gBAAiB;;;AAIzB,KAAI,CAAC,gBACH,QAAO;EACL,UAAU;EACV,MAAM;EACN,QAAQ;EACR,SAAS;EACT,SAAS;EACV;AAIH,KAAI;AACF,QAAM,UAAU,GAAG,gBAAgB,aAAa;GAC9C,KAAK,IAAI;GACT,SAAS;GACV,CAAC;AAEF,SAAO;GACL,UAAU;GACV,MAAM;GACN,QAAQ;GACR,SAAS,SAAS;GACnB;SACK;AACN,SAAO;GACL,UAAU;GACV,MAAM;GACN,QAAQ;GACR,SAAS,GAAG,gBAAgB;GAC5B,SAAS,WAAW,gBAAgB;GACrC;;;;;;AAOL,eAAe,iBACb,IACA,KACsB;CACtB,MAAM,kBAAkB,GAAG,KAAK,IAAI,eAAe,eAAe;AAGlE,KADe,MAAM,GAAG,OAAO,gBAAgB,CAE7C,QAAO;EACL,UAAU;EACV,MAAM;EACN,QAAQ;EACR,SAAS;EACV;AAGH,QAAO;EACL,UAAU;EACV,MAAM;EACN,QAAQ;EACR,SAAS;EACT,SAAS;EACT,KAAK;GACH,aAAa;GACb,OAAO,YAAY;AACjB,QAAI;AAEF,SAAI;AACF,YAAM,UAAU,eAAe;OAC7B,KAAK,IAAI;OACT,SAAS;OACV,CAAC;AACF,aAAO;OAAE,SAAS;OAAM,SAAS;OAAsB;aACjD;AACN,YAAM,UAAU,eAAe;OAC7B,KAAK,IAAI;OACT,SAAS;OACV,CAAC;AACF,aAAO;OAAE,SAAS;OAAM,SAAS;OAAsB;;aAElD,OAAO;AAEd,YAAO;MAAE,SAAS;MAAO,SAAS,WADtB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;MACd;;;GAGzD;EACF;;;;;AAMH,eAAe,sBACb,IACA,KACsB;CACtB,MAAM,kBAAkB,GAAG,KAAK,IAAI,eAAe,eAAe;AAElE,KAAI;EACF,MAAM,UAAU,MAAM,GAAG,SAAS,gBAAgB;EAClD,MAAM,cAAc,KAAK,MAAM,QAAQ;EAKvC,MAAM,UAAU;GACd,GAAG,YAAY;GACf,GAAG,YAAY;GAChB;AAED,MAAI,iCAAiC,QACnC,QAAO;GACL,UAAU;GACV,MAAM;GACN,QAAQ;GACR,SAAS,0CAA0C,QAAQ,+BAA+B;GAC3F;AAIH,MAAI,IAAI,cAAc,IAAI,gBAAgB,IAAI,cAC5C,QAAO;GACL,UAAU;GACV,MAAM;GACN,QAAQ;GACR,SAAS;GACT,SAAS;GACV;AAGH,SAAO;GACL,UAAU;GACV,MAAM;GACN,QAAQ;GACR,SAAS;GACT,SAAS;GACT,KAAK;IACH,aAAa;IACb,OAAO,YAAY;AACjB,SAAI;AAEF,UAAI;AACF,aAAM,UAAU,2CAA2C;QACzD,KAAK,IAAI;QACT,SAAS;QACV,CAAC;AACF,cAAO;QAAE,SAAS;QAAM,SAAS;QAAsB;cACjD;AACN,aAAM,UAAU,+CAA+C;QAC7D,KAAK,IAAI;QACT,SAAS;QACV,CAAC;AACF,cAAO;QAAE,SAAS;QAAM,SAAS;QAAsB;;cAElD,OAAO;AAEd,aAAO;OAAE,SAAS;OAAO,SAAS,WADtB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;OACd;;;IAGzD;GACF;SACK;AACN,SAAO;GACL,UAAU;GACV,MAAM;GACN,QAAQ;GACR,SAAS;GACV"}
@@ -0,0 +1,9 @@
1
+ import { runCliChecks } from "./cli.mjs";
2
+ import { runConfigChecks } from "./config.mjs";
3
+ import { runMcpChecks } from "./mcp.mjs";
4
+ import { runDepsChecks } from "./deps.mjs";
5
+ import { runWorkspaceChecks } from "./workspace.mjs";
6
+ import { runAiChecks } from "./ai.mjs";
7
+ import { runLayerChecks } from "./layers.mjs";
8
+
9
+ export { };
@@ -0,0 +1,139 @@
1
+ import { discoverLayers } from "../../layer-discovery.mjs";
2
+
3
+ //#region src/services/doctor/checks/layers.ts
4
+ /**
5
+ * Run all layer health checks.
6
+ */
7
+ async function runLayerChecks(fs, _ctx) {
8
+ const results = [];
9
+ const discovery = await discoverLayers({
10
+ fs,
11
+ logger: {
12
+ info: () => {},
13
+ warn: () => {},
14
+ error: () => {},
15
+ debug: () => {},
16
+ createProgress: () => ({
17
+ start: () => {},
18
+ update: () => {},
19
+ succeed: () => {},
20
+ fail: () => {},
21
+ warn: () => {},
22
+ stop: () => {},
23
+ finish: () => {}
24
+ })
25
+ }
26
+ }, {});
27
+ results.push(checkHasFeatures(discovery.stats.features));
28
+ results.push(checkHasExamples(discovery.stats.examples));
29
+ results.push(checkFeatureOwners(discovery.inventory.features));
30
+ results.push(checkExampleEntrypoints(discovery.inventory.examples));
31
+ results.push(checkWorkspaceConfigs(discovery.inventory.workspaceConfigs));
32
+ return results;
33
+ }
34
+ /**
35
+ * Check if workspace has features defined.
36
+ */
37
+ function checkHasFeatures(count) {
38
+ if (count > 0) return {
39
+ category: "layers",
40
+ name: "Features Defined",
41
+ status: "pass",
42
+ message: `Found ${count} feature module(s)`
43
+ };
44
+ return {
45
+ category: "layers",
46
+ name: "Features Defined",
47
+ status: "warn",
48
+ message: "No feature modules found",
49
+ details: "Create a .feature.ts file to organize your specs into features"
50
+ };
51
+ }
52
+ /**
53
+ * Check if workspace has examples defined.
54
+ */
55
+ function checkHasExamples(count) {
56
+ if (count > 0) return {
57
+ category: "layers",
58
+ name: "Examples Defined",
59
+ status: "pass",
60
+ message: `Found ${count} example(s)`
61
+ };
62
+ return {
63
+ category: "layers",
64
+ name: "Examples Defined",
65
+ status: "skip",
66
+ message: "No examples found (optional)",
67
+ details: "Create an example.ts file to package reusable templates"
68
+ };
69
+ }
70
+ /**
71
+ * Check if features have owners defined.
72
+ */
73
+ function checkFeatureOwners(features) {
74
+ const missingOwners = [];
75
+ for (const [key, feature] of features) if (!feature.owners?.length) missingOwners.push(key);
76
+ if (missingOwners.length === 0) return {
77
+ category: "layers",
78
+ name: "Feature Owners",
79
+ status: features.size > 0 ? "pass" : "skip",
80
+ message: features.size > 0 ? "All features have owners defined" : "No features to check"
81
+ };
82
+ return {
83
+ category: "layers",
84
+ name: "Feature Owners",
85
+ status: "warn",
86
+ message: `${missingOwners.length} feature(s) missing owners`,
87
+ details: `Features: ${missingOwners.slice(0, 3).join(", ")}${missingOwners.length > 3 ? "..." : ""}`
88
+ };
89
+ }
90
+ /**
91
+ * Check if examples have valid entrypoints.
92
+ */
93
+ function checkExampleEntrypoints(examples) {
94
+ const missingPackage = [];
95
+ for (const [key, example] of examples) if (!example.entrypoints.packageName) missingPackage.push(key);
96
+ if (missingPackage.length === 0) return {
97
+ category: "layers",
98
+ name: "Example Entrypoints",
99
+ status: examples.size > 0 ? "pass" : "skip",
100
+ message: examples.size > 0 ? "All examples have valid entrypoints" : "No examples to check"
101
+ };
102
+ return {
103
+ category: "layers",
104
+ name: "Example Entrypoints",
105
+ status: "fail",
106
+ message: `${missingPackage.length} example(s) missing packageName`,
107
+ details: `Examples: ${missingPackage.join(", ")}`
108
+ };
109
+ }
110
+ /**
111
+ * Check if workspace configs are valid.
112
+ */
113
+ function checkWorkspaceConfigs(configs) {
114
+ const invalid = [];
115
+ for (const [, config] of configs) if (!config.valid) invalid.push(config.file);
116
+ if (configs.size === 0) return {
117
+ category: "layers",
118
+ name: "Workspace Configs",
119
+ status: "skip",
120
+ message: "No .contractsrc.json files found"
121
+ };
122
+ if (invalid.length === 0) return {
123
+ category: "layers",
124
+ name: "Workspace Configs",
125
+ status: "pass",
126
+ message: `All ${configs.size} workspace config(s) are valid`
127
+ };
128
+ return {
129
+ category: "layers",
130
+ name: "Workspace Configs",
131
+ status: "fail",
132
+ message: `${invalid.length} workspace config(s) invalid`,
133
+ details: `Files: ${invalid.join(", ")}`
134
+ };
135
+ }
136
+
137
+ //#endregion
138
+ export { runLayerChecks };
139
+ //# sourceMappingURL=layers.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layers.mjs","names":[],"sources":["../../../../src/services/doctor/checks/layers.ts"],"sourcesContent":["/**\n * Layer health checks.\n *\n * Validates contract layers (features, examples, app-configs, workspace-configs).\n */\n\nimport type { FsAdapter } from '../../../ports/fs';\nimport type { CheckContext, CheckResult } from '../types';\nimport { discoverLayers } from '../../layer-discovery';\n\n/**\n * Run all layer health checks.\n */\nexport async function runLayerChecks(\n fs: FsAdapter,\n _ctx: CheckContext\n): Promise<CheckResult[]> {\n const results: CheckResult[] = [];\n\n // Discover layers\n const discovery = await discoverLayers(\n {\n fs,\n logger: {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n info: () => {},\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n warn: () => {},\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n error: () => {},\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n debug: () => {},\n createProgress: () => ({\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n start: () => {},\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n update: () => {},\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n succeed: () => {},\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n fail: () => {},\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n warn: () => {},\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n stop: () => {},\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n finish: () => {},\n }),\n },\n },\n {}\n );\n\n // Check: Has features\n results.push(checkHasFeatures(discovery.stats.features));\n\n // Check: Has examples\n results.push(checkHasExamples(discovery.stats.examples));\n\n // Check: Features have owners\n results.push(checkFeatureOwners(discovery.inventory.features));\n\n // Check: Examples have valid entrypoints\n results.push(checkExampleEntrypoints(discovery.inventory.examples));\n\n // Check: Workspace configs are valid\n results.push(checkWorkspaceConfigs(discovery.inventory.workspaceConfigs));\n\n return results;\n}\n\n/**\n * Check if workspace has features defined.\n */\nfunction checkHasFeatures(count: number): CheckResult {\n if (count > 0) {\n return {\n category: 'layers',\n name: 'Features Defined',\n status: 'pass',\n message: `Found ${count} feature module(s)`,\n };\n }\n\n return {\n category: 'layers',\n name: 'Features Defined',\n status: 'warn',\n message: 'No feature modules found',\n details: 'Create a .feature.ts file to organize your specs into features',\n };\n}\n\n/**\n * Check if workspace has examples defined.\n */\nfunction checkHasExamples(count: number): CheckResult {\n if (count > 0) {\n return {\n category: 'layers',\n name: 'Examples Defined',\n status: 'pass',\n message: `Found ${count} example(s)`,\n };\n }\n\n return {\n category: 'layers',\n name: 'Examples Defined',\n status: 'skip',\n message: 'No examples found (optional)',\n details: 'Create an example.ts file to package reusable templates',\n };\n}\n\n/**\n * Check if features have owners defined.\n */\nfunction checkFeatureOwners(\n features: Map<string, { owners?: string[]; filePath: string }>\n): CheckResult {\n const missingOwners: string[] = [];\n\n for (const [key, feature] of features) {\n if (!feature.owners?.length) {\n missingOwners.push(key);\n }\n }\n\n if (missingOwners.length === 0) {\n return {\n category: 'layers',\n name: 'Feature Owners',\n status: features.size > 0 ? 'pass' : 'skip',\n message:\n features.size > 0\n ? 'All features have owners defined'\n : 'No features to check',\n };\n }\n\n return {\n category: 'layers',\n name: 'Feature Owners',\n status: 'warn',\n message: `${missingOwners.length} feature(s) missing owners`,\n details: `Features: ${missingOwners.slice(0, 3).join(', ')}${missingOwners.length > 3 ? '...' : ''}`,\n };\n}\n\n/**\n * Check if examples have valid entrypoints.\n */\nfunction checkExampleEntrypoints(\n examples: Map<\n string,\n { entrypoints: { packageName: string }; filePath: string }\n >\n): CheckResult {\n const missingPackage: string[] = [];\n\n for (const [key, example] of examples) {\n if (!example.entrypoints.packageName) {\n missingPackage.push(key);\n }\n }\n\n if (missingPackage.length === 0) {\n return {\n category: 'layers',\n name: 'Example Entrypoints',\n status: examples.size > 0 ? 'pass' : 'skip',\n message:\n examples.size > 0\n ? 'All examples have valid entrypoints'\n : 'No examples to check',\n };\n }\n\n return {\n category: 'layers',\n name: 'Example Entrypoints',\n status: 'fail',\n message: `${missingPackage.length} example(s) missing packageName`,\n details: `Examples: ${missingPackage.join(', ')}`,\n };\n}\n\n/**\n * Check if workspace configs are valid.\n */\nfunction checkWorkspaceConfigs(\n configs: Map<string, { valid: boolean; errors: string[]; file: string }>\n): CheckResult {\n const invalid: string[] = [];\n\n for (const [, config] of configs) {\n if (!config.valid) {\n invalid.push(config.file);\n }\n }\n\n if (configs.size === 0) {\n return {\n category: 'layers',\n name: 'Workspace Configs',\n status: 'skip',\n message: 'No .contractsrc.json files found',\n };\n }\n\n if (invalid.length === 0) {\n return {\n category: 'layers',\n name: 'Workspace Configs',\n status: 'pass',\n message: `All ${configs.size} workspace config(s) are valid`,\n };\n }\n\n return {\n category: 'layers',\n name: 'Workspace Configs',\n status: 'fail',\n message: `${invalid.length} workspace config(s) invalid`,\n details: `Files: ${invalid.join(', ')}`,\n };\n}\n"],"mappings":";;;;;;AAaA,eAAsB,eACpB,IACA,MACwB;CACxB,MAAM,UAAyB,EAAE;CAGjC,MAAM,YAAY,MAAM,eACtB;EACE;EACA,QAAQ;GAEN,YAAY;GAEZ,YAAY;GAEZ,aAAa;GAEb,aAAa;GACb,uBAAuB;IAErB,aAAa;IAEb,cAAc;IAEd,eAAe;IAEf,YAAY;IAEZ,YAAY;IAEZ,YAAY;IAEZ,cAAc;IACf;GACF;EACF,EACD,EAAE,CACH;AAGD,SAAQ,KAAK,iBAAiB,UAAU,MAAM,SAAS,CAAC;AAGxD,SAAQ,KAAK,iBAAiB,UAAU,MAAM,SAAS,CAAC;AAGxD,SAAQ,KAAK,mBAAmB,UAAU,UAAU,SAAS,CAAC;AAG9D,SAAQ,KAAK,wBAAwB,UAAU,UAAU,SAAS,CAAC;AAGnE,SAAQ,KAAK,sBAAsB,UAAU,UAAU,iBAAiB,CAAC;AAEzE,QAAO;;;;;AAMT,SAAS,iBAAiB,OAA4B;AACpD,KAAI,QAAQ,EACV,QAAO;EACL,UAAU;EACV,MAAM;EACN,QAAQ;EACR,SAAS,SAAS,MAAM;EACzB;AAGH,QAAO;EACL,UAAU;EACV,MAAM;EACN,QAAQ;EACR,SAAS;EACT,SAAS;EACV;;;;;AAMH,SAAS,iBAAiB,OAA4B;AACpD,KAAI,QAAQ,EACV,QAAO;EACL,UAAU;EACV,MAAM;EACN,QAAQ;EACR,SAAS,SAAS,MAAM;EACzB;AAGH,QAAO;EACL,UAAU;EACV,MAAM;EACN,QAAQ;EACR,SAAS;EACT,SAAS;EACV;;;;;AAMH,SAAS,mBACP,UACa;CACb,MAAM,gBAA0B,EAAE;AAElC,MAAK,MAAM,CAAC,KAAK,YAAY,SAC3B,KAAI,CAAC,QAAQ,QAAQ,OACnB,eAAc,KAAK,IAAI;AAI3B,KAAI,cAAc,WAAW,EAC3B,QAAO;EACL,UAAU;EACV,MAAM;EACN,QAAQ,SAAS,OAAO,IAAI,SAAS;EACrC,SACE,SAAS,OAAO,IACZ,qCACA;EACP;AAGH,QAAO;EACL,UAAU;EACV,MAAM;EACN,QAAQ;EACR,SAAS,GAAG,cAAc,OAAO;EACjC,SAAS,aAAa,cAAc,MAAM,GAAG,EAAE,CAAC,KAAK,KAAK,GAAG,cAAc,SAAS,IAAI,QAAQ;EACjG;;;;;AAMH,SAAS,wBACP,UAIa;CACb,MAAM,iBAA2B,EAAE;AAEnC,MAAK,MAAM,CAAC,KAAK,YAAY,SAC3B,KAAI,CAAC,QAAQ,YAAY,YACvB,gBAAe,KAAK,IAAI;AAI5B,KAAI,eAAe,WAAW,EAC5B,QAAO;EACL,UAAU;EACV,MAAM;EACN,QAAQ,SAAS,OAAO,IAAI,SAAS;EACrC,SACE,SAAS,OAAO,IACZ,wCACA;EACP;AAGH,QAAO;EACL,UAAU;EACV,MAAM;EACN,QAAQ;EACR,SAAS,GAAG,eAAe,OAAO;EAClC,SAAS,aAAa,eAAe,KAAK,KAAK;EAChD;;;;;AAMH,SAAS,sBACP,SACa;CACb,MAAM,UAAoB,EAAE;AAE5B,MAAK,MAAM,GAAG,WAAW,QACvB,KAAI,CAAC,OAAO,MACV,SAAQ,KAAK,OAAO,KAAK;AAI7B,KAAI,QAAQ,SAAS,EACnB,QAAO;EACL,UAAU;EACV,MAAM;EACN,QAAQ;EACR,SAAS;EACV;AAGH,KAAI,QAAQ,WAAW,EACrB,QAAO;EACL,UAAU;EACV,MAAM;EACN,QAAQ;EACR,SAAS,OAAO,QAAQ,KAAK;EAC9B;AAGH,QAAO;EACL,UAAU;EACV,MAAM;EACN,QAAQ;EACR,SAAS,GAAG,QAAQ,OAAO;EAC3B,SAAS,UAAU,QAAQ,KAAK,KAAK;EACtC"}
@@ -0,0 +1,145 @@
1
+ import { generateCursorMcpConfig, getClaudeDesktopConfigPath } from "../../setup/config-generators.mjs";
2
+ import { deepMergePreserve, formatJson } from "../../setup/file-merger.mjs";
3
+
4
+ //#region src/services/doctor/checks/mcp.ts
5
+ /**
6
+ * Run MCP-related health checks.
7
+ */
8
+ async function runMcpChecks(fs, ctx) {
9
+ const results = [];
10
+ results.push(await checkCursorMcpConfig(fs, ctx));
11
+ results.push(await checkCursorMcpServer(fs, ctx));
12
+ results.push(await checkClaudeMcpConfig(fs, ctx));
13
+ return results;
14
+ }
15
+ /**
16
+ * Check if .cursor/mcp.json exists.
17
+ */
18
+ async function checkCursorMcpConfig(fs, ctx) {
19
+ const configPath = fs.join(ctx.workspaceRoot, ".cursor", "mcp.json");
20
+ if (await fs.exists(configPath)) return {
21
+ category: "mcp",
22
+ name: "Cursor MCP Config",
23
+ status: "pass",
24
+ message: ".cursor/mcp.json found"
25
+ };
26
+ return {
27
+ category: "mcp",
28
+ name: "Cursor MCP Config",
29
+ status: "warn",
30
+ message: ".cursor/mcp.json not found",
31
+ details: "MCP integration with Cursor will not work",
32
+ fix: {
33
+ description: "Create .cursor/mcp.json",
34
+ apply: async () => {
35
+ try {
36
+ const cursorDir = fs.join(ctx.workspaceRoot, ".cursor");
37
+ if (!await fs.exists(cursorDir)) await fs.mkdir(cursorDir);
38
+ const defaults = generateCursorMcpConfig();
39
+ await fs.writeFile(configPath, formatJson(defaults));
40
+ return {
41
+ success: true,
42
+ message: "Created .cursor/mcp.json"
43
+ };
44
+ } catch (error) {
45
+ return {
46
+ success: false,
47
+ message: `Failed: ${error instanceof Error ? error.message : String(error)}`
48
+ };
49
+ }
50
+ }
51
+ }
52
+ };
53
+ }
54
+ /**
55
+ * Check if ContractSpec MCP server is registered in Cursor config.
56
+ */
57
+ async function checkCursorMcpServer(fs, ctx) {
58
+ const configPath = fs.join(ctx.workspaceRoot, ".cursor", "mcp.json");
59
+ if (!await fs.exists(configPath)) return {
60
+ category: "mcp",
61
+ name: "MCP Server Registered",
62
+ status: "skip",
63
+ message: "Cursor MCP config does not exist"
64
+ };
65
+ try {
66
+ const content = await fs.readFile(configPath);
67
+ const config = JSON.parse(content);
68
+ if (config.mcpServers?.["contractspec-local"] !== void 0) return {
69
+ category: "mcp",
70
+ name: "MCP Server Registered",
71
+ status: "pass",
72
+ message: "ContractSpec MCP server is registered"
73
+ };
74
+ return {
75
+ category: "mcp",
76
+ name: "MCP Server Registered",
77
+ status: "fail",
78
+ message: "ContractSpec MCP server not registered",
79
+ fix: {
80
+ description: "Register ContractSpec MCP server",
81
+ apply: async () => {
82
+ try {
83
+ const merged = deepMergePreserve(config, generateCursorMcpConfig());
84
+ await fs.writeFile(configPath, formatJson(merged));
85
+ return {
86
+ success: true,
87
+ message: "Registered MCP server"
88
+ };
89
+ } catch (error) {
90
+ return {
91
+ success: false,
92
+ message: `Failed: ${error instanceof Error ? error.message : String(error)}`
93
+ };
94
+ }
95
+ }
96
+ }
97
+ };
98
+ } catch {
99
+ return {
100
+ category: "mcp",
101
+ name: "MCP Server Registered",
102
+ status: "skip",
103
+ message: "Could not parse Cursor MCP config"
104
+ };
105
+ }
106
+ }
107
+ /**
108
+ * Check Claude Desktop MCP config (optional).
109
+ */
110
+ async function checkClaudeMcpConfig(fs, _ctx) {
111
+ const configPath = getClaudeDesktopConfigPath();
112
+ try {
113
+ if (!await fs.exists(configPath)) return {
114
+ category: "mcp",
115
+ name: "Claude Desktop MCP",
116
+ status: "skip",
117
+ message: "Claude Desktop config not found (optional)"
118
+ };
119
+ const content = await fs.readFile(configPath);
120
+ if (JSON.parse(content).mcpServers?.["contractspec-local"] !== void 0) return {
121
+ category: "mcp",
122
+ name: "Claude Desktop MCP",
123
+ status: "pass",
124
+ message: "ContractSpec registered in Claude Desktop"
125
+ };
126
+ return {
127
+ category: "mcp",
128
+ name: "Claude Desktop MCP",
129
+ status: "warn",
130
+ message: "ContractSpec not registered in Claude Desktop",
131
+ details: "Optional: Run setup to configure Claude Desktop"
132
+ };
133
+ } catch {
134
+ return {
135
+ category: "mcp",
136
+ name: "Claude Desktop MCP",
137
+ status: "skip",
138
+ message: "Could not check Claude Desktop config"
139
+ };
140
+ }
141
+ }
142
+
143
+ //#endregion
144
+ export { runMcpChecks };
145
+ //# sourceMappingURL=mcp.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.mjs","names":[],"sources":["../../../../src/services/doctor/checks/mcp.ts"],"sourcesContent":["/**\n * MCP server health checks.\n */\n\nimport type { FsAdapter } from '../../../ports/fs';\nimport type { CheckResult, CheckContext, FixResult } from '../types';\nimport {\n generateCursorMcpConfig,\n getClaudeDesktopConfigPath,\n} from '../../setup/config-generators';\nimport { deepMergePreserve, formatJson } from '../../setup/file-merger';\n\n/**\n * Run MCP-related health checks.\n */\nexport async function runMcpChecks(\n fs: FsAdapter,\n ctx: CheckContext\n): Promise<CheckResult[]> {\n const results: CheckResult[] = [];\n\n // Check Cursor MCP config\n results.push(await checkCursorMcpConfig(fs, ctx));\n\n // Check Cursor MCP server registration\n results.push(await checkCursorMcpServer(fs, ctx));\n\n // Check Claude Desktop config (optional)\n results.push(await checkClaudeMcpConfig(fs, ctx));\n\n return results;\n}\n\n/**\n * Check if .cursor/mcp.json exists.\n */\nasync function checkCursorMcpConfig(\n fs: FsAdapter,\n ctx: CheckContext\n): Promise<CheckResult> {\n const configPath = fs.join(ctx.workspaceRoot, '.cursor', 'mcp.json');\n\n const exists = await fs.exists(configPath);\n if (exists) {\n return {\n category: 'mcp',\n name: 'Cursor MCP Config',\n status: 'pass',\n message: '.cursor/mcp.json found',\n };\n }\n\n return {\n category: 'mcp',\n name: 'Cursor MCP Config',\n status: 'warn',\n message: '.cursor/mcp.json not found',\n details: 'MCP integration with Cursor will not work',\n fix: {\n description: 'Create .cursor/mcp.json',\n apply: async (): Promise<FixResult> => {\n try {\n const cursorDir = fs.join(ctx.workspaceRoot, '.cursor');\n if (!(await fs.exists(cursorDir))) {\n await fs.mkdir(cursorDir);\n }\n\n const defaults = generateCursorMcpConfig();\n await fs.writeFile(configPath, formatJson(defaults));\n return { success: true, message: 'Created .cursor/mcp.json' };\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n return { success: false, message: `Failed: ${msg}` };\n }\n },\n },\n };\n}\n\n/**\n * Check if ContractSpec MCP server is registered in Cursor config.\n */\nasync function checkCursorMcpServer(\n fs: FsAdapter,\n ctx: CheckContext\n): Promise<CheckResult> {\n const configPath = fs.join(ctx.workspaceRoot, '.cursor', 'mcp.json');\n\n const exists = await fs.exists(configPath);\n if (!exists) {\n return {\n category: 'mcp',\n name: 'MCP Server Registered',\n status: 'skip',\n message: 'Cursor MCP config does not exist',\n };\n }\n\n try {\n const content = await fs.readFile(configPath);\n const config = JSON.parse(content) as {\n mcpServers?: Record<string, unknown>;\n };\n\n const hasServer = config.mcpServers?.['contractspec-local'] !== undefined;\n\n if (hasServer) {\n return {\n category: 'mcp',\n name: 'MCP Server Registered',\n status: 'pass',\n message: 'ContractSpec MCP server is registered',\n };\n }\n\n return {\n category: 'mcp',\n name: 'MCP Server Registered',\n status: 'fail',\n message: 'ContractSpec MCP server not registered',\n fix: {\n description: 'Register ContractSpec MCP server',\n apply: async (): Promise<FixResult> => {\n try {\n const defaults = generateCursorMcpConfig() as Record<\n string,\n unknown\n >;\n const merged = deepMergePreserve(\n config as Record<string, unknown>,\n defaults\n );\n await fs.writeFile(configPath, formatJson(merged));\n return { success: true, message: 'Registered MCP server' };\n } catch (error) {\n const msg = error instanceof Error ? error.message : String(error);\n return { success: false, message: `Failed: ${msg}` };\n }\n },\n },\n };\n } catch {\n return {\n category: 'mcp',\n name: 'MCP Server Registered',\n status: 'skip',\n message: 'Could not parse Cursor MCP config',\n };\n }\n}\n\n/**\n * Check Claude Desktop MCP config (optional).\n */\nasync function checkClaudeMcpConfig(\n fs: FsAdapter,\n _ctx: CheckContext\n): Promise<CheckResult> {\n const configPath = getClaudeDesktopConfigPath();\n\n try {\n const exists = await fs.exists(configPath);\n if (!exists) {\n return {\n category: 'mcp',\n name: 'Claude Desktop MCP',\n status: 'skip',\n message: 'Claude Desktop config not found (optional)',\n };\n }\n\n const content = await fs.readFile(configPath);\n const config = JSON.parse(content) as {\n mcpServers?: Record<string, unknown>;\n };\n\n const hasServer = config.mcpServers?.['contractspec-local'] !== undefined;\n\n if (hasServer) {\n return {\n category: 'mcp',\n name: 'Claude Desktop MCP',\n status: 'pass',\n message: 'ContractSpec registered in Claude Desktop',\n };\n }\n\n return {\n category: 'mcp',\n name: 'Claude Desktop MCP',\n status: 'warn',\n message: 'ContractSpec not registered in Claude Desktop',\n details: 'Optional: Run setup to configure Claude Desktop',\n };\n } catch {\n return {\n category: 'mcp',\n name: 'Claude Desktop MCP',\n status: 'skip',\n message: 'Could not check Claude Desktop config',\n };\n }\n}\n"],"mappings":";;;;;;;AAeA,eAAsB,aACpB,IACA,KACwB;CACxB,MAAM,UAAyB,EAAE;AAGjC,SAAQ,KAAK,MAAM,qBAAqB,IAAI,IAAI,CAAC;AAGjD,SAAQ,KAAK,MAAM,qBAAqB,IAAI,IAAI,CAAC;AAGjD,SAAQ,KAAK,MAAM,qBAAqB,IAAI,IAAI,CAAC;AAEjD,QAAO;;;;;AAMT,eAAe,qBACb,IACA,KACsB;CACtB,MAAM,aAAa,GAAG,KAAK,IAAI,eAAe,WAAW,WAAW;AAGpE,KADe,MAAM,GAAG,OAAO,WAAW,CAExC,QAAO;EACL,UAAU;EACV,MAAM;EACN,QAAQ;EACR,SAAS;EACV;AAGH,QAAO;EACL,UAAU;EACV,MAAM;EACN,QAAQ;EACR,SAAS;EACT,SAAS;EACT,KAAK;GACH,aAAa;GACb,OAAO,YAAgC;AACrC,QAAI;KACF,MAAM,YAAY,GAAG,KAAK,IAAI,eAAe,UAAU;AACvD,SAAI,CAAE,MAAM,GAAG,OAAO,UAAU,CAC9B,OAAM,GAAG,MAAM,UAAU;KAG3B,MAAM,WAAW,yBAAyB;AAC1C,WAAM,GAAG,UAAU,YAAY,WAAW,SAAS,CAAC;AACpD,YAAO;MAAE,SAAS;MAAM,SAAS;MAA4B;aACtD,OAAO;AAEd,YAAO;MAAE,SAAS;MAAO,SAAS,WADtB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;MACd;;;GAGzD;EACF;;;;;AAMH,eAAe,qBACb,IACA,KACsB;CACtB,MAAM,aAAa,GAAG,KAAK,IAAI,eAAe,WAAW,WAAW;AAGpE,KAAI,CADW,MAAM,GAAG,OAAO,WAAW,CAExC,QAAO;EACL,UAAU;EACV,MAAM;EACN,QAAQ;EACR,SAAS;EACV;AAGH,KAAI;EACF,MAAM,UAAU,MAAM,GAAG,SAAS,WAAW;EAC7C,MAAM,SAAS,KAAK,MAAM,QAAQ;AAMlC,MAFkB,OAAO,aAAa,0BAA0B,OAG9D,QAAO;GACL,UAAU;GACV,MAAM;GACN,QAAQ;GACR,SAAS;GACV;AAGH,SAAO;GACL,UAAU;GACV,MAAM;GACN,QAAQ;GACR,SAAS;GACT,KAAK;IACH,aAAa;IACb,OAAO,YAAgC;AACrC,SAAI;MAKF,MAAM,SAAS,kBACb,QALe,yBAAyB,CAOzC;AACD,YAAM,GAAG,UAAU,YAAY,WAAW,OAAO,CAAC;AAClD,aAAO;OAAE,SAAS;OAAM,SAAS;OAAyB;cACnD,OAAO;AAEd,aAAO;OAAE,SAAS;OAAO,SAAS,WADtB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;OACd;;;IAGzD;GACF;SACK;AACN,SAAO;GACL,UAAU;GACV,MAAM;GACN,QAAQ;GACR,SAAS;GACV;;;;;;AAOL,eAAe,qBACb,IACA,MACsB;CACtB,MAAM,aAAa,4BAA4B;AAE/C,KAAI;AAEF,MAAI,CADW,MAAM,GAAG,OAAO,WAAW,CAExC,QAAO;GACL,UAAU;GACV,MAAM;GACN,QAAQ;GACR,SAAS;GACV;EAGH,MAAM,UAAU,MAAM,GAAG,SAAS,WAAW;AAO7C,MANe,KAAK,MAAM,QAAQ,CAIT,aAAa,0BAA0B,OAG9D,QAAO;GACL,UAAU;GACV,MAAM;GACN,QAAQ;GACR,SAAS;GACV;AAGH,SAAO;GACL,UAAU;GACV,MAAM;GACN,QAAQ;GACR,SAAS;GACT,SAAS;GACV;SACK;AACN,SAAO;GACL,UAAU;GACV,MAAM;GACN,QAAQ;GACR,SAAS;GACV"}