agentvibes 2.13.7 → 2.13.9

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 (430) hide show
  1. package/.claude/commands/agent-vibes/bmad.md +16 -14
  2. package/.claude/hooks/play-tts-elevenlabs.sh +3 -1
  3. package/.claude/hooks/provider-manager.sh +112 -23
  4. package/.claude/personalities/rapper.md +1 -1
  5. package/README.md +7 -8
  6. package/RELEASE_NOTES.md +145 -255
  7. package/mcp-server/install-deps.js +7 -6
  8. package/mcp-server/server.py +4 -2
  9. package/package.json +1 -1
  10. package/src/commands/bmad-voices.js +3 -15
  11. package/src/commands/install-mcp.js +15 -9
  12. package/src/installer.js +19 -29
  13. package/test/unit/provider-manager.bats +13 -9
  14. package/.bmad/_cfg/agent-manifest.csv +0 -11
  15. package/.bmad/_cfg/agent-voice-map.csv +0 -11
  16. package/.bmad/_cfg/agents/bmm-analyst.customize.yaml +0 -42
  17. package/.bmad/_cfg/agents/bmm-architect.customize.yaml +0 -42
  18. package/.bmad/_cfg/agents/bmm-dev.customize.yaml +0 -42
  19. package/.bmad/_cfg/agents/bmm-frame-expert.customize.yaml +0 -42
  20. package/.bmad/_cfg/agents/bmm-pm.customize.yaml +0 -42
  21. package/.bmad/_cfg/agents/bmm-sm.customize.yaml +0 -42
  22. package/.bmad/_cfg/agents/bmm-tea.customize.yaml +0 -42
  23. package/.bmad/_cfg/agents/bmm-tech-writer.customize.yaml +0 -42
  24. package/.bmad/_cfg/agents/bmm-ux-designer.customize.yaml +0 -42
  25. package/.bmad/_cfg/agents/core-bmad-master.customize.yaml +0 -42
  26. package/.bmad/_cfg/files-manifest.csv +0 -243
  27. package/.bmad/_cfg/ides/claude-code.yaml +0 -6
  28. package/.bmad/_cfg/manifest.yaml +0 -9
  29. package/.bmad/_cfg/task-manifest.csv +0 -5
  30. package/.bmad/_cfg/tool-manifest.csv +0 -2
  31. package/.bmad/_cfg/workflow-manifest.csv +0 -38
  32. package/.bmad/bmm/README.md +0 -128
  33. package/.bmad/bmm/agents/analyst.md +0 -79
  34. package/.bmad/bmm/agents/analyst.md.backup-pre-tts +0 -75
  35. package/.bmad/bmm/agents/architect.md +0 -80
  36. package/.bmad/bmm/agents/dev.md +0 -70
  37. package/.bmad/bmm/agents/frame-expert.md +0 -72
  38. package/.bmad/bmm/agents/pm.md +0 -84
  39. package/.bmad/bmm/agents/sm.md +0 -93
  40. package/.bmad/bmm/agents/tea.md +0 -80
  41. package/.bmad/bmm/agents/tech-writer.md +0 -84
  42. package/.bmad/bmm/agents/ux-designer.md +0 -79
  43. package/.bmad/bmm/config.yaml +0 -17
  44. package/.bmad/bmm/docs/README.md +0 -236
  45. package/.bmad/bmm/docs/agents-guide.md +0 -1058
  46. package/.bmad/bmm/docs/brownfield-guide.md +0 -762
  47. package/.bmad/bmm/docs/enterprise-agentic-development.md +0 -686
  48. package/.bmad/bmm/docs/faq.md +0 -588
  49. package/.bmad/bmm/docs/glossary.md +0 -320
  50. package/.bmad/bmm/docs/party-mode.md +0 -224
  51. package/.bmad/bmm/docs/quick-spec-flow.md +0 -652
  52. package/.bmad/bmm/docs/quick-start.md +0 -376
  53. package/.bmad/bmm/docs/scale-adaptive-system.md +0 -612
  54. package/.bmad/bmm/docs/test-architecture.md +0 -396
  55. package/.bmad/bmm/docs/workflow-architecture-reference.md +0 -366
  56. package/.bmad/bmm/docs/workflow-document-project-reference.md +0 -489
  57. package/.bmad/bmm/docs/workflows-analysis.md +0 -370
  58. package/.bmad/bmm/docs/workflows-implementation.md +0 -286
  59. package/.bmad/bmm/docs/workflows-planning.md +0 -612
  60. package/.bmad/bmm/docs/workflows-solutioning.md +0 -554
  61. package/.bmad/bmm/teams/default-party.csv +0 -20
  62. package/.bmad/bmm/teams/team-fullstack.yaml +0 -13
  63. package/.bmad/bmm/testarch/knowledge/ci-burn-in.md +0 -675
  64. package/.bmad/bmm/testarch/knowledge/component-tdd.md +0 -486
  65. package/.bmad/bmm/testarch/knowledge/contract-testing.md +0 -957
  66. package/.bmad/bmm/testarch/knowledge/data-factories.md +0 -500
  67. package/.bmad/bmm/testarch/knowledge/email-auth.md +0 -721
  68. package/.bmad/bmm/testarch/knowledge/error-handling.md +0 -725
  69. package/.bmad/bmm/testarch/knowledge/feature-flags.md +0 -750
  70. package/.bmad/bmm/testarch/knowledge/fixture-architecture.md +0 -401
  71. package/.bmad/bmm/testarch/knowledge/network-first.md +0 -486
  72. package/.bmad/bmm/testarch/knowledge/nfr-criteria.md +0 -670
  73. package/.bmad/bmm/testarch/knowledge/playwright-config.md +0 -730
  74. package/.bmad/bmm/testarch/knowledge/probability-impact.md +0 -601
  75. package/.bmad/bmm/testarch/knowledge/risk-governance.md +0 -615
  76. package/.bmad/bmm/testarch/knowledge/selective-testing.md +0 -732
  77. package/.bmad/bmm/testarch/knowledge/selector-resilience.md +0 -527
  78. package/.bmad/bmm/testarch/knowledge/test-healing-patterns.md +0 -644
  79. package/.bmad/bmm/testarch/knowledge/test-levels-framework.md +0 -473
  80. package/.bmad/bmm/testarch/knowledge/test-priorities-matrix.md +0 -373
  81. package/.bmad/bmm/testarch/knowledge/test-quality.md +0 -664
  82. package/.bmad/bmm/testarch/knowledge/timing-debugging.md +0 -372
  83. package/.bmad/bmm/testarch/knowledge/visual-debugging.md +0 -524
  84. package/.bmad/bmm/testarch/tea-index.csv +0 -22
  85. package/.bmad/bmm/workflows/1-analysis/brainstorm-project/instructions.md +0 -112
  86. package/.bmad/bmm/workflows/1-analysis/brainstorm-project/project-context.md +0 -25
  87. package/.bmad/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml +0 -26
  88. package/.bmad/bmm/workflows/1-analysis/domain-research/instructions.md +0 -425
  89. package/.bmad/bmm/workflows/1-analysis/domain-research/template.md +0 -180
  90. package/.bmad/bmm/workflows/1-analysis/domain-research/workflow.yaml +0 -28
  91. package/.bmad/bmm/workflows/1-analysis/product-brief/checklist.md +0 -115
  92. package/.bmad/bmm/workflows/1-analysis/product-brief/instructions.md +0 -524
  93. package/.bmad/bmm/workflows/1-analysis/product-brief/template.md +0 -181
  94. package/.bmad/bmm/workflows/1-analysis/product-brief/workflow.yaml +0 -45
  95. package/.bmad/bmm/workflows/1-analysis/research/checklist-deep-prompt.md +0 -144
  96. package/.bmad/bmm/workflows/1-analysis/research/checklist-technical.md +0 -249
  97. package/.bmad/bmm/workflows/1-analysis/research/checklist.md +0 -299
  98. package/.bmad/bmm/workflows/1-analysis/research/claude-code/injections.yaml +0 -114
  99. package/.bmad/bmm/workflows/1-analysis/research/instructions-deep-prompt.md +0 -438
  100. package/.bmad/bmm/workflows/1-analysis/research/instructions-market.md +0 -675
  101. package/.bmad/bmm/workflows/1-analysis/research/instructions-router.md +0 -134
  102. package/.bmad/bmm/workflows/1-analysis/research/instructions-technical.md +0 -534
  103. package/.bmad/bmm/workflows/1-analysis/research/template-deep-prompt.md +0 -94
  104. package/.bmad/bmm/workflows/1-analysis/research/template-market.md +0 -347
  105. package/.bmad/bmm/workflows/1-analysis/research/template-technical.md +0 -245
  106. package/.bmad/bmm/workflows/1-analysis/research/workflow.yaml +0 -44
  107. package/.bmad/bmm/workflows/2-plan-workflows/create-epics-and-stories/epics-template.md +0 -80
  108. package/.bmad/bmm/workflows/2-plan-workflows/create-epics-and-stories/instructions.md +0 -616
  109. package/.bmad/bmm/workflows/2-plan-workflows/create-epics-and-stories/workflow.yaml +0 -53
  110. package/.bmad/bmm/workflows/2-plan-workflows/create-ux-design/checklist.md +0 -310
  111. package/.bmad/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md +0 -1308
  112. package/.bmad/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +0 -145
  113. package/.bmad/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +0 -61
  114. package/.bmad/bmm/workflows/2-plan-workflows/prd/checklist.md +0 -346
  115. package/.bmad/bmm/workflows/2-plan-workflows/prd/domain-complexity.csv +0 -13
  116. package/.bmad/bmm/workflows/2-plan-workflows/prd/instructions.md +0 -703
  117. package/.bmad/bmm/workflows/2-plan-workflows/prd/prd-template.md +0 -204
  118. package/.bmad/bmm/workflows/2-plan-workflows/prd/project-types.csv +0 -11
  119. package/.bmad/bmm/workflows/2-plan-workflows/prd/workflow.yaml +0 -52
  120. package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/checklist.md +0 -217
  121. package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/epics-template.md +0 -74
  122. package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/instructions-generate-stories.md +0 -436
  123. package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/instructions.md +0 -980
  124. package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/tech-spec-template.md +0 -181
  125. package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/user-story-template.md +0 -90
  126. package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +0 -58
  127. package/.bmad/bmm/workflows/3-solutioning/architecture/architecture-patterns.yaml +0 -321
  128. package/.bmad/bmm/workflows/3-solutioning/architecture/architecture-template.md +0 -103
  129. package/.bmad/bmm/workflows/3-solutioning/architecture/checklist.md +0 -240
  130. package/.bmad/bmm/workflows/3-solutioning/architecture/decision-catalog.yaml +0 -222
  131. package/.bmad/bmm/workflows/3-solutioning/architecture/instructions.md +0 -768
  132. package/.bmad/bmm/workflows/3-solutioning/architecture/pattern-categories.csv +0 -13
  133. package/.bmad/bmm/workflows/3-solutioning/architecture/workflow.yaml +0 -55
  134. package/.bmad/bmm/workflows/3-solutioning/implementation-readiness/checklist.md +0 -169
  135. package/.bmad/bmm/workflows/3-solutioning/implementation-readiness/instructions.md +0 -332
  136. package/.bmad/bmm/workflows/3-solutioning/implementation-readiness/template.md +0 -146
  137. package/.bmad/bmm/workflows/3-solutioning/implementation-readiness/workflow.yaml +0 -62
  138. package/.bmad/bmm/workflows/4-implementation/code-review/backlog_template.md +0 -12
  139. package/.bmad/bmm/workflows/4-implementation/code-review/checklist.md +0 -22
  140. package/.bmad/bmm/workflows/4-implementation/code-review/instructions.md +0 -398
  141. package/.bmad/bmm/workflows/4-implementation/code-review/workflow.yaml +0 -60
  142. package/.bmad/bmm/workflows/4-implementation/correct-course/checklist.md +0 -279
  143. package/.bmad/bmm/workflows/4-implementation/correct-course/instructions.md +0 -206
  144. package/.bmad/bmm/workflows/4-implementation/correct-course/workflow.yaml +0 -56
  145. package/.bmad/bmm/workflows/4-implementation/create-story/checklist.md +0 -240
  146. package/.bmad/bmm/workflows/4-implementation/create-story/instructions.md +0 -256
  147. package/.bmad/bmm/workflows/4-implementation/create-story/template.md +0 -51
  148. package/.bmad/bmm/workflows/4-implementation/create-story/workflow.yaml +0 -71
  149. package/.bmad/bmm/workflows/4-implementation/dev-story/checklist.md +0 -38
  150. package/.bmad/bmm/workflows/4-implementation/dev-story/instructions.md +0 -267
  151. package/.bmad/bmm/workflows/4-implementation/dev-story/workflow.yaml +0 -56
  152. package/.bmad/bmm/workflows/4-implementation/epic-tech-context/checklist.md +0 -17
  153. package/.bmad/bmm/workflows/4-implementation/epic-tech-context/instructions.md +0 -164
  154. package/.bmad/bmm/workflows/4-implementation/epic-tech-context/template.md +0 -76
  155. package/.bmad/bmm/workflows/4-implementation/epic-tech-context/workflow.yaml +0 -57
  156. package/.bmad/bmm/workflows/4-implementation/retrospective/instructions.md +0 -1443
  157. package/.bmad/bmm/workflows/4-implementation/retrospective/workflow.yaml +0 -56
  158. package/.bmad/bmm/workflows/4-implementation/sprint-planning/checklist.md +0 -33
  159. package/.bmad/bmm/workflows/4-implementation/sprint-planning/instructions.md +0 -234
  160. package/.bmad/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +0 -55
  161. package/.bmad/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +0 -49
  162. package/.bmad/bmm/workflows/4-implementation/story-context/checklist.md +0 -16
  163. package/.bmad/bmm/workflows/4-implementation/story-context/context-template.xml +0 -34
  164. package/.bmad/bmm/workflows/4-implementation/story-context/instructions.md +0 -209
  165. package/.bmad/bmm/workflows/4-implementation/story-context/workflow.yaml +0 -61
  166. package/.bmad/bmm/workflows/4-implementation/story-done/instructions.md +0 -111
  167. package/.bmad/bmm/workflows/4-implementation/story-done/workflow.yaml +0 -26
  168. package/.bmad/bmm/workflows/4-implementation/story-ready/instructions.md +0 -117
  169. package/.bmad/bmm/workflows/4-implementation/story-ready/workflow.yaml +0 -23
  170. package/.bmad/bmm/workflows/document-project/checklist.md +0 -245
  171. package/.bmad/bmm/workflows/document-project/documentation-requirements.csv +0 -12
  172. package/.bmad/bmm/workflows/document-project/instructions.md +0 -222
  173. package/.bmad/bmm/workflows/document-project/templates/deep-dive-template.md +0 -345
  174. package/.bmad/bmm/workflows/document-project/templates/index-template.md +0 -169
  175. package/.bmad/bmm/workflows/document-project/templates/project-overview-template.md +0 -103
  176. package/.bmad/bmm/workflows/document-project/templates/project-scan-report-schema.json +0 -160
  177. package/.bmad/bmm/workflows/document-project/templates/source-tree-template.md +0 -135
  178. package/.bmad/bmm/workflows/document-project/workflow.yaml +0 -29
  179. package/.bmad/bmm/workflows/document-project/workflows/deep-dive-instructions.md +0 -298
  180. package/.bmad/bmm/workflows/document-project/workflows/deep-dive.yaml +0 -31
  181. package/.bmad/bmm/workflows/document-project/workflows/full-scan-instructions.md +0 -1106
  182. package/.bmad/bmm/workflows/document-project/workflows/full-scan.yaml +0 -31
  183. package/.bmad/bmm/workflows/frame-expert/_shared/excalidraw-helpers.md +0 -127
  184. package/.bmad/bmm/workflows/frame-expert/_shared/excalidraw-library.json +0 -90
  185. package/.bmad/bmm/workflows/frame-expert/_shared/excalidraw-templates.yaml +0 -127
  186. package/.bmad/bmm/workflows/frame-expert/_shared/validate-json-instructions.md +0 -79
  187. package/.bmad/bmm/workflows/frame-expert/create-dataflow/checklist.md +0 -39
  188. package/.bmad/bmm/workflows/frame-expert/create-dataflow/instructions.md +0 -131
  189. package/.bmad/bmm/workflows/frame-expert/create-dataflow/workflow.yaml +0 -23
  190. package/.bmad/bmm/workflows/frame-expert/create-diagram/checklist.md +0 -43
  191. package/.bmad/bmm/workflows/frame-expert/create-diagram/instructions.md +0 -142
  192. package/.bmad/bmm/workflows/frame-expert/create-diagram/workflow.yaml +0 -24
  193. package/.bmad/bmm/workflows/frame-expert/create-flowchart/checklist.md +0 -49
  194. package/.bmad/bmm/workflows/frame-expert/create-flowchart/instructions.md +0 -242
  195. package/.bmad/bmm/workflows/frame-expert/create-flowchart/workflow.yaml +0 -27
  196. package/.bmad/bmm/workflows/frame-expert/create-wireframe/checklist.md +0 -38
  197. package/.bmad/bmm/workflows/frame-expert/create-wireframe/instructions.md +0 -133
  198. package/.bmad/bmm/workflows/frame-expert/create-wireframe/workflow.yaml +0 -23
  199. package/.bmad/bmm/workflows/techdoc/documentation-standards.md +0 -262
  200. package/.bmad/bmm/workflows/testarch/atdd/atdd-checklist-template.md +0 -363
  201. package/.bmad/bmm/workflows/testarch/atdd/checklist.md +0 -373
  202. package/.bmad/bmm/workflows/testarch/atdd/instructions.md +0 -785
  203. package/.bmad/bmm/workflows/testarch/atdd/workflow.yaml +0 -45
  204. package/.bmad/bmm/workflows/testarch/automate/checklist.md +0 -580
  205. package/.bmad/bmm/workflows/testarch/automate/instructions.md +0 -1303
  206. package/.bmad/bmm/workflows/testarch/automate/workflow.yaml +0 -52
  207. package/.bmad/bmm/workflows/testarch/ci/checklist.md +0 -246
  208. package/.bmad/bmm/workflows/testarch/ci/github-actions-template.yaml +0 -165
  209. package/.bmad/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +0 -128
  210. package/.bmad/bmm/workflows/testarch/ci/instructions.md +0 -517
  211. package/.bmad/bmm/workflows/testarch/ci/workflow.yaml +0 -45
  212. package/.bmad/bmm/workflows/testarch/framework/checklist.md +0 -321
  213. package/.bmad/bmm/workflows/testarch/framework/instructions.md +0 -455
  214. package/.bmad/bmm/workflows/testarch/framework/workflow.yaml +0 -47
  215. package/.bmad/bmm/workflows/testarch/nfr-assess/checklist.md +0 -405
  216. package/.bmad/bmm/workflows/testarch/nfr-assess/instructions.md +0 -722
  217. package/.bmad/bmm/workflows/testarch/nfr-assess/nfr-report-template.md +0 -443
  218. package/.bmad/bmm/workflows/testarch/nfr-assess/workflow.yaml +0 -47
  219. package/.bmad/bmm/workflows/testarch/test-design/checklist.md +0 -234
  220. package/.bmad/bmm/workflows/testarch/test-design/instructions.md +0 -782
  221. package/.bmad/bmm/workflows/testarch/test-design/test-design-template.md +0 -285
  222. package/.bmad/bmm/workflows/testarch/test-design/workflow.yaml +0 -48
  223. package/.bmad/bmm/workflows/testarch/test-review/checklist.md +0 -470
  224. package/.bmad/bmm/workflows/testarch/test-review/instructions.md +0 -608
  225. package/.bmad/bmm/workflows/testarch/test-review/test-review-template.md +0 -388
  226. package/.bmad/bmm/workflows/testarch/test-review/workflow.yaml +0 -46
  227. package/.bmad/bmm/workflows/testarch/trace/checklist.md +0 -654
  228. package/.bmad/bmm/workflows/testarch/trace/instructions.md +0 -1045
  229. package/.bmad/bmm/workflows/testarch/trace/trace-template.md +0 -673
  230. package/.bmad/bmm/workflows/testarch/trace/workflow.yaml +0 -55
  231. package/.bmad/bmm/workflows/workflow-status/init/instructions.md +0 -334
  232. package/.bmad/bmm/workflows/workflow-status/init/workflow.yaml +0 -28
  233. package/.bmad/bmm/workflows/workflow-status/instructions.md +0 -388
  234. package/.bmad/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +0 -138
  235. package/.bmad/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +0 -126
  236. package/.bmad/bmm/workflows/workflow-status/paths/game-design.yaml +0 -52
  237. package/.bmad/bmm/workflows/workflow-status/paths/method-brownfield.yaml +0 -122
  238. package/.bmad/bmm/workflows/workflow-status/paths/method-greenfield.yaml +0 -113
  239. package/.bmad/bmm/workflows/workflow-status/paths/quick-flow-brownfield.yaml +0 -58
  240. package/.bmad/bmm/workflows/workflow-status/paths/quick-flow-greenfield.yaml +0 -47
  241. package/.bmad/bmm/workflows/workflow-status/project-levels.yaml +0 -59
  242. package/.bmad/bmm/workflows/workflow-status/workflow-status-template.yaml +0 -24
  243. package/.bmad/bmm/workflows/workflow-status/workflow.yaml +0 -28
  244. package/.bmad/core/agents/bmad-master.md +0 -72
  245. package/.bmad/core/agents/bmad-web-orchestrator.agent.xml +0 -113
  246. package/.bmad/core/config.yaml +0 -11
  247. package/.bmad/core/tasks/adv-elicit-methods.csv +0 -39
  248. package/.bmad/core/tasks/advanced-elicitation-methods.csv +0 -21
  249. package/.bmad/core/tasks/advanced-elicitation.xml +0 -106
  250. package/.bmad/core/tasks/index-docs.xml +0 -65
  251. package/.bmad/core/tasks/validate-workflow.xml +0 -89
  252. package/.bmad/core/tasks/workflow.xml +0 -270
  253. package/.bmad/core/tools/shard-doc.xml +0 -109
  254. package/.bmad/core/workflows/brainstorming/README.md +0 -261
  255. package/.bmad/core/workflows/brainstorming/brain-methods.csv +0 -36
  256. package/.bmad/core/workflows/brainstorming/instructions.md +0 -315
  257. package/.bmad/core/workflows/brainstorming/template.md +0 -106
  258. package/.bmad/core/workflows/brainstorming/workflow.yaml +0 -38
  259. package/.bmad/core/workflows/party-mode/instructions.md +0 -203
  260. package/.bmad/core/workflows/party-mode/workflow.yaml +0 -28
  261. package/.bmad/docs/claude-code-instructions.md +0 -25
  262. package/.claude/commands/BMad/analyst.md +0 -88
  263. package/.claude/commands/BMad/architect.md +0 -89
  264. package/.claude/commands/BMad/bmad-master.md +0 -114
  265. package/.claude/commands/BMad/bmad-orchestrator.md +0 -151
  266. package/.claude/commands/BMad/dev.md +0 -85
  267. package/.claude/commands/BMad/pm.md +0 -88
  268. package/.claude/commands/BMad/po.md +0 -83
  269. package/.claude/commands/BMad/qa.md +0 -91
  270. package/.claude/commands/BMad/sm.md +0 -69
  271. package/.claude/commands/BMad/tasks/advanced-elicitation.md +0 -123
  272. package/.claude/commands/BMad/tasks/apply-qa-fixes.md +0 -154
  273. package/.claude/commands/BMad/tasks/brownfield-create-epic.md +0 -166
  274. package/.claude/commands/BMad/tasks/brownfield-create-story.md +0 -153
  275. package/.claude/commands/BMad/tasks/correct-course.md +0 -76
  276. package/.claude/commands/BMad/tasks/create-brownfield-story.md +0 -318
  277. package/.claude/commands/BMad/tasks/create-deep-research-prompt.md +0 -284
  278. package/.claude/commands/BMad/tasks/create-doc.md +0 -107
  279. package/.claude/commands/BMad/tasks/create-next-story.md +0 -118
  280. package/.claude/commands/BMad/tasks/document-project.md +0 -349
  281. package/.claude/commands/BMad/tasks/execute-checklist.md +0 -92
  282. package/.claude/commands/BMad/tasks/facilitate-brainstorming-session.md +0 -142
  283. package/.claude/commands/BMad/tasks/generate-ai-frontend-prompt.md +0 -57
  284. package/.claude/commands/BMad/tasks/index-docs.md +0 -179
  285. package/.claude/commands/BMad/tasks/kb-mode-interaction.md +0 -81
  286. package/.claude/commands/BMad/tasks/nfr-assess.md +0 -349
  287. package/.claude/commands/BMad/tasks/qa-gate.md +0 -167
  288. package/.claude/commands/BMad/tasks/review-story.md +0 -320
  289. package/.claude/commands/BMad/tasks/risk-profile.md +0 -359
  290. package/.claude/commands/BMad/tasks/shard-doc.md +0 -191
  291. package/.claude/commands/BMad/tasks/test-design.md +0 -180
  292. package/.claude/commands/BMad/tasks/trace-requirements.md +0 -270
  293. package/.claude/commands/BMad/tasks/validate-next-story.md +0 -140
  294. package/.claude/commands/BMad/ux-expert.md +0 -73
  295. package/.claude/commands/bmad/bmm/agents/analyst.md +0 -14
  296. package/.claude/commands/bmad/bmm/agents/architect.md +0 -14
  297. package/.claude/commands/bmad/bmm/agents/dev.md +0 -14
  298. package/.claude/commands/bmad/bmm/agents/frame-expert.md +0 -14
  299. package/.claude/commands/bmad/bmm/agents/pm.md +0 -14
  300. package/.claude/commands/bmad/bmm/agents/sm.md +0 -14
  301. package/.claude/commands/bmad/bmm/agents/tea.md +0 -14
  302. package/.claude/commands/bmad/bmm/agents/tech-writer.md +0 -14
  303. package/.claude/commands/bmad/bmm/agents/ux-designer.md +0 -14
  304. package/.claude/commands/bmad/bmm/workflows/architecture.md +0 -13
  305. package/.claude/commands/bmad/bmm/workflows/brainstorm-project.md +0 -13
  306. package/.claude/commands/bmad/bmm/workflows/code-review.md +0 -13
  307. package/.claude/commands/bmad/bmm/workflows/correct-course.md +0 -13
  308. package/.claude/commands/bmad/bmm/workflows/create-dataflow.md +0 -13
  309. package/.claude/commands/bmad/bmm/workflows/create-diagram.md +0 -13
  310. package/.claude/commands/bmad/bmm/workflows/create-epics-and-stories.md +0 -13
  311. package/.claude/commands/bmad/bmm/workflows/create-flowchart.md +0 -13
  312. package/.claude/commands/bmad/bmm/workflows/create-story.md +0 -13
  313. package/.claude/commands/bmad/bmm/workflows/create-ux-design.md +0 -13
  314. package/.claude/commands/bmad/bmm/workflows/create-wireframe.md +0 -13
  315. package/.claude/commands/bmad/bmm/workflows/dev-story.md +0 -13
  316. package/.claude/commands/bmad/bmm/workflows/document-project.md +0 -13
  317. package/.claude/commands/bmad/bmm/workflows/domain-research.md +0 -13
  318. package/.claude/commands/bmad/bmm/workflows/epic-tech-context.md +0 -13
  319. package/.claude/commands/bmad/bmm/workflows/implementation-readiness.md +0 -13
  320. package/.claude/commands/bmad/bmm/workflows/prd.md +0 -13
  321. package/.claude/commands/bmad/bmm/workflows/product-brief.md +0 -13
  322. package/.claude/commands/bmad/bmm/workflows/research.md +0 -13
  323. package/.claude/commands/bmad/bmm/workflows/retrospective.md +0 -13
  324. package/.claude/commands/bmad/bmm/workflows/sprint-planning.md +0 -13
  325. package/.claude/commands/bmad/bmm/workflows/story-context.md +0 -13
  326. package/.claude/commands/bmad/bmm/workflows/story-done.md +0 -13
  327. package/.claude/commands/bmad/bmm/workflows/story-ready.md +0 -13
  328. package/.claude/commands/bmad/bmm/workflows/tech-spec.md +0 -13
  329. package/.claude/commands/bmad/bmm/workflows/workflow-init.md +0 -13
  330. package/.claude/commands/bmad/bmm/workflows/workflow-status.md +0 -13
  331. package/.claude/commands/bmad/core/agents/bmad-master.md +0 -14
  332. package/.claude/commands/bmad/core/tasks/advanced-elicitation.md +0 -9
  333. package/.claude/commands/bmad/core/tasks/index-docs.md +0 -9
  334. package/.claude/commands/bmad/core/tools/shard-doc.md +0 -9
  335. package/.claude/commands/bmad/core/workflows/brainstorming.md +0 -13
  336. package/.claude/commands/bmad/core/workflows/party-mode.md +0 -13
  337. package/.claude/github-star-reminder.txt +0 -1
  338. package/.claude/hooks/bmad-party-manager.sh +0 -225
  339. package/.claude/hooks/stop.sh +0 -221
  340. package/.claude/piper-voices-dir.txt +0 -1
  341. package/.mcp.json +0 -88
  342. package/RELEASE_NOTES_v2.4.0_DRAFT.md +0 -116
  343. package/RELEASE_NOTES_v2.4.1_DRAFT.md +0 -61
  344. package/docs/2025-11-15_15-14-33.snagx +0 -0
  345. package/docs/Screenshot 2025-11-15 151325.png +0 -0
  346. package/docs/Screenshot 2025-11-15 151432.png +0 -0
  347. package/docs/macos-piper-issue.md +0 -172
  348. package/docs/stargazer-cms-prd.md +0 -1918
  349. package/docs/whatsapp-plugin-github-issue.md +0 -393
  350. package/docs/whatsapp-tts-plugin-feasibility.md +0 -418
  351. package/docs/whatsapp-tts-standalone-plugin.md +0 -628
  352. package/github-profile-draft.md +0 -57
  353. package/linkedin/vibe-coding-and-pulseaudio.md +0 -121
  354. package/mcp-server/agentvibes.db +0 -0
  355. package/scripts/audio-tunnel.config +0 -17
  356. package/v4-backup/.bmad-core/agent-teams/team-all.yaml +0 -15
  357. package/v4-backup/.bmad-core/agent-teams/team-fullstack.yaml +0 -19
  358. package/v4-backup/.bmad-core/agent-teams/team-ide-minimal.yaml +0 -11
  359. package/v4-backup/.bmad-core/agent-teams/team-no-ui.yaml +0 -14
  360. package/v4-backup/.bmad-core/agents/analyst.md +0 -84
  361. package/v4-backup/.bmad-core/agents/architect.md +0 -85
  362. package/v4-backup/.bmad-core/agents/bmad-master.md +0 -110
  363. package/v4-backup/.bmad-core/agents/bmad-orchestrator.md +0 -147
  364. package/v4-backup/.bmad-core/agents/dev.md +0 -81
  365. package/v4-backup/.bmad-core/agents/pm.md +0 -84
  366. package/v4-backup/.bmad-core/agents/po.md +0 -79
  367. package/v4-backup/.bmad-core/agents/qa.md +0 -87
  368. package/v4-backup/.bmad-core/agents/sm.md +0 -65
  369. package/v4-backup/.bmad-core/agents/ux-expert.md +0 -69
  370. package/v4-backup/.bmad-core/checklists/architect-checklist.md +0 -440
  371. package/v4-backup/.bmad-core/checklists/change-checklist.md +0 -184
  372. package/v4-backup/.bmad-core/checklists/pm-checklist.md +0 -372
  373. package/v4-backup/.bmad-core/checklists/po-master-checklist.md +0 -434
  374. package/v4-backup/.bmad-core/checklists/story-dod-checklist.md +0 -96
  375. package/v4-backup/.bmad-core/checklists/story-draft-checklist.md +0 -155
  376. package/v4-backup/.bmad-core/core-config.yaml +0 -22
  377. package/v4-backup/.bmad-core/data/bmad-kb.md +0 -809
  378. package/v4-backup/.bmad-core/data/brainstorming-techniques.md +0 -38
  379. package/v4-backup/.bmad-core/data/elicitation-methods.md +0 -156
  380. package/v4-backup/.bmad-core/data/technical-preferences.md +0 -5
  381. package/v4-backup/.bmad-core/data/test-levels-framework.md +0 -148
  382. package/v4-backup/.bmad-core/data/test-priorities-matrix.md +0 -174
  383. package/v4-backup/.bmad-core/enhanced-ide-development-workflow.md +0 -248
  384. package/v4-backup/.bmad-core/install-manifest.yaml +0 -230
  385. package/v4-backup/.bmad-core/tasks/advanced-elicitation.md +0 -119
  386. package/v4-backup/.bmad-core/tasks/apply-qa-fixes.md +0 -150
  387. package/v4-backup/.bmad-core/tasks/brownfield-create-epic.md +0 -162
  388. package/v4-backup/.bmad-core/tasks/brownfield-create-story.md +0 -149
  389. package/v4-backup/.bmad-core/tasks/correct-course.md +0 -72
  390. package/v4-backup/.bmad-core/tasks/create-brownfield-story.md +0 -314
  391. package/v4-backup/.bmad-core/tasks/create-deep-research-prompt.md +0 -280
  392. package/v4-backup/.bmad-core/tasks/create-doc.md +0 -103
  393. package/v4-backup/.bmad-core/tasks/create-next-story.md +0 -114
  394. package/v4-backup/.bmad-core/tasks/document-project.md +0 -345
  395. package/v4-backup/.bmad-core/tasks/execute-checklist.md +0 -88
  396. package/v4-backup/.bmad-core/tasks/facilitate-brainstorming-session.md +0 -138
  397. package/v4-backup/.bmad-core/tasks/generate-ai-frontend-prompt.md +0 -53
  398. package/v4-backup/.bmad-core/tasks/index-docs.md +0 -175
  399. package/v4-backup/.bmad-core/tasks/kb-mode-interaction.md +0 -77
  400. package/v4-backup/.bmad-core/tasks/nfr-assess.md +0 -345
  401. package/v4-backup/.bmad-core/tasks/qa-gate.md +0 -163
  402. package/v4-backup/.bmad-core/tasks/review-story.md +0 -316
  403. package/v4-backup/.bmad-core/tasks/risk-profile.md +0 -355
  404. package/v4-backup/.bmad-core/tasks/shard-doc.md +0 -187
  405. package/v4-backup/.bmad-core/tasks/test-design.md +0 -176
  406. package/v4-backup/.bmad-core/tasks/trace-requirements.md +0 -266
  407. package/v4-backup/.bmad-core/tasks/validate-next-story.md +0 -136
  408. package/v4-backup/.bmad-core/templates/architecture-tmpl.yaml +0 -651
  409. package/v4-backup/.bmad-core/templates/brainstorming-output-tmpl.yaml +0 -156
  410. package/v4-backup/.bmad-core/templates/brownfield-architecture-tmpl.yaml +0 -477
  411. package/v4-backup/.bmad-core/templates/brownfield-prd-tmpl.yaml +0 -281
  412. package/v4-backup/.bmad-core/templates/competitor-analysis-tmpl.yaml +0 -307
  413. package/v4-backup/.bmad-core/templates/front-end-architecture-tmpl.yaml +0 -219
  414. package/v4-backup/.bmad-core/templates/front-end-spec-tmpl.yaml +0 -350
  415. package/v4-backup/.bmad-core/templates/fullstack-architecture-tmpl.yaml +0 -824
  416. package/v4-backup/.bmad-core/templates/market-research-tmpl.yaml +0 -253
  417. package/v4-backup/.bmad-core/templates/prd-tmpl.yaml +0 -203
  418. package/v4-backup/.bmad-core/templates/project-brief-tmpl.yaml +0 -222
  419. package/v4-backup/.bmad-core/templates/qa-gate-tmpl.yaml +0 -103
  420. package/v4-backup/.bmad-core/templates/story-tmpl.yaml +0 -138
  421. package/v4-backup/.bmad-core/user-guide.md +0 -577
  422. package/v4-backup/.bmad-core/utils/bmad-doc-template.md +0 -327
  423. package/v4-backup/.bmad-core/utils/workflow-management.md +0 -71
  424. package/v4-backup/.bmad-core/workflows/brownfield-fullstack.yaml +0 -298
  425. package/v4-backup/.bmad-core/workflows/brownfield-service.yaml +0 -188
  426. package/v4-backup/.bmad-core/workflows/brownfield-ui.yaml +0 -198
  427. package/v4-backup/.bmad-core/workflows/greenfield-fullstack.yaml +0 -241
  428. package/v4-backup/.bmad-core/workflows/greenfield-service.yaml +0 -207
  429. package/v4-backup/.bmad-core/workflows/greenfield-ui.yaml +0 -236
  430. package/v4-backup/.bmad-core/working-in-the-brownfield.md +0 -606
