bmad-method 6.0.0-alpha.9 → 6.0.1

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 (931) hide show
  1. package/.augment/code_review_guidelines.yaml +271 -0
  2. package/.claude/skills/bmad-os-changelog-social/SKILL.md +178 -0
  3. package/.claude/skills/bmad-os-changelog-social/examples/discord-example.md +53 -0
  4. package/.claude/skills/bmad-os-changelog-social/examples/linkedin-example.md +49 -0
  5. package/.claude/skills/bmad-os-changelog-social/examples/twitter-example.md +55 -0
  6. package/.claude/skills/bmad-os-diataxis-style-fix/SKILL.md +7 -0
  7. package/.claude/skills/bmad-os-diataxis-style-fix/prompts/instructions.md +229 -0
  8. package/.claude/skills/bmad-os-draft-changelog/SKILL.md +7 -0
  9. package/.claude/skills/bmad-os-draft-changelog/prompts/instructions.md +82 -0
  10. package/.claude/skills/bmad-os-gh-triage/README.md +14 -0
  11. package/.claude/skills/bmad-os-gh-triage/SKILL.md +12 -0
  12. package/.claude/skills/bmad-os-gh-triage/prompts/agent-prompt.md +60 -0
  13. package/.claude/skills/bmad-os-gh-triage/prompts/instructions.md +74 -0
  14. package/.claude/skills/bmad-os-release-module/README.md +24 -0
  15. package/.claude/skills/bmad-os-release-module/SKILL.md +7 -0
  16. package/.claude/skills/bmad-os-release-module/prompts/instructions.md +53 -0
  17. package/.coderabbit.yaml +85 -0
  18. package/.github/CODE_OF_CONDUCT.md +128 -0
  19. package/.github/ISSUE_TEMPLATE/bug-report.yaml +124 -0
  20. package/.github/ISSUE_TEMPLATE/config.yaml +5 -2
  21. package/.github/ISSUE_TEMPLATE/documentation.yaml +55 -0
  22. package/.github/ISSUE_TEMPLATE/feature-request.md +22 -0
  23. package/.github/ISSUE_TEMPLATE/issue.md +32 -0
  24. package/.github/PULL_REQUEST_TEMPLATE.md +13 -0
  25. package/.github/scripts/discord-helpers.sh +34 -0
  26. package/.github/workflows/coderabbit-review.yaml +22 -0
  27. package/.github/workflows/discord.yaml +82 -8
  28. package/.github/workflows/docs.yaml +64 -0
  29. package/.github/workflows/quality.yaml +40 -2
  30. package/.husky/pre-commit +13 -0
  31. package/.markdownlint-cli2.yaml +41 -0
  32. package/.prettierignore +7 -0
  33. package/.vscode/settings.json +4 -3
  34. package/CHANGELOG.md +1074 -674
  35. package/CNAME +1 -0
  36. package/CONTRIBUTING.md +97 -189
  37. package/CONTRIBUTORS.md +32 -0
  38. package/LICENSE +7 -3
  39. package/README.md +51 -396
  40. package/SECURITY.md +85 -0
  41. package/TRADEMARK.md +55 -0
  42. package/Wordmark.png +0 -0
  43. package/banner-bmad-method.png +0 -0
  44. package/docs/404.md +9 -0
  45. package/docs/_STYLE_GUIDE.md +370 -0
  46. package/docs/explanation/advanced-elicitation.md +49 -0
  47. package/docs/explanation/adversarial-review.md +59 -0
  48. package/docs/explanation/brainstorming.md +33 -0
  49. package/docs/explanation/established-projects-faq.md +50 -0
  50. package/docs/explanation/party-mode.md +59 -0
  51. package/docs/explanation/preventing-agent-conflicts.md +112 -0
  52. package/docs/explanation/project-context.md +157 -0
  53. package/docs/explanation/quick-flow.md +73 -0
  54. package/docs/explanation/why-solutioning-matters.md +77 -0
  55. package/docs/how-to/customize-bmad.md +172 -0
  56. package/docs/how-to/established-projects.md +105 -0
  57. package/docs/how-to/get-answers-about-bmad.md +103 -0
  58. package/docs/how-to/install-bmad.md +88 -0
  59. package/docs/how-to/non-interactive-installation.md +171 -0
  60. package/docs/how-to/project-context.md +136 -0
  61. package/docs/how-to/quick-fixes.md +123 -0
  62. package/docs/how-to/shard-large-documents.md +78 -0
  63. package/docs/how-to/upgrade-to-v6.md +97 -0
  64. package/docs/index.md +33 -206
  65. package/docs/reference/agents.md +28 -0
  66. package/docs/reference/commands.md +131 -0
  67. package/docs/reference/modules.md +76 -0
  68. package/docs/reference/testing.md +106 -0
  69. package/docs/reference/workflow-map.md +122 -0
  70. package/docs/tutorials/getting-started.md +219 -0
  71. package/eslint.config.mjs +26 -16
  72. package/package.json +35 -28
  73. package/src/bmm/agents/analyst.agent.yaml +43 -0
  74. package/src/bmm/agents/architect.agent.yaml +29 -0
  75. package/src/bmm/agents/dev.agent.yaml +38 -0
  76. package/src/bmm/agents/pm.agent.yaml +44 -0
  77. package/src/bmm/agents/qa.agent.yaml +58 -0
  78. package/src/bmm/agents/quick-flow-solo-dev.agent.yaml +32 -0
  79. package/src/bmm/agents/sm.agent.yaml +37 -0
  80. package/src/bmm/agents/tech-writer/tech-writer-sidecar/documentation-standards.md +224 -0
  81. package/src/bmm/agents/tech-writer/tech-writer.agent.yaml +46 -0
  82. package/src/bmm/agents/ux-designer.agent.yaml +27 -0
  83. package/src/bmm/data/project-context-template.md +26 -0
  84. package/src/bmm/module-help.csv +31 -0
  85. package/src/bmm/module.yaml +50 -0
  86. package/src/bmm/teams/default-party.csv +20 -0
  87. package/src/bmm/workflows/1-analysis/create-product-brief/product-brief.template.md +10 -0
  88. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md +177 -0
  89. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md +161 -0
  90. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md +199 -0
  91. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md +202 -0
  92. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md +205 -0
  93. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md +219 -0
  94. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +162 -0
  95. package/src/bmm/workflows/1-analysis/create-product-brief/workflow.md +57 -0
  96. package/src/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +137 -0
  97. package/src/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +229 -0
  98. package/src/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +238 -0
  99. package/src/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +206 -0
  100. package/src/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +234 -0
  101. package/src/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +443 -0
  102. package/src/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +182 -0
  103. package/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +237 -0
  104. package/src/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +249 -0
  105. package/src/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +259 -0
  106. package/src/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +177 -0
  107. package/src/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +475 -0
  108. package/src/bmm/workflows/1-analysis/research/research.template.md +29 -0
  109. package/src/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +137 -0
  110. package/src/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +239 -0
  111. package/src/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +248 -0
  112. package/src/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +202 -0
  113. package/src/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +233 -0
  114. package/src/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +486 -0
  115. package/src/bmm/workflows/1-analysis/research/workflow-domain-research.md +54 -0
  116. package/src/bmm/workflows/1-analysis/research/workflow-market-research.md +54 -0
  117. package/src/bmm/workflows/1-analysis/research/workflow-technical-research.md +54 -0
  118. package/src/bmm/workflows/2-plan-workflows/create-prd/data/domain-complexity.csv +15 -0
  119. package/src/bmm/workflows/2-plan-workflows/create-prd/data/prd-purpose.md +197 -0
  120. package/src/bmm/workflows/2-plan-workflows/create-prd/data/project-types.csv +11 -0
  121. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01-init.md +191 -0
  122. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01b-continue.md +153 -0
  123. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02-discovery.md +224 -0
  124. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02b-vision.md +154 -0
  125. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02c-executive-summary.md +170 -0
  126. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-03-success.md +226 -0
  127. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-04-journeys.md +213 -0
  128. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-05-domain.md +207 -0
  129. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-06-innovation.md +226 -0
  130. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-07-project-type.md +237 -0
  131. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-08-scoping.md +228 -0
  132. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-09-functional.md +231 -0
  133. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-10-nonfunctional.md +242 -0
  134. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-11-polish.md +217 -0
  135. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-12-complete.md +124 -0
  136. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01-discovery.md +247 -0
  137. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01b-legacy-conversion.md +208 -0
  138. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-02-review.md +249 -0
  139. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-03-edit.md +253 -0
  140. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-04-complete.md +168 -0
  141. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +226 -0
  142. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02-format-detection.md +191 -0
  143. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02b-parity-check.md +209 -0
  144. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-03-density-validation.md +174 -0
  145. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-04-brief-coverage-validation.md +214 -0
  146. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-05-measurability-validation.md +228 -0
  147. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-06-traceability-validation.md +217 -0
  148. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-07-implementation-leakage-validation.md +205 -0
  149. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-08-domain-compliance-validation.md +243 -0
  150. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-09-project-type-validation.md +263 -0
  151. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +209 -0
  152. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +264 -0
  153. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-12-completeness-validation.md +242 -0
  154. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +231 -0
  155. package/src/bmm/workflows/2-plan-workflows/create-prd/templates/prd-template.md +10 -0
  156. package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md +63 -0
  157. package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-edit-prd.md +65 -0
  158. package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md +63 -0
  159. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +135 -0
  160. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +127 -0
  161. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +190 -0
  162. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +216 -0
  163. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +219 -0
  164. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +234 -0
  165. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +252 -0
  166. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +254 -0
  167. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +224 -0
  168. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +224 -0
  169. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +241 -0
  170. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +248 -0
  171. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +237 -0
  172. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +264 -0
  173. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +171 -0
  174. package/src/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +13 -0
  175. package/src/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +42 -0
  176. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md +184 -0
  177. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md +172 -0
  178. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md +173 -0
  179. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md +133 -0
  180. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md +245 -0
  181. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +129 -0
  182. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/templates/readiness-report-template.md +4 -0
  183. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +54 -0
  184. package/src/bmm/workflows/3-solutioning/create-architecture/architecture-decision-template.md +12 -0
  185. package/src/bmm/workflows/3-solutioning/create-architecture/data/domain-complexity.csv +13 -0
  186. package/src/bmm/workflows/3-solutioning/create-architecture/data/project-types.csv +7 -0
  187. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md +153 -0
  188. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md +164 -0
  189. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md +224 -0
  190. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +331 -0
  191. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +318 -0
  192. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +359 -0
  193. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +379 -0
  194. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +359 -0
  195. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +76 -0
  196. package/src/bmm/workflows/3-solutioning/create-architecture/workflow.md +49 -0
  197. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +259 -0
  198. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +233 -0
  199. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +272 -0
  200. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +149 -0
  201. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -0
  202. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +58 -0
  203. package/src/bmm/workflows/4-implementation/code-review/checklist.md +23 -0
  204. package/src/bmm/workflows/4-implementation/code-review/instructions.xml +227 -0
  205. package/src/bmm/workflows/4-implementation/code-review/workflow.yaml +44 -0
  206. package/src/bmm/workflows/4-implementation/correct-course/checklist.md +288 -0
  207. package/src/bmm/workflows/4-implementation/correct-course/instructions.md +207 -0
  208. package/src/bmm/workflows/4-implementation/correct-course/workflow.yaml +54 -0
  209. package/src/bmm/workflows/4-implementation/create-story/checklist.md +358 -0
  210. package/src/bmm/workflows/4-implementation/create-story/instructions.xml +346 -0
  211. package/src/bmm/workflows/4-implementation/create-story/template.md +49 -0
  212. package/src/bmm/workflows/4-implementation/create-story/workflow.yaml +53 -0
  213. package/src/bmm/workflows/4-implementation/dev-story/checklist.md +80 -0
  214. package/src/bmm/workflows/4-implementation/dev-story/instructions.xml +410 -0
  215. package/src/bmm/workflows/4-implementation/dev-story/workflow.yaml +21 -0
  216. package/src/bmm/workflows/4-implementation/retrospective/instructions.md +1444 -0
  217. package/src/bmm/workflows/4-implementation/retrospective/workflow.yaml +53 -0
  218. package/src/bmm/workflows/4-implementation/sprint-planning/instructions.md +226 -0
  219. package/src/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +55 -0
  220. package/src/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +47 -0
  221. package/src/bmm/workflows/4-implementation/sprint-status/instructions.md +230 -0
  222. package/src/bmm/workflows/4-implementation/sprint-status/workflow.yaml +25 -0
  223. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md +174 -0
  224. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md +118 -0
  225. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md +111 -0
  226. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md +111 -0
  227. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md +104 -0
  228. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md +146 -0
  229. package/src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +50 -0
  230. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md +191 -0
  231. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md +144 -0
  232. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md +127 -0
  233. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md +200 -0
  234. package/src/bmm/workflows/bmad-quick-flow/quick-spec/tech-spec-template.md +74 -0
  235. package/src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md +79 -0
  236. package/src/bmm/workflows/document-project/checklist.md +245 -0
  237. package/src/bmm/workflows/document-project/instructions.md +130 -0
  238. package/src/bmm/workflows/document-project/templates/project-scan-report-schema.json +160 -0
  239. package/src/bmm/workflows/document-project/workflow.yaml +22 -0
  240. package/src/bmm/workflows/document-project/workflows/deep-dive-instructions.md +298 -0
  241. package/src/bmm/workflows/document-project/workflows/deep-dive.yaml +31 -0
  242. package/src/bmm/workflows/document-project/workflows/full-scan-instructions.md +1106 -0
  243. package/src/bmm/workflows/document-project/workflows/full-scan.yaml +31 -0
  244. package/src/bmm/workflows/generate-project-context/project-context-template.md +21 -0
  245. package/src/bmm/workflows/generate-project-context/steps/step-01-discover.md +184 -0
  246. package/src/bmm/workflows/generate-project-context/steps/step-02-generate.md +318 -0
  247. package/src/bmm/workflows/generate-project-context/steps/step-03-complete.md +278 -0
  248. package/src/bmm/workflows/generate-project-context/workflow.md +49 -0
  249. package/src/bmm/workflows/qa/automate/checklist.md +33 -0
  250. package/src/bmm/workflows/qa/automate/instructions.md +110 -0
  251. package/src/bmm/workflows/qa/automate/workflow.yaml +44 -0
  252. package/src/core/agents/bmad-master.agent.yaml +12 -21
  253. package/src/core/module-help.csv +9 -0
  254. package/src/core/module.yaml +25 -0
  255. package/src/core/tasks/editorial-review-prose.xml +102 -0
  256. package/src/core/tasks/editorial-review-structure.xml +209 -0
  257. package/src/core/tasks/help.md +85 -0
  258. package/src/core/tasks/index-docs.xml +2 -2
  259. package/src/core/tasks/review-adversarial-general.xml +48 -0
  260. package/src/core/tasks/shard-doc.xml +108 -0
  261. package/src/core/tasks/workflow.xml +39 -74
  262. package/src/core/workflows/advanced-elicitation/methods.csv +51 -0
  263. package/src/core/workflows/advanced-elicitation/workflow.xml +117 -0
  264. package/src/core/workflows/brainstorming/brain-methods.csv +62 -36
  265. package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +197 -0
  266. package/src/core/workflows/brainstorming/steps/step-01b-continue.md +122 -0
  267. package/src/core/workflows/brainstorming/steps/step-02a-user-selected.md +225 -0
  268. package/src/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +237 -0
  269. package/src/core/workflows/brainstorming/steps/step-02c-random-selection.md +209 -0
  270. package/src/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +264 -0
  271. package/src/core/workflows/brainstorming/steps/step-03-technique-execution.md +399 -0
  272. package/src/core/workflows/brainstorming/steps/step-04-idea-organization.md +303 -0
  273. package/src/core/workflows/brainstorming/template.md +13 -104
  274. package/src/core/workflows/brainstorming/workflow.md +58 -0
  275. package/src/core/workflows/party-mode/steps/step-01-agent-loading.md +138 -0
  276. package/src/core/workflows/party-mode/steps/step-02-discussion-orchestration.md +187 -0
  277. package/src/core/workflows/party-mode/steps/step-03-graceful-exit.md +168 -0
  278. package/src/core/workflows/party-mode/workflow.md +194 -0
  279. package/src/utility/agent-components/activation-rules.txt +6 -0
  280. package/src/utility/agent-components/activation-steps.txt +14 -0
  281. package/src/utility/agent-components/agent-command-header.md +1 -0
  282. package/src/utility/agent-components/agent.customize.template.yaml +41 -0
  283. package/src/utility/agent-components/handler-action.txt +4 -0
  284. package/src/utility/agent-components/handler-exec.txt +6 -0
  285. package/src/utility/agent-components/handler-multi.txt +14 -0
  286. package/src/utility/agent-components/handler-tmpl.txt +5 -0
  287. package/src/utility/agent-components/handler-validate-workflow.txt +7 -0
  288. package/src/utility/agent-components/handler-workflow.txt +10 -0
  289. package/src/utility/agent-components/menu-handlers.txt +6 -0
  290. package/test/README.md +4 -4
  291. package/test/adversarial-review-tests/README.md +56 -0
  292. package/test/adversarial-review-tests/sample-content.md +46 -0
  293. package/test/adversarial-review-tests/test-cases.yaml +103 -0
  294. package/test/fixtures/agent-schema/invalid/critical-actions/actions-as-string.agent.yaml +1 -0
  295. package/test/fixtures/agent-schema/invalid/critical-actions/empty-string-in-actions.agent.yaml +1 -0
  296. package/test/fixtures/agent-schema/invalid/menu/empty-menu.agent.yaml +1 -0
  297. package/test/fixtures/agent-schema/invalid/menu/missing-menu.agent.yaml +1 -0
  298. package/test/fixtures/agent-schema/invalid/menu-commands/empty-command-target.agent.yaml +1 -0
  299. package/test/fixtures/agent-schema/invalid/menu-commands/no-command-target.agent.yaml +1 -0
  300. package/test/fixtures/agent-schema/invalid/menu-triggers/camel-case.agent.yaml +1 -0
  301. package/test/fixtures/agent-schema/invalid/menu-triggers/compound-invalid-format.agent.yaml +25 -0
  302. package/test/fixtures/agent-schema/invalid/menu-triggers/compound-mismatched-kebab.agent.yaml +25 -0
  303. package/test/fixtures/agent-schema/invalid/menu-triggers/duplicate-triggers.agent.yaml +1 -0
  304. package/test/fixtures/agent-schema/invalid/menu-triggers/empty-trigger.agent.yaml +1 -0
  305. package/test/fixtures/agent-schema/invalid/menu-triggers/leading-asterisk.agent.yaml +1 -0
  306. package/test/fixtures/agent-schema/invalid/menu-triggers/snake-case.agent.yaml +1 -0
  307. package/test/fixtures/agent-schema/invalid/menu-triggers/trigger-with-spaces.agent.yaml +1 -0
  308. package/test/fixtures/agent-schema/invalid/metadata/empty-module-string.agent.yaml +1 -1
  309. package/test/fixtures/agent-schema/invalid/metadata/extra-metadata-fields.agent.yaml +1 -0
  310. package/test/fixtures/agent-schema/invalid/persona/empty-principles-array.agent.yaml +1 -0
  311. package/test/fixtures/agent-schema/invalid/persona/empty-string-in-principles.agent.yaml +1 -0
  312. package/test/fixtures/agent-schema/invalid/persona/extra-persona-fields.agent.yaml +1 -0
  313. package/test/fixtures/agent-schema/invalid/persona/missing-role.agent.yaml +1 -0
  314. package/test/fixtures/agent-schema/invalid/prompts/empty-content.agent.yaml +1 -0
  315. package/test/fixtures/agent-schema/invalid/prompts/extra-prompt-fields.agent.yaml +1 -0
  316. package/test/fixtures/agent-schema/invalid/prompts/missing-content.agent.yaml +1 -0
  317. package/test/fixtures/agent-schema/invalid/prompts/missing-id.agent.yaml +1 -0
  318. package/test/fixtures/agent-schema/invalid/top-level/extra-top-level-keys.agent.yaml +1 -0
  319. package/test/fixtures/agent-schema/valid/critical-actions/empty-critical-actions.agent.yaml +1 -0
  320. package/test/fixtures/agent-schema/valid/critical-actions/no-critical-actions.agent.yaml +1 -0
  321. package/test/fixtures/agent-schema/valid/critical-actions/valid-critical-actions.agent.yaml +1 -0
  322. package/test/fixtures/agent-schema/valid/menu/multiple-menu-items.agent.yaml +1 -0
  323. package/test/fixtures/agent-schema/valid/menu/single-menu-item.agent.yaml +1 -0
  324. package/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml +2 -3
  325. package/test/fixtures/agent-schema/valid/menu-commands/multiple-commands.agent.yaml +1 -0
  326. package/test/fixtures/agent-schema/valid/menu-triggers/compound-triggers.agent.yaml +31 -0
  327. package/test/fixtures/agent-schema/valid/menu-triggers/kebab-case-triggers.agent.yaml +2 -1
  328. package/test/fixtures/agent-schema/valid/metadata/core-agent-with-module.agent.yaml +24 -0
  329. package/test/fixtures/agent-schema/valid/metadata/empty-module-name-in-path.agent.yaml +1 -0
  330. package/test/fixtures/agent-schema/valid/metadata/malformed-path-treated-as-core.agent.yaml +2 -1
  331. package/test/fixtures/agent-schema/valid/metadata/module-agent-correct.agent.yaml +2 -1
  332. package/test/fixtures/agent-schema/valid/metadata/module-agent-missing-module.agent.yaml +23 -0
  333. package/test/fixtures/agent-schema/valid/metadata/wrong-module-value.agent.yaml +24 -0
  334. package/test/fixtures/agent-schema/valid/persona/complete-persona.agent.yaml +1 -0
  335. package/test/fixtures/agent-schema/valid/prompts/empty-prompts.agent.yaml +1 -0
  336. package/test/fixtures/agent-schema/valid/prompts/no-prompts.agent.yaml +1 -0
  337. package/test/fixtures/agent-schema/valid/prompts/valid-prompts-minimal.agent.yaml +1 -0
  338. package/test/fixtures/agent-schema/valid/prompts/valid-prompts-with-description.agent.yaml +1 -0
  339. package/test/fixtures/agent-schema/valid/top-level/minimal-core-agent.agent.yaml +1 -0
  340. package/test/fixtures/file-refs-csv/invalid/all-empty-workflow.csv +3 -0
  341. package/test/fixtures/file-refs-csv/invalid/empty-data.csv +1 -0
  342. package/test/fixtures/file-refs-csv/invalid/no-workflow-column.csv +3 -0
  343. package/test/fixtures/file-refs-csv/invalid/unresolvable-vars.csv +3 -0
  344. package/test/fixtures/file-refs-csv/valid/bmm-style.csv +3 -0
  345. package/test/fixtures/file-refs-csv/valid/core-style.csv +3 -0
  346. package/test/fixtures/file-refs-csv/valid/minimal.csv +2 -0
  347. package/test/test-agent-schema.js +4 -4
  348. package/test/test-file-refs-csv.js +133 -0
  349. package/test/test-installation-components.js +10 -12
  350. package/test/test-rehype-plugins.mjs +1050 -0
  351. package/test/unit-test-schema.js +2 -2
  352. package/tools/build-docs.mjs +463 -0
  353. package/tools/cli/README.md +41 -589
  354. package/tools/cli/bmad-cli.js +67 -1
  355. package/tools/cli/commands/install.js +42 -34
  356. package/tools/cli/commands/status.js +44 -26
  357. package/tools/cli/commands/uninstall.js +146 -23
  358. package/tools/cli/external-official-modules.yaml +53 -0
  359. package/tools/cli/installers/install-messages.yaml +39 -0
  360. package/tools/cli/installers/lib/core/config-collector.js +589 -95
  361. package/tools/cli/installers/lib/core/custom-module-cache.js +260 -0
  362. package/tools/cli/installers/lib/core/dependency-resolver.js +57 -39
  363. package/tools/cli/installers/lib/core/detector.js +19 -125
  364. package/tools/cli/installers/lib/core/ide-config-manager.js +12 -9
  365. package/tools/cli/installers/lib/core/installer.js +2075 -1161
  366. package/tools/cli/installers/lib/core/manifest-generator.js +494 -103
  367. package/tools/cli/installers/lib/core/manifest.js +544 -46
  368. package/tools/cli/installers/lib/custom/handler.js +358 -0
  369. package/tools/cli/installers/lib/ide/_base-ide.js +83 -44
  370. package/tools/cli/installers/lib/ide/_config-driven.js +560 -0
  371. package/tools/cli/installers/lib/ide/codex.js +277 -54
  372. package/tools/cli/installers/lib/ide/github-copilot.js +607 -209
  373. package/tools/cli/installers/lib/ide/kilo.js +169 -75
  374. package/tools/cli/installers/lib/ide/manager.js +179 -48
  375. package/tools/cli/installers/lib/ide/platform-codes.js +100 -0
  376. package/tools/cli/installers/lib/ide/platform-codes.yaml +227 -0
  377. package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +95 -5
  378. package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +51 -20
  379. package/tools/cli/installers/lib/ide/shared/module-injections.js +6 -3
  380. package/tools/cli/installers/lib/ide/shared/path-utils.js +299 -0
  381. package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +262 -14
  382. package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +108 -27
  383. package/tools/cli/installers/lib/ide/templates/agent-command-template.md +2 -1
  384. package/tools/cli/installers/lib/ide/templates/combined/antigravity.md +8 -0
  385. package/tools/cli/installers/lib/ide/templates/combined/default-agent.md +16 -0
  386. package/tools/cli/installers/lib/ide/templates/combined/default-task.md +10 -0
  387. package/tools/cli/installers/lib/ide/templates/combined/default-tool.md +10 -0
  388. package/tools/cli/installers/lib/ide/templates/combined/default-workflow-yaml.md +15 -0
  389. package/tools/cli/installers/lib/ide/templates/combined/default-workflow.md +7 -0
  390. package/tools/cli/installers/lib/ide/templates/combined/gemini-agent.toml +14 -0
  391. package/tools/cli/installers/lib/ide/templates/combined/gemini-task.toml +11 -0
  392. package/tools/cli/installers/lib/ide/templates/combined/gemini-tool.toml +11 -0
  393. package/tools/cli/installers/lib/ide/templates/combined/gemini-workflow-yaml.toml +16 -0
  394. package/tools/cli/installers/lib/ide/templates/combined/gemini-workflow.toml +14 -0
  395. package/tools/cli/installers/lib/ide/templates/combined/kiro-agent.md +16 -0
  396. package/tools/cli/installers/lib/ide/templates/combined/kiro-task.md +9 -0
  397. package/tools/cli/installers/lib/ide/templates/combined/kiro-tool.md +9 -0
  398. package/tools/cli/installers/lib/ide/templates/combined/kiro-workflow-yaml.md +15 -0
  399. package/tools/cli/installers/lib/ide/templates/combined/kiro-workflow.md +7 -0
  400. package/tools/cli/installers/lib/ide/templates/combined/opencode-agent.md +15 -0
  401. package/tools/cli/installers/lib/ide/templates/combined/opencode-task.md +14 -0
  402. package/tools/cli/installers/lib/ide/templates/combined/opencode-tool.md +14 -0
  403. package/tools/cli/installers/lib/ide/templates/combined/opencode-workflow-yaml.md +17 -0
  404. package/tools/cli/installers/lib/ide/templates/combined/opencode-workflow.md +17 -0
  405. package/tools/cli/installers/lib/ide/templates/combined/rovodev.md +9 -0
  406. package/tools/cli/installers/lib/ide/templates/combined/trae.md +9 -0
  407. package/tools/cli/installers/lib/ide/templates/combined/windsurf-workflow.md +10 -0
  408. package/tools/cli/installers/lib/ide/templates/workflow-command-template.md +2 -1
  409. package/tools/cli/installers/lib/ide/templates/workflow-commander.md +6 -0
  410. package/tools/cli/installers/lib/message-loader.js +83 -0
  411. package/tools/cli/installers/lib/modules/external-manager.js +136 -0
  412. package/tools/cli/installers/lib/modules/manager.js +931 -207
  413. package/tools/cli/lib/activation-builder.js +13 -16
  414. package/tools/cli/lib/agent/compiler.js +525 -0
  415. package/tools/cli/lib/agent/installer.js +680 -0
  416. package/tools/cli/lib/agent/template-engine.js +152 -0
  417. package/tools/cli/lib/agent-analyzer.js +48 -20
  418. package/tools/cli/lib/agent-party-generator.js +5 -17
  419. package/tools/cli/lib/cli-utils.js +76 -104
  420. package/tools/cli/lib/config.js +4 -3
  421. package/tools/cli/lib/platform-codes.js +2 -2
  422. package/tools/cli/lib/project-root.js +6 -0
  423. package/tools/cli/lib/prompts.js +809 -0
  424. package/tools/cli/lib/ui.js +1600 -272
  425. package/tools/cli/lib/xml-handler.js +4 -55
  426. package/tools/cli/lib/yaml-format.js +4 -6
  427. package/tools/cli/lib/yaml-xml-builder.js +183 -61
  428. package/tools/docs/_prompt-external-modules-page.md +59 -0
  429. package/tools/docs/fix-refs.md +91 -0
  430. package/tools/fix-doc-links.js +285 -0
  431. package/tools/lib/xml-utils.js +13 -0
  432. package/tools/maintainer/review-pr-README.md +55 -0
  433. package/tools/maintainer/review-pr.md +242 -0
  434. package/tools/migrate-custom-module-paths.js +124 -0
  435. package/tools/platform-codes.yaml +24 -0
  436. package/tools/schema/agent.js +306 -53
  437. package/tools/validate-agent-schema.js +3 -3
  438. package/tools/validate-doc-links.js +393 -0
  439. package/tools/validate-file-refs.js +554 -0
  440. package/tools/validate-svg-changes.sh +356 -0
  441. package/website/README.md +75 -0
  442. package/website/astro.config.mjs +135 -0
  443. package/website/public/favicon.ico +0 -0
  444. package/website/public/img/bmad-dark.png +0 -0
  445. package/website/public/img/bmad-light.png +0 -0
  446. package/website/public/workflow-map-diagram.html +361 -0
  447. package/website/src/components/Banner.astro +62 -0
  448. package/website/src/components/Header.astro +96 -0
  449. package/website/src/components/MobileMenuFooter.astro +33 -0
  450. package/website/src/content/config.ts +6 -0
  451. package/website/src/lib/site-url.mjs +25 -0
  452. package/website/src/pages/404.astro +11 -0
  453. package/website/src/pages/robots.txt.ts +48 -0
  454. package/website/src/rehype-base-paths.js +112 -0
  455. package/website/src/rehype-markdown-links.js +111 -0
  456. package/website/src/styles/custom.css +509 -0
  457. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -32
  458. package/.github/ISSUE_TEMPLATE/idea_submission.md +0 -109
  459. package/.github/workflows/bundle-latest.yaml +0 -277
  460. package/.github/workflows/manual-release.yaml +0 -212
  461. package/docs/BUNDLE_DISTRIBUTION_SETUP.md +0 -95
  462. package/docs/agent-customization-guide.md +0 -208
  463. package/docs/document-sharding-guide.md +0 -447
  464. package/docs/ide-info/auggie.md +0 -31
  465. package/docs/ide-info/claude-code.md +0 -25
  466. package/docs/ide-info/cline.md +0 -31
  467. package/docs/ide-info/codex.md +0 -21
  468. package/docs/ide-info/crush.md +0 -30
  469. package/docs/ide-info/cursor.md +0 -25
  470. package/docs/ide-info/gemini.md +0 -25
  471. package/docs/ide-info/github-copilot.md +0 -26
  472. package/docs/ide-info/iflow.md +0 -33
  473. package/docs/ide-info/kilo.md +0 -24
  474. package/docs/ide-info/opencode.md +0 -24
  475. package/docs/ide-info/qwen.md +0 -25
  476. package/docs/ide-info/roo.md +0 -27
  477. package/docs/ide-info/trae.md +0 -25
  478. package/docs/ide-info/windsurf.md +0 -22
  479. package/docs/installers-bundlers/ide-injections.md +0 -186
  480. package/docs/installers-bundlers/installers-modules-platforms-reference.md +0 -388
  481. package/docs/installers-bundlers/web-bundler-usage.md +0 -54
  482. package/docs/v4-to-v6-upgrade.md +0 -227
  483. package/docs/web-bundles-gemini-gpt-guide.md +0 -473
  484. package/src/core/_module-installer/install-config.yaml +0 -35
  485. package/src/core/_module-installer/installer.js +0 -60
  486. package/src/core/agents/bmad-web-orchestrator.agent.xml +0 -113
  487. package/src/core/tasks/adv-elicit-methods.csv +0 -39
  488. package/src/core/tasks/advanced-elicitation.xml +0 -106
  489. package/src/core/tasks/validate-workflow.xml +0 -89
  490. package/src/core/tools/shard-doc.xml +0 -109
  491. package/src/core/workflows/brainstorming/README.md +0 -261
  492. package/src/core/workflows/brainstorming/instructions.md +0 -315
  493. package/src/core/workflows/brainstorming/workflow.yaml +0 -43
  494. package/src/core/workflows/party-mode/instructions.md +0 -183
  495. package/src/core/workflows/party-mode/workflow.yaml +0 -27
  496. package/src/modules/bmb/README.md +0 -194
  497. package/src/modules/bmb/_module-installer/install-config.yaml +0 -31
  498. package/src/modules/bmb/agents/bmad-builder.agent.yaml +0 -59
  499. package/src/modules/bmb/workflows/audit-workflow/checklist.md +0 -142
  500. package/src/modules/bmb/workflows/audit-workflow/instructions.md +0 -341
  501. package/src/modules/bmb/workflows/audit-workflow/template.md +0 -118
  502. package/src/modules/bmb/workflows/audit-workflow/workflow.yaml +0 -25
  503. package/src/modules/bmb/workflows/convert-legacy/README.md +0 -262
  504. package/src/modules/bmb/workflows/convert-legacy/checklist.md +0 -205
  505. package/src/modules/bmb/workflows/convert-legacy/instructions.md +0 -377
  506. package/src/modules/bmb/workflows/convert-legacy/workflow.yaml +0 -34
  507. package/src/modules/bmb/workflows/create-agent/README.md +0 -203
  508. package/src/modules/bmb/workflows/create-agent/agent-architecture.md +0 -415
  509. package/src/modules/bmb/workflows/create-agent/agent-command-patterns.md +0 -759
  510. package/src/modules/bmb/workflows/create-agent/agent-types.md +0 -292
  511. package/src/modules/bmb/workflows/create-agent/brainstorm-context.md +0 -174
  512. package/src/modules/bmb/workflows/create-agent/checklist.md +0 -62
  513. package/src/modules/bmb/workflows/create-agent/communication-styles.md +0 -202
  514. package/src/modules/bmb/workflows/create-agent/instructions.md +0 -456
  515. package/src/modules/bmb/workflows/create-agent/workflow.yaml +0 -49
  516. package/src/modules/bmb/workflows/create-module/README.md +0 -229
  517. package/src/modules/bmb/workflows/create-module/brainstorm-context.md +0 -137
  518. package/src/modules/bmb/workflows/create-module/checklist.md +0 -235
  519. package/src/modules/bmb/workflows/create-module/installer-templates/install-config.yaml +0 -92
  520. package/src/modules/bmb/workflows/create-module/installer-templates/installer.js +0 -231
  521. package/src/modules/bmb/workflows/create-module/instructions.md +0 -576
  522. package/src/modules/bmb/workflows/create-module/module-structure.md +0 -400
  523. package/src/modules/bmb/workflows/create-module/workflow.yaml +0 -44
  524. package/src/modules/bmb/workflows/create-workflow/README.md +0 -277
  525. package/src/modules/bmb/workflows/create-workflow/brainstorm-context.md +0 -197
  526. package/src/modules/bmb/workflows/create-workflow/checklist.md +0 -94
  527. package/src/modules/bmb/workflows/create-workflow/instructions.md +0 -724
  528. package/src/modules/bmb/workflows/create-workflow/workflow-creation-guide.md +0 -1306
  529. package/src/modules/bmb/workflows/create-workflow/workflow-template/checklist.md +0 -24
  530. package/src/modules/bmb/workflows/create-workflow/workflow-template/instructions.md +0 -13
  531. package/src/modules/bmb/workflows/create-workflow/workflow-template/template.md +0 -9
  532. package/src/modules/bmb/workflows/create-workflow/workflow-template/workflow.yaml +0 -65
  533. package/src/modules/bmb/workflows/create-workflow/workflow.yaml +0 -42
  534. package/src/modules/bmb/workflows/edit-agent/README.md +0 -112
  535. package/src/modules/bmb/workflows/edit-agent/checklist.md +0 -112
  536. package/src/modules/bmb/workflows/edit-agent/instructions.md +0 -290
  537. package/src/modules/bmb/workflows/edit-agent/workflow.yaml +0 -35
  538. package/src/modules/bmb/workflows/edit-module/README.md +0 -187
  539. package/src/modules/bmb/workflows/edit-module/checklist.md +0 -165
  540. package/src/modules/bmb/workflows/edit-module/instructions.md +0 -339
  541. package/src/modules/bmb/workflows/edit-module/workflow.yaml +0 -36
  542. package/src/modules/bmb/workflows/edit-workflow/README.md +0 -119
  543. package/src/modules/bmb/workflows/edit-workflow/checklist.md +0 -70
  544. package/src/modules/bmb/workflows/edit-workflow/instructions.md +0 -342
  545. package/src/modules/bmb/workflows/edit-workflow/workflow.yaml +0 -29
  546. package/src/modules/bmb/workflows/module-brief/README.md +0 -264
  547. package/src/modules/bmb/workflows/module-brief/checklist.md +0 -116
  548. package/src/modules/bmb/workflows/module-brief/instructions.md +0 -267
  549. package/src/modules/bmb/workflows/module-brief/template.md +0 -275
  550. package/src/modules/bmb/workflows/module-brief/workflow.yaml +0 -31
  551. package/src/modules/bmb/workflows/redoc/README.md +0 -87
  552. package/src/modules/bmb/workflows/redoc/checklist.md +0 -99
  553. package/src/modules/bmb/workflows/redoc/instructions.md +0 -265
  554. package/src/modules/bmb/workflows/redoc/workflow.yaml +0 -34
  555. package/src/modules/bmgd/README.md +0 -208
  556. package/src/modules/bmgd/_module-installer/install-config.yaml +0 -54
  557. package/src/modules/bmgd/agents/game-architect.agent.yaml +0 -33
  558. package/src/modules/bmgd/agents/game-designer.agent.yaml +0 -40
  559. package/src/modules/bmgd/agents/game-dev.agent.yaml +0 -40
  560. package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +0 -75
  561. package/src/modules/bmgd/teams/default-party.csv +0 -10
  562. package/src/modules/bmgd/teams/team-gamedev.yaml +0 -18
  563. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/game-brain-methods.csv +0 -26
  564. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/game-context.md +0 -115
  565. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/instructions.md +0 -128
  566. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/workflow.yaml +0 -41
  567. package/src/modules/bmgd/workflows/1-preproduction/game-brief/checklist.md +0 -128
  568. package/src/modules/bmgd/workflows/1-preproduction/game-brief/instructions.md +0 -371
  569. package/src/modules/bmgd/workflows/1-preproduction/game-brief/template.md +0 -205
  570. package/src/modules/bmgd/workflows/1-preproduction/game-brief/workflow.yaml +0 -44
  571. package/src/modules/bmgd/workflows/2-design/gdd/checklist.md +0 -148
  572. package/src/modules/bmgd/workflows/2-design/gdd/game-types/action-platformer.md +0 -45
  573. package/src/modules/bmgd/workflows/2-design/gdd/game-types/adventure.md +0 -84
  574. package/src/modules/bmgd/workflows/2-design/gdd/game-types/card-game.md +0 -76
  575. package/src/modules/bmgd/workflows/2-design/gdd/game-types/fighting.md +0 -89
  576. package/src/modules/bmgd/workflows/2-design/gdd/game-types/horror.md +0 -86
  577. package/src/modules/bmgd/workflows/2-design/gdd/game-types/idle-incremental.md +0 -78
  578. package/src/modules/bmgd/workflows/2-design/gdd/game-types/metroidvania.md +0 -87
  579. package/src/modules/bmgd/workflows/2-design/gdd/game-types/moba.md +0 -74
  580. package/src/modules/bmgd/workflows/2-design/gdd/game-types/party-game.md +0 -79
  581. package/src/modules/bmgd/workflows/2-design/gdd/game-types/puzzle.md +0 -58
  582. package/src/modules/bmgd/workflows/2-design/gdd/game-types/racing.md +0 -88
  583. package/src/modules/bmgd/workflows/2-design/gdd/game-types/rhythm.md +0 -79
  584. package/src/modules/bmgd/workflows/2-design/gdd/game-types/roguelike.md +0 -69
  585. package/src/modules/bmgd/workflows/2-design/gdd/game-types/rpg.md +0 -70
  586. package/src/modules/bmgd/workflows/2-design/gdd/game-types/sandbox.md +0 -79
  587. package/src/modules/bmgd/workflows/2-design/gdd/game-types/shooter.md +0 -62
  588. package/src/modules/bmgd/workflows/2-design/gdd/game-types/simulation.md +0 -73
  589. package/src/modules/bmgd/workflows/2-design/gdd/game-types/sports.md +0 -75
  590. package/src/modules/bmgd/workflows/2-design/gdd/game-types/strategy.md +0 -71
  591. package/src/modules/bmgd/workflows/2-design/gdd/game-types/survival.md +0 -79
  592. package/src/modules/bmgd/workflows/2-design/gdd/game-types/text-based.md +0 -91
  593. package/src/modules/bmgd/workflows/2-design/gdd/game-types/tower-defense.md +0 -79
  594. package/src/modules/bmgd/workflows/2-design/gdd/game-types/turn-based-tactics.md +0 -88
  595. package/src/modules/bmgd/workflows/2-design/gdd/game-types/visual-novel.md +0 -89
  596. package/src/modules/bmgd/workflows/2-design/gdd/game-types.csv +0 -25
  597. package/src/modules/bmgd/workflows/2-design/gdd/gdd-template.md +0 -153
  598. package/src/modules/bmgd/workflows/2-design/gdd/instructions-gdd.md +0 -501
  599. package/src/modules/bmgd/workflows/2-design/gdd/workflow.yaml +0 -81
  600. package/src/modules/bmgd/workflows/2-design/narrative/checklist.md +0 -139
  601. package/src/modules/bmgd/workflows/2-design/narrative/instructions-narrative.md +0 -603
  602. package/src/modules/bmgd/workflows/2-design/narrative/narrative-template.md +0 -195
  603. package/src/modules/bmgd/workflows/2-design/narrative/workflow.yaml +0 -38
  604. package/src/modules/bmgd/workflows/3-technical/game-architecture/architecture-patterns.yaml +0 -321
  605. package/src/modules/bmgd/workflows/3-technical/game-architecture/architecture-template.md +0 -103
  606. package/src/modules/bmgd/workflows/3-technical/game-architecture/checklist.md +0 -240
  607. package/src/modules/bmgd/workflows/3-technical/game-architecture/decision-catalog.yaml +0 -222
  608. package/src/modules/bmgd/workflows/3-technical/game-architecture/instructions.md +0 -699
  609. package/src/modules/bmgd/workflows/3-technical/game-architecture/pattern-categories.csv +0 -13
  610. package/src/modules/bmgd/workflows/3-technical/game-architecture/workflow.yaml +0 -67
  611. package/src/modules/bmgd/workflows/4-production/code-review/backlog_template.md +0 -12
  612. package/src/modules/bmgd/workflows/4-production/code-review/checklist.md +0 -22
  613. package/src/modules/bmgd/workflows/4-production/code-review/instructions.md +0 -398
  614. package/src/modules/bmgd/workflows/4-production/code-review/workflow.yaml +0 -57
  615. package/src/modules/bmgd/workflows/4-production/correct-course/checklist.md +0 -279
  616. package/src/modules/bmgd/workflows/4-production/correct-course/instructions.md +0 -206
  617. package/src/modules/bmgd/workflows/4-production/correct-course/workflow.yaml +0 -52
  618. package/src/modules/bmgd/workflows/4-production/create-story/checklist.md +0 -240
  619. package/src/modules/bmgd/workflows/4-production/create-story/instructions.md +0 -256
  620. package/src/modules/bmgd/workflows/4-production/create-story/template.md +0 -51
  621. package/src/modules/bmgd/workflows/4-production/create-story/workflow.yaml +0 -68
  622. package/src/modules/bmgd/workflows/4-production/dev-story/checklist.md +0 -38
  623. package/src/modules/bmgd/workflows/4-production/dev-story/instructions.md +0 -267
  624. package/src/modules/bmgd/workflows/4-production/dev-story/workflow.yaml +0 -53
  625. package/src/modules/bmgd/workflows/4-production/epic-tech-context/checklist.md +0 -17
  626. package/src/modules/bmgd/workflows/4-production/epic-tech-context/instructions.md +0 -164
  627. package/src/modules/bmgd/workflows/4-production/epic-tech-context/template.md +0 -76
  628. package/src/modules/bmgd/workflows/4-production/epic-tech-context/workflow.yaml +0 -52
  629. package/src/modules/bmgd/workflows/4-production/retrospective/instructions.md +0 -1442
  630. package/src/modules/bmgd/workflows/4-production/retrospective/workflow.yaml +0 -52
  631. package/src/modules/bmgd/workflows/4-production/sprint-planning/instructions.md +0 -234
  632. package/src/modules/bmgd/workflows/4-production/sprint-planning/sprint-status-template.yaml +0 -55
  633. package/src/modules/bmgd/workflows/4-production/sprint-planning/workflow.yaml +0 -50
  634. package/src/modules/bmgd/workflows/4-production/story-context/checklist.md +0 -16
  635. package/src/modules/bmgd/workflows/4-production/story-context/context-template.xml +0 -34
  636. package/src/modules/bmgd/workflows/4-production/story-context/instructions.md +0 -209
  637. package/src/modules/bmgd/workflows/4-production/story-context/workflow.yaml +0 -57
  638. package/src/modules/bmgd/workflows/4-production/story-done/instructions.md +0 -111
  639. package/src/modules/bmgd/workflows/4-production/story-done/workflow.yaml +0 -28
  640. package/src/modules/bmgd/workflows/4-production/story-ready/instructions.md +0 -117
  641. package/src/modules/bmgd/workflows/4-production/story-ready/workflow.yaml +0 -25
  642. package/src/modules/bmm/README.md +0 -128
  643. package/src/modules/bmm/_module-installer/assets/bmm-kb.md +0 -1
  644. package/src/modules/bmm/_module-installer/assets/technical-decisions.md +0 -30
  645. package/src/modules/bmm/_module-installer/install-config.yaml +0 -60
  646. package/src/modules/bmm/_module-installer/installer.js +0 -131
  647. package/src/modules/bmm/_module-installer/platform-specifics/claude-code.js +0 -35
  648. package/src/modules/bmm/_module-installer/platform-specifics/windsurf.js +0 -32
  649. package/src/modules/bmm/agents/analyst.agent.yaml +0 -48
  650. package/src/modules/bmm/agents/architect.agent.yaml +0 -42
  651. package/src/modules/bmm/agents/dev.agent.yaml +0 -40
  652. package/src/modules/bmm/agents/pm.agent.yaml +0 -61
  653. package/src/modules/bmm/agents/sm.agent.yaml +0 -72
  654. package/src/modules/bmm/agents/tea.agent.yaml +0 -65
  655. package/src/modules/bmm/agents/tech-writer.agent.yaml +0 -73
  656. package/src/modules/bmm/agents/ux-designer.agent.yaml +0 -38
  657. package/src/modules/bmm/docs/README.md +0 -235
  658. package/src/modules/bmm/docs/agents-guide.md +0 -1056
  659. package/src/modules/bmm/docs/brownfield-guide.md +0 -754
  660. package/src/modules/bmm/docs/enterprise-agentic-development.md +0 -680
  661. package/src/modules/bmm/docs/faq.md +0 -587
  662. package/src/modules/bmm/docs/glossary.md +0 -320
  663. package/src/modules/bmm/docs/party-mode.md +0 -224
  664. package/src/modules/bmm/docs/quick-spec-flow.md +0 -652
  665. package/src/modules/bmm/docs/quick-start.md +0 -366
  666. package/src/modules/bmm/docs/scale-adaptive-system.md +0 -599
  667. package/src/modules/bmm/docs/test-architecture.md +0 -394
  668. package/src/modules/bmm/docs/workflow-architecture-reference.md +0 -371
  669. package/src/modules/bmm/docs/workflow-document-project-reference.md +0 -487
  670. package/src/modules/bmm/docs/workflows-analysis.md +0 -370
  671. package/src/modules/bmm/docs/workflows-implementation.md +0 -284
  672. package/src/modules/bmm/docs/workflows-planning.md +0 -601
  673. package/src/modules/bmm/docs/workflows-solutioning.md +0 -501
  674. package/src/modules/bmm/teams/default-party.csv +0 -19
  675. package/src/modules/bmm/testarch/knowledge/ci-burn-in.md +0 -675
  676. package/src/modules/bmm/testarch/knowledge/component-tdd.md +0 -486
  677. package/src/modules/bmm/testarch/knowledge/contract-testing.md +0 -957
  678. package/src/modules/bmm/testarch/knowledge/data-factories.md +0 -500
  679. package/src/modules/bmm/testarch/knowledge/email-auth.md +0 -721
  680. package/src/modules/bmm/testarch/knowledge/error-handling.md +0 -725
  681. package/src/modules/bmm/testarch/knowledge/feature-flags.md +0 -750
  682. package/src/modules/bmm/testarch/knowledge/fixture-architecture.md +0 -401
  683. package/src/modules/bmm/testarch/knowledge/network-first.md +0 -486
  684. package/src/modules/bmm/testarch/knowledge/nfr-criteria.md +0 -670
  685. package/src/modules/bmm/testarch/knowledge/playwright-config.md +0 -730
  686. package/src/modules/bmm/testarch/knowledge/probability-impact.md +0 -601
  687. package/src/modules/bmm/testarch/knowledge/risk-governance.md +0 -615
  688. package/src/modules/bmm/testarch/knowledge/selective-testing.md +0 -732
  689. package/src/modules/bmm/testarch/knowledge/selector-resilience.md +0 -527
  690. package/src/modules/bmm/testarch/knowledge/test-healing-patterns.md +0 -644
  691. package/src/modules/bmm/testarch/knowledge/test-levels-framework.md +0 -473
  692. package/src/modules/bmm/testarch/knowledge/test-priorities-matrix.md +0 -373
  693. package/src/modules/bmm/testarch/knowledge/test-quality.md +0 -664
  694. package/src/modules/bmm/testarch/knowledge/timing-debugging.md +0 -372
  695. package/src/modules/bmm/testarch/knowledge/visual-debugging.md +0 -524
  696. package/src/modules/bmm/testarch/tea-index.csv +0 -22
  697. package/src/modules/bmm/workflows/1-analysis/brainstorm-project/instructions.md +0 -110
  698. package/src/modules/bmm/workflows/1-analysis/brainstorm-project/project-context.md +0 -25
  699. package/src/modules/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml +0 -39
  700. package/src/modules/bmm/workflows/1-analysis/domain-research/instructions.md +0 -423
  701. package/src/modules/bmm/workflows/1-analysis/domain-research/template.md +0 -180
  702. package/src/modules/bmm/workflows/1-analysis/domain-research/workflow.yaml +0 -56
  703. package/src/modules/bmm/workflows/1-analysis/product-brief/checklist.md +0 -115
  704. package/src/modules/bmm/workflows/1-analysis/product-brief/instructions.md +0 -522
  705. package/src/modules/bmm/workflows/1-analysis/product-brief/template.md +0 -181
  706. package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.yaml +0 -65
  707. package/src/modules/bmm/workflows/1-analysis/research/checklist-deep-prompt.md +0 -144
  708. package/src/modules/bmm/workflows/1-analysis/research/checklist-technical.md +0 -249
  709. package/src/modules/bmm/workflows/1-analysis/research/checklist.md +0 -299
  710. package/src/modules/bmm/workflows/1-analysis/research/claude-code/injections.yaml +0 -114
  711. package/src/modules/bmm/workflows/1-analysis/research/instructions-deep-prompt.md +0 -437
  712. package/src/modules/bmm/workflows/1-analysis/research/instructions-market.md +0 -674
  713. package/src/modules/bmm/workflows/1-analysis/research/instructions-router.md +0 -133
  714. package/src/modules/bmm/workflows/1-analysis/research/instructions-technical.md +0 -533
  715. package/src/modules/bmm/workflows/1-analysis/research/template-deep-prompt.md +0 -94
  716. package/src/modules/bmm/workflows/1-analysis/research/template-market.md +0 -347
  717. package/src/modules/bmm/workflows/1-analysis/research/template-technical.md +0 -245
  718. package/src/modules/bmm/workflows/1-analysis/research/workflow.yaml +0 -62
  719. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/checklist.md +0 -310
  720. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md +0 -1306
  721. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +0 -145
  722. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +0 -99
  723. package/src/modules/bmm/workflows/2-plan-workflows/prd/checklist.md +0 -346
  724. package/src/modules/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/epics-template.md +0 -80
  725. package/src/modules/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/instructions.md +0 -292
  726. package/src/modules/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/workflow.yaml +0 -53
  727. package/src/modules/bmm/workflows/2-plan-workflows/prd/domain-complexity.csv +0 -13
  728. package/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md +0 -525
  729. package/src/modules/bmm/workflows/2-plan-workflows/prd/prd-template.md +0 -237
  730. package/src/modules/bmm/workflows/2-plan-workflows/prd/project-types.csv +0 -11
  731. package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.yaml +0 -76
  732. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/checklist.md +0 -217
  733. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/epics-template.md +0 -74
  734. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-generate-stories.md +0 -434
  735. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions.md +0 -978
  736. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/tech-spec-template.md +0 -181
  737. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/user-story-template.md +0 -90
  738. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +0 -57
  739. package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-patterns.yaml +0 -321
  740. package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-template.md +0 -103
  741. package/src/modules/bmm/workflows/3-solutioning/architecture/checklist.md +0 -240
  742. package/src/modules/bmm/workflows/3-solutioning/architecture/decision-catalog.yaml +0 -222
  743. package/src/modules/bmm/workflows/3-solutioning/architecture/instructions.md +0 -696
  744. package/src/modules/bmm/workflows/3-solutioning/architecture/pattern-categories.csv +0 -13
  745. package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.yaml +0 -96
  746. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/checklist.md +0 -169
  747. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/instructions.md +0 -302
  748. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/template.md +0 -146
  749. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/workflow.yaml +0 -66
  750. package/src/modules/bmm/workflows/4-implementation/code-review/backlog_template.md +0 -12
  751. package/src/modules/bmm/workflows/4-implementation/code-review/checklist.md +0 -22
  752. package/src/modules/bmm/workflows/4-implementation/code-review/instructions.md +0 -398
  753. package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +0 -57
  754. package/src/modules/bmm/workflows/4-implementation/correct-course/checklist.md +0 -279
  755. package/src/modules/bmm/workflows/4-implementation/correct-course/instructions.md +0 -206
  756. package/src/modules/bmm/workflows/4-implementation/correct-course/workflow.yaml +0 -52
  757. package/src/modules/bmm/workflows/4-implementation/create-story/checklist.md +0 -240
  758. package/src/modules/bmm/workflows/4-implementation/create-story/instructions.md +0 -256
  759. package/src/modules/bmm/workflows/4-implementation/create-story/template.md +0 -51
  760. package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +0 -68
  761. package/src/modules/bmm/workflows/4-implementation/dev-story/checklist.md +0 -38
  762. package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.md +0 -267
  763. package/src/modules/bmm/workflows/4-implementation/dev-story/workflow.yaml +0 -53
  764. package/src/modules/bmm/workflows/4-implementation/epic-tech-context/checklist.md +0 -17
  765. package/src/modules/bmm/workflows/4-implementation/epic-tech-context/instructions.md +0 -164
  766. package/src/modules/bmm/workflows/4-implementation/epic-tech-context/template.md +0 -76
  767. package/src/modules/bmm/workflows/4-implementation/epic-tech-context/workflow.yaml +0 -52
  768. package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +0 -1442
  769. package/src/modules/bmm/workflows/4-implementation/retrospective/workflow.yaml +0 -52
  770. package/src/modules/bmm/workflows/4-implementation/sprint-planning/checklist.md +0 -33
  771. package/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +0 -234
  772. package/src/modules/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +0 -55
  773. package/src/modules/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +0 -50
  774. package/src/modules/bmm/workflows/4-implementation/story-context/checklist.md +0 -16
  775. package/src/modules/bmm/workflows/4-implementation/story-context/context-template.xml +0 -34
  776. package/src/modules/bmm/workflows/4-implementation/story-context/instructions.md +0 -209
  777. package/src/modules/bmm/workflows/4-implementation/story-context/workflow.yaml +0 -57
  778. package/src/modules/bmm/workflows/4-implementation/story-done/instructions.md +0 -111
  779. package/src/modules/bmm/workflows/4-implementation/story-done/workflow.yaml +0 -28
  780. package/src/modules/bmm/workflows/4-implementation/story-ready/instructions.md +0 -117
  781. package/src/modules/bmm/workflows/4-implementation/story-ready/workflow.yaml +0 -25
  782. package/src/modules/bmm/workflows/document-project/checklist.md +0 -245
  783. package/src/modules/bmm/workflows/document-project/instructions.md +0 -222
  784. package/src/modules/bmm/workflows/document-project/templates/project-scan-report-schema.json +0 -160
  785. package/src/modules/bmm/workflows/document-project/workflow.yaml +0 -36
  786. package/src/modules/bmm/workflows/document-project/workflows/deep-dive-instructions.md +0 -298
  787. package/src/modules/bmm/workflows/document-project/workflows/deep-dive.yaml +0 -31
  788. package/src/modules/bmm/workflows/document-project/workflows/full-scan-instructions.md +0 -1106
  789. package/src/modules/bmm/workflows/document-project/workflows/full-scan.yaml +0 -31
  790. package/src/modules/bmm/workflows/techdoc/documentation-standards.md +0 -262
  791. package/src/modules/bmm/workflows/testarch/atdd/atdd-checklist-template.md +0 -363
  792. package/src/modules/bmm/workflows/testarch/atdd/checklist.md +0 -373
  793. package/src/modules/bmm/workflows/testarch/atdd/instructions.md +0 -785
  794. package/src/modules/bmm/workflows/testarch/atdd/workflow.yaml +0 -54
  795. package/src/modules/bmm/workflows/testarch/automate/checklist.md +0 -580
  796. package/src/modules/bmm/workflows/testarch/automate/instructions.md +0 -1303
  797. package/src/modules/bmm/workflows/testarch/automate/workflow.yaml +0 -63
  798. package/src/modules/bmm/workflows/testarch/ci/checklist.md +0 -246
  799. package/src/modules/bmm/workflows/testarch/ci/github-actions-template.yaml +0 -165
  800. package/src/modules/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +0 -128
  801. package/src/modules/bmm/workflows/testarch/ci/instructions.md +0 -517
  802. package/src/modules/bmm/workflows/testarch/ci/workflow.yaml +0 -55
  803. package/src/modules/bmm/workflows/testarch/framework/checklist.md +0 -321
  804. package/src/modules/bmm/workflows/testarch/framework/instructions.md +0 -455
  805. package/src/modules/bmm/workflows/testarch/framework/workflow.yaml +0 -55
  806. package/src/modules/bmm/workflows/testarch/nfr-assess/checklist.md +0 -405
  807. package/src/modules/bmm/workflows/testarch/nfr-assess/instructions.md +0 -722
  808. package/src/modules/bmm/workflows/testarch/nfr-assess/nfr-report-template.md +0 -443
  809. package/src/modules/bmm/workflows/testarch/nfr-assess/workflow.yaml +0 -58
  810. package/src/modules/bmm/workflows/testarch/test-design/checklist.md +0 -234
  811. package/src/modules/bmm/workflows/testarch/test-design/instructions.md +0 -782
  812. package/src/modules/bmm/workflows/testarch/test-design/test-design-template.md +0 -285
  813. package/src/modules/bmm/workflows/testarch/test-design/workflow.yaml +0 -58
  814. package/src/modules/bmm/workflows/testarch/test-review/checklist.md +0 -470
  815. package/src/modules/bmm/workflows/testarch/test-review/instructions.md +0 -608
  816. package/src/modules/bmm/workflows/testarch/test-review/test-review-template.md +0 -388
  817. package/src/modules/bmm/workflows/testarch/test-review/workflow.yaml +0 -55
  818. package/src/modules/bmm/workflows/testarch/trace/checklist.md +0 -654
  819. package/src/modules/bmm/workflows/testarch/trace/instructions.md +0 -1045
  820. package/src/modules/bmm/workflows/testarch/trace/trace-template.md +0 -673
  821. package/src/modules/bmm/workflows/testarch/trace/workflow.yaml +0 -68
  822. package/src/modules/bmm/workflows/workflow-status/init/instructions.md +0 -823
  823. package/src/modules/bmm/workflows/workflow-status/init/workflow.yaml +0 -29
  824. package/src/modules/bmm/workflows/workflow-status/instructions.md +0 -387
  825. package/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +0 -120
  826. package/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +0 -108
  827. package/src/modules/bmm/workflows/workflow-status/paths/game-design.yaml +0 -52
  828. package/src/modules/bmm/workflows/workflow-status/paths/method-brownfield.yaml +0 -104
  829. package/src/modules/bmm/workflows/workflow-status/paths/method-greenfield.yaml +0 -95
  830. package/src/modules/bmm/workflows/workflow-status/paths/quick-flow-brownfield.yaml +0 -58
  831. package/src/modules/bmm/workflows/workflow-status/paths/quick-flow-greenfield.yaml +0 -47
  832. package/src/modules/bmm/workflows/workflow-status/project-levels.yaml +0 -59
  833. package/src/modules/bmm/workflows/workflow-status/workflow-status-template.yaml +0 -24
  834. package/src/modules/bmm/workflows/workflow-status/workflow.yaml +0 -30
  835. package/src/modules/cis/README.md +0 -153
  836. package/src/modules/cis/_module-installer/install-config.yaml +0 -16
  837. package/src/modules/cis/_module-installer/installer.js +0 -92
  838. package/src/modules/cis/agents/README.md +0 -104
  839. package/src/modules/cis/agents/brainstorming-coach.agent.yaml +0 -28
  840. package/src/modules/cis/agents/creative-problem-solver.agent.yaml +0 -28
  841. package/src/modules/cis/agents/design-thinking-coach.agent.yaml +0 -28
  842. package/src/modules/cis/agents/innovation-strategist.agent.yaml +0 -28
  843. package/src/modules/cis/agents/storyteller.agent.yaml +0 -28
  844. package/src/modules/cis/teams/creative-squad.yaml +0 -7
  845. package/src/modules/cis/teams/default-party.csv +0 -11
  846. package/src/modules/cis/workflows/README.md +0 -139
  847. package/src/modules/cis/workflows/design-thinking/README.md +0 -56
  848. package/src/modules/cis/workflows/design-thinking/design-methods.csv +0 -31
  849. package/src/modules/cis/workflows/design-thinking/instructions.md +0 -200
  850. package/src/modules/cis/workflows/design-thinking/template.md +0 -111
  851. package/src/modules/cis/workflows/design-thinking/workflow.yaml +0 -43
  852. package/src/modules/cis/workflows/innovation-strategy/README.md +0 -56
  853. package/src/modules/cis/workflows/innovation-strategy/innovation-frameworks.csv +0 -31
  854. package/src/modules/cis/workflows/innovation-strategy/instructions.md +0 -274
  855. package/src/modules/cis/workflows/innovation-strategy/template.md +0 -189
  856. package/src/modules/cis/workflows/innovation-strategy/workflow.yaml +0 -43
  857. package/src/modules/cis/workflows/problem-solving/README.md +0 -56
  858. package/src/modules/cis/workflows/problem-solving/instructions.md +0 -250
  859. package/src/modules/cis/workflows/problem-solving/solving-methods.csv +0 -31
  860. package/src/modules/cis/workflows/problem-solving/template.md +0 -165
  861. package/src/modules/cis/workflows/problem-solving/workflow.yaml +0 -43
  862. package/src/modules/cis/workflows/storytelling/README.md +0 -58
  863. package/src/modules/cis/workflows/storytelling/instructions.md +0 -291
  864. package/src/modules/cis/workflows/storytelling/story-types.csv +0 -26
  865. package/src/modules/cis/workflows/storytelling/template.md +0 -113
  866. package/src/modules/cis/workflows/storytelling/workflow.yaml +0 -43
  867. package/src/utility/models/agent-activation-ide.xml +0 -51
  868. package/src/utility/models/agent-activation-web.xml +0 -60
  869. package/src/utility/models/agent-command-header.md +0 -1
  870. package/src/utility/models/agent-config-template.md +0 -23
  871. package/src/utility/models/agent-in-team-activation.xml +0 -3
  872. package/src/utility/models/fragments/activation-rules.xml +0 -8
  873. package/src/utility/models/fragments/activation-steps.xml +0 -16
  874. package/src/utility/models/fragments/handler-action.xml +0 -4
  875. package/src/utility/models/fragments/handler-exec.xml +0 -5
  876. package/src/utility/models/fragments/handler-tmpl.xml +0 -5
  877. package/src/utility/models/fragments/handler-validate-workflow.xml +0 -7
  878. package/src/utility/models/fragments/handler-workflow.xml +0 -9
  879. package/src/utility/models/fragments/menu-handlers.xml +0 -6
  880. package/src/utility/models/fragments/web-bundle-activation-steps.xml +0 -32
  881. package/src/utility/templates/agent.customize.template.yaml +0 -42
  882. package/test/fixtures/agent-schema/invalid/metadata/core-agent-with-module.agent.yaml +0 -26
  883. package/test/fixtures/agent-schema/invalid/metadata/module-agent-missing-module.agent.yaml +0 -25
  884. package/test/fixtures/agent-schema/invalid/metadata/wrong-module-value.agent.yaml +0 -26
  885. package/tools/cli/bundlers/bundle-web.js +0 -179
  886. package/tools/cli/bundlers/test-analyst.js +0 -28
  887. package/tools/cli/bundlers/test-bundler.js +0 -118
  888. package/tools/cli/bundlers/web-bundler.js +0 -1667
  889. package/tools/cli/commands/build.js +0 -458
  890. package/tools/cli/commands/list.js +0 -28
  891. package/tools/cli/commands/update.js +0 -28
  892. package/tools/cli/installers/lib/ide/auggie.js +0 -179
  893. package/tools/cli/installers/lib/ide/claude-code.js +0 -471
  894. package/tools/cli/installers/lib/ide/cline.js +0 -220
  895. package/tools/cli/installers/lib/ide/crush.js +0 -240
  896. package/tools/cli/installers/lib/ide/cursor.js +0 -352
  897. package/tools/cli/installers/lib/ide/gemini.js +0 -206
  898. package/tools/cli/installers/lib/ide/iflow.js +0 -125
  899. package/tools/cli/installers/lib/ide/opencode.js +0 -212
  900. package/tools/cli/installers/lib/ide/qwen.js +0 -318
  901. package/tools/cli/installers/lib/ide/roo.js +0 -253
  902. package/tools/cli/installers/lib/ide/templates/gemini-agent-command.toml +0 -14
  903. package/tools/cli/installers/lib/ide/templates/gemini-task-command.toml +0 -12
  904. package/tools/cli/installers/lib/ide/trae.js +0 -266
  905. package/tools/cli/installers/lib/ide/windsurf.js +0 -211
  906. package/tools/cli/lib/replace-project-root.js +0 -239
  907. package/tools/cli/regenerate-manifests.js +0 -28
  908. package/tools/cli/test-yaml-builder.js +0 -43
  909. package/tools/flattener/aggregate.js +0 -76
  910. package/tools/flattener/binary.js +0 -80
  911. package/tools/flattener/discovery.js +0 -71
  912. package/tools/flattener/files.js +0 -35
  913. package/tools/flattener/ignoreRules.js +0 -172
  914. package/tools/flattener/main.js +0 -483
  915. package/tools/flattener/projectRoot.js +0 -201
  916. package/tools/flattener/prompts.js +0 -44
  917. package/tools/flattener/stats.helpers.js +0 -368
  918. package/tools/flattener/stats.js +0 -75
  919. package/tools/flattener/test-matrix.js +0 -409
  920. package/tools/flattener/xml.js +0 -88
  921. package/tools/validate-bundles.js +0 -87
  922. package/v6-open-items.md +0 -17
  923. /package/src/{modules/bmm → bmm}/teams/team-fullstack.yaml +0 -0
  924. /package/src/{modules/bmgd/workflows/4-production → bmm/workflows/4-implementation}/sprint-planning/checklist.md +0 -0
  925. /package/src/{modules/bmm → bmm}/workflows/document-project/documentation-requirements.csv +0 -0
  926. /package/src/{modules/bmm → bmm}/workflows/document-project/templates/deep-dive-template.md +0 -0
  927. /package/src/{modules/bmm → bmm}/workflows/document-project/templates/index-template.md +0 -0
  928. /package/src/{modules/bmm → bmm}/workflows/document-project/templates/project-overview-template.md +0 -0
  929. /package/src/{modules/bmm → bmm}/workflows/document-project/templates/source-tree-template.md +0 -0
  930. /package/src/utility/{models/fragments/handler-data.xml → agent-components/handler-data.txt} +0 -0
  931. /package/{src/utility/models/action-command-header.md → tools/cli/installers/lib/ide/templates/split/.gitkeep} +0 -0
