agentvibes 2.12.3 → 2.12.5

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 (427) hide show
  1. package/.claude/hooks/play-tts.sh +12 -0
  2. package/.claude/hooks/tts-queue.sh +34 -6
  3. package/README.md +17 -10
  4. package/RELEASE_NOTES.md +153 -752
  5. package/mcp-server/install-deps.js +19 -0
  6. package/package.json +1 -1
  7. package/scripts/fix-audio-tunnel.sh +22 -6
  8. package/src/commands/bmad-voices.js +14 -1
  9. package/src/installer.js +59 -31
  10. package/test/unit/play-tts.bats +1 -1
  11. package/.bmad/_cfg/agent-manifest.csv +0 -11
  12. package/.bmad/_cfg/agent-voice-map.csv +0 -11
  13. package/.bmad/_cfg/agents/bmm-analyst.customize.yaml +0 -42
  14. package/.bmad/_cfg/agents/bmm-architect.customize.yaml +0 -42
  15. package/.bmad/_cfg/agents/bmm-dev.customize.yaml +0 -42
  16. package/.bmad/_cfg/agents/bmm-frame-expert.customize.yaml +0 -42
  17. package/.bmad/_cfg/agents/bmm-pm.customize.yaml +0 -42
  18. package/.bmad/_cfg/agents/bmm-sm.customize.yaml +0 -42
  19. package/.bmad/_cfg/agents/bmm-tea.customize.yaml +0 -42
  20. package/.bmad/_cfg/agents/bmm-tech-writer.customize.yaml +0 -42
  21. package/.bmad/_cfg/agents/bmm-ux-designer.customize.yaml +0 -42
  22. package/.bmad/_cfg/agents/core-bmad-master.customize.yaml +0 -42
  23. package/.bmad/_cfg/files-manifest.csv +0 -243
  24. package/.bmad/_cfg/ides/claude-code.yaml +0 -6
  25. package/.bmad/_cfg/manifest.yaml +0 -9
  26. package/.bmad/_cfg/task-manifest.csv +0 -5
  27. package/.bmad/_cfg/tool-manifest.csv +0 -2
  28. package/.bmad/_cfg/workflow-manifest.csv +0 -38
  29. package/.bmad/bmm/README.md +0 -128
  30. package/.bmad/bmm/agents/analyst.md +0 -79
  31. package/.bmad/bmm/agents/analyst.md.backup-pre-tts +0 -75
  32. package/.bmad/bmm/agents/architect.md +0 -80
  33. package/.bmad/bmm/agents/dev.md +0 -70
  34. package/.bmad/bmm/agents/frame-expert.md +0 -72
  35. package/.bmad/bmm/agents/pm.md +0 -84
  36. package/.bmad/bmm/agents/sm.md +0 -93
  37. package/.bmad/bmm/agents/tea.md +0 -80
  38. package/.bmad/bmm/agents/tech-writer.md +0 -84
  39. package/.bmad/bmm/agents/ux-designer.md +0 -79
  40. package/.bmad/bmm/config.yaml +0 -17
  41. package/.bmad/bmm/docs/README.md +0 -236
  42. package/.bmad/bmm/docs/agents-guide.md +0 -1058
  43. package/.bmad/bmm/docs/brownfield-guide.md +0 -762
  44. package/.bmad/bmm/docs/enterprise-agentic-development.md +0 -686
  45. package/.bmad/bmm/docs/faq.md +0 -588
  46. package/.bmad/bmm/docs/glossary.md +0 -320
  47. package/.bmad/bmm/docs/party-mode.md +0 -224
  48. package/.bmad/bmm/docs/quick-spec-flow.md +0 -652
  49. package/.bmad/bmm/docs/quick-start.md +0 -376
  50. package/.bmad/bmm/docs/scale-adaptive-system.md +0 -612
  51. package/.bmad/bmm/docs/test-architecture.md +0 -396
  52. package/.bmad/bmm/docs/workflow-architecture-reference.md +0 -366
  53. package/.bmad/bmm/docs/workflow-document-project-reference.md +0 -489
  54. package/.bmad/bmm/docs/workflows-analysis.md +0 -370
  55. package/.bmad/bmm/docs/workflows-implementation.md +0 -286
  56. package/.bmad/bmm/docs/workflows-planning.md +0 -612
  57. package/.bmad/bmm/docs/workflows-solutioning.md +0 -554
  58. package/.bmad/bmm/teams/default-party.csv +0 -20
  59. package/.bmad/bmm/teams/team-fullstack.yaml +0 -13
  60. package/.bmad/bmm/testarch/knowledge/ci-burn-in.md +0 -675
  61. package/.bmad/bmm/testarch/knowledge/component-tdd.md +0 -486
  62. package/.bmad/bmm/testarch/knowledge/contract-testing.md +0 -957
  63. package/.bmad/bmm/testarch/knowledge/data-factories.md +0 -500
  64. package/.bmad/bmm/testarch/knowledge/email-auth.md +0 -721
  65. package/.bmad/bmm/testarch/knowledge/error-handling.md +0 -725
  66. package/.bmad/bmm/testarch/knowledge/feature-flags.md +0 -750
  67. package/.bmad/bmm/testarch/knowledge/fixture-architecture.md +0 -401
  68. package/.bmad/bmm/testarch/knowledge/network-first.md +0 -486
  69. package/.bmad/bmm/testarch/knowledge/nfr-criteria.md +0 -670
  70. package/.bmad/bmm/testarch/knowledge/playwright-config.md +0 -730
  71. package/.bmad/bmm/testarch/knowledge/probability-impact.md +0 -601
  72. package/.bmad/bmm/testarch/knowledge/risk-governance.md +0 -615
  73. package/.bmad/bmm/testarch/knowledge/selective-testing.md +0 -732
  74. package/.bmad/bmm/testarch/knowledge/selector-resilience.md +0 -527
  75. package/.bmad/bmm/testarch/knowledge/test-healing-patterns.md +0 -644
  76. package/.bmad/bmm/testarch/knowledge/test-levels-framework.md +0 -473
  77. package/.bmad/bmm/testarch/knowledge/test-priorities-matrix.md +0 -373
  78. package/.bmad/bmm/testarch/knowledge/test-quality.md +0 -664
  79. package/.bmad/bmm/testarch/knowledge/timing-debugging.md +0 -372
  80. package/.bmad/bmm/testarch/knowledge/visual-debugging.md +0 -524
  81. package/.bmad/bmm/testarch/tea-index.csv +0 -22
  82. package/.bmad/bmm/workflows/1-analysis/brainstorm-project/instructions.md +0 -112
  83. package/.bmad/bmm/workflows/1-analysis/brainstorm-project/project-context.md +0 -25
  84. package/.bmad/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml +0 -26
  85. package/.bmad/bmm/workflows/1-analysis/domain-research/instructions.md +0 -425
  86. package/.bmad/bmm/workflows/1-analysis/domain-research/template.md +0 -180
  87. package/.bmad/bmm/workflows/1-analysis/domain-research/workflow.yaml +0 -28
  88. package/.bmad/bmm/workflows/1-analysis/product-brief/checklist.md +0 -115
  89. package/.bmad/bmm/workflows/1-analysis/product-brief/instructions.md +0 -524
  90. package/.bmad/bmm/workflows/1-analysis/product-brief/template.md +0 -181
  91. package/.bmad/bmm/workflows/1-analysis/product-brief/workflow.yaml +0 -45
  92. package/.bmad/bmm/workflows/1-analysis/research/checklist-deep-prompt.md +0 -144
  93. package/.bmad/bmm/workflows/1-analysis/research/checklist-technical.md +0 -249
  94. package/.bmad/bmm/workflows/1-analysis/research/checklist.md +0 -299
  95. package/.bmad/bmm/workflows/1-analysis/research/claude-code/injections.yaml +0 -114
  96. package/.bmad/bmm/workflows/1-analysis/research/instructions-deep-prompt.md +0 -438
  97. package/.bmad/bmm/workflows/1-analysis/research/instructions-market.md +0 -675
  98. package/.bmad/bmm/workflows/1-analysis/research/instructions-router.md +0 -134
  99. package/.bmad/bmm/workflows/1-analysis/research/instructions-technical.md +0 -534
  100. package/.bmad/bmm/workflows/1-analysis/research/template-deep-prompt.md +0 -94
  101. package/.bmad/bmm/workflows/1-analysis/research/template-market.md +0 -347
  102. package/.bmad/bmm/workflows/1-analysis/research/template-technical.md +0 -245
  103. package/.bmad/bmm/workflows/1-analysis/research/workflow.yaml +0 -44
  104. package/.bmad/bmm/workflows/2-plan-workflows/create-epics-and-stories/epics-template.md +0 -80
  105. package/.bmad/bmm/workflows/2-plan-workflows/create-epics-and-stories/instructions.md +0 -616
  106. package/.bmad/bmm/workflows/2-plan-workflows/create-epics-and-stories/workflow.yaml +0 -53
  107. package/.bmad/bmm/workflows/2-plan-workflows/create-ux-design/checklist.md +0 -310
  108. package/.bmad/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md +0 -1308
  109. package/.bmad/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +0 -145
  110. package/.bmad/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +0 -61
  111. package/.bmad/bmm/workflows/2-plan-workflows/prd/checklist.md +0 -346
  112. package/.bmad/bmm/workflows/2-plan-workflows/prd/domain-complexity.csv +0 -13
  113. package/.bmad/bmm/workflows/2-plan-workflows/prd/instructions.md +0 -703
  114. package/.bmad/bmm/workflows/2-plan-workflows/prd/prd-template.md +0 -204
  115. package/.bmad/bmm/workflows/2-plan-workflows/prd/project-types.csv +0 -11
  116. package/.bmad/bmm/workflows/2-plan-workflows/prd/workflow.yaml +0 -52
  117. package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/checklist.md +0 -217
  118. package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/epics-template.md +0 -74
  119. package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/instructions-generate-stories.md +0 -436
  120. package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/instructions.md +0 -980
  121. package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/tech-spec-template.md +0 -181
  122. package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/user-story-template.md +0 -90
  123. package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +0 -58
  124. package/.bmad/bmm/workflows/3-solutioning/architecture/architecture-patterns.yaml +0 -321
  125. package/.bmad/bmm/workflows/3-solutioning/architecture/architecture-template.md +0 -103
  126. package/.bmad/bmm/workflows/3-solutioning/architecture/checklist.md +0 -240
  127. package/.bmad/bmm/workflows/3-solutioning/architecture/decision-catalog.yaml +0 -222
  128. package/.bmad/bmm/workflows/3-solutioning/architecture/instructions.md +0 -768
  129. package/.bmad/bmm/workflows/3-solutioning/architecture/pattern-categories.csv +0 -13
  130. package/.bmad/bmm/workflows/3-solutioning/architecture/workflow.yaml +0 -55
  131. package/.bmad/bmm/workflows/3-solutioning/implementation-readiness/checklist.md +0 -169
  132. package/.bmad/bmm/workflows/3-solutioning/implementation-readiness/instructions.md +0 -332
  133. package/.bmad/bmm/workflows/3-solutioning/implementation-readiness/template.md +0 -146
  134. package/.bmad/bmm/workflows/3-solutioning/implementation-readiness/workflow.yaml +0 -62
  135. package/.bmad/bmm/workflows/4-implementation/code-review/backlog_template.md +0 -12
  136. package/.bmad/bmm/workflows/4-implementation/code-review/checklist.md +0 -22
  137. package/.bmad/bmm/workflows/4-implementation/code-review/instructions.md +0 -398
  138. package/.bmad/bmm/workflows/4-implementation/code-review/workflow.yaml +0 -60
  139. package/.bmad/bmm/workflows/4-implementation/correct-course/checklist.md +0 -279
  140. package/.bmad/bmm/workflows/4-implementation/correct-course/instructions.md +0 -206
  141. package/.bmad/bmm/workflows/4-implementation/correct-course/workflow.yaml +0 -56
  142. package/.bmad/bmm/workflows/4-implementation/create-story/checklist.md +0 -240
  143. package/.bmad/bmm/workflows/4-implementation/create-story/instructions.md +0 -256
  144. package/.bmad/bmm/workflows/4-implementation/create-story/template.md +0 -51
  145. package/.bmad/bmm/workflows/4-implementation/create-story/workflow.yaml +0 -71
  146. package/.bmad/bmm/workflows/4-implementation/dev-story/checklist.md +0 -38
  147. package/.bmad/bmm/workflows/4-implementation/dev-story/instructions.md +0 -267
  148. package/.bmad/bmm/workflows/4-implementation/dev-story/workflow.yaml +0 -56
  149. package/.bmad/bmm/workflows/4-implementation/epic-tech-context/checklist.md +0 -17
  150. package/.bmad/bmm/workflows/4-implementation/epic-tech-context/instructions.md +0 -164
  151. package/.bmad/bmm/workflows/4-implementation/epic-tech-context/template.md +0 -76
  152. package/.bmad/bmm/workflows/4-implementation/epic-tech-context/workflow.yaml +0 -57
  153. package/.bmad/bmm/workflows/4-implementation/retrospective/instructions.md +0 -1443
  154. package/.bmad/bmm/workflows/4-implementation/retrospective/workflow.yaml +0 -56
  155. package/.bmad/bmm/workflows/4-implementation/sprint-planning/checklist.md +0 -33
  156. package/.bmad/bmm/workflows/4-implementation/sprint-planning/instructions.md +0 -234
  157. package/.bmad/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +0 -55
  158. package/.bmad/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +0 -49
  159. package/.bmad/bmm/workflows/4-implementation/story-context/checklist.md +0 -16
  160. package/.bmad/bmm/workflows/4-implementation/story-context/context-template.xml +0 -34
  161. package/.bmad/bmm/workflows/4-implementation/story-context/instructions.md +0 -209
  162. package/.bmad/bmm/workflows/4-implementation/story-context/workflow.yaml +0 -61
  163. package/.bmad/bmm/workflows/4-implementation/story-done/instructions.md +0 -111
  164. package/.bmad/bmm/workflows/4-implementation/story-done/workflow.yaml +0 -26
  165. package/.bmad/bmm/workflows/4-implementation/story-ready/instructions.md +0 -117
  166. package/.bmad/bmm/workflows/4-implementation/story-ready/workflow.yaml +0 -23
  167. package/.bmad/bmm/workflows/document-project/checklist.md +0 -245
  168. package/.bmad/bmm/workflows/document-project/documentation-requirements.csv +0 -12
  169. package/.bmad/bmm/workflows/document-project/instructions.md +0 -222
  170. package/.bmad/bmm/workflows/document-project/templates/deep-dive-template.md +0 -345
  171. package/.bmad/bmm/workflows/document-project/templates/index-template.md +0 -169
  172. package/.bmad/bmm/workflows/document-project/templates/project-overview-template.md +0 -103
  173. package/.bmad/bmm/workflows/document-project/templates/project-scan-report-schema.json +0 -160
  174. package/.bmad/bmm/workflows/document-project/templates/source-tree-template.md +0 -135
  175. package/.bmad/bmm/workflows/document-project/workflow.yaml +0 -29
  176. package/.bmad/bmm/workflows/document-project/workflows/deep-dive-instructions.md +0 -298
  177. package/.bmad/bmm/workflows/document-project/workflows/deep-dive.yaml +0 -31
  178. package/.bmad/bmm/workflows/document-project/workflows/full-scan-instructions.md +0 -1106
  179. package/.bmad/bmm/workflows/document-project/workflows/full-scan.yaml +0 -31
  180. package/.bmad/bmm/workflows/frame-expert/_shared/excalidraw-helpers.md +0 -127
  181. package/.bmad/bmm/workflows/frame-expert/_shared/excalidraw-library.json +0 -90
  182. package/.bmad/bmm/workflows/frame-expert/_shared/excalidraw-templates.yaml +0 -127
  183. package/.bmad/bmm/workflows/frame-expert/_shared/validate-json-instructions.md +0 -79
  184. package/.bmad/bmm/workflows/frame-expert/create-dataflow/checklist.md +0 -39
  185. package/.bmad/bmm/workflows/frame-expert/create-dataflow/instructions.md +0 -131
  186. package/.bmad/bmm/workflows/frame-expert/create-dataflow/workflow.yaml +0 -23
  187. package/.bmad/bmm/workflows/frame-expert/create-diagram/checklist.md +0 -43
  188. package/.bmad/bmm/workflows/frame-expert/create-diagram/instructions.md +0 -142
  189. package/.bmad/bmm/workflows/frame-expert/create-diagram/workflow.yaml +0 -24
  190. package/.bmad/bmm/workflows/frame-expert/create-flowchart/checklist.md +0 -49
  191. package/.bmad/bmm/workflows/frame-expert/create-flowchart/instructions.md +0 -242
  192. package/.bmad/bmm/workflows/frame-expert/create-flowchart/workflow.yaml +0 -27
  193. package/.bmad/bmm/workflows/frame-expert/create-wireframe/checklist.md +0 -38
  194. package/.bmad/bmm/workflows/frame-expert/create-wireframe/instructions.md +0 -133
  195. package/.bmad/bmm/workflows/frame-expert/create-wireframe/workflow.yaml +0 -23
  196. package/.bmad/bmm/workflows/techdoc/documentation-standards.md +0 -262
  197. package/.bmad/bmm/workflows/testarch/atdd/atdd-checklist-template.md +0 -363
  198. package/.bmad/bmm/workflows/testarch/atdd/checklist.md +0 -373
  199. package/.bmad/bmm/workflows/testarch/atdd/instructions.md +0 -785
  200. package/.bmad/bmm/workflows/testarch/atdd/workflow.yaml +0 -45
  201. package/.bmad/bmm/workflows/testarch/automate/checklist.md +0 -580
  202. package/.bmad/bmm/workflows/testarch/automate/instructions.md +0 -1303
  203. package/.bmad/bmm/workflows/testarch/automate/workflow.yaml +0 -52
  204. package/.bmad/bmm/workflows/testarch/ci/checklist.md +0 -246
  205. package/.bmad/bmm/workflows/testarch/ci/github-actions-template.yaml +0 -165
  206. package/.bmad/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +0 -128
  207. package/.bmad/bmm/workflows/testarch/ci/instructions.md +0 -517
  208. package/.bmad/bmm/workflows/testarch/ci/workflow.yaml +0 -45
  209. package/.bmad/bmm/workflows/testarch/framework/checklist.md +0 -321
  210. package/.bmad/bmm/workflows/testarch/framework/instructions.md +0 -455
  211. package/.bmad/bmm/workflows/testarch/framework/workflow.yaml +0 -47
  212. package/.bmad/bmm/workflows/testarch/nfr-assess/checklist.md +0 -405
  213. package/.bmad/bmm/workflows/testarch/nfr-assess/instructions.md +0 -722
  214. package/.bmad/bmm/workflows/testarch/nfr-assess/nfr-report-template.md +0 -443
  215. package/.bmad/bmm/workflows/testarch/nfr-assess/workflow.yaml +0 -47
  216. package/.bmad/bmm/workflows/testarch/test-design/checklist.md +0 -234
  217. package/.bmad/bmm/workflows/testarch/test-design/instructions.md +0 -782
  218. package/.bmad/bmm/workflows/testarch/test-design/test-design-template.md +0 -285
  219. package/.bmad/bmm/workflows/testarch/test-design/workflow.yaml +0 -48
  220. package/.bmad/bmm/workflows/testarch/test-review/checklist.md +0 -470
  221. package/.bmad/bmm/workflows/testarch/test-review/instructions.md +0 -608
  222. package/.bmad/bmm/workflows/testarch/test-review/test-review-template.md +0 -388
  223. package/.bmad/bmm/workflows/testarch/test-review/workflow.yaml +0 -46
  224. package/.bmad/bmm/workflows/testarch/trace/checklist.md +0 -654
  225. package/.bmad/bmm/workflows/testarch/trace/instructions.md +0 -1045
  226. package/.bmad/bmm/workflows/testarch/trace/trace-template.md +0 -673
  227. package/.bmad/bmm/workflows/testarch/trace/workflow.yaml +0 -55
  228. package/.bmad/bmm/workflows/workflow-status/init/instructions.md +0 -334
  229. package/.bmad/bmm/workflows/workflow-status/init/workflow.yaml +0 -28
  230. package/.bmad/bmm/workflows/workflow-status/instructions.md +0 -388
  231. package/.bmad/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +0 -138
  232. package/.bmad/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +0 -126
  233. package/.bmad/bmm/workflows/workflow-status/paths/game-design.yaml +0 -52
  234. package/.bmad/bmm/workflows/workflow-status/paths/method-brownfield.yaml +0 -122
  235. package/.bmad/bmm/workflows/workflow-status/paths/method-greenfield.yaml +0 -113
  236. package/.bmad/bmm/workflows/workflow-status/paths/quick-flow-brownfield.yaml +0 -58
  237. package/.bmad/bmm/workflows/workflow-status/paths/quick-flow-greenfield.yaml +0 -47
  238. package/.bmad/bmm/workflows/workflow-status/project-levels.yaml +0 -59
  239. package/.bmad/bmm/workflows/workflow-status/workflow-status-template.yaml +0 -24
  240. package/.bmad/bmm/workflows/workflow-status/workflow.yaml +0 -28
  241. package/.bmad/core/agents/bmad-master.md +0 -72
  242. package/.bmad/core/agents/bmad-web-orchestrator.agent.xml +0 -113
  243. package/.bmad/core/config.yaml +0 -11
  244. package/.bmad/core/tasks/adv-elicit-methods.csv +0 -39
  245. package/.bmad/core/tasks/advanced-elicitation-methods.csv +0 -21
  246. package/.bmad/core/tasks/advanced-elicitation.xml +0 -106
  247. package/.bmad/core/tasks/index-docs.xml +0 -65
  248. package/.bmad/core/tasks/validate-workflow.xml +0 -89
  249. package/.bmad/core/tasks/workflow.xml +0 -270
  250. package/.bmad/core/tools/shard-doc.xml +0 -109
  251. package/.bmad/core/workflows/brainstorming/README.md +0 -261
  252. package/.bmad/core/workflows/brainstorming/brain-methods.csv +0 -36
  253. package/.bmad/core/workflows/brainstorming/instructions.md +0 -315
  254. package/.bmad/core/workflows/brainstorming/template.md +0 -106
  255. package/.bmad/core/workflows/brainstorming/workflow.yaml +0 -38
  256. package/.bmad/core/workflows/party-mode/instructions.md +0 -203
  257. package/.bmad/core/workflows/party-mode/workflow.yaml +0 -28
  258. package/.bmad/docs/claude-code-instructions.md +0 -25
  259. package/.claude/commands/BMad/analyst.md +0 -88
  260. package/.claude/commands/BMad/architect.md +0 -89
  261. package/.claude/commands/BMad/bmad-master.md +0 -114
  262. package/.claude/commands/BMad/bmad-orchestrator.md +0 -151
  263. package/.claude/commands/BMad/dev.md +0 -85
  264. package/.claude/commands/BMad/pm.md +0 -88
  265. package/.claude/commands/BMad/po.md +0 -83
  266. package/.claude/commands/BMad/qa.md +0 -91
  267. package/.claude/commands/BMad/sm.md +0 -69
  268. package/.claude/commands/BMad/tasks/advanced-elicitation.md +0 -123
  269. package/.claude/commands/BMad/tasks/apply-qa-fixes.md +0 -154
  270. package/.claude/commands/BMad/tasks/brownfield-create-epic.md +0 -166
  271. package/.claude/commands/BMad/tasks/brownfield-create-story.md +0 -153
  272. package/.claude/commands/BMad/tasks/correct-course.md +0 -76
  273. package/.claude/commands/BMad/tasks/create-brownfield-story.md +0 -318
  274. package/.claude/commands/BMad/tasks/create-deep-research-prompt.md +0 -284
  275. package/.claude/commands/BMad/tasks/create-doc.md +0 -107
  276. package/.claude/commands/BMad/tasks/create-next-story.md +0 -118
  277. package/.claude/commands/BMad/tasks/document-project.md +0 -349
  278. package/.claude/commands/BMad/tasks/execute-checklist.md +0 -92
  279. package/.claude/commands/BMad/tasks/facilitate-brainstorming-session.md +0 -142
  280. package/.claude/commands/BMad/tasks/generate-ai-frontend-prompt.md +0 -57
  281. package/.claude/commands/BMad/tasks/index-docs.md +0 -179
  282. package/.claude/commands/BMad/tasks/kb-mode-interaction.md +0 -81
  283. package/.claude/commands/BMad/tasks/nfr-assess.md +0 -349
  284. package/.claude/commands/BMad/tasks/qa-gate.md +0 -167
  285. package/.claude/commands/BMad/tasks/review-story.md +0 -320
  286. package/.claude/commands/BMad/tasks/risk-profile.md +0 -359
  287. package/.claude/commands/BMad/tasks/shard-doc.md +0 -191
  288. package/.claude/commands/BMad/tasks/test-design.md +0 -180
  289. package/.claude/commands/BMad/tasks/trace-requirements.md +0 -270
  290. package/.claude/commands/BMad/tasks/validate-next-story.md +0 -140
  291. package/.claude/commands/BMad/ux-expert.md +0 -73
  292. package/.claude/commands/bmad/bmm/agents/analyst.md +0 -14
  293. package/.claude/commands/bmad/bmm/agents/architect.md +0 -14
  294. package/.claude/commands/bmad/bmm/agents/dev.md +0 -14
  295. package/.claude/commands/bmad/bmm/agents/frame-expert.md +0 -14
  296. package/.claude/commands/bmad/bmm/agents/pm.md +0 -14
  297. package/.claude/commands/bmad/bmm/agents/sm.md +0 -14
  298. package/.claude/commands/bmad/bmm/agents/tea.md +0 -14
  299. package/.claude/commands/bmad/bmm/agents/tech-writer.md +0 -14
  300. package/.claude/commands/bmad/bmm/agents/ux-designer.md +0 -14
  301. package/.claude/commands/bmad/bmm/workflows/architecture.md +0 -13
  302. package/.claude/commands/bmad/bmm/workflows/brainstorm-project.md +0 -13
  303. package/.claude/commands/bmad/bmm/workflows/code-review.md +0 -13
  304. package/.claude/commands/bmad/bmm/workflows/correct-course.md +0 -13
  305. package/.claude/commands/bmad/bmm/workflows/create-dataflow.md +0 -13
  306. package/.claude/commands/bmad/bmm/workflows/create-diagram.md +0 -13
  307. package/.claude/commands/bmad/bmm/workflows/create-epics-and-stories.md +0 -13
  308. package/.claude/commands/bmad/bmm/workflows/create-flowchart.md +0 -13
  309. package/.claude/commands/bmad/bmm/workflows/create-story.md +0 -13
  310. package/.claude/commands/bmad/bmm/workflows/create-ux-design.md +0 -13
  311. package/.claude/commands/bmad/bmm/workflows/create-wireframe.md +0 -13
  312. package/.claude/commands/bmad/bmm/workflows/dev-story.md +0 -13
  313. package/.claude/commands/bmad/bmm/workflows/document-project.md +0 -13
  314. package/.claude/commands/bmad/bmm/workflows/domain-research.md +0 -13
  315. package/.claude/commands/bmad/bmm/workflows/epic-tech-context.md +0 -13
  316. package/.claude/commands/bmad/bmm/workflows/implementation-readiness.md +0 -13
  317. package/.claude/commands/bmad/bmm/workflows/prd.md +0 -13
  318. package/.claude/commands/bmad/bmm/workflows/product-brief.md +0 -13
  319. package/.claude/commands/bmad/bmm/workflows/research.md +0 -13
  320. package/.claude/commands/bmad/bmm/workflows/retrospective.md +0 -13
  321. package/.claude/commands/bmad/bmm/workflows/sprint-planning.md +0 -13
  322. package/.claude/commands/bmad/bmm/workflows/story-context.md +0 -13
  323. package/.claude/commands/bmad/bmm/workflows/story-done.md +0 -13
  324. package/.claude/commands/bmad/bmm/workflows/story-ready.md +0 -13
  325. package/.claude/commands/bmad/bmm/workflows/tech-spec.md +0 -13
  326. package/.claude/commands/bmad/bmm/workflows/workflow-init.md +0 -13
  327. package/.claude/commands/bmad/bmm/workflows/workflow-status.md +0 -13
  328. package/.claude/commands/bmad/core/agents/bmad-master.md +0 -14
  329. package/.claude/commands/bmad/core/tasks/advanced-elicitation.md +0 -9
  330. package/.claude/commands/bmad/core/tasks/index-docs.md +0 -9
  331. package/.claude/commands/bmad/core/tools/shard-doc.md +0 -9
  332. package/.claude/commands/bmad/core/workflows/brainstorming.md +0 -13
  333. package/.claude/commands/bmad/core/workflows/party-mode.md +0 -13
  334. package/.claude/github-star-reminder.txt +0 -1
  335. package/.claude/hooks/bmad-party-manager.sh +0 -225
  336. package/.claude/hooks/stop.sh +0 -221
  337. package/.claude/piper-voices-dir.txt +0 -1
  338. package/.mcp.json +0 -88
  339. package/RELEASE_NOTES_v2.4.0_DRAFT.md +0 -116
  340. package/RELEASE_NOTES_v2.4.1_DRAFT.md +0 -61
  341. package/docs/2025-11-15_15-14-33.snagx +0 -0
  342. package/docs/Screenshot 2025-11-15 151325.png +0 -0
  343. package/docs/Screenshot 2025-11-15 151432.png +0 -0
  344. package/docs/macos-piper-issue.md +0 -172
  345. package/docs/stargazer-cms-prd.md +0 -1918
  346. package/docs/whatsapp-plugin-github-issue.md +0 -393
  347. package/docs/whatsapp-tts-plugin-feasibility.md +0 -418
  348. package/docs/whatsapp-tts-standalone-plugin.md +0 -628
  349. package/github-profile-draft.md +0 -57
  350. package/linkedin/vibe-coding-and-pulseaudio.md +0 -121
  351. package/mcp-server/agentvibes.db +0 -0
  352. package/scripts/audio-tunnel.config +0 -17
  353. package/v4-backup/.bmad-core/agent-teams/team-all.yaml +0 -15
  354. package/v4-backup/.bmad-core/agent-teams/team-fullstack.yaml +0 -19
  355. package/v4-backup/.bmad-core/agent-teams/team-ide-minimal.yaml +0 -11
  356. package/v4-backup/.bmad-core/agent-teams/team-no-ui.yaml +0 -14
  357. package/v4-backup/.bmad-core/agents/analyst.md +0 -84
  358. package/v4-backup/.bmad-core/agents/architect.md +0 -85
  359. package/v4-backup/.bmad-core/agents/bmad-master.md +0 -110
  360. package/v4-backup/.bmad-core/agents/bmad-orchestrator.md +0 -147
  361. package/v4-backup/.bmad-core/agents/dev.md +0 -81
  362. package/v4-backup/.bmad-core/agents/pm.md +0 -84
  363. package/v4-backup/.bmad-core/agents/po.md +0 -79
  364. package/v4-backup/.bmad-core/agents/qa.md +0 -87
  365. package/v4-backup/.bmad-core/agents/sm.md +0 -65
  366. package/v4-backup/.bmad-core/agents/ux-expert.md +0 -69
  367. package/v4-backup/.bmad-core/checklists/architect-checklist.md +0 -440
  368. package/v4-backup/.bmad-core/checklists/change-checklist.md +0 -184
  369. package/v4-backup/.bmad-core/checklists/pm-checklist.md +0 -372
  370. package/v4-backup/.bmad-core/checklists/po-master-checklist.md +0 -434
  371. package/v4-backup/.bmad-core/checklists/story-dod-checklist.md +0 -96
  372. package/v4-backup/.bmad-core/checklists/story-draft-checklist.md +0 -155
  373. package/v4-backup/.bmad-core/core-config.yaml +0 -22
  374. package/v4-backup/.bmad-core/data/bmad-kb.md +0 -809
  375. package/v4-backup/.bmad-core/data/brainstorming-techniques.md +0 -38
  376. package/v4-backup/.bmad-core/data/elicitation-methods.md +0 -156
  377. package/v4-backup/.bmad-core/data/technical-preferences.md +0 -5
  378. package/v4-backup/.bmad-core/data/test-levels-framework.md +0 -148
  379. package/v4-backup/.bmad-core/data/test-priorities-matrix.md +0 -174
  380. package/v4-backup/.bmad-core/enhanced-ide-development-workflow.md +0 -248
  381. package/v4-backup/.bmad-core/install-manifest.yaml +0 -230
  382. package/v4-backup/.bmad-core/tasks/advanced-elicitation.md +0 -119
  383. package/v4-backup/.bmad-core/tasks/apply-qa-fixes.md +0 -150
  384. package/v4-backup/.bmad-core/tasks/brownfield-create-epic.md +0 -162
  385. package/v4-backup/.bmad-core/tasks/brownfield-create-story.md +0 -149
  386. package/v4-backup/.bmad-core/tasks/correct-course.md +0 -72
  387. package/v4-backup/.bmad-core/tasks/create-brownfield-story.md +0 -314
  388. package/v4-backup/.bmad-core/tasks/create-deep-research-prompt.md +0 -280
  389. package/v4-backup/.bmad-core/tasks/create-doc.md +0 -103
  390. package/v4-backup/.bmad-core/tasks/create-next-story.md +0 -114
  391. package/v4-backup/.bmad-core/tasks/document-project.md +0 -345
  392. package/v4-backup/.bmad-core/tasks/execute-checklist.md +0 -88
  393. package/v4-backup/.bmad-core/tasks/facilitate-brainstorming-session.md +0 -138
  394. package/v4-backup/.bmad-core/tasks/generate-ai-frontend-prompt.md +0 -53
  395. package/v4-backup/.bmad-core/tasks/index-docs.md +0 -175
  396. package/v4-backup/.bmad-core/tasks/kb-mode-interaction.md +0 -77
  397. package/v4-backup/.bmad-core/tasks/nfr-assess.md +0 -345
  398. package/v4-backup/.bmad-core/tasks/qa-gate.md +0 -163
  399. package/v4-backup/.bmad-core/tasks/review-story.md +0 -316
  400. package/v4-backup/.bmad-core/tasks/risk-profile.md +0 -355
  401. package/v4-backup/.bmad-core/tasks/shard-doc.md +0 -187
  402. package/v4-backup/.bmad-core/tasks/test-design.md +0 -176
  403. package/v4-backup/.bmad-core/tasks/trace-requirements.md +0 -266
  404. package/v4-backup/.bmad-core/tasks/validate-next-story.md +0 -136
  405. package/v4-backup/.bmad-core/templates/architecture-tmpl.yaml +0 -651
  406. package/v4-backup/.bmad-core/templates/brainstorming-output-tmpl.yaml +0 -156
  407. package/v4-backup/.bmad-core/templates/brownfield-architecture-tmpl.yaml +0 -477
  408. package/v4-backup/.bmad-core/templates/brownfield-prd-tmpl.yaml +0 -281
  409. package/v4-backup/.bmad-core/templates/competitor-analysis-tmpl.yaml +0 -307
  410. package/v4-backup/.bmad-core/templates/front-end-architecture-tmpl.yaml +0 -219
  411. package/v4-backup/.bmad-core/templates/front-end-spec-tmpl.yaml +0 -350
  412. package/v4-backup/.bmad-core/templates/fullstack-architecture-tmpl.yaml +0 -824
  413. package/v4-backup/.bmad-core/templates/market-research-tmpl.yaml +0 -253
  414. package/v4-backup/.bmad-core/templates/prd-tmpl.yaml +0 -203
  415. package/v4-backup/.bmad-core/templates/project-brief-tmpl.yaml +0 -222
  416. package/v4-backup/.bmad-core/templates/qa-gate-tmpl.yaml +0 -103
  417. package/v4-backup/.bmad-core/templates/story-tmpl.yaml +0 -138
  418. package/v4-backup/.bmad-core/user-guide.md +0 -577
  419. package/v4-backup/.bmad-core/utils/bmad-doc-template.md +0 -327
  420. package/v4-backup/.bmad-core/utils/workflow-management.md +0 -71
  421. package/v4-backup/.bmad-core/workflows/brownfield-fullstack.yaml +0 -298
  422. package/v4-backup/.bmad-core/workflows/brownfield-service.yaml +0 -188
  423. package/v4-backup/.bmad-core/workflows/brownfield-ui.yaml +0 -198
  424. package/v4-backup/.bmad-core/workflows/greenfield-fullstack.yaml +0 -241
  425. package/v4-backup/.bmad-core/workflows/greenfield-service.yaml +0 -207
  426. package/v4-backup/.bmad-core/workflows/greenfield-ui.yaml +0 -236
  427. package/v4-backup/.bmad-core/working-in-the-brownfield.md +0 -606