@@ -5,7 +5,7 @@
5
5
  * Runs after npm install to ensure Python mcp package is installed
6
6
  */
7
7
 
8
- import { execSync } from 'child_process';
8
+ import { execFileSync } from 'child_process';
9
9
  import { platform } from 'os';
10
10
 
11
11
  const isWindows = platform() === 'win32';
@@ -23,7 +23,8 @@ function checkPython() {
23
23
  }
24
24
 
25
25
  try {
26
- const version = execSync(`${cmd} --version`, { encoding: 'utf8', stdio: 'pipe' });
26
+ // Security: Use execFileSync with array args to prevent command injection
27
+ const version = execFileSync(cmd, ['--version'], { encoding: 'utf8', stdio: 'pipe' });
27
28
  console.log(`✅ Found ${cmd}: ${version.trim()}`);
28
29
  return cmd;
29
30
  } catch (error) {
@@ -44,7 +45,8 @@ function checkMcpInstalled(pythonCmd) {
44
45
  }
45
46
 
46
47
  try {
47
- execSync(`${pythonCmd} -c "import mcp"`, { stdio: 'pipe' });
48
+ // Security: Use execFileSync with array args to prevent command injection
49
+ execFileSync(pythonCmd, ['-c', 'import mcp'], { stdio: 'pipe' });
48
50
  return true;
49
51
  } catch (error) {
50
52
  return false;
@@ -62,9 +64,8 @@ function installMcp(pythonCmd) {
62
64
 
63
65
  try {
64
66
  console.log('\n📦 Installing Python mcp package...');
65
- const command = `${pythonCmd} -m pip install --user mcp`;
66
-
67
- execSync(command, { stdio: 'inherit' });
67
+ // Security: Use execFileSync with array args to prevent command injection
68
+ execFileSync(pythonCmd, ['-m', 'pip', 'install', '--user', 'mcp'], { stdio: 'inherit' });
68
69
  console.log('✅ Python mcp package installed successfully!\n');
69
70
  return true;
70
71
  } catch (error) {
@@ -391,7 +391,9 @@ class AgentVibesServer:
391
391
  Returns:
392
392
  Success or error message
393
393
  """
394
- import random
394
+ # Security: Using secrets.choice for cryptographically secure random selection
395
+ # Even though this is just for UI variety, we use secrets to satisfy security scanners
396
+ import secrets
395
397
 
396
398
  args = ["target", speed] if target else [speed]
397
399
  result = await self._run_script("speed-manager.sh", args)
@@ -406,7 +408,7 @@ class AgentVibesServer:
406
408
  ]
407
409
 
408
410
  # Pick a random test message and speak it
409
- test_message = random.choice(test_messages)
411
+ test_message = secrets.choice(test_messages)
410
412
 
411
413
  try:
412
414
  # Speak the test message to demonstrate the new speed
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
3
  "name": "agentvibes",
4
- "version": "2.13.7",
4
+ "version": "2.13.9",
5
5
  "description": "Now your AI Agents can finally talk back! Professional TTS voice for Claude Code and Claude Desktop (via MCP) with multi-provider support.",
6
6
  "homepage": "https://agentvibes.org",
7
7
  "keywords": [
@@ -14,7 +14,7 @@
14
14
  * Licensed under the Apache License, Version 2.0
15
15
  */
16
16
 
17
- import { execSync } from 'node:child_process';
17
+ import { execFileSync } from 'node:child_process';
18
18
  import path from 'node:path';
19
19
  import fs from 'node:fs/promises';
20
20
  import chalk from 'chalk';
@@ -154,16 +154,6 @@ async function writeVoiceAssignments(assignments) {
154
154
  await fs.writeFile(csvPath, lines.join('\n') + '\n', 'utf8');
155
155
  }
156
156
 
157
- /**
158
- * Security: Escape shell arguments to prevent command injection
159
- * @param {string} arg - Argument to escape
160
- * @returns {string} - Safely escaped argument
161
- */
162
- function escapeShellArg(arg) {
163
- // Replace single quotes with '\'' (end quote, escaped quote, start quote)
164
- return `'${arg.replace(/'/g, "'\\''")}'`;
165
- }
166
-
167
157
  /**
168
158
  * Find matching voice name using fuzzy matching
169
159
  * Supports partial matches like "ryan" → "en_US-ryan-high"
@@ -228,10 +218,8 @@ export async function previewVoice(voiceName, options = {}) {
228
218
  }
229
219
 
230
220
  try {
231
- // Security: Properly escape arguments to prevent command injection
232
- const escapedText = escapeShellArg(text);
233
- const escapedVoice = escapeShellArg(matchedVoice);
234
- execSync(`bash "${playTtsPath}" ${escapedText} ${escapedVoice}`, {
221
+ // Security: Use execFileSync with array args to prevent command injection
222
+ execFileSync('bash', [playTtsPath, text, matchedVoice], {
235
223
  stdio: 'inherit',
236
224
  cwd: targetDir,
237
225
  });
@@ -7,7 +7,7 @@
7
7
  */
8
8
 
9
9
  import inquirer from 'inquirer';
10
- import { execSync } from 'child_process';
10
+ import { execSync, execFileSync } from 'child_process';
11
11
  import fs from 'fs';
12
12
  import path from 'path';
13
13
  import os from 'os';
@@ -20,7 +20,8 @@ import boxen from 'boxen';
20
20
  */
21
21
  function checkWSL() {
22
22
  try {
23
- execSync('wsl --version', { stdio: 'pipe' });
23
+ // Security: Use execFileSync with array args to prevent command injection
24
+ execFileSync('wsl', ['--version'], { stdio: 'pipe' });
24
25
  return true;
25
26
  } catch {
26
27
  return false;
@@ -35,7 +36,8 @@ function checkPython() {
35
36
 
36
37
  for (const cmd of commands) {
37
38
  try {
38
- const version = execSync(`${cmd} --version`, { encoding: 'utf8', stdio: 'pipe' });
39
+ // Security: Use execFileSync with array args to prevent command injection
40
+ const version = execFileSync(cmd, ['--version'], { encoding: 'utf8', stdio: 'pipe' });
39
41
  return { available: true, command: cmd, version: version.trim() };
40
42
  } catch {
41
43
  continue;
@@ -50,7 +52,8 @@ function checkPython() {
50
52
  */
51
53
  function checkMCPPackage(pythonCmd) {
52
54
  try {
53
- execSync(`${pythonCmd} -c "import mcp"`, { stdio: 'pipe' });
55
+ // Security: Use execFileSync with array args to prevent command injection
56
+ execFileSync(pythonCmd, ['-c', 'import mcp'], { stdio: 'pipe' });
54
57
  return true;
55
58
  } catch {
56
59
  return false;
@@ -157,10 +160,11 @@ async function installPiper(useWSL = false) {
157
160
  const spinner = ora('Installing Piper TTS...').start();
158
161
 
159
162
  try {
163
+ // Security: Use execFileSync with array args to prevent command injection
160
164
  if (useWSL) {
161
- execSync('wsl pipx install piper-tts', { stdio: 'inherit' });
165
+ execFileSync('wsl', ['pipx', 'install', 'piper-tts'], { stdio: 'inherit' });
162
166
  } else {
163
- execSync('pipx install piper-tts', { stdio: 'inherit' });
167
+ execFileSync('pipx', ['install', 'piper-tts'], { stdio: 'inherit' });
164
168
  }
165
169
  spinner.succeed('Piper TTS installed successfully!');
166
170
  return true;
@@ -184,10 +188,11 @@ async function installMCPPackage(pythonCmd, useWSL = false) {
184
188
  const spinner = ora('Installing Python MCP package...').start();
185
189
 
186
190
  try {
191
+ // Security: Use execFileSync with array args to prevent command injection
187
192
  if (useWSL) {
188
- execSync(`wsl ${pythonCmd} -m pip install --break-system-packages mcp`, { stdio: 'pipe' });
193
+ execFileSync('wsl', [pythonCmd, '-m', 'pip', 'install', '--break-system-packages', 'mcp'], { stdio: 'pipe' });
189
194
  } else {
190
- execSync(`${pythonCmd} -m pip install --user mcp`, { stdio: 'pipe' });
195
+ execFileSync(pythonCmd, ['-m', 'pip', 'install', '--user', 'mcp'], { stdio: 'pipe' });
191
196
  }
192
197
  spinner.succeed('Python MCP package installed successfully!');
193
198
  return true;
@@ -263,7 +268,8 @@ export async function installMCP() {
263
268
  if (installWSL) {
264
269
  console.log(chalk.cyan('\n📦 Installing WSL...'));
265
270
  try {
266
- execSync('wsl --install', { stdio: 'inherit' });
271
+ // Security: Use execFileSync with array args to prevent command injection
272
+ execFileSync('wsl', ['--install'], { stdio: 'inherit' });
267
273
  console.log(chalk.green('\n✅ WSL installed successfully!'));
268
274
  console.log(chalk.yellow('⚠️ Please restart your computer and run this installer again.'));
269
275
  process.exit(0);
package/src/installer.js CHANGED
@@ -45,7 +45,7 @@ import { program } from 'commander';
45
45
  import path from 'node:path';
46
46
  import fs from 'node:fs/promises';
47
47
  import fsSync from 'node:fs';
48
- import { execSync } from 'node:child_process';
48
+ import { execSync, execFileSync } from 'node:child_process';
49
49
  import chalk from 'chalk';
50
50
  import inquirer from 'inquirer';
51
51
  import figlet from 'figlet';
@@ -128,24 +128,17 @@ function showReleaseInfo() {
128
128
  console.log(
129
129
  boxen(
130
130
  chalk.white.bold('═══════════════════════════════════════════════════════════════\n') +
131
- chalk.cyan.bold(' 📦 AgentVibes v2.13.4 - BMAD Integration Fix\n') +
131
+ chalk.cyan.bold(' 📦 AgentVibes v2.13.9 - Provider-Aware Voice Migration\n') +
132
132
  chalk.white.bold('═══════════════════════════════════════════════════════════════\n\n') +
133
133
  chalk.green.bold('🎙️ WHAT\'S NEW:\n\n') +
134
- chalk.cyan('AgentVibes v2.13.4 fixes a critical bug in BMAD integration where path\n') +
135
- chalk.cyan('security validation was using process.cwd() instead of the actual target\n') +
136
- chalk.cyan('installation directory. This caused false "Security: Invalid BMAD path\n') +
137
- chalk.cyan('detected" errors when AgentVibes was called from BMAD\'s installer.\n\n') +
134
+ chalk.cyan('AgentVibes v2.13.9 fixes voice mapping when switching TTS providers.\n') +
135
+ chalk.cyan('Voices now auto-migrate between ElevenLabs and Piper seamlessly.\n\n') +
138
136
  chalk.green.bold('✨ KEY HIGHLIGHTS:\n\n') +
139
- chalk.gray(' 🔧 BMAD Path Fix - Security validation now uses targetDir parameter\n') +
140
- chalk.gray(' 🛡️ Edge Case Fixed - /projectX no longer matches /project prefix\n') +
141
- chalk.gray(' 🧪 New Test Suite - Comprehensive path security validation tests\n') +
142
- chalk.gray(' ✅ All Tests Passing - Full test coverage verified\n') +
137
+ chalk.gray(' 🔄 Smart Voice Migration - Auto-map voices when switching providers\n') +
138
+ chalk.gray(' 📝 Provider-Aware Docs - BMAD shows both ElevenLabs & Piper columns\n') +
139
+ chalk.gray(' 🎤 Valid Piper Names - Fixed incomplete voice names in mappings\n') +
140
+ chalk.gray(' ✅ 122 Tests Passing - All functionality verified\n') +
143
141
  chalk.gray(' 🔄 Zero Breaking Changes - Fully backward compatible\n\n') +
144
- chalk.cyan('Technical Improvements:\n') +
145
- chalk.gray(' • processBmadTtsInjections now accepts targetDir parameter\n') +
146
- chalk.gray(' • isPathSafe checks for path separator to prevent prefix attacks\n') +
147
- chalk.gray(' • Added Node.js test runner support to package.json\n') +
148
- chalk.gray(' • 12 new tests for path security validation\n\n') +
149
142
  chalk.white.bold('═══════════════════════════════════════════════════════════════\n\n') +
150
143
  chalk.gray('📖 Full Release Notes: RELEASE_NOTES.md\n') +
151
144
  chalk.gray('🌐 Website: https://agentvibes.org\n') +
@@ -215,18 +208,12 @@ function execScript(scriptPath, options = {}) {
215
208
  throw new Error('Script path outside allowed directory');
216
209
  }
217
210
 
218
- // Escape each argument properly
219
- const escapedArgs = args.map(arg => {
220
- // Replace single quotes with '\'' (end quote, escaped quote, start quote)
221
- return `'${arg.replace(/'/g, "'\\''")}'`;
222
- }).join(' ');
211
+ // Security: Use execFileSync with -c flag to prevent command injection
212
+ // The shell sources its config and executes the script with arguments passed as array
213
+ // This avoids string interpolation vulnerabilities
214
+ const shellScript = `source "${shellConfig}" 2>/dev/null; exec "${scriptFile}" "$@"`;
223
215
 
224
- // Build command with properly escaped components
225
- const scriptCommand = escapedArgs ? `'${scriptFile}' ${escapedArgs}` : `'${scriptFile}'`;
226
- const command = `source "${shellConfig}" 2>/dev/null; ${shell} ${scriptCommand}`;
227
-
228
- return execSync(command, {
229
- shell: shell,
216
+ return execFileSync(shell, ['-c', shellScript, '--', ...args], {
230
217
  ...options
231
218
  });
232
219
  }
@@ -1188,7 +1175,9 @@ async function showRecentChanges(sourceDir) {
1188
1175
  continue;
1189
1176
  }
1190
1177
  if (inCodeBlock && line.trim()) {
1191
- const match = line.match(/^([a-f0-9]+)\s+(.+)$/);
1178
+ // Security: Use bounded quantifiers to prevent ReDoS
1179
+ // Match git short hash (7-12 hex chars) followed by single space and message
1180
+ const match = line.match(/^([a-f0-9]{7,12}) (.*)$/);
1192
1181
  if (match) {
1193
1182
  const [, hash, message] = match;
1194
1183
  console.log(chalk.gray(` ${hash}`) + ' ' + chalk.white(message));
@@ -1618,8 +1607,9 @@ async function install(options = {}) {
1618
1607
  }
1619
1608
 
1620
1609
  if (inCodeBlock && line.trim()) {
1621
- // Parse commit line: "hash message"
1622
- const match = line.match(/^([a-f0-9]+)\s+(.+)$/);
1610
+ // Security: Use bounded quantifiers to prevent ReDoS
1611
+ // Match git short hash (7-12 hex chars) followed by single space and message
1612
+ const match = line.match(/^([a-f0-9]{7,12}) (.*)$/);
1623
1613
  if (match) {
1624
1614
  const [, hash, message] = match;
1625
1615
  console.log(chalk.gray(` ${hash}`) + ' ' + chalk.white(message));
@@ -107,31 +107,35 @@ teardown() {
107
107
  assert_output_contains "Error: Provider name required"
108
108
  }
109
109
 
110
- @test "provider-manager switch resets voice to default" {
111
- # Set a voice first
110
+ @test "provider-manager switch migrates voice to new provider" {
111
+ # Set an unknown voice first (not in mapping)
112
112
  echo "TestVoice" > "$VOICE_FILE"
113
113
 
114
114
  run "$PROVIDER_MANAGER" switch "piper"
115
115
 
116
116
  [ "$status" -eq 0 ]
117
- assert_output_contains "voice set to:"
117
+ # Should migrate to default when voice is not in mapping table
118
+ assert_output_contains "Voice migrated:"
118
119
 
119
- # Voice file should exist with new default voice
120
+ # Voice file should exist with migrated voice
120
121
  [[ -f "$VOICE_FILE" ]]
122
+ # Should contain a Piper voice format
123
+ assert_file_contains "$VOICE_FILE" "en_US"
121
124
  }
122
125
 
123
- @test "provider-manager switching providers removes voice file" {
124
- # Create voice file
126
+ @test "provider-manager switch preserves known voice mappings" {
127
+ # Create voice file with a known ElevenLabs voice
125
128
  mkdir -p "$(dirname "$VOICE_FILE")"
126
129
  echo "Jessica Anne Bogart" > "$VOICE_FILE"
127
130
 
128
131
  "$PROVIDER_MANAGER" switch "elevenlabs"
129
132
 
130
- # Voice file should exist with new default voice for provider
133
+ # Voice file should exist
131
134
  [[ -f "$VOICE_FILE" ]]
132
135
 
133
- # Should contain the new provider's default voice
134
- assert_file_contains "$VOICE_FILE" "Amy"
136
+ # Should preserve existing voice when staying in same provider type
137
+ # Jessica Anne Bogart is ElevenLabs, so stays the same
138
+ assert_file_contains "$VOICE_FILE" "Jessica Anne Bogart"
135
139
  }
136
140
 
137
141
  # ============================================================================
@@ -1,11 +0,0 @@
1
- name,displayName,title,icon,role,identity,communicationStyle,principles,module,path
2
- "bmad-master","BMad Master","BMad Master Executor, Knowledge Custodian, and Workflow Orchestrator","🧙","Master Task Executor + BMad Expert + Guiding Facilitator Orchestrator","Master-level expert in the BMAD Core Platform and all loaded modules with comprehensive knowledge of all resources, tasks, and workflows. Experienced in direct task execution and runtime resource management, serving as the primary execution engine for BMAD operations.","Direct and comprehensive, refers to himself in the 3rd person. Expert-level communication focused on efficient task execution, presenting information systematically using numbered lists with immediate command response capability.","Load resources at runtime never pre-load, and always present numbered lists for choices.","core",".bmad/core/agents/bmad-master.md"
3
- "analyst","Mary","Business Analyst","📊","Strategic Business Analyst + Requirements Expert","Senior analyst with deep expertise in market research, competitive analysis, and requirements elicitation. Specializes in translating vague needs into actionable specs.","Systematic and probing. Connects dots others miss. Structures findings hierarchically. Uses precise unambiguous language. Ensures all stakeholder voices heard.","Every business challenge has root causes waiting to be discovered. Ground findings in verifiable evidence. Articulate requirements with absolute precision.","bmm",".bmad/bmm/agents/analyst.md"
4
- "architect","Winston","Architect","🏗️","System Architect + Technical Design Leader","Senior architect with expertise in distributed systems, cloud infrastructure, and API design. Specializes in scalable patterns and technology selection.","Pragmatic in technical discussions. Balances idealism with reality. Always connects decisions to business value and user impact. Prefers boring tech that works.","User journeys drive technical decisions. Embrace boring technology for stability. Design simple solutions that scale when needed. Developer productivity is architecture.","bmm",".bmad/bmm/agents/architect.md"
5
- "dev","Amelia","Developer Agent","💻","Senior Software Engineer","Executes approved stories with strict adherence to acceptance criteria, using Story Context XML and existing code to minimize rework and hallucinations.","Succinct. Cites specific paths and AC IDs. Asks clarifying questions only when inputs missing. Refuses to invent when info lacking.","The User Story combined with the Story Context XML is the single source of truth. Reuse existing interfaces over rebuilding. Every change maps to specific AC. ALL past and current tests pass 100% or story isn't ready for review.","bmm",".bmad/bmm/agents/dev.md"
6
- "frame-expert","Saif","Visual Design & Diagramming Expert","📐","Expert Visual Designer & Diagramming Specialist","Expert who creates visual representations using Excalidraw with optimized, reusable components. Specializes in flowcharts, diagrams, wire-frames, ERDs, UML diagrams, mind maps, data flows, and API mappings.","Visual-first, structured, detail-oriented, composition-focused. Presents options as numbered lists for easy selection.","- Composition Over Creation - Use reusable components and templates. Minimal Payload - Strip unnecessary metadata, optimize serialization. - Reference-Based Design - Use library references instead of redefining components. Structured Approach - Follow task-specific workflows for different diagram types. - Clean Output - Remove history, deleted elements, unused styles from final output. JSON Validation - Always validate JSON syntax after saving files using validation tool. - Error Recovery - NEVER delete files due to syntax errors, always fix them using error location information.","bmm",".bmad/bmm/agents/frame-expert.md"
7
- "pm","John","Product Manager","📋","Investigative Product Strategist + Market-Savvy PM","Product management veteran with 8+ years launching B2B and consumer products. Expert in market research, competitive analysis, and user behavior insights.","Direct and analytical. Asks WHY relentlessly. Backs claims with data and user insights. Cuts straight to what matters for the product.","Uncover the deeper WHY behind every requirement. Ruthless prioritization to achieve MVP goals. Proactively identify risks. Align efforts with measurable business impact.","bmm",".bmad/bmm/agents/pm.md"
8
- "sm","Bob","Scrum Master","🏃","Technical Scrum Master + Story Preparation Specialist","Certified Scrum Master with deep technical background. Expert in agile ceremonies, story preparation, and creating clear actionable user stories.","Task-oriented and efficient. Focused on clear handoffs and precise requirements. Eliminates ambiguity. Emphasizes developer-ready specs.","Strict boundaries between story prep and implementation. Stories are single source of truth. Perfect alignment between PRD and dev execution. Enable efficient sprints.","bmm",".bmad/bmm/agents/sm.md"
9
- "tea","Murat","Master Test Architect","🧪","Master Test Architect","Test architect specializing in CI/CD, automated frameworks, and scalable quality gates.","Data-driven and pragmatic. Strong opinions weakly held. Calculates risk vs value. Knows when to test deep vs shallow.","Risk-based testing. Depth scales with impact. Quality gates backed by data. Tests mirror usage. Flakiness is critical debt. Tests first AI implements suite validates.","bmm",".bmad/bmm/agents/tea.md"
10
- "tech-writer","Paige","Technical Writer","📚","Technical Documentation Specialist + Knowledge Curator","Experienced technical writer expert in CommonMark, DITA, OpenAPI. Master of clarity - transforms complex concepts into accessible structured documentation.","Patient and supportive. Uses clear examples and analogies. Knows when to simplify vs when to be detailed. Celebrates good docs helps improve unclear ones.","Documentation is teaching. Every doc helps someone accomplish a task. Clarity above all. Docs are living artifacts that evolve with code.","bmm",".bmad/bmm/agents/tech-writer.md"
11
- "ux-designer","Sally","UX Designer","🎨","User Experience Designer + UI Specialist","Senior UX Designer with 7+ years creating intuitive experiences across web and mobile. Expert in user research, interaction design, AI-assisted tools.","Empathetic and user-focused. Uses storytelling for design decisions. Data-informed but creative. Advocates strongly for user needs and edge cases.","Every decision serves genuine user needs. Start simple evolve through feedback. Balance empathy with edge case attention. AI tools accelerate human-centered design.","bmm",".bmad/bmm/agents/ux-designer.md"
@@ -1,11 +0,0 @@
1
- agent_id,voice_name
2
- pm,en_US-ryan-high
3
- architect,en_US-danny-low
4
- dev,en_US-hfc_female-medium
5
- analyst,en_US-amy-medium
6
- ux-designer,en_US-kristin-medium
7
- tea,en_US-kusal-medium
8
- sm,en_US-bryce-medium
9
- tech-writer,en_US-kathleen-low
10
- frame-expert,en_US-kusal-medium
11
- bmad-master,en_US-libritts_r-high
@@ -1,42 +0,0 @@
1
- # Agent Customization
2
- # Customize any section below - all are optional
3
- # After editing: npx bmad-method build <agent-name>
4
-
5
- # Override agent name
6
- agent:
7
- metadata:
8
- name: ""
9
-
10
- # Replace entire persona (not merged)
11
- persona:
12
- role: ""
13
- identity: ""
14
- communication_style: ""
15
- principles: []
16
-
17
- # Add custom critical actions (appended after standard config loading)
18
- critical_actions: []
19
-
20
- # Add persistent memories for the agent
21
- memories: []
22
- # Example:
23
- # memories:
24
- # - "User prefers detailed technical explanations"
25
- # - "Current project uses React and TypeScript"
26
-
27
- # Add custom menu items (appended to base menu)
28
- # Don't include * prefix or help/exit - auto-injected
29
- menu: []
30
- # Example:
31
- # menu:
32
- # - trigger: my-workflow
33
- # workflow: "{project-root}/custom/my.yaml"
34
- # description: My custom workflow
35
-
36
- # Add custom prompts (for action="#id" handlers)
37
- prompts: []
38
- # Example:
39
- # prompts:
40
- # - id: my-prompt
41
- # content: |
42
- # Prompt instructions here
@@ -1,42 +0,0 @@
1
- # Agent Customization
2
- # Customize any section below - all are optional
3
- # After editing: npx bmad-method build <agent-name>
4
-
5
- # Override agent name
6
- agent:
7
- metadata:
8
- name: ""
9
-
10
- # Replace entire persona (not merged)
11
- persona:
12
- role: ""
13
- identity: ""
14
- communication_style: ""
15
- principles: []
16
-
17
- # Add custom critical actions (appended after standard config loading)
18
- critical_actions: []
19
-
20
- # Add persistent memories for the agent
21
- memories: []
22
- # Example:
23
- # memories:
24
- # - "User prefers detailed technical explanations"
25
- # - "Current project uses React and TypeScript"
26
-
27
- # Add custom menu items (appended to base menu)
28
- # Don't include * prefix or help/exit - auto-injected
29
- menu: []
30
- # Example:
31
- # menu:
32
- # - trigger: my-workflow
33
- # workflow: "{project-root}/custom/my.yaml"
34
- # description: My custom workflow
35
-
36
- # Add custom prompts (for action="#id" handlers)
37
- prompts: []
38
- # Example:
39
- # prompts:
40
- # - id: my-prompt
41
- # content: |
42
- # Prompt instructions here
@@ -1,42 +0,0 @@
1
- # Agent Customization
2
- # Customize any section below - all are optional
3
- # After editing: npx bmad-method build <agent-name>
4
-
5
- # Override agent name
6
- agent:
7
- metadata:
8
- name: ""
9
-
10
- # Replace entire persona (not merged)
11
- persona:
12
- role: ""
13
- identity: ""
14
- communication_style: ""
15
- principles: []
16
-
17
- # Add custom critical actions (appended after standard config loading)
18
- critical_actions: []
19
-
20
- # Add persistent memories for the agent
21
- memories: []
22
- # Example:
23
- # memories:
24
- # - "User prefers detailed technical explanations"
25
- # - "Current project uses React and TypeScript"
26
-
27
- # Add custom menu items (appended to base menu)
28
- # Don't include * prefix or help/exit - auto-injected
29
- menu: []
30
- # Example:
31
- # menu:
32
- # - trigger: my-workflow
33
- # workflow: "{project-root}/custom/my.yaml"
34
- # description: My custom workflow
35
-
36
- # Add custom prompts (for action="#id" handlers)
37
- prompts: []
38
- # Example:
39
- # prompts:
40
- # - id: my-prompt
41
- # content: |
42
- # Prompt instructions here
@@ -1,42 +0,0 @@
1
- # Agent Customization
2
- # Customize any section below - all are optional
3
- # After editing: npx bmad-method build <agent-name>
4
-
5
- # Override agent name
6
- agent:
7
- metadata:
8
- name: ""
9
-
10
- # Replace entire persona (not merged)
11
- persona:
12
- role: ""
13
- identity: ""
14
- communication_style: ""
15
- principles: []
16
-
17
- # Add custom critical actions (appended after standard config loading)
18
- critical_actions: []
19
-
20
- # Add persistent memories for the agent
21
- memories: []
22
- # Example:
23
- # memories:
24
- # - "User prefers detailed technical explanations"
25
- # - "Current project uses React and TypeScript"
26
-
27
- # Add custom menu items (appended to base menu)
28
- # Don't include * prefix or help/exit - auto-injected
29
- menu: []
30
- # Example:
31
- # menu:
32
- # - trigger: my-workflow
33
- # workflow: "{project-root}/custom/my.yaml"
34
- # description: My custom workflow
35
-
36
- # Add custom prompts (for action="#id" handlers)
37
- prompts: []
38
- # Example:
39
- # prompts:
40
- # - id: my-prompt
41
- # content: |
42
- # Prompt instructions here
@@ -1,42 +0,0 @@
1
- # Agent Customization
2
- # Customize any section below - all are optional
3
- # After editing: npx bmad-method build <agent-name>
4
-
5
- # Override agent name
6
- agent:
7
- metadata:
8
- name: ""
9
-
10
- # Replace entire persona (not merged)
11
- persona:
12
- role: ""
13
- identity: ""
14
- communication_style: ""
15
- principles: []
16
-
17
- # Add custom critical actions (appended after standard config loading)
18
- critical_actions: []
19
-
20
- # Add persistent memories for the agent
21
- memories: []
22
- # Example:
23
- # memories:
24
- # - "User prefers detailed technical explanations"
25
- # - "Current project uses React and TypeScript"
26
-
27
- # Add custom menu items (appended to base menu)
28
- # Don't include * prefix or help/exit - auto-injected
29
- menu: []
30
- # Example:
31
- # menu:
32
- # - trigger: my-workflow
33
- # workflow: "{project-root}/custom/my.yaml"
34
- # description: My custom workflow
35
-
36
- # Add custom prompts (for action="#id" handlers)
37
- prompts: []
38
- # Example:
39
- # prompts:
40
- # - id: my-prompt
41
- # content: |
42
- # Prompt instructions here
@@ -1,42 +0,0 @@
1
- # Agent Customization
2
- # Customize any section below - all are optional
3
- # After editing: npx bmad-method build <agent-name>
4
-
5
- # Override agent name
6
- agent:
7
- metadata:
8
- name: ""
9
-
10
- # Replace entire persona (not merged)
11
- persona:
12
- role: ""
13
- identity: ""
14
- communication_style: ""
15
- principles: []
16
-
17
- # Add custom critical actions (appended after standard config loading)
18
- critical_actions: []
19
-
20
- # Add persistent memories for the agent
21
- memories: []
22
- # Example:
23
- # memories:
24
- # - "User prefers detailed technical explanations"
25
- # - "Current project uses React and TypeScript"
26
-
27
- # Add custom menu items (appended to base menu)
28
- # Don't include * prefix or help/exit - auto-injected
29
- menu: []
30
- # Example:
31
- # menu:
32
- # - trigger: my-workflow
33
- # workflow: "{project-root}/custom/my.yaml"
34
- # description: My custom workflow
35
-
36
- # Add custom prompts (for action="#id" handlers)
37
- prompts: []
38
- # Example:
39
- # prompts:
40
- # - id: my-prompt
41
- # content: |
42
- # Prompt instructions here
@@ -1,42 +0,0 @@
1
- # Agent Customization
2
- # Customize any section below - all are optional
3
- # After editing: npx bmad-method build <agent-name>
4
-
5
- # Override agent name
6
- agent:
7
- metadata:
8
- name: ""
9
-
10
- # Replace entire persona (not merged)
11
- persona:
12
- role: ""
13
- identity: ""
14
- communication_style: ""
15
- principles: []
16
-
17
- # Add custom critical actions (appended after standard config loading)
18
- critical_actions: []
19
-
20
- # Add persistent memories for the agent
21
- memories: []
22
- # Example:
23
- # memories:
24
- # - "User prefers detailed technical explanations"
25
- # - "Current project uses React and TypeScript"
26
-
27
- # Add custom menu items (appended to base menu)
28
- # Don't include * prefix or help/exit - auto-injected
29
- menu: []
30
- # Example:
31
- # menu:
32
- # - trigger: my-workflow
33
- # workflow: "{project-root}/custom/my.yaml"
34
- # description: My custom workflow
35
-
36
- # Add custom prompts (for action="#id" handlers)
37
- prompts: []
38
- # Example:
39
- # prompts:
40
- # - id: my-prompt
41
- # content: |
42
- # Prompt instructions here