@sdd-method/sdd-cli 0.9.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 (373) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +17 -0
  3. package/README.md +151 -0
  4. package/dist/cli.d.ts +3 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +8 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/index.d.ts +2 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +66 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/lib/bundle.d.ts +20 -0
  13. package/dist/lib/bundle.d.ts.map +1 -0
  14. package/dist/lib/bundle.js +75 -0
  15. package/dist/lib/bundle.js.map +1 -0
  16. package/dist/lib/generate-claude-md/index.d.ts +16 -0
  17. package/dist/lib/generate-claude-md/index.d.ts.map +1 -0
  18. package/dist/lib/generate-claude-md/index.js +89 -0
  19. package/dist/lib/generate-claude-md/index.js.map +1 -0
  20. package/dist/lib/hooks-seed/entries.d.ts +16 -0
  21. package/dist/lib/hooks-seed/entries.d.ts.map +1 -0
  22. package/dist/lib/hooks-seed/entries.js +47 -0
  23. package/dist/lib/hooks-seed/entries.js.map +1 -0
  24. package/dist/lib/hooks-seed/index.d.ts +17 -0
  25. package/dist/lib/hooks-seed/index.d.ts.map +1 -0
  26. package/dist/lib/hooks-seed/index.js +15 -0
  27. package/dist/lib/hooks-seed/index.js.map +1 -0
  28. package/dist/lib/hooks-seed/merge.d.ts +24 -0
  29. package/dist/lib/hooks-seed/merge.d.ts.map +1 -0
  30. package/dist/lib/hooks-seed/merge.js +73 -0
  31. package/dist/lib/hooks-seed/merge.js.map +1 -0
  32. package/dist/lib/hooks-seed/types.d.ts +27 -0
  33. package/dist/lib/hooks-seed/types.d.ts.map +1 -0
  34. package/dist/lib/hooks-seed/types.js +20 -0
  35. package/dist/lib/hooks-seed/types.js.map +1 -0
  36. package/dist/lib/init/app.d.ts +21 -0
  37. package/dist/lib/init/app.d.ts.map +1 -0
  38. package/dist/lib/init/app.js +132 -0
  39. package/dist/lib/init/app.js.map +1 -0
  40. package/dist/lib/init/ci-workflow.d.ts +29 -0
  41. package/dist/lib/init/ci-workflow.d.ts.map +1 -0
  42. package/dist/lib/init/ci-workflow.js +78 -0
  43. package/dist/lib/init/ci-workflow.js.map +1 -0
  44. package/dist/lib/init/claude-md.d.ts +19 -0
  45. package/dist/lib/init/claude-md.d.ts.map +1 -0
  46. package/dist/lib/init/claude-md.js +140 -0
  47. package/dist/lib/init/claude-md.js.map +1 -0
  48. package/dist/lib/init/index.d.ts +33 -0
  49. package/dist/lib/init/index.d.ts.map +1 -0
  50. package/dist/lib/init/index.js +232 -0
  51. package/dist/lib/init/index.js.map +1 -0
  52. package/dist/lib/init/integration.d.ts +53 -0
  53. package/dist/lib/init/integration.d.ts.map +1 -0
  54. package/dist/lib/init/integration.js +237 -0
  55. package/dist/lib/init/integration.js.map +1 -0
  56. package/dist/lib/init/platform.d.ts +26 -0
  57. package/dist/lib/init/platform.d.ts.map +1 -0
  58. package/dist/lib/init/platform.js +188 -0
  59. package/dist/lib/init/platform.js.map +1 -0
  60. package/dist/lib/list/discover.d.ts +8 -0
  61. package/dist/lib/list/discover.d.ts.map +1 -0
  62. package/dist/lib/list/discover.js +77 -0
  63. package/dist/lib/list/discover.js.map +1 -0
  64. package/dist/lib/list/format.d.ts +9 -0
  65. package/dist/lib/list/format.d.ts.map +1 -0
  66. package/dist/lib/list/format.js +44 -0
  67. package/dist/lib/list/format.js.map +1 -0
  68. package/dist/lib/list/index.d.ts +12 -0
  69. package/dist/lib/list/index.d.ts.map +1 -0
  70. package/dist/lib/list/index.js +15 -0
  71. package/dist/lib/list/index.js.map +1 -0
  72. package/dist/lib/lock-file.d.ts +14 -0
  73. package/dist/lib/lock-file.d.ts.map +1 -0
  74. package/dist/lib/lock-file.js +80 -0
  75. package/dist/lib/lock-file.js.map +1 -0
  76. package/dist/lib/mcp/build-info.d.ts +9 -0
  77. package/dist/lib/mcp/build-info.d.ts.map +1 -0
  78. package/dist/lib/mcp/build-info.js +10 -0
  79. package/dist/lib/mcp/build-info.js.map +1 -0
  80. package/dist/lib/mcp/errors.d.ts +23 -0
  81. package/dist/lib/mcp/errors.d.ts.map +1 -0
  82. package/dist/lib/mcp/errors.js +25 -0
  83. package/dist/lib/mcp/errors.js.map +1 -0
  84. package/dist/lib/mcp/parse/frontmatter.d.ts +22 -0
  85. package/dist/lib/mcp/parse/frontmatter.d.ts.map +1 -0
  86. package/dist/lib/mcp/parse/frontmatter.js +49 -0
  87. package/dist/lib/mcp/parse/frontmatter.js.map +1 -0
  88. package/dist/lib/mcp/parse/gate-registry.d.ts +19 -0
  89. package/dist/lib/mcp/parse/gate-registry.d.ts.map +1 -0
  90. package/dist/lib/mcp/parse/gate-registry.js +68 -0
  91. package/dist/lib/mcp/parse/gate-registry.js.map +1 -0
  92. package/dist/lib/mcp/parse/paths.d.ts +21 -0
  93. package/dist/lib/mcp/parse/paths.d.ts.map +1 -0
  94. package/dist/lib/mcp/parse/paths.js +83 -0
  95. package/dist/lib/mcp/parse/paths.js.map +1 -0
  96. package/dist/lib/mcp/pin/errors.d.ts +11 -0
  97. package/dist/lib/mcp/pin/errors.d.ts.map +1 -0
  98. package/dist/lib/mcp/pin/errors.js +32 -0
  99. package/dist/lib/mcp/pin/errors.js.map +1 -0
  100. package/dist/lib/mcp/pin/index.d.ts +18 -0
  101. package/dist/lib/mcp/pin/index.d.ts.map +1 -0
  102. package/dist/lib/mcp/pin/index.js +29 -0
  103. package/dist/lib/mcp/pin/index.js.map +1 -0
  104. package/dist/lib/mcp/pin/read.d.ts +24 -0
  105. package/dist/lib/mcp/pin/read.d.ts.map +1 -0
  106. package/dist/lib/mcp/pin/read.js +64 -0
  107. package/dist/lib/mcp/pin/read.js.map +1 -0
  108. package/dist/lib/mcp/pin/resolve.d.ts +12 -0
  109. package/dist/lib/mcp/pin/resolve.d.ts.map +1 -0
  110. package/dist/lib/mcp/pin/resolve.js +33 -0
  111. package/dist/lib/mcp/pin/resolve.js.map +1 -0
  112. package/dist/lib/mcp/prompts/evaluate-cascade.d.ts +14 -0
  113. package/dist/lib/mcp/prompts/evaluate-cascade.d.ts.map +1 -0
  114. package/dist/lib/mcp/prompts/evaluate-cascade.js +147 -0
  115. package/dist/lib/mcp/prompts/evaluate-cascade.js.map +1 -0
  116. package/dist/lib/mcp/prompts/index.d.ts +9 -0
  117. package/dist/lib/mcp/prompts/index.d.ts.map +1 -0
  118. package/dist/lib/mcp/prompts/index.js +23 -0
  119. package/dist/lib/mcp/prompts/index.js.map +1 -0
  120. package/dist/lib/mcp/prompts/propose-adr.d.ts +12 -0
  121. package/dist/lib/mcp/prompts/propose-adr.d.ts.map +1 -0
  122. package/dist/lib/mcp/prompts/propose-adr.js +94 -0
  123. package/dist/lib/mcp/prompts/propose-adr.js.map +1 -0
  124. package/dist/lib/mcp/prompts/review-data-model-change.d.ts +10 -0
  125. package/dist/lib/mcp/prompts/review-data-model-change.d.ts.map +1 -0
  126. package/dist/lib/mcp/prompts/review-data-model-change.js +134 -0
  127. package/dist/lib/mcp/prompts/review-data-model-change.js.map +1 -0
  128. package/dist/lib/mcp/prompts/template-loader.d.ts +29 -0
  129. package/dist/lib/mcp/prompts/template-loader.d.ts.map +1 -0
  130. package/dist/lib/mcp/prompts/template-loader.js +44 -0
  131. package/dist/lib/mcp/prompts/template-loader.js.map +1 -0
  132. package/dist/lib/mcp/prompts/types.d.ts +17 -0
  133. package/dist/lib/mcp/prompts/types.d.ts.map +1 -0
  134. package/dist/lib/mcp/prompts/types.js +10 -0
  135. package/dist/lib/mcp/prompts/types.js.map +1 -0
  136. package/dist/lib/mcp/prompts/write-capability-spec.d.ts +8 -0
  137. package/dist/lib/mcp/prompts/write-capability-spec.d.ts.map +1 -0
  138. package/dist/lib/mcp/prompts/write-capability-spec.js +85 -0
  139. package/dist/lib/mcp/prompts/write-capability-spec.js.map +1 -0
  140. package/dist/lib/mcp/prompts/write-feature-spec.d.ts +10 -0
  141. package/dist/lib/mcp/prompts/write-feature-spec.d.ts.map +1 -0
  142. package/dist/lib/mcp/prompts/write-feature-spec.js +94 -0
  143. package/dist/lib/mcp/prompts/write-feature-spec.js.map +1 -0
  144. package/dist/lib/mcp/prompts/write-work-order.d.ts +7 -0
  145. package/dist/lib/mcp/prompts/write-work-order.d.ts.map +1 -0
  146. package/dist/lib/mcp/prompts/write-work-order.js +69 -0
  147. package/dist/lib/mcp/prompts/write-work-order.js.map +1 -0
  148. package/dist/lib/mcp/reader.d.ts +37 -0
  149. package/dist/lib/mcp/reader.d.ts.map +1 -0
  150. package/dist/lib/mcp/reader.js +93 -0
  151. package/dist/lib/mcp/reader.js.map +1 -0
  152. package/dist/lib/mcp/resources/adrs.d.ts +3 -0
  153. package/dist/lib/mcp/resources/adrs.d.ts.map +1 -0
  154. package/dist/lib/mcp/resources/adrs.js +97 -0
  155. package/dist/lib/mcp/resources/adrs.js.map +1 -0
  156. package/dist/lib/mcp/resources/data-models.d.ts +14 -0
  157. package/dist/lib/mcp/resources/data-models.d.ts.map +1 -0
  158. package/dist/lib/mcp/resources/data-models.js +81 -0
  159. package/dist/lib/mcp/resources/data-models.js.map +1 -0
  160. package/dist/lib/mcp/resources/gates.d.ts +9 -0
  161. package/dist/lib/mcp/resources/gates.d.ts.map +1 -0
  162. package/dist/lib/mcp/resources/gates.js +90 -0
  163. package/dist/lib/mcp/resources/gates.js.map +1 -0
  164. package/dist/lib/mcp/resources/glossary.d.ts +16 -0
  165. package/dist/lib/mcp/resources/glossary.d.ts.map +1 -0
  166. package/dist/lib/mcp/resources/glossary.js +87 -0
  167. package/dist/lib/mcp/resources/glossary.js.map +1 -0
  168. package/dist/lib/mcp/resources/specs.d.ts +23 -0
  169. package/dist/lib/mcp/resources/specs.d.ts.map +1 -0
  170. package/dist/lib/mcp/resources/specs.js +151 -0
  171. package/dist/lib/mcp/resources/specs.js.map +1 -0
  172. package/dist/lib/mcp/resources/version.d.ts +3 -0
  173. package/dist/lib/mcp/resources/version.d.ts.map +1 -0
  174. package/dist/lib/mcp/resources/version.js +45 -0
  175. package/dist/lib/mcp/resources/version.js.map +1 -0
  176. package/dist/lib/mcp/server.d.ts +29 -0
  177. package/dist/lib/mcp/server.d.ts.map +1 -0
  178. package/dist/lib/mcp/server.js +104 -0
  179. package/dist/lib/mcp/server.js.map +1 -0
  180. package/dist/lib/mcp/tools/cascade-impact.d.ts +22 -0
  181. package/dist/lib/mcp/tools/cascade-impact.d.ts.map +1 -0
  182. package/dist/lib/mcp/tools/cascade-impact.js +53 -0
  183. package/dist/lib/mcp/tools/cascade-impact.js.map +1 -0
  184. package/dist/lib/mcp/tools/find-consumers-of-contract.d.ts +7 -0
  185. package/dist/lib/mcp/tools/find-consumers-of-contract.d.ts.map +1 -0
  186. package/dist/lib/mcp/tools/find-consumers-of-contract.js +70 -0
  187. package/dist/lib/mcp/tools/find-consumers-of-contract.js.map +1 -0
  188. package/dist/lib/mcp/tools/find-consumers.d.ts +7 -0
  189. package/dist/lib/mcp/tools/find-consumers.d.ts.map +1 -0
  190. package/dist/lib/mcp/tools/find-consumers.js +52 -0
  191. package/dist/lib/mcp/tools/find-consumers.js.map +1 -0
  192. package/dist/lib/mcp/tools/find-dependencies.d.ts +8 -0
  193. package/dist/lib/mcp/tools/find-dependencies.d.ts.map +1 -0
  194. package/dist/lib/mcp/tools/find-dependencies.js +89 -0
  195. package/dist/lib/mcp/tools/find-dependencies.js.map +1 -0
  196. package/dist/lib/mcp/tools/find-dependents.d.ts +8 -0
  197. package/dist/lib/mcp/tools/find-dependents.d.ts.map +1 -0
  198. package/dist/lib/mcp/tools/find-dependents.js +89 -0
  199. package/dist/lib/mcp/tools/find-dependents.js.map +1 -0
  200. package/dist/lib/mcp/tools/find-producers.d.ts +8 -0
  201. package/dist/lib/mcp/tools/find-producers.d.ts.map +1 -0
  202. package/dist/lib/mcp/tools/find-producers.js +57 -0
  203. package/dist/lib/mcp/tools/find-producers.js.map +1 -0
  204. package/dist/lib/mcp/tools/find-related-specs.d.ts +9 -0
  205. package/dist/lib/mcp/tools/find-related-specs.d.ts.map +1 -0
  206. package/dist/lib/mcp/tools/find-related-specs.js +92 -0
  207. package/dist/lib/mcp/tools/find-related-specs.js.map +1 -0
  208. package/dist/lib/mcp/tools/list-adrs.d.ts +3 -0
  209. package/dist/lib/mcp/tools/list-adrs.d.ts.map +1 -0
  210. package/dist/lib/mcp/tools/list-adrs.js +73 -0
  211. package/dist/lib/mcp/tools/list-adrs.js.map +1 -0
  212. package/dist/lib/mcp/tools/query-gate-status.d.ts +3 -0
  213. package/dist/lib/mcp/tools/query-gate-status.d.ts.map +1 -0
  214. package/dist/lib/mcp/tools/query-gate-status.js +82 -0
  215. package/dist/lib/mcp/tools/query-gate-status.js.map +1 -0
  216. package/dist/lib/mcp/tools/search-specs.d.ts +12 -0
  217. package/dist/lib/mcp/tools/search-specs.d.ts.map +1 -0
  218. package/dist/lib/mcp/tools/search-specs.js +151 -0
  219. package/dist/lib/mcp/tools/search-specs.js.map +1 -0
  220. package/dist/lib/mcp/workspace.d.ts +25 -0
  221. package/dist/lib/mcp/workspace.d.ts.map +1 -0
  222. package/dist/lib/mcp/workspace.js +129 -0
  223. package/dist/lib/mcp/workspace.js.map +1 -0
  224. package/dist/lib/mcp-seed/entries.d.ts +19 -0
  225. package/dist/lib/mcp-seed/entries.d.ts.map +1 -0
  226. package/dist/lib/mcp-seed/entries.js +14 -0
  227. package/dist/lib/mcp-seed/entries.js.map +1 -0
  228. package/dist/lib/mcp-seed/index.d.ts +36 -0
  229. package/dist/lib/mcp-seed/index.d.ts.map +1 -0
  230. package/dist/lib/mcp-seed/index.js +28 -0
  231. package/dist/lib/mcp-seed/index.js.map +1 -0
  232. package/dist/lib/mcp-seed/merge.d.ts +34 -0
  233. package/dist/lib/mcp-seed/merge.d.ts.map +1 -0
  234. package/dist/lib/mcp-seed/merge.js +99 -0
  235. package/dist/lib/mcp-seed/merge.js.map +1 -0
  236. package/dist/lib/mcp-seed/types.d.ts +24 -0
  237. package/dist/lib/mcp-seed/types.d.ts.map +1 -0
  238. package/dist/lib/mcp-seed/types.js +13 -0
  239. package/dist/lib/mcp-seed/types.js.map +1 -0
  240. package/dist/lib/plan/index.d.ts +19 -0
  241. package/dist/lib/plan/index.d.ts.map +1 -0
  242. package/dist/lib/plan/index.js +69 -0
  243. package/dist/lib/plan/index.js.map +1 -0
  244. package/dist/lib/plan/read-sdd.d.ts +46 -0
  245. package/dist/lib/plan/read-sdd.d.ts.map +1 -0
  246. package/dist/lib/plan/read-sdd.js +102 -0
  247. package/dist/lib/plan/read-sdd.js.map +1 -0
  248. package/dist/lib/plan/render-template.d.ts +8 -0
  249. package/dist/lib/plan/render-template.d.ts.map +1 -0
  250. package/dist/lib/plan/render-template.js +60 -0
  251. package/dist/lib/plan/render-template.js.map +1 -0
  252. package/dist/lib/repo-kind.d.ts +20 -0
  253. package/dist/lib/repo-kind.d.ts.map +1 -0
  254. package/dist/lib/repo-kind.js +73 -0
  255. package/dist/lib/repo-kind.js.map +1 -0
  256. package/dist/lib/scripts.d.ts +2 -0
  257. package/dist/lib/scripts.d.ts.map +1 -0
  258. package/dist/lib/scripts.js +7 -0
  259. package/dist/lib/scripts.js.map +1 -0
  260. package/dist/lib/sdd-index/cascade.d.ts +46 -0
  261. package/dist/lib/sdd-index/cascade.d.ts.map +1 -0
  262. package/dist/lib/sdd-index/cascade.js +91 -0
  263. package/dist/lib/sdd-index/cascade.js.map +1 -0
  264. package/dist/lib/sdd-index/contracts.d.ts +29 -0
  265. package/dist/lib/sdd-index/contracts.d.ts.map +1 -0
  266. package/dist/lib/sdd-index/contracts.js +216 -0
  267. package/dist/lib/sdd-index/contracts.js.map +1 -0
  268. package/dist/lib/sdd-index/data-model.d.ts +13 -0
  269. package/dist/lib/sdd-index/data-model.d.ts.map +1 -0
  270. package/dist/lib/sdd-index/data-model.js +23 -0
  271. package/dist/lib/sdd-index/data-model.js.map +1 -0
  272. package/dist/lib/sdd-index/execution-map.d.ts +34 -0
  273. package/dist/lib/sdd-index/execution-map.d.ts.map +1 -0
  274. package/dist/lib/sdd-index/execution-map.js +105 -0
  275. package/dist/lib/sdd-index/execution-map.js.map +1 -0
  276. package/dist/lib/sdd-index/graph.d.ts +28 -0
  277. package/dist/lib/sdd-index/graph.d.ts.map +1 -0
  278. package/dist/lib/sdd-index/graph.js +122 -0
  279. package/dist/lib/sdd-index/graph.js.map +1 -0
  280. package/dist/lib/sdd-index/index.d.ts +29 -0
  281. package/dist/lib/sdd-index/index.d.ts.map +1 -0
  282. package/dist/lib/sdd-index/index.js +79 -0
  283. package/dist/lib/sdd-index/index.js.map +1 -0
  284. package/dist/lib/sdd-index/repo-config.d.ts +23 -0
  285. package/dist/lib/sdd-index/repo-config.d.ts.map +1 -0
  286. package/dist/lib/sdd-index/repo-config.js +150 -0
  287. package/dist/lib/sdd-index/repo-config.js.map +1 -0
  288. package/dist/lib/sdd-index/types.d.ts +106 -0
  289. package/dist/lib/sdd-index/types.d.ts.map +1 -0
  290. package/dist/lib/sdd-index/types.js +13 -0
  291. package/dist/lib/sdd-index/types.js.map +1 -0
  292. package/dist/lib/sdd-index/watch.d.ts +24 -0
  293. package/dist/lib/sdd-index/watch.d.ts.map +1 -0
  294. package/dist/lib/sdd-index/watch.js +112 -0
  295. package/dist/lib/sdd-index/watch.js.map +1 -0
  296. package/dist/lib/spawn.d.ts +8 -0
  297. package/dist/lib/spawn.d.ts.map +1 -0
  298. package/dist/lib/spawn.js +16 -0
  299. package/dist/lib/spawn.js.map +1 -0
  300. package/dist/lib/sync/apply.d.ts +3 -0
  301. package/dist/lib/sync/apply.d.ts.map +1 -0
  302. package/dist/lib/sync/apply.js +16 -0
  303. package/dist/lib/sync/apply.js.map +1 -0
  304. package/dist/lib/sync/diff.d.ts +8 -0
  305. package/dist/lib/sync/diff.d.ts.map +1 -0
  306. package/dist/lib/sync/diff.js +48 -0
  307. package/dist/lib/sync/diff.js.map +1 -0
  308. package/dist/lib/sync/index.d.ts +17 -0
  309. package/dist/lib/sync/index.d.ts.map +1 -0
  310. package/dist/lib/sync/index.js +184 -0
  311. package/dist/lib/sync/index.js.map +1 -0
  312. package/dist/lib/sync/settings-merge.d.ts +45 -0
  313. package/dist/lib/sync/settings-merge.d.ts.map +1 -0
  314. package/dist/lib/sync/settings-merge.js +109 -0
  315. package/dist/lib/sync/settings-merge.js.map +1 -0
  316. package/dist/lib/sync/source-tag.d.ts +5 -0
  317. package/dist/lib/sync/source-tag.d.ts.map +1 -0
  318. package/dist/lib/sync/source-tag.js +34 -0
  319. package/dist/lib/sync/source-tag.js.map +1 -0
  320. package/dist/lib/sync/yaml-block-merge.d.ts +50 -0
  321. package/dist/lib/sync/yaml-block-merge.d.ts.map +1 -0
  322. package/dist/lib/sync/yaml-block-merge.js +113 -0
  323. package/dist/lib/sync/yaml-block-merge.js.map +1 -0
  324. package/dist/lib/validate/aggregate.d.ts +13 -0
  325. package/dist/lib/validate/aggregate.d.ts.map +1 -0
  326. package/dist/lib/validate/aggregate.js +35 -0
  327. package/dist/lib/validate/aggregate.js.map +1 -0
  328. package/dist/lib/validate/dispatch.d.ts +34 -0
  329. package/dist/lib/validate/dispatch.d.ts.map +1 -0
  330. package/dist/lib/validate/dispatch.js +167 -0
  331. package/dist/lib/validate/dispatch.js.map +1 -0
  332. package/dist/lib/validate/index.d.ts +13 -0
  333. package/dist/lib/validate/index.d.ts.map +1 -0
  334. package/dist/lib/validate/index.js +69 -0
  335. package/dist/lib/validate/index.js.map +1 -0
  336. package/dist/lib/validate/runner.d.ts +16 -0
  337. package/dist/lib/validate/runner.d.ts.map +1 -0
  338. package/dist/lib/validate/runner.js +66 -0
  339. package/dist/lib/validate/runner.js.map +1 -0
  340. package/dist/verbs/generate-claude-md.d.ts +3 -0
  341. package/dist/verbs/generate-claude-md.d.ts.map +1 -0
  342. package/dist/verbs/generate-claude-md.js +36 -0
  343. package/dist/verbs/generate-claude-md.js.map +1 -0
  344. package/dist/verbs/init.d.ts +3 -0
  345. package/dist/verbs/init.d.ts.map +1 -0
  346. package/dist/verbs/init.js +90 -0
  347. package/dist/verbs/init.js.map +1 -0
  348. package/dist/verbs/list.d.ts +3 -0
  349. package/dist/verbs/list.d.ts.map +1 -0
  350. package/dist/verbs/list.js +43 -0
  351. package/dist/verbs/list.js.map +1 -0
  352. package/dist/verbs/mcp.d.ts +3 -0
  353. package/dist/verbs/mcp.d.ts.map +1 -0
  354. package/dist/verbs/mcp.js +22 -0
  355. package/dist/verbs/mcp.js.map +1 -0
  356. package/dist/verbs/plan.d.ts +3 -0
  357. package/dist/verbs/plan.d.ts.map +1 -0
  358. package/dist/verbs/plan.js +41 -0
  359. package/dist/verbs/plan.js.map +1 -0
  360. package/dist/verbs/sync.d.ts +3 -0
  361. package/dist/verbs/sync.d.ts.map +1 -0
  362. package/dist/verbs/sync.js +27 -0
  363. package/dist/verbs/sync.js.map +1 -0
  364. package/dist/verbs/validate.d.ts +3 -0
  365. package/dist/verbs/validate.d.ts.map +1 -0
  366. package/dist/verbs/validate.js +21 -0
  367. package/dist/verbs/validate.js.map +1 -0
  368. package/package.json +61 -0
  369. package/scripts/README.md +48 -0
  370. package/scripts/sync-method-baseline.sh +258 -0
  371. package/scripts/validate-app-dependencies.sh +289 -0
  372. package/scripts/validate-app-docs.sh +185 -0
  373. package/scripts/validate-integration-docs.sh +222 -0
