bmad-method 6.0.0-alpha.11 → 6.0.0-alpha.13

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 (491) hide show
  1. package/.github/workflows/bundle-latest.yaml +79 -27
  2. package/CHANGELOG.md +167 -1
  3. package/README.md +3 -1
  4. package/custom/src/agents/commit-poet/commit-poet.agent.yaml +129 -0
  5. package/custom/src/agents/commit-poet/installation-guide.md +36 -0
  6. package/custom/src/agents/toolsmith/installation-guide.md +36 -0
  7. package/custom/src/agents/toolsmith/toolsmith-sidecar/instructions.md +70 -0
  8. package/custom/src/agents/toolsmith/toolsmith-sidecar/knowledge/bundlers.md +111 -0
  9. package/custom/src/agents/toolsmith/toolsmith-sidecar/knowledge/deploy.md +70 -0
  10. package/custom/src/agents/toolsmith/toolsmith-sidecar/knowledge/docs.md +114 -0
  11. package/custom/src/agents/toolsmith/toolsmith-sidecar/knowledge/installers.md +134 -0
  12. package/custom/src/agents/toolsmith/toolsmith-sidecar/knowledge/modules.md +161 -0
  13. package/custom/src/agents/toolsmith/toolsmith-sidecar/knowledge/tests.md +103 -0
  14. package/custom/src/agents/toolsmith/toolsmith-sidecar/memories.md +17 -0
  15. package/custom/src/agents/toolsmith/toolsmith.agent.yaml +108 -0
  16. package/docs/custom-agent-installation.md +31 -17
  17. package/docs/ide-info/rovo-dev.md +388 -0
  18. package/docs/index.md +6 -81
  19. package/docs/installers-bundlers/installers-modules-platforms-reference.md +1 -1
  20. package/package.json +3 -2
  21. package/src/core/agents/bmad-master.agent.yaml +1 -1
  22. package/src/core/agents/bmad-web-orchestrator.agent.xml +1 -1
  23. package/src/core/tasks/advanced-elicitation-methods.csv +51 -21
  24. package/src/core/tasks/advanced-elicitation.xml +18 -8
  25. package/src/core/tasks/workflow.xml +36 -71
  26. package/src/core/workflows/brainstorming/brain-methods.csv +62 -36
  27. package/src/core/workflows/brainstorming/steps/step-01-session-setup.md +196 -0
  28. package/src/core/workflows/brainstorming/steps/step-01b-continue.md +121 -0
  29. package/src/core/workflows/brainstorming/steps/step-02a-user-selected.md +224 -0
  30. package/src/core/workflows/brainstorming/steps/step-02b-ai-recommended.md +236 -0
  31. package/src/core/workflows/brainstorming/steps/step-02c-random-selection.md +208 -0
  32. package/src/core/workflows/brainstorming/steps/step-02d-progressive-flow.md +263 -0
  33. package/src/core/workflows/brainstorming/steps/step-03-technique-execution.md +339 -0
  34. package/src/core/workflows/brainstorming/steps/step-04-idea-organization.md +302 -0
  35. package/src/core/workflows/brainstorming/template.md +13 -104
  36. package/src/core/workflows/brainstorming/workflow.md +51 -0
  37. package/src/core/workflows/party-mode/steps/step-01-agent-loading.md +138 -0
  38. package/src/core/workflows/party-mode/steps/step-02-discussion-orchestration.md +203 -0
  39. package/src/core/workflows/party-mode/steps/step-03-graceful-exit.md +159 -0
  40. package/src/core/workflows/party-mode/workflow.md +207 -0
  41. package/src/modules/bmb/README.md +153 -86
  42. package/src/modules/bmb/_module-installer/install-config.yaml +3 -3
  43. package/src/modules/bmb/agents/bmad-builder.agent.yaml +45 -31
  44. package/src/modules/bmb/docs/{agent-menu-patterns.md → agents/agent-menu-patterns.md} +1 -1
  45. package/src/modules/bmb/docs/agents/kb.csv +0 -0
  46. package/src/modules/bmb/docs/{module-agent-architecture.md → agents/module-agent-architecture.md} +1 -1
  47. package/src/modules/bmb/docs/{simple-agent-architecture.md → agents/simple-agent-architecture.md} +1 -1
  48. package/src/modules/bmb/docs/workflows/architecture.md +220 -0
  49. package/src/modules/bmb/docs/workflows/common-workflow-tools.csv +19 -0
  50. package/src/modules/bmb/docs/workflows/csv-data-file-standards.md +206 -0
  51. package/src/modules/bmb/docs/workflows/index.md +45 -0
  52. package/src/modules/bmb/docs/workflows/intent-vs-prescriptive-spectrum.md +220 -0
  53. package/src/modules/bmb/docs/workflows/kb.csv +0 -0
  54. package/src/modules/bmb/docs/workflows/step-template.md +283 -0
  55. package/src/modules/bmb/docs/workflows/terms.md +97 -0
  56. package/src/modules/bmb/docs/workflows/workflow-template.md +152 -0
  57. package/src/modules/bmb/reference/agents/module-examples/README.md +1 -1
  58. package/src/modules/bmb/reference/agents/module-examples/security-engineer.agent.yaml +2 -2
  59. package/src/modules/bmb/reference/agents/module-examples/trend-analyst.agent.yaml +1 -1
  60. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/data/dietary-restrictions.csv +18 -0
  61. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/data/macro-calculator.csv +16 -0
  62. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/data/recipe-database.csv +28 -0
  63. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +177 -0
  64. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +150 -0
  65. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +164 -0
  66. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +152 -0
  67. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +182 -0
  68. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +167 -0
  69. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +194 -0
  70. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/assessment-section.md +25 -0
  71. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/nutrition-plan.md +68 -0
  72. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/prep-schedule-section.md +29 -0
  73. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/profile-section.md +47 -0
  74. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/shopping-section.md +37 -0
  75. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/templates/strategy-section.md +18 -0
  76. package/src/modules/bmb/reference/workflows/meal-prep-nutrition/workflow.md +58 -0
  77. package/src/modules/bmb/workflows/create-agent/data/info-and-installation-guide.md +17 -0
  78. package/src/modules/bmb/workflows/create-agent/data/reference/README.md +3 -0
  79. package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/README.md +242 -0
  80. package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/breakthroughs.md +24 -0
  81. package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/instructions.md +108 -0
  82. package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/memories.md +46 -0
  83. package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper-sidecar/mood-patterns.md +39 -0
  84. package/src/modules/bmb/workflows/create-agent/data/reference/agents/expert-examples/journal-keeper/journal-keeper.agent.yaml +152 -0
  85. package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/README.md +50 -0
  86. package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/security-engineer.agent.yaml +53 -0
  87. package/src/modules/bmb/workflows/create-agent/data/reference/agents/module-examples/trend-analyst.agent.yaml +57 -0
  88. package/src/modules/bmb/workflows/create-agent/data/reference/agents/simple-examples/README.md +223 -0
  89. package/src/modules/bmb/workflows/create-agent/data/reference/agents/simple-examples/commit-poet.agent.yaml +126 -0
  90. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/data/dietary-restrictions.csv +18 -0
  91. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/data/macro-calculator.csv +16 -0
  92. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/data/recipe-database.csv +28 -0
  93. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-01-init.md +177 -0
  94. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-01b-continue.md +150 -0
  95. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-02-profile.md +164 -0
  96. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-03-assessment.md +152 -0
  97. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-04-strategy.md +182 -0
  98. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-05-shopping.md +167 -0
  99. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/steps/step-06-prep-schedule.md +194 -0
  100. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/assessment-section.md +25 -0
  101. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/nutrition-plan.md +68 -0
  102. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/prep-schedule-section.md +29 -0
  103. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/profile-section.md +47 -0
  104. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/shopping-section.md +37 -0
  105. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/templates/strategy-section.md +18 -0
  106. package/src/modules/bmb/workflows/create-agent/data/reference/workflows/meal-prep-nutrition/workflow.md +58 -0
  107. package/src/modules/bmb/workflows/create-agent/data/validation-complete.md +305 -0
  108. package/src/modules/bmb/workflows/create-agent/steps/step-01-brainstorm.md +145 -0
  109. package/src/modules/bmb/workflows/create-agent/steps/step-02-discover.md +210 -0
  110. package/src/modules/bmb/workflows/create-agent/steps/step-03-persona.md +260 -0
  111. package/src/modules/bmb/workflows/create-agent/steps/step-04-commands.md +237 -0
  112. package/src/modules/bmb/workflows/create-agent/steps/step-05-name.md +231 -0
  113. package/src/modules/bmb/workflows/create-agent/steps/step-06-build.md +224 -0
  114. package/src/modules/bmb/workflows/create-agent/steps/step-07-validate.md +234 -0
  115. package/src/modules/bmb/workflows/create-agent/steps/step-08-setup.md +179 -0
  116. package/src/modules/bmb/workflows/create-agent/steps/step-09-customize.md +197 -0
  117. package/src/modules/bmb/workflows/create-agent/steps/step-10-build-tools.md +180 -0
  118. package/src/modules/bmb/workflows/create-agent/steps/step-11-celebrate.md +222 -0
  119. package/src/modules/bmb/workflows/create-agent/templates/agent_commands.md +21 -0
  120. package/src/modules/bmb/workflows/create-agent/templates/agent_persona.md +25 -0
  121. package/src/modules/bmb/workflows/create-agent/templates/agent_purpose_and_type.md +23 -0
  122. package/src/modules/bmb/workflows/create-agent/workflow.md +91 -0
  123. package/src/modules/bmb/workflows/create-workflow/steps/step-01-init.md +168 -0
  124. package/src/modules/bmb/workflows/create-workflow/steps/step-02-gather.md +233 -0
  125. package/src/modules/bmb/workflows/create-workflow/steps/step-03-tools-overview.md +127 -0
  126. package/src/modules/bmb/workflows/create-workflow/steps/step-04-core-tools.md +145 -0
  127. package/src/modules/bmb/workflows/create-workflow/steps/step-05-memory-requirements.md +136 -0
  128. package/src/modules/bmb/workflows/create-workflow/steps/step-06-external-tools.md +154 -0
  129. package/src/modules/bmb/workflows/create-workflow/steps/step-07-installation-guidance.md +159 -0
  130. package/src/modules/bmb/workflows/create-workflow/steps/step-08-tools-summary.md +167 -0
  131. package/src/modules/bmb/workflows/create-workflow/steps/step-09-design.md +239 -0
  132. package/src/modules/bmb/workflows/create-workflow/steps/step-10-plan-review.md +215 -0
  133. package/src/modules/bmb/workflows/create-workflow/steps/step-11-build.md +262 -0
  134. package/src/modules/bmb/workflows/create-workflow/steps/step-12-review.md +270 -0
  135. package/src/modules/bmb/workflows/create-workflow/templates/build-summary.md +36 -0
  136. package/src/modules/bmb/workflows/create-workflow/templates/completion-section.md +39 -0
  137. package/src/modules/bmb/workflows/create-workflow/templates/content-template.md +21 -0
  138. package/src/modules/bmb/workflows/create-workflow/templates/design-section.md +53 -0
  139. package/src/modules/bmb/workflows/create-workflow/templates/project-info.md +18 -0
  140. package/src/modules/bmb/workflows/create-workflow/templates/requirements-section.md +47 -0
  141. package/src/modules/bmb/workflows/create-workflow/templates/review-section.md +56 -0
  142. package/src/modules/bmb/workflows/create-workflow/templates/step-file.md +139 -0
  143. package/src/modules/bmb/workflows/create-workflow/templates/workflow-plan.md +54 -0
  144. package/src/modules/bmb/workflows/create-workflow/templates/workflow.md +58 -0
  145. package/src/modules/bmb/workflows/create-workflow/workflow.md +58 -0
  146. package/src/modules/bmb/workflows/edit-agent/steps/step-01-discover-intent.md +134 -0
  147. package/src/modules/bmb/workflows/edit-agent/steps/step-02-analyze-agent.md +202 -0
  148. package/src/modules/bmb/workflows/edit-agent/steps/step-03-propose-changes.md +157 -0
  149. package/src/modules/bmb/workflows/edit-agent/steps/step-04-apply-changes.md +150 -0
  150. package/src/modules/bmb/workflows/edit-agent/steps/step-05-validate.md +150 -0
  151. package/src/modules/bmb/workflows/edit-agent/workflow.md +58 -0
  152. package/src/modules/bmb/workflows/edit-workflow/steps/step-01-analyze.md +221 -0
  153. package/src/modules/bmb/workflows/edit-workflow/steps/step-02-discover.md +253 -0
  154. package/src/modules/bmb/workflows/edit-workflow/steps/step-03-improve.md +217 -0
  155. package/src/modules/bmb/workflows/edit-workflow/steps/step-04-validate.md +193 -0
  156. package/src/modules/bmb/workflows/edit-workflow/steps/step-05-compliance-check.md +245 -0
  157. package/src/modules/bmb/workflows/edit-workflow/templates/completion-summary.md +75 -0
  158. package/src/modules/bmb/workflows/edit-workflow/templates/improvement-goals.md +68 -0
  159. package/src/modules/bmb/workflows/edit-workflow/templates/improvement-log.md +40 -0
  160. package/src/modules/bmb/workflows/edit-workflow/templates/validation-results.md +51 -0
  161. package/src/modules/bmb/workflows/edit-workflow/templates/workflow-analysis.md +56 -0
  162. package/src/modules/bmb/workflows/edit-workflow/workflow.md +58 -0
  163. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-01-validate-goal.md +152 -0
  164. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-02-workflow-validation.md +243 -0
  165. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-03-step-validation.md +274 -0
  166. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-04-file-validation.md +295 -0
  167. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-05-intent-spectrum-validation.md +264 -0
  168. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-06-web-subprocess-validation.md +360 -0
  169. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-07-holistic-analysis.md +258 -0
  170. package/src/modules/bmb/workflows/workflow-compliance-check/steps/step-08-generate-report.md +301 -0
  171. package/src/modules/bmb/workflows/workflow-compliance-check/templates/compliance-report.md +140 -0
  172. package/src/modules/bmb/workflows/workflow-compliance-check/workflow.md +58 -0
  173. package/src/modules/bmgd/agents/game-architect.agent.yaml +1 -1
  174. package/src/modules/bmgd/agents/game-designer.agent.yaml +1 -1
  175. package/src/modules/bmgd/agents/game-dev.agent.yaml +1 -1
  176. package/src/modules/bmgd/agents/game-scrum-master.agent.yaml +1 -1
  177. package/src/modules/bmm/_module-installer/install-config.yaml +9 -15
  178. package/src/modules/bmm/agents/analyst.agent.yaml +14 -14
  179. package/src/modules/bmm/agents/architect.agent.yaml +12 -10
  180. package/src/modules/bmm/agents/dev.agent.yaml +20 -16
  181. package/src/modules/bmm/agents/pm.agent.yaml +13 -31
  182. package/src/modules/bmm/agents/quick-flow-solo-dev.agent.yaml +36 -0
  183. package/src/modules/bmm/agents/sm.agent.yaml +13 -31
  184. package/src/modules/bmm/agents/tea.agent.yaml +10 -7
  185. package/src/modules/bmm/agents/tech-writer.agent.yaml +7 -20
  186. package/src/modules/bmm/agents/ux-designer.agent.yaml +12 -10
  187. package/src/modules/bmm/data/README.md +29 -0
  188. package/src/modules/bmm/data/project-context-template.md +40 -0
  189. package/src/modules/bmm/docs/README.md +21 -9
  190. package/src/modules/bmm/docs/agents-guide.md +69 -23
  191. package/src/modules/bmm/docs/bmad-quick-flow.md +528 -0
  192. package/src/modules/bmm/docs/brownfield-guide.md +9 -10
  193. package/src/modules/bmm/docs/enterprise-agentic-development.md +1 -1
  194. package/src/modules/bmm/docs/glossary.md +5 -5
  195. package/src/modules/bmm/docs/images/workflow-method-greenfield.excalidraw +909 -1654
  196. package/src/modules/bmm/docs/images/workflow-method-greenfield.svg +2 -2
  197. package/src/modules/bmm/docs/quick-flow-solo-dev.md +337 -0
  198. package/src/modules/bmm/docs/scale-adaptive-system.md +5 -5
  199. package/src/modules/bmm/docs/test-architecture.md +84 -18
  200. package/src/modules/bmm/docs/workflows-analysis.md +36 -140
  201. package/src/modules/bmm/docs/workflows-implementation.md +32 -157
  202. package/src/modules/bmm/docs/workflows-planning.md +51 -212
  203. package/src/modules/bmm/docs/workflows-solutioning.md +24 -69
  204. package/src/modules/bmm/teams/default-party.csv +15 -14
  205. package/src/modules/bmm/teams/team-fullstack.yaml +0 -1
  206. package/src/modules/bmm/testarch/knowledge/api-request.md +303 -0
  207. package/src/modules/bmm/testarch/knowledge/auth-session.md +356 -0
  208. package/src/modules/bmm/testarch/knowledge/burn-in.md +273 -0
  209. package/src/modules/bmm/testarch/knowledge/file-utils.md +260 -0
  210. package/src/modules/bmm/testarch/knowledge/fixtures-composition.md +382 -0
  211. package/src/modules/bmm/testarch/knowledge/intercept-network-call.md +280 -0
  212. package/src/modules/bmm/testarch/knowledge/log.md +294 -0
  213. package/src/modules/bmm/testarch/knowledge/network-error-monitor.md +272 -0
  214. package/src/modules/bmm/testarch/knowledge/network-recorder.md +265 -0
  215. package/src/modules/bmm/testarch/knowledge/overview.md +284 -0
  216. package/src/modules/bmm/testarch/knowledge/recurse.md +296 -0
  217. package/src/modules/bmm/testarch/tea-index.csv +11 -0
  218. package/src/modules/bmm/workflows/1-analysis/product-brief/product-brief.template.md +8 -0
  219. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-01-init.md +192 -0
  220. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-01b-continue.md +167 -0
  221. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-02-vision.md +203 -0
  222. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-03-users.md +206 -0
  223. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-04-metrics.md +209 -0
  224. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-05-scope.md +223 -0
  225. package/src/modules/bmm/workflows/1-analysis/product-brief/steps/step-06-complete.md +199 -0
  226. package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.md +58 -0
  227. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-01-init.md +136 -0
  228. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-02-domain-analysis.md +228 -0
  229. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-03-competitive-landscape.md +237 -0
  230. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-04-regulatory-focus.md +205 -0
  231. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-05-technical-trends.md +233 -0
  232. package/src/modules/bmm/workflows/1-analysis/research/domain-steps/step-06-research-synthesis.md +443 -0
  233. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-01-init.md +182 -0
  234. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-02-customer-behavior.md +235 -0
  235. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-02-customer-insights.md +198 -0
  236. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-03-customer-pain-points.md +247 -0
  237. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-04-customer-decisions.md +257 -0
  238. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-05-competitive-analysis.md +175 -0
  239. package/src/modules/bmm/workflows/1-analysis/research/market-steps/step-06-research-completion.md +475 -0
  240. package/src/modules/bmm/workflows/1-analysis/research/research.template.md +16 -0
  241. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-01-init.md +136 -0
  242. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-02-technical-overview.md +237 -0
  243. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-03-integration-patterns.md +246 -0
  244. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-04-architectural-patterns.md +200 -0
  245. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-05-implementation-research.md +237 -0
  246. package/src/modules/bmm/workflows/1-analysis/research/technical-steps/step-06-research-synthesis.md +486 -0
  247. package/src/modules/bmm/workflows/1-analysis/research/workflow.md +198 -0
  248. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01-init.md +159 -0
  249. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-01b-continue.md +126 -0
  250. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-02-discovery.md +209 -0
  251. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-03-core-experience.md +215 -0
  252. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-04-emotional-response.md +218 -0
  253. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-05-inspiration.md +233 -0
  254. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-06-design-system.md +251 -0
  255. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-07-defining-experience.md +253 -0
  256. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-08-visual-foundation.md +223 -0
  257. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-09-design-directions.md +223 -0
  258. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-10-user-journeys.md +240 -0
  259. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-11-component-strategy.md +247 -0
  260. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-12-ux-patterns.md +236 -0
  261. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-13-responsive-accessibility.md +263 -0
  262. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/steps/step-14-complete.md +226 -0
  263. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +6 -138
  264. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.md +53 -0
  265. package/src/modules/bmm/workflows/2-plan-workflows/prd/prd-template.md +5 -200
  266. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01-init.md +161 -0
  267. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-01b-continue.md +123 -0
  268. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-02-discovery.md +275 -0
  269. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-03-success.md +271 -0
  270. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-04-journeys.md +272 -0
  271. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-05-domain.md +249 -0
  272. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-06-innovation.md +240 -0
  273. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-07-project-type.md +236 -0
  274. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-08-scoping.md +280 -0
  275. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-09-functional.md +251 -0
  276. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-10-nonfunctional.md +275 -0
  277. package/src/modules/bmm/workflows/2-plan-workflows/prd/steps/step-11-complete.md +210 -0
  278. package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.md +61 -0
  279. package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-decision-template.md +13 -0
  280. package/src/modules/bmm/workflows/3-solutioning/architecture/data/domain-complexity.csv +11 -0
  281. package/src/modules/bmm/workflows/3-solutioning/architecture/data/project-types.csv +7 -0
  282. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-01-init.md +194 -0
  283. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-01b-continue.md +163 -0
  284. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-02-context.md +223 -0
  285. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-03-starter.md +330 -0
  286. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-04-decisions.md +317 -0
  287. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-05-patterns.md +358 -0
  288. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-06-structure.md +378 -0
  289. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-07-validation.md +358 -0
  290. package/src/modules/bmm/workflows/3-solutioning/architecture/steps/step-08-complete.md +351 -0
  291. package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.md +48 -0
  292. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/instructions.md +247 -476
  293. package/src/modules/bmm/workflows/3-solutioning/create-epics-and-stories/workflow.yaml +8 -18
  294. package/src/modules/bmm/workflows/4-implementation/code-review/instructions.xml +176 -0
  295. package/src/modules/bmm/workflows/4-implementation/code-review/workflow.yaml +4 -11
  296. package/src/modules/bmm/workflows/4-implementation/create-story/checklist.md +332 -214
  297. package/src/modules/bmm/workflows/4-implementation/create-story/instructions.xml +324 -0
  298. package/src/modules/bmm/workflows/4-implementation/create-story/workflow.yaml +21 -34
  299. package/src/modules/bmm/workflows/4-implementation/dev-story/checklist.md +65 -23
  300. package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.xml +406 -0
  301. package/src/modules/bmm/workflows/4-implementation/dev-story/workflow.yaml +6 -37
  302. package/src/modules/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +4 -3
  303. package/src/modules/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +2 -0
  304. package/src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/instructions.md +115 -0
  305. package/src/modules/bmm/workflows/bmad-quick-flow/create-tech-spec/workflow.yaml +26 -0
  306. package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/checklist.md +25 -0
  307. package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/instructions.md +105 -0
  308. package/src/modules/bmm/workflows/bmad-quick-flow/quick-dev/workflow.yaml +29 -0
  309. package/src/modules/bmm/workflows/generate-project-context/project-context-template.md +20 -0
  310. package/src/modules/bmm/workflows/generate-project-context/steps/step-01-discover.md +193 -0
  311. package/src/modules/bmm/workflows/generate-project-context/steps/step-02-generate.md +317 -0
  312. package/src/modules/bmm/workflows/generate-project-context/steps/step-03-complete.md +277 -0
  313. package/src/modules/bmm/workflows/generate-project-context/workflow.md +48 -0
  314. package/src/modules/bmm/workflows/testarch/atdd/instructions.md +23 -3
  315. package/src/modules/bmm/workflows/testarch/automate/instructions.md +23 -2
  316. package/src/modules/bmm/workflows/testarch/ci/instructions.md +18 -1
  317. package/src/modules/bmm/workflows/testarch/framework/instructions.md +27 -1
  318. package/src/modules/bmm/workflows/testarch/test-design/instructions.md +8 -2
  319. package/src/modules/bmm/workflows/testarch/test-review/instructions.md +28 -8
  320. package/src/modules/bmm/workflows/workflow-status/init/instructions.md +66 -54
  321. package/src/modules/bmm/workflows/workflow-status/instructions.md +11 -4
  322. package/src/modules/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +3 -2
  323. package/src/modules/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +3 -2
  324. package/src/modules/bmm/workflows/workflow-status/paths/method-brownfield.yaml +3 -2
  325. package/src/modules/bmm/workflows/workflow-status/paths/method-greenfield.yaml +3 -2
  326. package/src/modules/cis/agents/README.md +1 -1
  327. package/src/modules/cis/agents/brainstorming-coach.agent.yaml +3 -2
  328. package/src/modules/cis/agents/creative-problem-solver.agent.yaml +2 -1
  329. package/src/modules/cis/agents/design-thinking-coach.agent.yaml +2 -1
  330. package/src/modules/cis/agents/innovation-strategist.agent.yaml +2 -1
  331. package/src/modules/cis/agents/presentation-master.agent.yaml +3 -2
  332. package/src/modules/cis/agents/storyteller.agent.yaml +2 -1
  333. package/src/modules/cis/teams/default-party.csv +6 -5
  334. package/src/utility/models/agent-activation-ide.xml +4 -4
  335. package/src/utility/models/agent-activation-web.xml +1 -11
  336. package/src/utility/models/fragments/activation-rules.xml +5 -6
  337. package/src/utility/models/fragments/handler-exec.xml +6 -5
  338. package/src/utility/models/fragments/handler-multi.xml +14 -0
  339. package/test/README.md +1 -1
  340. package/test/fixtures/agent-schema/valid/menu-commands/all-command-types.agent.yaml +1 -3
  341. package/tools/cli/README.md +1 -0
  342. package/tools/cli/bundlers/web-bundler.js +3 -14
  343. package/tools/cli/commands/agent-install.js +8 -8
  344. package/tools/cli/commands/cleanup.js +141 -0
  345. package/tools/cli/commands/install.js +48 -3
  346. package/tools/cli/installers/lib/core/config-collector.js +24 -0
  347. package/tools/cli/installers/lib/core/installer.js +612 -43
  348. package/tools/cli/installers/lib/ide/antigravity.js +51 -7
  349. package/tools/cli/installers/lib/ide/auggie.js +53 -0
  350. package/tools/cli/installers/lib/ide/claude-code.js +1 -6
  351. package/tools/cli/installers/lib/ide/cline.js +49 -0
  352. package/tools/cli/installers/lib/ide/codex.js +2 -2
  353. package/tools/cli/installers/lib/ide/crush.js +47 -0
  354. package/tools/cli/installers/lib/ide/gemini.js +47 -0
  355. package/tools/cli/installers/lib/ide/github-copilot.js +59 -48
  356. package/tools/cli/installers/lib/ide/iflow.js +47 -0
  357. package/tools/cli/installers/lib/ide/kilo.js +74 -0
  358. package/tools/cli/installers/lib/ide/qwen.js +54 -0
  359. package/tools/cli/installers/lib/ide/roo.js +71 -0
  360. package/tools/cli/installers/lib/ide/rovo-dev.js +290 -0
  361. package/tools/cli/installers/lib/ide/trae.js +47 -0
  362. package/tools/cli/lib/agent/compiler.js +156 -22
  363. package/tools/cli/lib/agent/installer.js +13 -3
  364. package/tools/cli/lib/agent-analyzer.js +46 -18
  365. package/tools/cli/lib/ui.js +204 -9
  366. package/tools/cli/lib/yaml-xml-builder.js +123 -24
  367. package/tools/platform-codes.yaml +12 -0
  368. package/tools/schema/agent.js +169 -20
  369. package/src/core/tasks/adv-elicit-methods.csv +0 -39
  370. package/src/core/workflows/brainstorming/README.md +0 -261
  371. package/src/core/workflows/brainstorming/instructions.md +0 -315
  372. package/src/core/workflows/brainstorming/workflow.yaml +0 -38
  373. package/src/core/workflows/party-mode/instructions.md +0 -183
  374. package/src/core/workflows/party-mode/workflow.yaml +0 -28
  375. package/src/modules/bmb/workflows/audit-workflow/checklist.md +0 -142
  376. package/src/modules/bmb/workflows/audit-workflow/instructions.md +0 -341
  377. package/src/modules/bmb/workflows/audit-workflow/template.md +0 -118
  378. package/src/modules/bmb/workflows/audit-workflow/workflow.yaml +0 -25
  379. package/src/modules/bmb/workflows/convert-legacy/README.md +0 -262
  380. package/src/modules/bmb/workflows/convert-legacy/checklist.md +0 -205
  381. package/src/modules/bmb/workflows/convert-legacy/instructions.md +0 -377
  382. package/src/modules/bmb/workflows/convert-legacy/workflow.yaml +0 -30
  383. package/src/modules/bmb/workflows/create-agent/instructions.md +0 -519
  384. package/src/modules/bmb/workflows/create-agent/workflow.yaml +0 -55
  385. package/src/modules/bmb/workflows/create-workflow/README.md +0 -277
  386. package/src/modules/bmb/workflows/create-workflow/brainstorm-context.md +0 -197
  387. package/src/modules/bmb/workflows/create-workflow/checklist.md +0 -94
  388. package/src/modules/bmb/workflows/create-workflow/instructions.md +0 -725
  389. package/src/modules/bmb/workflows/create-workflow/workflow-creation-guide.md +0 -1327
  390. package/src/modules/bmb/workflows/create-workflow/workflow-template/checklist.md +0 -24
  391. package/src/modules/bmb/workflows/create-workflow/workflow-template/instructions.md +0 -15
  392. package/src/modules/bmb/workflows/create-workflow/workflow-template/template.md +0 -9
  393. package/src/modules/bmb/workflows/create-workflow/workflow-template/workflow.yaml +0 -61
  394. package/src/modules/bmb/workflows/create-workflow/workflow.yaml +0 -41
  395. package/src/modules/bmb/workflows/edit-agent/README.md +0 -239
  396. package/src/modules/bmb/workflows/edit-agent/instructions.md +0 -654
  397. package/src/modules/bmb/workflows/edit-agent/workflow.yaml +0 -49
  398. package/src/modules/bmb/workflows/edit-workflow/README.md +0 -119
  399. package/src/modules/bmb/workflows/edit-workflow/checklist.md +0 -70
  400. package/src/modules/bmb/workflows/edit-workflow/instructions.md +0 -342
  401. package/src/modules/bmb/workflows/edit-workflow/workflow.yaml +0 -27
  402. package/src/modules/bmm/_module-installer/assets/bmm-kb.md +0 -1
  403. package/src/modules/bmm/_module-installer/assets/technical-decisions.md +0 -30
  404. package/src/modules/bmm/docs/quick-spec-flow.md +0 -652
  405. package/src/modules/bmm/workflows/1-analysis/brainstorm-project/instructions.md +0 -112
  406. package/src/modules/bmm/workflows/1-analysis/brainstorm-project/project-context.md +0 -25
  407. package/src/modules/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml +0 -39
  408. package/src/modules/bmm/workflows/1-analysis/domain-research/instructions.md +0 -425
  409. package/src/modules/bmm/workflows/1-analysis/domain-research/template.md +0 -180
  410. package/src/modules/bmm/workflows/1-analysis/domain-research/workflow.yaml +0 -56
  411. package/src/modules/bmm/workflows/1-analysis/product-brief/checklist.md +0 -115
  412. package/src/modules/bmm/workflows/1-analysis/product-brief/instructions.md +0 -524
  413. package/src/modules/bmm/workflows/1-analysis/product-brief/template.md +0 -181
  414. package/src/modules/bmm/workflows/1-analysis/product-brief/workflow.yaml +0 -61
  415. package/src/modules/bmm/workflows/1-analysis/research/checklist-deep-prompt.md +0 -144
  416. package/src/modules/bmm/workflows/1-analysis/research/checklist-technical.md +0 -249
  417. package/src/modules/bmm/workflows/1-analysis/research/checklist.md +0 -299
  418. package/src/modules/bmm/workflows/1-analysis/research/claude-code/injections.yaml +0 -114
  419. package/src/modules/bmm/workflows/1-analysis/research/instructions-deep-prompt.md +0 -438
  420. package/src/modules/bmm/workflows/1-analysis/research/instructions-market.md +0 -675
  421. package/src/modules/bmm/workflows/1-analysis/research/instructions-router.md +0 -134
  422. package/src/modules/bmm/workflows/1-analysis/research/instructions-technical.md +0 -534
  423. package/src/modules/bmm/workflows/1-analysis/research/template-deep-prompt.md +0 -94
  424. package/src/modules/bmm/workflows/1-analysis/research/template-market.md +0 -347
  425. package/src/modules/bmm/workflows/1-analysis/research/template-technical.md +0 -245
  426. package/src/modules/bmm/workflows/1-analysis/research/workflow.yaml +0 -62
  427. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/checklist.md +0 -310
  428. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md +0 -1308
  429. package/src/modules/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +0 -93
  430. package/src/modules/bmm/workflows/2-plan-workflows/prd/checklist.md +0 -346
  431. package/src/modules/bmm/workflows/2-plan-workflows/prd/instructions.md +0 -703
  432. package/src/modules/bmm/workflows/2-plan-workflows/prd/workflow.yaml +0 -78
  433. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/checklist.md +0 -217
  434. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/epics-template.md +0 -74
  435. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions-generate-stories.md +0 -436
  436. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/instructions.md +0 -980
  437. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/tech-spec-template.md +0 -181
  438. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/user-story-template.md +0 -90
  439. package/src/modules/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +0 -60
  440. package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-patterns.yaml +0 -321
  441. package/src/modules/bmm/workflows/3-solutioning/architecture/architecture-template.md +0 -103
  442. package/src/modules/bmm/workflows/3-solutioning/architecture/checklist.md +0 -240
  443. package/src/modules/bmm/workflows/3-solutioning/architecture/decision-catalog.yaml +0 -222
  444. package/src/modules/bmm/workflows/3-solutioning/architecture/instructions.md +0 -768
  445. package/src/modules/bmm/workflows/3-solutioning/architecture/pattern-categories.csv +0 -13
  446. package/src/modules/bmm/workflows/3-solutioning/architecture/workflow.yaml +0 -100
  447. package/src/modules/bmm/workflows/4-implementation/code-review/backlog_template.md +0 -12
  448. package/src/modules/bmm/workflows/4-implementation/code-review/checklist.md +0 -22
  449. package/src/modules/bmm/workflows/4-implementation/code-review/instructions.md +0 -398
  450. package/src/modules/bmm/workflows/4-implementation/create-story/instructions.md +0 -256
  451. package/src/modules/bmm/workflows/4-implementation/dev-story/instructions.md +0 -267
  452. package/src/modules/bmm/workflows/4-implementation/epic-tech-context/checklist.md +0 -17
  453. package/src/modules/bmm/workflows/4-implementation/epic-tech-context/instructions.md +0 -164
  454. package/src/modules/bmm/workflows/4-implementation/epic-tech-context/template.md +0 -76
  455. package/src/modules/bmm/workflows/4-implementation/epic-tech-context/workflow.yaml +0 -58
  456. package/src/modules/bmm/workflows/4-implementation/story-context/checklist.md +0 -16
  457. package/src/modules/bmm/workflows/4-implementation/story-context/context-template.xml +0 -34
  458. package/src/modules/bmm/workflows/4-implementation/story-context/instructions.md +0 -209
  459. package/src/modules/bmm/workflows/4-implementation/story-context/workflow.yaml +0 -63
  460. package/src/modules/bmm/workflows/4-implementation/story-done/instructions.md +0 -111
  461. package/src/modules/bmm/workflows/4-implementation/story-done/workflow.yaml +0 -28
  462. package/src/modules/bmm/workflows/4-implementation/story-ready/instructions.md +0 -117
  463. package/src/modules/bmm/workflows/4-implementation/story-ready/workflow.yaml +0 -25
  464. package/src/modules/bmm/workflows/workflow-status/paths/quick-flow-brownfield.yaml +0 -58
  465. package/src/modules/bmm/workflows/workflow-status/paths/quick-flow-greenfield.yaml +0 -47
  466. /package/src/modules/bmb/docs/{agent-compilation.md → agents/agent-compilation.md} +0 -0
  467. /package/src/modules/bmb/docs/{expert-agent-architecture.md → agents/expert-agent-architecture.md} +0 -0
  468. /package/src/modules/bmb/docs/{index.md → agents/index.md} +0 -0
  469. /package/src/modules/bmb/docs/{understanding-agent-types.md → agents/understanding-agent-types.md} +0 -0
  470. /package/src/modules/bmb/reference/{readme.md → README.md} +0 -0
  471. /package/src/modules/bmb/workflows/create-agent/{agent-validation-checklist.md → data/agent-validation-checklist.md} +0 -0
  472. /package/src/modules/bmb/workflows/create-agent/{brainstorm-context.md → data/brainstorm-context.md} +0 -0
  473. /package/src/modules/bmb/workflows/create-agent/{communication-presets.csv → data/communication-presets.csv} +0 -0
  474. /package/src/modules/bmb/{workflows → workflows-legacy}/create-module/README.md +0 -0
  475. /package/src/modules/bmb/{workflows → workflows-legacy}/create-module/brainstorm-context.md +0 -0
  476. /package/src/modules/bmb/{workflows → workflows-legacy}/create-module/checklist.md +0 -0
  477. /package/src/modules/bmb/{workflows → workflows-legacy}/create-module/installer-templates/install-config.yaml +0 -0
  478. /package/src/modules/bmb/{workflows → workflows-legacy}/create-module/installer-templates/installer.js +0 -0
  479. /package/src/modules/bmb/{workflows → workflows-legacy}/create-module/instructions.md +0 -0
  480. /package/src/modules/bmb/{workflows → workflows-legacy}/create-module/module-structure.md +0 -0
  481. /package/src/modules/bmb/{workflows → workflows-legacy}/create-module/workflow.yaml +0 -0
  482. /package/src/modules/bmb/{workflows → workflows-legacy}/edit-module/README.md +0 -0
  483. /package/src/modules/bmb/{workflows → workflows-legacy}/edit-module/checklist.md +0 -0
  484. /package/src/modules/bmb/{workflows → workflows-legacy}/edit-module/instructions.md +0 -0
  485. /package/src/modules/bmb/{workflows → workflows-legacy}/edit-module/workflow.yaml +0 -0
  486. /package/src/modules/bmb/{workflows → workflows-legacy}/module-brief/README.md +0 -0
  487. /package/src/modules/bmb/{workflows → workflows-legacy}/module-brief/checklist.md +0 -0
  488. /package/src/modules/bmb/{workflows → workflows-legacy}/module-brief/instructions.md +0 -0
  489. /package/src/modules/bmb/{workflows → workflows-legacy}/module-brief/template.md +0 -0
  490. /package/src/modules/bmb/{workflows → workflows-legacy}/module-brief/workflow.yaml +0 -0
  491. /package/src/modules/bmm/{workflows/techdoc → data}/documentation-standards.md +0 -0