@@ -17,6 +17,11 @@ function checkPython() {
17
17
  const pythonCommands = ['python3', 'python', 'py'];
18
18
 
19
19
  for (const cmd of pythonCommands) {
20
+ // Security: Validate command is in our allowlist only
21
+ if (!pythonCommands.includes(cmd)) {
22
+ continue;
23
+ }
24
+
20
25
  try {
21
26
  const version = execSync(`${cmd} --version`, { encoding: 'utf8', stdio: 'pipe' });
22
27
  console.log(`✅ Found ${cmd}: ${version.trim()}`);
@@ -31,6 +36,13 @@ function checkPython() {
31
36
 
32
37
  // Function to check if mcp is installed
33
38
  function checkMcpInstalled(pythonCmd) {
39
+ // Security: Validate pythonCmd is in allowlist
40
+ const allowedCommands = ['python3', 'python', 'py'];
41
+ if (!allowedCommands.includes(pythonCmd)) {
42
+ console.error('❌ Invalid Python command');
43
+ return false;
44
+ }
45
+
34
46
  try {
35
47
  execSync(`${pythonCmd} -c "import mcp"`, { stdio: 'pipe' });
36
48
  return true;
@@ -41,6 +53,13 @@ function checkMcpInstalled(pythonCmd) {
41
53
 
42
54
  // Function to install mcp package
43
55
  function installMcp(pythonCmd) {
56
+ // Security: Validate pythonCmd is in allowlist
57
+ const allowedCommands = ['python3', 'python', 'py'];
58
+ if (!allowedCommands.includes(pythonCmd)) {
59
+ console.error('❌ Invalid Python command');
60
+ return false;
61
+ }
62
+
44
63
  try {
45
64
  console.log('\n📦 Installing Python mcp package...');
46
65
  const command = `${pythonCmd} -m pip install --user mcp`;
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.12.3",
4
+ "version": "2.12.5",
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": [
@@ -18,6 +18,18 @@ else
18
18
  PULSE_SOCKET="${PULSE_SOCKET:-/mnt/wslg/PulseServer}"
19
19
  fi
20
20
 
21
+ # Security: Validate TUNNEL_PORT is numeric only
22
+ if ! [[ "$TUNNEL_PORT" =~ ^[0-9]+$ ]]; then
23
+ echo "❌ Error: TUNNEL_PORT must be numeric (got: $TUNNEL_PORT)"
24
+ exit 1
25
+ fi
26
+
27
+ # Security: Validate REMOTE_HOST doesn't contain dangerous characters
28
+ if [[ "$REMOTE_HOST" =~ [';|&$`<>(){}'] ]]; then
29
+ echo "❌ Error: REMOTE_HOST contains invalid characters"
30
+ exit 1
31
+ fi
32
+
21
33
  echo "🔧 Complete Audio Tunnel Fix"
22
34
  echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
23
35
  echo ""
@@ -57,14 +69,15 @@ kill_remote_stale_processes() {
57
69
  echo "1️⃣ Checking for stale SSH processes on ${REMOTE_HOST}..."
58
70
 
59
71
  # Get list of processes using the port
60
- STALE_PROCS=$(ssh ${REMOTE_HOST} "sudo lsof -i :${TUNNEL_PORT} 2>/dev/null | grep -v COMMAND || echo 'none'")
72
+ # Security: Variables are now validated at script start, and TUNNEL_PORT is numeric-only
73
+ STALE_PROCS=$(ssh "${REMOTE_HOST}" "sudo lsof -i :${TUNNEL_PORT} 2>/dev/null | grep -v COMMAND || echo 'none'")
61
74
 
62
75
  if [ "$STALE_PROCS" != "none" ] && [ -n "$STALE_PROCS" ]; then
63
76
  echo " 🔍 Found stale processes:"
64
77
  echo "$STALE_PROCS" | sed 's/^/ /'
65
78
  echo ""
66
79
  echo " 🗑️ Killing stale processes..."
67
- ssh ${REMOTE_HOST} "sudo fuser -k ${TUNNEL_PORT}/tcp 2>/dev/null || true"
80
+ ssh "${REMOTE_HOST}" "sudo fuser -k ${TUNNEL_PORT}/tcp 2>/dev/null || true"
68
81
  echo " ✅ Stale processes killed"
69
82
  sleep 2
70
83
  else
@@ -107,6 +120,7 @@ fix_socat_bridge() {
107
120
  kill_local_ssh_tunnels() {
108
121
  echo "3️⃣ Killing local stale SSH tunnels..."
109
122
 
123
+ # Security: Quote REMOTE_HOST to prevent command injection
110
124
  if pgrep -f "ssh.*${REMOTE_HOST}" > /dev/null; then
111
125
  pkill -f "ssh.*${REMOTE_HOST}" 2>/dev/null || true
112
126
  echo " ✅ Killed stale SSH tunnels"
@@ -122,7 +136,8 @@ create_ssh_tunnel() {
122
136
  echo "4️⃣ Creating fresh SSH tunnel..."
123
137
 
124
138
  # Create tunnel in background
125
- ssh -f -N -R ${TUNNEL_PORT}:localhost:${TUNNEL_PORT} ${REMOTE_HOST} 2>/dev/null || {
139
+ # Security: Quote variables to prevent command injection
140
+ ssh -f -N -R "${TUNNEL_PORT}:localhost:${TUNNEL_PORT}" "${REMOTE_HOST}" 2>/dev/null || {
126
141
  echo " ⚠️ Tunnel creation returned warning (this is normal if tunnel already exists)"
127
142
  }
128
143
 
@@ -130,7 +145,7 @@ create_ssh_tunnel() {
130
145
 
131
146
  # Verify tunnel exists on remote
132
147
  echo " 🔍 Verifying tunnel on ${REMOTE_HOST}..."
133
- if ssh ${REMOTE_HOST} "netstat -tlnp 2>/dev/null | grep -q ${TUNNEL_PORT}"; then
148
+ if ssh "${REMOTE_HOST}" "netstat -tlnp 2>/dev/null | grep -q ${TUNNEL_PORT}"; then
134
149
  echo " ✅ SSH tunnel established successfully"
135
150
  else
136
151
  echo " ❌ Failed to establish SSH tunnel"
@@ -144,11 +159,12 @@ test_audio() {
144
159
  echo "5️⃣ Testing audio connection..."
145
160
 
146
161
  # Test PulseAudio connection
147
- if ssh ${REMOTE_HOST} "export PULSE_SERVER=tcp:localhost:${TUNNEL_PORT} && timeout 5 pactl info > /dev/null 2>&1"; then
162
+ # Security: Quote variables to prevent command injection
163
+ if ssh "${REMOTE_HOST}" "export PULSE_SERVER=tcp:localhost:${TUNNEL_PORT} && timeout 5 pactl info > /dev/null 2>&1"; then
148
164
  echo " ✅ PulseAudio connection successful"
149
165
 
150
166
  # Get server info
151
- SERVER_INFO=$(ssh ${REMOTE_HOST} "export PULSE_SERVER=tcp:localhost:${TUNNEL_PORT} && pactl info | head -3")
167
+ SERVER_INFO=$(ssh "${REMOTE_HOST}" "export PULSE_SERVER=tcp:localhost:${TUNNEL_PORT} && pactl info | head -3")
152
168
  echo " 📊 Server Info:"
153
169
  echo "$SERVER_INFO" | sed 's/^/ /'
154
170
  else
@@ -154,6 +154,16 @@ 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
+
157
167
  /**
158
168
  * Find matching voice name using fuzzy matching
159
169
  * Supports partial matches like "ryan" → "en_US-ryan-high"
@@ -218,7 +228,10 @@ export async function previewVoice(voiceName, options = {}) {
218
228
  }
219
229
 
220
230
  try {
221
- execSync(`bash "${playTtsPath}" "${text}" "${matchedVoice}"`, {
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}`, {
222
235
  stdio: 'inherit',
223
236
  cwd: targetDir,
224
237
  });
package/src/installer.js CHANGED
@@ -128,27 +128,27 @@ function showReleaseInfo() {
128
128
  console.log(
129
129
  boxen(
130
130
  chalk.white.bold('═══════════════════════════════════════════════════════════════\n') +
131
- chalk.cyan.bold(' 📦 AgentVibes v2.12.0 - .agentvibes/ Directory Migration\n') +
131
+ chalk.cyan.bold(' 📦 AgentVibes v2.12.5 - Code Quality Improvements\n') +
132
132
  chalk.white.bold('═══════════════════════════════════════════════════════════════\n\n') +
133
133
  chalk.green.bold('🎙️ WHAT\'S NEW:\n\n') +
134
- chalk.cyan('AgentVibes v2.12.0 introduces a comprehensive directory reorganization,\n') +
135
- chalk.cyan('migrating all AgentVibes configuration to a dedicated .agentvibes/ directory.\n') +
136
- chalk.cyan('This eliminates namespace confusion with Claude Code and provides a clear,\n') +
137
- chalk.cyan('predictable location for all AgentVibes state. Migration is fully automatic—\n') +
138
- chalk.cyan('your settings are seamlessly moved during upgrade. Also includes BMAD testing\n') +
139
- chalk.cyan('improvements and enhanced Piper voice installation.\n\n') +
134
+ chalk.cyan('AgentVibes v2.12.5 improves code quality by upgrading Sonar quality gates\n') +
135
+ chalk.cyan('and implementing best practices identified through static analysis. This\n') +
136
+ chalk.cyan('release includes enhanced input validation, improved shell command handling,\n') +
137
+ chalk.cyan('better file locking for atomic operations, and secure temporary directory\n') +
138
+ chalk.cyan('management while maintaining 100% backward compatibility.\n\n') +
140
139
  chalk.green.bold('✨ KEY HIGHLIGHTS:\n\n') +
141
- chalk.gray(' 📁 Dedicated .agentvibes/ Directory - Clear namespace separation\n') +
142
- chalk.gray(' 🔄 Automatic Migration - Seamless upgrade from old locations\n') +
143
- chalk.gray(' 100% Backward Compatible - No manual intervention needed\n') +
144
- chalk.gray(' 🧪 32 Passing Tests - Comprehensive migration validation\n') +
145
- chalk.gray(' 🎭 npx test-bmad-pr - One-line BMAD PR testing command\n') +
146
- chalk.gray(' 🎤 Enhanced Voice Detection - Better Piper installation status\n\n') +
147
- chalk.cyan('Configuration Migration:\n') +
148
- chalk.gray(' .claude/config/ .agentvibes/config/\n') +
149
- chalk.gray(' .claude/plugins/ .agentvibes/bmad/\n') +
150
- chalk.gray(' Automatic migration runs during update\n') +
151
- chalk.gray(' All settings and voice mappings preserved\n\n') +
140
+ chalk.gray(' Sonar Quality Gates Upgraded - Enhanced code quality standards\n') +
141
+ chalk.gray(' 🔒 18 Code Improvements - Better input validation and command handling\n') +
142
+ chalk.gray(' 🧪 110/110 Tests Passing - All functionality verified and working\n') +
143
+ chalk.gray(' 🔄 Zero Breaking Changes - Fully backward compatible with v2.12.4\n') +
144
+ chalk.gray(' 📊 162 Lines Enhanced - Code quality improvements across 8 files\n') +
145
+ chalk.gray(' 💡 Best Practices - Improved error handling and validation\n\n') +
146
+ chalk.cyan('Technical Improvements:\n') +
147
+ chalk.gray(' Enhanced input validation across all interfaces\n') +
148
+ chalk.gray(' Improved shell command handling with proper escaping\n') +
149
+ chalk.gray(' Better file system operations with path validation\n') +
150
+ chalk.gray(' Atomic PID file operations with file locking\n') +
151
+ chalk.gray(' • Cleaner code with debug output removed\n\n') +
152
152
  chalk.white.bold('═══════════════════════════════════════════════════════════════\n\n') +
153
153
  chalk.gray('📖 Full Release Notes: RELEASE_NOTES.md\n') +
154
154
  chalk.gray('🌐 Website: https://agentvibes.org\n') +
@@ -200,9 +200,26 @@ function getUserShell() {
200
200
  function execScript(scriptPath, options = {}) {
201
201
  const { shell, shellConfig } = getUserShell();
202
202
 
203
- // Source the shell config to load environment variables, then run the script
204
- // Don't wrap scriptPath in quotes - it may contain arguments
205
- const command = `source "${shellConfig}" 2>/dev/null; ${shell} ${scriptPath}`;
203
+ // Security: Properly escape the scriptPath to prevent command injection
204
+ // Split scriptPath into command and arguments
205
+ const parts = scriptPath.split(/\s+/);
206
+ const scriptFile = parts[0];
207
+ const args = parts.slice(1);
208
+
209
+ // Validate that the script file doesn't contain shell metacharacters
210
+ if (scriptFile.match(/[;&|`$(){}[\]<>]/)) {
211
+ throw new Error('Invalid characters in script path');
212
+ }
213
+
214
+ // Escape each argument properly
215
+ const escapedArgs = args.map(arg => {
216
+ // Replace single quotes with '\'' (end quote, escaped quote, start quote)
217
+ return `'${arg.replace(/'/g, "'\\''")}'`;
218
+ }).join(' ');
219
+
220
+ // Build command with properly escaped components
221
+ const scriptCommand = escapedArgs ? `'${scriptFile}' ${escapedArgs}` : `'${scriptFile}'`;
222
+ const command = `source "${shellConfig}" 2>/dev/null; ${shell} ${scriptCommand}`;
206
223
 
207
224
  return execSync(command, {
208
225
  shell: shell,
@@ -537,7 +554,8 @@ async function copyHookFiles(targetDir, spinner) {
537
554
  await fs.copyFile(srcPath, destPath);
538
555
 
539
556
  if (file.endsWith('.sh')) {
540
- await fs.chmod(destPath, 0o755);
557
+ // Security: Use more restrictive permissions (owner: rwx, group: r-x, others: ---)
558
+ await fs.chmod(destPath, 0o750);
541
559
  console.log(chalk.gray(` ✓ ${file} (executable)`));
542
560
  } else {
543
561
  console.log(chalk.gray(` ✓ ${file}`));
@@ -786,12 +804,30 @@ async function checkAndInstallPiper(targetDir, options) {
786
804
  }
787
805
  }
788
806
 
807
+ /**
808
+ * Security: Validate that a path is safe and doesn't contain traversal sequences
809
+ * @param {string} targetPath - Path to validate
810
+ * @param {string} basePath - Base directory that targetPath must be within
811
+ * @returns {boolean} - True if path is safe
812
+ */
813
+ function isPathSafe(targetPath, basePath) {
814
+ const resolved = path.resolve(targetPath);
815
+ const baseResolved = path.resolve(basePath);
816
+ return resolved.startsWith(baseResolved);
817
+ }
818
+
789
819
  /**
790
820
  * Process TTS_INJECTION markers in BMAD files
791
821
  * Replaces markers with actual TTS instructions for both party mode and individual agents
792
822
  * @param {string} bmadPath - Path to BMAD installation (e.g., .bmad or bmad)
793
823
  */
794
824
  async function processBmadTtsInjections(bmadPath) {
825
+ // Security: Validate bmadPath doesn't contain path traversal
826
+ const cwd = process.cwd();
827
+ if (!isPathSafe(bmadPath, cwd)) {
828
+ console.error(chalk.red('⚠️ Security: Invalid BMAD path detected'));
829
+ return;
830
+ }
795
831
  const partyModeMarker = '<!-- TTS_INJECTION:party-mode -->';
796
832
  const agentTtsMarker = '<!-- TTS_INJECTION:agent-tts -->';
797
833
 
@@ -1395,7 +1431,6 @@ async function install(options = {}) {
1395
1431
  console.log(chalk.yellow(` • ElevenLabs API key: Set manually later`));
1396
1432
  }
1397
1433
  } else {
1398
- console.error(chalk.red(` DEBUG: In Piper block, selectedProvider = ${selectedProvider}`));
1399
1434
  // Check for installed Piper voices
1400
1435
  const piperVoicesDir = path.join(process.env.HOME || process.env.USERPROFILE, '.claude', 'piper-voices');
1401
1436
  let installedVoices = [];
@@ -1411,10 +1446,8 @@ async function install(options = {}) {
1411
1446
  ];
1412
1447
 
1413
1448
  try {
1414
- console.error(chalk.gray(` Debug: Checking ${piperVoicesDir}`));
1415
1449
  if (fsSync.existsSync(piperVoicesDir)) {
1416
1450
  const files = fsSync.readdirSync(piperVoicesDir);
1417
- console.error(chalk.gray(` Debug: Found ${files.length} files`));
1418
1451
  installedVoices = files
1419
1452
  .filter(f => f.endsWith('.onnx'))
1420
1453
  .map(f => {
@@ -1426,12 +1459,10 @@ async function install(options = {}) {
1426
1459
  return { name: voiceName, path: voicePath, size: `${sizeMB}M` };
1427
1460
  } catch (statErr) {
1428
1461
  // Skip files that can't be read (broken symlinks, etc)
1429
- console.error(chalk.gray(` Debug: Skipped ${voiceName} (${statErr.message})`));
1430
1462
  return null;
1431
1463
  }
1432
1464
  })
1433
1465
  .filter(v => v !== null);
1434
- console.error(chalk.gray(` Debug: ${installedVoices.length} valid voices after filtering`));
1435
1466
 
1436
1467
  // Check which common voices are missing
1437
1468
  for (const voice of commonVoices) {
@@ -1439,13 +1470,10 @@ async function install(options = {}) {
1439
1470
  missingVoices.push(voice);
1440
1471
  }
1441
1472
  }
1442
- console.error(chalk.gray(` Debug: ${missingVoices.length} missing voices`));
1443
1473
  } else {
1444
- console.error(chalk.gray(` Debug: Directory does not exist`));
1445
1474
  missingVoices = commonVoices;
1446
1475
  }
1447
1476
  } catch (err) {
1448
- console.error(chalk.gray(` Debug: Error checking voices: ${err.message}`));
1449
1477
  // On error, show default message
1450
1478
  installedVoices = [];
1451
1479
  missingVoices = commonVoices;
@@ -1574,7 +1602,7 @@ async function install(options = {}) {
1574
1602
  );
1575
1603
 
1576
1604
  console.log(chalk.green.bold('\n✅ AgentVibes is Ready!'));
1577
- console.log(chalk.white(' TTS protocol automatically loads on every Claude Code session'));
1605
+ console.log(chalk.white(' TTS protocol automatically loads on every Claude session'));
1578
1606
  console.log(chalk.gray(' via SessionStart hook - no additional setup needed!\n'));
1579
1607
  console.log(chalk.cyan('🎤 Try these commands:'));
1580
1608
  console.log(chalk.white(' • /agent-vibes:list') + chalk.gray(' - See all available voices'));
@@ -88,5 +88,5 @@ teardown() {
88
88
  run "$PLAY_TTS"
89
89
 
90
90
  [ "$status" -eq 1 ]
91
- assert_output_contains "Usage:"
91
+ assert_output_contains "Error: No text provided"
92
92
  }
@@ -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&apos;t ready for review.","bmm",".bmad/bmm/agents/dev.md"
6
- "frame-expert","Saif","Visual Design & Diagramming Expert","📐","Expert Visual Designer &amp; 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