@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,237 @@
1
+ import { mkdir, writeFile } from "node:fs/promises";
2
+ import { dirname, join } from "node:path";
3
+ import { buildMethodManagedServers, upsertMethodManagedServers, } from "../mcp-seed/index.js";
4
+ import { renderMethodValidationWorkflow, WORKFLOW_REL_PATH } from "./ci-workflow.js";
5
+ export const INTEGRATION_PROFILE_TYPES = [
6
+ "workflow",
7
+ "device-hardware",
8
+ "saas-platform",
9
+ "financial-services",
10
+ "data-hub",
11
+ "data-feed",
12
+ ];
13
+ export function defaultBindingModel(profile) {
14
+ switch (profile) {
15
+ case "workflow":
16
+ case "financial-services":
17
+ case "data-hub":
18
+ case "data-feed":
19
+ return "org-bound";
20
+ default:
21
+ return "asset-bound";
22
+ }
23
+ }
24
+ export function defaultCapabilities(profile) {
25
+ switch (profile) {
26
+ case "workflow":
27
+ case "financial-services":
28
+ case "data-hub":
29
+ case "data-feed":
30
+ return { inbound: true, outbound: false };
31
+ default:
32
+ return { inbound: true, outbound: true };
33
+ }
34
+ }
35
+ export function resolveCapabilities(profile, opts) {
36
+ if (opts.inboundOnly && opts.outboundOnly) {
37
+ throw new Error("--inbound-only and --outbound-only are mutually exclusive");
38
+ }
39
+ if (opts.inboundOnly)
40
+ return { inbound: true, outbound: false };
41
+ if (opts.outboundOnly)
42
+ return { inbound: false, outbound: true };
43
+ return defaultCapabilities(profile);
44
+ }
45
+ export function renderIntegrationManifest(input) {
46
+ const lines = [
47
+ `integrationId: "${input.integrationId}"`,
48
+ `providerName: "${input.providerName}"`,
49
+ `version: "0.1.0"`,
50
+ `profileType: "${input.profileType}"`,
51
+ `capabilityFlags:`,
52
+ ` inbound: ${input.capabilities.inbound}`,
53
+ ` outbound: ${input.capabilities.outbound}`,
54
+ `bindingModel: "${input.bindingModel}"`,
55
+ `supportedAssetTypes:`,
56
+ ...input.supportedAssetTypes.map((t) => ` - "${t}"`),
57
+ `sdkVersion: "${input.sdkVersion}"`,
58
+ `publishedBy: "${input.publishedBy}"`,
59
+ ];
60
+ return lines.join("\n") + "\n";
61
+ }
62
+ export function renderIntegrationServiceArchitecture(input) {
63
+ const capFlag = input.capabilities.inbound && input.capabilities.outbound
64
+ ? "both"
65
+ : input.capabilities.inbound
66
+ ? "inbound"
67
+ : "outbound";
68
+ const outboundRow = input.capabilities.outbound
69
+ ? "| TBD | TBD | TBD | Send provider commands or responses |"
70
+ : "| n/a | n/a | n/a | Inbound-only integration; no outbound command surface |";
71
+ const inboundUsed = input.capabilities.inbound;
72
+ const outboundUsed = input.capabilities.outbound;
73
+ return ([
74
+ `# Service Architecture: ${input.providerName}`,
75
+ "",
76
+ `**Integration ID:** ${input.integrationId}`,
77
+ `**Provider Name:** ${input.providerName}`,
78
+ "**Owner:** TBD",
79
+ `**Last Updated:** ${input.today}`,
80
+ "**Perspective:** Adapter (this repo bridges a provider system to the platform through canonical event contracts)",
81
+ "",
82
+ "---",
83
+ "",
84
+ "## Integration Purpose",
85
+ "",
86
+ input.description,
87
+ "",
88
+ "---",
89
+ "",
90
+ "## Integration Profile",
91
+ "",
92
+ "| Field | Value |",
93
+ "|---|---|",
94
+ `| Profile Type | ${input.profileType} |`,
95
+ `| Capability Flags | ${capFlag} |`,
96
+ `| Supported Asset Types | ${input.supportedAssetTypes.join(", ")} |`,
97
+ `| Published By | ${input.publishedBy} |`,
98
+ `| Binding Model | ${input.bindingModel} |`,
99
+ "",
100
+ "---",
101
+ "",
102
+ "## Provider Boundary",
103
+ "",
104
+ "| Surface | Protocol | Auth | Role |",
105
+ "|---|---|---|---|",
106
+ "| TBD | TBD | TBD | Receive provider data or events |",
107
+ outboundRow,
108
+ "",
109
+ "---",
110
+ "",
111
+ "## Platform Contract Boundary",
112
+ "",
113
+ "| Canonical Contract | Direction | Topic Pattern | Used by this repo? |",
114
+ "|---|---|---|---|",
115
+ `| \`CanonicalRawTelemetry\` | Integration -> Platform | \`integrations.telemetry.raw.${input.integrationId}\` | ${inboundUsed} |`,
116
+ `| \`CanonicalCommandDispatch\` | Platform -> Integration | \`integrations.commands.dispatch.${input.integrationId}.{assetId}\` | ${outboundUsed} |`,
117
+ `| \`CanonicalCommandAck\` | Integration -> Platform | \`integrations.commands.ack.${input.integrationId}.{commandId}\` | ${outboundUsed} |`,
118
+ "",
119
+ "During the current method phase, canonical contract references may be resolved via",
120
+ "an explicit `--platform-root` rather than a portable contract bundle.",
121
+ "",
122
+ "---",
123
+ "",
124
+ "## Runtime Architecture",
125
+ "",
126
+ "| Component | Responsibility | Technology |",
127
+ "|---|---|---|",
128
+ "| integration-worker | Provider adapter, contract translation, and event routing | TBD |",
129
+ "",
130
+ "---",
131
+ "",
132
+ "## Identity and Routing",
133
+ "",
134
+ "",
135
+ "- `integrationId` must match `integration-manifest.yaml` exactly.",
136
+ "- Document how provider identity resolves to platform `assetId`, `organizationId`, or other platform bindings.",
137
+ `- Binding model default: ${input.bindingModel}.`,
138
+ "- Document whether the integration is bound per asset, org, or both.",
139
+ ...(outboundUsed
140
+ ? []
141
+ : ["- Document how inbound-only routing works without command handling."]),
142
+ "",
143
+ "---",
144
+ "",
145
+ "## Security Model",
146
+ "",
147
+ "",
148
+ "- Provider credentials source: TBD",
149
+ "- Credentials never stored in repo: API keys, OAuth secrets, certificates, NATS credentials",
150
+ "- Messaging credential assumptions: TBD",
151
+ "- Trust boundary notes: TBD",
152
+ "",
153
+ "---",
154
+ "",
155
+ "## Operational Notes",
156
+ "",
157
+ "",
158
+ "- Deployment model: standalone integration deployment",
159
+ "- Retry strategy: TBD",
160
+ "- Failure handling: TBD",
161
+ "- Observability: TBD",
162
+ "",
163
+ "---",
164
+ "",
165
+ "## Related Files",
166
+ "",
167
+ "- `integration-manifest.yaml`",
168
+ "- `docs/design/integration/feature-grounding.md`",
169
+ "- `docs/method/methods/integration-delivery-workflow-guide.md`",
170
+ "- product platform integration framework ADR in the platform repo",
171
+ ].join("\n") + "\n");
172
+ }
173
+ export async function scaffoldIntegrationProfile(input) {
174
+ const providerName = input.providerName ?? titleizeIntegrationId(input.integrationId);
175
+ const publishedBy = input.publishedBy ?? "internal";
176
+ const sdkVersion = input.sdkVersion ?? "0.1.0";
177
+ const supportedAssetTypes = input.supportedAssetTypes ?? ["vehicle"];
178
+ const today = input.today ?? new Date().toISOString().slice(0, 10);
179
+ const description = input.description ??
180
+ "TODO: describe the provider system, why this integration exists, and what platform workflows depend on it.";
181
+ const capabilities = resolveCapabilities(input.profileType, {
182
+ ...(input.inboundOnly !== undefined ? { inboundOnly: input.inboundOnly } : {}),
183
+ ...(input.outboundOnly !== undefined ? { outboundOnly: input.outboundOnly } : {}),
184
+ });
185
+ const bindingModel = defaultBindingModel(input.profileType);
186
+ const filesWritten = [];
187
+ const manifestPath = join(input.targetRepo, "integration-manifest.yaml");
188
+ await writeFileAt(manifestPath, renderIntegrationManifest({
189
+ integrationId: input.integrationId,
190
+ providerName,
191
+ profileType: input.profileType,
192
+ capabilities,
193
+ bindingModel,
194
+ supportedAssetTypes,
195
+ sdkVersion,
196
+ publishedBy,
197
+ }));
198
+ filesWritten.push("integration-manifest.yaml");
199
+ const mdPath = join(input.targetRepo, "docs/service-architecture.md");
200
+ await writeFileAt(mdPath, renderIntegrationServiceArchitecture({
201
+ integrationId: input.integrationId,
202
+ providerName,
203
+ profileType: input.profileType,
204
+ capabilities,
205
+ bindingModel,
206
+ supportedAssetTypes,
207
+ publishedBy,
208
+ description,
209
+ today,
210
+ }));
211
+ filesWritten.push("docs/service-architecture.md");
212
+ await writeFileAt(join(input.targetRepo, ".claude/settings.json"), renderIntegrationClaudeSettings());
213
+ filesWritten.push(".claude/settings.json");
214
+ await writeFileAt(join(input.targetRepo, WORKFLOW_REL_PATH), renderMethodValidationWorkflow("integration"));
215
+ filesWritten.push(WORKFLOW_REL_PATH);
216
+ return { filesWritten };
217
+ }
218
+ export function renderIntegrationClaudeSettings() {
219
+ const merged = upsertMethodManagedServers({}, buildMethodManagedServers());
220
+ return JSON.stringify(merged.settings, null, 2) + "\n";
221
+ }
222
+ export function isIntegrationProfileType(value) {
223
+ return INTEGRATION_PROFILE_TYPES.includes(value);
224
+ }
225
+ function titleizeIntegrationId(id) {
226
+ const stripped = id.startsWith("integration-") ? id.slice("integration-".length) : id;
227
+ return stripped
228
+ .split("-")
229
+ .filter((part) => part.length > 0)
230
+ .map((part) => part[0].toUpperCase() + part.slice(1))
231
+ .join(" ");
232
+ }
233
+ async function writeFileAt(path, content) {
234
+ await mkdir(dirname(path), { recursive: true });
235
+ await writeFile(path, content, "utf8");
236
+ }
237
+ //# sourceMappingURL=integration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.js","sourceRoot":"","sources":["../../../src/lib/init/integration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export interface PlatformProfileRenderInput {
2
+ platformName: string;
3
+ platformId: string;
4
+ targetRepo: string;
5
+ today?: string;
6
+ }
7
+ export declare function renderPlatformReadme(input: {
8
+ platformName: string;
9
+ platformId: string;
10
+ today: string;
11
+ }): string;
12
+ export declare function renderPlatformGitignore(): string;
13
+ export declare function renderClaudeSettingsStub(opts?: {
14
+ sddRepoPath?: string;
15
+ }): string;
16
+ export declare function renderContentIndex(input: {
17
+ platformName: string;
18
+ }): string;
19
+ export declare function renderContractsIndex(input: {
20
+ platformName: string;
21
+ }): string;
22
+ export declare function scaffoldPlatformProfile(input: PlatformProfileRenderInput): Promise<{
23
+ filesWritten: string[];
24
+ }>;
25
+ export declare function derivePlatformId(platformName: string): string;
26
+ //# sourceMappingURL=platform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../../src/lib/init/platform.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,0BAA0B;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,MAAM,CAkDT;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CA4BhD;AAED,wBAAgB,wBAAwB,CAAC,IAAI,GAAE;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,MAAM,CAwBd;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAqB1E;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAqB5E;AAED,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,0BAA0B,GAChC,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA8DrC;AAED,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAM7D"}
@@ -0,0 +1,188 @@
1
+ import { mkdir, writeFile } from "node:fs/promises";
2
+ import { dirname, join } from "node:path";
3
+ import { buildMethodManagedServers, upsertMethodManagedServers, } from "../mcp-seed/index.js";
4
+ import { writeRepoKind } from "../repo-kind.js";
5
+ import { renderMethodValidationWorkflow, WORKFLOW_REL_PATH } from "./ci-workflow.js";
6
+ export function renderPlatformReadme(input) {
7
+ return ([
8
+ `# ${input.platformName}`,
9
+ "",
10
+ `${input.platformName} is an SDD (specification-driven development) platform repository. It contains the canonical method, platform, and domain documentation, cross-domain contracts, and orchestration tooling for the platform.`,
11
+ "",
12
+ "## About This Repository",
13
+ "",
14
+ `This repository is the source of truth for product requirements, architecture decisions, service specifications, and published contracts for **${input.platformName}**. It does **not** contain application code — services are hosted in separate code repositories composed via \`platform-cli add\`.`,
15
+ "",
16
+ "## Repository Map",
17
+ "",
18
+ "```text",
19
+ "docs/",
20
+ " method/ # SDD method baseline (sync-managed)",
21
+ " platform/ # Platform/product docs (PRD, feature tree, architecture)",
22
+ " domains/{domain}/ # Domain-specific product/design/architecture docs",
23
+ "content/",
24
+ " ideas/ # Shared idea lifecycle artifacts",
25
+ " method/ # Method lifecycle artifacts",
26
+ " product/ # Product lifecycle artifacts",
27
+ "contracts/ # OpenAPI / Proto / Avro contracts",
28
+ "orchestration/",
29
+ " scripts/ # Method tooling (sync-managed)",
30
+ " repo-config/ # Per-service repo-config (populated via platform-cli add)",
31
+ "```",
32
+ "",
33
+ "## Navigation Indexes",
34
+ "",
35
+ "- [`docs/INDEX.md`](docs/INDEX.md) — primary documentation entry point (arrives via `sdd-cli sync`)",
36
+ "- [`content/INDEX.md`](content/INDEX.md) — plans, ideas, evidence, research navigation",
37
+ "- [`contracts/INDEX.md`](contracts/INDEX.md) — contract types and conventions",
38
+ "",
39
+ "## Lifecycle",
40
+ "",
41
+ `- \`sdd-cli sync\` — refresh the method baseline for **${input.platformName}**.`,
42
+ "- `sdd-cli validate` — run the platform validation suite.",
43
+ "- `platform-cli add <domain>` — scaffold a domain and its services (outside this repo).",
44
+ "",
45
+ "## Identity",
46
+ "",
47
+ `- **platform-id:** ${input.platformId}`,
48
+ `- **Created:** ${input.today}`,
49
+ "- **Repo kind:** platform-product",
50
+ "",
51
+ `_This README was generated by \`sdd-cli init --profile platform\`. Tailor it to describe **${input.platformName}** specifically._`,
52
+ "",
53
+ ].join("\n") + "\n");
54
+ }
55
+ export function renderPlatformGitignore() {
56
+ return ([
57
+ "# Generated files",
58
+ "orchestration/generated/*",
59
+ "!orchestration/generated/.gitkeep",
60
+ "",
61
+ "# Editor directories",
62
+ ".idea/",
63
+ ".vscode/",
64
+ "*.swp",
65
+ "*.swo",
66
+ "",
67
+ "# OS files",
68
+ ".DS_Store",
69
+ "Thumbs.db",
70
+ "",
71
+ "# Node modules (for scripts)",
72
+ "node_modules/",
73
+ "",
74
+ "# Export directory",
75
+ "export/",
76
+ "",
77
+ "# Local build artefacts",
78
+ "dist/",
79
+ "tmp/",
80
+ ].join("\n") + "\n");
81
+ }
82
+ export function renderClaudeSettingsStub(opts = {}) {
83
+ const hooksLayer = {
84
+ hooks: {
85
+ PreToolUse: [
86
+ {
87
+ matcher: "Edit|Write|NotebookEdit",
88
+ hooks: [
89
+ {
90
+ type: "command",
91
+ command: 'bash "${CLAUDE_PROJECT_DIR:-$(pwd)}/orchestration/scripts/claude-method-guard.sh"',
92
+ },
93
+ ],
94
+ },
95
+ ],
96
+ },
97
+ };
98
+ const merged = upsertMethodManagedServers(hooksLayer, buildMethodManagedServers(opts.sddRepoPath !== undefined ? { sddRepoPath: opts.sddRepoPath } : {}));
99
+ return JSON.stringify(merged.settings, null, 2) + "\n";
100
+ }
101
+ export function renderContentIndex(input) {
102
+ return ([
103
+ "# Content Index",
104
+ "",
105
+ `This area contains lifecycle artifacts, plans, ideas, and supporting evidence for **${input.platformName}** that complement canonical docs under \`docs/\`.`,
106
+ "",
107
+ "## Main Areas",
108
+ "",
109
+ "- `ideas/` — shared lifecycle index artifacts",
110
+ "- `product/` — epics, plans, ideas, design, evidence",
111
+ "- `method/` — method plans, ideas, and evidence",
112
+ "",
113
+ "## Navigation Rule",
114
+ "",
115
+ "- Use `docs/` for canonical specifications and architecture.",
116
+ "- Use `content/` for lifecycle state, planning, and evidence gathered around those canonical documents.",
117
+ "",
118
+ "_This index was generated by `sdd-cli init --profile platform`. Populate it as content accrues._",
119
+ ].join("\n") + "\n");
120
+ }
121
+ export function renderContractsIndex(input) {
122
+ return ([
123
+ "# Contracts Index",
124
+ "",
125
+ `This area contains the source-of-truth interface artifacts for **${input.platformName}**, used at contract lock-in.`,
126
+ "",
127
+ "## Contract Types",
128
+ "",
129
+ "- OpenAPI HTTP contracts: [openapi/](openapi/)",
130
+ "- Avro event schemas: [avro/](avro/)",
131
+ "- Field mappings: [field-mappings/](field-mappings/)",
132
+ "",
133
+ "## Navigation Rule",
134
+ "",
135
+ "- Use capability and feature specs to understand intent first.",
136
+ "- Use contracts here as the source of truth once the API surface is being locked in.",
137
+ "",
138
+ "_This index was generated by `sdd-cli init --profile platform`. Populate it as contracts are authored._",
139
+ ].join("\n") + "\n");
140
+ }
141
+ export async function scaffoldPlatformProfile(input) {
142
+ const today = input.today ?? new Date().toISOString().slice(0, 10);
143
+ const filesWritten = [];
144
+ await writeRepoKind(input.targetRepo, "platform-product");
145
+ filesWritten.push(".sdd-repo-kind");
146
+ await writeFileAt(join(input.targetRepo, "README.md"), renderPlatformReadme({
147
+ platformName: input.platformName,
148
+ platformId: input.platformId,
149
+ today,
150
+ }));
151
+ filesWritten.push("README.md");
152
+ await writeFileAt(join(input.targetRepo, ".gitignore"), renderPlatformGitignore());
153
+ filesWritten.push(".gitignore");
154
+ await writeFileAt(join(input.targetRepo, ".claude/settings.json"), renderClaudeSettingsStub({ sddRepoPath: input.targetRepo }));
155
+ filesWritten.push(".claude/settings.json");
156
+ await writeFileAt(join(input.targetRepo, WORKFLOW_REL_PATH), renderMethodValidationWorkflow("platform"));
157
+ filesWritten.push(WORKFLOW_REL_PATH);
158
+ for (const rel of [
159
+ "orchestration/repo-config/.gitkeep",
160
+ "orchestration/generated/.gitkeep",
161
+ "content/ideas/.gitkeep",
162
+ "content/method/.gitkeep",
163
+ "content/product/.gitkeep",
164
+ "contracts/openapi/.gitkeep",
165
+ "contracts/avro/.gitkeep",
166
+ "contracts/field-mappings/.gitkeep",
167
+ ]) {
168
+ await writeFileAt(join(input.targetRepo, rel), "");
169
+ filesWritten.push(rel);
170
+ }
171
+ await writeFileAt(join(input.targetRepo, "content/INDEX.md"), renderContentIndex({ platformName: input.platformName }));
172
+ filesWritten.push("content/INDEX.md");
173
+ await writeFileAt(join(input.targetRepo, "contracts/INDEX.md"), renderContractsIndex({ platformName: input.platformName }));
174
+ filesWritten.push("contracts/INDEX.md");
175
+ return { filesWritten };
176
+ }
177
+ export function derivePlatformId(platformName) {
178
+ return platformName
179
+ .trim()
180
+ .toLowerCase()
181
+ .replace(/[^a-z0-9]+/g, "-")
182
+ .replace(/^-+|-+$/g, "");
183
+ }
184
+ async function writeFileAt(path, content) {
185
+ await mkdir(dirname(path), { recursive: true });
186
+ await writeFile(path, content, "utf8");
187
+ }
188
+ //# sourceMappingURL=platform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform.js","sourceRoot":"","sources":["../../../src/lib/init/platform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type RepoKind } from "../repo-kind.js";
2
+ export interface DiscoveredRepo {
3
+ path: string;
4
+ kind: RepoKind;
5
+ bundleVersion: string | null;
6
+ }
7
+ export declare function discoverSddRepos(roots: readonly string[]): Promise<DiscoveredRepo[]>;
8
+ //# sourceMappingURL=discover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../../src/lib/list/discover.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE9D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAiBD,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,OAAO,CAAC,cAAc,EAAE,CAAC,CAW3B"}
@@ -0,0 +1,77 @@
1
+ import { opendir } from "node:fs/promises";
2
+ import { join, resolve } from "node:path";
3
+ import { readLockFile } from "../lock-file.js";
4
+ import { readRepoKind } from "../repo-kind.js";
5
+ const SKIP_DIRS = new Set([
6
+ "node_modules",
7
+ ".git",
8
+ "dist",
9
+ "build",
10
+ ".next",
11
+ ".turbo",
12
+ ".cache",
13
+ "coverage",
14
+ "tmp",
15
+ "export",
16
+ ".venv",
17
+ "__pycache__",
18
+ ]);
19
+ export async function discoverSddRepos(roots) {
20
+ const seen = new Set();
21
+ const repos = [];
22
+ for (const root of roots) {
23
+ const abs = resolve(root);
24
+ await walk(abs, seen, repos);
25
+ }
26
+ repos.sort((a, b) => a.path.localeCompare(b.path));
27
+ return repos;
28
+ }
29
+ async function walk(dir, seen, repos) {
30
+ if (seen.has(dir))
31
+ return;
32
+ seen.add(dir);
33
+ const kind = await tryReadRepoKind(dir);
34
+ if (kind) {
35
+ const bundleVersion = await tryReadBundleVersion(dir);
36
+ repos.push({ path: dir, kind, bundleVersion });
37
+ return;
38
+ }
39
+ let entries;
40
+ try {
41
+ entries = await opendir(dir);
42
+ }
43
+ catch {
44
+ return;
45
+ }
46
+ for await (const entry of entries) {
47
+ if (!entry.isDirectory())
48
+ continue;
49
+ if (entry.name.startsWith(".") &&
50
+ entry.name !== ".iteraitive" &&
51
+ entry.name !== ".sdd-method") {
52
+ if (SKIP_DIRS.has(entry.name))
53
+ continue;
54
+ }
55
+ if (SKIP_DIRS.has(entry.name))
56
+ continue;
57
+ await walk(join(dir, entry.name), seen, repos);
58
+ }
59
+ }
60
+ async function tryReadRepoKind(dir) {
61
+ try {
62
+ return await readRepoKind(dir);
63
+ }
64
+ catch {
65
+ return null;
66
+ }
67
+ }
68
+ async function tryReadBundleVersion(dir) {
69
+ try {
70
+ const lock = await readLockFile(dir);
71
+ return lock?.bundleVersion ?? null;
72
+ }
73
+ catch {
74
+ return null;
75
+ }
76
+ }
77
+ //# sourceMappingURL=discover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../../src/lib/list/discover.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Profile } from "../repo-kind.js";
2
+ import type { DiscoveredRepo } from "./discover.js";
3
+ export type OutputFormat = "text" | "json";
4
+ export interface ListOptions {
5
+ format: OutputFormat;
6
+ profileFilter?: Profile;
7
+ }
8
+ export declare function format(repos: readonly DiscoveredRepo[], opts: ListOptions): string;
9
+ //# sourceMappingURL=format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/lib/list/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC;AAI3C,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,YAAY,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AASD,wBAAgB,MAAM,CACpB,KAAK,EAAE,SAAS,cAAc,EAAE,EAChC,IAAI,EAAE,WAAW,GAChB,MAAM,CAOR"}
@@ -0,0 +1,44 @@
1
+ import { profileFromRepoKind } from "../repo-kind.js";
2
+ const PROFILE_ORDER = ["platform", "application", "integration"];
3
+ export function format(repos, opts) {
4
+ const filtered = opts.profileFilter
5
+ ? repos.filter((r) => profileFromRepoKind(r.kind) === opts.profileFilter)
6
+ : repos;
7
+ if (opts.format === "json")
8
+ return formatJson(filtered);
9
+ return formatText(filtered);
10
+ }
11
+ function formatJson(repos) {
12
+ const payload = repos.map((r) => ({
13
+ path: r.path,
14
+ profile: profileFromRepoKind(r.kind),
15
+ kind: r.kind,
16
+ bundle_version: r.bundleVersion,
17
+ }));
18
+ return JSON.stringify(payload, null, 2) + "\n";
19
+ }
20
+ function formatText(repos) {
21
+ if (repos.length === 0)
22
+ return "No SDD repositories found.\n";
23
+ const grouped = new Map();
24
+ for (const repo of repos) {
25
+ const profile = profileFromRepoKind(repo.kind);
26
+ const list = grouped.get(profile) ?? [];
27
+ list.push(repo);
28
+ grouped.set(profile, list);
29
+ }
30
+ const lines = [];
31
+ for (const profile of PROFILE_ORDER) {
32
+ const list = grouped.get(profile);
33
+ if (!list || list.length === 0)
34
+ continue;
35
+ lines.push(`${profile} (${list.length}):`);
36
+ for (const repo of list) {
37
+ const version = repo.bundleVersion ?? "no-lock";
38
+ lines.push(` ${repo.path} [${version}]`);
39
+ }
40
+ lines.push("");
41
+ }
42
+ return lines.join("\n");
43
+ }
44
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/lib/list/format.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAKtD,MAAM,aAAa,GAAuB,CAAC,UAAU,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;AAcrF,MAAM,UAAU,MAAM,CACpB,KAAgC,EAChC,IAAiB;IAEjB,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa;QACjC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa,CAAC;QACzE,CAAC,CAAC,KAAK,CAAC;IAEV,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;IACxD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,UAAU,CAAC,KAAgC;IAClD,MAAM,OAAO,GAAe,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5C,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC;QACpC,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,cAAc,EAAE,CAAC,CAAC,aAAa;KAChC,CAAC,CAAC,CAAC;IACJ,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;AACjD,CAAC;AAED,SAAS,UAAU,CAAC,KAAgC;IAClD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,8BAA8B,CAAC;IAE9D,MAAM,OAAO,GAAG,IAAI,GAAG,EAA6B,CAAC;IACrD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACzC,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACxB,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,IAAI,SAAS,CAAC;YAChD,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,MAAM,OAAO,GAAG,CAAC,CAAC;QAC7C,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { Profile } from "../repo-kind.js";
2
+ import { type OutputFormat } from "./format.js";
3
+ export interface ListInputs {
4
+ workspaceRoots: readonly string[];
5
+ format: OutputFormat;
6
+ profileFilter?: Profile;
7
+ }
8
+ export interface ListResult {
9
+ exitCode: number;
10
+ }
11
+ export declare function runList(inputs: ListInputs, write: (s: string) => void): Promise<ListResult>;
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/list/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAU,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,WAAW,UAAU;IACzB,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,MAAM,EAAE,YAAY,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,OAAO,CAC3B,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,GACzB,OAAO,CAAC,UAAU,CAAC,CAYrB"}