@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,89 @@
1
+ import { access, writeFile } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { renderAppClaudeMd, renderIntegrationClaudeMd, renderPlatformClaudeMd, } from "../init/claude-md.js";
4
+ import { INTEGRATION_PROFILE_TYPES, isIntegrationProfileType, } from "../init/integration.js";
5
+ import { derivePlatformId } from "../init/platform.js";
6
+ import { profileFromRepoKind, readRepoKind } from "../repo-kind.js";
7
+ export async function runGenerateClaudeMd(opts, stdout = (line) => process.stdout.write(line)) {
8
+ const repoKind = await readRepoKind(opts.targetDir);
9
+ if (repoKind === null) {
10
+ stdout(fail(`Not an SDD repo: no .sdd-repo-kind marker in ${opts.targetDir}`));
11
+ return { exitCode: 1 };
12
+ }
13
+ const profile = profileFromRepoKind(repoKind);
14
+ const errorMsg = validateProfileInputs(profile, opts);
15
+ if (errorMsg) {
16
+ stdout(fail(errorMsg));
17
+ return { exitCode: 1 };
18
+ }
19
+ const targetFile = join(opts.targetDir, "CLAUDE.md");
20
+ if (!opts.allowExisting && (await pathExists(targetFile))) {
21
+ stdout(fail(`CLAUDE.md already exists at ${targetFile}. Re-run with --allow-existing to overwrite.`));
22
+ return { exitCode: 1 };
23
+ }
24
+ const rendered = render(profile, opts);
25
+ await writeFile(targetFile, rendered, "utf8");
26
+ stdout(info(`Wrote CLAUDE.md for ${profile} profile at ${targetFile}`));
27
+ return { exitCode: 0 };
28
+ }
29
+ function validateProfileInputs(profile, opts) {
30
+ if (profile === "application") {
31
+ if (!opts.appId) {
32
+ return "--app-id is required for application-profile repos";
33
+ }
34
+ return null;
35
+ }
36
+ if (profile === "integration") {
37
+ if (!opts.integrationId) {
38
+ return "--integration-id is required for integration-profile repos";
39
+ }
40
+ if (!opts.profileType) {
41
+ return `--profile-type is required for integration-profile repos (one of: ${INTEGRATION_PROFILE_TYPES.join(", ")})`;
42
+ }
43
+ if (!isIntegrationProfileType(opts.profileType)) {
44
+ return `--profile-type must be one of: ${INTEGRATION_PROFILE_TYPES.join(", ")}`;
45
+ }
46
+ return null;
47
+ }
48
+ if (!opts.platformName) {
49
+ return "--platform-name is required for platform-profile repos";
50
+ }
51
+ return null;
52
+ }
53
+ function render(profile, opts) {
54
+ if (profile === "application") {
55
+ return renderAppClaudeMd({
56
+ appId: opts.appId,
57
+ ...(opts.platformName ? { platformName: opts.platformName } : {}),
58
+ });
59
+ }
60
+ if (profile === "integration") {
61
+ return renderIntegrationClaudeMd({
62
+ integrationId: opts.integrationId,
63
+ profileType: opts.profileType,
64
+ ...(opts.providerName ? { providerName: opts.providerName } : {}),
65
+ ...(opts.platformName ? { platformName: opts.platformName } : {}),
66
+ });
67
+ }
68
+ const platformName = opts.platformName;
69
+ return renderPlatformClaudeMd({
70
+ platformName,
71
+ platformId: opts.platformId ?? derivePlatformId(platformName),
72
+ });
73
+ }
74
+ async function pathExists(p) {
75
+ try {
76
+ await access(p);
77
+ return true;
78
+ }
79
+ catch {
80
+ return false;
81
+ }
82
+ }
83
+ function info(msg) {
84
+ return `[INFO] ${msg}\n`;
85
+ }
86
+ function fail(msg) {
87
+ return `[FAIL] ${msg}\n`;
88
+ }
89
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/generate-claude-md/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Builders for the method-managed hook matchers per ADR 0129 §4.2.
3
+ *
4
+ * Every command carries the METHOD_MANAGED_SENTINEL suffix so the
5
+ * merge path can identify it on refresh. Adopter-added hooks under
6
+ * the same event survive because they lack the sentinel.
7
+ */
8
+ import type { HookMatcher, HooksBlock } from "./types.js";
9
+ export declare function buildMethodGuardPreToolUse(): HookMatcher;
10
+ export declare function buildSessionStartValidate(): HookMatcher;
11
+ /**
12
+ * Full method-managed hooks block. When extending, add a new event
13
+ * name to the returned object and a corresponding builder above.
14
+ */
15
+ export declare function buildMethodManagedHooks(): HooksBlock;
16
+ //# sourceMappingURL=entries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entries.d.ts","sourceRoot":"","sources":["../../../src/lib/hooks-seed/entries.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAiB,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAQzE,wBAAgB,0BAA0B,IAAI,WAAW,CAYxD;AAED,wBAAgB,yBAAyB,IAAI,WAAW,CAYvD;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,UAAU,CAMpD"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Builders for the method-managed hook matchers per ADR 0129 §4.2.
3
+ *
4
+ * Every command carries the METHOD_MANAGED_SENTINEL suffix so the
5
+ * merge path can identify it on refresh. Adopter-added hooks under
6
+ * the same event survive because they lack the sentinel.
7
+ */
8
+ import { METHOD_MANAGED_SENTINEL } from "./types.js";
9
+ function withSentinel(command) {
10
+ if (command.includes(METHOD_MANAGED_SENTINEL))
11
+ return command;
12
+ return `${command} ${METHOD_MANAGED_SENTINEL}`;
13
+ }
14
+ export function buildMethodGuardPreToolUse() {
15
+ return {
16
+ matcher: "Edit|Write|NotebookEdit",
17
+ hooks: [
18
+ {
19
+ type: "command",
20
+ command: withSentinel('bash "${CLAUDE_PROJECT_DIR:-$(pwd)}/orchestration/scripts/claude-method-guard.sh"'),
21
+ },
22
+ ],
23
+ };
24
+ }
25
+ export function buildSessionStartValidate() {
26
+ return {
27
+ matcher: "startup",
28
+ hooks: [
29
+ {
30
+ type: "command",
31
+ command: withSentinel('sdd-cli validate --target-repo "${CLAUDE_PROJECT_DIR:-$(pwd)}" --validator adr-structure 2>&1 | head -20'),
32
+ },
33
+ ],
34
+ };
35
+ }
36
+ /**
37
+ * Full method-managed hooks block. When extending, add a new event
38
+ * name to the returned object and a corresponding builder above.
39
+ */
40
+ export function buildMethodManagedHooks() {
41
+ const hooks = {
42
+ PreToolUse: [buildMethodGuardPreToolUse()],
43
+ SessionStart: [buildSessionStartValidate()],
44
+ };
45
+ return hooks;
46
+ }
47
+ //# sourceMappingURL=entries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entries.js","sourceRoot":"","sources":["../../../src/lib/hooks-seed/entries.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAErD,SAAS,YAAY,CAAC,OAAe;IACnC,IAAI,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAAE,OAAO,OAAO,CAAC;IAC9D,OAAO,GAAG,OAAO,IAAI,uBAAuB,EAAE,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,OAAO;QACL,OAAO,EAAE,yBAAyB;QAClC,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,YAAY,CACnB,mFAAmF,CACpF;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB;IACvC,OAAO;QACL,OAAO,EAAE,SAAS;QAClB,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,YAAY,CACnB,0GAA0G,CAC3G;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB;IACrC,MAAM,KAAK,GAAkD;QAC3D,UAAU,EAAE,CAAC,0BAA0B,EAAE,CAAC;QAC1C,YAAY,EAAE,CAAC,yBAAyB,EAAE,CAAC;KAC5C,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Public facade for the method-managed hooks seed library.
3
+ *
4
+ * Scope: this module owns method-managed entries inside
5
+ * `.claude/settings.json`'s `hooks` key. Ownership is identified by
6
+ * the `# sdd-method-managed:true` sentinel in each hook command.
7
+ *
8
+ * Integration: `src/lib/sync/settings-merge.ts` conditionally calls
9
+ * `upsertMethodManagedHooks` after `upsertMethodManagedServers` when
10
+ * the adopter opted into `--agent-harness claude-code` at init time.
11
+ */
12
+ export type { HookCommand, HookEventName, HookMatcher, HooksBlock, SettingsWithHooks, } from "./types.js";
13
+ export { METHOD_MANAGED_SENTINEL, isMethodManagedMatcher } from "./types.js";
14
+ export { buildMethodManagedHooks } from "./entries.js";
15
+ export { detectHooksDrift, upsertMethodManagedHooks, } from "./merge.js";
16
+ export type { HooksUpsertResult } from "./merge.js";
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/hooks-seed/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,YAAY,EACV,WAAW,EACX,aAAa,EACb,WAAW,EACX,UAAU,EACV,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EACL,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Public facade for the method-managed hooks seed library.
3
+ *
4
+ * Scope: this module owns method-managed entries inside
5
+ * `.claude/settings.json`'s `hooks` key. Ownership is identified by
6
+ * the `# sdd-method-managed:true` sentinel in each hook command.
7
+ *
8
+ * Integration: `src/lib/sync/settings-merge.ts` conditionally calls
9
+ * `upsertMethodManagedHooks` after `upsertMethodManagedServers` when
10
+ * the adopter opted into `--agent-harness claude-code` at init time.
11
+ */
12
+ export { METHOD_MANAGED_SENTINEL, isMethodManagedMatcher } from "./types.js";
13
+ export { buildMethodManagedHooks } from "./entries.js";
14
+ export { detectHooksDrift, upsertMethodManagedHooks, } from "./merge.js";
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/hooks-seed/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EACL,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Merge logic for the method-managed hooks slice of
3
+ * `.claude/settings.json`. Ownership is sentinel-based: a method-
4
+ * managed matcher carries `# sdd-method-managed:true` in one of its
5
+ * commands. Adopter-added matchers lack the sentinel and survive
6
+ * sync untouched.
7
+ */
8
+ import type { HookEventName, HooksBlock, SettingsWithHooks } from "./types.js";
9
+ export interface HooksUpsertResult {
10
+ readonly settings: SettingsWithHooks;
11
+ /** Events whose method-managed matchers changed (added or differ). */
12
+ readonly changedEvents: readonly HookEventName[];
13
+ /** True if any event's matchers changed. */
14
+ readonly changed: boolean;
15
+ }
16
+ export declare function upsertMethodManagedHooks(existing: SettingsWithHooks, owned: HooksBlock): HooksUpsertResult;
17
+ /**
18
+ * Detect adopter drift inside a method-managed matcher — i.e., an
19
+ * entry that still carries the sentinel but whose content differs
20
+ * from what we would write now. Returns the list of events where drift
21
+ * is present.
22
+ */
23
+ export declare function detectHooksDrift(existing: SettingsWithHooks, owned: HooksBlock): readonly HookEventName[];
24
+ //# sourceMappingURL=merge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../src/lib/hooks-seed/merge.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,aAAa,EAEb,UAAU,EACV,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,sEAAsE;IACtE,QAAQ,CAAC,aAAa,EAAE,SAAS,aAAa,EAAE,CAAC;IACjD,4CAA4C;IAC5C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,iBAAiB,EAC3B,KAAK,EAAE,UAAU,GAChB,iBAAiB,CAgDnB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,iBAAiB,EAC3B,KAAK,EAAE,UAAU,GAChB,SAAS,aAAa,EAAE,CAkB1B"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Merge logic for the method-managed hooks slice of
3
+ * `.claude/settings.json`. Ownership is sentinel-based: a method-
4
+ * managed matcher carries `# sdd-method-managed:true` in one of its
5
+ * commands. Adopter-added matchers lack the sentinel and survive
6
+ * sync untouched.
7
+ */
8
+ import { isMethodManagedMatcher } from "./types.js";
9
+ export function upsertMethodManagedHooks(existing, owned) {
10
+ const current = isHooksObject(existing["hooks"])
11
+ ? existing["hooks"]
12
+ : {};
13
+ const nextHooks = {};
14
+ const changedEvents = [];
15
+ // Start by copying every existing event's adopter-owned matchers.
16
+ for (const [event, matchers] of Object.entries(current)) {
17
+ if (!matchers)
18
+ continue;
19
+ const adopterMatchers = matchers.filter((m) => !isMethodManagedMatcher(m));
20
+ if (adopterMatchers.length > 0)
21
+ nextHooks[event] = [...adopterMatchers];
22
+ }
23
+ // Layer method-managed matchers on top.
24
+ for (const [event, ownedMatchers] of Object.entries(owned)) {
25
+ if (!ownedMatchers || ownedMatchers.length === 0)
26
+ continue;
27
+ const before = current[event]?.filter((m) => isMethodManagedMatcher(m)) ?? [];
28
+ const after = ownedMatchers;
29
+ if (JSON.stringify(before) !== JSON.stringify(after)) {
30
+ changedEvents.push(event);
31
+ }
32
+ const bucket = nextHooks[event] ?? [];
33
+ bucket.push(...ownedMatchers);
34
+ nextHooks[event] = bucket;
35
+ }
36
+ const changed = changedEvents.length > 0;
37
+ if (!changed && Object.keys(nextHooks).length === Object.keys(current).length) {
38
+ // No method-managed changes AND no adopter matchers reshuffled.
39
+ return { settings: existing, changedEvents: [], changed: false };
40
+ }
41
+ const nextSettings = {
42
+ ...existing,
43
+ hooks: nextHooks,
44
+ };
45
+ return { settings: nextSettings, changedEvents, changed };
46
+ }
47
+ /**
48
+ * Detect adopter drift inside a method-managed matcher — i.e., an
49
+ * entry that still carries the sentinel but whose content differs
50
+ * from what we would write now. Returns the list of events where drift
51
+ * is present.
52
+ */
53
+ export function detectHooksDrift(existing, owned) {
54
+ const current = isHooksObject(existing["hooks"])
55
+ ? existing["hooks"]
56
+ : {};
57
+ const drifted = [];
58
+ for (const [event, ownedMatchers] of Object.entries(owned)) {
59
+ if (!ownedMatchers)
60
+ continue;
61
+ const existingMethod = current[event]?.filter((m) => isMethodManagedMatcher(m)) ?? [];
62
+ if (existingMethod.length === 0)
63
+ continue; // no drift; freshly adding
64
+ if (JSON.stringify(existingMethod) !== JSON.stringify(ownedMatchers)) {
65
+ drifted.push(event);
66
+ }
67
+ }
68
+ return drifted;
69
+ }
70
+ function isHooksObject(v) {
71
+ return v !== null && typeof v === "object" && !Array.isArray(v);
72
+ }
73
+ //# sourceMappingURL=merge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge.js","sourceRoot":"","sources":["../../../src/lib/hooks-seed/merge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Types for the method-managed hooks slice of `.claude/settings.json`.
3
+ * Mirrors Claude Code's hooks shape, narrowed to the fields we read
4
+ * and write.
5
+ */
6
+ /** Sentinel suffix carried by method-managed hook commands. */
7
+ export declare const METHOD_MANAGED_SENTINEL = "# sdd-method-managed:true";
8
+ export interface HookCommand {
9
+ readonly type: "command";
10
+ readonly command: string;
11
+ }
12
+ export interface HookMatcher {
13
+ readonly matcher: string;
14
+ readonly hooks: readonly HookCommand[];
15
+ }
16
+ export type HookEventName = "PreToolUse" | "PostToolUse" | "UserPromptSubmit" | "SessionStart" | "Stop";
17
+ export type HooksBlock = Readonly<Partial<Record<HookEventName, readonly HookMatcher[]>>>;
18
+ export interface SettingsWithHooks {
19
+ readonly hooks?: HooksBlock;
20
+ readonly [key: string]: unknown;
21
+ }
22
+ /**
23
+ * A hook entry is method-managed iff at least one of its commands
24
+ * carries the sentinel.
25
+ */
26
+ export declare function isMethodManagedMatcher(entry: HookMatcher): boolean;
27
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/hooks-seed/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,+DAA+D;AAC/D,eAAO,MAAM,uBAAuB,8BAA8B,CAAC;AAEnE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;CACxC;AAED,MAAM,MAAM,aAAa,GACrB,YAAY,GACZ,aAAa,GACb,kBAAkB,GAClB,cAAc,GACd,MAAM,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,SAAS,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;AAE1F,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC5B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAOlE"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Types for the method-managed hooks slice of `.claude/settings.json`.
3
+ * Mirrors Claude Code's hooks shape, narrowed to the fields we read
4
+ * and write.
5
+ */
6
+ /** Sentinel suffix carried by method-managed hook commands. */
7
+ export const METHOD_MANAGED_SENTINEL = "# sdd-method-managed:true";
8
+ /**
9
+ * A hook entry is method-managed iff at least one of its commands
10
+ * carries the sentinel.
11
+ */
12
+ export function isMethodManagedMatcher(entry) {
13
+ for (const h of entry.hooks) {
14
+ if (typeof h.command === "string" && h.command.includes(METHOD_MANAGED_SENTINEL)) {
15
+ return true;
16
+ }
17
+ }
18
+ return false;
19
+ }
20
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/hooks-seed/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,+DAA+D;AAC/D,MAAM,CAAC,MAAM,uBAAuB,GAAG,2BAA2B,CAAC;AA0BnE;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAkB;IACvD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;YACjF,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,21 @@
1
+ export interface AppProfileRenderInput {
2
+ appId: string;
3
+ targetRepo: string;
4
+ targetSlug?: string;
5
+ description?: string;
6
+ today?: string;
7
+ }
8
+ export declare function renderAppPlatformDependencies(input: {
9
+ appId: string;
10
+ targetSlug: string;
11
+ }): string;
12
+ export declare function renderAppServiceArchitecture(input: {
13
+ appId: string;
14
+ description: string;
15
+ today: string;
16
+ }): string;
17
+ export declare function renderAppClaudeSettings(): string;
18
+ export declare function scaffoldAppProfile(input: AppProfileRenderInput): Promise<{
19
+ filesWritten: string[];
20
+ }>;
21
+ //# sourceMappingURL=app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/lib/init/app.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,MAAM,CAkBT;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,MAAM,CA8ET;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAGhD;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC;IAAE,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAoCrC"}
@@ -0,0 +1,132 @@
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 function renderAppPlatformDependencies(input) {
6
+ return ([
7
+ "# app-platform-dependencies.yaml",
8
+ "#",
9
+ "# Machine-readable declaration of platform contract dependencies for an app repo.",
10
+ "# Maintained alongside docs/service-architecture.md.",
11
+ "# Used by: validate-app-dependencies.sh (Stage 6 lock-in gate)",
12
+ "# generate-app-claude-md.sh (CLAUDE.md platform context section)",
13
+ "",
14
+ `app_id: "${input.appId}"`,
15
+ `target_repo: "${input.targetSlug}"`,
16
+ "",
17
+ "platform_dependencies:",
18
+ " # Add one entry per platform contract dependency.",
19
+ " []",
20
+ ].join("\n") + "\n");
21
+ }
22
+ export function renderAppServiceArchitecture(input) {
23
+ const prettyName = titleize(input.appId);
24
+ return ([
25
+ `# Service Architecture: ${prettyName}`,
26
+ "",
27
+ `**App ID:** ${input.appId}`,
28
+ "**Owner:** TBD",
29
+ `**Last Updated:** ${input.today}`,
30
+ "**Perspective:** Consumer (this app consumes platform services; it does not publish services)",
31
+ "",
32
+ "---",
33
+ "",
34
+ "## App Purpose",
35
+ "",
36
+ input.description,
37
+ "",
38
+ "---",
39
+ "",
40
+ "## Platform Service Dependencies",
41
+ "",
42
+ "Declare every platform service this app depends on. This table is the source of truth",
43
+ "for the `app-platform-dependencies.yaml` initial entries.",
44
+ "",
45
+ "| Service ID | Domain | Role for this app | Contract stability required |",
46
+ "|---|---|---|---|",
47
+ "| TBD | TBD | TBD | provisional |",
48
+ "",
49
+ "Contract stability values:",
50
+ "- `provisional` - app can proceed with this dep at pre-lock stability; contracts may still change",
51
+ "- `locked` - app requires this contract to be locked before entering execution zone",
52
+ "",
53
+ "---",
54
+ "",
55
+ "## External Integrations",
56
+ "",
57
+ "No external integrations beyond the platform.",
58
+ "",
59
+ "---",
60
+ "",
61
+ "## App Container Inventory",
62
+ "",
63
+ "Container inventory TBD - populate after UX exploration identifies app architecture.",
64
+ "",
65
+ "---",
66
+ "",
67
+ "## Platform Containers Consumed",
68
+ "",
69
+ "| Platform container | Interface | Auth method |",
70
+ "|---|---|---|",
71
+ "| TBD | TBD | TBD |",
72
+ "",
73
+ "---",
74
+ "",
75
+ "## Communication Patterns",
76
+ "",
77
+ "1. **Synchronous REST**: TBD",
78
+ "2. **Asynchronous events**: TBD",
79
+ "3. **Offline / local state**: TBD",
80
+ "4. **Auth/authz**: TBD",
81
+ "",
82
+ "---",
83
+ "",
84
+ "## Data Ownership",
85
+ "",
86
+ "App repos own no platform domain data. Document local state, user preferences, and transient session state here.",
87
+ "",
88
+ "---",
89
+ "",
90
+ "## Related Files",
91
+ "",
92
+ "- `app-platform-dependencies.yaml` - machine-readable dependency declarations",
93
+ "- `docs/method/methods/app-exploration-workflow-guide.md` - full app workflow",
94
+ "- `docs/method/methods/app-c4-l1-template.md` - C4 L1 context diagram template",
95
+ "- `docs/platform/service-architecture.md` in the platform repo - canonical platform service inventory",
96
+ "- `docs/platform/diagrams/container-inventory.md` in the platform repo - canonical container inventory",
97
+ ].join("\n") + "\n");
98
+ }
99
+ export function renderAppClaudeSettings() {
100
+ const merged = upsertMethodManagedServers({}, buildMethodManagedServers());
101
+ return JSON.stringify(merged.settings, null, 2) + "\n";
102
+ }
103
+ export async function scaffoldAppProfile(input) {
104
+ const targetSlug = input.targetSlug ?? `local/${input.appId}`;
105
+ const description = input.description ??
106
+ "TODO: describe the app's primary role, primary users, and platform position.";
107
+ const today = input.today ?? new Date().toISOString().slice(0, 10);
108
+ const filesWritten = [];
109
+ const yamlPath = join(input.targetRepo, "app-platform-dependencies.yaml");
110
+ await writeFileAt(yamlPath, renderAppPlatformDependencies({ appId: input.appId, targetSlug }));
111
+ filesWritten.push("app-platform-dependencies.yaml");
112
+ const mdPath = join(input.targetRepo, "docs/service-architecture.md");
113
+ await writeFileAt(mdPath, renderAppServiceArchitecture({ appId: input.appId, description, today }));
114
+ filesWritten.push("docs/service-architecture.md");
115
+ await writeFileAt(join(input.targetRepo, ".claude/settings.json"), renderAppClaudeSettings());
116
+ filesWritten.push(".claude/settings.json");
117
+ await writeFileAt(join(input.targetRepo, WORKFLOW_REL_PATH), renderMethodValidationWorkflow("application"));
118
+ filesWritten.push(WORKFLOW_REL_PATH);
119
+ return { filesWritten };
120
+ }
121
+ async function writeFileAt(path, content) {
122
+ await mkdir(dirname(path), { recursive: true });
123
+ await writeFile(path, content, "utf8");
124
+ }
125
+ function titleize(kebab) {
126
+ return kebab
127
+ .split("-")
128
+ .filter((part) => part.length > 0)
129
+ .map((part) => part[0].toUpperCase() + part.slice(1))
130
+ .join(" ");
131
+ }
132
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/lib/init/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EACL,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,8BAA8B,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAUrF,MAAM,UAAU,6BAA6B,CAAC,KAG7C;IACC,OAAO,CACL;QACE,kCAAkC;QAClC,GAAG;QACH,mFAAmF;QACnF,sDAAsD;QACtD,gEAAgE;QAChE,2EAA2E;QAC3E,EAAE;QACF,YAAY,KAAK,CAAC,KAAK,GAAG;QAC1B,iBAAiB,KAAK,CAAC,UAAU,GAAG;QACpC,EAAE;QACF,wBAAwB;QACxB,qDAAqD;QACrD,MAAM;KACP,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CACpB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,KAI5C;IACC,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzC,OAAO,CACL;QACE,2BAA2B,UAAU,EAAE;QACvC,EAAE;QACF,eAAe,KAAK,CAAC,KAAK,EAAE;QAC5B,gBAAgB;QAChB,qBAAqB,KAAK,CAAC,KAAK,EAAE;QAClC,+FAA+F;QAC/F,EAAE;QACF,KAAK;QACL,EAAE;QACF,gBAAgB;QAChB,EAAE;QACF,KAAK,CAAC,WAAW;QACjB,EAAE;QACF,KAAK;QACL,EAAE;QACF,kCAAkC;QAClC,EAAE;QACF,uFAAuF;QACvF,2DAA2D;QAC3D,EAAE;QACF,2EAA2E;QAC3E,mBAAmB;QACnB,mCAAmC;QACnC,EAAE;QACF,4BAA4B;QAC5B,mGAAmG;QACnG,qFAAqF;QACrF,EAAE;QACF,KAAK;QACL,EAAE;QACF,0BAA0B;QAC1B,EAAE;QACF,+CAA+C;QAC/C,EAAE;QACF,KAAK;QACL,EAAE;QACF,4BAA4B;QAC5B,EAAE;QACF,sFAAsF;QACtF,EAAE;QACF,KAAK;QACL,EAAE;QACF,iCAAiC;QACjC,EAAE;QACF,kDAAkD;QAClD,eAAe;QACf,qBAAqB;QACrB,EAAE;QACF,KAAK;QACL,EAAE;QACF,2BAA2B;QAC3B,EAAE;QACF,8BAA8B;QAC9B,iCAAiC;QACjC,mCAAmC;QACnC,wBAAwB;QACxB,EAAE;QACF,KAAK;QACL,EAAE;QACF,mBAAmB;QACnB,EAAE;QACF,kHAAkH;QAClH,EAAE;QACF,KAAK;QACL,EAAE;QACF,kBAAkB;QAClB,EAAE;QACF,+EAA+E;QAC/E,+EAA+E;QAC/E,gFAAgF;QAChF,uGAAuG;QACvG,wGAAwG;KACzG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CACpB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,MAAM,MAAM,GAAG,0BAA0B,CAAC,EAAE,EAAE,yBAAyB,EAAE,CAAC,CAAC;IAC3E,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAA4B;IAE5B,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,SAAS,KAAK,CAAC,KAAK,EAAE,CAAC;IAC9D,MAAM,WAAW,GACf,KAAK,CAAC,WAAW;QACjB,8EAA8E,CAAC;IACjF,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEnE,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,gCAAgC,CAAC,CAAC;IAC1E,MAAM,WAAW,CACf,QAAQ,EACR,6BAA6B,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC,CAClE,CAAC;IACF,YAAY,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAEpD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,8BAA8B,CAAC,CAAC;IACtE,MAAM,WAAW,CACf,MAAM,EACN,4BAA4B,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CACzE,CAAC;IACF,YAAY,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAElD,MAAM,WAAW,CACf,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,uBAAuB,CAAC,EAC/C,uBAAuB,EAAE,CAC1B,CAAC;IACF,YAAY,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IAE3C,MAAM,WAAW,CACf,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,iBAAiB,CAAC,EACzC,8BAA8B,CAAC,aAAa,CAAC,CAC9C,CAAC;IACF,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAErC,OAAO,EAAE,YAAY,EAAE,CAAC;AAC1B,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,OAAe;IACtD,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa;IAC7B,OAAO,KAAK;SACT,KAAK,CAAC,GAAG,CAAC;SACV,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;SACjC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACrD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Renders .github/workflows/method-validation.yml per ADR 0129.
3
+ *
4
+ * The template in this file is the source of truth for what
5
+ * `sdd-cli init` / `sdd-cli sync` writes. It mirrors the
6
+ * human-readable `orchestration/templates/ci/method-validation.yml.hbs`
7
+ * in sdd-method; the two must stay in lockstep.
8
+ *
9
+ * Output wraps a `# method-managed: begin` / `# method-managed: end`
10
+ * block-marker pair so the sync path can preserve adopter-authored
11
+ * content outside the block.
12
+ */
13
+ import type { Profile } from "../repo-kind.js";
14
+ export declare const WORKFLOW_REL_PATH = ".github/workflows/method-validation.yml";
15
+ export declare const BLOCK_BEGIN = "# method-managed: begin";
16
+ export declare const BLOCK_END = "# method-managed: end";
17
+ /**
18
+ * Full file content (block + adopter-extension footer). Used by
19
+ * `sdd-cli init` to write a fresh workflow.
20
+ */
21
+ export declare function renderMethodValidationWorkflow(profile: Profile): string;
22
+ /**
23
+ * Method-managed slice only (begin marker through end marker). Used
24
+ * by `sdd-cli sync` as the `incomingBlock` argument to
25
+ * `writeMarkedBlockFile` so adopter content outside the markers is
26
+ * preserved verbatim.
27
+ */
28
+ export declare function renderMethodManagedWorkflowBlock(profile: Profile): string;
29
+ //# sourceMappingURL=ci-workflow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ci-workflow.d.ts","sourceRoot":"","sources":["../../../src/lib/init/ci-workflow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C,eAAO,MAAM,iBAAiB,4CAA4C,CAAC;AAC3E,eAAO,MAAM,WAAW,4BAA4B,CAAC;AACrD,eAAO,MAAM,SAAS,0BAA0B,CAAC;AAEjD;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAGvE;AAED;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAEzE"}