bmad-method 6.0.0-alpha.9 → 6.0.2

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 (933) hide show
  1. package/.augment/code_review_guidelines.yaml +271 -0
  2. package/.claude/skills/bmad-os-audit-file-refs/SKILL.md +6 -0
  3. package/.claude/skills/bmad-os-audit-file-refs/prompts/instructions.md +59 -0
  4. package/.claude/skills/bmad-os-changelog-social/SKILL.md +177 -0
  5. package/.claude/skills/bmad-os-changelog-social/examples/discord-example.md +53 -0
  6. package/.claude/skills/bmad-os-changelog-social/examples/linkedin-example.md +49 -0
  7. package/.claude/skills/bmad-os-changelog-social/examples/twitter-example.md +55 -0
  8. package/.claude/skills/bmad-os-diataxis-style-fix/SKILL.md +6 -0
  9. package/.claude/skills/bmad-os-diataxis-style-fix/prompts/instructions.md +229 -0
  10. package/.claude/skills/bmad-os-draft-changelog/SKILL.md +6 -0
  11. package/.claude/skills/bmad-os-draft-changelog/prompts/instructions.md +82 -0
  12. package/.claude/skills/bmad-os-gh-triage/SKILL.md +6 -0
  13. package/.claude/skills/bmad-os-gh-triage/prompts/agent-prompt.md +60 -0
  14. package/.claude/skills/bmad-os-gh-triage/prompts/instructions.md +74 -0
  15. package/.claude/skills/bmad-os-release-module/SKILL.md +6 -0
  16. package/.claude/skills/bmad-os-release-module/prompts/instructions.md +53 -0
  17. package/.claude/skills/bmad-os-review-pr/SKILL.md +6 -0
  18. package/.claude/skills/bmad-os-review-pr/prompts/instructions.md +231 -0
  19. package/.coderabbit.yaml +85 -0
  20. package/.github/CODE_OF_CONDUCT.md +128 -0
  21. package/.github/ISSUE_TEMPLATE/bug-report.yaml +124 -0
  22. package/.github/ISSUE_TEMPLATE/config.yaml +5 -2
  23. package/.github/ISSUE_TEMPLATE/documentation.yaml +55 -0
  24. package/.github/ISSUE_TEMPLATE/feature-request.md +22 -0
  25. package/.github/ISSUE_TEMPLATE/issue.md +32 -0
  26. package/.github/PULL_REQUEST_TEMPLATE.md +13 -0
  27. package/.github/scripts/discord-helpers.sh +34 -0
  28. package/.github/workflows/coderabbit-review.yaml +22 -0
  29. package/.github/workflows/discord.yaml +82 -8
  30. package/.github/workflows/docs.yaml +64 -0
  31. package/.github/workflows/quality.yaml +40 -2
  32. package/.husky/pre-commit +13 -0
  33. package/.markdownlint-cli2.yaml +41 -0
  34. package/.prettierignore +10 -0
  35. package/.vscode/settings.json +4 -3
  36. package/CHANGELOG.md +1110 -673
  37. package/CNAME +1 -0
  38. package/CONTRIBUTING.md +97 -189
  39. package/CONTRIBUTORS.md +32 -0
  40. package/LICENSE +7 -3
  41. package/README.md +55 -388
  42. package/SECURITY.md +85 -0
  43. package/TRADEMARK.md +55 -0
  44. package/Wordmark.png +0 -0
  45. package/banner-bmad-method.png +0 -0
  46. package/docs/404.md +9 -0
  47. package/docs/_STYLE_GUIDE.md +370 -0
  48. package/docs/explanation/advanced-elicitation.md +49 -0
  49. package/docs/explanation/adversarial-review.md +59 -0
  50. package/docs/explanation/brainstorming.md +33 -0
  51. package/docs/explanation/established-projects-faq.md +50 -0
  52. package/docs/explanation/party-mode.md +59 -0
  53. package/docs/explanation/preventing-agent-conflicts.md +112 -0
  54. package/docs/explanation/project-context.md +157 -0
  55. package/docs/explanation/quick-flow.md +73 -0
  56. package/docs/explanation/why-solutioning-matters.md +77 -0
  57. package/docs/how-to/customize-bmad.md +172 -0
  58. package/docs/how-to/established-projects.md +117 -0
  59. package/docs/how-to/get-answers-about-bmad.md +134 -0
  60. package/docs/how-to/install-bmad.md +97 -0
  61. package/docs/how-to/non-interactive-installation.md +171 -0
  62. package/docs/how-to/project-context.md +136 -0
  63. package/docs/how-to/quick-fixes.md +123 -0
  64. package/docs/how-to/shard-large-documents.md +78 -0
  65. package/docs/how-to/upgrade-to-v6.md +97 -0
  66. package/docs/index.md +37 -204
  67. package/docs/reference/agents.md +28 -0
  68. package/docs/reference/commands.md +151 -0
  69. package/docs/reference/modules.md +76 -0
  70. package/docs/reference/testing.md +106 -0
  71. package/docs/reference/workflow-map.md +89 -0
  72. package/docs/roadmap.mdx +136 -0
  73. package/docs/tutorials/getting-started.md +273 -0
  74. package/eslint.config.mjs +26 -16
  75. package/package.json +35 -28
  76. package/src/bmm/agents/analyst.agent.yaml +43 -0
  77. package/src/bmm/agents/architect.agent.yaml +29 -0
  78. package/src/bmm/agents/dev.agent.yaml +38 -0
  79. package/src/bmm/agents/pm.agent.yaml +44 -0
  80. package/src/bmm/agents/qa.agent.yaml +58 -0
  81. package/src/bmm/agents/quick-flow-solo-dev.agent.yaml +32 -0
  82. package/src/bmm/agents/sm.agent.yaml +37 -0
  83. package/src/bmm/agents/tech-writer/tech-writer-sidecar/documentation-standards.md +224 -0
  84. package/src/bmm/agents/tech-writer/tech-writer.agent.yaml +46 -0
  85. package/src/bmm/agents/ux-designer.agent.yaml +27 -0
  86. package/src/bmm/data/project-context-template.md +26 -0
  87. package/src/bmm/module-help.csv +31 -0
  88. package/src/bmm/module.yaml +50 -0
  89. package/src/bmm/teams/default-party.csv +20 -0
  90. package/src/bmm/workflows/1-analysis/create-product-brief/product-brief.template.md +10 -0
  91. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01-init.md +177 -0
  92. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-01b-continue.md +161 -0
  93. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-02-vision.md +199 -0
  94. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-03-users.md +202 -0
  95. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-04-metrics.md +205 -0
  96. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-05-scope.md +219 -0
  97. package/src/bmm/workflows/1-analysis/create-product-brief/steps/step-06-complete.md +162 -0
  98. package/src/bmm/workflows/1-analysis/create-product-brief/workflow.md +57 -0
  99. package/src/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +137 -0
  100. package/src/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +229 -0
  101. package/src/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +238 -0
  102. package/src/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +206 -0
  103. package/src/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +234 -0
  104. package/src/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +444 -0
  105. package/src/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +182 -0
  106. package/src/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +237 -0
  107. package/src/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +249 -0
  108. package/src/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +259 -0
  109. package/src/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +177 -0
  110. package/src/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +476 -0
  111. package/src/bmm/workflows/1-analysis/research/research.template.md +29 -0
  112. package/src/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +137 -0
  113. package/src/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +239 -0
  114. package/src/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +248 -0
  115. package/src/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +202 -0
  116. package/src/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +233 -0
  117. package/src/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +487 -0
  118. package/src/bmm/workflows/1-analysis/research/workflow-domain-research.md +54 -0
  119. package/src/bmm/workflows/1-analysis/research/workflow-market-research.md +54 -0
  120. package/src/bmm/workflows/1-analysis/research/workflow-technical-research.md +54 -0
  121. package/src/bmm/workflows/2-plan-workflows/create-prd/data/domain-complexity.csv +15 -0
  122. package/src/bmm/workflows/2-plan-workflows/create-prd/data/prd-purpose.md +197 -0
  123. package/src/bmm/workflows/2-plan-workflows/create-prd/data/project-types.csv +11 -0
  124. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01-init.md +191 -0
  125. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-01b-continue.md +152 -0
  126. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02-discovery.md +224 -0
  127. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02b-vision.md +154 -0
  128. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-02c-executive-summary.md +170 -0
  129. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-03-success.md +226 -0
  130. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-04-journeys.md +213 -0
  131. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-05-domain.md +207 -0
  132. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-06-innovation.md +226 -0
  133. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-07-project-type.md +237 -0
  134. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-08-scoping.md +228 -0
  135. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-09-functional.md +231 -0
  136. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-10-nonfunctional.md +242 -0
  137. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-11-polish.md +217 -0
  138. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-c/step-12-complete.md +124 -0
  139. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01-discovery.md +247 -0
  140. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-01b-legacy-conversion.md +208 -0
  141. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-02-review.md +249 -0
  142. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-03-edit.md +253 -0
  143. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-e/step-e-04-complete.md +168 -0
  144. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-01-discovery.md +226 -0
  145. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02-format-detection.md +191 -0
  146. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-02b-parity-check.md +209 -0
  147. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-03-density-validation.md +174 -0
  148. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-04-brief-coverage-validation.md +214 -0
  149. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-05-measurability-validation.md +228 -0
  150. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-06-traceability-validation.md +217 -0
  151. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-07-implementation-leakage-validation.md +205 -0
  152. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-08-domain-compliance-validation.md +243 -0
  153. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-09-project-type-validation.md +263 -0
  154. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-10-smart-validation.md +209 -0
  155. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-11-holistic-quality-validation.md +264 -0
  156. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-12-completeness-validation.md +242 -0
  157. package/src/bmm/workflows/2-plan-workflows/create-prd/steps-v/step-v-13-report-complete.md +231 -0
  158. package/src/bmm/workflows/2-plan-workflows/create-prd/templates/prd-template.md +10 -0
  159. package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-create-prd.md +63 -0
  160. package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-edit-prd.md +65 -0
  161. package/src/bmm/workflows/2-plan-workflows/create-prd/workflow-validate-prd.md +63 -0
  162. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +135 -0
  163. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +127 -0
  164. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +190 -0
  165. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +216 -0
  166. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +219 -0
  167. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +234 -0
  168. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +252 -0
  169. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +254 -0
  170. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +224 -0
  171. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +224 -0
  172. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +241 -0
  173. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +248 -0
  174. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +237 -0
  175. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +264 -0
  176. package/src/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +171 -0
  177. package/src/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +13 -0
  178. package/src/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +42 -0
  179. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-01-document-discovery.md +184 -0
  180. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-02-prd-analysis.md +172 -0
  181. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-03-epic-coverage-validation.md +173 -0
  182. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-04-ux-alignment.md +133 -0
  183. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-05-epic-quality-review.md +245 -0
  184. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/steps/step-06-final-assessment.md +129 -0
  185. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/templates/readiness-report-template.md +4 -0
  186. package/src/bmm/workflows/3-solutioning/check-implementation-readiness/workflow.md +54 -0
  187. package/src/bmm/workflows/3-solutioning/create-architecture/architecture-decision-template.md +12 -0
  188. package/src/bmm/workflows/3-solutioning/create-architecture/data/domain-complexity.csv +13 -0
  189. package/src/bmm/workflows/3-solutioning/create-architecture/data/project-types.csv +7 -0
  190. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01-init.md +153 -0
  191. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-01b-continue.md +173 -0
  192. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-02-context.md +224 -0
  193. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-03-starter.md +329 -0
  194. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-04-decisions.md +318 -0
  195. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-05-patterns.md +359 -0
  196. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-06-structure.md +379 -0
  197. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-07-validation.md +359 -0
  198. package/src/bmm/workflows/3-solutioning/create-architecture/steps/step-08-complete.md +76 -0
  199. package/src/bmm/workflows/3-solutioning/create-architecture/workflow.md +49 -0
  200. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-01-validate-prerequisites.md +259 -0
  201. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-02-design-epics.md +233 -0
  202. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-03-create-stories.md +272 -0
  203. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/steps/step-04-final-validation.md +149 -0
  204. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/templates/epics-template.md +57 -0
  205. package/src/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.md +58 -0
  206. package/src/bmm/workflows/4-implementation/code-review/checklist.md +23 -0
  207. package/src/bmm/workflows/4-implementation/code-review/instructions.xml +227 -0
  208. package/src/bmm/workflows/4-implementation/code-review/workflow.yaml +43 -0
  209. package/src/bmm/workflows/4-implementation/correct-course/checklist.md +288 -0
  210. package/src/bmm/workflows/4-implementation/correct-course/instructions.md +207 -0
  211. package/src/bmm/workflows/4-implementation/correct-course/workflow.yaml +53 -0
  212. package/src/bmm/workflows/4-implementation/create-story/checklist.md +358 -0
  213. package/src/bmm/workflows/4-implementation/create-story/instructions.xml +346 -0
  214. package/src/bmm/workflows/4-implementation/create-story/template.md +49 -0
  215. package/src/bmm/workflows/4-implementation/create-story/workflow.yaml +52 -0
  216. package/src/bmm/workflows/4-implementation/dev-story/checklist.md +80 -0
  217. package/src/bmm/workflows/4-implementation/dev-story/instructions.xml +410 -0
  218. package/src/bmm/workflows/4-implementation/dev-story/workflow.yaml +20 -0
  219. package/src/bmm/workflows/4-implementation/retrospective/instructions.md +1444 -0
  220. package/src/bmm/workflows/4-implementation/retrospective/workflow.yaml +52 -0
  221. package/src/bmm/workflows/4-implementation/sprint-planning/instructions.md +226 -0
  222. package/src/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +55 -0
  223. package/src/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +47 -0
  224. package/src/bmm/workflows/4-implementation/sprint-status/instructions.md +230 -0
  225. package/src/bmm/workflows/4-implementation/sprint-status/workflow.yaml +25 -0
  226. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-01-mode-detection.md +174 -0
  227. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-02-context-gathering.md +118 -0
  228. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-03-execute.md +111 -0
  229. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-04-self-check.md +111 -0
  230. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-05-adversarial-review.md +104 -0
  231. package/src/bmm/workflows/bmad-quick-flow/quick-dev/steps/step-06-resolve-findings.md +146 -0
  232. package/src/bmm/workflows/bmad-quick-flow/quick-dev/workflow.md +50 -0
  233. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-01-understand.md +189 -0
  234. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-02-investigate.md +143 -0
  235. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-03-generate.md +126 -0
  236. package/src/bmm/workflows/bmad-quick-flow/quick-spec/steps/step-04-review.md +200 -0
  237. package/src/bmm/workflows/bmad-quick-flow/quick-spec/tech-spec-template.md +74 -0
  238. package/src/bmm/workflows/bmad-quick-flow/quick-spec/workflow.md +79 -0
  239. package/src/bmm/workflows/document-project/checklist.md +245 -0
  240. package/src/bmm/workflows/document-project/instructions.md +130 -0
  241. package/src/bmm/workflows/document-project/templates/project-scan-report-schema.json +160 -0
  242. package/src/bmm/workflows/document-project/workflow.yaml +22 -0
  243. package/src/bmm/workflows/document-project/workflows/deep-dive-instructions.md +298 -0
  244. package/src/bmm/workflows/document-project/workflows/deep-dive.yaml +31 -0
  245. package/src/bmm/workflows/document-project/workflows/full-scan-instructions.md +1106 -0
  246. package/src/bmm/workflows/document-project/workflows/full-scan.yaml +31 -0
  247. package/src/bmm/workflows/generate-project-context/project-context-template.md +21 -0
  248. package/src/bmm/workflows/generate-project-context/steps/step-01-discover.md +184 -0
  249. package/src/bmm/workflows/generate-project-context/steps/step-02-generate.md +318 -0
  250. package/src/bmm/workflows/generate-project-context/steps/step-03-complete.md +278 -0
  251. package/src/bmm/workflows/generate-project-context/workflow.md +49 -0
  252. package/src/bmm/workflows/qa-generate-e2e-tests/checklist.md +33 -0
  253. package/src/bmm/workflows/qa-generate-e2e-tests/instructions.md +110 -0
  254. package/src/bmm/workflows/qa-generate-e2e-tests/workflow.yaml +42 -0
  255. package/src/core/agents/bmad-master.agent.yaml +12 -21
  256. package/src/core/module-help.csv +9 -0
  257. package/src/core/module.yaml +25 -0
  258. package/src/core/tasks/editorial-review-prose.xml +102 -0
  259. package/src/core/tasks/editorial-review-structure.xml +208 -0
  260. package/src/core/tasks/help.md +86 -0
  261. package/src/core/tasks/index-docs.xml +2 -2
  262. package/src/core/tasks/review-adversarial-general.xml +49 -0
  263. package/src/core/tasks/shard-doc.xml +108 -0
  264. package/src/core/tasks/workflow.xml +39 -74
  265. package/src/core/workflows/advanced-elicitation/methods.csv +51 -0
  266. package/src/core/workflows/advanced-elicitation/workflow.xml +118 -0
  267. package/src/core/workflows/brainstorming/brain-methods.csv +62 -36
  268. package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +197 -0
  269. package/src/core/workflows/brainstorming/steps/step-01b-continue.md +122 -0
  270. package/src/core/workflows/brainstorming/steps/step-02a-user-selected.md +225 -0
  271. package/src/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +237 -0
  272. package/src/core/workflows/brainstorming/steps/step-02c-random-selection.md +209 -0
  273. package/src/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +264 -0
  274. package/src/core/workflows/brainstorming/steps/step-03-technique-execution.md +399 -0
  275. package/src/core/workflows/brainstorming/steps/step-04-idea-organization.md +303 -0
  276. package/src/core/workflows/brainstorming/template.md +13 -104
  277. package/src/core/workflows/brainstorming/workflow.md +58 -0
  278. package/src/core/workflows/party-mode/steps/step-01-agent-loading.md +138 -0
  279. package/src/core/workflows/party-mode/steps/step-02-discussion-orchestration.md +187 -0
  280. package/src/core/workflows/party-mode/steps/step-03-graceful-exit.md +168 -0
  281. package/src/core/workflows/party-mode/workflow.md +194 -0
  282. package/src/utility/agent-components/activation-rules.txt +6 -0
  283. package/src/utility/agent-components/activation-steps.txt +14 -0
  284. package/src/utility/agent-components/agent-command-header.md +1 -0
  285. package/src/utility/agent-components/agent.customize.template.yaml +41 -0
  286. package/src/utility/agent-components/handler-action.txt +4 -0
  287. package/src/utility/agent-components/handler-exec.txt +6 -0
  288. package/src/utility/agent-components/handler-multi.txt +14 -0
  289. package/src/utility/agent-components/handler-tmpl.txt +5 -0
  290. package/src/utility/agent-components/handler-validate-workflow.txt +7 -0
  291. package/src/utility/agent-components/handler-workflow.txt +10 -0
  292. package/src/utility/agent-components/menu-handlers.txt +6 -0
  293. package/test/README.md +4 -4
  294. package/test/adversarial-review-tests/README.md +56 -0
  295. package/test/adversarial-review-tests/sample-content.md +46 -0
  296. package/test/adversarial-review-tests/test-cases.yaml +103 -0
  297. package/test/fixtures/agent-schema/invalid/critical-actions/actions-as-string.agent.yaml +1 -0
  298. package/test/fixtures/agent-schema/invalid/critical-actions/empty-string-in-actions.agent.yaml +1 -0
  299. package/test/fixtures/agent-schema/invalid/menu/empty-menu.agent.yaml +1 -0
  300. package/test/fixtures/agent-schema/invalid/menu/missing-menu.agent.yaml +1 -0
  301. package/test/fixtures/agent-schema/invalid/menu-commands/empty-command-target.agent.yaml +1 -0
  302. package/test/fixtures/agent-schema/invalid/menu-commands/no-command-target.agent.yaml +1 -0
  303. package/test/fixtures/agent-schema/invalid/menu-triggers/camel-case.agent.yaml +1 -0
  304. package/test/fixtures/agent-schema/invalid/menu-triggers/compound-invalid-format.agent.yaml +25 -0
  305. package/test/fixtures/agent-schema/invalid/menu-triggers/compound-mismatched-kebab.agent.yaml +25 -0
  306. package/test/fixtures/agent-schema/invalid/menu-triggers/duplicate-triggers.agent.yaml +1 -0
  307. package/test/fixtures/agent-schema/invalid/menu-triggers/empty-trigger.agent.yaml +1 -0
  308. package/test/fixtures/agent-schema/invalid/menu-triggers/leading-asterisk.agent.yaml +1 -0
  309. package/test/fixtures/agent-schema/invalid/menu-triggers/snake-case.agent.yaml +1 -0
  310. package/test/fixtures/agent-schema/invalid/menu-triggers/trigger-with-spaces.agent.yaml +1 -0
  311. package/test/fixtures/agent-schema/invalid/metadata/empty-module-string.agent.yaml +1 -1
  312. package/test/fixtures/agent-schema/invalid/metadata/extra-metadata-fields.agent.yaml +1 -0
  313. package/test/fixtures/agent-schema/invalid/persona/empty-principles-array.agent.yaml +1 -0
  314. package/test/fixtures/agent-schema/invalid/persona/empty-string-in-principles.agent.yaml +1 -0
  315. package/test/fixtures/agent-schema/invalid/persona/extra-persona-fields.agent.yaml +1 -0
  316. package/test/fixtures/agent-schema/invalid/persona/missing-role.agent.yaml +1 -0
  317. package/test/fixtures/agent-schema/invalid/prompts/empty-content.agent.yaml +1 -0
  318. package/test/fixtures/agent-schema/invalid/prompts/extra-prompt-fields.agent.yaml +1 -0
  319. package/test/fixtures/agent-schema/invalid/prompts/missing-content.agent.yaml +1 -0
  320. package/test/fixtures/agent-schema/invalid/prompts/missing-id.agent.yaml +1 -0
  321. package/test/fixtures/agent-schema/invalid/top-level/extra-top-level-keys.agent.yaml +1 -0
  322. package/test/fixtures/agent-schema/valid/critical-actions/empty-critical-actions.agent.yaml +1 -0
  323. package/test/fixtures/agent-schema/valid/critical-actions/no-critical-actions.agent.yaml +1 -0
  324. package/test/fixtures/agent-schema/valid/critical-actions/valid-critical-actions.agent.yaml +1 -0
  325. package/test/fixtures/agent-schema/valid/menu/multiple-menu-items.agent.yaml +1 -0
  326. package/test/fixtures/agent-schema/valid/menu/single-menu-item.agent.yaml +1 -0
  327. package/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml +2 -3
  328. package/test/fixtures/agent-schema/valid/menu-commands/multiple-commands.agent.yaml +1 -0
  329. package/test/fixtures/agent-schema/valid/menu-triggers/compound-triggers.agent.yaml +31 -0
  330. package/test/fixtures/agent-schema/valid/menu-triggers/kebab-case-triggers.agent.yaml +2 -1
  331. package/test/fixtures/agent-schema/valid/metadata/core-agent-with-module.agent.yaml +24 -0
  332. package/test/fixtures/agent-schema/valid/metadata/empty-module-name-in-path.agent.yaml +1 -0
  333. package/test/fixtures/agent-schema/valid/metadata/malformed-path-treated-as-core.agent.yaml +2 -1
  334. package/test/fixtures/agent-schema/valid/metadata/module-agent-correct.agent.yaml +2 -1
  335. package/test/fixtures/agent-schema/valid/metadata/module-agent-missing-module.agent.yaml +23 -0
  336. package/test/fixtures/agent-schema/valid/metadata/wrong-module-value.agent.yaml +24 -0
  337. package/test/fixtures/agent-schema/valid/persona/complete-persona.agent.yaml +1 -0
  338. package/test/fixtures/agent-schema/valid/prompts/empty-prompts.agent.yaml +1 -0
  339. package/test/fixtures/agent-schema/valid/prompts/no-prompts.agent.yaml +1 -0
  340. package/test/fixtures/agent-schema/valid/prompts/valid-prompts-minimal.agent.yaml +1 -0
  341. package/test/fixtures/agent-schema/valid/prompts/valid-prompts-with-description.agent.yaml +1 -0
  342. package/test/fixtures/agent-schema/valid/top-level/minimal-core-agent.agent.yaml +1 -0
  343. package/test/fixtures/file-refs-csv/invalid/all-empty-workflow.csv +3 -0
  344. package/test/fixtures/file-refs-csv/invalid/empty-data.csv +1 -0
  345. package/test/fixtures/file-refs-csv/invalid/no-workflow-column.csv +3 -0
  346. package/test/fixtures/file-refs-csv/invalid/unresolvable-vars.csv +3 -0
  347. package/test/fixtures/file-refs-csv/valid/bmm-style.csv +3 -0
  348. package/test/fixtures/file-refs-csv/valid/core-style.csv +3 -0
  349. package/test/fixtures/file-refs-csv/valid/minimal.csv +2 -0
  350. package/test/test-agent-schema.js +4 -4
  351. package/test/test-file-refs-csv.js +133 -0
  352. package/test/test-installation-components.js +10 -12
  353. package/test/test-rehype-plugins.mjs +1050 -0
  354. package/test/unit-test-schema.js +2 -2
  355. package/tools/build-docs.mjs +463 -0
  356. package/tools/cli/README.md +41 -589
  357. package/tools/cli/bmad-cli.js +67 -1
  358. package/tools/cli/commands/install.js +42 -34
  359. package/tools/cli/commands/status.js +44 -26
  360. package/tools/cli/commands/uninstall.js +146 -23
  361. package/tools/cli/external-official-modules.yaml +53 -0
  362. package/tools/cli/installers/install-messages.yaml +39 -0
  363. package/tools/cli/installers/lib/core/config-collector.js +589 -95
  364. package/tools/cli/installers/lib/core/custom-module-cache.js +260 -0
  365. package/tools/cli/installers/lib/core/dependency-resolver.js +57 -39
  366. package/tools/cli/installers/lib/core/detector.js +19 -125
  367. package/tools/cli/installers/lib/core/ide-config-manager.js +12 -9
  368. package/tools/cli/installers/lib/core/installer.js +2075 -1161
  369. package/tools/cli/installers/lib/core/manifest-generator.js +494 -103
  370. package/tools/cli/installers/lib/core/manifest.js +544 -46
  371. package/tools/cli/installers/lib/custom/handler.js +358 -0
  372. package/tools/cli/installers/lib/ide/_base-ide.js +83 -44
  373. package/tools/cli/installers/lib/ide/_config-driven.js +559 -0
  374. package/tools/cli/installers/lib/ide/codex.js +301 -64
  375. package/tools/cli/installers/lib/ide/github-copilot.js +606 -209
  376. package/tools/cli/installers/lib/ide/kilo.js +169 -75
  377. package/tools/cli/installers/lib/ide/manager.js +179 -48
  378. package/tools/cli/installers/lib/ide/platform-codes.js +100 -0
  379. package/tools/cli/installers/lib/ide/platform-codes.yaml +234 -0
  380. package/tools/cli/installers/lib/ide/rovodev.js +257 -0
  381. package/tools/cli/installers/lib/ide/shared/agent-command-generator.js +95 -5
  382. package/tools/cli/installers/lib/ide/shared/bmad-artifacts.js +51 -20
  383. package/tools/cli/installers/lib/ide/shared/module-injections.js +6 -3
  384. package/tools/cli/installers/lib/ide/shared/path-utils.js +299 -0
  385. package/tools/cli/installers/lib/ide/shared/task-tool-command-generator.js +261 -14
  386. package/tools/cli/installers/lib/ide/shared/workflow-command-generator.js +108 -27
  387. package/tools/cli/installers/lib/ide/templates/agent-command-template.md +1 -1
  388. package/tools/cli/installers/lib/ide/templates/combined/antigravity.md +8 -0
  389. package/tools/cli/installers/lib/ide/templates/combined/default-agent.md +15 -0
  390. package/tools/cli/installers/lib/ide/templates/combined/default-task.md +10 -0
  391. package/tools/cli/installers/lib/ide/templates/combined/default-tool.md +10 -0
  392. package/tools/cli/installers/lib/ide/templates/combined/default-workflow-yaml.md +14 -0
  393. package/tools/cli/installers/lib/ide/templates/combined/default-workflow.md +6 -0
  394. package/tools/cli/installers/lib/ide/templates/combined/gemini-agent.toml +14 -0
  395. package/tools/cli/installers/lib/ide/templates/combined/gemini-task.toml +11 -0
  396. package/tools/cli/installers/lib/ide/templates/combined/gemini-tool.toml +11 -0
  397. package/tools/cli/installers/lib/ide/templates/combined/gemini-workflow-yaml.toml +16 -0
  398. package/tools/cli/installers/lib/ide/templates/combined/gemini-workflow.toml +14 -0
  399. package/tools/cli/installers/lib/ide/templates/combined/kiro-agent.md +16 -0
  400. package/tools/cli/installers/lib/ide/templates/combined/kiro-task.md +9 -0
  401. package/tools/cli/installers/lib/ide/templates/combined/kiro-tool.md +9 -0
  402. package/tools/cli/installers/lib/ide/templates/combined/kiro-workflow-yaml.md +15 -0
  403. package/tools/cli/installers/lib/ide/templates/combined/kiro-workflow.md +7 -0
  404. package/tools/cli/installers/lib/ide/templates/combined/opencode-agent.md +15 -0
  405. package/tools/cli/installers/lib/ide/templates/combined/opencode-task.md +14 -0
  406. package/tools/cli/installers/lib/ide/templates/combined/opencode-tool.md +14 -0
  407. package/tools/cli/installers/lib/ide/templates/combined/opencode-workflow-yaml.md +17 -0
  408. package/tools/cli/installers/lib/ide/templates/combined/opencode-workflow.md +17 -0
  409. package/tools/cli/installers/lib/ide/templates/combined/rovodev.md +9 -0
  410. package/tools/cli/installers/lib/ide/templates/combined/trae.md +9 -0
  411. package/tools/cli/installers/lib/ide/templates/combined/windsurf-workflow.md +10 -0
  412. package/tools/cli/installers/lib/ide/templates/workflow-command-template.md +1 -1
  413. package/tools/cli/installers/lib/ide/templates/workflow-commander.md +5 -0
  414. package/tools/cli/installers/lib/message-loader.js +83 -0
  415. package/tools/cli/installers/lib/modules/external-manager.js +136 -0
  416. package/tools/cli/installers/lib/modules/manager.js +931 -207
  417. package/tools/cli/lib/activation-builder.js +13 -16
  418. package/tools/cli/lib/agent/compiler.js +525 -0
  419. package/tools/cli/lib/agent/installer.js +680 -0
  420. package/tools/cli/lib/agent/template-engine.js +152 -0
  421. package/tools/cli/lib/agent-analyzer.js +48 -20
  422. package/tools/cli/lib/agent-party-generator.js +5 -17
  423. package/tools/cli/lib/cli-utils.js +76 -104
  424. package/tools/cli/lib/config.js +4 -3
  425. package/tools/cli/lib/platform-codes.js +2 -2
  426. package/tools/cli/lib/project-root.js +6 -0
  427. package/tools/cli/lib/prompts.js +809 -0
  428. package/tools/cli/lib/ui.js +1600 -272
  429. package/tools/cli/lib/xml-handler.js +4 -55
  430. package/tools/cli/lib/yaml-format.js +4 -6
  431. package/tools/cli/lib/yaml-xml-builder.js +183 -61
  432. package/tools/docs/_prompt-external-modules-page.md +59 -0
  433. package/tools/docs/fix-refs.md +91 -0
  434. package/tools/fix-doc-links.js +285 -0
  435. package/tools/lib/xml-utils.js +13 -0
  436. package/tools/migrate-custom-module-paths.js +124 -0
  437. package/tools/platform-codes.yaml +30 -6
  438. package/tools/schema/agent.js +306 -53
  439. package/tools/validate-agent-schema.js +3 -3
  440. package/tools/validate-doc-links.js +407 -0
  441. package/tools/validate-file-refs.js +554 -0
  442. package/tools/validate-svg-changes.sh +356 -0
  443. package/website/README.md +75 -0
  444. package/website/astro.config.mjs +136 -0
  445. package/website/public/favicon.ico +0 -0
  446. package/website/public/img/bmad-dark.png +0 -0
  447. package/website/public/img/bmad-light.png +0 -0
  448. package/website/public/workflow-map-diagram.html +361 -0
  449. package/website/src/components/Banner.astro +62 -0
  450. package/website/src/components/Header.astro +96 -0
  451. package/website/src/components/MobileMenuFooter.astro +33 -0
  452. package/website/src/content/config.ts +6 -0
  453. package/website/src/lib/site-url.mjs +25 -0
  454. package/website/src/pages/404.astro +11 -0
  455. package/website/src/pages/robots.txt.ts +48 -0
  456. package/website/src/rehype-base-paths.js +112 -0
  457. package/website/src/rehype-markdown-links.js +119 -0
  458. package/website/src/styles/custom.css +805 -0
  459. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -32
  460. package/.github/ISSUE_TEMPLATE/idea_submission.md +0 -109
  461. package/.github/workflows/bundle-latest.yaml +0 -277
  462. package/.github/workflows/manual-release.yaml +0 -212
  463. package/docs/BUNDLE_DISTRIBUTION_SETUP.md +0 -95
  464. package/docs/agent-customization-guide.md +0 -208
  465. package/docs/document-sharding-guide.md +0 -447
  466. package/docs/ide-info/auggie.md +0 -31
  467. package/docs/ide-info/claude-code.md +0 -25
  468. package/docs/ide-info/cline.md +0 -31
  469. package/docs/ide-info/codex.md +0 -21
  470. package/docs/ide-info/crush.md +0 -30
  471. package/docs/ide-info/cursor.md +0 -25
  472. package/docs/ide-info/gemini.md +0 -25
  473. package/docs/ide-info/github-copilot.md +0 -26
  474. package/docs/ide-info/iflow.md +0 -33
  475. package/docs/ide-info/kilo.md +0 -24
  476. package/docs/ide-info/opencode.md +0 -24
  477. package/docs/ide-info/qwen.md +0 -25
  478. package/docs/ide-info/roo.md +0 -27
  479. package/docs/ide-info/trae.md +0 -25
  480. package/docs/ide-info/windsurf.md +0 -22
  481. package/docs/installers-bundlers/ide-injections.md +0 -186
  482. package/docs/installers-bundlers/installers-modules-platforms-reference.md +0 -388
  483. package/docs/installers-bundlers/web-bundler-usage.md +0 -54
  484. package/docs/v4-to-v6-upgrade.md +0 -227
  485. package/docs/web-bundles-gemini-gpt-guide.md +0 -473
  486. package/src/core/_module-installer/install-config.yaml +0 -35
  487. package/src/core/_module-installer/installer.js +0 -60
  488. package/src/core/agents/bmad-web-orchestrator.agent.xml +0 -113
  489. package/src/core/tasks/adv-elicit-methods.csv +0 -39
  490. package/src/core/tasks/advanced-elicitation.xml +0 -106
  491. package/src/core/tasks/validate-workflow.xml +0 -89
  492. package/src/core/tools/shard-doc.xml +0 -109
  493. package/src/core/workflows/brainstorming/README.md +0 -261
  494. package/src/core/workflows/brainstorming/instructions.md +0 -315
  495. package/src/core/workflows/brainstorming/workflow.yaml +0 -43
  496. package/src/core/workflows/party-mode/instructions.md +0 -183
  497. package/src/core/workflows/party-mode/workflow.yaml +0 -27
  498. package/src/modules/bmb/README.md +0 -194
  499. package/src/modules/bmb/_module-installer/install-config.yaml +0 -31
  500. package/src/modules/bmb/agents/bmad-builder.agent.yaml +0 -59
  501. package/src/modules/bmb/workflows/audit-workflow/checklist.md +0 -142
  502. package/src/modules/bmb/workflows/audit-workflow/instructions.md +0 -341
  503. package/src/modules/bmb/workflows/audit-workflow/template.md +0 -118
  504. package/src/modules/bmb/workflows/audit-workflow/workflow.yaml +0 -25
  505. package/src/modules/bmb/workflows/convert-legacy/README.md +0 -262
  506. package/src/modules/bmb/workflows/convert-legacy/checklist.md +0 -205
  507. package/src/modules/bmb/workflows/convert-legacy/instructions.md +0 -377
  508. package/src/modules/bmb/workflows/convert-legacy/workflow.yaml +0 -34
  509. package/src/modules/bmb/workflows/create-agent/README.md +0 -203
  510. package/src/modules/bmb/workflows/create-agent/agent-architecture.md +0 -415
  511. package/src/modules/bmb/workflows/create-agent/agent-command-patterns.md +0 -759
  512. package/src/modules/bmb/workflows/create-agent/agent-types.md +0 -292
  513. package/src/modules/bmb/workflows/create-agent/brainstorm-context.md +0 -174
  514. package/src/modules/bmb/workflows/create-agent/checklist.md +0 -62
  515. package/src/modules/bmb/workflows/create-agent/communication-styles.md +0 -202
  516. package/src/modules/bmb/workflows/create-agent/instructions.md +0 -456
  517. package/src/modules/bmb/workflows/create-agent/workflow.yaml +0 -49
  518. package/src/modules/bmb/workflows/create-module/README.md +0 -229
  519. package/src/modules/bmb/workflows/create-module/brainstorm-context.md +0 -137
  520. package/src/modules/bmb/workflows/create-module/checklist.md +0 -235
  521. package/src/modules/bmb/workflows/create-module/installer-templates/install-config.yaml +0 -92
  522. package/src/modules/bmb/workflows/create-module/installer-templates/installer.js +0 -231
  523. package/src/modules/bmb/workflows/create-module/instructions.md +0 -576
  524. package/src/modules/bmb/workflows/create-module/module-structure.md +0 -400
  525. package/src/modules/bmb/workflows/create-module/workflow.yaml +0 -44
  526. package/src/modules/bmb/workflows/create-workflow/README.md +0 -277
  527. package/src/modules/bmb/workflows/create-workflow/brainstorm-context.md +0 -197
  528. package/src/modules/bmb/workflows/create-workflow/checklist.md +0 -94
  529. package/src/modules/bmb/workflows/create-workflow/instructions.md +0 -724
  530. package/src/modules/bmb/workflows/create-workflow/workflow-creation-guide.md +0 -1306
  531. package/src/modules/bmb/workflows/create-workflow/workflow-template/checklist.md +0 -24
  532. package/src/modules/bmb/workflows/create-workflow/workflow-template/instructions.md +0 -13
  533. package/src/modules/bmb/workflows/create-workflow/workflow-template/template.md +0 -9
  534. package/src/modules/bmb/workflows/create-workflow/workflow-template/workflow.yaml +0 -65
  535. package/src/modules/bmb/workflows/create-workflow/workflow.yaml +0 -42
  536. package/src/modules/bmb/workflows/edit-agent/README.md +0 -112
  537. package/src/modules/bmb/workflows/edit-agent/checklist.md +0 -112
  538. package/src/modules/bmb/workflows/edit-agent/instructions.md +0 -290
  539. package/src/modules/bmb/workflows/edit-agent/workflow.yaml +0 -35
  540. package/src/modules/bmb/workflows/edit-module/README.md +0 -187
  541. package/src/modules/bmb/workflows/edit-module/checklist.md +0 -165
  542. package/src/modules/bmb/workflows/edit-module/instructions.md +0 -339
  543. package/src/modules/bmb/workflows/edit-module/workflow.yaml +0 -36
  544. package/src/modules/bmb/workflows/edit-workflow/README.md +0 -119
  545. package/src/modules/bmb/workflows/edit-workflow/checklist.md +0 -70
  546. package/src/modules/bmb/workflows/edit-workflow/instructions.md +0 -342
  547. package/src/modules/bmb/workflows/edit-workflow/workflow.yaml +0 -29
  548. package/src/modules/bmb/workflows/module-brief/README.md +0 -264
  549. package/src/modules/bmb/workflows/module-brief/checklist.md +0 -116
  550. package/src/modules/bmb/workflows/module-brief/instructions.md +0 -267
  551. package/src/modules/bmb/workflows/module-brief/template.md +0 -275
  552. package/src/modules/bmb/workflows/module-brief/workflow.yaml +0 -31
  553. package/src/modules/bmb/workflows/redoc/README.md +0 -87
  554. package/src/modules/bmb/workflows/redoc/checklist.md +0 -99
  555. package/src/modules/bmb/workflows/redoc/instructions.md +0 -265
  556. package/src/modules/bmb/workflows/redoc/workflow.yaml +0 -34
  557. package/src/modules/bmgd/README.md +0 -208
  558. package/src/modules/bmgd/_module-installer/install-config.yaml +0 -54
  559. package/src/modules/bmgd/agents/game-architect.agent.yaml +0 -33
  560. package/src/modules/bmgd/agents/game-designer.agent.yaml +0 -40
  561. package/src/modules/bmgd/agents/game-dev.agent.yaml +0 -40
  562. package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +0 -75
  563. package/src/modules/bmgd/teams/default-party.csv +0 -10
  564. package/src/modules/bmgd/teams/team-gamedev.yaml +0 -18
  565. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/game-brain-methods.csv +0 -26
  566. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/game-context.md +0 -115
  567. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/instructions.md +0 -128
  568. package/src/modules/bmgd/workflows/1-preproduction/brainstorm-game/workflow.yaml +0 -41
  569. package/src/modules/bmgd/workflows/1-preproduction/game-brief/checklist.md +0 -128
  570. package/src/modules/bmgd/workflows/1-preproduction/game-brief/instructions.md +0 -371
  571. package/src/modules/bmgd/workflows/1-preproduction/game-brief/template.md +0 -205
  572. package/src/modules/bmgd/workflows/1-preproduction/game-brief/workflow.yaml +0 -44
  573. package/src/modules/bmgd/workflows/2-design/gdd/checklist.md +0 -148
  574. package/src/modules/bmgd/workflows/2-design/gdd/game-types/action-platformer.md +0 -45
  575. package/src/modules/bmgd/workflows/2-design/gdd/game-types/adventure.md +0 -84
  576. package/src/modules/bmgd/workflows/2-design/gdd/game-types/card-game.md +0 -76
  577. package/src/modules/bmgd/workflows/2-design/gdd/game-types/fighting.md +0 -89
  578. package/src/modules/bmgd/workflows/2-design/gdd/game-types/horror.md +0 -86
  579. package/src/modules/bmgd/workflows/2-design/gdd/game-types/idle-incremental.md +0 -78
  580. package/src/modules/bmgd/workflows/2-design/gdd/game-types/metroidvania.md +0 -87
  581. package/src/modules/bmgd/workflows/2-design/gdd/game-types/moba.md +0 -74
  582. package/src/modules/bmgd/workflows/2-design/gdd/game-types/party-game.md +0 -79
  583. package/src/modules/bmgd/workflows/2-design/gdd/game-types/puzzle.md +0 -58
  584. package/src/modules/bmgd/workflows/2-design/gdd/game-types/racing.md +0 -88
  585. package/src/modules/bmgd/workflows/2-design/gdd/game-types/rhythm.md +0 -79
  586. package/src/modules/bmgd/workflows/2-design/gdd/game-types/roguelike.md +0 -69
  587. package/src/modules/bmgd/workflows/2-design/gdd/game-types/rpg.md +0 -70
  588. package/src/modules/bmgd/workflows/2-design/gdd/game-types/sandbox.md +0 -79
  589. package/src/modules/bmgd/workflows/2-design/gdd/game-types/shooter.md +0 -62
  590. package/src/modules/bmgd/workflows/2-design/gdd/game-types/simulation.md +0 -73
  591. package/src/modules/bmgd/workflows/2-design/gdd/game-types/sports.md +0 -75
  592. package/src/modules/bmgd/workflows/2-design/gdd/game-types/strategy.md +0 -71
  593. package/src/modules/bmgd/workflows/2-design/gdd/game-types/survival.md +0 -79
  594. package/src/modules/bmgd/workflows/2-design/gdd/game-types/text-based.md +0 -91
  595. package/src/modules/bmgd/workflows/2-design/gdd/game-types/tower-defense.md +0 -79
  596. package/src/modules/bmgd/workflows/2-design/gdd/game-types/turn-based-tactics.md +0 -88
  597. package/src/modules/bmgd/workflows/2-design/gdd/game-types/visual-novel.md +0 -89
  598. package/src/modules/bmgd/workflows/2-design/gdd/game-types.csv +0 -25
  599. package/src/modules/bmgd/workflows/2-design/gdd/gdd-template.md +0 -153
  600. package/src/modules/bmgd/workflows/2-design/gdd/instructions-gdd.md +0 -501
  601. package/src/modules/bmgd/workflows/2-design/gdd/workflow.yaml +0 -81
  602. package/src/modules/bmgd/workflows/2-design/narrative/checklist.md +0 -139
  603. package/src/modules/bmgd/workflows/2-design/narrative/instructions-narrative.md +0 -603
  604. package/src/modules/bmgd/workflows/2-design/narrative/narrative-template.md +0 -195
  605. package/src/modules/bmgd/workflows/2-design/narrative/workflow.yaml +0 -38
  606. package/src/modules/bmgd/workflows/3-technical/game-architecture/architecture-patterns.yaml +0 -321
  607. package/src/modules/bmgd/workflows/3-technical/game-architecture/architecture-template.md +0 -103
  608. package/src/modules/bmgd/workflows/3-technical/game-architecture/checklist.md +0 -240
  609. package/src/modules/bmgd/workflows/3-technical/game-architecture/decision-catalog.yaml +0 -222
  610. package/src/modules/bmgd/workflows/3-technical/game-architecture/instructions.md +0 -699
  611. package/src/modules/bmgd/workflows/3-technical/game-architecture/pattern-categories.csv +0 -13
  612. package/src/modules/bmgd/workflows/3-technical/game-architecture/workflow.yaml +0 -67
  613. package/src/modules/bmgd/workflows/4-production/code-review/backlog_template.md +0 -12
  614. package/src/modules/bmgd/workflows/4-production/code-review/checklist.md +0 -22
  615. package/src/modules/bmgd/workflows/4-production/code-review/instructions.md +0 -398
  616. package/src/modules/bmgd/workflows/4-production/code-review/workflow.yaml +0 -57
  617. package/src/modules/bmgd/workflows/4-production/correct-course/checklist.md +0 -279
  618. package/src/modules/bmgd/workflows/4-production/correct-course/instructions.md +0 -206
  619. package/src/modules/bmgd/workflows/4-production/correct-course/workflow.yaml +0 -52
  620. package/src/modules/bmgd/workflows/4-production/create-story/checklist.md +0 -240
  621. package/src/modules/bmgd/workflows/4-production/create-story/instructions.md +0 -256
  622. package/src/modules/bmgd/workflows/4-production/create-story/template.md +0 -51
  623. package/src/modules/bmgd/workflows/4-production/create-story/workflow.yaml +0 -68
  624. package/src/modules/bmgd/workflows/4-production/dev-story/checklist.md +0 -38
  625. package/src/modules/bmgd/workflows/4-production/dev-story/instructions.md +0 -267
  626. package/src/modules/bmgd/workflows/4-production/dev-story/workflow.yaml +0 -53
  627. package/src/modules/bmgd/workflows/4-production/epic-tech-context/checklist.md +0 -17
  628. package/src/modules/bmgd/workflows/4-production/epic-tech-context/instructions.md +0 -164
  629. package/src/modules/bmgd/workflows/4-production/epic-tech-context/template.md +0 -76
  630. package/src/modules/bmgd/workflows/4-production/epic-tech-context/workflow.yaml +0 -52
  631. package/src/modules/bmgd/workflows/4-production/retrospective/instructions.md +0 -1442
  632. package/src/modules/bmgd/workflows/4-production/retrospective/workflow.yaml +0 -52
  633. package/src/modules/bmgd/workflows/4-production/sprint-planning/instructions.md +0 -234
  634. package/src/modules/bmgd/workflows/4-production/sprint-planning/sprint-status-template.yaml +0 -55
  635. package/src/modules/bmgd/workflows/4-production/sprint-planning/workflow.yaml +0 -50
  636. package/src/modules/bmgd/workflows/4-production/story-context/checklist.md +0 -16
  637. package/src/modules/bmgd/workflows/4-production/story-context/context-template.xml +0 -34
  638. package/src/modules/bmgd/workflows/4-production/story-context/instructions.md +0 -209
  639. package/src/modules/bmgd/workflows/4-production/story-context/workflow.yaml +0 -57
  640. package/src/modules/bmgd/workflows/4-production/story-done/instructions.md +0 -111
  641. package/src/modules/bmgd/workflows/4-production/story-done/workflow.yaml +0 -28
  642. package/src/modules/bmgd/workflows/4-production/story-ready/instructions.md +0 -117
  643. package/src/modules/bmgd/workflows/4-production/story-ready/workflow.yaml +0 -25
  644. package/src/modules/bmm/README.md +0 -128
  645. package/src/modules/bmm/_module-installer/assets/bmm-kb.md +0 -1
  646. package/src/modules/bmm/_module-installer/assets/technical-decisions.md +0 -30
  647. package/src/modules/bmm/_module-installer/install-config.yaml +0 -60
  648. package/src/modules/bmm/_module-installer/installer.js +0 -131
  649. package/src/modules/bmm/_module-installer/platform-specifics/claude-code.js +0 -35
  650. package/src/modules/bmm/_module-installer/platform-specifics/windsurf.js +0 -32
  651. package/src/modules/bmm/agents/analyst.agent.yaml +0 -48
  652. package/src/modules/bmm/agents/architect.agent.yaml +0 -42
  653. package/src/modules/bmm/agents/dev.agent.yaml +0 -40
  654. package/src/modules/bmm/agents/pm.agent.yaml +0 -61
  655. package/src/modules/bmm/agents/sm.agent.yaml +0 -72
  656. package/src/modules/bmm/agents/tea.agent.yaml +0 -65
  657. package/src/modules/bmm/agents/tech-writer.agent.yaml +0 -73
  658. package/src/modules/bmm/agents/ux-designer.agent.yaml +0 -38
  659. package/src/modules/bmm/docs/README.md +0 -235
  660. package/src/modules/bmm/docs/agents-guide.md +0 -1056
  661. package/src/modules/bmm/docs/brownfield-guide.md +0 -754
  662. package/src/modules/bmm/docs/enterprise-agentic-development.md +0 -680
  663. package/src/modules/bmm/docs/faq.md +0 -587
  664. package/src/modules/bmm/docs/glossary.md +0 -320
  665. package/src/modules/bmm/docs/party-mode.md +0 -224
  666. package/src/modules/bmm/docs/quick-spec-flow.md +0 -652
  667. package/src/modules/bmm/docs/quick-start.md +0 -366
  668. package/src/modules/bmm/docs/scale-adaptive-system.md +0 -599
  669. package/src/modules/bmm/docs/test-architecture.md +0 -394
  670. package/src/modules/bmm/docs/workflow-architecture-reference.md +0 -371
  671. package/src/modules/bmm/docs/workflow-document-project-reference.md +0 -487
  672. package/src/modules/bmm/docs/workflows-analysis.md +0 -370
  673. package/src/modules/bmm/docs/workflows-implementation.md +0 -284
  674. package/src/modules/bmm/docs/workflows-planning.md +0 -601
  675. package/src/modules/bmm/docs/workflows-solutioning.md +0 -501
  676. package/src/modules/bmm/teams/default-party.csv +0 -19
  677. package/src/modules/bmm/testarch/knowledge/ci-burn-in.md +0 -675
  678. package/src/modules/bmm/testarch/knowledge/component-tdd.md +0 -486
  679. package/src/modules/bmm/testarch/knowledge/contract-testing.md +0 -957
  680. package/src/modules/bmm/testarch/knowledge/data-factories.md +0 -500
  681. package/src/modules/bmm/testarch/knowledge/email-auth.md +0 -721
  682. package/src/modules/bmm/testarch/knowledge/error-handling.md +0 -725
  683. package/src/modules/bmm/testarch/knowledge/feature-flags.md +0 -750
  684. package/src/modules/bmm/testarch/knowledge/fixture-architecture.md +0 -401
  685. package/src/modules/bmm/testarch/knowledge/network-first.md +0 -486
  686. package/src/modules/bmm/testarch/knowledge/nfr-criteria.md +0 -670
  687. package/src/modules/bmm/testarch/knowledge/playwright-config.md +0 -730
  688. package/src/modules/bmm/testarch/knowledge/probability-impact.md +0 -601
  689. package/src/modules/bmm/testarch/knowledge/risk-governance.md +0 -615
  690. package/src/modules/bmm/testarch/knowledge/selective-testing.md +0 -732
  691. package/src/modules/bmm/testarch/knowledge/selector-resilience.md +0 -527
  692. package/src/modules/bmm/testarch/knowledge/test-healing-patterns.md +0 -644
  693. package/src/modules/bmm/testarch/knowledge/test-levels-framework.md +0 -473
  694. package/src/modules/bmm/testarch/knowledge/test-priorities-matrix.md +0 -373
  695. package/src/modules/bmm/testarch/knowledge/test-quality.md +0 -664
  696. package/src/modules/bmm/testarch/knowledge/timing-debugging.md +0 -372
  697. package/src/modules/bmm/testarch/knowledge/visual-debugging.md +0 -524
  698. package/src/modules/bmm/testarch/tea-index.csv +0 -22
  699. package/src/modules/bmm/workflows/1-analysis/brainstorm-project/instructions.md +0 -110
  700. package/src/modules/bmm/workflows/1-analysis/brainstorm-project/project-context.md +0 -25
  701. package/src/modules/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml +0 -39
  702. package/src/modules/bmm/workflows/1-analysis/domain-research/instructions.md +0 -423
  703. package/src/modules/bmm/workflows/1-analysis/domain-research/template.md +0 -180
  704. package/src/modules/bmm/workflows/1-analysis/domain-research/workflow.yaml +0 -56
  705. package/src/modules/bmm/workflows/1-analysis/product-brief/checklist.md +0 -115
  706. package/src/modules/bmm/workflows/1-analysis/product-brief/instructions.md +0 -522
  707. package/src/modules/bmm/workflows/1-analysis/product-brief/template.md +0 -181
  708. package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.yaml +0 -65
  709. package/src/modules/bmm/workflows/1-analysis/research/checklist-deep-prompt.md +0 -144
  710. package/src/modules/bmm/workflows/1-analysis/research/checklist-technical.md +0 -249
  711. package/src/modules/bmm/workflows/1-analysis/research/checklist.md +0 -299
  712. package/src/modules/bmm/workflows/1-analysis/research/claude-code/injections.yaml +0 -114
  713. package/src/modules/bmm/workflows/1-analysis/research/instructions-deep-prompt.md +0 -437
  714. package/src/modules/bmm/workflows/1-analysis/research/instructions-market.md +0 -674
  715. package/src/modules/bmm/workflows/1-analysis/research/instructions-router.md +0 -133
  716. package/src/modules/bmm/workflows/1-analysis/research/instructions-technical.md +0 -533
  717. package/src/modules/bmm/workflows/1-analysis/research/template-deep-prompt.md +0 -94
  718. package/src/modules/bmm/workflows/1-analysis/research/template-market.md +0 -347
  719. package/src/modules/bmm/workflows/1-analysis/research/template-technical.md +0 -245
  720. package/src/modules/bmm/workflows/1-analysis/research/workflow.yaml +0 -62
  721. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/checklist.md +0 -310
  722. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md +0 -1306
  723. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +0 -145
  724. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +0 -99
  725. package/src/modules/bmm/workflows/2-plan-workflows/prd/checklist.md +0 -346
  726. package/src/modules/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/epics-template.md +0 -80
  727. package/src/modules/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/instructions.md +0 -292
  728. package/src/modules/bmm/workflows/2-plan-workflows/prd/create-epics-and-stories/workflow.yaml +0 -53
  729. package/src/modules/bmm/workflows/2-plan-workflows/prd/domain-complexity.csv +0 -13
  730. package/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md +0 -525
  731. package/src/modules/bmm/workflows/2-plan-workflows/prd/prd-template.md +0 -237
  732. package/src/modules/bmm/workflows/2-plan-workflows/prd/project-types.csv +0 -11
  733. package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.yaml +0 -76
  734. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/checklist.md +0 -217
  735. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/epics-template.md +0 -74
  736. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-generate-stories.md +0 -434
  737. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions.md +0 -978
  738. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/tech-spec-template.md +0 -181
  739. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/user-story-template.md +0 -90
  740. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +0 -57
  741. package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-patterns.yaml +0 -321
  742. package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-template.md +0 -103
  743. package/src/modules/bmm/workflows/3-solutioning/architecture/checklist.md +0 -240
  744. package/src/modules/bmm/workflows/3-solutioning/architecture/decision-catalog.yaml +0 -222
  745. package/src/modules/bmm/workflows/3-solutioning/architecture/instructions.md +0 -696
  746. package/src/modules/bmm/workflows/3-solutioning/architecture/pattern-categories.csv +0 -13
  747. package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.yaml +0 -96
  748. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/checklist.md +0 -169
  749. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/instructions.md +0 -302
  750. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/template.md +0 -146
  751. package/src/modules/bmm/workflows/3-solutioning/solutioning-gate-check/workflow.yaml +0 -66
  752. package/src/modules/bmm/workflows/4-implementation/code-review/backlog_template.md +0 -12
  753. package/src/modules/bmm/workflows/4-implementation/code-review/checklist.md +0 -22
  754. package/src/modules/bmm/workflows/4-implementation/code-review/instructions.md +0 -398
  755. package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +0 -57
  756. package/src/modules/bmm/workflows/4-implementation/correct-course/checklist.md +0 -279
  757. package/src/modules/bmm/workflows/4-implementation/correct-course/instructions.md +0 -206
  758. package/src/modules/bmm/workflows/4-implementation/correct-course/workflow.yaml +0 -52
  759. package/src/modules/bmm/workflows/4-implementation/create-story/checklist.md +0 -240
  760. package/src/modules/bmm/workflows/4-implementation/create-story/instructions.md +0 -256
  761. package/src/modules/bmm/workflows/4-implementation/create-story/template.md +0 -51
  762. package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +0 -68
  763. package/src/modules/bmm/workflows/4-implementation/dev-story/checklist.md +0 -38
  764. package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.md +0 -267
  765. package/src/modules/bmm/workflows/4-implementation/dev-story/workflow.yaml +0 -53
  766. package/src/modules/bmm/workflows/4-implementation/epic-tech-context/checklist.md +0 -17
  767. package/src/modules/bmm/workflows/4-implementation/epic-tech-context/instructions.md +0 -164
  768. package/src/modules/bmm/workflows/4-implementation/epic-tech-context/template.md +0 -76
  769. package/src/modules/bmm/workflows/4-implementation/epic-tech-context/workflow.yaml +0 -52
  770. package/src/modules/bmm/workflows/4-implementation/retrospective/instructions.md +0 -1442
  771. package/src/modules/bmm/workflows/4-implementation/retrospective/workflow.yaml +0 -52
  772. package/src/modules/bmm/workflows/4-implementation/sprint-planning/checklist.md +0 -33
  773. package/src/modules/bmm/workflows/4-implementation/sprint-planning/instructions.md +0 -234
  774. package/src/modules/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +0 -55
  775. package/src/modules/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +0 -50
  776. package/src/modules/bmm/workflows/4-implementation/story-context/checklist.md +0 -16
  777. package/src/modules/bmm/workflows/4-implementation/story-context/context-template.xml +0 -34
  778. package/src/modules/bmm/workflows/4-implementation/story-context/instructions.md +0 -209
  779. package/src/modules/bmm/workflows/4-implementation/story-context/workflow.yaml +0 -57
  780. package/src/modules/bmm/workflows/4-implementation/story-done/instructions.md +0 -111
  781. package/src/modules/bmm/workflows/4-implementation/story-done/workflow.yaml +0 -28
  782. package/src/modules/bmm/workflows/4-implementation/story-ready/instructions.md +0 -117
  783. package/src/modules/bmm/workflows/4-implementation/story-ready/workflow.yaml +0 -25
  784. package/src/modules/bmm/workflows/document-project/checklist.md +0 -245
  785. package/src/modules/bmm/workflows/document-project/instructions.md +0 -222
  786. package/src/modules/bmm/workflows/document-project/templates/project-scan-report-schema.json +0 -160
  787. package/src/modules/bmm/workflows/document-project/workflow.yaml +0 -36
  788. package/src/modules/bmm/workflows/document-project/workflows/deep-dive-instructions.md +0 -298
  789. package/src/modules/bmm/workflows/document-project/workflows/deep-dive.yaml +0 -31
  790. package/src/modules/bmm/workflows/document-project/workflows/full-scan-instructions.md +0 -1106
  791. package/src/modules/bmm/workflows/document-project/workflows/full-scan.yaml +0 -31
  792. package/src/modules/bmm/workflows/techdoc/documentation-standards.md +0 -262
  793. package/src/modules/bmm/workflows/testarch/atdd/atdd-checklist-template.md +0 -363
  794. package/src/modules/bmm/workflows/testarch/atdd/checklist.md +0 -373
  795. package/src/modules/bmm/workflows/testarch/atdd/instructions.md +0 -785
  796. package/src/modules/bmm/workflows/testarch/atdd/workflow.yaml +0 -54
  797. package/src/modules/bmm/workflows/testarch/automate/checklist.md +0 -580
  798. package/src/modules/bmm/workflows/testarch/automate/instructions.md +0 -1303
  799. package/src/modules/bmm/workflows/testarch/automate/workflow.yaml +0 -63
  800. package/src/modules/bmm/workflows/testarch/ci/checklist.md +0 -246
  801. package/src/modules/bmm/workflows/testarch/ci/github-actions-template.yaml +0 -165
  802. package/src/modules/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +0 -128
  803. package/src/modules/bmm/workflows/testarch/ci/instructions.md +0 -517
  804. package/src/modules/bmm/workflows/testarch/ci/workflow.yaml +0 -55
  805. package/src/modules/bmm/workflows/testarch/framework/checklist.md +0 -321
  806. package/src/modules/bmm/workflows/testarch/framework/instructions.md +0 -455
  807. package/src/modules/bmm/workflows/testarch/framework/workflow.yaml +0 -55
  808. package/src/modules/bmm/workflows/testarch/nfr-assess/checklist.md +0 -405
  809. package/src/modules/bmm/workflows/testarch/nfr-assess/instructions.md +0 -722
  810. package/src/modules/bmm/workflows/testarch/nfr-assess/nfr-report-template.md +0 -443
  811. package/src/modules/bmm/workflows/testarch/nfr-assess/workflow.yaml +0 -58
  812. package/src/modules/bmm/workflows/testarch/test-design/checklist.md +0 -234
  813. package/src/modules/bmm/workflows/testarch/test-design/instructions.md +0 -782
  814. package/src/modules/bmm/workflows/testarch/test-design/test-design-template.md +0 -285
  815. package/src/modules/bmm/workflows/testarch/test-design/workflow.yaml +0 -58
  816. package/src/modules/bmm/workflows/testarch/test-review/checklist.md +0 -470
  817. package/src/modules/bmm/workflows/testarch/test-review/instructions.md +0 -608
  818. package/src/modules/bmm/workflows/testarch/test-review/test-review-template.md +0 -388
  819. package/src/modules/bmm/workflows/testarch/test-review/workflow.yaml +0 -55
  820. package/src/modules/bmm/workflows/testarch/trace/checklist.md +0 -654
  821. package/src/modules/bmm/workflows/testarch/trace/instructions.md +0 -1045
  822. package/src/modules/bmm/workflows/testarch/trace/trace-template.md +0 -673
  823. package/src/modules/bmm/workflows/testarch/trace/workflow.yaml +0 -68
  824. package/src/modules/bmm/workflows/workflow-status/init/instructions.md +0 -823
  825. package/src/modules/bmm/workflows/workflow-status/init/workflow.yaml +0 -29
  826. package/src/modules/bmm/workflows/workflow-status/instructions.md +0 -387
  827. package/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +0 -120
  828. package/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +0 -108
  829. package/src/modules/bmm/workflows/workflow-status/paths/game-design.yaml +0 -52
  830. package/src/modules/bmm/workflows/workflow-status/paths/method-brownfield.yaml +0 -104
  831. package/src/modules/bmm/workflows/workflow-status/paths/method-greenfield.yaml +0 -95
  832. package/src/modules/bmm/workflows/workflow-status/paths/quick-flow-brownfield.yaml +0 -58
  833. package/src/modules/bmm/workflows/workflow-status/paths/quick-flow-greenfield.yaml +0 -47
  834. package/src/modules/bmm/workflows/workflow-status/project-levels.yaml +0 -59
  835. package/src/modules/bmm/workflows/workflow-status/workflow-status-template.yaml +0 -24
  836. package/src/modules/bmm/workflows/workflow-status/workflow.yaml +0 -30
  837. package/src/modules/cis/README.md +0 -153
  838. package/src/modules/cis/_module-installer/install-config.yaml +0 -16
  839. package/src/modules/cis/_module-installer/installer.js +0 -92
  840. package/src/modules/cis/agents/README.md +0 -104
  841. package/src/modules/cis/agents/brainstorming-coach.agent.yaml +0 -28
  842. package/src/modules/cis/agents/creative-problem-solver.agent.yaml +0 -28
  843. package/src/modules/cis/agents/design-thinking-coach.agent.yaml +0 -28
  844. package/src/modules/cis/agents/innovation-strategist.agent.yaml +0 -28
  845. package/src/modules/cis/agents/storyteller.agent.yaml +0 -28
  846. package/src/modules/cis/teams/creative-squad.yaml +0 -7
  847. package/src/modules/cis/teams/default-party.csv +0 -11
  848. package/src/modules/cis/workflows/README.md +0 -139
  849. package/src/modules/cis/workflows/design-thinking/README.md +0 -56
  850. package/src/modules/cis/workflows/design-thinking/design-methods.csv +0 -31
  851. package/src/modules/cis/workflows/design-thinking/instructions.md +0 -200
  852. package/src/modules/cis/workflows/design-thinking/template.md +0 -111
  853. package/src/modules/cis/workflows/design-thinking/workflow.yaml +0 -43
  854. package/src/modules/cis/workflows/innovation-strategy/README.md +0 -56
  855. package/src/modules/cis/workflows/innovation-strategy/innovation-frameworks.csv +0 -31
  856. package/src/modules/cis/workflows/innovation-strategy/instructions.md +0 -274
  857. package/src/modules/cis/workflows/innovation-strategy/template.md +0 -189
  858. package/src/modules/cis/workflows/innovation-strategy/workflow.yaml +0 -43
  859. package/src/modules/cis/workflows/problem-solving/README.md +0 -56
  860. package/src/modules/cis/workflows/problem-solving/instructions.md +0 -250
  861. package/src/modules/cis/workflows/problem-solving/solving-methods.csv +0 -31
  862. package/src/modules/cis/workflows/problem-solving/template.md +0 -165
  863. package/src/modules/cis/workflows/problem-solving/workflow.yaml +0 -43
  864. package/src/modules/cis/workflows/storytelling/README.md +0 -58
  865. package/src/modules/cis/workflows/storytelling/instructions.md +0 -291
  866. package/src/modules/cis/workflows/storytelling/story-types.csv +0 -26
  867. package/src/modules/cis/workflows/storytelling/template.md +0 -113
  868. package/src/modules/cis/workflows/storytelling/workflow.yaml +0 -43
  869. package/src/utility/models/agent-activation-ide.xml +0 -51
  870. package/src/utility/models/agent-activation-web.xml +0 -60
  871. package/src/utility/models/agent-command-header.md +0 -1
  872. package/src/utility/models/agent-config-template.md +0 -23
  873. package/src/utility/models/agent-in-team-activation.xml +0 -3
  874. package/src/utility/models/fragments/activation-rules.xml +0 -8
  875. package/src/utility/models/fragments/activation-steps.xml +0 -16
  876. package/src/utility/models/fragments/handler-action.xml +0 -4
  877. package/src/utility/models/fragments/handler-exec.xml +0 -5
  878. package/src/utility/models/fragments/handler-tmpl.xml +0 -5
  879. package/src/utility/models/fragments/handler-validate-workflow.xml +0 -7
  880. package/src/utility/models/fragments/handler-workflow.xml +0 -9
  881. package/src/utility/models/fragments/menu-handlers.xml +0 -6
  882. package/src/utility/models/fragments/web-bundle-activation-steps.xml +0 -32
  883. package/src/utility/templates/agent.customize.template.yaml +0 -42
  884. package/test/fixtures/agent-schema/invalid/metadata/core-agent-with-module.agent.yaml +0 -26
  885. package/test/fixtures/agent-schema/invalid/metadata/module-agent-missing-module.agent.yaml +0 -25
  886. package/test/fixtures/agent-schema/invalid/metadata/wrong-module-value.agent.yaml +0 -26
  887. package/tools/cli/bundlers/bundle-web.js +0 -179
  888. package/tools/cli/bundlers/test-analyst.js +0 -28
  889. package/tools/cli/bundlers/test-bundler.js +0 -118
  890. package/tools/cli/bundlers/web-bundler.js +0 -1667
  891. package/tools/cli/commands/build.js +0 -458
  892. package/tools/cli/commands/list.js +0 -28
  893. package/tools/cli/commands/update.js +0 -28
  894. package/tools/cli/installers/lib/ide/auggie.js +0 -179
  895. package/tools/cli/installers/lib/ide/claude-code.js +0 -471
  896. package/tools/cli/installers/lib/ide/cline.js +0 -220
  897. package/tools/cli/installers/lib/ide/crush.js +0 -240
  898. package/tools/cli/installers/lib/ide/cursor.js +0 -352
  899. package/tools/cli/installers/lib/ide/gemini.js +0 -206
  900. package/tools/cli/installers/lib/ide/iflow.js +0 -125
  901. package/tools/cli/installers/lib/ide/opencode.js +0 -212
  902. package/tools/cli/installers/lib/ide/qwen.js +0 -318
  903. package/tools/cli/installers/lib/ide/roo.js +0 -253
  904. package/tools/cli/installers/lib/ide/templates/gemini-agent-command.toml +0 -14
  905. package/tools/cli/installers/lib/ide/templates/gemini-task-command.toml +0 -12
  906. package/tools/cli/installers/lib/ide/trae.js +0 -266
  907. package/tools/cli/installers/lib/ide/windsurf.js +0 -211
  908. package/tools/cli/lib/replace-project-root.js +0 -239
  909. package/tools/cli/regenerate-manifests.js +0 -28
  910. package/tools/cli/test-yaml-builder.js +0 -43
  911. package/tools/flattener/aggregate.js +0 -76
  912. package/tools/flattener/binary.js +0 -80
  913. package/tools/flattener/discovery.js +0 -71
  914. package/tools/flattener/files.js +0 -35
  915. package/tools/flattener/ignoreRules.js +0 -172
  916. package/tools/flattener/main.js +0 -483
  917. package/tools/flattener/projectRoot.js +0 -201
  918. package/tools/flattener/prompts.js +0 -44
  919. package/tools/flattener/stats.helpers.js +0 -368
  920. package/tools/flattener/stats.js +0 -75
  921. package/tools/flattener/test-matrix.js +0 -409
  922. package/tools/flattener/xml.js +0 -88
  923. package/tools/validate-bundles.js +0 -87
  924. package/v6-open-items.md +0 -17
  925. /package/src/{modules/bmm → bmm}/teams/team-fullstack.yaml +0 -0
  926. /package/src/{modules/bmgd/workflows/4-production → bmm/workflows/4-implementation}/sprint-planning/checklist.md +0 -0
  927. /package/src/{modules/bmm → bmm}/workflows/document-project/documentation-requirements.csv +0 -0
  928. /package/src/{modules/bmm → bmm}/workflows/document-project/templates/deep-dive-template.md +0 -0
  929. /package/src/{modules/bmm → bmm}/workflows/document-project/templates/index-template.md +0 -0
  930. /package/src/{modules/bmm → bmm}/workflows/document-project/templates/project-overview-template.md +0 -0
  931. /package/src/{modules/bmm → bmm}/workflows/document-project/templates/source-tree-template.md +0 -0
  932. /package/src/utility/{models/fragments/handler-data.xml → agent-components/handler-data.txt} +0 -0
  933. /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