@@ -49,9 +49,10 @@ You must fully embody this agent's persona and follow all activation instruction
49
49
  * Build simple activation block for custom agents
50
50
  * @param {Array} criticalActions - Agent-specific critical actions
51
51
  * @param {Array} menuItems - Menu items to determine which handlers to include
52
+ * @param {string} deploymentType - 'ide' or 'web' - filters commands based on ide-only/web-only flags
52
53
  * @returns {string} Activation XML
53
54
  */
54
- function buildSimpleActivation(criticalActions = [], menuItems = []) {
55
+ function buildSimpleActivation(criticalActions = [], menuItems = [], deploymentType = 'ide') {
55
56
  let activation = '<activation critical="MANDATORY">\n';
56
57
 
57
58
  let stepNum = 1;
@@ -75,13 +76,28 @@ function buildSimpleActivation(criticalActions = [], menuItems = []) {
75
76
  activation += ` <step n="${stepNum++}">On user input: Number → execute menu item[n] | Text → case-insensitive substring match | Multiple matches → ask user
76
77
  to clarify | No match → show "Not recognized"</step>\n`;
77
78
 
78
- // Detect which handlers are actually used
79
+ // Filter menu items based on deployment type
80
+ const filteredMenuItems = menuItems.filter((item) => {
81
+ // Skip web-only commands for IDE deployment
82
+ if (deploymentType === 'ide' && item['web-only'] === true) {
83
+ return false;
84
+ }
85
+ // Skip ide-only commands for web deployment
86
+ if (deploymentType === 'web' && item['ide-only'] === true) {
87
+ return false;
88
+ }
89
+ return true;
90
+ });
91
+
92
+ // Detect which handlers are actually used in the filtered menu
79
93
  const usedHandlers = new Set();
80
- for (const item of menuItems) {
94
+ for (const item of filteredMenuItems) {
81
95
  if (item.action) usedHandlers.add('action');
82
96
  if (item.workflow) usedHandlers.add('workflow');
83
97
  if (item.exec) usedHandlers.add('exec');
84
98
  if (item.tmpl) usedHandlers.add('tmpl');
99
+ if (item.data) usedHandlers.add('data');
100
+ if (item['validate-workflow']) usedHandlers.add('validate-workflow');
85
101
  }
86
102
 
87
103
  // Only include menu-handlers section if handlers are used
@@ -124,6 +140,25 @@ function buildSimpleActivation(criticalActions = [], menuItems = []) {
124
140
  </handler>\n`;
125
141
  }
126
142
 
143
+ if (usedHandlers.has('data')) {
144
+ activation += ` <handler type="data">
145
+ When menu item has: data="path/to/x.json|yaml|yml"
146
+ Load the file, parse as JSON/YAML, make available as {data} to subsequent operations
147
+ </handler>\n`;
148
+ }
149
+
150
+ if (usedHandlers.has('validate-workflow')) {
151
+ activation += ` <handler type="validate-workflow">
152
+ When menu item has: validate-workflow="path/to/workflow.yaml"
153
+ 1. CRITICAL: Always LOAD {project-root}/{bmad_folder}/core/tasks/validate-workflow.xml
154
+ 2. Read the complete file - this is the CORE OS for validating BMAD workflows
155
+ 3. Pass the workflow.yaml path as 'workflow' parameter to those instructions
156
+ 4. Pass any checklist.md from the workflow location as 'checklist' parameter if available
157
+ 5. Execute validate-workflow.xml instructions precisely following all steps
158
+ 6. Generate validation report with thorough analysis
159
+ </handler>\n`;
160
+ }
161
+
127
162
  activation += ` </handlers>
128
163
  </menu-handlers>\n`;
129
164
  }
@@ -208,42 +243,141 @@ function buildPromptsXml(prompts) {
208
243
 
209
244
  /**
210
245
  * Build menu XML section
246
+ * Supports both legacy and multi format menu items
247
+ * Multi items display as a single menu item with nested handlers
211
248
  * @param {Array} menuItems - Menu items
212
249
  * @returns {string} Menu XML
213
250
  */
214
251
  function buildMenuXml(menuItems) {
215
252
  let xml = ' <menu>\n';
216
253
 
217
- // Always inject *help first
218
- xml += ` <item cmd="*help">Show numbered menu</item>\n`;
254
+ // Always inject menu display option first
255
+ xml += ` <item cmd="*menu">[M] Redisplay Menu Options</item>\n`;
219
256
 
220
257
  // Add user-defined menu items
221
258
  if (menuItems && menuItems.length > 0) {
222
259
  for (const item of menuItems) {
223
- let trigger = item.trigger || '';
224
- if (!trigger.startsWith('*')) {
225
- trigger = '*' + trigger;
260
+ // Handle multi format menu items with nested handlers
261
+ if (item.multi && item.triggers && Array.isArray(item.triggers)) {
262
+ xml += ` <item type="multi">${escapeXml(item.multi)}\n`;
263
+ xml += buildNestedHandlers(item.triggers);
264
+ xml += ` </item>\n`;
226
265
  }
266
+ // Handle legacy format menu items
267
+ else if (item.trigger) {
268
+ // For legacy items, keep using cmd with *<trigger> format
269
+ let trigger = item.trigger || '';
270
+ if (!trigger.startsWith('*')) {
271
+ trigger = '*' + trigger;
272
+ }
273
+
274
+ const attrs = [`cmd="${trigger}"`];
275
+
276
+ // Add handler attributes
277
+ if (item.workflow) attrs.push(`workflow="${item.workflow}"`);
278
+ if (item.exec) attrs.push(`exec="${item.exec}"`);
279
+ if (item.tmpl) attrs.push(`tmpl="${item.tmpl}"`);
280
+ if (item.data) attrs.push(`data="${item.data}"`);
281
+ if (item.action) attrs.push(`action="${item.action}"`);
282
+
283
+ xml += ` <item ${attrs.join(' ')}>${escapeXml(item.description || '')}</item>\n`;
284
+ }
285
+ }
286
+ }
287
+
288
+ // Always inject dismiss last
289
+ xml += ` <item cmd="*dismiss">[D] Dismiss Agent</item>\n`;
290
+
291
+ xml += ' </menu>\n';
292
+
293
+ return xml;
294
+ }
295
+
296
+ /**
297
+ * Build nested handlers for multi format menu items
298
+ * @param {Array} triggers - Triggers array from multi format
299
+ * @returns {string} Handler XML
300
+ */
301
+ function buildNestedHandlers(triggers) {
302
+ let xml = '';
303
+
304
+ for (const triggerGroup of triggers) {
305
+ for (const [triggerName, execArray] of Object.entries(triggerGroup)) {
306
+ // Build trigger with * prefix
307
+ let trigger = triggerName.startsWith('*') ? triggerName : '*' + triggerName;
227
308
 
228
- const attrs = [`cmd="${trigger}"`];
309
+ // Extract the relevant execution data
310
+ const execData = processExecArray(execArray);
229
311
 
230
- // Add handler attributes
231
- if (item.workflow) attrs.push(`workflow="${item.workflow}"`);
232
- if (item.exec) attrs.push(`exec="${item.exec}"`);
233
- if (item.tmpl) attrs.push(`tmpl="${item.tmpl}"`);
234
- if (item.data) attrs.push(`data="${item.data}"`);
235
- if (item.action) attrs.push(`action="${item.action}"`);
312
+ // For nested handlers in multi items, we use match attribute for fuzzy matching
313
+ const attrs = [`match="${escapeXml(execData.description || '')}"`];
236
314
 
237
- xml += ` <item ${attrs.join(' ')}>${escapeXml(item.description || '')}</item>\n`;
315
+ // Add handler attributes based on exec data
316
+ if (execData.route) attrs.push(`exec="${execData.route}"`);
317
+ if (execData.workflow) attrs.push(`workflow="${execData.workflow}"`);
318
+ if (execData['validate-workflow']) attrs.push(`validate-workflow="${execData['validate-workflow']}"`);
319
+ if (execData.action) attrs.push(`action="${execData.action}"`);
320
+ if (execData.data) attrs.push(`data="${execData.data}"`);
321
+ if (execData.tmpl) attrs.push(`tmpl="${execData.tmpl}"`);
322
+ // Only add type if it's not 'exec' (exec is already implied by the exec attribute)
323
+ if (execData.type && execData.type !== 'exec') attrs.push(`type="${execData.type}"`);
324
+
325
+ xml += ` <handler ${attrs.join(' ')}></handler>\n`;
238
326
  }
239
327
  }
240
328
 
241
- // Always inject *exit last
242
- xml += ` <item cmd="*exit">Exit with confirmation</item>\n`;
329
+ return xml;
330
+ }
243
331
 
244
- xml += ' </menu>\n';
332
+ /**
333
+ * Process the execution array from multi format triggers
334
+ * Extracts relevant data for XML attributes
335
+ * @param {Array} execArray - Array of execution objects
336
+ * @returns {Object} Processed execution data
337
+ */
338
+ function processExecArray(execArray) {
339
+ const result = {
340
+ description: '',
341
+ route: null,
342
+ workflow: null,
343
+ data: null,
344
+ action: null,
345
+ type: null,
346
+ };
245
347
 
246
- return xml;
348
+ if (!Array.isArray(execArray)) {
349
+ return result;
350
+ }
351
+
352
+ for (const exec of execArray) {
353
+ if (exec.input) {
354
+ // Use input as description if no explicit description is provided
355
+ result.description = exec.input;
356
+ }
357
+
358
+ if (exec.route) {
359
+ // Determine if it's a workflow or exec based on file extension or context
360
+ if (exec.route.endsWith('.yaml') || exec.route.endsWith('.yml')) {
361
+ result.workflow = exec.route;
362
+ } else {
363
+ result.route = exec.route;
364
+ }
365
+ }
366
+
367
+ if (exec.data !== null && exec.data !== undefined) {
368
+ result.data = exec.data;
369
+ }
370
+
371
+ if (exec.action) {
372
+ result.action = exec.action;
373
+ }
374
+
375
+ if (exec.type) {
376
+ result.type = exec.type;
377
+ }
378
+ }
379
+
380
+ return result;
247
381
  }
248
382
 
249
383
  /**
@@ -275,8 +409,8 @@ function compileToXml(agentYaml, agentName = '', targetPath = '') {
275
409
 
276
410
  xml += `<agent ${agentAttrs.join(' ')}>\n`;
277
411
 
278
- // Activation block - pass menu items to determine which handlers to include
279
- xml += buildSimpleActivation(agent.critical_actions || [], agent.menu || []);
412
+ // Activation block - pass menu items and deployment type to determine which handlers to include
413
+ xml += buildSimpleActivation(agent.critical_actions || [], agent.menu || [], 'ide');
280
414
 
281
415
  // Persona section
282
416
  xml += buildPersonaXml(agent.persona);
@@ -677,6 +677,12 @@ function extractManifestData(xmlContent, metadata, agentPath, moduleName = 'cust
677
677
  return match[1].trim().replaceAll(/\n+/g, ' ').replaceAll(/\s+/g, ' ').trim();
678
678
  };
679
679
 
680
+ // Extract attributes from agent tag
681
+ const extractAgentAttribute = (attr) => {
682
+ const match = xmlContent.match(new RegExp(`<agent[^>]*\\s${attr}=["']([^"']+)["']`));
683
+ return match ? match[1] : '';
684
+ };
685
+
680
686
  const extractPrinciples = () => {
681
687
  const match = xmlContent.match(/<principles>([\s\S]*?)<\/principles>/);
682
688
  if (!match) return '';
@@ -689,11 +695,15 @@ function extractManifestData(xmlContent, metadata, agentPath, moduleName = 'cust
689
695
  return principles;
690
696
  };
691
697
 
698
+ // Prioritize XML extraction over metadata for agent persona info
699
+ const xmlTitle = extractAgentAttribute('title') || extractTag('name');
700
+ const xmlIcon = extractAgentAttribute('icon');
701
+
692
702
  return {
693
703
  name: metadata.id ? path.basename(metadata.id, '.md') : metadata.name.toLowerCase().replaceAll(/\s+/g, '-'),
694
- displayName: metadata.name || '',
695
- title: metadata.title || '',
696
- icon: metadata.icon || '',
704
+ displayName: xmlTitle || metadata.name || '',
705
+ title: xmlTitle || metadata.title || '',
706
+ icon: xmlIcon || metadata.icon || '',
697
707
  role: extractTag('role'),
698
708
  identity: extractTag('identity'),
699
709
  communicationStyle: extractTag('communication_style'),
@@ -29,24 +29,52 @@ class AgentAnalyzer {
29
29
  // Track the menu item
30
30
  profile.menuItems.push(item);
31
31
 
32
- // Check for each possible attribute
33
- if (item.workflow) {
34
- profile.usedAttributes.add('workflow');
35
- }
36
- if (item['validate-workflow']) {
37
- profile.usedAttributes.add('validate-workflow');
38
- }
39
- if (item.exec) {
40
- profile.usedAttributes.add('exec');
41
- }
42
- if (item.tmpl) {
43
- profile.usedAttributes.add('tmpl');
44
- }
45
- if (item.data) {
46
- profile.usedAttributes.add('data');
47
- }
48
- if (item.action) {
49
- profile.usedAttributes.add('action');
32
+ // Check for multi format items
33
+ if (item.multi && item.triggers) {
34
+ profile.usedAttributes.add('multi');
35
+
36
+ // Also check attributes in nested handlers
37
+ for (const triggerGroup of item.triggers) {
38
+ for (const [triggerName, execArray] of Object.entries(triggerGroup)) {
39
+ if (Array.isArray(execArray)) {
40
+ for (const exec of execArray) {
41
+ if (exec.route) {
42
+ // Check if route is a workflow or exec
43
+ if (exec.route.endsWith('.yaml') || exec.route.endsWith('.yml')) {
44
+ profile.usedAttributes.add('workflow');
45
+ } else {
46
+ profile.usedAttributes.add('exec');
47
+ }
48
+ }
49
+ if (exec.workflow) profile.usedAttributes.add('workflow');
50
+ if (exec.action) profile.usedAttributes.add('action');
51
+ if (exec.type && ['exec', 'action', 'workflow'].includes(exec.type)) {
52
+ profile.usedAttributes.add(exec.type);
53
+ }
54
+ }
55
+ }
56
+ }
57
+ }
58
+ } else {
59
+ // Check for each possible attribute in legacy items
60
+ if (item.workflow) {
61
+ profile.usedAttributes.add('workflow');
62
+ }
63
+ if (item['validate-workflow']) {
64
+ profile.usedAttributes.add('validate-workflow');
65
+ }
66
+ if (item.exec) {
67
+ profile.usedAttributes.add('exec');
68
+ }
69
+ if (item.tmpl) {
70
+ profile.usedAttributes.add('tmpl');
71
+ }
72
+ if (item.data) {
73
+ profile.usedAttributes.add('data');
74
+ }
75
+ if (item.action) {
76
+ profile.usedAttributes.add('action');
77
+ }
50
78
  }
51
79
  }
52
80
 
@@ -1,3 +1,23 @@
1
+ /**
2
+ * File: tools/cli/lib/ui.js
3
+ *
4
+ * BMAD Method - Business Model Agile Development Method
5
+ * Repository: https://github.com/paulpreibisch/BMAD-METHOD
6
+ *
7
+ * Copyright (c) 2025 Paul Preibisch
8
+ * Licensed under the Apache License, Version 2.0
9
+ *
10
+ * ---
11
+ *
12
+ * @fileoverview Interactive installation prompts and user input collection for BMAD CLI
13
+ * @context Guides users through installation configuration including core settings, modules, IDEs, and optional AgentVibes TTS
14
+ * @architecture Facade pattern - presents unified installation flow, delegates to Detector/ConfigCollector/IdeManager for specifics
15
+ * @dependencies inquirer (prompts), chalk (formatting), detector.js (existing installation detection)
16
+ * @entrypoints Called by install.js command via ui.promptInstall(), returns complete configuration object
17
+ * @patterns Progressive disclosure (prompts in order), early IDE selection (Windows compat), AgentVibes auto-detection
18
+ * @related installer.js (consumes config), AgentVibes#34 (TTS integration), promptAgentVibes()
19
+ */
20
+
1
21
  const chalk = require('chalk');
2
22
  const inquirer = require('inquirer');
3
23
  const path = require('node:path');
@@ -99,6 +119,9 @@ class UI {
99
119
  const moduleChoices = await this.getModuleChoices(installedModuleIds);
100
120
  const selectedModules = await this.selectModules(moduleChoices);
101
121
 
122
+ // Prompt for AgentVibes TTS integration
123
+ const agentVibesConfig = await this.promptAgentVibes(confirmedDirectory);
124
+
102
125
  // Collect IDE tool selection AFTER configuration prompts (fixes Windows/PowerShell hang)
103
126
  // This allows text-based prompts to complete before the checkbox prompt
104
127
  const toolSelection = await this.promptToolSelection(confirmedDirectory, selectedModules);
@@ -114,6 +137,8 @@ class UI {
114
137
  ides: toolSelection.ides,
115
138
  skipIde: toolSelection.skipIde,
116
139
  coreConfig: coreConfig, // Pass collected core config to installer
140
+ enableAgentVibes: agentVibesConfig.enabled, // AgentVibes TTS integration
141
+ agentVibesInstalled: agentVibesConfig.alreadyInstalled,
117
142
  };
118
143
  }
119
144
 
@@ -201,15 +226,51 @@ class UI {
201
226
 
202
227
  CLIUtils.displaySection('Tool Integration', 'Select AI coding assistants and IDEs to configure');
203
228
 
204
- const answers = await inquirer.prompt([
205
- {
206
- type: 'checkbox',
207
- name: 'ides',
208
- message: 'Select tools to configure:',
209
- choices: ideChoices,
210
- pageSize: 15,
211
- },
212
- ]);
229
+ let answers;
230
+ let userConfirmedNoTools = false;
231
+
232
+ // Loop until user selects at least one tool OR explicitly confirms no tools
233
+ while (!userConfirmedNoTools) {
234
+ answers = await inquirer.prompt([
235
+ {
236
+ type: 'checkbox',
237
+ name: 'ides',
238
+ message: 'Select tools to configure:',
239
+ choices: ideChoices,
240
+ pageSize: 15,
241
+ },
242
+ ]);
243
+
244
+ // If tools were selected, we're done
245
+ if (answers.ides && answers.ides.length > 0) {
246
+ break;
247
+ }
248
+
249
+ // Warn that no tools were selected - users often miss the spacebar requirement
250
+ console.log();
251
+ console.log(chalk.red.bold('⚠️ WARNING: No tools were selected!'));
252
+ console.log(chalk.red(' You must press SPACEBAR to select items, then ENTER to confirm.'));
253
+ console.log(chalk.red(' Simply highlighting an item does NOT select it.'));
254
+ console.log();
255
+
256
+ const { goBack } = await inquirer.prompt([
257
+ {
258
+ type: 'confirm',
259
+ name: 'goBack',
260
+ message: chalk.yellow('Would you like to go back and select at least one tool?'),
261
+ default: true,
262
+ },
263
+ ]);
264
+
265
+ if (goBack) {
266
+ // Re-display the section header before looping back
267
+ console.log();
268
+ CLIUtils.displaySection('Tool Integration', 'Select AI coding assistants and IDEs to configure');
269
+ } else {
270
+ // User explicitly chose to proceed without tools
271
+ userConfirmedNoTools = true;
272
+ }
273
+ }
213
274
 
214
275
  return {
215
276
  ides: answers.ides || [],
@@ -603,6 +664,140 @@ class UI {
603
664
  // Resolve to the absolute path relative to the current working directory
604
665
  return path.resolve(expanded);
605
666
  }
667
+
668
+ /**
669
+ * @function promptAgentVibes
670
+ * @intent Ask user if they want AgentVibes TTS integration during BMAD installation
671
+ * @why Enables optional voice features without forcing TTS on users who don't want it
672
+ * @param {string} projectDir - Absolute path to user's project directory
673
+ * @returns {Promise<Object>} Configuration object: { enabled: boolean, alreadyInstalled: boolean }
674
+ * @sideeffects None - pure user input collection, no files written
675
+ * @edgecases Shows warning if user enables TTS but AgentVibes not detected
676
+ * @calledby promptInstall() during installation flow, after core config, before IDE selection
677
+ * @calls checkAgentVibesInstalled(), inquirer.prompt(), chalk.green/yellow/dim()
678
+ *
679
+ * AI NOTE: This prompt is strategically positioned in installation flow:
680
+ * - AFTER core config (bmad_folder, user_name, etc)
681
+ * - BEFORE IDE selection (which can hang on Windows/PowerShell)
682
+ *
683
+ * Flow Logic:
684
+ * 1. Auto-detect if AgentVibes already installed (checks for hook files)
685
+ * 2. Show detection status to user (green checkmark or gray "not detected")
686
+ * 3. Prompt: "Enable AgentVibes TTS?" (defaults to true if detected)
687
+ * 4. If user says YES but AgentVibes NOT installed:
688
+ * → Show warning with installation link (graceful degradation)
689
+ * 5. Return config to promptInstall(), which passes to installer.install()
690
+ *
691
+ * State Flow:
692
+ * promptAgentVibes() → { enabled, alreadyInstalled }
693
+ * ↓
694
+ * promptInstall() → config.enableAgentVibes
695
+ * ↓
696
+ * installer.install() → this.enableAgentVibes
697
+ * ↓
698
+ * processTTSInjectionPoints() → injects OR strips markers
699
+ *
700
+ * RELATED:
701
+ * ========
702
+ * - Detection: checkAgentVibesInstalled() - looks for bmad-speak.sh and play-tts.sh
703
+ * - Processing: installer.js::processTTSInjectionPoints()
704
+ * - Markers: src/core/workflows/party-mode/instructions.md:101, src/modules/bmm/agents/*.md
705
+ * - GitHub Issue: paulpreibisch/AgentVibes#36
706
+ */
707
+ async promptAgentVibes(projectDir) {
708
+ CLIUtils.displaySection('🎤 Voice Features', 'Enable TTS for multi-agent conversations');
709
+
710
+ // Check if AgentVibes is already installed
711
+ const agentVibesInstalled = await this.checkAgentVibesInstalled(projectDir);
712
+
713
+ if (agentVibesInstalled) {
714
+ console.log(chalk.green(' ✓ AgentVibes detected'));
715
+ } else {
716
+ console.log(chalk.dim(' AgentVibes not detected'));
717
+ }
718
+
719
+ const answers = await inquirer.prompt([
720
+ {
721
+ type: 'confirm',
722
+ name: 'enableTts',
723
+ message: 'Enable Agents to Speak Out loud (powered by Agent Vibes? Claude Code only currently)',
724
+ default: false, // Default to yes - recommended for best experience
725
+ },
726
+ ]);
727
+
728
+ if (answers.enableTts && !agentVibesInstalled) {
729
+ console.log(chalk.yellow('\n ⚠️ AgentVibes not installed'));
730
+ console.log(chalk.dim(' Install AgentVibes separately to enable TTS:'));
731
+ console.log(chalk.dim(' https://github.com/paulpreibisch/AgentVibes\n'));
732
+ }
733
+
734
+ return {
735
+ enabled: answers.enableTts,
736
+ alreadyInstalled: agentVibesInstalled,
737
+ };
738
+ }
739
+
740
+ /**
741
+ * @function checkAgentVibesInstalled
742
+ * @intent Detect if AgentVibes TTS hooks are present in user's project
743
+ * @why Allows auto-enabling TTS and showing helpful installation guidance
744
+ * @param {string} projectDir - Absolute path to user's project directory
745
+ * @returns {Promise<boolean>} true if both required AgentVibes hooks exist, false otherwise
746
+ * @sideeffects None - read-only file existence checks
747
+ * @edgecases Returns false if either hook missing (both required for functional TTS)
748
+ * @calledby promptAgentVibes() to determine default value and show detection status
749
+ * @calls fs.pathExists() twice (bmad-speak.sh, play-tts.sh)
750
+ *
751
+ * AI NOTE: This checks for the MINIMUM viable AgentVibes installation.
752
+ *
753
+ * Required Files:
754
+ * ===============
755
+ * 1. .claude/hooks/bmad-speak.sh
756
+ * - Maps agent display names → agent IDs → voice profiles
757
+ * - Calls play-tts.sh with agent's assigned voice
758
+ * - Created by AgentVibes installer
759
+ *
760
+ * 2. .claude/hooks/play-tts.sh
761
+ * - Core TTS router (ElevenLabs or Piper)
762
+ * - Provider-agnostic interface
763
+ * - Required by bmad-speak.sh
764
+ *
765
+ * Why Both Required:
766
+ * ==================
767
+ * - bmad-speak.sh alone: No TTS backend
768
+ * - play-tts.sh alone: No BMAD agent voice mapping
769
+ * - Both together: Full party mode TTS integration
770
+ *
771
+ * Detection Strategy:
772
+ * ===================
773
+ * We use simple file existence (not version checks) because:
774
+ * - Fast and reliable
775
+ * - Works across all AgentVibes versions
776
+ * - User will discover version issues when TTS runs (fail-fast)
777
+ *
778
+ * PATTERN: Adding New Detection Criteria
779
+ * =======================================
780
+ * If future AgentVibes features require additional files:
781
+ * 1. Add new pathExists check to this function
782
+ * 2. Update documentation in promptAgentVibes()
783
+ * 3. Consider: should missing file prevent detection or just log warning?
784
+ *
785
+ * RELATED:
786
+ * ========
787
+ * - AgentVibes Installer: creates these hooks
788
+ * - bmad-speak.sh: calls play-tts.sh with agent voices
789
+ * - Party Mode: uses bmad-speak.sh for agent dialogue
790
+ */
791
+ async checkAgentVibesInstalled(projectDir) {
792
+ const fs = require('fs-extra');
793
+ const path = require('node:path');
794
+
795
+ // Check for AgentVibes hook files
796
+ const hookPath = path.join(projectDir, '.claude', 'hooks', 'bmad-speak.sh');
797
+ const playTtsPath = path.join(projectDir, '.claude', 'hooks', 'play-tts.sh');
798
+
799
+ return (await fs.pathExists(hookPath)) && (await fs.pathExists(playTtsPath));
800
+ }
606
801
  }
607
802
 
608
803
  module.exports = { UI };