wizz-method 1.0.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 (761) hide show
  1. package/.claude-plugin/marketplace.json +80 -0
  2. package/AGENTS.md +12 -0
  3. package/LICENSE +30 -0
  4. package/README.md +72 -0
  5. package/bmad-modules.yaml +77 -0
  6. package/build/artifacts/llms-full.txt +4049 -0
  7. package/build/artifacts/llms.txt +28 -0
  8. package/build/site/404.html +55 -0
  9. package/build/site/_astro/MobileTableOfContents.astro_astro_type_script_index_0_lang.hwBsy0Mo.js +1 -0
  10. package/build/site/_astro/Search.astro_astro_type_script_index_0_lang.cjYDvRdi.js +1 -0
  11. package/build/site/_astro/TableOfContents.astro_astro_type_script_index_0_lang.FuRcXuRY.js +1 -0
  12. package/build/site/_astro/ec.0vx5m.js +3 -0
  13. package/build/site/_astro/ec.v4551.css +1 -0
  14. package/build/site/_astro/index.DdjI3lF_.css +1 -0
  15. package/build/site/_astro/page.B1D-nYk3.js +1 -0
  16. package/build/site/_astro/print.DNXP8c50.css +1 -0
  17. package/build/site/_astro/ui-core.D_Lfcn_I.js +2 -0
  18. package/build/site/cs/404/index.html +42 -0
  19. package/build/site/cs/explanation/advanced-elicitation/index.html +105 -0
  20. package/build/site/cs/explanation/adversarial-review/index.html +109 -0
  21. package/build/site/cs/explanation/analysis-phase/index.html +129 -0
  22. package/build/site/cs/explanation/brainstorming/index.html +92 -0
  23. package/build/site/cs/explanation/checkpoint-preview/index.html +121 -0
  24. package/build/site/cs/explanation/established-projects-faq/index.html +107 -0
  25. package/build/site/cs/explanation/forensic-investigation/index.html +167 -0
  26. package/build/site/cs/explanation/named-agents/index.html +187 -0
  27. package/build/site/cs/explanation/party-mode/index.html +101 -0
  28. package/build/site/cs/explanation/preventing-agent-conflicts/index.html +185 -0
  29. package/build/site/cs/explanation/project-context/index.html +198 -0
  30. package/build/site/cs/explanation/quick-dev/index.html +113 -0
  31. package/build/site/cs/explanation/web-bundles/index.html +178 -0
  32. package/build/site/cs/explanation/why-solutioning-matters/index.html +168 -0
  33. package/build/site/cs/how-to/customize-bmad/index.html +197 -0
  34. package/build/site/cs/how-to/established-projects/index.html +165 -0
  35. package/build/site/cs/how-to/expand-bmad-for-your-org/index.html +245 -0
  36. package/build/site/cs/how-to/get-answers-about-bmad/index.html +179 -0
  37. package/build/site/cs/how-to/install-bmad/index.html +124 -0
  38. package/build/site/cs/how-to/install-custom-modules/index.html +197 -0
  39. package/build/site/cs/how-to/non-interactive-installation/index.html +255 -0
  40. package/build/site/cs/how-to/project-context/index.html +138 -0
  41. package/build/site/cs/how-to/quick-fixes/index.html +122 -0
  42. package/build/site/cs/how-to/shard-large-documents/index.html +103 -0
  43. package/build/site/cs/how-to/upgrade-to-v6/index.html +185 -0
  44. package/build/site/cs/how-to/use-web-bundles/index.html +99 -0
  45. package/build/site/cs/index.html +129 -0
  46. package/build/site/cs/reference/agents/index.html +173 -0
  47. package/build/site/cs/reference/commands/index.html +250 -0
  48. package/build/site/cs/reference/core-tools/index.html +337 -0
  49. package/build/site/cs/reference/modules/index.html +132 -0
  50. package/build/site/cs/reference/testing/index.html +218 -0
  51. package/build/site/cs/reference/workflow-map/index.html +240 -0
  52. package/build/site/cs/roadmap/index.html +77 -0
  53. package/build/site/cs/tutorials/getting-started/index.html +382 -0
  54. package/build/site/diagrams/checkpoint-preview-diagram-fr.webp +0 -0
  55. package/build/site/diagrams/checkpoint-preview-diagram.png +0 -0
  56. package/build/site/diagrams/quick-dev-diagram-fr.webp +0 -0
  57. package/build/site/diagrams/quick-dev-diagram.png +0 -0
  58. package/build/site/explanation/advanced-elicitation/index.html +105 -0
  59. package/build/site/explanation/adversarial-review/index.html +109 -0
  60. package/build/site/explanation/analysis-phase/index.html +129 -0
  61. package/build/site/explanation/brainstorming/index.html +92 -0
  62. package/build/site/explanation/checkpoint-preview/index.html +121 -0
  63. package/build/site/explanation/established-projects-faq/index.html +107 -0
  64. package/build/site/explanation/forensic-investigation/index.html +167 -0
  65. package/build/site/explanation/named-agents/index.html +187 -0
  66. package/build/site/explanation/party-mode/index.html +256 -0
  67. package/build/site/explanation/preventing-agent-conflicts/index.html +185 -0
  68. package/build/site/explanation/project-context/index.html +198 -0
  69. package/build/site/explanation/quick-dev/index.html +113 -0
  70. package/build/site/explanation/web-bundles/index.html +178 -0
  71. package/build/site/explanation/why-solutioning-matters/index.html +168 -0
  72. package/build/site/fr/404/index.html +42 -0
  73. package/build/site/fr/explanation/advanced-elicitation/index.html +105 -0
  74. package/build/site/fr/explanation/adversarial-review/index.html +126 -0
  75. package/build/site/fr/explanation/analysis-phase/index.html +137 -0
  76. package/build/site/fr/explanation/brainstorming/index.html +92 -0
  77. package/build/site/fr/explanation/checkpoint-preview/index.html +121 -0
  78. package/build/site/fr/explanation/established-projects-faq/index.html +107 -0
  79. package/build/site/fr/explanation/forensic-investigation/index.html +194 -0
  80. package/build/site/fr/explanation/named-agents/index.html +187 -0
  81. package/build/site/fr/explanation/party-mode/index.html +112 -0
  82. package/build/site/fr/explanation/preventing-agent-conflicts/index.html +196 -0
  83. package/build/site/fr/explanation/project-context/index.html +198 -0
  84. package/build/site/fr/explanation/quick-dev/index.html +127 -0
  85. package/build/site/fr/explanation/web-bundles/index.html +198 -0
  86. package/build/site/fr/explanation/why-solutioning-matters/index.html +191 -0
  87. package/build/site/fr/how-to/customize-bmad/index.html +277 -0
  88. package/build/site/fr/how-to/established-projects/index.html +176 -0
  89. package/build/site/fr/how-to/expand-bmad-for-your-org/index.html +245 -0
  90. package/build/site/fr/how-to/get-answers-about-bmad/index.html +129 -0
  91. package/build/site/fr/how-to/install-bmad/index.html +330 -0
  92. package/build/site/fr/how-to/install-custom-modules/index.html +197 -0
  93. package/build/site/fr/how-to/non-interactive-installation/index.html +73 -0
  94. package/build/site/fr/how-to/project-context/index.html +138 -0
  95. package/build/site/fr/how-to/quick-fixes/index.html +130 -0
  96. package/build/site/fr/how-to/shard-large-documents/index.html +103 -0
  97. package/build/site/fr/how-to/upgrade-to-v6/index.html +202 -0
  98. package/build/site/fr/how-to/use-web-bundles/index.html +99 -0
  99. package/build/site/fr/index.html +144 -0
  100. package/build/site/fr/reference/agents/index.html +179 -0
  101. package/build/site/fr/reference/commands/index.html +264 -0
  102. package/build/site/fr/reference/core-tools/index.html +392 -0
  103. package/build/site/fr/reference/modules/index.html +146 -0
  104. package/build/site/fr/reference/testing/index.html +229 -0
  105. package/build/site/fr/reference/workflow-map/index.html +282 -0
  106. package/build/site/fr/roadmap/index.html +77 -0
  107. package/build/site/fr/tutorials/getting-started/index.html +406 -0
  108. package/build/site/how-to/customize-bmad/index.html +277 -0
  109. package/build/site/how-to/established-projects/index.html +165 -0
  110. package/build/site/how-to/expand-bmad-for-your-org/index.html +245 -0
  111. package/build/site/how-to/get-answers-about-bmad/index.html +129 -0
  112. package/build/site/how-to/install-bmad/index.html +330 -0
  113. package/build/site/how-to/install-custom-modules/index.html +197 -0
  114. package/build/site/how-to/non-interactive-installation/index.html +73 -0
  115. package/build/site/how-to/project-context/index.html +141 -0
  116. package/build/site/how-to/quick-fixes/index.html +122 -0
  117. package/build/site/how-to/shard-large-documents/index.html +103 -0
  118. package/build/site/how-to/upgrade-to-v6/index.html +185 -0
  119. package/build/site/how-to/use-web-bundles/index.html +99 -0
  120. package/build/site/img/bmad-dark.png +0 -0
  121. package/build/site/img/bmad-light.png +0 -0
  122. package/build/site/index.html +128 -0
  123. package/build/site/llms-full.txt +4049 -0
  124. package/build/site/llms.txt +28 -0
  125. package/build/site/pagefind/fragment/cs-cz_178b946.pf_fragment +0 -0
  126. package/build/site/pagefind/fragment/cs-cz_19e1744.pf_fragment +0 -0
  127. package/build/site/pagefind/fragment/cs-cz_1b81518.pf_fragment +0 -0
  128. package/build/site/pagefind/fragment/cs-cz_24fd94a.pf_fragment +0 -0
  129. package/build/site/pagefind/fragment/cs-cz_25c5ff1.pf_fragment +0 -0
  130. package/build/site/pagefind/fragment/cs-cz_2a7d8c4.pf_fragment +0 -0
  131. package/build/site/pagefind/fragment/cs-cz_2b14d1f.pf_fragment +0 -0
  132. package/build/site/pagefind/fragment/cs-cz_34d3775.pf_fragment +0 -0
  133. package/build/site/pagefind/fragment/cs-cz_366f93d.pf_fragment +0 -0
  134. package/build/site/pagefind/fragment/cs-cz_4761b65.pf_fragment +0 -0
  135. package/build/site/pagefind/fragment/cs-cz_4d1a40a.pf_fragment +0 -0
  136. package/build/site/pagefind/fragment/cs-cz_57dfabb.pf_fragment +0 -0
  137. package/build/site/pagefind/fragment/cs-cz_5c68f33.pf_fragment +0 -0
  138. package/build/site/pagefind/fragment/cs-cz_5efaba9.pf_fragment +0 -0
  139. package/build/site/pagefind/fragment/cs-cz_5f63a83.pf_fragment +0 -0
  140. package/build/site/pagefind/fragment/cs-cz_73bbdce.pf_fragment +0 -0
  141. package/build/site/pagefind/fragment/cs-cz_7b6af37.pf_fragment +0 -0
  142. package/build/site/pagefind/fragment/cs-cz_7d51fe5.pf_fragment +0 -0
  143. package/build/site/pagefind/fragment/cs-cz_7db5922.pf_fragment +0 -0
  144. package/build/site/pagefind/fragment/cs-cz_83e7116.pf_fragment +0 -0
  145. package/build/site/pagefind/fragment/cs-cz_83fec4e.pf_fragment +0 -0
  146. package/build/site/pagefind/fragment/cs-cz_84972ee.pf_fragment +0 -0
  147. package/build/site/pagefind/fragment/cs-cz_94e9289.pf_fragment +0 -0
  148. package/build/site/pagefind/fragment/cs-cz_a0a122c.pf_fragment +0 -0
  149. package/build/site/pagefind/fragment/cs-cz_a3e7fad.pf_fragment +0 -0
  150. package/build/site/pagefind/fragment/cs-cz_af43e66.pf_fragment +0 -0
  151. package/build/site/pagefind/fragment/cs-cz_b4f4e0a.pf_fragment +0 -0
  152. package/build/site/pagefind/fragment/cs-cz_b51b8b3.pf_fragment +0 -0
  153. package/build/site/pagefind/fragment/cs-cz_ba705d5.pf_fragment +0 -0
  154. package/build/site/pagefind/fragment/cs-cz_c315625.pf_fragment +0 -0
  155. package/build/site/pagefind/fragment/cs-cz_cf5138a.pf_fragment +0 -0
  156. package/build/site/pagefind/fragment/cs-cz_df8bdfe.pf_fragment +0 -0
  157. package/build/site/pagefind/fragment/cs-cz_e1b56f8.pf_fragment +0 -0
  158. package/build/site/pagefind/fragment/cs-cz_e3e33bb.pf_fragment +0 -0
  159. package/build/site/pagefind/fragment/cs-cz_f9d07b3.pf_fragment +0 -0
  160. package/build/site/pagefind/fragment/en_026af96.pf_fragment +0 -0
  161. package/build/site/pagefind/fragment/en_132ea1f.pf_fragment +0 -0
  162. package/build/site/pagefind/fragment/en_15ee460.pf_fragment +0 -0
  163. package/build/site/pagefind/fragment/en_171773c.pf_fragment +0 -0
  164. package/build/site/pagefind/fragment/en_1a7ec42.pf_fragment +0 -0
  165. package/build/site/pagefind/fragment/en_1bb5ebb.pf_fragment +0 -0
  166. package/build/site/pagefind/fragment/en_229434b.pf_fragment +0 -0
  167. package/build/site/pagefind/fragment/en_22b33a0.pf_fragment +0 -0
  168. package/build/site/pagefind/fragment/en_38efcf3.pf_fragment +0 -0
  169. package/build/site/pagefind/fragment/en_3d17cef.pf_fragment +0 -0
  170. package/build/site/pagefind/fragment/en_426a8fd.pf_fragment +0 -0
  171. package/build/site/pagefind/fragment/en_446b27a.pf_fragment +0 -0
  172. package/build/site/pagefind/fragment/en_582ecad.pf_fragment +0 -0
  173. package/build/site/pagefind/fragment/en_5d6b1f1.pf_fragment +0 -0
  174. package/build/site/pagefind/fragment/en_6465dfb.pf_fragment +0 -0
  175. package/build/site/pagefind/fragment/en_66f3f7a.pf_fragment +0 -0
  176. package/build/site/pagefind/fragment/en_68872f8.pf_fragment +0 -0
  177. package/build/site/pagefind/fragment/en_6e9deef.pf_fragment +0 -0
  178. package/build/site/pagefind/fragment/en_70a6a7e.pf_fragment +0 -0
  179. package/build/site/pagefind/fragment/en_73f0b1e.pf_fragment +0 -0
  180. package/build/site/pagefind/fragment/en_768fd99.pf_fragment +0 -0
  181. package/build/site/pagefind/fragment/en_7e52baa.pf_fragment +0 -0
  182. package/build/site/pagefind/fragment/en_8068cdc.pf_fragment +0 -0
  183. package/build/site/pagefind/fragment/en_9385c94.pf_fragment +0 -0
  184. package/build/site/pagefind/fragment/en_95b9c04.pf_fragment +0 -0
  185. package/build/site/pagefind/fragment/en_9a95e82.pf_fragment +0 -0
  186. package/build/site/pagefind/fragment/en_a66c4ef.pf_fragment +0 -0
  187. package/build/site/pagefind/fragment/en_ac6318c.pf_fragment +0 -0
  188. package/build/site/pagefind/fragment/en_bba8f66.pf_fragment +0 -0
  189. package/build/site/pagefind/fragment/en_d9f7193.pf_fragment +0 -0
  190. package/build/site/pagefind/fragment/en_e0e52b1.pf_fragment +0 -0
  191. package/build/site/pagefind/fragment/en_ece4cbe.pf_fragment +0 -0
  192. package/build/site/pagefind/fragment/en_ed6969c.pf_fragment +0 -0
  193. package/build/site/pagefind/fragment/en_f12187d.pf_fragment +0 -0
  194. package/build/site/pagefind/fragment/en_f643df1.pf_fragment +0 -0
  195. package/build/site/pagefind/fragment/fr-fr_10fdc25.pf_fragment +0 -0
  196. package/build/site/pagefind/fragment/fr-fr_132e2e0.pf_fragment +0 -0
  197. package/build/site/pagefind/fragment/fr-fr_1529d31.pf_fragment +0 -0
  198. package/build/site/pagefind/fragment/fr-fr_1531e2c.pf_fragment +0 -0
  199. package/build/site/pagefind/fragment/fr-fr_1d51fb7.pf_fragment +0 -0
  200. package/build/site/pagefind/fragment/fr-fr_27d0aaf.pf_fragment +0 -0
  201. package/build/site/pagefind/fragment/fr-fr_583aea8.pf_fragment +0 -0
  202. package/build/site/pagefind/fragment/fr-fr_5c4f14f.pf_fragment +0 -0
  203. package/build/site/pagefind/fragment/fr-fr_654bb96.pf_fragment +0 -0
  204. package/build/site/pagefind/fragment/fr-fr_65e37ae.pf_fragment +0 -0
  205. package/build/site/pagefind/fragment/fr-fr_6898afa.pf_fragment +0 -0
  206. package/build/site/pagefind/fragment/fr-fr_68d0a0b.pf_fragment +0 -0
  207. package/build/site/pagefind/fragment/fr-fr_6ce4bc1.pf_fragment +0 -0
  208. package/build/site/pagefind/fragment/fr-fr_7ddd126.pf_fragment +0 -0
  209. package/build/site/pagefind/fragment/fr-fr_7f50a2e.pf_fragment +0 -0
  210. package/build/site/pagefind/fragment/fr-fr_8d2df1b.pf_fragment +0 -0
  211. package/build/site/pagefind/fragment/fr-fr_9b8d33d.pf_fragment +0 -0
  212. package/build/site/pagefind/fragment/fr-fr_9c7f851.pf_fragment +0 -0
  213. package/build/site/pagefind/fragment/fr-fr_9cf6892.pf_fragment +0 -0
  214. package/build/site/pagefind/fragment/fr-fr_a512e53.pf_fragment +0 -0
  215. package/build/site/pagefind/fragment/fr-fr_a7ad3f6.pf_fragment +0 -0
  216. package/build/site/pagefind/fragment/fr-fr_afeac81.pf_fragment +0 -0
  217. package/build/site/pagefind/fragment/fr-fr_b364826.pf_fragment +0 -0
  218. package/build/site/pagefind/fragment/fr-fr_bdb3e1e.pf_fragment +0 -0
  219. package/build/site/pagefind/fragment/fr-fr_c4884c3.pf_fragment +0 -0
  220. package/build/site/pagefind/fragment/fr-fr_c54c827.pf_fragment +0 -0
  221. package/build/site/pagefind/fragment/fr-fr_ca664c2.pf_fragment +0 -0
  222. package/build/site/pagefind/fragment/fr-fr_ce3562d.pf_fragment +0 -0
  223. package/build/site/pagefind/fragment/fr-fr_d086476.pf_fragment +0 -0
  224. package/build/site/pagefind/fragment/fr-fr_d0b4e62.pf_fragment +0 -0
  225. package/build/site/pagefind/fragment/fr-fr_df4c57f.pf_fragment +0 -0
  226. package/build/site/pagefind/fragment/fr-fr_e1c2fa8.pf_fragment +0 -0
  227. package/build/site/pagefind/fragment/fr-fr_eaa1363.pf_fragment +0 -0
  228. package/build/site/pagefind/fragment/fr-fr_f456c69.pf_fragment +0 -0
  229. package/build/site/pagefind/fragment/fr-fr_fe8d783.pf_fragment +0 -0
  230. package/build/site/pagefind/fragment/vi-vn_1e5b1da.pf_fragment +0 -0
  231. package/build/site/pagefind/fragment/vi-vn_3268948.pf_fragment +0 -0
  232. package/build/site/pagefind/fragment/vi-vn_37f0bf6.pf_fragment +0 -0
  233. package/build/site/pagefind/fragment/vi-vn_485232c.pf_fragment +0 -0
  234. package/build/site/pagefind/fragment/vi-vn_4d3bd13.pf_fragment +0 -0
  235. package/build/site/pagefind/fragment/vi-vn_4e578d2.pf_fragment +0 -0
  236. package/build/site/pagefind/fragment/vi-vn_4ed2533.pf_fragment +0 -0
  237. package/build/site/pagefind/fragment/vi-vn_533743c.pf_fragment +0 -0
  238. package/build/site/pagefind/fragment/vi-vn_5ffd258.pf_fragment +0 -0
  239. package/build/site/pagefind/fragment/vi-vn_6bfed03.pf_fragment +0 -0
  240. package/build/site/pagefind/fragment/vi-vn_6f2ed6d.pf_fragment +0 -0
  241. package/build/site/pagefind/fragment/vi-vn_71aa305.pf_fragment +0 -0
  242. package/build/site/pagefind/fragment/vi-vn_7577c2c.pf_fragment +0 -0
  243. package/build/site/pagefind/fragment/vi-vn_7883435.pf_fragment +0 -0
  244. package/build/site/pagefind/fragment/vi-vn_7f2e496.pf_fragment +0 -0
  245. package/build/site/pagefind/fragment/vi-vn_7fce614.pf_fragment +0 -0
  246. package/build/site/pagefind/fragment/vi-vn_86274a6.pf_fragment +0 -0
  247. package/build/site/pagefind/fragment/vi-vn_8c4fd62.pf_fragment +0 -0
  248. package/build/site/pagefind/fragment/vi-vn_a06c773.pf_fragment +0 -0
  249. package/build/site/pagefind/fragment/vi-vn_a2e535b.pf_fragment +0 -0
  250. package/build/site/pagefind/fragment/vi-vn_a4b9dbc.pf_fragment +0 -0
  251. package/build/site/pagefind/fragment/vi-vn_b2d8e01.pf_fragment +0 -0
  252. package/build/site/pagefind/fragment/vi-vn_b631cf6.pf_fragment +0 -0
  253. package/build/site/pagefind/fragment/vi-vn_c970ebb.pf_fragment +0 -0
  254. package/build/site/pagefind/fragment/vi-vn_d229f2a.pf_fragment +0 -0
  255. package/build/site/pagefind/fragment/vi-vn_d685e88.pf_fragment +0 -0
  256. package/build/site/pagefind/fragment/vi-vn_dab2c52.pf_fragment +0 -0
  257. package/build/site/pagefind/fragment/vi-vn_df5a829.pf_fragment +0 -0
  258. package/build/site/pagefind/fragment/vi-vn_dfcf280.pf_fragment +0 -0
  259. package/build/site/pagefind/fragment/vi-vn_e8ec8cf.pf_fragment +0 -0
  260. package/build/site/pagefind/fragment/vi-vn_e9f3439.pf_fragment +0 -0
  261. package/build/site/pagefind/fragment/vi-vn_f0bfe83.pf_fragment +0 -0
  262. package/build/site/pagefind/fragment/vi-vn_f5462f7.pf_fragment +0 -0
  263. package/build/site/pagefind/fragment/vi-vn_fcc9bb7.pf_fragment +0 -0
  264. package/build/site/pagefind/fragment/vi-vn_fd55264.pf_fragment +0 -0
  265. package/build/site/pagefind/fragment/vi-vn_ffd39df.pf_fragment +0 -0
  266. package/build/site/pagefind/fragment/zh-cn_119c5bb.pf_fragment +0 -0
  267. package/build/site/pagefind/fragment/zh-cn_198e8ce.pf_fragment +0 -0
  268. package/build/site/pagefind/fragment/zh-cn_19b87a8.pf_fragment +0 -0
  269. package/build/site/pagefind/fragment/zh-cn_1edc3a5.pf_fragment +0 -0
  270. package/build/site/pagefind/fragment/zh-cn_36ae67a.pf_fragment +0 -0
  271. package/build/site/pagefind/fragment/zh-cn_37ab313.pf_fragment +0 -0
  272. package/build/site/pagefind/fragment/zh-cn_3b56778.pf_fragment +0 -0
  273. package/build/site/pagefind/fragment/zh-cn_5735cd4.pf_fragment +0 -0
  274. package/build/site/pagefind/fragment/zh-cn_6110769.pf_fragment +0 -0
  275. package/build/site/pagefind/fragment/zh-cn_6d66d9e.pf_fragment +0 -0
  276. package/build/site/pagefind/fragment/zh-cn_731b3f5.pf_fragment +0 -0
  277. package/build/site/pagefind/fragment/zh-cn_82885ff.pf_fragment +0 -0
  278. package/build/site/pagefind/fragment/zh-cn_8be7aac.pf_fragment +0 -0
  279. package/build/site/pagefind/fragment/zh-cn_8c3fa9e.pf_fragment +0 -0
  280. package/build/site/pagefind/fragment/zh-cn_8f452f7.pf_fragment +0 -0
  281. package/build/site/pagefind/fragment/zh-cn_96ccc61.pf_fragment +0 -0
  282. package/build/site/pagefind/fragment/zh-cn_9f29932.pf_fragment +0 -0
  283. package/build/site/pagefind/fragment/zh-cn_a24d786.pf_fragment +0 -0
  284. package/build/site/pagefind/fragment/zh-cn_a598178.pf_fragment +0 -0
  285. package/build/site/pagefind/fragment/zh-cn_a603f17.pf_fragment +0 -0
  286. package/build/site/pagefind/fragment/zh-cn_a9cffcf.pf_fragment +0 -0
  287. package/build/site/pagefind/fragment/zh-cn_c1bebbd.pf_fragment +0 -0
  288. package/build/site/pagefind/fragment/zh-cn_c38cf84.pf_fragment +0 -0
  289. package/build/site/pagefind/fragment/zh-cn_c42a851.pf_fragment +0 -0
  290. package/build/site/pagefind/fragment/zh-cn_ce57c6e.pf_fragment +0 -0
  291. package/build/site/pagefind/fragment/zh-cn_d4b5cd5.pf_fragment +0 -0
  292. package/build/site/pagefind/fragment/zh-cn_da40e6b.pf_fragment +0 -0
  293. package/build/site/pagefind/fragment/zh-cn_da777ec.pf_fragment +0 -0
  294. package/build/site/pagefind/fragment/zh-cn_de145f9.pf_fragment +0 -0
  295. package/build/site/pagefind/fragment/zh-cn_e376bf7.pf_fragment +0 -0
  296. package/build/site/pagefind/fragment/zh-cn_e663978.pf_fragment +0 -0
  297. package/build/site/pagefind/fragment/zh-cn_e97a13b.pf_fragment +0 -0
  298. package/build/site/pagefind/fragment/zh-cn_f13873d.pf_fragment +0 -0
  299. package/build/site/pagefind/fragment/zh-cn_f25fad4.pf_fragment +0 -0
  300. package/build/site/pagefind/fragment/zh-cn_f7edf48.pf_fragment +0 -0
  301. package/build/site/pagefind/index/cs-cz_24147b6.pf_index +0 -0
  302. package/build/site/pagefind/index/cs-cz_82fc657.pf_index +0 -0
  303. package/build/site/pagefind/index/cs-cz_8f6a83c.pf_index +0 -0
  304. package/build/site/pagefind/index/en_432f933.pf_index +0 -0
  305. package/build/site/pagefind/index/en_70c744a.pf_index +0 -0
  306. package/build/site/pagefind/index/en_fd84991.pf_index +0 -0
  307. package/build/site/pagefind/index/fr-fr_7275484.pf_index +0 -0
  308. package/build/site/pagefind/index/fr-fr_8096dd3.pf_index +0 -0
  309. package/build/site/pagefind/index/fr-fr_b34df12.pf_index +0 -0
  310. package/build/site/pagefind/index/fr-fr_e6ad665.pf_index +0 -0
  311. package/build/site/pagefind/index/vi-vn_129cf7e.pf_index +0 -0
  312. package/build/site/pagefind/index/vi-vn_7f54472.pf_index +0 -0
  313. package/build/site/pagefind/index/vi-vn_c1f31ce.pf_index +0 -0
  314. package/build/site/pagefind/index/vi-vn_c56f634.pf_index +0 -0
  315. package/build/site/pagefind/index/zh-cn_5ed0486.pf_index +0 -0
  316. package/build/site/pagefind/index/zh-cn_ad4d724.pf_index +0 -0
  317. package/build/site/pagefind/index/zh-cn_bc9f7b6.pf_index +0 -0
  318. package/build/site/pagefind/pagefind-entry.json +1 -0
  319. package/build/site/pagefind/pagefind-highlight.js +1064 -0
  320. package/build/site/pagefind/pagefind-modular-ui.css +214 -0
  321. package/build/site/pagefind/pagefind-modular-ui.js +8 -0
  322. package/build/site/pagefind/pagefind-ui.css +1 -0
  323. package/build/site/pagefind/pagefind-ui.js +2 -0
  324. package/build/site/pagefind/pagefind.cs-cz_cd39a8505eabf.pf_meta +0 -0
  325. package/build/site/pagefind/pagefind.en_8ae84a1b9c.pf_meta +0 -0
  326. package/build/site/pagefind/pagefind.fr-fr_20fca6f342d9a.pf_meta +0 -0
  327. package/build/site/pagefind/pagefind.js +6 -0
  328. package/build/site/pagefind/pagefind.vi-vn_6a45d08c2bbc8.pf_meta +0 -0
  329. package/build/site/pagefind/pagefind.zh-cn_ae911ac338eae.pf_meta +0 -0
  330. package/build/site/pagefind/wasm.en.pagefind +0 -0
  331. package/build/site/pagefind/wasm.fr-fr.pagefind +0 -0
  332. package/build/site/pagefind/wasm.unknown.pagefind +0 -0
  333. package/build/site/reference/agents/index.html +168 -0
  334. package/build/site/reference/commands/index.html +254 -0
  335. package/build/site/reference/core-tools/index.html +384 -0
  336. package/build/site/reference/modules/index.html +132 -0
  337. package/build/site/reference/testing/index.html +218 -0
  338. package/build/site/reference/workflow-map/index.html +266 -0
  339. package/build/site/roadmap/index.html +77 -0
  340. package/build/site/robots.txt +37 -0
  341. package/build/site/sitemap-0.xml +1 -0
  342. package/build/site/sitemap-index.xml +1 -0
  343. package/build/site/tutorials/getting-started/index.html +386 -0
  344. package/build/site/vi-vn/404/index.html +42 -0
  345. package/build/site/vi-vn/bmad-developer-guide/index.html +794 -0
  346. package/build/site/vi-vn/explanation/advanced-elicitation/index.html +105 -0
  347. package/build/site/vi-vn/explanation/adversarial-review/index.html +109 -0
  348. package/build/site/vi-vn/explanation/analysis-phase/index.html +129 -0
  349. package/build/site/vi-vn/explanation/brainstorming/index.html +92 -0
  350. package/build/site/vi-vn/explanation/checkpoint-preview/index.html +121 -0
  351. package/build/site/vi-vn/explanation/established-projects-faq/index.html +107 -0
  352. package/build/site/vi-vn/explanation/forensic-investigation/index.html +167 -0
  353. package/build/site/vi-vn/explanation/named-agents/index.html +187 -0
  354. package/build/site/vi-vn/explanation/party-mode/index.html +101 -0
  355. package/build/site/vi-vn/explanation/preventing-agent-conflicts/index.html +185 -0
  356. package/build/site/vi-vn/explanation/project-context/index.html +198 -0
  357. package/build/site/vi-vn/explanation/quick-dev/index.html +113 -0
  358. package/build/site/vi-vn/explanation/web-bundles/index.html +178 -0
  359. package/build/site/vi-vn/explanation/why-solutioning-matters/index.html +168 -0
  360. package/build/site/vi-vn/how-to/customize-bmad/index.html +277 -0
  361. package/build/site/vi-vn/how-to/established-projects/index.html +165 -0
  362. package/build/site/vi-vn/how-to/expand-bmad-for-your-org/index.html +228 -0
  363. package/build/site/vi-vn/how-to/get-answers-about-bmad/index.html +129 -0
  364. package/build/site/vi-vn/how-to/install-bmad/index.html +124 -0
  365. package/build/site/vi-vn/how-to/install-custom-modules/index.html +197 -0
  366. package/build/site/vi-vn/how-to/non-interactive-installation/index.html +300 -0
  367. package/build/site/vi-vn/how-to/project-context/index.html +138 -0
  368. package/build/site/vi-vn/how-to/quick-fixes/index.html +122 -0
  369. package/build/site/vi-vn/how-to/shard-large-documents/index.html +103 -0
  370. package/build/site/vi-vn/how-to/upgrade-to-v6/index.html +185 -0
  371. package/build/site/vi-vn/how-to/use-web-bundles/index.html +99 -0
  372. package/build/site/vi-vn/index.html +129 -0
  373. package/build/site/vi-vn/reference/agents/index.html +173 -0
  374. package/build/site/vi-vn/reference/commands/index.html +250 -0
  375. package/build/site/vi-vn/reference/core-tools/index.html +337 -0
  376. package/build/site/vi-vn/reference/modules/index.html +132 -0
  377. package/build/site/vi-vn/reference/testing/index.html +218 -0
  378. package/build/site/vi-vn/reference/workflow-map/index.html +240 -0
  379. package/build/site/vi-vn/roadmap/index.html +77 -0
  380. package/build/site/vi-vn/tutorials/getting-started/index.html +382 -0
  381. package/build/site/wizz-icon-orange.svg +7 -0
  382. package/build/site/workflow-map-diagram-fr.html +375 -0
  383. package/build/site/workflow-map-diagram.html +375 -0
  384. package/build/site/zh-cn/404/index.html +42 -0
  385. package/build/site/zh-cn/explanation/advanced-elicitation/index.html +142 -0
  386. package/build/site/zh-cn/explanation/adversarial-review/index.html +132 -0
  387. package/build/site/zh-cn/explanation/analysis-phase/index.html +129 -0
  388. package/build/site/zh-cn/explanation/brainstorming/index.html +147 -0
  389. package/build/site/zh-cn/explanation/checkpoint-preview/index.html +121 -0
  390. package/build/site/zh-cn/explanation/established-projects-faq/index.html +122 -0
  391. package/build/site/zh-cn/explanation/forensic-investigation/index.html +167 -0
  392. package/build/site/zh-cn/explanation/named-agents/index.html +187 -0
  393. package/build/site/zh-cn/explanation/party-mode/index.html +144 -0
  394. package/build/site/zh-cn/explanation/preventing-agent-conflicts/index.html +191 -0
  395. package/build/site/zh-cn/explanation/project-context/index.html +153 -0
  396. package/build/site/zh-cn/explanation/quick-dev/index.html +139 -0
  397. package/build/site/zh-cn/explanation/web-bundles/index.html +178 -0
  398. package/build/site/zh-cn/explanation/why-solutioning-matters/index.html +175 -0
  399. package/build/site/zh-cn/how-to/customize-bmad/index.html +202 -0
  400. package/build/site/zh-cn/how-to/established-projects/index.html +166 -0
  401. package/build/site/zh-cn/how-to/expand-bmad-for-your-org/index.html +223 -0
  402. package/build/site/zh-cn/how-to/get-answers-about-bmad/index.html +198 -0
  403. package/build/site/zh-cn/how-to/install-bmad/index.html +126 -0
  404. package/build/site/zh-cn/how-to/install-custom-modules/index.html +197 -0
  405. package/build/site/zh-cn/how-to/non-interactive-installation/index.html +254 -0
  406. package/build/site/zh-cn/how-to/project-context/index.html +143 -0
  407. package/build/site/zh-cn/how-to/quick-fixes/index.html +122 -0
  408. package/build/site/zh-cn/how-to/shard-large-documents/index.html +110 -0
  409. package/build/site/zh-cn/how-to/upgrade-to-v6/index.html +198 -0
  410. package/build/site/zh-cn/how-to/use-web-bundles/index.html +99 -0
  411. package/build/site/zh-cn/index.html +129 -0
  412. package/build/site/zh-cn/reference/agents/index.html +178 -0
  413. package/build/site/zh-cn/reference/commands/index.html +245 -0
  414. package/build/site/zh-cn/reference/core-tools/index.html +313 -0
  415. package/build/site/zh-cn/reference/modules/index.html +181 -0
  416. package/build/site/zh-cn/reference/testing/index.html +226 -0
  417. package/build/site/zh-cn/reference/workflow-map/index.html +238 -0
  418. package/build/site/zh-cn/roadmap/index.html +77 -0
  419. package/build/site/zh-cn/tutorials/getting-started/index.html +381 -0
  420. package/evals/bmm-skills/bmad-product-brief/evals.json +237 -0
  421. package/evals/bmm-skills/bmad-product-brief/files/branfield-memo.md +46 -0
  422. package/evals/bmm-skills/bmad-product-brief/files/forkbird-brief/addendum.md +40 -0
  423. package/evals/bmm-skills/bmad-product-brief/files/forkbird-brief/brief.md +56 -0
  424. package/evals/bmm-skills/bmad-product-brief/files/forkbird-brief/decision-log.md +27 -0
  425. package/evals/bmm-skills/bmad-product-brief/files/meridian-mobility-report.md +116 -0
  426. package/evals/bmm-skills/bmad-product-brief/files/mossridge-brief/addendum.md +41 -0
  427. package/evals/bmm-skills/bmad-product-brief/files/mossridge-brief/brief.md +57 -0
  428. package/evals/bmm-skills/bmad-product-brief/files/mossridge-brief/decision-log.md +29 -0
  429. package/evals/bmm-skills/bmad-product-brief/files/pantry-bridge-interviews.md +90 -0
  430. package/evals/bmm-skills/bmad-product-brief/files/q2-brainstorm.md +101 -0
  431. package/evals/bmm-skills/bmad-product-brief/triggers.json +18 -0
  432. package/package.json +114 -0
  433. package/removals.txt +62 -0
  434. package/src/bmm-skills/1-analysis/bmad-agent-analyst/SKILL.md +76 -0
  435. package/src/bmm-skills/1-analysis/bmad-agent-analyst/customize.toml +90 -0
  436. package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/SKILL.md +76 -0
  437. package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/customize.toml +81 -0
  438. package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/explain-concept.md +20 -0
  439. package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/mermaid-gen.md +20 -0
  440. package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/validate-doc.md +19 -0
  441. package/src/bmm-skills/1-analysis/bmad-agent-tech-writer/write-document.md +20 -0
  442. package/src/bmm-skills/1-analysis/bmad-document-project/SKILL.md +62 -0
  443. package/src/bmm-skills/1-analysis/bmad-document-project/checklist.md +245 -0
  444. package/src/bmm-skills/1-analysis/bmad-document-project/customize.toml +41 -0
  445. package/src/bmm-skills/1-analysis/bmad-document-project/documentation-requirements.csv +12 -0
  446. package/src/bmm-skills/1-analysis/bmad-document-project/instructions.md +128 -0
  447. package/src/bmm-skills/1-analysis/bmad-document-project/templates/deep-dive-template.md +345 -0
  448. package/src/bmm-skills/1-analysis/bmad-document-project/templates/index-template.md +169 -0
  449. package/src/bmm-skills/1-analysis/bmad-document-project/templates/project-overview-template.md +103 -0
  450. package/src/bmm-skills/1-analysis/bmad-document-project/templates/project-scan-report-schema.json +160 -0
  451. package/src/bmm-skills/1-analysis/bmad-document-project/templates/source-tree-template.md +135 -0
  452. package/src/bmm-skills/1-analysis/bmad-document-project/workflows/deep-dive-instructions.md +300 -0
  453. package/src/bmm-skills/1-analysis/bmad-document-project/workflows/deep-dive-workflow.md +34 -0
  454. package/src/bmm-skills/1-analysis/bmad-document-project/workflows/full-scan-instructions.md +1108 -0
  455. package/src/bmm-skills/1-analysis/bmad-document-project/workflows/full-scan-workflow.md +34 -0
  456. package/src/bmm-skills/1-analysis/bmad-prfaq/SKILL.md +135 -0
  457. package/src/bmm-skills/1-analysis/bmad-prfaq/agents/artifact-analyzer.md +60 -0
  458. package/src/bmm-skills/1-analysis/bmad-prfaq/agents/web-researcher.md +49 -0
  459. package/src/bmm-skills/1-analysis/bmad-prfaq/assets/prfaq-template.md +62 -0
  460. package/src/bmm-skills/1-analysis/bmad-prfaq/bmad-manifest.json +16 -0
  461. package/src/bmm-skills/1-analysis/bmad-prfaq/customize.toml +41 -0
  462. package/src/bmm-skills/1-analysis/bmad-prfaq/references/customer-faq.md +55 -0
  463. package/src/bmm-skills/1-analysis/bmad-prfaq/references/internal-faq.md +51 -0
  464. package/src/bmm-skills/1-analysis/bmad-prfaq/references/press-release.md +60 -0
  465. package/src/bmm-skills/1-analysis/bmad-prfaq/references/verdict.md +83 -0
  466. package/src/bmm-skills/1-analysis/bmad-product-brief/SKILL.md +91 -0
  467. package/src/bmm-skills/1-analysis/bmad-product-brief/assets/brief-template.md +41 -0
  468. package/src/bmm-skills/1-analysis/bmad-product-brief/customize.toml +99 -0
  469. package/src/bmm-skills/1-analysis/research/bmad-domain-research/SKILL.md +96 -0
  470. package/src/bmm-skills/1-analysis/research/bmad-domain-research/customize.toml +41 -0
  471. package/src/bmm-skills/1-analysis/research/bmad-domain-research/domain-steps/step-01-init.md +137 -0
  472. package/src/bmm-skills/1-analysis/research/bmad-domain-research/domain-steps/step-02-domain-analysis.md +229 -0
  473. package/src/bmm-skills/1-analysis/research/bmad-domain-research/domain-steps/step-03-competitive-landscape.md +238 -0
  474. package/src/bmm-skills/1-analysis/research/bmad-domain-research/domain-steps/step-04-regulatory-focus.md +206 -0
  475. package/src/bmm-skills/1-analysis/research/bmad-domain-research/domain-steps/step-05-technical-trends.md +234 -0
  476. package/src/bmm-skills/1-analysis/research/bmad-domain-research/domain-steps/step-06-research-synthesis.md +450 -0
  477. package/src/bmm-skills/1-analysis/research/bmad-domain-research/research.template.md +29 -0
  478. package/src/bmm-skills/1-analysis/research/bmad-market-research/SKILL.md +96 -0
  479. package/src/bmm-skills/1-analysis/research/bmad-market-research/customize.toml +41 -0
  480. package/src/bmm-skills/1-analysis/research/bmad-market-research/research.template.md +29 -0
  481. package/src/bmm-skills/1-analysis/research/bmad-market-research/steps/step-01-init.md +184 -0
  482. package/src/bmm-skills/1-analysis/research/bmad-market-research/steps/step-02-customer-behavior.md +239 -0
  483. package/src/bmm-skills/1-analysis/research/bmad-market-research/steps/step-03-customer-pain-points.md +251 -0
  484. package/src/bmm-skills/1-analysis/research/bmad-market-research/steps/step-04-customer-decisions.md +261 -0
  485. package/src/bmm-skills/1-analysis/research/bmad-market-research/steps/step-05-competitive-analysis.md +173 -0
  486. package/src/bmm-skills/1-analysis/research/bmad-market-research/steps/step-06-research-completion.md +484 -0
  487. package/src/bmm-skills/1-analysis/research/bmad-technical-research/SKILL.md +96 -0
  488. package/src/bmm-skills/1-analysis/research/bmad-technical-research/customize.toml +41 -0
  489. package/src/bmm-skills/1-analysis/research/bmad-technical-research/research.template.md +29 -0
  490. package/src/bmm-skills/1-analysis/research/bmad-technical-research/technical-steps/step-01-init.md +137 -0
  491. package/src/bmm-skills/1-analysis/research/bmad-technical-research/technical-steps/step-02-technical-overview.md +239 -0
  492. package/src/bmm-skills/1-analysis/research/bmad-technical-research/technical-steps/step-03-integration-patterns.md +248 -0
  493. package/src/bmm-skills/1-analysis/research/bmad-technical-research/technical-steps/step-04-architectural-patterns.md +202 -0
  494. package/src/bmm-skills/1-analysis/research/bmad-technical-research/technical-steps/step-05-implementation-research.md +233 -0
  495. package/src/bmm-skills/1-analysis/research/bmad-technical-research/technical-steps/step-06-research-synthesis.md +493 -0
  496. package/src/bmm-skills/2-plan-workflows/bmad-agent-pm/SKILL.md +76 -0
  497. package/src/bmm-skills/2-plan-workflows/bmad-agent-pm/customize.toml +75 -0
  498. package/src/bmm-skills/2-plan-workflows/bmad-agent-ux-designer/SKILL.md +76 -0
  499. package/src/bmm-skills/2-plan-workflows/bmad-agent-ux-designer/customize.toml +60 -0
  500. package/src/bmm-skills/2-plan-workflows/bmad-create-prd/SKILL.md +30 -0
  501. package/src/bmm-skills/2-plan-workflows/bmad-create-prd/customize.toml +41 -0
  502. package/src/bmm-skills/2-plan-workflows/bmad-edit-prd/SKILL.md +30 -0
  503. package/src/bmm-skills/2-plan-workflows/bmad-edit-prd/customize.toml +42 -0
  504. package/src/bmm-skills/2-plan-workflows/bmad-prd/SKILL.md +92 -0
  505. package/src/bmm-skills/2-plan-workflows/bmad-prd/assets/headless-schemas.md +76 -0
  506. package/src/bmm-skills/2-plan-workflows/bmad-prd/assets/prd-template.md +165 -0
  507. package/src/bmm-skills/2-plan-workflows/bmad-prd/assets/prd-validation-checklist.md +135 -0
  508. package/src/bmm-skills/2-plan-workflows/bmad-prd/assets/validation-report-template.html +325 -0
  509. package/src/bmm-skills/2-plan-workflows/bmad-prd/customize.toml +147 -0
  510. package/src/bmm-skills/2-plan-workflows/bmad-prd/references/headless.md +39 -0
  511. package/src/bmm-skills/2-plan-workflows/bmad-prd/references/validate.md +97 -0
  512. package/src/bmm-skills/2-plan-workflows/bmad-ux/SKILL.md +90 -0
  513. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/color-themes.md +9 -0
  514. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/design-directions.md +9 -0
  515. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/design-example-editorial.md +158 -0
  516. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/design-example-mobile.md +93 -0
  517. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/design-example-shadcn.md +109 -0
  518. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/excalidraw-wireframe.md +19 -0
  519. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/experience-example-mobile.md +112 -0
  520. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/experience-example-shadcn.md +133 -0
  521. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/headless-schemas.md +84 -0
  522. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/key-screens.md +29 -0
  523. package/src/bmm-skills/2-plan-workflows/bmad-ux/assets/validation-report-template.html +319 -0
  524. package/src/bmm-skills/2-plan-workflows/bmad-ux/customize.toml +100 -0
  525. package/src/bmm-skills/2-plan-workflows/bmad-ux/references/creative-tools.md +19 -0
  526. package/src/bmm-skills/2-plan-workflows/bmad-ux/references/design-md-spec.md +50 -0
  527. package/src/bmm-skills/2-plan-workflows/bmad-ux/references/headless.md +37 -0
  528. package/src/bmm-skills/2-plan-workflows/bmad-ux/references/validate.md +115 -0
  529. package/src/bmm-skills/2-plan-workflows/bmad-validate-prd/SKILL.md +30 -0
  530. package/src/bmm-skills/2-plan-workflows/bmad-validate-prd/customize.toml +42 -0
  531. package/src/bmm-skills/3-solutioning/bmad-agent-architect/SKILL.md +76 -0
  532. package/src/bmm-skills/3-solutioning/bmad-agent-architect/customize.toml +65 -0
  533. package/src/bmm-skills/3-solutioning/bmad-architecture/SKILL.md +85 -0
  534. package/src/bmm-skills/3-solutioning/bmad-architecture/assets/spine-template.md +79 -0
  535. package/src/bmm-skills/3-solutioning/bmad-architecture/customize.toml +100 -0
  536. package/src/bmm-skills/3-solutioning/bmad-architecture/references/headless.md +26 -0
  537. package/src/bmm-skills/3-solutioning/bmad-architecture/references/reviewer-gate.md +13 -0
  538. package/src/bmm-skills/3-solutioning/bmad-architecture/scripts/lint_spine.py +257 -0
  539. package/src/bmm-skills/3-solutioning/bmad-architecture/scripts/tests/test_lint_spine.py +270 -0
  540. package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/SKILL.md +91 -0
  541. package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/customize.toml +41 -0
  542. package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/steps/step-01-document-discovery.md +179 -0
  543. package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/steps/step-02-prd-analysis.md +168 -0
  544. package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/steps/step-03-epic-coverage-validation.md +169 -0
  545. package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/steps/step-04-ux-alignment.md +129 -0
  546. package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/steps/step-05-epic-quality-review.md +241 -0
  547. package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/steps/step-06-final-assessment.md +132 -0
  548. package/src/bmm-skills/3-solutioning/bmad-check-implementation-readiness/templates/readiness-report-template.md +4 -0
  549. package/src/bmm-skills/3-solutioning/bmad-create-architecture/SKILL.md +30 -0
  550. package/src/bmm-skills/3-solutioning/bmad-create-architecture/customize.toml +41 -0
  551. package/src/bmm-skills/3-solutioning/bmad-create-epics-and-stories/SKILL.md +93 -0
  552. package/src/bmm-skills/3-solutioning/bmad-create-epics-and-stories/customize.toml +41 -0
  553. package/src/bmm-skills/3-solutioning/bmad-create-epics-and-stories/steps/step-01-validate-prerequisites.md +263 -0
  554. package/src/bmm-skills/3-solutioning/bmad-create-epics-and-stories/steps/step-02-design-epics.md +242 -0
  555. package/src/bmm-skills/3-solutioning/bmad-create-epics-and-stories/steps/step-03-create-stories.md +255 -0
  556. package/src/bmm-skills/3-solutioning/bmad-create-epics-and-stories/steps/step-04-final-validation.md +143 -0
  557. package/src/bmm-skills/3-solutioning/bmad-create-epics-and-stories/templates/epics-template.md +61 -0
  558. package/src/bmm-skills/3-solutioning/bmad-generate-project-context/SKILL.md +81 -0
  559. package/src/bmm-skills/3-solutioning/bmad-generate-project-context/customize.toml +41 -0
  560. package/src/bmm-skills/3-solutioning/bmad-generate-project-context/project-context-template.md +21 -0
  561. package/src/bmm-skills/3-solutioning/bmad-generate-project-context/steps/step-01-discover.md +186 -0
  562. package/src/bmm-skills/3-solutioning/bmad-generate-project-context/steps/step-02-generate.md +321 -0
  563. package/src/bmm-skills/3-solutioning/bmad-generate-project-context/steps/step-03-complete.md +284 -0
  564. package/src/bmm-skills/4-implementation/bmad-agent-dev/SKILL.md +76 -0
  565. package/src/bmm-skills/4-implementation/bmad-agent-dev/customize.toml +95 -0
  566. package/src/bmm-skills/4-implementation/bmad-checkpoint-preview/SKILL.md +68 -0
  567. package/src/bmm-skills/4-implementation/bmad-checkpoint-preview/customize.toml +41 -0
  568. package/src/bmm-skills/4-implementation/bmad-checkpoint-preview/generate-trail.md +38 -0
  569. package/src/bmm-skills/4-implementation/bmad-checkpoint-preview/step-01-orientation.md +105 -0
  570. package/src/bmm-skills/4-implementation/bmad-checkpoint-preview/step-02-walkthrough.md +89 -0
  571. package/src/bmm-skills/4-implementation/bmad-checkpoint-preview/step-03-detail-pass.md +106 -0
  572. package/src/bmm-skills/4-implementation/bmad-checkpoint-preview/step-04-testing.md +74 -0
  573. package/src/bmm-skills/4-implementation/bmad-checkpoint-preview/step-05-wrapup.md +30 -0
  574. package/src/bmm-skills/4-implementation/bmad-code-review/SKILL.md +93 -0
  575. package/src/bmm-skills/4-implementation/bmad-code-review/customize.toml +41 -0
  576. package/src/bmm-skills/4-implementation/bmad-code-review/steps/step-01-gather-context.md +85 -0
  577. package/src/bmm-skills/4-implementation/bmad-code-review/steps/step-02-review.md +35 -0
  578. package/src/bmm-skills/4-implementation/bmad-code-review/steps/step-03-triage.md +49 -0
  579. package/src/bmm-skills/4-implementation/bmad-code-review/steps/step-04-present.md +132 -0
  580. package/src/bmm-skills/4-implementation/bmad-correct-course/SKILL.md +301 -0
  581. package/src/bmm-skills/4-implementation/bmad-correct-course/checklist.md +288 -0
  582. package/src/bmm-skills/4-implementation/bmad-correct-course/customize.toml +41 -0
  583. package/src/bmm-skills/4-implementation/bmad-create-story/SKILL.md +432 -0
  584. package/src/bmm-skills/4-implementation/bmad-create-story/checklist.md +357 -0
  585. package/src/bmm-skills/4-implementation/bmad-create-story/customize.toml +41 -0
  586. package/src/bmm-skills/4-implementation/bmad-create-story/discover-inputs.md +88 -0
  587. package/src/bmm-skills/4-implementation/bmad-create-story/template.md +49 -0
  588. package/src/bmm-skills/4-implementation/bmad-dev-story/SKILL.md +500 -0
  589. package/src/bmm-skills/4-implementation/bmad-dev-story/checklist.md +80 -0
  590. package/src/bmm-skills/4-implementation/bmad-dev-story/customize.toml +41 -0
  591. package/src/bmm-skills/4-implementation/bmad-investigate/SKILL.md +196 -0
  592. package/src/bmm-skills/4-implementation/bmad-investigate/customize.toml +62 -0
  593. package/src/bmm-skills/4-implementation/bmad-investigate/references/case-file-template.md +127 -0
  594. package/src/bmm-skills/4-implementation/bmad-qa-generate-e2e-tests/SKILL.md +176 -0
  595. package/src/bmm-skills/4-implementation/bmad-qa-generate-e2e-tests/checklist.md +33 -0
  596. package/src/bmm-skills/4-implementation/bmad-qa-generate-e2e-tests/customize.toml +41 -0
  597. package/src/bmm-skills/4-implementation/bmad-quick-dev/SKILL.md +114 -0
  598. package/src/bmm-skills/4-implementation/bmad-quick-dev/compile-epic-context.md +62 -0
  599. package/src/bmm-skills/4-implementation/bmad-quick-dev/customize.toml +41 -0
  600. package/src/bmm-skills/4-implementation/bmad-quick-dev/spec-template.md +88 -0
  601. package/src/bmm-skills/4-implementation/bmad-quick-dev/step-01-clarify-and-route.md +100 -0
  602. package/src/bmm-skills/4-implementation/bmad-quick-dev/step-02-plan.md +47 -0
  603. package/src/bmm-skills/4-implementation/bmad-quick-dev/step-03-implement.md +41 -0
  604. package/src/bmm-skills/4-implementation/bmad-quick-dev/step-04-review.md +50 -0
  605. package/src/bmm-skills/4-implementation/bmad-quick-dev/step-05-present.md +78 -0
  606. package/src/bmm-skills/4-implementation/bmad-quick-dev/step-oneshot.md +71 -0
  607. package/src/bmm-skills/4-implementation/bmad-quick-dev/sync-sprint-status.md +19 -0
  608. package/src/bmm-skills/4-implementation/bmad-retrospective/SKILL.md +1527 -0
  609. package/src/bmm-skills/4-implementation/bmad-retrospective/customize.toml +41 -0
  610. package/src/bmm-skills/4-implementation/bmad-sprint-planning/SKILL.md +319 -0
  611. package/src/bmm-skills/4-implementation/bmad-sprint-planning/checklist.md +34 -0
  612. package/src/bmm-skills/4-implementation/bmad-sprint-planning/customize.toml +41 -0
  613. package/src/bmm-skills/4-implementation/bmad-sprint-planning/sprint-status-template.yaml +69 -0
  614. package/src/bmm-skills/4-implementation/bmad-sprint-status/SKILL.md +311 -0
  615. package/src/bmm-skills/4-implementation/bmad-sprint-status/customize.toml +41 -0
  616. package/src/bmm-skills/module-help.csv +32 -0
  617. package/src/bmm-skills/module.yaml +95 -0
  618. package/src/core-skills/bmad-advanced-elicitation/SKILL.md +142 -0
  619. package/src/core-skills/bmad-advanced-elicitation/methods.csv +70 -0
  620. package/src/core-skills/bmad-brainstorming/SKILL.md +82 -0
  621. package/src/core-skills/bmad-brainstorming/analysis/catalog-analysis.md +239 -0
  622. package/src/core-skills/bmad-brainstorming/analysis/method-matrix.csv +109 -0
  623. package/src/core-skills/bmad-brainstorming/assets/brain-icons.json +166 -0
  624. package/src/core-skills/bmad-brainstorming/assets/brain-methods.csv +109 -0
  625. package/src/core-skills/bmad-brainstorming/assets/brain-selector.html +326 -0
  626. package/src/core-skills/bmad-brainstorming/customize.toml +84 -0
  627. package/src/core-skills/bmad-brainstorming/references/converge.md +24 -0
  628. package/src/core-skills/bmad-brainstorming/references/finalize.md +26 -0
  629. package/src/core-skills/bmad-brainstorming/references/headless.md +54 -0
  630. package/src/core-skills/bmad-brainstorming/references/in-chat-techniques.md +18 -0
  631. package/src/core-skills/bmad-brainstorming/references/mode-autonomous.md +10 -0
  632. package/src/core-skills/bmad-brainstorming/references/mode-facilitator.md +11 -0
  633. package/src/core-skills/bmad-brainstorming/references/mode-partner.md +16 -0
  634. package/src/core-skills/bmad-brainstorming/references/resume.md +5 -0
  635. package/src/core-skills/bmad-brainstorming/scripts/brain.py +740 -0
  636. package/src/core-skills/bmad-brainstorming/scripts/memlog.py +202 -0
  637. package/src/core-skills/bmad-brainstorming/scripts/tests/test_brain.py +217 -0
  638. package/src/core-skills/bmad-brainstorming/scripts/tests/test_memlog.py +265 -0
  639. package/src/core-skills/bmad-customize/SKILL.md +111 -0
  640. package/src/core-skills/bmad-customize/scripts/list_customizable_skills.py +231 -0
  641. package/src/core-skills/bmad-customize/scripts/tests/test_list_customizable_skills.py +249 -0
  642. package/src/core-skills/bmad-editorial-review-prose/SKILL.md +86 -0
  643. package/src/core-skills/bmad-editorial-review-structure/SKILL.md +179 -0
  644. package/src/core-skills/bmad-help/SKILL.md +75 -0
  645. package/src/core-skills/bmad-index-docs/SKILL.md +66 -0
  646. package/src/core-skills/bmad-party-mode/SKILL.md +77 -0
  647. package/src/core-skills/bmad-party-mode/customize.toml +150 -0
  648. package/src/core-skills/bmad-party-mode/references/create-party.md +65 -0
  649. package/src/core-skills/bmad-party-mode/references/mode-agent-team.md +11 -0
  650. package/src/core-skills/bmad-party-mode/references/mode-auto.md +13 -0
  651. package/src/core-skills/bmad-party-mode/references/mode-subagent.md +19 -0
  652. package/src/core-skills/bmad-party-mode/scripts/resolve_party.py +267 -0
  653. package/src/core-skills/bmad-party-mode/scripts/tests/test-resolve_party.py +138 -0
  654. package/src/core-skills/bmad-review-adversarial-general/SKILL.md +37 -0
  655. package/src/core-skills/bmad-review-edge-case-hunter/SKILL.md +67 -0
  656. package/src/core-skills/bmad-shard-doc/SKILL.md +105 -0
  657. package/src/core-skills/bmad-spec/SKILL.md +145 -0
  658. package/src/core-skills/bmad-spec/assets/headless-schemas.md +33 -0
  659. package/src/core-skills/bmad-spec/assets/spec-template.md +49 -0
  660. package/src/core-skills/bmad-spec/customize.toml +53 -0
  661. package/src/core-skills/module-help.csv +13 -0
  662. package/src/core-skills/module.yaml +33 -0
  663. package/src/modules/wizz/README.md +39 -0
  664. package/src/modules/wizz/_shared/cerebro.md +24 -0
  665. package/src/modules/wizz/_shared/encerramento.md +36 -0
  666. package/src/modules/wizz/_shared/token-economy.md +28 -0
  667. package/src/modules/wizz/agents/wizz-ads/SKILL.md +30 -0
  668. package/src/modules/wizz/agents/wizz-ads/customize.toml +53 -0
  669. package/src/modules/wizz/agents/wizz-copy/SKILL.md +30 -0
  670. package/src/modules/wizz/agents/wizz-copy/customize.toml +53 -0
  671. package/src/modules/wizz/agents/wizz-designer/SKILL.md +38 -0
  672. package/src/modules/wizz/agents/wizz-designer/customize.toml +60 -0
  673. package/src/modules/wizz/agents/wizz-growth/SKILL.md +31 -0
  674. package/src/modules/wizz/agents/wizz-growth/customize.toml +58 -0
  675. package/src/modules/wizz/agents/wizz-maestro/SKILL.md +77 -0
  676. package/src/modules/wizz/agents/wizz-maestro/customize.toml +78 -0
  677. package/src/modules/wizz/agents/wizz-memoria/SKILL.md +31 -0
  678. package/src/modules/wizz/agents/wizz-memoria/customize.toml +57 -0
  679. package/src/modules/wizz/agents/wizz-qa/SKILL.md +31 -0
  680. package/src/modules/wizz/agents/wizz-qa/customize.toml +63 -0
  681. package/src/modules/wizz/agents/wizz-seo/SKILL.md +31 -0
  682. package/src/modules/wizz/agents/wizz-seo/customize.toml +58 -0
  683. package/src/modules/wizz/module.yaml +117 -0
  684. package/src/modules/wizz/overrides/bmad-agent-analyst.toml +35 -0
  685. package/src/modules/wizz/overrides/bmad-agent-architect.toml +39 -0
  686. package/src/modules/wizz/overrides/bmad-agent-dev.toml +40 -0
  687. package/src/modules/wizz/overrides/bmad-agent-pm.toml +23 -0
  688. package/src/modules/wizz/overrides/bmad-agent-tech-writer.toml +30 -0
  689. package/src/modules/wizz/overrides/bmad-agent-ux-designer.toml +26 -0
  690. package/src/modules/wizz/scripts/wizz-init.mjs +163 -0
  691. package/src/scripts/memlog.py +224 -0
  692. package/src/scripts/resolve_config.py +176 -0
  693. package/src/scripts/resolve_customization.py +238 -0
  694. package/src/scripts/tests/test_memlog.py +306 -0
  695. package/src/scripts/tests/test_resolve_customization.py +50 -0
  696. package/tools/bundle-web-bundles.js +117 -0
  697. package/tools/format-workflow-md.js +263 -0
  698. package/tools/installer/README.md +60 -0
  699. package/tools/installer/bmad-cli.js +105 -0
  700. package/tools/installer/cli-utils.js +53 -0
  701. package/tools/installer/commands/install.js +149 -0
  702. package/tools/installer/commands/status.js +65 -0
  703. package/tools/installer/commands/uninstall.js +167 -0
  704. package/tools/installer/core/config.js +73 -0
  705. package/tools/installer/core/existing-install.js +121 -0
  706. package/tools/installer/core/install-paths.js +132 -0
  707. package/tools/installer/core/installer.js +1653 -0
  708. package/tools/installer/core/legacy-warnings.js +151 -0
  709. package/tools/installer/core/manifest-generator.js +859 -0
  710. package/tools/installer/core/manifest.js +433 -0
  711. package/tools/installer/core/python-check.js +199 -0
  712. package/tools/installer/core/wsl-node-check.js +109 -0
  713. package/tools/installer/file-ops.js +204 -0
  714. package/tools/installer/fs-native.js +116 -0
  715. package/tools/installer/ide/_config-driven.js +972 -0
  716. package/tools/installer/ide/manager.js +324 -0
  717. package/tools/installer/ide/platform-codes.js +80 -0
  718. package/tools/installer/ide/platform-codes.yaml +329 -0
  719. package/tools/installer/ide/shared/installed-skills.js +50 -0
  720. package/tools/installer/ide/shared/path-utils.js +219 -0
  721. package/tools/installer/ide/shared/skill-manifest.js +57 -0
  722. package/tools/installer/install-messages.yaml +32 -0
  723. package/tools/installer/list-options.js +210 -0
  724. package/tools/installer/message-loader.js +83 -0
  725. package/tools/installer/modules/channel-plan.js +203 -0
  726. package/tools/installer/modules/channel-resolver.js +241 -0
  727. package/tools/installer/modules/custom-module-manager.js +912 -0
  728. package/tools/installer/modules/external-manager.js +527 -0
  729. package/tools/installer/modules/module-help-schema.js +13 -0
  730. package/tools/installer/modules/official-modules.js +2217 -0
  731. package/tools/installer/modules/plugin-resolver.js +398 -0
  732. package/tools/installer/modules/version-resolver.js +336 -0
  733. package/tools/installer/project-root.js +224 -0
  734. package/tools/installer/prompts.js +852 -0
  735. package/tools/installer/set-overrides.js +330 -0
  736. package/tools/installer/ui.js +2077 -0
  737. package/tools/installer/yaml-format.js +245 -0
  738. package/tools/javascript-conventions.md +5 -0
  739. package/tools/migrate-custom-module-paths.js +124 -0
  740. package/tools/skill-validator.md +368 -0
  741. package/tools/validate-sidebar-order.js +388 -0
  742. package/tools/validate-skills.js +698 -0
  743. package/tools/validate-svg-changes.sh +356 -0
  744. package/web-bundles/README.md +46 -0
  745. package/web-bundles/brainstorming-coach/INSTRUCTIONS.md +86 -0
  746. package/web-bundles/brainstorming-coach/SKILL.md +83 -0
  747. package/web-bundles/brainstorming-coach/brain-methods.csv +62 -0
  748. package/web-bundles/bundles.json +139 -0
  749. package/web-bundles/market-and-industry-research/INSTRUCTIONS.md +88 -0
  750. package/web-bundles/market-and-industry-research/SKILL.md +59 -0
  751. package/web-bundles/prd-coach/INSTRUCTIONS.md +86 -0
  752. package/web-bundles/prd-coach/SKILL.md +101 -0
  753. package/web-bundles/prd-coach/prd-template.md +165 -0
  754. package/web-bundles/prd-coach/prd-validation-checklist.md +135 -0
  755. package/web-bundles/prfaq-coach/INSTRUCTIONS.md +86 -0
  756. package/web-bundles/prfaq-coach/SKILL.md +139 -0
  757. package/web-bundles/product-brief-coach/INSTRUCTIONS.md +86 -0
  758. package/web-bundles/product-brief-coach/SKILL.md +113 -0
  759. package/web-bundles/ux-coach/INSTRUCTIONS.md +92 -0
  760. package/web-bundles/ux-coach/SKILL.md +187 -0
  761. package/web-bundles/ux-coach/ux-validation.md +100 -0