@@ -0,0 +1,45 @@
1
+ import { readFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { DISTRIBUTION, MCP_PROTOCOL_SPEC_VERSION, SERVER_VERSION, } from "../build-info.js";
4
+ export function register(server, sddRoot) {
5
+ server.registerResource("method-version", "sdd://method/version", {
6
+ title: "Method version",
7
+ description: "Method distribution version, server build, SDD commit, and MCP protocol spec version. Clients read this at session start to detect mismatches.",
8
+ mimeType: "application/json",
9
+ }, async () => {
10
+ const payload = {
11
+ method_version: SERVER_VERSION,
12
+ distribution: DISTRIBUTION,
13
+ server_build: new Date().toISOString(),
14
+ sdd_repo_commit: await readHeadCommit(sddRoot),
15
+ protocol: {
16
+ name: "mcp",
17
+ spec_version: MCP_PROTOCOL_SPEC_VERSION,
18
+ },
19
+ };
20
+ return {
21
+ contents: [
22
+ {
23
+ uri: "sdd://method/version",
24
+ mimeType: "application/json",
25
+ text: JSON.stringify(payload, null, 2),
26
+ },
27
+ ],
28
+ };
29
+ });
30
+ }
31
+ async function readHeadCommit(sddRoot) {
32
+ try {
33
+ const headRef = (await readFile(join(sddRoot, ".git", "HEAD"), "utf8")).trim();
34
+ if (headRef.startsWith("ref: ")) {
35
+ const refPath = headRef.slice("ref: ".length);
36
+ const sha = (await readFile(join(sddRoot, ".git", refPath), "utf8")).trim();
37
+ return sha || null;
38
+ }
39
+ return headRef || null;
40
+ }
41
+ catch {
42
+ return null;
43
+ }
44
+ }
45
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../../../src/lib/mcp/resources/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EACL,YAAY,EACZ,yBAAyB,EACzB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAE1B,MAAM,UAAU,QAAQ,CAAC,MAAiB,EAAE,OAAe;IACzD,MAAM,CAAC,gBAAgB,CACrB,gBAAgB,EAChB,sBAAsB,EACtB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,gJAAgJ;QAClJ,QAAQ,EAAE,kBAAkB;KAC7B,EACD,KAAK,IAAI,EAAE;QACT,MAAM,OAAO,GAAG;YACd,cAAc,EAAE,cAAc;YAC9B,YAAY,EAAE,YAAY;YAC1B,YAAY,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACtC,eAAe,EAAE,MAAM,cAAc,CAAC,OAAO,CAAC;YAC9C,QAAQ,EAAE;gBACR,IAAI,EAAE,KAAK;gBACX,YAAY,EAAE,yBAAyB;aACxC;SACF,CAAC;QACF,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,GAAG,EAAE,sBAAsB;oBAC3B,QAAQ,EAAE,kBAAkB;oBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;iBACvC;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,OAAe;IAC3C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,CACd,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CACtD,CAAC,IAAI,EAAE,CAAC;QACT,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC9C,MAAM,GAAG,GAAG,CACV,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,CACvD,CAAC,IAAI,EAAE,CAAC;YACT,OAAO,GAAG,IAAI,IAAI,CAAC;QACrB,CAAC;QACD,OAAO,OAAO,IAAI,IAAI,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * sdd-mcp server lifecycle: construct the McpServer, register the
3
+ * minimum Phase 1 surface, wire stdio transport, and wait for the host
4
+ * to close the connection.
5
+ *
6
+ * Logging discipline: NEVER write to stdout in this module or anything
7
+ * it calls. stdout is the MCP protocol channel; any non-protocol byte
8
+ * corrupts the wire. Use stderr for diagnostics.
9
+ */
10
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
11
+ export interface RunMcpServeOptions {
12
+ readonly cwd?: string;
13
+ readonly sddRepo?: string;
14
+ readonly env?: NodeJS.ProcessEnv;
15
+ /**
16
+ * Connect the server and return immediately instead of waiting for
17
+ * the transport to close. Used by the integration tests, which
18
+ * attach their own in-memory transports and drive the server
19
+ * programmatically.
20
+ */
21
+ readonly testMode?: boolean;
22
+ }
23
+ export interface RunMcpServeResult {
24
+ readonly server: McpServer;
25
+ /** Resolved SDD absolute path. */
26
+ readonly sddRepoPath: string;
27
+ }
28
+ export declare function runMcpServe(opts?: RunMcpServeOptions): Promise<RunMcpServeResult>;
29
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/lib/mcp/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA0BpE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACjC;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,kCAAkC;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,wBAAsB,WAAW,CAC/B,IAAI,GAAE,kBAAuB,GAC5B,OAAO,CAAC,iBAAiB,CAAC,CAsF5B"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * sdd-mcp server lifecycle: construct the McpServer, register the
3
+ * minimum Phase 1 surface, wire stdio transport, and wait for the host
4
+ * to close the connection.
5
+ *
6
+ * Logging discipline: NEVER write to stdout in this module or anything
7
+ * it calls. stdout is the MCP protocol channel; any non-protocol byte
8
+ * corrupts the wire. Use stderr for diagnostics.
9
+ */
10
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
11
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
12
+ import { SERVER_VERSION } from "./build-info.js";
13
+ import { envelopeFromUnknown } from "./errors.js";
14
+ import { register as registerAdrs } from "./resources/adrs.js";
15
+ import { register as registerDataModels } from "./resources/data-models.js";
16
+ import { register as registerGates } from "./resources/gates.js";
17
+ import { register as registerGlossary } from "./resources/glossary.js";
18
+ import { register as registerSpecs } from "./resources/specs.js";
19
+ import { register as registerVersion } from "./resources/version.js";
20
+ import { register as registerCascadeImpact } from "./tools/cascade-impact.js";
21
+ import { register as registerFindConsumers } from "./tools/find-consumers.js";
22
+ import { register as registerFindConsumersOfContract } from "./tools/find-consumers-of-contract.js";
23
+ import { register as registerFindDependencies } from "./tools/find-dependencies.js";
24
+ import { register as registerFindDependents } from "./tools/find-dependents.js";
25
+ import { register as registerFindProducers } from "./tools/find-producers.js";
26
+ import { register as registerFindRelatedSpecs } from "./tools/find-related-specs.js";
27
+ import { register as registerListAdrs } from "./tools/list-adrs.js";
28
+ import { register as registerQueryGateStatus } from "./tools/query-gate-status.js";
29
+ import { register as registerSearchSpecs } from "./tools/search-specs.js";
30
+ import { registerAllPrompts } from "./prompts/index.js";
31
+ import { resolveSddRepo } from "./workspace.js";
32
+ import { shutdownPinSubsystem } from "./pin/index.js";
33
+ import { liveReader } from "./reader.js";
34
+ import { startIndexWatcher } from "../sdd-index/watch.js";
35
+ export async function runMcpServe(opts = {}) {
36
+ const env = opts.env ?? process.env;
37
+ const cwd = opts.cwd ?? process.cwd();
38
+ let sddRepoPath;
39
+ try {
40
+ const resolved = resolveSddRepo({
41
+ cwd,
42
+ env,
43
+ ...(opts.sddRepo ? { flagPath: opts.sddRepo } : {}),
44
+ });
45
+ sddRepoPath = resolved.path;
46
+ process.stderr.write(`[sdd-mcp] SDD repo resolved via ${resolved.source}: ${resolved.path}\n`);
47
+ }
48
+ catch (err) {
49
+ const envelope = envelopeFromUnknown(err);
50
+ process.stderr.write(`[sdd-mcp] fatal: ${envelope.code} — ${envelope.message}\n` +
51
+ `[sdd-mcp] remediation: ${envelope.remediation}\n`);
52
+ throw err;
53
+ }
54
+ const server = new McpServer({
55
+ name: "sdd-mcp",
56
+ version: SERVER_VERSION,
57
+ }, {
58
+ capabilities: {
59
+ resources: {},
60
+ tools: {},
61
+ prompts: {},
62
+ },
63
+ });
64
+ registerVersion(server, sddRepoPath);
65
+ registerAdrs(server, sddRepoPath);
66
+ registerSpecs(server, sddRepoPath);
67
+ registerDataModels(server, sddRepoPath);
68
+ registerGates(server, sddRepoPath);
69
+ registerGlossary(server, sddRepoPath);
70
+ registerListAdrs(server, sddRepoPath);
71
+ registerQueryGateStatus(server, sddRepoPath);
72
+ registerSearchSpecs(server, sddRepoPath);
73
+ registerFindRelatedSpecs(server, sddRepoPath);
74
+ registerFindConsumers(server, sddRepoPath);
75
+ registerFindProducers(server, sddRepoPath);
76
+ registerFindDependencies(server, sddRepoPath);
77
+ registerFindDependents(server, sddRepoPath);
78
+ registerFindConsumersOfContract(server, sddRepoPath);
79
+ registerCascadeImpact(server, sddRepoPath);
80
+ registerAllPrompts(server, sddRepoPath);
81
+ if (opts.testMode) {
82
+ return { server, sddRepoPath };
83
+ }
84
+ const watcher = startIndexWatcher(liveReader(sddRepoPath));
85
+ const transport = new StdioServerTransport();
86
+ await server.connect(transport);
87
+ // Wait until the host closes stdio. McpServer owns the transport
88
+ // lifecycle; when the parent exits or closes stdin, the transport
89
+ // fires onclose and this promise resolves.
90
+ await new Promise((resolveDone) => {
91
+ transport.onclose = () => {
92
+ resolveDone();
93
+ };
94
+ const onSignal = () => {
95
+ void server.close().finally(() => resolveDone());
96
+ };
97
+ process.once("SIGTERM", onSignal);
98
+ process.once("SIGINT", onSignal);
99
+ });
100
+ watcher.stop();
101
+ shutdownPinSubsystem();
102
+ return { server, sddRepoPath };
103
+ }
104
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/lib/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * cascade_impact — dry-run the cascade-update checklist for a
3
+ * proposed change. Thin wrapper around the shared library function
4
+ * in `src/lib/sdd-index/cascade.ts` so the Phase 5 `evaluate_cascade`
5
+ * prompt and this tool agree on behaviour.
6
+ *
7
+ * Per [ADR 0128] §4.5 this tool *reports* cascade status; it never
8
+ * enforces — enforcement stays with hooks and CI.
9
+ */
10
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
11
+ import { z } from "zod";
12
+ export declare const cascadeImpactArgsSchema: {
13
+ change_type: z.ZodEnum<{
14
+ capability: "capability";
15
+ service: "service";
16
+ entity: "entity";
17
+ }>;
18
+ target: z.ZodString;
19
+ pin_to_commit: z.ZodOptional<z.ZodString>;
20
+ };
21
+ export declare function register(server: McpServer, sddRoot: string): void;
22
+ //# sourceMappingURL=cascade-impact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cascade-impact.d.ts","sourceRoot":"","sources":["../../../../src/lib/mcp/tools/cascade-impact.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,uBAAuB;;;;;;;;CAkBnC,CAAC;AAEF,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CA6BjE"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * cascade_impact — dry-run the cascade-update checklist for a
3
+ * proposed change. Thin wrapper around the shared library function
4
+ * in `src/lib/sdd-index/cascade.ts` so the Phase 5 `evaluate_cascade`
5
+ * prompt and this tool agree on behaviour.
6
+ *
7
+ * Per [ADR 0128] §4.5 this tool *reports* cascade status; it never
8
+ * enforces — enforcement stays with hooks and CI.
9
+ */
10
+ import { z } from "zod";
11
+ import { McpEnvelopeError } from "../errors.js";
12
+ import { readerFor } from "../pin/index.js";
13
+ import { CascadeImpactError, runCascadeImpact, } from "../../sdd-index/cascade.js";
14
+ export const cascadeImpactArgsSchema = {
15
+ change_type: z
16
+ .enum(["service", "capability", "entity"])
17
+ .describe("What kind of thing is changing: a service, a capability, or a domain-model entity (aggregate/event)."),
18
+ target: z
19
+ .string()
20
+ .min(1)
21
+ .describe("Name of the changed artefact (service id, capability slug, or entity name)."),
22
+ pin_to_commit: z
23
+ .string()
24
+ .optional()
25
+ .describe("Optional commit SHA (or ref) to pin the SDD to. Executes the script against a git worktree at that commit."),
26
+ };
27
+ export function register(server, sddRoot) {
28
+ server.registerTool("cascade_impact", {
29
+ title: "Cascade impact dry-run",
30
+ description: "Wrap the adopter's orchestration/scripts/validate-cascade-completeness.sh to report which artefacts a proposed change would cascade through. Decorates script output with per-service metadata from the SDD index. Read-only.",
31
+ inputSchema: cascadeImpactArgsSchema,
32
+ }, async ({ change_type, target, pin_to_commit }) => {
33
+ const reader = readerFor(sddRoot, pin_to_commit);
34
+ try {
35
+ const payload = runCascadeImpact(reader, { change_type, target });
36
+ return {
37
+ content: [{ type: "text", text: JSON.stringify(payload, null, 2) }],
38
+ };
39
+ }
40
+ catch (err) {
41
+ if (err instanceof CascadeImpactError) {
42
+ throw new McpEnvelopeError({
43
+ code: err.code,
44
+ message: err.message,
45
+ remediation: err.remediation,
46
+ context: err.context,
47
+ });
48
+ }
49
+ throw err;
50
+ }
51
+ });
52
+ }
53
+ //# sourceMappingURL=cascade-impact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cascade-impact.js","sourceRoot":"","sources":["../../../../src/lib/mcp/tools/cascade-impact.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,WAAW,EAAE,CAAC;SACX,IAAI,CAAC,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;SACzC,QAAQ,CACP,sGAAsG,CACvG;IACH,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACP,6EAA6E,CAC9E;IACH,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,4GAA4G,CAC7G;CACJ,CAAC;AAEF,MAAM,UAAU,QAAQ,CAAC,MAAiB,EAAE,OAAe;IACzD,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EACT,+NAA+N;QACjO,WAAW,EAAE,uBAAuB;KACrC,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE;QAC/C,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACjD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;YAClE,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACpE,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,kBAAkB,EAAE,CAAC;gBACtC,MAAM,IAAI,gBAAgB,CAAC;oBACzB,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,OAAO,EAAE,GAAG,CAAC,OAAO;oBACpB,WAAW,EAAE,GAAG,CAAC,WAAW;oBAC5B,OAAO,EAAE,GAAG,CAAC,OAAO;iBACrB,CAAC,CAAC;YACL,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * find_consumers_of_contract — given a contract path (relative to the
3
+ * SDD root), return every service that pins it in their repo-config.
4
+ */
5
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
6
+ export declare function register(server: McpServer, sddRoot: string): void;
7
+ //# sourceMappingURL=find-consumers-of-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-consumers-of-contract.d.ts","sourceRoot":"","sources":["../../../../src/lib/mcp/tools/find-consumers-of-contract.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAqEjE"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * find_consumers_of_contract — given a contract path (relative to the
3
+ * SDD root), return every service that pins it in their repo-config.
4
+ */
5
+ import { z } from "zod";
6
+ import { McpEnvelopeError } from "../errors.js";
7
+ import { readerFor } from "../pin/index.js";
8
+ import { getSddIndex } from "../../sdd-index/index.js";
9
+ export function register(server, sddRoot) {
10
+ server.registerTool("find_consumers_of_contract", {
11
+ title: "Find consumers of contract",
12
+ description: "Given a contract path (relative to the SDD root), list every service that pins it, with their version range and stability class.",
13
+ inputSchema: {
14
+ contract_path: z
15
+ .string()
16
+ .min(1)
17
+ .describe("Contract path relative to the SDD root (e.g. 'contracts/party/party.events.v1.merged.avsc')."),
18
+ pin_to_commit: z
19
+ .string()
20
+ .optional()
21
+ .describe("Optional commit SHA (or ref) to pin the SDD to."),
22
+ },
23
+ }, async ({ contract_path, pin_to_commit }) => {
24
+ const reader = readerFor(sddRoot, pin_to_commit);
25
+ const index = getSddIndex(reader);
26
+ const node = index.contracts.get(contract_path);
27
+ if (!node) {
28
+ throw new McpEnvelopeError({
29
+ code: "CONTRACT_NOT_FOUND",
30
+ message: `No contract at '${contract_path}' found in the SDD index.`,
31
+ remediation: `The contract must be declared in at least one orchestration/repo-config/**/*.yaml file. Known contracts: ${Array.from(index.contracts.keys()).sort().join(", ") || "(none)"}.`,
32
+ context: {
33
+ contract_path,
34
+ known: Array.from(index.contracts.keys()).sort(),
35
+ },
36
+ });
37
+ }
38
+ const pinsForContract = index.pins.get(contract_path);
39
+ const consumers = node.consumers.map((id) => {
40
+ const svc = index.services.get(id);
41
+ const ref = svc?.contracts.find((c) => c.path === contract_path);
42
+ return {
43
+ service: id,
44
+ domain: svc?.domain ?? null,
45
+ version_pin: pinsForContract?.get(id) ?? ref?.version ?? null,
46
+ stability: ref?.stability ?? null,
47
+ package: ref?.package ?? null,
48
+ };
49
+ });
50
+ const payload = {
51
+ query: { contract_path },
52
+ contract: {
53
+ path: node.path,
54
+ kind: node.kind,
55
+ producers: node.producers,
56
+ produced_aggregates: node.producedAggregates,
57
+ produced_events: node.producedEvents,
58
+ },
59
+ consumers,
60
+ total: consumers.length,
61
+ pin_to_commit: reader.pin,
62
+ sources: [`sdd://contracts/${node.path}`],
63
+ metadata_incomplete: node.metadataIncomplete,
64
+ };
65
+ return {
66
+ content: [{ type: "text", text: JSON.stringify(payload, null, 2) }],
67
+ };
68
+ });
69
+ }
70
+ //# sourceMappingURL=find-consumers-of-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-consumers-of-contract.js","sourceRoot":"","sources":["../../../../src/lib/mcp/tools/find-consumers-of-contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * find_consumers — given an aggregate name or event name, return the
3
+ * services that consume it. Backed by the SDD index's `consumers` map.
4
+ */
5
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
6
+ export declare function register(server: McpServer, sddRoot: string): void;
7
+ //# sourceMappingURL=find-consumers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-consumers.d.ts","sourceRoot":"","sources":["../../../../src/lib/mcp/tools/find-consumers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CA6DjE"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * find_consumers — given an aggregate name or event name, return the
3
+ * services that consume it. Backed by the SDD index's `consumers` map.
4
+ */
5
+ import { z } from "zod";
6
+ import { readerFor } from "../pin/index.js";
7
+ import { getSddIndex } from "../../sdd-index/index.js";
8
+ export function register(server, sddRoot) {
9
+ server.registerTool("find_consumers", {
10
+ title: "Find consumers",
11
+ description: "Given an aggregate name or event name, return the services that consume it (via contract subscriptions declared in orchestration/repo-config/).",
12
+ inputSchema: {
13
+ target: z
14
+ .string()
15
+ .min(1)
16
+ .describe("Aggregate name (e.g. 'Party') or event name (e.g. 'PartyMerged' / 'party.mergedInto'). Case-sensitive."),
17
+ pin_to_commit: z
18
+ .string()
19
+ .optional()
20
+ .describe("Optional commit SHA (or ref) to pin the SDD to. Reads from a git worktree at that commit rather than the working tree."),
21
+ },
22
+ }, async ({ target, pin_to_commit }) => {
23
+ const reader = readerFor(sddRoot, pin_to_commit);
24
+ const index = getSddIndex(reader);
25
+ const consumers = index.consumers.get(target) ?? [];
26
+ const matches = consumers.map((serviceId) => {
27
+ const svc = index.services.get(serviceId);
28
+ const contracts = svc?.contracts ?? [];
29
+ const refMatching = contracts.find((c) => index.contracts.get(c.path)?.producedAggregates.includes(target) ||
30
+ index.contracts.get(c.path)?.producedEvents.includes(target));
31
+ return {
32
+ service: serviceId,
33
+ domain: svc?.domain ?? null,
34
+ contract_path: refMatching?.path ?? null,
35
+ version_pin: refMatching?.version ?? null,
36
+ stability: refMatching?.stability ?? null,
37
+ };
38
+ });
39
+ const payload = {
40
+ query: { target },
41
+ matches,
42
+ total: matches.length,
43
+ pin_to_commit: reader.pin,
44
+ sources: Array.from(new Set(matches.map((m) => m.contract_path).filter(Boolean))).map((p) => `sdd://contracts/${p}`),
45
+ metadata_incomplete: matches.some((m) => m.contract_path && !m.version_pin),
46
+ };
47
+ return {
48
+ content: [{ type: "text", text: JSON.stringify(payload, null, 2) }],
49
+ };
50
+ });
51
+ }
52
+ //# sourceMappingURL=find-consumers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-consumers.js","sourceRoot":"","sources":["../../../../src/lib/mcp/tools/find-consumers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,UAAU,QAAQ,CAAC,MAAiB,EAAE,OAAe;IACzD,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,iJAAiJ;QACnJ,WAAW,EAAE;YACX,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CACP,wGAAwG,CACzG;YACH,aAAa,EAAE,CAAC;iBACb,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,wHAAwH,CACzH;SACJ;KACF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,EAAE;QAClC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAEpD,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;YAC1C,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC1C,MAAM,SAAS,GAAG,GAAG,EAAE,SAAS,IAAI,EAAE,CAAC;YACvC,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAChC,CAAC,CAAC,EAAE,EAAE,CACJ,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAChE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,CAC/D,CAAC;YACF,OAAO;gBACL,OAAO,EAAE,SAAS;gBAClB,MAAM,EAAE,GAAG,EAAE,MAAM,IAAI,IAAI;gBAC3B,aAAa,EAAE,WAAW,EAAE,IAAI,IAAI,IAAI;gBACxC,WAAW,EAAE,WAAW,EAAE,OAAO,IAAI,IAAI;gBACzC,SAAS,EAAE,WAAW,EAAE,SAAS,IAAI,IAAI;aAC1C,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG;YACd,KAAK,EAAE,EAAE,MAAM,EAAE;YACjB,OAAO;YACP,KAAK,EAAE,OAAO,CAAC,MAAM;YACrB,aAAa,EAAE,MAAM,CAAC,GAAG;YACzB,OAAO,EAAE,KAAK,CAAC,IAAI,CACjB,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAC7D,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACpC,mBAAmB,EAAE,OAAO,CAAC,IAAI,CAC/B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,WAAW,CACzC;SACF,CAAC;QACF,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SACpE,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * find_dependencies — given a service name, return the upstream
3
+ * services, contracts, and execution-map dependency edges that this
4
+ * service relies on.
5
+ */
6
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
7
+ export declare function register(server: McpServer, sddRoot: string): void;
8
+ //# sourceMappingURL=find-dependencies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-dependencies.d.ts","sourceRoot":"","sources":["../../../../src/lib/mcp/tools/find-dependencies.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CA0FjE"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * find_dependencies — given a service name, return the upstream
3
+ * services, contracts, and execution-map dependency edges that this
4
+ * service relies on.
5
+ */
6
+ import { z } from "zod";
7
+ import { McpEnvelopeError } from "../errors.js";
8
+ import { readerFor } from "../pin/index.js";
9
+ import { getSddIndex } from "../../sdd-index/index.js";
10
+ export function register(server, sddRoot) {
11
+ server.registerTool("find_dependencies", {
12
+ title: "Find dependencies",
13
+ description: "List the upstream services, contracts, and execution-map edges a given service depends on (from orchestration/repo-config and docs/platform/execution-dependency-map.md).",
14
+ inputSchema: {
15
+ service: z
16
+ .string()
17
+ .min(1)
18
+ .describe("Service id (matches the repo-config `repo` field)."),
19
+ pin_to_commit: z
20
+ .string()
21
+ .optional()
22
+ .describe("Optional commit SHA (or ref) to pin the SDD to."),
23
+ },
24
+ }, async ({ service, pin_to_commit }) => {
25
+ const reader = readerFor(sddRoot, pin_to_commit);
26
+ const index = getSddIndex(reader);
27
+ const svc = index.services.get(service);
28
+ if (!svc) {
29
+ throw new McpEnvelopeError({
30
+ code: "SERVICE_NOT_FOUND",
31
+ message: `No service named '${service}' in the SDD index.`,
32
+ remediation: `Check spelling. Known services: ${Array.from(index.services.keys()).sort().join(", ") || "(none)"}.`,
33
+ context: {
34
+ service,
35
+ known: Array.from(index.services.keys()).sort(),
36
+ },
37
+ });
38
+ }
39
+ const serviceDeps = svc.internalDependencies.map((id) => {
40
+ const dep = index.services.get(id);
41
+ return {
42
+ service: id,
43
+ domain: dep?.domain ?? null,
44
+ kind: "internal",
45
+ };
46
+ });
47
+ const contractDeps = svc.contracts.map((ref) => {
48
+ const node = index.contracts.get(ref.path);
49
+ const isOwnProduction = node?.producers.includes(service) ?? false;
50
+ return {
51
+ path: ref.path,
52
+ kind: ref.kind,
53
+ role: isOwnProduction ? "produces" : "consumes",
54
+ package: ref.package ?? null,
55
+ version_pin: ref.version ?? null,
56
+ stability: ref.stability ?? null,
57
+ producer: node?.producers[0] ?? null,
58
+ };
59
+ });
60
+ const executionEdges = index.executionEdges
61
+ .filter((e) => e.from === service)
62
+ .map((e) => ({
63
+ to: e.to,
64
+ kind: e.kind,
65
+ note: e.note ?? null,
66
+ }));
67
+ const payload = {
68
+ query: { service },
69
+ service_domain: svc.domain,
70
+ dependencies: {
71
+ services: serviceDeps,
72
+ contracts: contractDeps,
73
+ execution_edges: executionEdges,
74
+ },
75
+ pin_to_commit: reader.pin,
76
+ sources: [
77
+ `sdd://repo-config/${svc.domain}/${service}`,
78
+ ...(index.executionEdges.length > 0
79
+ ? ["sdd://execution-dependency-map"]
80
+ : []),
81
+ ],
82
+ metadata_incomplete: contractDeps.some((c) => c.role === "consumes" && !c.producer),
83
+ };
84
+ return {
85
+ content: [{ type: "text", text: JSON.stringify(payload, null, 2) }],
86
+ };
87
+ });
88
+ }
89
+ //# sourceMappingURL=find-dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-dependencies.js","sourceRoot":"","sources":["../../../../src/lib/mcp/tools/find-dependencies.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * find_dependents — given a service name, return services downstream
3
+ * of it: those that name it as an internal dependency, consume a
4
+ * contract it produces, or have an execution-map edge pointing at it.
5
+ */
6
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
7
+ export declare function register(server: McpServer, sddRoot: string): void;
8
+ //# sourceMappingURL=find-dependents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-dependents.d.ts","sourceRoot":"","sources":["../../../../src/lib/mcp/tools/find-dependents.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAkGjE"}