@sdd-method/sdd-cli 1.43.0 → 1.44.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 (325) hide show
  1. package/NOTICE +1 -1
  2. package/README.md +13 -14
  3. package/dist/author-program.js +1 -1
  4. package/dist/author-program.js.map +1 -1
  5. package/dist/cli.js +0 -0
  6. package/dist/index.js +1 -1
  7. package/dist/index.js.map +1 -1
  8. package/dist/lib/catalogue/aggregate.js +6 -6
  9. package/dist/lib/catalogue/aggregate.js.map +1 -1
  10. package/dist/lib/catalogue/build.js +1 -1
  11. package/dist/lib/catalogue/build.js.map +1 -1
  12. package/dist/lib/catalogue/builders/c4-components.js +1 -1
  13. package/dist/lib/catalogue/builders/c4-components.js.map +1 -1
  14. package/dist/lib/catalogue/builders/c4-containers.d.ts +1 -1
  15. package/dist/lib/catalogue/builders/c4-containers.js +1 -1
  16. package/dist/lib/catalogue/builders/c4-l1-candidates.js +1 -1
  17. package/dist/lib/catalogue/builders/c4-l1-candidates.js.map +1 -1
  18. package/dist/lib/catalogue/builders/container-dependency.d.ts +1 -1
  19. package/dist/lib/catalogue/builders/container-dependency.js +1 -1
  20. package/dist/lib/catalogue/builders/data-store-mapping.js +1 -1
  21. package/dist/lib/catalogue/builders/data-store-mapping.js.map +1 -1
  22. package/dist/lib/catalogue/builders/screen-tree.d.ts +1 -1
  23. package/dist/lib/catalogue/builders/screen-tree.js +1 -1
  24. package/dist/lib/catalogue/contract-path-resolution.d.ts +2 -2
  25. package/dist/lib/catalogue/contract-path-resolution.js +2 -2
  26. package/dist/lib/catalogue/dedupe-keyed-tables.d.ts +1 -1
  27. package/dist/lib/catalogue/dedupe-keyed-tables.js +0 -0
  28. package/dist/lib/catalogue/dedupe-keyed-tables.js.map +1 -1
  29. package/dist/lib/catalogue/scores-coverage.js +1 -1
  30. package/dist/lib/catalogue/scores-coverage.js.map +1 -1
  31. package/dist/lib/catalogue/service-contract-aliases-loader.d.ts +1 -1
  32. package/dist/lib/catalogue/service-contract-aliases-loader.js +1 -1
  33. package/dist/lib/ci-binding/index.d.ts.map +1 -1
  34. package/dist/lib/ci-binding/index.js +44 -5
  35. package/dist/lib/ci-binding/index.js.map +1 -1
  36. package/dist/lib/ci-binding/module.d.ts +10 -0
  37. package/dist/lib/ci-binding/module.d.ts.map +1 -1
  38. package/dist/lib/ci-binding/module.js +74 -2
  39. package/dist/lib/ci-binding/module.js.map +1 -1
  40. package/dist/lib/hooks-seed/entries.d.ts +35 -11
  41. package/dist/lib/hooks-seed/entries.d.ts.map +1 -1
  42. package/dist/lib/hooks-seed/entries.js +43 -21
  43. package/dist/lib/hooks-seed/entries.js.map +1 -1
  44. package/dist/lib/hooks-seed/index.d.ts +2 -1
  45. package/dist/lib/hooks-seed/index.d.ts.map +1 -1
  46. package/dist/lib/hooks-seed/index.js +1 -1
  47. package/dist/lib/hooks-seed/index.js.map +1 -1
  48. package/dist/lib/init/ci-workflow.js +26 -2
  49. package/dist/lib/init/ci-workflow.js.map +1 -1
  50. package/dist/lib/init/platform.d.ts.map +1 -1
  51. package/dist/lib/init/platform.js +1 -0
  52. package/dist/lib/init/platform.js.map +1 -1
  53. package/dist/lib/lock-file.d.ts +7 -0
  54. package/dist/lib/lock-file.d.ts.map +1 -1
  55. package/dist/lib/lock-file.js +10 -0
  56. package/dist/lib/lock-file.js.map +1 -1
  57. package/dist/lib/pack/builder.d.ts +14 -0
  58. package/dist/lib/pack/builder.d.ts.map +1 -1
  59. package/dist/lib/pack/builder.js +56 -4
  60. package/dist/lib/pack/builder.js.map +1 -1
  61. package/dist/lib/pack/index.d.ts +3 -1
  62. package/dist/lib/pack/index.d.ts.map +1 -1
  63. package/dist/lib/pack/index.js +1 -0
  64. package/dist/lib/pack/index.js.map +1 -1
  65. package/dist/lib/pack/publish-transform.js +1 -1
  66. package/dist/lib/pack/publish-transform.js.map +1 -1
  67. package/dist/lib/snapshot/targets.js +1 -1
  68. package/dist/lib/snapshot/targets.js.map +1 -1
  69. package/dist/lib/sync/index.d.ts +11 -0
  70. package/dist/lib/sync/index.d.ts.map +1 -1
  71. package/dist/lib/sync/index.js +26 -2
  72. package/dist/lib/sync/index.js.map +1 -1
  73. package/dist/lib/sync/settings-merge.d.ts +3 -1
  74. package/dist/lib/sync/settings-merge.d.ts.map +1 -1
  75. package/dist/lib/sync/settings-merge.js +1 -1
  76. package/dist/lib/sync/settings-merge.js.map +1 -1
  77. package/dist/lib/validate/plan.d.ts +10 -1
  78. package/dist/lib/validate/plan.d.ts.map +1 -1
  79. package/dist/lib/validate/plan.js +6 -3
  80. package/dist/lib/validate/plan.js.map +1 -1
  81. package/dist/maintain-program.js +1 -1
  82. package/dist/maintain-program.js.map +1 -1
  83. package/dist/maintain-version.json +2 -2
  84. package/dist/verbs/pack-build.d.ts.map +1 -1
  85. package/dist/verbs/pack-build.js +22 -0
  86. package/dist/verbs/pack-build.js.map +1 -1
  87. package/dist/verbs/plan.js +1 -1
  88. package/dist/verbs/plan.js.map +1 -1
  89. package/dist/verbs/sync.d.ts.map +1 -1
  90. package/dist/verbs/sync.js +17 -0
  91. package/dist/verbs/sync.js.map +1 -1
  92. package/dist/verbs/validate.d.ts.map +1 -1
  93. package/dist/verbs/validate.js +6 -1
  94. package/dist/verbs/validate.js.map +1 -1
  95. package/dist/verify-program.js +1 -1
  96. package/dist/verify-program.js.map +1 -1
  97. package/dist/verify-version.json +2 -2
  98. package/package.json +2 -10
  99. package/scripts/README.md +1 -1
  100. package/scripts/author-version.json +2 -2
  101. package/scripts/maintain-acceptance.mjs +3 -2
  102. package/scripts/maintain-version.json +2 -2
  103. package/scripts/publish-release.mjs +117 -0
  104. package/scripts/release-gate.mjs +18 -7
  105. package/scripts/verify-version.json +2 -2
  106. package/dist/lib/catalogue/advisory-container-type.d.ts +0 -13
  107. package/dist/lib/catalogue/advisory-container-type.d.ts.map +0 -1
  108. package/dist/lib/catalogue/advisory-container-type.js +0 -56
  109. package/dist/lib/catalogue/advisory-container-type.js.map +0 -1
  110. package/dist/lib/hooks-seed/copilot.d.ts +0 -93
  111. package/dist/lib/hooks-seed/copilot.d.ts.map +0 -1
  112. package/dist/lib/hooks-seed/copilot.js +0 -167
  113. package/dist/lib/hooks-seed/copilot.js.map +0 -1
  114. package/dist/lib/hooks-seed/lifecycle-mapping.d.ts +0 -12
  115. package/dist/lib/hooks-seed/lifecycle-mapping.d.ts.map +0 -1
  116. package/dist/lib/hooks-seed/lifecycle-mapping.js +0 -28
  117. package/dist/lib/hooks-seed/lifecycle-mapping.js.map +0 -1
  118. package/dist/lib/mcp/build-info.d.ts +0 -7
  119. package/dist/lib/mcp/build-info.d.ts.map +0 -1
  120. package/dist/lib/mcp/build-info.js +0 -10
  121. package/dist/lib/mcp/build-info.js.map +0 -1
  122. package/dist/lib/mcp/errors.d.ts +0 -23
  123. package/dist/lib/mcp/errors.d.ts.map +0 -1
  124. package/dist/lib/mcp/errors.js +0 -25
  125. package/dist/lib/mcp/errors.js.map +0 -1
  126. package/dist/lib/mcp/parse/frontmatter.d.ts +0 -22
  127. package/dist/lib/mcp/parse/frontmatter.d.ts.map +0 -1
  128. package/dist/lib/mcp/parse/frontmatter.js +0 -49
  129. package/dist/lib/mcp/parse/frontmatter.js.map +0 -1
  130. package/dist/lib/mcp/parse/gate-registry.d.ts +0 -78
  131. package/dist/lib/mcp/parse/gate-registry.d.ts.map +0 -1
  132. package/dist/lib/mcp/parse/gate-registry.js +0 -164
  133. package/dist/lib/mcp/parse/gate-registry.js.map +0 -1
  134. package/dist/lib/mcp/parse/paths.d.ts +0 -21
  135. package/dist/lib/mcp/parse/paths.d.ts.map +0 -1
  136. package/dist/lib/mcp/parse/paths.js +0 -84
  137. package/dist/lib/mcp/parse/paths.js.map +0 -1
  138. package/dist/lib/mcp/pin/errors.d.ts +0 -11
  139. package/dist/lib/mcp/pin/errors.d.ts.map +0 -1
  140. package/dist/lib/mcp/pin/errors.js +0 -32
  141. package/dist/lib/mcp/pin/errors.js.map +0 -1
  142. package/dist/lib/mcp/pin/index.d.ts +0 -18
  143. package/dist/lib/mcp/pin/index.d.ts.map +0 -1
  144. package/dist/lib/mcp/pin/index.js +0 -29
  145. package/dist/lib/mcp/pin/index.js.map +0 -1
  146. package/dist/lib/mcp/pin/read.d.ts +0 -24
  147. package/dist/lib/mcp/pin/read.d.ts.map +0 -1
  148. package/dist/lib/mcp/pin/read.js +0 -64
  149. package/dist/lib/mcp/pin/read.js.map +0 -1
  150. package/dist/lib/mcp/pin/resolve.d.ts +0 -12
  151. package/dist/lib/mcp/pin/resolve.d.ts.map +0 -1
  152. package/dist/lib/mcp/pin/resolve.js +0 -33
  153. package/dist/lib/mcp/pin/resolve.js.map +0 -1
  154. package/dist/lib/mcp/prompts/evaluate-cascade.d.ts +0 -14
  155. package/dist/lib/mcp/prompts/evaluate-cascade.d.ts.map +0 -1
  156. package/dist/lib/mcp/prompts/evaluate-cascade.js +0 -147
  157. package/dist/lib/mcp/prompts/evaluate-cascade.js.map +0 -1
  158. package/dist/lib/mcp/prompts/index.d.ts +0 -9
  159. package/dist/lib/mcp/prompts/index.d.ts.map +0 -1
  160. package/dist/lib/mcp/prompts/index.js +0 -23
  161. package/dist/lib/mcp/prompts/index.js.map +0 -1
  162. package/dist/lib/mcp/prompts/propose-adr.d.ts +0 -12
  163. package/dist/lib/mcp/prompts/propose-adr.d.ts.map +0 -1
  164. package/dist/lib/mcp/prompts/propose-adr.js +0 -100
  165. package/dist/lib/mcp/prompts/propose-adr.js.map +0 -1
  166. package/dist/lib/mcp/prompts/review-data-model-change.d.ts +0 -10
  167. package/dist/lib/mcp/prompts/review-data-model-change.d.ts.map +0 -1
  168. package/dist/lib/mcp/prompts/review-data-model-change.js +0 -134
  169. package/dist/lib/mcp/prompts/review-data-model-change.js.map +0 -1
  170. package/dist/lib/mcp/prompts/template-loader.d.ts +0 -29
  171. package/dist/lib/mcp/prompts/template-loader.d.ts.map +0 -1
  172. package/dist/lib/mcp/prompts/template-loader.js +0 -44
  173. package/dist/lib/mcp/prompts/template-loader.js.map +0 -1
  174. package/dist/lib/mcp/prompts/types.d.ts +0 -17
  175. package/dist/lib/mcp/prompts/types.d.ts.map +0 -1
  176. package/dist/lib/mcp/prompts/types.js +0 -10
  177. package/dist/lib/mcp/prompts/types.js.map +0 -1
  178. package/dist/lib/mcp/prompts/write-capability-spec.d.ts +0 -8
  179. package/dist/lib/mcp/prompts/write-capability-spec.d.ts.map +0 -1
  180. package/dist/lib/mcp/prompts/write-capability-spec.js +0 -85
  181. package/dist/lib/mcp/prompts/write-capability-spec.js.map +0 -1
  182. package/dist/lib/mcp/prompts/write-feature-spec.d.ts +0 -10
  183. package/dist/lib/mcp/prompts/write-feature-spec.d.ts.map +0 -1
  184. package/dist/lib/mcp/prompts/write-feature-spec.js +0 -94
  185. package/dist/lib/mcp/prompts/write-feature-spec.js.map +0 -1
  186. package/dist/lib/mcp/prompts/write-work-order.d.ts +0 -7
  187. package/dist/lib/mcp/prompts/write-work-order.d.ts.map +0 -1
  188. package/dist/lib/mcp/prompts/write-work-order.js +0 -69
  189. package/dist/lib/mcp/prompts/write-work-order.js.map +0 -1
  190. package/dist/lib/mcp/reader.d.ts +0 -37
  191. package/dist/lib/mcp/reader.d.ts.map +0 -1
  192. package/dist/lib/mcp/reader.js +0 -93
  193. package/dist/lib/mcp/reader.js.map +0 -1
  194. package/dist/lib/mcp/resources/adrs.d.ts +0 -3
  195. package/dist/lib/mcp/resources/adrs.d.ts.map +0 -1
  196. package/dist/lib/mcp/resources/adrs.js +0 -97
  197. package/dist/lib/mcp/resources/adrs.js.map +0 -1
  198. package/dist/lib/mcp/resources/catalogue.d.ts +0 -19
  199. package/dist/lib/mcp/resources/catalogue.d.ts.map +0 -1
  200. package/dist/lib/mcp/resources/catalogue.js +0 -240
  201. package/dist/lib/mcp/resources/catalogue.js.map +0 -1
  202. package/dist/lib/mcp/resources/data-models.d.ts +0 -14
  203. package/dist/lib/mcp/resources/data-models.d.ts.map +0 -1
  204. package/dist/lib/mcp/resources/data-models.js +0 -81
  205. package/dist/lib/mcp/resources/data-models.js.map +0 -1
  206. package/dist/lib/mcp/resources/gates.d.ts +0 -9
  207. package/dist/lib/mcp/resources/gates.d.ts.map +0 -1
  208. package/dist/lib/mcp/resources/gates.js +0 -76
  209. package/dist/lib/mcp/resources/gates.js.map +0 -1
  210. package/dist/lib/mcp/resources/glossary.d.ts +0 -16
  211. package/dist/lib/mcp/resources/glossary.d.ts.map +0 -1
  212. package/dist/lib/mcp/resources/glossary.js +0 -87
  213. package/dist/lib/mcp/resources/glossary.js.map +0 -1
  214. package/dist/lib/mcp/resources/specs.d.ts +0 -23
  215. package/dist/lib/mcp/resources/specs.d.ts.map +0 -1
  216. package/dist/lib/mcp/resources/specs.js +0 -151
  217. package/dist/lib/mcp/resources/specs.js.map +0 -1
  218. package/dist/lib/mcp/resources/version.d.ts +0 -3
  219. package/dist/lib/mcp/resources/version.d.ts.map +0 -1
  220. package/dist/lib/mcp/resources/version.js +0 -45
  221. package/dist/lib/mcp/resources/version.js.map +0 -1
  222. package/dist/lib/mcp/server.d.ts +0 -29
  223. package/dist/lib/mcp/server.d.ts.map +0 -1
  224. package/dist/lib/mcp/server.js +0 -108
  225. package/dist/lib/mcp/server.js.map +0 -1
  226. package/dist/lib/mcp/tools/cascade-impact.d.ts +0 -22
  227. package/dist/lib/mcp/tools/cascade-impact.d.ts.map +0 -1
  228. package/dist/lib/mcp/tools/cascade-impact.js +0 -53
  229. package/dist/lib/mcp/tools/cascade-impact.js.map +0 -1
  230. package/dist/lib/mcp/tools/catalogue.d.ts +0 -16
  231. package/dist/lib/mcp/tools/catalogue.d.ts.map +0 -1
  232. package/dist/lib/mcp/tools/catalogue.js +0 -268
  233. package/dist/lib/mcp/tools/catalogue.js.map +0 -1
  234. package/dist/lib/mcp/tools/find-consumers-of-contract.d.ts +0 -7
  235. package/dist/lib/mcp/tools/find-consumers-of-contract.d.ts.map +0 -1
  236. package/dist/lib/mcp/tools/find-consumers-of-contract.js +0 -70
  237. package/dist/lib/mcp/tools/find-consumers-of-contract.js.map +0 -1
  238. package/dist/lib/mcp/tools/find-consumers.d.ts +0 -7
  239. package/dist/lib/mcp/tools/find-consumers.d.ts.map +0 -1
  240. package/dist/lib/mcp/tools/find-consumers.js +0 -52
  241. package/dist/lib/mcp/tools/find-consumers.js.map +0 -1
  242. package/dist/lib/mcp/tools/find-dependencies.d.ts +0 -8
  243. package/dist/lib/mcp/tools/find-dependencies.d.ts.map +0 -1
  244. package/dist/lib/mcp/tools/find-dependencies.js +0 -101
  245. package/dist/lib/mcp/tools/find-dependencies.js.map +0 -1
  246. package/dist/lib/mcp/tools/find-dependents.d.ts +0 -8
  247. package/dist/lib/mcp/tools/find-dependents.d.ts.map +0 -1
  248. package/dist/lib/mcp/tools/find-dependents.js +0 -89
  249. package/dist/lib/mcp/tools/find-dependents.js.map +0 -1
  250. package/dist/lib/mcp/tools/find-producers.d.ts +0 -8
  251. package/dist/lib/mcp/tools/find-producers.d.ts.map +0 -1
  252. package/dist/lib/mcp/tools/find-producers.js +0 -57
  253. package/dist/lib/mcp/tools/find-producers.js.map +0 -1
  254. package/dist/lib/mcp/tools/find-related-specs.d.ts +0 -9
  255. package/dist/lib/mcp/tools/find-related-specs.d.ts.map +0 -1
  256. package/dist/lib/mcp/tools/find-related-specs.js +0 -92
  257. package/dist/lib/mcp/tools/find-related-specs.js.map +0 -1
  258. package/dist/lib/mcp/tools/list-adrs.d.ts +0 -3
  259. package/dist/lib/mcp/tools/list-adrs.d.ts.map +0 -1
  260. package/dist/lib/mcp/tools/list-adrs.js +0 -73
  261. package/dist/lib/mcp/tools/list-adrs.js.map +0 -1
  262. package/dist/lib/mcp/tools/query-gate-status.d.ts +0 -3
  263. package/dist/lib/mcp/tools/query-gate-status.d.ts.map +0 -1
  264. package/dist/lib/mcp/tools/query-gate-status.js +0 -68
  265. package/dist/lib/mcp/tools/query-gate-status.js.map +0 -1
  266. package/dist/lib/mcp/tools/search-specs.d.ts +0 -12
  267. package/dist/lib/mcp/tools/search-specs.d.ts.map +0 -1
  268. package/dist/lib/mcp/tools/search-specs.js +0 -151
  269. package/dist/lib/mcp/tools/search-specs.js.map +0 -1
  270. package/dist/lib/mcp/workspace.d.ts +0 -31
  271. package/dist/lib/mcp/workspace.d.ts.map +0 -1
  272. package/dist/lib/mcp/workspace.js +0 -146
  273. package/dist/lib/mcp/workspace.js.map +0 -1
  274. package/dist/lib/mcp-seed/entries.d.ts +0 -32
  275. package/dist/lib/mcp-seed/entries.d.ts.map +0 -1
  276. package/dist/lib/mcp-seed/entries.js +0 -14
  277. package/dist/lib/mcp-seed/entries.js.map +0 -1
  278. package/dist/lib/mcp-seed/index.d.ts +0 -36
  279. package/dist/lib/mcp-seed/index.d.ts.map +0 -1
  280. package/dist/lib/mcp-seed/index.js +0 -28
  281. package/dist/lib/mcp-seed/index.js.map +0 -1
  282. package/dist/lib/mcp-seed/merge.d.ts +0 -34
  283. package/dist/lib/mcp-seed/merge.d.ts.map +0 -1
  284. package/dist/lib/mcp-seed/merge.js +0 -99
  285. package/dist/lib/mcp-seed/merge.js.map +0 -1
  286. package/dist/lib/mcp-seed/types.d.ts +0 -24
  287. package/dist/lib/mcp-seed/types.d.ts.map +0 -1
  288. package/dist/lib/mcp-seed/types.js +0 -13
  289. package/dist/lib/mcp-seed/types.js.map +0 -1
  290. package/dist/lib/sdd-index/cascade.d.ts +0 -46
  291. package/dist/lib/sdd-index/cascade.d.ts.map +0 -1
  292. package/dist/lib/sdd-index/cascade.js +0 -91
  293. package/dist/lib/sdd-index/cascade.js.map +0 -1
  294. package/dist/lib/sdd-index/contracts.d.ts +0 -29
  295. package/dist/lib/sdd-index/contracts.d.ts.map +0 -1
  296. package/dist/lib/sdd-index/contracts.js +0 -216
  297. package/dist/lib/sdd-index/contracts.js.map +0 -1
  298. package/dist/lib/sdd-index/data-model.d.ts +0 -13
  299. package/dist/lib/sdd-index/data-model.d.ts.map +0 -1
  300. package/dist/lib/sdd-index/data-model.js +0 -23
  301. package/dist/lib/sdd-index/data-model.js.map +0 -1
  302. package/dist/lib/sdd-index/execution-map.d.ts +0 -34
  303. package/dist/lib/sdd-index/execution-map.d.ts.map +0 -1
  304. package/dist/lib/sdd-index/execution-map.js +0 -105
  305. package/dist/lib/sdd-index/execution-map.js.map +0 -1
  306. package/dist/lib/sdd-index/graph.d.ts +0 -28
  307. package/dist/lib/sdd-index/graph.d.ts.map +0 -1
  308. package/dist/lib/sdd-index/graph.js +0 -122
  309. package/dist/lib/sdd-index/graph.js.map +0 -1
  310. package/dist/lib/sdd-index/index.d.ts +0 -29
  311. package/dist/lib/sdd-index/index.d.ts.map +0 -1
  312. package/dist/lib/sdd-index/index.js +0 -79
  313. package/dist/lib/sdd-index/index.js.map +0 -1
  314. package/dist/lib/sdd-index/watch.d.ts +0 -24
  315. package/dist/lib/sdd-index/watch.d.ts.map +0 -1
  316. package/dist/lib/sdd-index/watch.js +0 -112
  317. package/dist/lib/sdd-index/watch.js.map +0 -1
  318. package/dist/lib/sync/copilot-hooks-merge.d.ts +0 -36
  319. package/dist/lib/sync/copilot-hooks-merge.d.ts.map +0 -1
  320. package/dist/lib/sync/copilot-hooks-merge.js +0 -108
  321. package/dist/lib/sync/copilot-hooks-merge.js.map +0 -1
  322. package/dist/verbs/mcp.d.ts +0 -3
  323. package/dist/verbs/mcp.d.ts.map +0 -1
  324. package/dist/verbs/mcp.js +0 -22
  325. package/dist/verbs/mcp.js.map +0 -1