@@ -0,0 +1,433 @@
1
+ const path = require('node:path');
2
+ const https = require('node:https');
3
+ const { execFile } = require('node:child_process');
4
+ const { promisify } = require('node:util');
5
+ const fs = require('../fs-native');
6
+ const crypto = require('node:crypto');
7
+ const { resolveModuleVersion } = require('../modules/version-resolver');
8
+ const prompts = require('../prompts');
9
+
10
+ const execFileAsync = promisify(execFile);
11
+ const NPM_LOOKUP_TIMEOUT_MS = 10_000;
12
+ const NPM_PACKAGE_NAME_PATTERN = /^(?:@[a-z0-9][a-z0-9._~-]*\/)?[a-z0-9][a-z0-9._~-]*$/;
13
+
14
+ function isValidNpmPackageName(packageName) {
15
+ return typeof packageName === 'string' && NPM_PACKAGE_NAME_PATTERN.test(packageName);
16
+ }
17
+
18
+ class Manifest {
19
+ /**
20
+ * Create a new manifest
21
+ * @param {string} bmadDir - Path to bmad directory
22
+ * @param {Object} data - Manifest data
23
+ * @param {Array} installedFiles - List of installed files (no longer used, files tracked in files-manifest.csv)
24
+ */
25
+ async create(bmadDir, data, installedFiles = []) {
26
+ const manifestPath = path.join(bmadDir, '_config', 'manifest.yaml');
27
+ const yaml = require('yaml');
28
+
29
+ // Ensure _config directory exists
30
+ await fs.ensureDir(path.dirname(manifestPath));
31
+
32
+ // Get the BMad version from package.json
33
+ const bmadVersion = data.version || require(path.join(process.cwd(), 'package.json')).version;
34
+
35
+ // Convert module list to new detailed format
36
+ const moduleDetails = [];
37
+ if (data.modules && Array.isArray(data.modules)) {
38
+ for (const moduleName of data.modules) {
39
+ // Core and BMM modules use the BMad version
40
+ const moduleVersion = moduleName === 'core' || moduleName === 'bmm' ? bmadVersion : null;
41
+ const now = data.installDate || new Date().toISOString();
42
+
43
+ moduleDetails.push({
44
+ name: moduleName,
45
+ version: moduleVersion,
46
+ installDate: now,
47
+ lastUpdated: now,
48
+ source: moduleName === 'core' || moduleName === 'bmm' ? 'built-in' : 'unknown',
49
+ });
50
+ }
51
+ }
52
+
53
+ // Structure the manifest data
54
+ const manifestData = {
55
+ installation: {
56
+ version: bmadVersion,
57
+ installDate: data.installDate || new Date().toISOString(),
58
+ lastUpdated: data.lastUpdated || new Date().toISOString(),
59
+ },
60
+ modules: moduleDetails,
61
+ ides: data.ides || [],
62
+ };
63
+
64
+ // Write YAML manifest
65
+ // Clean the manifest data to remove any non-serializable values
66
+ const cleanManifestData = structuredClone(manifestData);
67
+
68
+ const yamlContent = yaml.stringify(cleanManifestData, {
69
+ indent: 2,
70
+ lineWidth: 0,
71
+ sortKeys: false,
72
+ });
73
+
74
+ // Ensure POSIX-compliant final newline
75
+ const content = yamlContent.endsWith('\n') ? yamlContent : yamlContent + '\n';
76
+ await fs.writeFile(manifestPath, content, 'utf8');
77
+ return { success: true, path: manifestPath, filesTracked: 0 };
78
+ }
79
+
80
+ /**
81
+ * Read existing manifest
82
+ * @param {string} bmadDir - Path to bmad directory
83
+ * @returns {Object|null} Manifest data or null if not found
84
+ */
85
+ async read(bmadDir) {
86
+ const yamlPath = path.join(bmadDir, '_config', 'manifest.yaml');
87
+ const yaml = require('yaml');
88
+
89
+ if (await fs.pathExists(yamlPath)) {
90
+ try {
91
+ const content = await fs.readFile(yamlPath, 'utf8');
92
+ const manifestData = yaml.parse(content);
93
+
94
+ // Handle new detailed module format
95
+ const modules = manifestData.modules || [];
96
+
97
+ // For backward compatibility: if modules is an array of strings (old format),
98
+ // the calling code may need the array of names
99
+ const moduleNames = modules.map((m) => (typeof m === 'string' ? m : m.name));
100
+
101
+ // Check if we have the new detailed format
102
+ const hasDetailedModules = modules.length > 0 && typeof modules[0] === 'object';
103
+
104
+ // Flatten the structure for compatibility with existing code
105
+ return {
106
+ version: manifestData.installation?.version,
107
+ installDate: manifestData.installation?.installDate,
108
+ lastUpdated: manifestData.installation?.lastUpdated,
109
+ modules: moduleNames, // Simple array of module names for backward compatibility
110
+ modulesDetailed: hasDetailedModules ? modules : null, // New detailed format
111
+ ides: manifestData.ides || [],
112
+ };
113
+ } catch (error) {
114
+ await prompts.log.error(`Failed to read YAML manifest: ${error.message}`);
115
+ }
116
+ }
117
+
118
+ return null;
119
+ }
120
+
121
+ /**
122
+ * Read raw manifest data without flattening
123
+ * @param {string} bmadDir - Path to bmad directory
124
+ * @returns {Object|null} Raw manifest data or null if not found
125
+ */
126
+ async _readRaw(bmadDir) {
127
+ const yamlPath = path.join(bmadDir, '_config', 'manifest.yaml');
128
+ const yaml = require('yaml');
129
+
130
+ if (await fs.pathExists(yamlPath)) {
131
+ try {
132
+ const content = await fs.readFile(yamlPath, 'utf8');
133
+ return yaml.parse(content);
134
+ } catch (error) {
135
+ await prompts.log.error(`Failed to read YAML manifest: ${error.message}`);
136
+ }
137
+ }
138
+
139
+ return null;
140
+ }
141
+
142
+ /**
143
+ * Flatten manifest for backward compatibility
144
+ * @param {Object} manifest - Raw manifest data
145
+ * @returns {Object} Flattened manifest
146
+ */
147
+ _flattenManifest(manifest) {
148
+ const modules = manifest.modules || [];
149
+ const moduleNames = modules.map((m) => (typeof m === 'string' ? m : m.name));
150
+ const hasDetailedModules = modules.length > 0 && typeof modules[0] === 'object';
151
+
152
+ return {
153
+ version: manifest.installation?.version,
154
+ installDate: manifest.installation?.installDate,
155
+ lastUpdated: manifest.installation?.lastUpdated,
156
+ modules: moduleNames,
157
+ modulesDetailed: hasDetailedModules ? modules : null,
158
+ ides: manifest.ides || [],
159
+ };
160
+ }
161
+
162
+ /**
163
+ * Add a module to the manifest with optional version info
164
+ * If module already exists, update its version info
165
+ * @param {string} bmadDir - Path to bmad directory
166
+ * @param {string} moduleName - Module name to add
167
+ * @param {Object} options - Optional version info
168
+ */
169
+ async addModule(bmadDir, moduleName, options = {}) {
170
+ let manifest = await this._readRaw(bmadDir);
171
+ if (!manifest) {
172
+ // Bootstrap a minimal manifest if it doesn't exist yet
173
+ // (e.g., skill-only modules with no agents to compile)
174
+ manifest = { modules: [] };
175
+ }
176
+
177
+ if (!manifest.modules) {
178
+ manifest.modules = [];
179
+ }
180
+
181
+ const existingIndex = manifest.modules.findIndex((m) => m.name === moduleName);
182
+
183
+ if (existingIndex === -1) {
184
+ // Module doesn't exist, add it
185
+ const entry = {
186
+ name: moduleName,
187
+ version: options.version || null,
188
+ installDate: new Date().toISOString(),
189
+ lastUpdated: new Date().toISOString(),
190
+ source: options.source || 'unknown',
191
+ npmPackage: options.npmPackage || null,
192
+ repoUrl: options.repoUrl || null,
193
+ };
194
+ if (options.channel) entry.channel = options.channel;
195
+ if (options.sha) entry.sha = options.sha;
196
+ if (options.localPath) entry.localPath = options.localPath;
197
+ if (options.rawSource) entry.rawSource = options.rawSource;
198
+ if (options.registryApprovedTag) entry.registryApprovedTag = options.registryApprovedTag;
199
+ if (options.registryApprovedSha) entry.registryApprovedSha = options.registryApprovedSha;
200
+ manifest.modules.push(entry);
201
+ } else {
202
+ // Module exists, update its version info
203
+ const existing = manifest.modules[existingIndex];
204
+ manifest.modules[existingIndex] = {
205
+ ...existing,
206
+ version: options.version === undefined ? existing.version : options.version,
207
+ source: options.source || existing.source,
208
+ npmPackage: options.npmPackage === undefined ? existing.npmPackage : options.npmPackage,
209
+ repoUrl: options.repoUrl === undefined ? existing.repoUrl : options.repoUrl,
210
+ localPath: options.localPath === undefined ? existing.localPath : options.localPath,
211
+ channel: options.channel === undefined ? existing.channel : options.channel,
212
+ sha: options.sha === undefined ? existing.sha : options.sha,
213
+ rawSource: options.rawSource === undefined ? existing.rawSource : options.rawSource,
214
+ registryApprovedTag: options.registryApprovedTag === undefined ? existing.registryApprovedTag : options.registryApprovedTag,
215
+ registryApprovedSha: options.registryApprovedSha === undefined ? existing.registryApprovedSha : options.registryApprovedSha,
216
+ lastUpdated: new Date().toISOString(),
217
+ };
218
+ }
219
+
220
+ await this._writeRaw(bmadDir, manifest);
221
+ }
222
+
223
+ /**
224
+ * Get all modules with their version info
225
+ * @param {string} bmadDir - Path to bmad directory
226
+ * @returns {Array} Array of module info objects
227
+ */
228
+ async getAllModuleVersions(bmadDir) {
229
+ const manifest = await this._readRaw(bmadDir);
230
+ if (!manifest || !manifest.modules) {
231
+ return [];
232
+ }
233
+
234
+ return manifest.modules;
235
+ }
236
+
237
+ /**
238
+ * Write raw manifest data to file
239
+ * @param {string} bmadDir - Path to bmad directory
240
+ * @param {Object} manifestData - Raw manifest data to write
241
+ */
242
+ async _writeRaw(bmadDir, manifestData) {
243
+ const yaml = require('yaml');
244
+ const manifestPath = path.join(bmadDir, '_config', 'manifest.yaml');
245
+
246
+ await fs.ensureDir(path.dirname(manifestPath));
247
+
248
+ const cleanManifestData = structuredClone(manifestData);
249
+
250
+ const yamlContent = yaml.stringify(cleanManifestData, {
251
+ indent: 2,
252
+ lineWidth: 0,
253
+ sortKeys: false,
254
+ });
255
+
256
+ const content = yamlContent.endsWith('\n') ? yamlContent : yamlContent + '\n';
257
+ await fs.writeFile(manifestPath, content, 'utf8');
258
+ }
259
+
260
+ /**
261
+ * Calculate SHA256 hash of a file
262
+ * @param {string} filePath - Path to file
263
+ * @returns {string} SHA256 hash
264
+ */
265
+ async calculateFileHash(filePath) {
266
+ try {
267
+ const content = await fs.readFile(filePath);
268
+ return crypto.createHash('sha256').update(content).digest('hex');
269
+ } catch {
270
+ return null;
271
+ }
272
+ }
273
+
274
+ /**
275
+ * Get module version info from source
276
+ * @param {string} moduleName - Module name/code
277
+ * @param {string} bmadDir - Path to bmad directory
278
+ * @param {string} moduleSourcePath - Optional source path for custom modules
279
+ * @returns {Object} Version info object with version, source, npmPackage, repoUrl
280
+ */
281
+ async getModuleVersionInfo(moduleName, bmadDir, moduleSourcePath = null) {
282
+ // Resolve source type first, then read version with the correct path context
283
+ if (['core', 'bmm'].includes(moduleName)) {
284
+ const versionInfo = await resolveModuleVersion(moduleName, { moduleSourcePath });
285
+ return {
286
+ version: versionInfo.version,
287
+ source: 'built-in',
288
+ npmPackage: null,
289
+ repoUrl: null,
290
+ };
291
+ }
292
+
293
+ // Check if this is an external official module
294
+ const { ExternalModuleManager } = require('../modules/external-manager');
295
+ const extMgr = new ExternalModuleManager();
296
+ const moduleInfo = await extMgr.getModuleByCode(moduleName);
297
+
298
+ if (moduleInfo) {
299
+ const externalResolution = extMgr.getResolution(moduleName);
300
+ const versionInfo = await resolveModuleVersion(moduleName, { moduleSourcePath });
301
+ return {
302
+ // Git tag recorded during install trumps the on-disk package.json
303
+ // version, so the manifest carries "v1.7.0" instead of "1.7.0".
304
+ version: externalResolution?.version || versionInfo.version,
305
+ source: 'external',
306
+ npmPackage: moduleInfo.npmPackage || null,
307
+ repoUrl: moduleInfo.url || null,
308
+ channel: externalResolution?.channel || null,
309
+ sha: externalResolution?.sha || null,
310
+ };
311
+ }
312
+
313
+ // Check if this is a custom module (from user-provided URL or local path)
314
+ const { CustomModuleManager } = require('../modules/custom-module-manager');
315
+ const customMgr = new CustomModuleManager();
316
+ const resolved = customMgr.getResolution(moduleName);
317
+ const customSource = await customMgr.findModuleSourceByCode(moduleName, { bmadDir });
318
+ if (customSource || resolved) {
319
+ const versionInfo = await resolveModuleVersion(moduleName, {
320
+ moduleSourcePath: moduleSourcePath || customSource,
321
+ fallbackVersion: resolved?.version,
322
+ marketplacePluginNames: resolved?.pluginName ? [resolved.pluginName] : [],
323
+ });
324
+ const hasGitClone = !!resolved?.repoUrl;
325
+ return {
326
+ // Prefer the git ref we actually cloned over the package.json version.
327
+ version: resolved?.cloneRef || (hasGitClone ? 'main' : versionInfo.version),
328
+ source: 'custom',
329
+ npmPackage: null,
330
+ repoUrl: resolved?.repoUrl || null,
331
+ localPath: resolved?.localPath || null,
332
+ channel: hasGitClone ? (resolved?.cloneRef ? 'pinned' : 'next') : null,
333
+ sha: resolved?.cloneSha || null,
334
+ rawSource: resolved?.rawInput || null,
335
+ };
336
+ }
337
+
338
+ // Unknown module
339
+ const versionInfo = await resolveModuleVersion(moduleName, { moduleSourcePath });
340
+ return {
341
+ version: versionInfo.version,
342
+ source: 'unknown',
343
+ npmPackage: null,
344
+ repoUrl: null,
345
+ };
346
+ }
347
+
348
+ /**
349
+ * Fetch latest version from npm for a package
350
+ * @param {string} packageName - npm package name
351
+ * @returns {string|null} Latest version or null
352
+ */
353
+ async fetchNpmVersion(packageName) {
354
+ if (!isValidNpmPackageName(packageName)) {
355
+ return null;
356
+ }
357
+
358
+ try {
359
+ // Try using npm view first (more reliable)
360
+ try {
361
+ const { stdout } = await execFileAsync('npm', ['view', packageName, 'version'], {
362
+ encoding: 'utf8',
363
+ timeout: NPM_LOOKUP_TIMEOUT_MS,
364
+ });
365
+ return stdout.trim();
366
+ } catch {
367
+ // Fallback to npm registry API
368
+ return new Promise((resolve) => {
369
+ const request = https.get(`https://registry.npmjs.org/${encodeURIComponent(packageName)}`, (res) => {
370
+ let data = '';
371
+ res.on('data', (chunk) => (data += chunk));
372
+ res.on('end', () => {
373
+ try {
374
+ const pkg = JSON.parse(data);
375
+ resolve(pkg['dist-tags']?.latest || pkg.version || null);
376
+ } catch {
377
+ resolve(null);
378
+ }
379
+ });
380
+ });
381
+
382
+ request.setTimeout(NPM_LOOKUP_TIMEOUT_MS, () => {
383
+ request.destroy();
384
+ resolve(null);
385
+ });
386
+
387
+ request.on('error', () => resolve(null));
388
+ });
389
+ }
390
+ } catch {
391
+ return null;
392
+ }
393
+ }
394
+
395
+ /**
396
+ * Check for available updates for installed modules
397
+ * @param {string} bmadDir - Path to bmad directory
398
+ * @returns {Array} Array of update info objects
399
+ */
400
+ async checkForUpdates(bmadDir) {
401
+ const semver = require('semver');
402
+ const modules = await this.getAllModuleVersions(bmadDir);
403
+ const updates = [];
404
+
405
+ for (const module of modules) {
406
+ if (!module.npmPackage) {
407
+ continue; // Skip modules without npm package (built-in)
408
+ }
409
+
410
+ const latestVersion = await this.fetchNpmVersion(module.npmPackage);
411
+ if (!latestVersion) {
412
+ continue;
413
+ }
414
+
415
+ const installedVersion = semver.valid(module.version) || semver.valid(semver.coerce(module.version || ''));
416
+ const availableVersion = semver.valid(latestVersion) || semver.valid(semver.coerce(latestVersion));
417
+
418
+ if (installedVersion && availableVersion && semver.gt(availableVersion, installedVersion)) {
419
+ updates.push({
420
+ name: module.name,
421
+ installedVersion: module.version,
422
+ latestVersion: latestVersion,
423
+ npmPackage: module.npmPackage,
424
+ updateAvailable: true,
425
+ });
426
+ }
427
+ }
428
+
429
+ return updates;
430
+ }
431
+ }
432
+
433
+ module.exports = { Manifest };
@@ -0,0 +1,199 @@
1
+ const { spawnSync } = require('node:child_process');
2
+ const prompts = require('../prompts');
3
+
4
+ // Python 3.11 added stdlib `tomllib` (PEP 680), which the shared scripts in
5
+ // src/scripts/ (resolve_config.py, resolve_customization.py) require to read
6
+ // BMAD's TOML config files. memlog.py is more lenient and runs on 3.8+.
7
+ const PYTHON_FULL_SUPPORT = { major: 3, minor: 11 };
8
+ const PYTHON_PARTIAL_SUPPORT = { major: 3, minor: 8 };
9
+
10
+ // Every runtime call site (skill steps, on_complete hooks) invokes a literal
11
+ // `python3`, so only that command's version vouches for BMAD features. The
12
+ // fallback probes exist to tell the user "Python is installed, but not under
13
+ // the name BMAD uses" instead of a misleading "No Python found".
14
+ const RUNTIME_COMMAND = 'python3';
15
+ const PROBE_CANDIDATES =
16
+ process.platform === 'win32'
17
+ ? [
18
+ { command: 'python3', args: ['--version'] },
19
+ { command: 'py', args: ['-3', '--version'] },
20
+ { command: 'python', args: ['--version'] },
21
+ ]
22
+ : [
23
+ { command: 'python3', args: ['--version'] },
24
+ { command: 'python', args: ['--version'] },
25
+ ];
26
+
27
+ /**
28
+ * Parse a `python --version` output line into version parts.
29
+ * Python 3 prints to stdout; Python 2 printed to stderr — callers pass both.
30
+ * @param {string} output - Combined stdout/stderr from `python --version`
31
+ * @returns {{major: number, minor: number, patch: number, raw: string}|null}
32
+ */
33
+ function parsePythonVersion(output) {
34
+ if (!output) return null;
35
+ const match = output.match(/Python\s+(\d+)\.(\d+)(?:\.(\d+))?/);
36
+ if (!match) return null;
37
+ return {
38
+ major: Number(match[1]),
39
+ minor: Number(match[2]),
40
+ patch: Number(match[3] || 0),
41
+ raw: `${match[1]}.${match[2]}.${match[3] || 0}`,
42
+ };
43
+ }
44
+
45
+ /**
46
+ * Classify a detected Python version against BMAD's feature requirements.
47
+ * @param {{major: number, minor: number}|null} version
48
+ * @returns {'full'|'partial'|'unsupported'|'none'}
49
+ */
50
+ function classifyPython(version) {
51
+ if (!version) return 'none';
52
+ const { major, minor } = version;
53
+ if (major > PYTHON_FULL_SUPPORT.major || (major === PYTHON_FULL_SUPPORT.major && minor >= PYTHON_FULL_SUPPORT.minor)) {
54
+ return 'full';
55
+ }
56
+ if (major === PYTHON_PARTIAL_SUPPORT.major && minor >= PYTHON_PARTIAL_SUPPORT.minor) {
57
+ return 'partial';
58
+ }
59
+ return 'unsupported';
60
+ }
61
+
62
+ /**
63
+ * Run one probe candidate and return its parsed version, or null.
64
+ * @param {{command: string, args: string[]}} candidate
65
+ * @returns {{major: number, minor: number, patch: number, raw: string}|null}
66
+ */
67
+ function probeVersion(candidate) {
68
+ const run = (extra = {}) =>
69
+ spawnSync(candidate.command, candidate.args, {
70
+ encoding: 'utf8',
71
+ timeout: 5000,
72
+ windowsHide: true,
73
+ ...extra,
74
+ });
75
+ let result = run();
76
+ // Node >=18.20/20.12 refuses to spawn .bat/.cmd without a shell
77
+ // (CVE-2024-27980 hardening) and reports EINVAL — pyenv-win ships its
78
+ // python shims as .bat. Args here are static literals, so a shell retry
79
+ // is injection-safe.
80
+ if (result.error && result.error.code === 'EINVAL' && process.platform === 'win32') {
81
+ result = run({ shell: true });
82
+ }
83
+ if (result.error) return null;
84
+ return parsePythonVersion(`${result.stdout || ''}\n${result.stderr || ''}`);
85
+ }
86
+
87
+ /**
88
+ * Probe the local environment for a Python interpreter.
89
+ * Tries each candidate command and returns the first that reports a version.
90
+ * `isRuntimeCommand` is true only when the match is `python3` — the command
91
+ * BMAD scripts actually invoke.
92
+ * @returns {{command: string, version: {major: number, minor: number, patch: number, raw: string}, isRuntimeCommand: boolean}|null}
93
+ */
94
+ function detectPython() {
95
+ for (const candidate of PROBE_CANDIDATES) {
96
+ try {
97
+ const version = probeVersion(candidate);
98
+ if (version) {
99
+ const display = candidate.args.length > 1 ? `${candidate.command} ${candidate.args.slice(0, -1).join(' ')}` : candidate.command;
100
+ return { command: display, version, isRuntimeCommand: candidate.command === RUNTIME_COMMAND };
101
+ }
102
+ } catch {
103
+ // Candidate not runnable — try the next one.
104
+ }
105
+ }
106
+ return null;
107
+ }
108
+
109
+ function upgradeHints() {
110
+ return [
111
+ 'How to get Python 3.11+ (as `python3`):',
112
+ ' macOS: brew install python3',
113
+ ' Windows: winget install Python.Python.3.12 (then ensure `python3` resolves, e.g. enable the python3 alias)',
114
+ ' Linux/WSL: sudo apt install python3 (Ubuntu 24.04+ ships 3.12; older distros: use pyenv or deadsnakes)',
115
+ ' Docker: add python3 to your image (e.g. apk add python3 / apt-get install -y python3)',
116
+ ].join('\n');
117
+ }
118
+
119
+ /**
120
+ * Check the local Python environment and warn about degraded BMAD features.
121
+ *
122
+ * Warn-don't-block: most of BMAD works without Python, so the install always
123
+ * may proceed — but the user must explicitly acknowledge the warning so it
124
+ * can't scroll past unseen. In non-interactive runs (--yes, or stdin is not
125
+ * a TTY) the warning is logged and the install continues without a prompt.
126
+ *
127
+ * @param {Object} [options]
128
+ * @param {boolean} [options.nonInteractive=false] - Skip the ack prompt (--yes, or no TTY)
129
+ * @returns {Promise<{status: string, detected: Object|null}>}
130
+ */
131
+ async function checkPythonEnvironment({ nonInteractive = false } = {}) {
132
+ // Called via module.exports so tests can stub detection.
133
+ const detected = module.exports.detectPython();
134
+ const status = classifyPython(detected ? detected.version : null);
135
+
136
+ if (status === 'full' && detected.isRuntimeCommand) {
137
+ await prompts.log.success(`Python ${detected.version.raw} detected (${detected.command}) — all BMAD features supported.`);
138
+ return { status, detected };
139
+ }
140
+
141
+ if (detected && !detected.isRuntimeCommand) {
142
+ await prompts.log.warn(
143
+ `Python ${detected.version.raw} found via \`${detected.command}\`, but BMAD scripts invoke \`python3\`, which is not on PATH.\n` +
144
+ `Python-powered features (memlog session memory, TOML config resolution) won't run until \`python3\` resolves —\n` +
145
+ `add a python3 alias/shim, or reinstall Python with the python3 launcher enabled.`,
146
+ );
147
+ } else if (status === 'partial') {
148
+ await prompts.log.warn(
149
+ `Python ${detected.version.raw} detected (${detected.command}) — BMAD's TOML config tools need Python 3.11+ (stdlib tomllib).\n` +
150
+ `Works: memlog session memory. Won't work: config/customization resolution scripts.`,
151
+ );
152
+ } else {
153
+ const found =
154
+ status === 'unsupported' ? `Python ${detected.version.raw} detected (${detected.command}) — too old.` : 'No Python found on PATH.';
155
+ await prompts.log.warn(
156
+ `${found} BMAD installs fine without it, but Python-powered features\n` +
157
+ `(memlog session memory, TOML config resolution) won't run until Python 3.11+ is available.`,
158
+ );
159
+ }
160
+ await prompts.note(upgradeHints(), 'Python 3.11+ recommended');
161
+
162
+ if (nonInteractive) {
163
+ await prompts.log.info('Continuing anyway (non-interactive run). You can fix Python later — no reinstall needed.');
164
+ return { status, detected };
165
+ }
166
+
167
+ const choice = await prompts.select({
168
+ message: "BMAD's Python-powered features won't work yet. How do you want to proceed?",
169
+ choices: [
170
+ {
171
+ name: 'Continue install',
172
+ value: 'continue',
173
+ hint: 'BMAD works without Python — you can fix Python later, no reinstall needed',
174
+ },
175
+ {
176
+ name: 'Quit and fix Python first',
177
+ value: 'quit',
178
+ hint: 'make Python 3.11+ available as python3, then re-run the installer',
179
+ },
180
+ ],
181
+ default: 'continue',
182
+ });
183
+
184
+ if (choice === 'quit') {
185
+ await prompts.cancel('Make Python 3.11+ available as `python3` (see hints above), then re-run the installer.');
186
+ process.exit(0);
187
+ }
188
+
189
+ return { status, detected };
190
+ }
191
+
192
+ module.exports = {
193
+ checkPythonEnvironment,
194
+ detectPython,
195
+ parsePythonVersion,
196
+ classifyPython,
197
+ PYTHON_FULL_SUPPORT,
198
+ PYTHON_PARTIAL_SUPPORT,
199
+ };