@@ -1,21 +1,33 @@
1
1
  const path = require('node:path');
2
2
  const fs = require('fs-extra');
3
- const yaml = require('js-yaml');
4
- const chalk = require('chalk');
5
- const inquirer = require('inquirer');
3
+ const yaml = require('yaml');
6
4
  const { getProjectRoot, getModulePath } = require('../../../lib/project-root');
7
5
  const { CLIUtils } = require('../../../lib/cli-utils');
6
+ const prompts = require('../../../lib/prompts');
8
7
 
9
8
  class ConfigCollector {
10
9
  constructor() {
11
10
  this.collectedConfig = {};
12
11
  this.existingConfig = null;
13
12
  this.currentProjectDir = null;
13
+ this._moduleManagerInstance = null;
14
+ }
15
+
16
+ /**
17
+ * Get or create a cached ModuleManager instance (lazy initialization)
18
+ * @returns {Object} ModuleManager instance
19
+ */
20
+ _getModuleManager() {
21
+ if (!this._moduleManagerInstance) {
22
+ const { ModuleManager } = require('../modules/manager');
23
+ this._moduleManagerInstance = new ModuleManager();
24
+ }
25
+ return this._moduleManagerInstance;
14
26
  }
15
27
 
16
28
  /**
17
29
  * Find the bmad installation directory in a project
18
- * V6+ installations can use ANY folder name but ALWAYS have _cfg/manifest.yaml
30
+ * V6+ installations can use ANY folder name but ALWAYS have _config/manifest.yaml
19
31
  * @param {string} projectDir - Project directory
20
32
  * @returns {Promise<string>} Path to bmad directory
21
33
  */
@@ -26,13 +38,13 @@ class ConfigCollector {
26
38
  return path.join(projectDir, 'bmad');
27
39
  }
28
40
 
29
- // V6+ strategy: Look for ANY directory with _cfg/manifest.yaml
41
+ // V6+ strategy: Look for ANY directory with _config/manifest.yaml
30
42
  // This is the definitive marker of a V6+ installation
31
43
  try {
32
44
  const entries = await fs.readdir(projectDir, { withFileTypes: true });
33
45
  for (const entry of entries) {
34
46
  if (entry.isDirectory()) {
35
- const manifestPath = path.join(projectDir, entry.name, '_cfg', 'manifest.yaml');
47
+ const manifestPath = path.join(projectDir, entry.name, '_config', 'manifest.yaml');
36
48
  if (await fs.pathExists(manifestPath)) {
37
49
  // Found a V6+ installation
38
50
  return path.join(projectDir, entry.name);
@@ -48,6 +60,36 @@ class ConfigCollector {
48
60
  return path.join(projectDir, 'bmad');
49
61
  }
50
62
 
63
+ /**
64
+ * Detect the existing BMAD folder name in a project
65
+ * @param {string} projectDir - Project directory
66
+ * @returns {Promise<string|null>} Folder name (just the name, not full path) or null if not found
67
+ */
68
+ async detectExistingBmadFolder(projectDir) {
69
+ // Check if project directory exists
70
+ if (!(await fs.pathExists(projectDir))) {
71
+ return null;
72
+ }
73
+
74
+ // Look for ANY directory with _config/manifest.yaml
75
+ try {
76
+ const entries = await fs.readdir(projectDir, { withFileTypes: true });
77
+ for (const entry of entries) {
78
+ if (entry.isDirectory()) {
79
+ const manifestPath = path.join(projectDir, entry.name, '_config', 'manifest.yaml');
80
+ if (await fs.pathExists(manifestPath)) {
81
+ // Found a V6+ installation, return just the folder name
82
+ return entry.name;
83
+ }
84
+ }
85
+ }
86
+ } catch {
87
+ // Ignore errors
88
+ }
89
+
90
+ return null;
91
+ }
92
+
51
93
  /**
52
94
  * Load existing config if it exists from module config files
53
95
  * @param {string} projectDir - Target project directory
@@ -75,11 +117,17 @@ class ConfigCollector {
75
117
 
76
118
  for (const entry of entries) {
77
119
  if (entry.isDirectory()) {
120
+ // Skip the _config directory - it's for system use
121
+ if (entry.name === '_config' || entry.name === '_memory') {
122
+ continue;
123
+ }
124
+
78
125
  const moduleConfigPath = path.join(bmadDir, entry.name, 'config.yaml');
126
+
79
127
  if (await fs.pathExists(moduleConfigPath)) {
80
128
  try {
81
129
  const content = await fs.readFile(moduleConfigPath, 'utf8');
82
- const moduleConfig = yaml.load(content);
130
+ const moduleConfig = yaml.parse(content);
83
131
  if (moduleConfig) {
84
132
  this.existingConfig[entry.name] = moduleConfig;
85
133
  foundAny = true;
@@ -91,19 +139,86 @@ class ConfigCollector {
91
139
  }
92
140
  }
93
141
 
94
- if (foundAny) {
95
- console.log(chalk.cyan('\n📋 Found existing BMAD module configurations'));
142
+ return foundAny;
143
+ }
144
+
145
+ /**
146
+ * Pre-scan module schemas to gather metadata for the configuration gateway prompt.
147
+ * Returns info about which modules have configurable options.
148
+ * @param {Array} modules - List of non-core module names
149
+ * @returns {Promise<Array>} Array of {moduleName, displayName, questionCount, hasFieldsWithoutDefaults}
150
+ */
151
+ async scanModuleSchemas(modules) {
152
+ const metadataFields = new Set(['code', 'name', 'header', 'subheader', 'default_selected']);
153
+ const results = [];
154
+
155
+ for (const moduleName of modules) {
156
+ // Resolve module.yaml path - custom paths first, then standard location, then ModuleManager search
157
+ let moduleConfigPath = null;
158
+ const customPath = this.customModulePaths?.get(moduleName);
159
+ if (customPath) {
160
+ moduleConfigPath = path.join(customPath, 'module.yaml');
161
+ } else {
162
+ const standardPath = path.join(getModulePath(moduleName), 'module.yaml');
163
+ if (await fs.pathExists(standardPath)) {
164
+ moduleConfigPath = standardPath;
165
+ } else {
166
+ const moduleSourcePath = await this._getModuleManager().findModuleSource(moduleName, { silent: true });
167
+ if (moduleSourcePath) {
168
+ moduleConfigPath = path.join(moduleSourcePath, 'module.yaml');
169
+ }
170
+ }
171
+ }
172
+
173
+ if (!moduleConfigPath || !(await fs.pathExists(moduleConfigPath))) {
174
+ continue;
175
+ }
176
+
177
+ try {
178
+ const content = await fs.readFile(moduleConfigPath, 'utf8');
179
+ const moduleConfig = yaml.parse(content);
180
+ if (!moduleConfig) continue;
181
+
182
+ const displayName = moduleConfig.header || `${moduleName.toUpperCase()} Module`;
183
+ const configKeys = Object.keys(moduleConfig).filter((key) => key !== 'prompt');
184
+ const questionKeys = configKeys.filter((key) => {
185
+ if (metadataFields.has(key)) return false;
186
+ const item = moduleConfig[key];
187
+ return item && typeof item === 'object' && item.prompt;
188
+ });
189
+
190
+ const hasFieldsWithoutDefaults = questionKeys.some((key) => {
191
+ const item = moduleConfig[key];
192
+ return item.default === undefined || item.default === null || item.default === '';
193
+ });
194
+
195
+ results.push({
196
+ moduleName,
197
+ displayName,
198
+ questionCount: questionKeys.length,
199
+ hasFieldsWithoutDefaults,
200
+ });
201
+ } catch (error) {
202
+ await prompts.log.warn(`Could not read schema for module "${moduleName}": ${error.message}`);
203
+ }
96
204
  }
97
205
 
98
- return foundAny;
206
+ return results;
99
207
  }
100
208
 
101
209
  /**
102
210
  * Collect configuration for all modules
103
211
  * @param {Array} modules - List of modules to configure (including 'core')
104
212
  * @param {string} projectDir - Target project directory
213
+ * @param {Object} options - Additional options
214
+ * @param {Map} options.customModulePaths - Map of module ID to source path for custom modules
215
+ * @param {boolean} options.skipPrompts - Skip prompts and use defaults (for --yes flag)
105
216
  */
106
- async collectAllConfigurations(modules, projectDir) {
217
+ async collectAllConfigurations(modules, projectDir, options = {}) {
218
+ // Store custom module paths for use in collectModuleConfig
219
+ this.customModulePaths = options.customModulePaths || new Map();
220
+ this.skipPrompts = options.skipPrompts || false;
221
+ this.modulesToCustomize = undefined;
107
222
  await this.loadExistingConfig(projectDir);
108
223
 
109
224
  // Check if core was already collected (e.g., in early collection phase)
@@ -117,10 +232,102 @@ class ConfigCollector {
117
232
  this.allAnswers = {};
118
233
  }
119
234
 
120
- for (const moduleName of allModules) {
235
+ // Split processing: core first, then gateway, then remaining modules
236
+ const coreModules = allModules.filter((m) => m === 'core');
237
+ const nonCoreModules = allModules.filter((m) => m !== 'core');
238
+
239
+ // Collect core config first (always fully prompted)
240
+ for (const moduleName of coreModules) {
121
241
  await this.collectModuleConfig(moduleName, projectDir);
122
242
  }
123
243
 
244
+ // Show batch configuration gateway for non-core modules
245
+ // Scan all non-core module schemas for display names and config metadata
246
+ let scannedModules = [];
247
+ if (!this.skipPrompts && nonCoreModules.length > 0) {
248
+ scannedModules = await this.scanModuleSchemas(nonCoreModules);
249
+ const customizableModules = scannedModules.filter((m) => m.questionCount > 0);
250
+
251
+ if (customizableModules.length > 0) {
252
+ const configMode = await prompts.select({
253
+ message: 'Module configuration',
254
+ choices: [
255
+ { name: 'Express Setup', value: 'express', hint: 'accept all defaults (recommended)' },
256
+ { name: 'Customize', value: 'customize', hint: 'choose modules to configure' },
257
+ ],
258
+ default: 'express',
259
+ });
260
+
261
+ if (configMode === 'customize') {
262
+ const choices = customizableModules.map((m) => ({
263
+ name: `${m.displayName} (${m.questionCount} option${m.questionCount === 1 ? '' : 's'})`,
264
+ value: m.moduleName,
265
+ hint: m.hasFieldsWithoutDefaults ? 'has fields without defaults' : undefined,
266
+ checked: m.hasFieldsWithoutDefaults,
267
+ }));
268
+ const selected = await prompts.multiselect({
269
+ message: 'Select modules to customize:',
270
+ choices,
271
+ required: false,
272
+ });
273
+ this.modulesToCustomize = new Set(selected);
274
+ } else {
275
+ // Express mode: no modules to customize
276
+ this.modulesToCustomize = new Set();
277
+ }
278
+ } else {
279
+ // All non-core modules have zero config - no gateway needed
280
+ this.modulesToCustomize = new Set();
281
+ }
282
+ }
283
+
284
+ // Collect remaining non-core modules
285
+ if (this.modulesToCustomize === undefined) {
286
+ // No gateway was shown (skipPrompts, no non-core modules, or direct call) - process all normally
287
+ for (const moduleName of nonCoreModules) {
288
+ await this.collectModuleConfig(moduleName, projectDir);
289
+ }
290
+ } else {
291
+ // Split into default modules (tasks progress) and customized modules (interactive)
292
+ const defaultModules = nonCoreModules.filter((m) => !this.modulesToCustomize.has(m));
293
+ const customizeModules = nonCoreModules.filter((m) => this.modulesToCustomize.has(m));
294
+
295
+ // Run default modules with a single spinner
296
+ if (defaultModules.length > 0) {
297
+ // Build display name map from all scanned modules for pre-call spinner messages
298
+ const displayNameMap = new Map();
299
+ for (const m of scannedModules) {
300
+ displayNameMap.set(m.moduleName, m.displayName);
301
+ }
302
+
303
+ const configSpinner = await prompts.spinner();
304
+ configSpinner.start('Configuring modules...');
305
+ try {
306
+ for (const moduleName of defaultModules) {
307
+ const displayName = displayNameMap.get(moduleName) || moduleName.toUpperCase();
308
+ configSpinner.message(`Configuring ${displayName}...`);
309
+ try {
310
+ this._silentConfig = true;
311
+ await this.collectModuleConfig(moduleName, projectDir);
312
+ } finally {
313
+ this._silentConfig = false;
314
+ }
315
+ }
316
+ } finally {
317
+ configSpinner.stop(customizeModules.length > 0 ? 'Module defaults applied' : 'Module configuration complete');
318
+ }
319
+ }
320
+
321
+ // Run customized modules individually (may show interactive prompts)
322
+ for (const moduleName of customizeModules) {
323
+ await this.collectModuleConfig(moduleName, projectDir);
324
+ }
325
+
326
+ if (customizeModules.length > 0) {
327
+ await prompts.log.step('Module configuration complete');
328
+ }
329
+ }
330
+
124
331
  // Add metadata
125
332
  this.collectedConfig._meta = {
126
333
  version: require(path.join(getProjectRoot(), 'package.json')).version,
@@ -151,16 +358,38 @@ class ConfigCollector {
151
358
  this.allAnswers = {};
152
359
  }
153
360
 
154
- // Load module's install config schema
155
- const installerConfigPath = path.join(getModulePath(moduleName), '_module-installer', 'install-config.yaml');
156
- const legacyConfigPath = path.join(getModulePath(moduleName), 'config.yaml');
361
+ // Load module's config schema from module.yaml
362
+ // First, try the standard src/modules location
363
+ let moduleConfigPath = path.join(getModulePath(moduleName), 'module.yaml');
364
+
365
+ // If not found in src/modules, we need to find it by searching the project
366
+ if (!(await fs.pathExists(moduleConfigPath))) {
367
+ const moduleSourcePath = await this._getModuleManager().findModuleSource(moduleName, { silent: true });
368
+
369
+ if (moduleSourcePath) {
370
+ moduleConfigPath = path.join(moduleSourcePath, 'module.yaml');
371
+ }
372
+ }
157
373
 
158
374
  let configPath = null;
159
- if (await fs.pathExists(installerConfigPath)) {
160
- configPath = installerConfigPath;
161
- } else if (await fs.pathExists(legacyConfigPath)) {
162
- configPath = legacyConfigPath;
375
+ let isCustomModule = false;
376
+
377
+ if (await fs.pathExists(moduleConfigPath)) {
378
+ configPath = moduleConfigPath;
163
379
  } else {
380
+ // Check if this is a custom module with custom.yaml
381
+ const moduleSourcePath = await this._getModuleManager().findModuleSource(moduleName, { silent: true });
382
+
383
+ if (moduleSourcePath) {
384
+ const rootCustomConfigPath = path.join(moduleSourcePath, 'custom.yaml');
385
+
386
+ if (await fs.pathExists(rootCustomConfigPath)) {
387
+ isCustomModule = true;
388
+ // For custom modules, we don't have an install-config schema, so just use existing values
389
+ // The custom.yaml values will be loaded and merged during installation
390
+ }
391
+ }
392
+
164
393
  // No config schema for this module - use existing values
165
394
  if (this.existingConfig && this.existingConfig[moduleName]) {
166
395
  if (!this.collectedConfig[moduleName]) {
@@ -172,7 +401,7 @@ class ConfigCollector {
172
401
  }
173
402
 
174
403
  const configContent = await fs.readFile(configPath, 'utf8');
175
- const moduleConfig = yaml.load(configContent);
404
+ const moduleConfig = yaml.parse(configContent);
176
405
 
177
406
  if (!moduleConfig) {
178
407
  return false;
@@ -182,33 +411,80 @@ class ConfigCollector {
182
411
  const configKeys = Object.keys(moduleConfig).filter((key) => key !== 'prompt');
183
412
  const existingKeys = this.existingConfig && this.existingConfig[moduleName] ? Object.keys(this.existingConfig[moduleName]) : [];
184
413
 
414
+ // Check if this module has no configuration keys at all (like CIS)
415
+ // Filter out metadata fields and only count actual config objects
416
+ const metadataFields = new Set(['code', 'name', 'header', 'subheader', 'default_selected']);
417
+ const actualConfigKeys = configKeys.filter((key) => !metadataFields.has(key));
418
+ const hasNoConfig = actualConfigKeys.length === 0;
419
+
420
+ // If module has no config keys at all, handle it specially
421
+ if (hasNoConfig && moduleConfig.subheader) {
422
+ const moduleDisplayName = moduleConfig.header || `${moduleName.toUpperCase()} Module`;
423
+ await prompts.log.step(moduleDisplayName);
424
+ await prompts.log.message(` \u2713 ${moduleConfig.subheader}`);
425
+ return false; // No new fields
426
+ }
427
+
428
+ // Find new interactive fields (with prompt)
185
429
  const newKeys = configKeys.filter((key) => {
186
430
  const item = moduleConfig[key];
187
431
  // Check if it's a config item and doesn't exist in existing config
188
432
  return item && typeof item === 'object' && item.prompt && !existingKeys.includes(key);
189
433
  });
190
434
 
191
- // If in silent mode and no new keys, use existing config and skip prompts
192
- if (silentMode && newKeys.length === 0) {
435
+ // Find new static fields (without prompt, just result)
436
+ const newStaticKeys = configKeys.filter((key) => {
437
+ const item = moduleConfig[key];
438
+ return item && typeof item === 'object' && !item.prompt && item.result && !existingKeys.includes(key);
439
+ });
440
+
441
+ // If in silent mode and no new keys (neither interactive nor static), use existing config and skip prompts
442
+ if (silentMode && newKeys.length === 0 && newStaticKeys.length === 0) {
193
443
  if (this.existingConfig && this.existingConfig[moduleName]) {
194
444
  if (!this.collectedConfig[moduleName]) {
195
445
  this.collectedConfig[moduleName] = {};
196
446
  }
197
447
  this.collectedConfig[moduleName] = { ...this.existingConfig[moduleName] };
198
448
 
449
+ // Special handling for user_name: ensure it has a value
450
+ if (
451
+ moduleName === 'core' &&
452
+ (!this.collectedConfig[moduleName].user_name || this.collectedConfig[moduleName].user_name === '[USER_NAME]')
453
+ ) {
454
+ this.collectedConfig[moduleName].user_name = this.getDefaultUsername();
455
+ }
456
+
199
457
  // Also populate allAnswers for cross-referencing
200
458
  for (const [key, value] of Object.entries(this.existingConfig[moduleName])) {
201
- this.allAnswers[`${moduleName}_${key}`] = value;
459
+ // Ensure user_name is properly set in allAnswers too
460
+ let finalValue = value;
461
+ if (moduleName === 'core' && key === 'user_name' && (!value || value === '[USER_NAME]')) {
462
+ finalValue = this.getDefaultUsername();
463
+ }
464
+ this.allAnswers[`${moduleName}_${key}`] = finalValue;
465
+ }
466
+ } else if (moduleName === 'core') {
467
+ // No existing core config - ensure we at least have user_name
468
+ if (!this.collectedConfig[moduleName]) {
469
+ this.collectedConfig[moduleName] = {};
470
+ }
471
+ if (!this.collectedConfig[moduleName].user_name) {
472
+ this.collectedConfig[moduleName].user_name = this.getDefaultUsername();
473
+ this.allAnswers[`${moduleName}_user_name`] = this.getDefaultUsername();
202
474
  }
203
475
  }
204
- // Show "no config" message for modules with no new questions
205
- CLIUtils.displayModuleNoConfig(moduleName, moduleConfig.header, moduleConfig.subheader);
476
+
477
+ // Show "no config" message for modules with no new questions (that have config keys)
478
+ await prompts.log.message(` \u2713 ${moduleName.toUpperCase()} module already up to date`);
206
479
  return false; // No new fields
207
480
  }
208
481
 
209
- // If we have new fields, build questions first
210
- if (newKeys.length > 0) {
482
+ // If we have new fields (interactive or static), process them
483
+ if (newKeys.length > 0 || newStaticKeys.length > 0) {
211
484
  const questions = [];
485
+ const staticAnswers = {};
486
+
487
+ // Build questions for interactive fields
212
488
  for (const key of newKeys) {
213
489
  const item = moduleConfig[key];
214
490
  const question = await this.buildQuestion(moduleName, key, item, moduleConfig);
@@ -217,38 +493,54 @@ class ConfigCollector {
217
493
  }
218
494
  }
219
495
 
496
+ // Prepare static answers (no prompt, just result)
497
+ for (const key of newStaticKeys) {
498
+ staticAnswers[`${moduleName}_${key}`] = undefined;
499
+ }
500
+
501
+ // Collect all answers (static + prompted)
502
+ let allAnswers = { ...staticAnswers };
503
+
220
504
  if (questions.length > 0) {
221
505
  // Only show header if we actually have questions
222
- CLIUtils.displayModuleConfigHeader(moduleName, moduleConfig.header, moduleConfig.subheader);
223
- console.log(); // Line break before questions
224
- const answers = await inquirer.prompt(questions);
225
-
226
- // Store answers for cross-referencing
227
- Object.assign(this.allAnswers, answers);
228
-
229
- // Process answers and build result values
230
- for (const key of Object.keys(answers)) {
231
- const originalKey = key.replace(`${moduleName}_`, '');
232
- const item = moduleConfig[originalKey];
233
- const value = answers[key];
234
-
235
- let result;
236
- if (Array.isArray(value)) {
237
- result = value;
238
- } else if (item.result) {
239
- result = this.processResultTemplate(item.result, value);
240
- } else {
241
- result = value;
242
- }
506
+ await CLIUtils.displayModuleConfigHeader(moduleName, moduleConfig.header, moduleConfig.subheader);
507
+ await prompts.log.message('');
508
+ const promptedAnswers = await prompts.prompt(questions);
509
+
510
+ // Merge prompted answers with static answers
511
+ Object.assign(allAnswers, promptedAnswers);
512
+ } else if (newStaticKeys.length > 0) {
513
+ // Only static fields, no questions - show no config message
514
+ await prompts.log.message(` \u2713 ${moduleName.toUpperCase()} module configuration updated`);
515
+ }
243
516
 
244
- if (!this.collectedConfig[moduleName]) {
245
- this.collectedConfig[moduleName] = {};
246
- }
247
- this.collectedConfig[moduleName][originalKey] = result;
248
- }
517
+ // Store all answers for cross-referencing
518
+ Object.assign(this.allAnswers, allAnswers);
519
+
520
+ // Process all answers (both static and prompted)
521
+ // First, copy existing config to preserve values that aren't being updated
522
+ if (this.existingConfig && this.existingConfig[moduleName]) {
523
+ this.collectedConfig[moduleName] = { ...this.existingConfig[moduleName] };
249
524
  } else {
250
- // New keys exist but no questions generated - show no config message
251
- CLIUtils.displayModuleNoConfig(moduleName, moduleConfig.header, moduleConfig.subheader);
525
+ this.collectedConfig[moduleName] = {};
526
+ }
527
+
528
+ for (const key of Object.keys(allAnswers)) {
529
+ const originalKey = key.replace(`${moduleName}_`, '');
530
+ const item = moduleConfig[originalKey];
531
+ const value = allAnswers[key];
532
+
533
+ let result;
534
+ if (Array.isArray(value)) {
535
+ result = value;
536
+ } else if (item.result) {
537
+ result = this.processResultTemplate(item.result, value);
538
+ } else {
539
+ result = value;
540
+ }
541
+
542
+ // Update the collected config with new/updated values
543
+ this.collectedConfig[moduleName][originalKey] = result;
252
544
  }
253
545
  }
254
546
 
@@ -265,7 +557,9 @@ class ConfigCollector {
265
557
  }
266
558
  }
267
559
 
268
- return newKeys.length > 0; // Return true if we prompted for new fields
560
+ await this.displayModulePostConfigNotes(moduleName, moduleConfig);
561
+
562
+ return newKeys.length > 0 || newStaticKeys.length > 0; // Return true if we had any new fields (interactive or static)
269
563
  }
270
564
 
271
565
  /**
@@ -329,6 +623,25 @@ class ConfigCollector {
329
623
  return result;
330
624
  }
331
625
 
626
+ /**
627
+ * Get the default username from the system
628
+ * @returns {string} Capitalized username\
629
+ */
630
+ getDefaultUsername() {
631
+ let result = 'BMad';
632
+ try {
633
+ const os = require('node:os');
634
+ const userInfo = os.userInfo();
635
+ if (userInfo && userInfo.username) {
636
+ const username = userInfo.username;
637
+ result = username.charAt(0).toUpperCase() + username.slice(1);
638
+ }
639
+ } catch {
640
+ // Do nothing, just return 'BMad'
641
+ }
642
+ return result;
643
+ }
644
+
332
645
  /**
333
646
  * Collect configuration for a single module
334
647
  * @param {string} moduleName - Module name
@@ -347,22 +660,37 @@ class ConfigCollector {
347
660
  if (!this.allAnswers) {
348
661
  this.allAnswers = {};
349
662
  }
350
- // Load module's config.yaml (check new location first, then fallback)
351
- const installerConfigPath = path.join(getModulePath(moduleName), '_module-installer', 'install-config.yaml');
352
- const legacyConfigPath = path.join(getModulePath(moduleName), 'config.yaml');
663
+ // Load module's config
664
+ // First, check if we have a custom module path for this module
665
+ let moduleConfigPath = null;
666
+
667
+ if (this.customModulePaths && this.customModulePaths.has(moduleName)) {
668
+ const customPath = this.customModulePaths.get(moduleName);
669
+ moduleConfigPath = path.join(customPath, 'module.yaml');
670
+ } else {
671
+ // Try the standard src/modules location
672
+ moduleConfigPath = path.join(getModulePath(moduleName), 'module.yaml');
673
+ }
674
+
675
+ // If not found in src/modules or custom paths, search the project
676
+ if (!(await fs.pathExists(moduleConfigPath))) {
677
+ const moduleSourcePath = await this._getModuleManager().findModuleSource(moduleName, { silent: true });
678
+
679
+ if (moduleSourcePath) {
680
+ moduleConfigPath = path.join(moduleSourcePath, 'module.yaml');
681
+ }
682
+ }
353
683
 
354
684
  let configPath = null;
355
- if (await fs.pathExists(installerConfigPath)) {
356
- configPath = installerConfigPath;
357
- } else if (await fs.pathExists(legacyConfigPath)) {
358
- configPath = legacyConfigPath;
685
+ if (await fs.pathExists(moduleConfigPath)) {
686
+ configPath = moduleConfigPath;
359
687
  } else {
360
688
  // No config for this module
361
689
  return;
362
690
  }
363
691
 
364
692
  const configContent = await fs.readFile(configPath, 'utf8');
365
- const moduleConfig = yaml.load(configContent);
693
+ const moduleConfig = yaml.parse(configContent);
366
694
 
367
695
  if (!moduleConfig) {
368
696
  return;
@@ -370,30 +698,104 @@ class ConfigCollector {
370
698
 
371
699
  // Process each config item
372
700
  const questions = [];
701
+ const staticAnswers = {};
373
702
  const configKeys = Object.keys(moduleConfig).filter((key) => key !== 'prompt');
374
703
 
375
704
  for (const key of configKeys) {
376
705
  const item = moduleConfig[key];
377
706
 
378
707
  // Skip if not a config object
379
- if (!item || typeof item !== 'object' || !item.prompt) {
708
+ if (!item || typeof item !== 'object') {
709
+ continue;
710
+ }
711
+
712
+ // Handle static values (no prompt, just result)
713
+ if (!item.prompt && item.result) {
714
+ // Add to static answers with a marker value
715
+ staticAnswers[`${moduleName}_${key}`] = undefined;
380
716
  continue;
381
717
  }
382
718
 
383
- const question = await this.buildQuestion(moduleName, key, item, moduleConfig);
384
- if (question) {
385
- questions.push(question);
719
+ // Handle interactive values (with prompt)
720
+ if (item.prompt) {
721
+ const question = await this.buildQuestion(moduleName, key, item, moduleConfig);
722
+ if (question) {
723
+ questions.push(question);
724
+ }
386
725
  }
387
726
  }
388
727
 
389
- // Display appropriate header based on whether there are questions
728
+ // Collect all answers (static + prompted)
729
+ let allAnswers = { ...staticAnswers };
730
+
731
+ // If there are questions to ask, prompt for accepting defaults vs customizing
390
732
  if (questions.length > 0) {
391
- CLIUtils.displayModuleConfigHeader(moduleName, moduleConfig.header, moduleConfig.subheader);
392
- console.log(); // Line break before questions
393
- const answers = await inquirer.prompt(questions);
733
+ const moduleDisplayName = moduleConfig.header || `${moduleName.toUpperCase()} Module`;
734
+
735
+ // Skip prompts mode: use all defaults without asking
736
+ if (this.skipPrompts) {
737
+ await prompts.log.info(`Using default configuration for ${moduleDisplayName}`);
738
+ // Use defaults for all questions
739
+ for (const question of questions) {
740
+ const hasDefault = question.default !== undefined && question.default !== null && question.default !== '';
741
+ if (hasDefault && typeof question.default !== 'function') {
742
+ allAnswers[question.name] = question.default;
743
+ }
744
+ }
745
+ } else {
746
+ if (!this._silentConfig) await prompts.log.step(`Configuring ${moduleDisplayName}`);
747
+ let useDefaults = true;
748
+ if (moduleName === 'core') {
749
+ useDefaults = false; // Core: always show all questions
750
+ } else if (this.modulesToCustomize === undefined) {
751
+ // Fallback: original per-module confirm (backward compat for direct calls)
752
+ const customizeAnswer = await prompts.prompt([
753
+ {
754
+ type: 'confirm',
755
+ name: 'customize',
756
+ message: 'Accept Defaults (no to customize)?',
757
+ default: true,
758
+ },
759
+ ]);
760
+ useDefaults = customizeAnswer.customize;
761
+ } else {
762
+ // Batch mode: use defaults unless module was selected for customization
763
+ useDefaults = !this.modulesToCustomize.has(moduleName);
764
+ }
765
+
766
+ if (useDefaults && moduleName !== 'core') {
767
+ // Accept defaults - only ask questions that have NO default value
768
+ const questionsWithoutDefaults = questions.filter((q) => q.default === undefined || q.default === null || q.default === '');
394
769
 
395
- // Store answers for cross-referencing
396
- Object.assign(this.allAnswers, answers);
770
+ if (questionsWithoutDefaults.length > 0) {
771
+ await prompts.log.message(` Asking required questions for ${moduleName.toUpperCase()}...`);
772
+ const promptedAnswers = await prompts.prompt(questionsWithoutDefaults);
773
+ Object.assign(allAnswers, promptedAnswers);
774
+ }
775
+
776
+ // For questions with defaults that weren't asked, we need to process them with their default values
777
+ const questionsWithDefaults = questions.filter((q) => q.default !== undefined && q.default !== null && q.default !== '');
778
+ for (const question of questionsWithDefaults) {
779
+ // Skip function defaults - these are dynamic and will be evaluated later
780
+ if (typeof question.default === 'function') {
781
+ continue;
782
+ }
783
+ allAnswers[question.name] = question.default;
784
+ }
785
+ } else {
786
+ const promptedAnswers = await prompts.prompt(questions);
787
+ Object.assign(allAnswers, promptedAnswers);
788
+ }
789
+ }
790
+ }
791
+
792
+ // Store all answers for cross-referencing
793
+ Object.assign(this.allAnswers, allAnswers);
794
+
795
+ // Process all answers (both static and prompted)
796
+ // Always process if we have any answers or static answers
797
+ if (Object.keys(allAnswers).length > 0 || Object.keys(staticAnswers).length > 0) {
798
+ const answers = allAnswers;
397
799
 
398
800
  // Process answers and build result values
399
801
  for (const key of Object.keys(answers)) {
@@ -406,8 +808,6 @@ class ConfigCollector {
406
808
 
407
809
  // For arrays (multi-select), handle differently
408
810
  if (Array.isArray(value)) {
409
- // If there's a result template and it's a string, don't use it for arrays
410
- // Just use the array value directly
411
811
  result = value;
412
812
  } else if (item.result) {
413
813
  result = item.result;
@@ -422,11 +822,9 @@ class ConfigCollector {
422
822
  if (result === '{value}') {
423
823
  result = value;
424
824
  } else {
425
- // Otherwise replace in the string
426
825
  result = result.replace('{value}', value);
427
826
  }
428
827
  } else {
429
- // For non-string values, use directly
430
828
  result = value;
431
829
  }
432
830
 
@@ -464,10 +862,6 @@ class ConfigCollector {
464
862
  for (const mod of Object.keys(this.collectedConfig)) {
465
863
  if (mod !== '_meta' && this.collectedConfig[mod] && this.collectedConfig[mod][configKey]) {
466
864
  configValue = this.collectedConfig[mod][configKey];
467
- // Extract just the value part if it's a result template
468
- if (typeof configValue === 'string' && configValue.includes('{project-root}/')) {
469
- configValue = configValue.replace('{project-root}/', '');
470
- }
471
865
  break;
472
866
  }
473
867
  }
@@ -478,7 +872,6 @@ class ConfigCollector {
478
872
  }
479
873
  }
480
874
  } else {
481
- // No result template, use value directly
482
875
  result = value;
483
876
  }
484
877
 
@@ -491,9 +884,56 @@ class ConfigCollector {
491
884
 
492
885
  // No longer display completion boxes - keep output clean
493
886
  } else {
494
- // No questions for this module - show completion message
495
- CLIUtils.displayModuleNoConfig(moduleName, moduleConfig.header, moduleConfig.subheader);
887
+ // No questions for this module - show completion message with header if available
888
+ const moduleDisplayName = moduleConfig.header || `${moduleName.toUpperCase()} Module`;
889
+
890
+ // Check if this module has NO configuration keys at all (like CIS)
891
+ // Filter out metadata fields and only count actual config objects
892
+ const metadataFields = new Set(['code', 'name', 'header', 'subheader', 'default_selected']);
893
+ const actualConfigKeys = configKeys.filter((key) => !metadataFields.has(key));
894
+ const hasNoConfig = actualConfigKeys.length === 0;
895
+
896
+ if (!this._silentConfig) {
897
+ if (hasNoConfig && (moduleConfig.subheader || moduleConfig.header)) {
898
+ await prompts.log.step(moduleDisplayName);
899
+ if (moduleConfig.subheader) {
900
+ await prompts.log.message(` \u2713 ${moduleConfig.subheader}`);
901
+ } else {
902
+ await prompts.log.message(` \u2713 No custom configuration required`);
903
+ }
904
+ } else {
905
+ // Module has config but just no questions to ask
906
+ await prompts.log.message(` \u2713 ${moduleName.toUpperCase()} module configured`);
907
+ }
908
+ }
496
909
  }
910
+
911
+ // If we have no collected config for this module, but we have a module schema,
912
+ // ensure we have at least an empty object
913
+ if (!this.collectedConfig[moduleName]) {
914
+ this.collectedConfig[moduleName] = {};
915
+
916
+ // If we accepted defaults and have no answers, we still need to check
917
+ // if there are any static values in the schema that should be applied
918
+ if (moduleConfig) {
919
+ for (const key of Object.keys(moduleConfig)) {
920
+ if (key !== 'prompt' && moduleConfig[key] && typeof moduleConfig[key] === 'object') {
921
+ const item = moduleConfig[key];
922
+ // For static items (no prompt, just result), apply the result
923
+ if (!item.prompt && item.result) {
924
+ // Apply any placeholder replacements to the result
925
+ let result = item.result;
926
+ if (typeof result === 'string') {
927
+ result = this.replacePlaceholders(result, moduleName, moduleConfig);
928
+ }
929
+ this.collectedConfig[moduleName][key] = result;
930
+ }
931
+ }
932
+ }
933
+ }
934
+ }
935
+
936
+ await this.displayModulePostConfigNotes(moduleName, moduleConfig);
497
937
  }
498
938
 
499
939
  /**
@@ -522,10 +962,6 @@ class ConfigCollector {
522
962
  for (const mod of Object.keys(this.collectedConfig)) {
523
963
  if (mod !== '_meta' && this.collectedConfig[mod] && this.collectedConfig[mod][configKey]) {
524
964
  configValue = this.collectedConfig[mod][configKey];
525
- // Remove {project-root}/ prefix if present for cleaner display
526
- if (typeof configValue === 'string' && configValue.includes('{project-root}/')) {
527
- configValue = configValue.replace('{project-root}/', '');
528
- }
529
965
  break;
530
966
  }
531
967
  }
@@ -544,7 +980,7 @@ class ConfigCollector {
544
980
  }
545
981
 
546
982
  /**
547
- * Build an inquirer question from a config item
983
+ * Build a prompt question from a config item
548
984
  * @param {string} moduleName - Module name
549
985
  * @param {string} key - Config key
550
986
  * @param {Object} item - Config item definition
@@ -565,6 +1001,11 @@ class ConfigCollector {
565
1001
  }
566
1002
  }
567
1003
 
1004
+ // Special handling for user_name: default to system user
1005
+ if (moduleName === 'core' && key === 'user_name' && !existingValue) {
1006
+ item.default = this.getDefaultUsername();
1007
+ }
1008
+
568
1009
  // Determine question type and default value
569
1010
  let questionType = 'input';
570
1011
  let defaultValue = item.default;
@@ -674,14 +1115,15 @@ class ConfigCollector {
674
1115
  }
675
1116
 
676
1117
  // Add current value indicator for existing configs
1118
+ const color = await prompts.getColor();
677
1119
  if (existingValue !== null && existingValue !== undefined) {
678
1120
  if (typeof existingValue === 'boolean') {
679
- message += chalk.dim(` (current: ${existingValue ? 'true' : 'false'})`);
1121
+ message += color.dim(` (current: ${existingValue ? 'true' : 'false'})`);
680
1122
  } else if (Array.isArray(existingValue)) {
681
- message += chalk.dim(` (current: ${existingValue.join(', ')})`);
1123
+ message += color.dim(` (current: ${existingValue.join(', ')})`);
682
1124
  } else if (questionType !== 'list') {
683
1125
  // Show the cleaned value (without {project-root}/) for display
684
- message += chalk.dim(` (current: ${existingValue})`);
1126
+ message += color.dim(` (current: ${existingValue})`);
685
1127
  }
686
1128
  } else if (item.example && questionType === 'input') {
687
1129
  // Show example for input fields
@@ -691,7 +1133,7 @@ class ConfigCollector {
691
1133
  exampleText = this.replacePlaceholders(exampleText, moduleName, moduleConfig);
692
1134
  exampleText = exampleText.replace('{project-root}/', '');
693
1135
  }
694
- message += chalk.dim(` (e.g., ${exampleText})`);
1136
+ message += color.dim(` (e.g., ${exampleText})`);
695
1137
  }
696
1138
 
697
1139
  // Build the question object
@@ -701,7 +1143,7 @@ class ConfigCollector {
701
1143
  message: message,
702
1144
  };
703
1145
 
704
- // Set default - if it's dynamic, use a function that inquirer will evaluate with current answers
1146
+ // Set default - if it's dynamic, use a function that the prompt will evaluate with current answers
705
1147
  // But if we have an existing value, always use that instead
706
1148
  if (existingValue !== null && existingValue !== undefined && questionType !== 'list') {
707
1149
  question.default = existingValue;
@@ -764,6 +1206,58 @@ class ConfigCollector {
764
1206
  return question;
765
1207
  }
766
1208
 
1209
+ /**
1210
+ * Display post-configuration notes for a module
1211
+ * Shows prerequisite guidance based on collected config values
1212
+ * Reads notes from the module's `post-install-notes` section in module.yaml
1213
+ * Supports two formats:
1214
+ * - Simple string: always displayed
1215
+ * - Object keyed by config field name, with value-specific messages
1216
+ * @param {string} moduleName - Module name
1217
+ * @param {Object} moduleConfig - Parsed module.yaml content
1218
+ */
1219
+ async displayModulePostConfigNotes(moduleName, moduleConfig) {
1220
+ if (this._silentConfig) return;
1221
+ if (!moduleConfig || !moduleConfig['post-install-notes']) return;
1222
+
1223
+ const notes = moduleConfig['post-install-notes'];
1224
+ const color = await prompts.getColor();
1225
+
1226
+ // Format 1: Simple string - always display
1227
+ if (typeof notes === 'string') {
1228
+ await prompts.log.message('');
1229
+ for (const line of notes.trim().split('\n')) {
1230
+ await prompts.log.message(color.dim(line));
1231
+ }
1232
+ return;
1233
+ }
1234
+
1235
+ // Format 2: Conditional on config values
1236
+ if (typeof notes === 'object') {
1237
+ const config = this.collectedConfig[moduleName];
1238
+ if (!config) return;
1239
+
1240
+ let hasOutput = false;
1241
+ for (const [configKey, valueMessages] of Object.entries(notes)) {
1242
+ const selectedValue = config[configKey];
1243
+ if (!selectedValue || !valueMessages[selectedValue]) continue;
1244
+
1245
+ if (hasOutput) await prompts.log.message('');
1246
+ hasOutput = true;
1247
+
1248
+ const message = valueMessages[selectedValue];
1249
+ for (const line of message.trim().split('\n')) {
1250
+ const trimmedLine = line.trim();
1251
+ if (trimmedLine.endsWith(':') && !trimmedLine.startsWith(' ')) {
1252
+ await prompts.log.info(color.bold(trimmedLine));
1253
+ } else {
1254
+ await prompts.log.message(color.dim(' ' + trimmedLine));
1255
+ }
1256
+ }
1257
+ }
1258
+ }
1259
+ }
1260
+
767
1261
  /**
768
1262
  * Deep merge two objects
769
1263
  * @param {Object} target - Target object