@@ -1,268 +0,0 @@
1
- /**
2
- * Catalogue tools (sdd-mcp Phase 8, Step 4). Read-only, on-demand
3
- * queries over the consumer repo's built catalogues:
4
- *
5
- * query_catalogue_coverage — row count + internal-FK pass + coverage for one catalogue
6
- * find_products_by_category — products filtered by category
7
- * find_orphan_rows — rows whose internal FK target is missing
8
- * query_edges_for_entity — every edge row referencing a given entity
9
- *
10
- * FK semantics follow ADR 0134: external FKs are validated only at
11
- * aggregation, so per-SDD coverage and orphan checks consider internal
12
- * FKs only. Reuses the existing schema-loader + csv-reader.
13
- */
14
- import { readdir } from "node:fs/promises";
15
- import { join } from "node:path";
16
- import { z } from "zod";
17
- import { McpEnvelopeError } from "../errors.js";
18
- import { loadCanonicalSchema, findCatalogue, } from "../../catalogue/schema-loader.js";
19
- import { readCatalogueCsv, } from "../../catalogue/csv-reader.js";
20
- async function loadAll(sddRoot) {
21
- const schema = await loadCanonicalSchema();
22
- const dir = join(sddRoot, "catalogues");
23
- const present = new Map();
24
- let files;
25
- try {
26
- files = await readdir(dir);
27
- }
28
- catch {
29
- return { schema, present };
30
- }
31
- for (const f of files) {
32
- if (!f.endsWith(".csv"))
33
- continue;
34
- const name = f.slice(0, -".csv".length);
35
- present.set(name, await readCatalogueCsv(join(dir, f)));
36
- }
37
- return { schema, present };
38
- }
39
- /** Referenced catalogue + column from an FK `references` string ("cat.col"). */
40
- function refParts(references) {
41
- const [catalogue, column] = references.split(".");
42
- return { catalogue: catalogue ?? "", column: column ?? "id" };
43
- }
44
- /** Compute internal-FK orphan rows for one catalogue (or all when name is null). */
45
- function orphansFor(loaded, only) {
46
- const out = [];
47
- // Pre-build PK value sets per present catalogue.
48
- const pkSets = new Map();
49
- for (const [name, csv] of loaded.present) {
50
- let def;
51
- try {
52
- def = findCatalogue(loaded.schema, name);
53
- }
54
- catch {
55
- continue;
56
- }
57
- pkSets.set(name, new Set(csv.rows.map((r) => r[def.primaryKey] ?? "")));
58
- }
59
- for (const [name, csv] of loaded.present) {
60
- if (only !== null && name !== only)
61
- continue;
62
- let def;
63
- try {
64
- def = findCatalogue(loaded.schema, name);
65
- }
66
- catch {
67
- continue;
68
- }
69
- for (const fk of def.foreignKeys) {
70
- if (fk.external)
71
- continue; // external FKs validated at aggregation only
72
- const { catalogue: targetCat } = refParts(fk.references);
73
- const targetPks = pkSets.get(targetCat);
74
- for (const row of csv.rows) {
75
- const val = row[fk.column] ?? "";
76
- if (val === "")
77
- continue; // empty FK value — nullable or unset
78
- // Missing target catalogue, or value not found in the target's PKs.
79
- if (targetPks === undefined || !targetPks.has(val)) {
80
- out.push({
81
- catalogue: name,
82
- row_id: row[def.primaryKey] ?? "",
83
- broken_fk_column: fk.column,
84
- references: fk.references,
85
- missing_target: val,
86
- });
87
- }
88
- }
89
- }
90
- }
91
- return out;
92
- }
93
- function asText(payload) {
94
- return { content: [{ type: "text", text: JSON.stringify(payload, null, 2) }] };
95
- }
96
- export function register(server, sddRoot) {
97
- // --- query_catalogue_coverage ---
98
- server.registerTool("query_catalogue_coverage", {
99
- title: "Query catalogue coverage",
100
- description: "Row count, internal-FK pass, and coverage metrics for one built catalogue. Read-only on-demand mirror of the catalogue-integrity gate.",
101
- inputSchema: {
102
- catalogue: z
103
- .string()
104
- .min(1)
105
- .describe("Catalogue name (e.g. 'products'). See sdd://catalogue."),
106
- },
107
- }, async ({ catalogue }) => {
108
- const loaded = await loadAll(sddRoot);
109
- try {
110
- findCatalogue(loaded.schema, catalogue);
111
- }
112
- catch {
113
- throw new McpEnvelopeError({
114
- code: "CATALOGUE_NOT_DECLARED",
115
- message: `"${catalogue}" is not declared in the canonical schema (version ${loaded.schema.schemaVersion}).`,
116
- remediation: "Query sdd://catalogue/schema for declared names.",
117
- context: { catalogue, schema_version: loaded.schema.schemaVersion },
118
- });
119
- }
120
- const csv = loaded.present.get(catalogue);
121
- if (csv === undefined) {
122
- throw new McpEnvelopeError({
123
- code: "CATALOGUE_NOT_BUILT",
124
- message: `Catalogue "${catalogue}" is declared but not built under ${sddRoot}/catalogues.`,
125
- remediation: "Build catalogues (catalogue-integrity-gate skill or `sdd-cli catalogue build`) before querying coverage.",
126
- context: { catalogue, sdd_root: sddRoot },
127
- });
128
- }
129
- const orphans = orphansFor(loaded, catalogue);
130
- return asText({
131
- catalogue,
132
- schema_version: loaded.schema.schemaVersion,
133
- row_count: csv.rows.length,
134
- fk_pass: orphans.length === 0,
135
- coverage: {
136
- internal_fk_orphan_count: orphans.length,
137
- columns_present: csv.columns.length,
138
- },
139
- });
140
- });
141
- // --- find_products_by_category ---
142
- server.registerTool("find_products_by_category", {
143
- title: "Find products by category",
144
- description: "Products in the products catalogue matching a given category, with domain, profile, and category.",
145
- inputSchema: {
146
- category: z
147
- .string()
148
- .min(1)
149
- .describe("Product category value (e.g. 'platform-root', 'application-product'). See sdd://catalogue/category-taxonomy."),
150
- },
151
- }, async ({ category }) => {
152
- const loaded = await loadAll(sddRoot);
153
- const csv = loaded.present.get("products");
154
- if (csv === undefined) {
155
- throw new McpEnvelopeError({
156
- code: "CATALOGUE_NOT_BUILT",
157
- message: `The products catalogue is not built under ${sddRoot}/catalogues.`,
158
- remediation: "Build catalogues before querying products.",
159
- context: { sdd_root: sddRoot },
160
- });
161
- }
162
- const matches = csv.rows
163
- .filter((r) => r["category"] === category)
164
- .map((r) => ({
165
- id: r["id"] ?? "",
166
- name: r["name"] ?? "",
167
- domain_id: r["domain_id"] ?? "",
168
- profile: r["profile"] ?? "",
169
- category: r["category"] ?? "",
170
- }));
171
- return asText({ category, match_count: matches.length, products: matches });
172
- });
173
- // --- find_orphan_rows ---
174
- server.registerTool("find_orphan_rows", {
175
- title: "Find orphan rows",
176
- description: "Rows whose internal foreign-key value has no matching primary key in the referenced catalogue. Triages FK-FAIL without re-running the full builder. Optional catalogue filter.",
177
- inputSchema: {
178
- catalogue: z
179
- .string()
180
- .optional()
181
- .describe("Optional: restrict to one catalogue. Omit to scan all."),
182
- },
183
- }, async ({ catalogue }) => {
184
- const loaded = await loadAll(sddRoot);
185
- if (catalogue !== undefined) {
186
- try {
187
- findCatalogue(loaded.schema, catalogue);
188
- }
189
- catch {
190
- throw new McpEnvelopeError({
191
- code: "CATALOGUE_NOT_DECLARED",
192
- message: `"${catalogue}" is not declared in the canonical schema.`,
193
- remediation: "Query sdd://catalogue/schema for declared names.",
194
- context: { catalogue },
195
- });
196
- }
197
- }
198
- const orphans = orphansFor(loaded, catalogue ?? null);
199
- return asText({
200
- scope: catalogue ?? "all",
201
- schema_version: loaded.schema.schemaVersion,
202
- orphan_count: orphans.length,
203
- orphans,
204
- });
205
- });
206
- // --- query_edges_for_entity ---
207
- server.registerTool("query_edges_for_entity", {
208
- title: "Query edges for entity",
209
- description: "Every edge row, in any catalogue, whose foreign key references the given entity (incoming + outgoing). Powers impact-analysis and dependency queries.",
210
- inputSchema: {
211
- entity_type: z
212
- .string()
213
- .min(1)
214
- .describe("Entity type — the singular of its catalogue (e.g. 'capability', 'service', 'product') or the catalogue name itself."),
215
- entity_id: z.string().min(1).describe("The entity's id value."),
216
- },
217
- }, async ({ entity_type, entity_id }) => {
218
- const loaded = await loadAll(sddRoot);
219
- // Resolve entity_type -> base catalogue name.
220
- const candidates = [
221
- entity_type,
222
- `${entity_type}s`,
223
- entity_type.replace(/y$/, "ies"),
224
- ];
225
- const base = loaded.schema.catalogues.find((c) => candidates.includes(c.name));
226
- if (base === undefined) {
227
- throw new McpEnvelopeError({
228
- code: "ENTITY_TYPE_UNKNOWN",
229
- message: `Could not resolve entity_type "${entity_type}" to a catalogue.`,
230
- remediation: "Use a catalogue's singular (e.g. 'capability') or its name (e.g. 'capabilities'). See sdd://catalogue/schema.",
231
- context: { entity_type, tried: candidates },
232
- });
233
- }
234
- const targetRef = `${base.name}.${base.primaryKey}`;
235
- const edges = [];
236
- for (const [name, csv] of loaded.present) {
237
- let def;
238
- try {
239
- def = findCatalogue(loaded.schema, name);
240
- }
241
- catch {
242
- continue;
243
- }
244
- const matchingFks = def.foreignKeys.filter((fk) => fk.references === targetRef);
245
- if (matchingFks.length === 0)
246
- continue;
247
- for (const row of csv.rows) {
248
- for (const fk of matchingFks) {
249
- if ((row[fk.column] ?? "") === entity_id) {
250
- edges.push({
251
- catalogue: name,
252
- row_id: row[def.primaryKey] ?? "",
253
- via_column: fk.column,
254
- row,
255
- });
256
- }
257
- }
258
- }
259
- }
260
- return asText({
261
- entity_type: base.name,
262
- entity_id,
263
- edge_count: edges.length,
264
- edges,
265
- });
266
- });
267
- }
268
- //# sourceMappingURL=catalogue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"catalogue.js","sourceRoot":"","sources":["../../../../src/lib/mcp/tools/catalogue.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,70 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"find-consumers-of-contract.js","sourceRoot":"","sources":["../../../../src/lib/mcp/tools/find-consumers-of-contract.ts"],"names":[],"mappings":"AAAA;;;GAGG;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,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,UAAU,QAAQ,CAAC,MAAiB,EAAE,OAAe;IACzD,MAAM,CAAC,YAAY,CACjB,4BAA4B,EAC5B;QACE,KAAK,EAAE,4BAA4B;QACnC,WAAW,EACT,kIAAkI;QACpI,WAAW,EAAE;YACX,aAAa,EAAE,CAAC;iBACb,MAAM,EAAE;iBACR,GAAG,CAAC,CAAC,CAAC;iBACN,QAAQ,CACP,8FAA8F,CAC/F;YACH,aAAa,EAAE,CAAC;iBACb,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,iDAAiD,CAAC;SAC/D;KACF,EACD,KAAK,EAAE,EAAE,aAAa,EAAE,aAAa,EAAE,EAAE,EAAE;QACzC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,gBAAgB,CAAC;gBACzB,IAAI,EAAE,oBAAoB;gBAC1B,OAAO,EAAE,mBAAmB,aAAa,2BAA2B;gBACpE,WAAW,EAAE,4GAA4G,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,GAAG;gBAC5L,OAAO,EAAE;oBACP,aAAa;oBACb,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;iBACjD;aACF,CAAC,CAAC;QACL,CAAC;QAED,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;YAC1C,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACnC,MAAM,GAAG,GAAG,GAAG,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;YACjE,OAAO;gBACL,OAAO,EAAE,EAAE;gBACX,MAAM,EAAE,GAAG,EAAE,MAAM,IAAI,IAAI;gBAC3B,WAAW,EAAE,eAAe,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,OAAO,IAAI,IAAI;gBAC7D,SAAS,EAAE,GAAG,EAAE,SAAS,IAAI,IAAI;gBACjC,OAAO,EAAE,GAAG,EAAE,OAAO,IAAI,IAAI;aAC9B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG;YACd,KAAK,EAAE,EAAE,aAAa,EAAE;YACxB,QAAQ,EAAE;gBACR,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,mBAAmB,EAAE,IAAI,CAAC,kBAAkB;gBAC5C,eAAe,EAAE,IAAI,CAAC,cAAc;aACrC;YACD,SAAS;YACT,KAAK,EAAE,SAAS,CAAC,MAAM;YACvB,aAAa,EAAE,MAAM,CAAC,GAAG;YACzB,OAAO,EAAE,CAAC,mBAAmB,IAAI,CAAC,IAAI,EAAE,CAAC;YACzC,mBAAmB,EAAE,IAAI,CAAC,kBAAkB;SAC7C,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"}
@@ -1,7 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,52 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,8 +0,0 @@
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
@@ -1 +0,0 @@
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,CAsGjE"}
@@ -1,101 +0,0 @@
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
- // M-ADR 0197 §4.7's fourth failure mode — distinct from
84
- // metadata_incomplete above, which is about contract-producer
85
- // resolution, an unrelated question. `vacuous: true` means this
86
- // service is a declared non-primary entry (M-ADR 0197 §4.6) with
87
- // no per-entry authoring surface yet: the empty dependencies above
88
- // are not evidence it has none, they are a fact that cannot yet be
89
- // expressed. Absent (not merely false) when the service isn't a
90
- // declared non-primary entry at all, so callers can tell "known
91
- // complete" from "known incomplete" from "this key doesn't apply".
92
- ...(svc.extra?.["declaredNonPrimary"] === true
93
- ? { vacuous: true }
94
- : {}),
95
- };
96
- return {
97
- content: [{ type: "text", text: JSON.stringify(payload, null, 2) }],
98
- };
99
- });
100
- }
101
- //# sourceMappingURL=find-dependencies.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"find-dependencies.js","sourceRoot":"","sources":["../../../../src/lib/mcp/tools/find-dependencies.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
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
@@ -1 +0,0 @@
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"}