agentvibes 2.17.2 → 2.17.4

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 (339) hide show
  1. package/.bmad/_cfg/agent-manifest.csv +11 -0
  2. package/.bmad/_cfg/agent-voice-map.csv +11 -0
  3. package/.bmad/_cfg/agents/bmm-analyst.customize.yaml +42 -0
  4. package/.bmad/_cfg/agents/bmm-architect.customize.yaml +42 -0
  5. package/.bmad/_cfg/agents/bmm-dev.customize.yaml +42 -0
  6. package/.bmad/_cfg/agents/bmm-frame-expert.customize.yaml +42 -0
  7. package/.bmad/_cfg/agents/bmm-pm.customize.yaml +42 -0
  8. package/.bmad/_cfg/agents/bmm-sm.customize.yaml +42 -0
  9. package/.bmad/_cfg/agents/bmm-tea.customize.yaml +42 -0
  10. package/.bmad/_cfg/agents/bmm-tech-writer.customize.yaml +42 -0
  11. package/.bmad/_cfg/agents/bmm-ux-designer.customize.yaml +42 -0
  12. package/.bmad/_cfg/agents/core-bmad-master.customize.yaml +42 -0
  13. package/.bmad/_cfg/files-manifest.csv +243 -0
  14. package/.bmad/_cfg/ides/claude-code.yaml +6 -0
  15. package/.bmad/_cfg/manifest.yaml +9 -0
  16. package/.bmad/_cfg/task-manifest.csv +5 -0
  17. package/.bmad/_cfg/tool-manifest.csv +2 -0
  18. package/.bmad/_cfg/workflow-manifest.csv +38 -0
  19. package/.bmad/bmm/README.md +128 -0
  20. package/.bmad/bmm/agents/analyst.md +79 -0
  21. package/.bmad/bmm/agents/analyst.md.backup-pre-tts +75 -0
  22. package/.bmad/bmm/agents/architect.md +80 -0
  23. package/.bmad/bmm/agents/dev.md +70 -0
  24. package/.bmad/bmm/agents/frame-expert.md +72 -0
  25. package/.bmad/bmm/agents/pm.md +84 -0
  26. package/.bmad/bmm/agents/sm.md +93 -0
  27. package/.bmad/bmm/agents/tea.md +80 -0
  28. package/.bmad/bmm/agents/tech-writer.md +84 -0
  29. package/.bmad/bmm/agents/ux-designer.md +79 -0
  30. package/.bmad/bmm/config.yaml +17 -0
  31. package/.bmad/bmm/docs/README.md +236 -0
  32. package/.bmad/bmm/docs/agents-guide.md +1058 -0
  33. package/.bmad/bmm/docs/brownfield-guide.md +762 -0
  34. package/.bmad/bmm/docs/enterprise-agentic-development.md +686 -0
  35. package/.bmad/bmm/docs/faq.md +588 -0
  36. package/.bmad/bmm/docs/glossary.md +320 -0
  37. package/.bmad/bmm/docs/party-mode.md +224 -0
  38. package/.bmad/bmm/docs/quick-spec-flow.md +652 -0
  39. package/.bmad/bmm/docs/quick-start.md +376 -0
  40. package/.bmad/bmm/docs/scale-adaptive-system.md +612 -0
  41. package/.bmad/bmm/docs/test-architecture.md +396 -0
  42. package/.bmad/bmm/docs/workflow-architecture-reference.md +366 -0
  43. package/.bmad/bmm/docs/workflow-document-project-reference.md +489 -0
  44. package/.bmad/bmm/docs/workflows-analysis.md +370 -0
  45. package/.bmad/bmm/docs/workflows-implementation.md +286 -0
  46. package/.bmad/bmm/docs/workflows-planning.md +612 -0
  47. package/.bmad/bmm/docs/workflows-solutioning.md +554 -0
  48. package/.bmad/bmm/teams/default-party.csv +20 -0
  49. package/.bmad/bmm/teams/team-fullstack.yaml +13 -0
  50. package/.bmad/bmm/testarch/knowledge/ci-burn-in.md +675 -0
  51. package/.bmad/bmm/testarch/knowledge/component-tdd.md +486 -0
  52. package/.bmad/bmm/testarch/knowledge/contract-testing.md +957 -0
  53. package/.bmad/bmm/testarch/knowledge/data-factories.md +500 -0
  54. package/.bmad/bmm/testarch/knowledge/email-auth.md +721 -0
  55. package/.bmad/bmm/testarch/knowledge/error-handling.md +725 -0
  56. package/.bmad/bmm/testarch/knowledge/feature-flags.md +750 -0
  57. package/.bmad/bmm/testarch/knowledge/fixture-architecture.md +401 -0
  58. package/.bmad/bmm/testarch/knowledge/network-first.md +486 -0
  59. package/.bmad/bmm/testarch/knowledge/nfr-criteria.md +670 -0
  60. package/.bmad/bmm/testarch/knowledge/playwright-config.md +730 -0
  61. package/.bmad/bmm/testarch/knowledge/probability-impact.md +601 -0
  62. package/.bmad/bmm/testarch/knowledge/risk-governance.md +615 -0
  63. package/.bmad/bmm/testarch/knowledge/selective-testing.md +732 -0
  64. package/.bmad/bmm/testarch/knowledge/selector-resilience.md +527 -0
  65. package/.bmad/bmm/testarch/knowledge/test-healing-patterns.md +644 -0
  66. package/.bmad/bmm/testarch/knowledge/test-levels-framework.md +473 -0
  67. package/.bmad/bmm/testarch/knowledge/test-priorities-matrix.md +373 -0
  68. package/.bmad/bmm/testarch/knowledge/test-quality.md +664 -0
  69. package/.bmad/bmm/testarch/knowledge/timing-debugging.md +372 -0
  70. package/.bmad/bmm/testarch/knowledge/visual-debugging.md +524 -0
  71. package/.bmad/bmm/testarch/tea-index.csv +22 -0
  72. package/.bmad/bmm/workflows/1-analysis/brainstorm-project/instructions.md +112 -0
  73. package/.bmad/bmm/workflows/1-analysis/brainstorm-project/project-context.md +25 -0
  74. package/.bmad/bmm/workflows/1-analysis/brainstorm-project/workflow.yaml +26 -0
  75. package/.bmad/bmm/workflows/1-analysis/domain-research/instructions.md +425 -0
  76. package/.bmad/bmm/workflows/1-analysis/domain-research/template.md +180 -0
  77. package/.bmad/bmm/workflows/1-analysis/domain-research/workflow.yaml +28 -0
  78. package/.bmad/bmm/workflows/1-analysis/product-brief/checklist.md +115 -0
  79. package/.bmad/bmm/workflows/1-analysis/product-brief/instructions.md +524 -0
  80. package/.bmad/bmm/workflows/1-analysis/product-brief/template.md +181 -0
  81. package/.bmad/bmm/workflows/1-analysis/product-brief/workflow.yaml +45 -0
  82. package/.bmad/bmm/workflows/1-analysis/research/checklist-deep-prompt.md +144 -0
  83. package/.bmad/bmm/workflows/1-analysis/research/checklist-technical.md +249 -0
  84. package/.bmad/bmm/workflows/1-analysis/research/checklist.md +299 -0
  85. package/.bmad/bmm/workflows/1-analysis/research/claude-code/injections.yaml +114 -0
  86. package/.bmad/bmm/workflows/1-analysis/research/instructions-deep-prompt.md +438 -0
  87. package/.bmad/bmm/workflows/1-analysis/research/instructions-market.md +675 -0
  88. package/.bmad/bmm/workflows/1-analysis/research/instructions-router.md +134 -0
  89. package/.bmad/bmm/workflows/1-analysis/research/instructions-technical.md +534 -0
  90. package/.bmad/bmm/workflows/1-analysis/research/template-deep-prompt.md +94 -0
  91. package/.bmad/bmm/workflows/1-analysis/research/template-market.md +347 -0
  92. package/.bmad/bmm/workflows/1-analysis/research/template-technical.md +245 -0
  93. package/.bmad/bmm/workflows/1-analysis/research/workflow.yaml +44 -0
  94. package/.bmad/bmm/workflows/2-plan-workflows/create-epics-and-stories/epics-template.md +80 -0
  95. package/.bmad/bmm/workflows/2-plan-workflows/create-epics-and-stories/instructions.md +616 -0
  96. package/.bmad/bmm/workflows/2-plan-workflows/create-epics-and-stories/workflow.yaml +53 -0
  97. package/.bmad/bmm/workflows/2-plan-workflows/create-ux-design/checklist.md +310 -0
  98. package/.bmad/bmm/workflows/2-plan-workflows/create-ux-design/instructions.md +1308 -0
  99. package/.bmad/bmm/workflows/2-plan-workflows/create-ux-design/ux-design-template.md +145 -0
  100. package/.bmad/bmm/workflows/2-plan-workflows/create-ux-design/workflow.yaml +61 -0
  101. package/.bmad/bmm/workflows/2-plan-workflows/prd/checklist.md +346 -0
  102. package/.bmad/bmm/workflows/2-plan-workflows/prd/domain-complexity.csv +13 -0
  103. package/.bmad/bmm/workflows/2-plan-workflows/prd/instructions.md +703 -0
  104. package/.bmad/bmm/workflows/2-plan-workflows/prd/prd-template.md +204 -0
  105. package/.bmad/bmm/workflows/2-plan-workflows/prd/project-types.csv +11 -0
  106. package/.bmad/bmm/workflows/2-plan-workflows/prd/workflow.yaml +52 -0
  107. package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/checklist.md +217 -0
  108. package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/epics-template.md +74 -0
  109. package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/instructions-generate-stories.md +436 -0
  110. package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/instructions.md +980 -0
  111. package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/tech-spec-template.md +181 -0
  112. package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/user-story-template.md +90 -0
  113. package/.bmad/bmm/workflows/2-plan-workflows/tech-spec/workflow.yaml +58 -0
  114. package/.bmad/bmm/workflows/3-solutioning/architecture/architecture-patterns.yaml +321 -0
  115. package/.bmad/bmm/workflows/3-solutioning/architecture/architecture-template.md +103 -0
  116. package/.bmad/bmm/workflows/3-solutioning/architecture/checklist.md +240 -0
  117. package/.bmad/bmm/workflows/3-solutioning/architecture/decision-catalog.yaml +222 -0
  118. package/.bmad/bmm/workflows/3-solutioning/architecture/instructions.md +768 -0
  119. package/.bmad/bmm/workflows/3-solutioning/architecture/pattern-categories.csv +13 -0
  120. package/.bmad/bmm/workflows/3-solutioning/architecture/workflow.yaml +55 -0
  121. package/.bmad/bmm/workflows/3-solutioning/implementation-readiness/checklist.md +169 -0
  122. package/.bmad/bmm/workflows/3-solutioning/implementation-readiness/instructions.md +332 -0
  123. package/.bmad/bmm/workflows/3-solutioning/implementation-readiness/template.md +146 -0
  124. package/.bmad/bmm/workflows/3-solutioning/implementation-readiness/workflow.yaml +62 -0
  125. package/.bmad/bmm/workflows/4-implementation/code-review/backlog_template.md +12 -0
  126. package/.bmad/bmm/workflows/4-implementation/code-review/checklist.md +22 -0
  127. package/.bmad/bmm/workflows/4-implementation/code-review/instructions.md +398 -0
  128. package/.bmad/bmm/workflows/4-implementation/code-review/workflow.yaml +60 -0
  129. package/.bmad/bmm/workflows/4-implementation/correct-course/checklist.md +279 -0
  130. package/.bmad/bmm/workflows/4-implementation/correct-course/instructions.md +206 -0
  131. package/.bmad/bmm/workflows/4-implementation/correct-course/workflow.yaml +56 -0
  132. package/.bmad/bmm/workflows/4-implementation/create-story/checklist.md +240 -0
  133. package/.bmad/bmm/workflows/4-implementation/create-story/instructions.md +256 -0
  134. package/.bmad/bmm/workflows/4-implementation/create-story/template.md +51 -0
  135. package/.bmad/bmm/workflows/4-implementation/create-story/workflow.yaml +71 -0
  136. package/.bmad/bmm/workflows/4-implementation/dev-story/checklist.md +38 -0
  137. package/.bmad/bmm/workflows/4-implementation/dev-story/instructions.md +267 -0
  138. package/.bmad/bmm/workflows/4-implementation/dev-story/workflow.yaml +56 -0
  139. package/.bmad/bmm/workflows/4-implementation/epic-tech-context/checklist.md +17 -0
  140. package/.bmad/bmm/workflows/4-implementation/epic-tech-context/instructions.md +164 -0
  141. package/.bmad/bmm/workflows/4-implementation/epic-tech-context/template.md +76 -0
  142. package/.bmad/bmm/workflows/4-implementation/epic-tech-context/workflow.yaml +57 -0
  143. package/.bmad/bmm/workflows/4-implementation/retrospective/instructions.md +1443 -0
  144. package/.bmad/bmm/workflows/4-implementation/retrospective/workflow.yaml +56 -0
  145. package/.bmad/bmm/workflows/4-implementation/sprint-planning/checklist.md +33 -0
  146. package/.bmad/bmm/workflows/4-implementation/sprint-planning/instructions.md +234 -0
  147. package/.bmad/bmm/workflows/4-implementation/sprint-planning/sprint-status-template.yaml +55 -0
  148. package/.bmad/bmm/workflows/4-implementation/sprint-planning/workflow.yaml +49 -0
  149. package/.bmad/bmm/workflows/4-implementation/story-context/checklist.md +16 -0
  150. package/.bmad/bmm/workflows/4-implementation/story-context/context-template.xml +34 -0
  151. package/.bmad/bmm/workflows/4-implementation/story-context/instructions.md +209 -0
  152. package/.bmad/bmm/workflows/4-implementation/story-context/workflow.yaml +61 -0
  153. package/.bmad/bmm/workflows/4-implementation/story-done/instructions.md +111 -0
  154. package/.bmad/bmm/workflows/4-implementation/story-done/workflow.yaml +26 -0
  155. package/.bmad/bmm/workflows/4-implementation/story-ready/instructions.md +117 -0
  156. package/.bmad/bmm/workflows/4-implementation/story-ready/workflow.yaml +23 -0
  157. package/.bmad/bmm/workflows/document-project/checklist.md +245 -0
  158. package/.bmad/bmm/workflows/document-project/documentation-requirements.csv +12 -0
  159. package/.bmad/bmm/workflows/document-project/instructions.md +222 -0
  160. package/.bmad/bmm/workflows/document-project/templates/deep-dive-template.md +345 -0
  161. package/.bmad/bmm/workflows/document-project/templates/index-template.md +169 -0
  162. package/.bmad/bmm/workflows/document-project/templates/project-overview-template.md +103 -0
  163. package/.bmad/bmm/workflows/document-project/templates/project-scan-report-schema.json +160 -0
  164. package/.bmad/bmm/workflows/document-project/templates/source-tree-template.md +135 -0
  165. package/.bmad/bmm/workflows/document-project/workflow.yaml +29 -0
  166. package/.bmad/bmm/workflows/document-project/workflows/deep-dive-instructions.md +298 -0
  167. package/.bmad/bmm/workflows/document-project/workflows/deep-dive.yaml +31 -0
  168. package/.bmad/bmm/workflows/document-project/workflows/full-scan-instructions.md +1106 -0
  169. package/.bmad/bmm/workflows/document-project/workflows/full-scan.yaml +31 -0
  170. package/.bmad/bmm/workflows/frame-expert/_shared/excalidraw-helpers.md +127 -0
  171. package/.bmad/bmm/workflows/frame-expert/_shared/excalidraw-library.json +90 -0
  172. package/.bmad/bmm/workflows/frame-expert/_shared/excalidraw-templates.yaml +127 -0
  173. package/.bmad/bmm/workflows/frame-expert/_shared/validate-json-instructions.md +79 -0
  174. package/.bmad/bmm/workflows/frame-expert/create-dataflow/checklist.md +39 -0
  175. package/.bmad/bmm/workflows/frame-expert/create-dataflow/instructions.md +131 -0
  176. package/.bmad/bmm/workflows/frame-expert/create-dataflow/workflow.yaml +23 -0
  177. package/.bmad/bmm/workflows/frame-expert/create-diagram/checklist.md +43 -0
  178. package/.bmad/bmm/workflows/frame-expert/create-diagram/instructions.md +142 -0
  179. package/.bmad/bmm/workflows/frame-expert/create-diagram/workflow.yaml +24 -0
  180. package/.bmad/bmm/workflows/frame-expert/create-flowchart/checklist.md +49 -0
  181. package/.bmad/bmm/workflows/frame-expert/create-flowchart/instructions.md +242 -0
  182. package/.bmad/bmm/workflows/frame-expert/create-flowchart/workflow.yaml +27 -0
  183. package/.bmad/bmm/workflows/frame-expert/create-wireframe/checklist.md +38 -0
  184. package/.bmad/bmm/workflows/frame-expert/create-wireframe/instructions.md +133 -0
  185. package/.bmad/bmm/workflows/frame-expert/create-wireframe/workflow.yaml +23 -0
  186. package/.bmad/bmm/workflows/techdoc/documentation-standards.md +262 -0
  187. package/.bmad/bmm/workflows/testarch/atdd/atdd-checklist-template.md +363 -0
  188. package/.bmad/bmm/workflows/testarch/atdd/checklist.md +373 -0
  189. package/.bmad/bmm/workflows/testarch/atdd/instructions.md +785 -0
  190. package/.bmad/bmm/workflows/testarch/atdd/workflow.yaml +45 -0
  191. package/.bmad/bmm/workflows/testarch/automate/checklist.md +580 -0
  192. package/.bmad/bmm/workflows/testarch/automate/instructions.md +1303 -0
  193. package/.bmad/bmm/workflows/testarch/automate/workflow.yaml +52 -0
  194. package/.bmad/bmm/workflows/testarch/ci/checklist.md +246 -0
  195. package/.bmad/bmm/workflows/testarch/ci/github-actions-template.yaml +165 -0
  196. package/.bmad/bmm/workflows/testarch/ci/gitlab-ci-template.yaml +128 -0
  197. package/.bmad/bmm/workflows/testarch/ci/instructions.md +517 -0
  198. package/.bmad/bmm/workflows/testarch/ci/workflow.yaml +45 -0
  199. package/.bmad/bmm/workflows/testarch/framework/checklist.md +321 -0
  200. package/.bmad/bmm/workflows/testarch/framework/instructions.md +455 -0
  201. package/.bmad/bmm/workflows/testarch/framework/workflow.yaml +47 -0
  202. package/.bmad/bmm/workflows/testarch/nfr-assess/checklist.md +405 -0
  203. package/.bmad/bmm/workflows/testarch/nfr-assess/instructions.md +722 -0
  204. package/.bmad/bmm/workflows/testarch/nfr-assess/nfr-report-template.md +443 -0
  205. package/.bmad/bmm/workflows/testarch/nfr-assess/workflow.yaml +47 -0
  206. package/.bmad/bmm/workflows/testarch/test-design/checklist.md +234 -0
  207. package/.bmad/bmm/workflows/testarch/test-design/instructions.md +782 -0
  208. package/.bmad/bmm/workflows/testarch/test-design/test-design-template.md +285 -0
  209. package/.bmad/bmm/workflows/testarch/test-design/workflow.yaml +48 -0
  210. package/.bmad/bmm/workflows/testarch/test-review/checklist.md +470 -0
  211. package/.bmad/bmm/workflows/testarch/test-review/instructions.md +608 -0
  212. package/.bmad/bmm/workflows/testarch/test-review/test-review-template.md +388 -0
  213. package/.bmad/bmm/workflows/testarch/test-review/workflow.yaml +46 -0
  214. package/.bmad/bmm/workflows/testarch/trace/checklist.md +654 -0
  215. package/.bmad/bmm/workflows/testarch/trace/instructions.md +1045 -0
  216. package/.bmad/bmm/workflows/testarch/trace/trace-template.md +673 -0
  217. package/.bmad/bmm/workflows/testarch/trace/workflow.yaml +55 -0
  218. package/.bmad/bmm/workflows/workflow-status/init/instructions.md +334 -0
  219. package/.bmad/bmm/workflows/workflow-status/init/workflow.yaml +28 -0
  220. package/.bmad/bmm/workflows/workflow-status/instructions.md +388 -0
  221. package/.bmad/bmm/workflows/workflow-status/paths/enterprise-brownfield.yaml +138 -0
  222. package/.bmad/bmm/workflows/workflow-status/paths/enterprise-greenfield.yaml +126 -0
  223. package/.bmad/bmm/workflows/workflow-status/paths/game-design.yaml +52 -0
  224. package/.bmad/bmm/workflows/workflow-status/paths/method-brownfield.yaml +122 -0
  225. package/.bmad/bmm/workflows/workflow-status/paths/method-greenfield.yaml +113 -0
  226. package/.bmad/bmm/workflows/workflow-status/paths/quick-flow-brownfield.yaml +58 -0
  227. package/.bmad/bmm/workflows/workflow-status/paths/quick-flow-greenfield.yaml +47 -0
  228. package/.bmad/bmm/workflows/workflow-status/project-levels.yaml +59 -0
  229. package/.bmad/bmm/workflows/workflow-status/workflow-status-template.yaml +24 -0
  230. package/.bmad/bmm/workflows/workflow-status/workflow.yaml +28 -0
  231. package/.bmad/core/agents/bmad-master.md +72 -0
  232. package/.bmad/core/agents/bmad-web-orchestrator.agent.xml +113 -0
  233. package/.bmad/core/config.yaml +1 -0
  234. package/.bmad/core/tasks/adv-elicit-methods.csv +39 -0
  235. package/.bmad/core/tasks/advanced-elicitation-methods.csv +21 -0
  236. package/.bmad/core/tasks/advanced-elicitation.xml +106 -0
  237. package/.bmad/core/tasks/index-docs.xml +65 -0
  238. package/.bmad/core/tasks/validate-workflow.xml +89 -0
  239. package/.bmad/core/tasks/workflow.xml +270 -0
  240. package/.bmad/core/tools/shard-doc.xml +109 -0
  241. package/.bmad/core/workflows/brainstorming/README.md +261 -0
  242. package/.bmad/core/workflows/brainstorming/brain-methods.csv +36 -0
  243. package/.bmad/core/workflows/brainstorming/instructions.md +315 -0
  244. package/.bmad/core/workflows/brainstorming/template.md +106 -0
  245. package/.bmad/core/workflows/brainstorming/workflow.yaml +38 -0
  246. package/.bmad/core/workflows/party-mode/instructions.md +203 -0
  247. package/.bmad/core/workflows/party-mode/workflow.yaml +28 -0
  248. package/.bmad/docs/claude-code-instructions.md +25 -0
  249. package/.claude/commands/BMad/analyst.md +88 -0
  250. package/.claude/commands/BMad/architect.md +89 -0
  251. package/.claude/commands/BMad/bmad-master.md +114 -0
  252. package/.claude/commands/BMad/bmad-orchestrator.md +151 -0
  253. package/.claude/commands/BMad/dev.md +85 -0
  254. package/.claude/commands/BMad/pm.md +88 -0
  255. package/.claude/commands/BMad/po.md +83 -0
  256. package/.claude/commands/BMad/qa.md +91 -0
  257. package/.claude/commands/BMad/sm.md +69 -0
  258. package/.claude/commands/BMad/tasks/advanced-elicitation.md +123 -0
  259. package/.claude/commands/BMad/tasks/apply-qa-fixes.md +154 -0
  260. package/.claude/commands/BMad/tasks/brownfield-create-epic.md +166 -0
  261. package/.claude/commands/BMad/tasks/brownfield-create-story.md +153 -0
  262. package/.claude/commands/BMad/tasks/correct-course.md +76 -0
  263. package/.claude/commands/BMad/tasks/create-brownfield-story.md +318 -0
  264. package/.claude/commands/BMad/tasks/create-deep-research-prompt.md +284 -0
  265. package/.claude/commands/BMad/tasks/create-doc.md +107 -0
  266. package/.claude/commands/BMad/tasks/create-next-story.md +118 -0
  267. package/.claude/commands/BMad/tasks/document-project.md +349 -0
  268. package/.claude/commands/BMad/tasks/execute-checklist.md +92 -0
  269. package/.claude/commands/BMad/tasks/facilitate-brainstorming-session.md +142 -0
  270. package/.claude/commands/BMad/tasks/generate-ai-frontend-prompt.md +57 -0
  271. package/.claude/commands/BMad/tasks/index-docs.md +179 -0
  272. package/.claude/commands/BMad/tasks/kb-mode-interaction.md +81 -0
  273. package/.claude/commands/BMad/tasks/nfr-assess.md +349 -0
  274. package/.claude/commands/BMad/tasks/qa-gate.md +167 -0
  275. package/.claude/commands/BMad/tasks/review-story.md +320 -0
  276. package/.claude/commands/BMad/tasks/risk-profile.md +359 -0
  277. package/.claude/commands/BMad/tasks/shard-doc.md +191 -0
  278. package/.claude/commands/BMad/tasks/test-design.md +180 -0
  279. package/.claude/commands/BMad/tasks/trace-requirements.md +270 -0
  280. package/.claude/commands/BMad/tasks/validate-next-story.md +140 -0
  281. package/.claude/commands/BMad/ux-expert.md +73 -0
  282. package/.claude/commands/bmad/bmm/agents/analyst.md +14 -0
  283. package/.claude/commands/bmad/bmm/agents/architect.md +14 -0
  284. package/.claude/commands/bmad/bmm/agents/dev.md +14 -0
  285. package/.claude/commands/bmad/bmm/agents/frame-expert.md +14 -0
  286. package/.claude/commands/bmad/bmm/agents/pm.md +14 -0
  287. package/.claude/commands/bmad/bmm/agents/sm.md +14 -0
  288. package/.claude/commands/bmad/bmm/agents/tea.md +14 -0
  289. package/.claude/commands/bmad/bmm/agents/tech-writer.md +14 -0
  290. package/.claude/commands/bmad/bmm/agents/ux-designer.md +14 -0
  291. package/.claude/commands/bmad/bmm/workflows/architecture.md +13 -0
  292. package/.claude/commands/bmad/bmm/workflows/brainstorm-project.md +13 -0
  293. package/.claude/commands/bmad/bmm/workflows/code-review.md +13 -0
  294. package/.claude/commands/bmad/bmm/workflows/correct-course.md +13 -0
  295. package/.claude/commands/bmad/bmm/workflows/create-dataflow.md +13 -0
  296. package/.claude/commands/bmad/bmm/workflows/create-diagram.md +13 -0
  297. package/.claude/commands/bmad/bmm/workflows/create-epics-and-stories.md +13 -0
  298. package/.claude/commands/bmad/bmm/workflows/create-flowchart.md +13 -0
  299. package/.claude/commands/bmad/bmm/workflows/create-story.md +13 -0
  300. package/.claude/commands/bmad/bmm/workflows/create-ux-design.md +13 -0
  301. package/.claude/commands/bmad/bmm/workflows/create-wireframe.md +13 -0
  302. package/.claude/commands/bmad/bmm/workflows/dev-story.md +13 -0
  303. package/.claude/commands/bmad/bmm/workflows/document-project.md +13 -0
  304. package/.claude/commands/bmad/bmm/workflows/domain-research.md +13 -0
  305. package/.claude/commands/bmad/bmm/workflows/epic-tech-context.md +13 -0
  306. package/.claude/commands/bmad/bmm/workflows/implementation-readiness.md +13 -0
  307. package/.claude/commands/bmad/bmm/workflows/prd.md +13 -0
  308. package/.claude/commands/bmad/bmm/workflows/product-brief.md +13 -0
  309. package/.claude/commands/bmad/bmm/workflows/research.md +13 -0
  310. package/.claude/commands/bmad/bmm/workflows/retrospective.md +13 -0
  311. package/.claude/commands/bmad/bmm/workflows/sprint-planning.md +13 -0
  312. package/.claude/commands/bmad/bmm/workflows/story-context.md +13 -0
  313. package/.claude/commands/bmad/bmm/workflows/story-done.md +13 -0
  314. package/.claude/commands/bmad/bmm/workflows/story-ready.md +13 -0
  315. package/.claude/commands/bmad/bmm/workflows/tech-spec.md +13 -0
  316. package/.claude/commands/bmad/bmm/workflows/workflow-init.md +13 -0
  317. package/.claude/commands/bmad/bmm/workflows/workflow-status.md +13 -0
  318. package/.claude/commands/bmad/core/agents/bmad-master.md +14 -0
  319. package/.claude/commands/bmad/core/tasks/advanced-elicitation.md +9 -0
  320. package/.claude/commands/bmad/core/tasks/index-docs.md +9 -0
  321. package/.claude/commands/bmad/core/tools/shard-doc.md +9 -0
  322. package/.claude/commands/bmad/core/workflows/brainstorming.md +13 -0
  323. package/.claude/commands/bmad/core/workflows/party-mode.md +13 -0
  324. package/.claude/config/background-music-position.txt +26 -0
  325. package/.claude/config/background-music-volume.txt +1 -0
  326. package/.claude/config/background-music.cfg +1 -0
  327. package/.claude/config/tts-verbosity.txt +1 -0
  328. package/.claude/github-star-reminder.txt +1 -0
  329. package/.claude/hooks/background-music-manager.sh +1 -1
  330. package/.claude/hooks/bmad-party-manager.sh +225 -0
  331. package/.claude/hooks/bmad-voice-manager.sh +116 -4
  332. package/.claude/piper-voices-dir.txt +1 -0
  333. package/.mcp.json +30 -0
  334. package/README.md +166 -13
  335. package/mcp-server/server.py +53 -41
  336. package/package.json +6 -2
  337. package/src/commands/install-mcp.js +151 -90
  338. package/src/installer.js +531 -298
  339. package/src/utils/dependency-checker.js +193 -132
package/.mcp.json ADDED
@@ -0,0 +1,30 @@
1
+ {
2
+ "mcpServers": {
3
+ "sonarqube": {
4
+ "command": "docker",
5
+ "args": [
6
+ "run",
7
+ "-i",
8
+ "--name",
9
+ "sonarqube-mcp-server-agentvibes",
10
+ "--rm",
11
+ "--dns",
12
+ "8.8.8.8",
13
+ "--dns",
14
+ "8.8.4.4",
15
+ "-e",
16
+ "SONARQUBE_TOKEN",
17
+ "-e",
18
+ "SONARQUBE_ORG",
19
+ "-e",
20
+ "STORAGE_PATH",
21
+ "mcp/sonarqube"
22
+ ],
23
+ "env": {
24
+ "SONARQUBE_TOKEN": "${SONARQUBE_TOKEN}",
25
+ "SONARQUBE_ORG": "${SONARQUBE_ORG}",
26
+ "STORAGE_PATH": "${STORAGE_PATH}"
27
+ }
28
+ }
29
+ }
30
+ }
package/README.md CHANGED
@@ -11,7 +11,7 @@
11
11
  [![Publish](https://github.com/paulpreibisch/AgentVibes/actions/workflows/publish.yml/badge.svg)](https://github.com/paulpreibisch/AgentVibes/actions/workflows/publish.yml)
12
12
  [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
13
13
 
14
- **Author**: Paul Preibisch ([@997Fire](https://x.com/997Fire)) | **Version**: v2.17.2
14
+ **Author**: Paul Preibisch ([@997Fire](https://x.com/997Fire)) | **Version**: v2.17.4
15
15
 
16
16
  ---
17
17
 
@@ -19,12 +19,13 @@
19
19
 
20
20
  | I want to... | Go here |
21
21
  |--------------|---------|
22
- | **Install AgentVibes** | [Quick Start Guide](docs/quick-start.md) |
22
+ | **Install AgentVibes** (just `npx`, no git!) | [Quick Start Guide](docs/quick-start.md) |
23
+ | **Understand what I need** (spoiler: just Node.js!) | [Prerequisites](#-prerequisites) |
23
24
  | **Set up on Windows (Claude Desktop)** | [Windows Setup Guide](mcp-server/WINDOWS_SETUP.md) |
24
25
  | **Use natural language** | [MCP Setup](docs/mcp-setup.md) |
25
26
  | **Switch voices** | [Voice Library](docs/voice-library.md) |
26
27
  | **Learn Spanish while coding** | [Language Learning Mode](docs/language-learning-mode.md) |
27
- | **Fix issues** | [Troubleshooting](docs/troubleshooting.md) |
28
+ | **Fix issues** (git-lfs? MCP tokens? Read this!) | [Troubleshooting](docs/troubleshooting.md) & [FAQ](#-frequently-asked-questions-faq) |
28
29
 
29
30
  ---
30
31
 
@@ -74,6 +75,7 @@ All 50+ Piper voices AgentVibes provides are sourced from Hugging Face's open-so
74
75
 
75
76
  ### Getting Started
76
77
  - [🚀 Quick Start](#-quick-start) - Install in 3 steps
78
+ - [📋 Prerequisites](#-prerequisites) - **NEW!** What you need (spoiler: just Node.js!)
77
79
  - [✨ What is AgentVibes?](#-what-is-agentvibes) - Overview & key features
78
80
  - [📰 Latest Release](#-latest-release) - What's new
79
81
  - [🪟 Windows Setup Guide for Claude Desktop](mcp-server/WINDOWS_SETUP.md) - Complete Windows installation with WSL & Python
@@ -103,6 +105,7 @@ All 50+ Piper voices AgentVibes provides are sourced from Hugging Face's open-so
103
105
  ### Additional Resources
104
106
  - [🔗 Useful Links](#-useful-links) - Voice typing & AI tools
105
107
  - [🔄 Updating](#-updating) - Keep AgentVibes current
108
+ - [❓ FAQ](#-frequently-asked-questions-faq) - **NEW!** Common questions answered (git-lfs, MCP tokens, installation)
106
109
  - [🍎 macOS Testing](docs/macos-testing.md) - Automated testing on macOS with GitHub Actions
107
110
  - [🙏 Credits](#-credits) - Acknowledgments
108
111
  - [🤝 Contributing](#-contributing) - Show support
@@ -111,17 +114,18 @@ All 50+ Piper voices AgentVibes provides are sourced from Hugging Face's open-so
111
114
 
112
115
  ## 📰 Latest Release
113
116
 
114
- **[v2.17.0 - Installer UX Revolution](https://github.com/paulpreibisch/AgentVibes/releases/tag/v2.17.2)** 🎉
117
+ **[v2.17.4 - Code Quality & Maintainability](https://github.com/paulpreibisch/AgentVibes/releases/tag/v2.17.4)** ⚙️
115
118
 
116
- AgentVibes v2.17.0 delivers a complete installer user experience transformation with intelligent system dependency checking, paginated configuration flow, and comprehensive inline help.
119
+ AgentVibes v2.17.4 focuses on code quality and maintainability with extensive SonarCloud-driven refactoring across the entire codebase, reducing cognitive complexity in critical files by up to 90%.
117
120
 
118
121
  **Key Highlights:**
119
- - 🔧 **System Dependency Checker** - Validates Node, Python, bash, sox, ffmpeg, curl, etc.
120
- - 📄 **Paginated Configuration** - Beautiful headers with Agent Vibes branding on every page
121
- - 💡 **Inline Help & Commands** - TTS explanations and examples throughout installer
122
- - 🎵 **New Music Track** - Salsa v2 background music now available
123
- - 🎨 **Professional UI** - Consistent sunshine yellow styling and dynamic page numbering
124
- - **Quality Assurance** - 140 tests passing, SonarCloud integration
122
+ - ⚙️ **Major Code Refactoring** - Cognitive complexity reduced by up to 90% across critical files
123
+ - 🧪 **Comprehensive Testing** - 377 new party mode tests added, 225 total tests passing
124
+ - 📚 **Improved Documentation** - New Prerequisites and FAQ sections clarify installation
125
+ - 🎭 **Conversational Agent Intros** - BMAD party mode now uses "Hi! I'm John, your Product Manager" format
126
+ - 🔊 **Better Audio Balance** - Background music reduced 15% for clearer TTS voice
127
+ - 🏗️ **installer.js** - Complexity: 84 ~8 (90% reduction)
128
+ - 📦 **dependency-checker.js** - Complexity: 43 → ~5, 23 → ~8 (88% & 65% reductions)
125
129
 
126
130
  💡 **Tip:** If `npx agentvibes` shows an older version or missing commands, clear your npm cache: `npm cache clean --force && npx agentvibes@latest --help`
127
131
 
@@ -183,6 +187,51 @@ npx agentvibes install
183
187
 
184
188
  ---
185
189
 
190
+ ## 📋 Prerequisites
191
+
192
+ ### For Users (Installing & Running AgentVibes)
193
+
194
+ **✅ Required:**
195
+ - **Node.js** ≥16.0 (`node --version`)
196
+ - That's it! No git required, no git-lfs required, no repo cloning needed.
197
+
198
+ **❌ NOT Required:**
199
+ - ❌ Git or git-lfs (you're installing via npm, not cloning)
200
+ - ❌ Repository cloning (npm handles everything)
201
+ - ❌ Build tools (pre-built package ready to use)
202
+
203
+ **📦 Installation Methods:**
204
+
205
+ | Method | Command | Use Case |
206
+ |--------|---------|----------|
207
+ | **✅ RECOMMENDED: NPM** | `npx agentvibes install` | Users wanting to use AgentVibes |
208
+ | **⚠️ Developer Clone** | `git clone ...` | **Only for contributing code** |
209
+
210
+ **💡 Why npm installation?**
211
+ - Zero git operations - npm downloads pre-built package
212
+ - No large file downloads - audio generated on-demand
213
+ - Instant setup - works in seconds
214
+ - No git-lfs, no cloning, no build steps
215
+
216
+ ### For Developers (Contributing to AgentVibes)
217
+
218
+ **Only if contributing code to the project:**
219
+ - Node.js 16+
220
+ - Git (no git-lfs needed - repo has no large files)
221
+ - Familiarity with `npm link` for local development
222
+
223
+ **Developer installation:**
224
+ ```bash
225
+ git clone https://github.com/paulpreibisch/AgentVibes.git
226
+ cd AgentVibes
227
+ npm install
228
+ npm link
229
+ ```
230
+
231
+ [↑ Back to top](#-table-of-contents)
232
+
233
+ ---
234
+
186
235
  ## 📋 System Requirements
187
236
 
188
237
  AgentVibes requires certain system dependencies for optimal audio processing and playback. Requirements vary by operating system and TTS provider.
@@ -591,9 +640,33 @@ AgentVibes supports **custom personalities** and **custom voices**.
591
640
 
592
641
  **Common Issues:**
593
642
 
643
+ **❌ Error: "git-lfs is not installed"**
644
+
645
+ **AgentVibes does NOT require git-lfs.** This error suggests:
646
+
647
+ 1. **Wrong installation method** - Use npm, not git clone:
648
+ ```bash
649
+ # ✅ CORRECT - Use this:
650
+ npx agentvibes install
651
+
652
+ # ❌ WRONG - Don't clone unless contributing:
653
+ git clone https://github.com/paulpreibisch/AgentVibes.git
654
+ ```
655
+
656
+ 2. **Different project** - You may be in a BMAD-METHOD or other repo that uses git-lfs
657
+
658
+ 3. **Global git config** - Your git may have lfs enabled globally:
659
+ ```bash
660
+ git config --global --list | grep lfs
661
+ ```
662
+
663
+ **Solution:** Use `npx agentvibes install` - no git operations needed!
664
+
665
+ ---
666
+
594
667
  **No Audio Playing?**
595
- 2. Verify hook is installed: `ls -la .claude/hooks/session-start-tts.sh`
596
- 3. Test: `/agent-vibes:sample Aria`
668
+ 1. Verify hook is installed: `ls -la .claude/hooks/session-start-tts.sh`
669
+ 2. Test: `/agent-vibes:sample Aria`
597
670
 
598
671
  **Commands Not Found?**
599
672
  ```bash
@@ -630,6 +703,86 @@ npm update -g agentvibes && agentvibes update --yes
630
703
 
631
704
  ---
632
705
 
706
+ ## ❓ Frequently Asked Questions (FAQ)
707
+
708
+ ### Installation & Setup
709
+
710
+ **Q: Does AgentVibes require git-lfs?**
711
+ **A:** **NO.** AgentVibes has zero git-lfs requirement. Use `npx agentvibes install` - no git operations needed.
712
+
713
+ **Q: Do I need to clone the GitHub repository?**
714
+ **A:** **NO** (unless you're contributing code). Normal users should use `npx agentvibes install`. Repository cloning is only for developers who want to contribute to the project.
715
+
716
+ **Q: Why is the GitHub repo so large?**
717
+ **A:** The repo includes demo files and development dependencies (node_modules). The actual npm package you download is **< 50MB** and optimized for users.
718
+
719
+ **Q: What's the difference between npm install and git clone?**
720
+ **A:**
721
+ - `npx agentvibes install` → **For users** - Downloads pre-built package, zero git operations, instant setup
722
+ - `git clone ...` → **For developers only** - Full source code, development setup, contributing code
723
+
724
+ **Q: I saw an error about git-lfs, is something wrong?**
725
+ **A:** You're likely:
726
+ 1. Using wrong installation method (use `npx` not `git clone`)
727
+ 2. In a different project directory that uses git-lfs
728
+ 3. Have global git config with lfs enabled
729
+
730
+ AgentVibes itself does NOT use or require git-lfs.
731
+
732
+ ### Features & Usage
733
+
734
+ **Q: Does MCP consume tokens from my context window?**
735
+ **A:** **YES.** Every MCP tool schema adds to the context window. AgentVibes MCP is designed to be minimal (~1500-2000 tokens), but if you're concerned about token usage, you can use slash commands instead of MCP.
736
+
737
+ **Q: What's the difference between using MCP vs slash commands?**
738
+ **A:**
739
+ - **MCP**: Natural language ("Switch to Aria voice"), uses ~1500-2000 context tokens
740
+ - **Slash commands**: Explicit commands (`/agent-vibes:switch Aria`), zero token overhead
741
+
742
+ Both do the exact same thing - MCP is more convenient, slash commands are more token-efficient.
743
+
744
+ **Q: Is AgentVibes just a bash script?**
745
+ **A:** No. AgentVibes includes:
746
+ - Multi-provider TTS abstraction (Piper, macOS Say, ElevenLabs)
747
+ - Voice management system with 50+ voices
748
+ - Personality & sentiment system
749
+ - Language learning mode with bilingual playback
750
+ - Audio effects processing (reverb, EQ, compression)
751
+ - MCP server for natural language control
752
+ - BMAD integration for multi-agent voice switching
753
+ - Remote audio optimization for SSH/RDP sessions
754
+
755
+ **Q: Can I use AgentVibes without BMAD?**
756
+ **A:** **YES.** AgentVibes works standalone. BMAD integration is optional - only activates if you install BMAD separately.
757
+
758
+ **Q: What are the audio dependencies?**
759
+ **A:**
760
+ - **Required**: Node.js 16+, Python 3.10+ (for Piper TTS)
761
+ - **Optional**: sox (audio effects), ffmpeg (background music, padding)
762
+ - All TTS generation works without optional dependencies - they just enhance the experience
763
+
764
+ ### Troubleshooting
765
+
766
+ **Q: Why isn't Claude speaking?**
767
+ **A:** Common causes:
768
+ 1. Hook not installed - Run `npx agentvibes install --yes`
769
+ 2. Audio player missing - Install `sox` and `ffmpeg`
770
+ 3. TTS protocol not enabled in settings
771
+ 4. Test with `/agent-vibes:sample Aria`
772
+
773
+ **Q: Can I use this on Windows?**
774
+ **A:** Yes, but requires WSL (Windows Subsystem for Linux). See [Windows Setup Guide](mcp-server/WINDOWS_SETUP.md).
775
+
776
+ **Q: How do I reduce token usage?**
777
+ **A:**
778
+ 1. Use slash commands instead of MCP (zero context token overhead)
779
+ 2. Set verbosity to LOW (`/agent-vibes:verbosity low`)
780
+ 3. Disable BMAD integration if not using it
781
+
782
+ [↑ Back to top](#-table-of-contents)
783
+
784
+ ---
785
+
633
786
  ## ⚠️ Important Disclaimers
634
787
 
635
788
  **API Costs & Usage:**
@@ -54,6 +54,18 @@ import mcp.server.stdio
54
54
  class AgentVibesServer:
55
55
  """MCP Server for AgentVibes TTS functionality"""
56
56
 
57
+ # Script name constants (addresses SonarCloud S1192)
58
+ VOICE_MANAGER_SCRIPT = "voice-manager.sh"
59
+ PERSONALITY_MANAGER_SCRIPT = "personality-manager.sh"
60
+ LANGUAGE_MANAGER_SCRIPT = "language-manager.sh"
61
+ BACKGROUND_MUSIC_MANAGER_SCRIPT = "background-music-manager.sh"
62
+ EFFECTS_MANAGER_SCRIPT = "effects-manager.sh"
63
+
64
+ # Path constants (addresses SonarCloud S1192)
65
+ CLAUDE_DIR_NAME = ".claude"
66
+ MUTE_FILE_NAME = ".agentvibes-muted"
67
+ SEPARATOR = "━" * 39
68
+
57
69
  def __init__(self):
58
70
  """Initialize the AgentVibes MCP server"""
59
71
  # Find the .claude directory (project-local or global)
@@ -67,7 +79,7 @@ class AgentVibesServer:
67
79
  # Get the AgentVibes root directory (parent of mcp-server)
68
80
  script_dir = Path(__file__).resolve().parent # mcp-server/
69
81
  agentvibes_root = script_dir.parent # AgentVibes/
70
- claude_dir = agentvibes_root / ".claude"
82
+ claude_dir = agentvibes_root / self.CLAUDE_DIR_NAME
71
83
 
72
84
  # ALWAYS use package .claude for hooks (even in NPX cache)
73
85
  # The package ALWAYS has .claude/ with all the hooks
@@ -75,7 +87,7 @@ class AgentVibesServer:
75
87
  return claude_dir
76
88
 
77
89
  # Fallback to global ~/.claude (should never happen in properly installed package)
78
- return Path.home() / ".claude"
90
+ return Path.home() / self.CLAUDE_DIR_NAME
79
91
 
80
92
  async def text_to_speech(
81
93
  self,
@@ -105,13 +117,13 @@ class AgentVibesServer:
105
117
  if personality:
106
118
  original_personality = await self._get_personality()
107
119
  await self._run_script(
108
- "personality-manager.sh", ["set", personality]
120
+ self.PERSONALITY_MANAGER_SCRIPT, ["set", personality]
109
121
  )
110
122
 
111
123
  # Temporarily set language if specified
112
124
  if language:
113
125
  original_language = await self._get_language()
114
- await self._run_script("language-manager.sh", ["set", language])
126
+ await self._run_script(self.LANGUAGE_MANAGER_SCRIPT, ["set", language])
115
127
 
116
128
  # Call the TTS script via bash explicitly
117
129
  play_tts = self.hooks_dir / "play-tts.sh"
@@ -127,7 +139,7 @@ class AgentVibesServer:
127
139
  # 2. Otherwise → Use global ~/.claude/ (Claude Desktop, Warp, etc.)
128
140
  # Note: Hooks are ALWAYS from package .claude/ (self.claude_dir)
129
141
  cwd = Path.cwd()
130
- if (cwd / ".claude").is_dir() and cwd != self.agentvibes_root:
142
+ if (cwd / self.CLAUDE_DIR_NAME).is_dir() and cwd != self.agentvibes_root:
131
143
  # Real Claude Code project with .claude directory
132
144
  env["CLAUDE_PROJECT_DIR"] = str(cwd)
133
145
  # else: Don't set CLAUDE_PROJECT_DIR, let scripts fall back to ~/.claude
@@ -177,11 +189,11 @@ class AgentVibesServer:
177
189
  # Restore original settings
178
190
  if original_personality:
179
191
  await self._run_script(
180
- "personality-manager.sh", ["set", original_personality]
192
+ self.PERSONALITY_MANAGER_SCRIPT, ["set", original_personality]
181
193
  )
182
194
  if original_language:
183
195
  await self._run_script(
184
- "language-manager.sh", ["set", original_language]
196
+ self.LANGUAGE_MANAGER_SCRIPT, ["set", original_language]
185
197
  )
186
198
 
187
199
  async def list_voices(self) -> str:
@@ -196,17 +208,17 @@ class AgentVibesServer:
196
208
  current_voice = await self._get_current_voice()
197
209
 
198
210
  # voice-manager.sh list-simple is now provider-aware
199
- result = await self._run_script("voice-manager.sh", ["list-simple"])
211
+ result = await self._run_script(self.VOICE_MANAGER_SCRIPT, ["list-simple"])
200
212
  if result:
201
213
  voices = result.strip().split("\n")
202
214
  voices = [v for v in voices if v] # Filter empty strings
203
215
 
204
216
  if not voices:
205
217
  return (
206
- "📦 No voices available\n"
207
- "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n"
208
- "For Piper: Download voices using /agent-vibes:provider download <voice-name>\n"
209
- "Example: en_US-lessac-medium, en_GB-alba-medium"
218
+ f"📦 No voices available\n"
219
+ f"{self.SEPARATOR}\n"
220
+ f"For Piper: Download voices using /agent-vibes:provider download <voice-name>\n"
221
+ f"Example: en_US-lessac-medium, en_GB-alba-medium"
210
222
  )
211
223
 
212
224
  # Determine provider label and alternative provider
@@ -221,11 +233,11 @@ class AgentVibesServer:
221
233
  alternative_provider = None
222
234
 
223
235
  output = f"🎤 Available {provider_label} Voices:\n"
224
- output += "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n"
236
+ output += f"{self.SEPARATOR}\n"
225
237
  for voice in voices:
226
238
  marker = " ✓ (current)" if voice == current_voice else ""
227
239
  output += f" • {voice}{marker}\n"
228
- output += "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n"
240
+ output += f"{self.SEPARATOR}\n"
229
241
 
230
242
  # Add provider switch hint
231
243
  if alternative_provider:
@@ -245,7 +257,7 @@ class AgentVibesServer:
245
257
  Success or error message
246
258
  """
247
259
  result = await self._run_script(
248
- "voice-manager.sh", ["switch", voice_name, "--silent"]
260
+ self.VOICE_MANAGER_SCRIPT, ["switch", voice_name, "--silent"]
249
261
  )
250
262
  if result and "✅" in result:
251
263
  return f"✅ Voice switched to: {voice_name}"
@@ -258,7 +270,7 @@ class AgentVibesServer:
258
270
  Returns:
259
271
  Formatted list of personalities with descriptions
260
272
  """
261
- result = await self._run_script("personality-manager.sh", ["list"])
273
+ result = await self._run_script(self.PERSONALITY_MANAGER_SCRIPT, ["list"])
262
274
  return result if result else "❌ Failed to list personalities"
263
275
 
264
276
  async def set_personality(self, personality: str) -> str:
@@ -272,7 +284,7 @@ class AgentVibesServer:
272
284
  Success or error message
273
285
  """
274
286
  result = await self._run_script(
275
- "personality-manager.sh", ["set", personality]
287
+ self.PERSONALITY_MANAGER_SCRIPT, ["set", personality]
276
288
  )
277
289
  if result and "🎭" in result:
278
290
  return result
@@ -291,12 +303,12 @@ class AgentVibesServer:
291
303
  provider = await self._get_provider()
292
304
 
293
305
  output = "🎤 Current AgentVibes Configuration\n"
294
- output += "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n"
306
+ output += f"{self.SEPARATOR}\n"
295
307
  output += f"Provider: {provider}\n"
296
308
  output += f"Voice: {voice}\n"
297
309
  output += f"Personality: {personality}\n"
298
310
  output += f"Language: {language}\n"
299
- output += "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n"
311
+ output += f"{self.SEPARATOR}\n"
300
312
  return output
301
313
 
302
314
  async def set_language(self, language: str) -> str:
@@ -309,7 +321,7 @@ class AgentVibesServer:
309
321
  Returns:
310
322
  Success or error message
311
323
  """
312
- result = await self._run_script("language-manager.sh", ["set", language])
324
+ result = await self._run_script(self.LANGUAGE_MANAGER_SCRIPT, ["set", language])
313
325
  if result and "✓" in result:
314
326
  return result
315
327
  return f"❌ Failed to set language: {result}"
@@ -324,7 +336,7 @@ class AgentVibesServer:
324
336
  Returns:
325
337
  Success or error message
326
338
  """
327
- result = await self._run_script("voice-manager.sh", ["replay", str(n)])
339
+ result = await self._run_script(self.VOICE_MANAGER_SCRIPT, ["replay", str(n)])
328
340
  if result and "🔊" in result:
329
341
  return result
330
342
  return f"❌ Failed to replay audio: {result}"
@@ -489,7 +501,7 @@ class AgentVibesServer:
489
501
  Returns:
490
502
  Success message confirming mute is active
491
503
  """
492
- mute_file = Path.home() / ".agentvibes-muted"
504
+ mute_file = Path.home() / self.MUTE_FILE_NAME
493
505
  try:
494
506
  mute_file.touch()
495
507
  return "🔇 AgentVibes TTS muted. All voice output is now silenced.\n\n💡 To unmute, use: unmute()"
@@ -503,8 +515,8 @@ class AgentVibesServer:
503
515
  Returns:
504
516
  Success message confirming TTS is restored
505
517
  """
506
- global_mute = Path.home() / ".agentvibes-muted"
507
- project_mute = Path.cwd() / ".claude" / "agentvibes-muted"
518
+ global_mute = Path.home() / self.MUTE_FILE_NAME
519
+ project_mute = Path.cwd() / self.CLAUDE_DIR_NAME / "agentvibes-muted"
508
520
 
509
521
  removed = []
510
522
  try:
@@ -529,8 +541,8 @@ class AgentVibesServer:
529
541
  Returns:
530
542
  Current mute status
531
543
  """
532
- global_mute = Path.home() / ".agentvibes-muted"
533
- project_mute = Path.cwd() / ".claude" / "agentvibes-muted"
544
+ global_mute = Path.home() / self.MUTE_FILE_NAME
545
+ project_mute = Path.cwd() / self.CLAUDE_DIR_NAME / "agentvibes-muted"
534
546
 
535
547
  if global_mute.exists() or project_mute.exists():
536
548
  return "🔇 TTS is currently MUTED\n\n💡 To unmute, use: unmute()"
@@ -544,7 +556,7 @@ class AgentVibesServer:
544
556
  Returns:
545
557
  Formatted list of all pre-packaged background music files
546
558
  """
547
- result = await self._run_script("background-music-manager.sh", ["list"])
559
+ result = await self._run_script(self.BACKGROUND_MUSIC_MANAGER_SCRIPT, ["list"])
548
560
  return result if result else "❌ Failed to list background music"
549
561
 
550
562
  async def set_background_music(self, track_name: str, agent_name: Optional[str] = None) -> str:
@@ -561,7 +573,7 @@ class AgentVibesServer:
561
573
  import re
562
574
 
563
575
  # Get list of available tracks for fuzzy matching
564
- list_result = await self._run_script("background-music-manager.sh", ["list"])
576
+ list_result = await self._run_script(self.BACKGROUND_MUSIC_MANAGER_SCRIPT, ["list"])
565
577
  if not list_result or "❌" in list_result:
566
578
  return "❌ Failed to list background music tracks"
567
579
 
@@ -597,13 +609,13 @@ class AgentVibesServer:
597
609
  # Determine which command to use based on agent_name
598
610
  if agent_name and agent_name.lower() == "all":
599
611
  # Set for all agents
600
- result = await self._run_script("background-music-manager.sh", ["set-all", matched_track])
612
+ result = await self._run_script(self.BACKGROUND_MUSIC_MANAGER_SCRIPT, ["set-all", matched_track])
601
613
  elif agent_name:
602
614
  # Set for specific agent
603
- result = await self._run_script("background-music-manager.sh", ["set-agent", agent_name, matched_track])
615
+ result = await self._run_script(self.BACKGROUND_MUSIC_MANAGER_SCRIPT, ["set-agent", agent_name, matched_track])
604
616
  else:
605
617
  # Set as default
606
- result = await self._run_script("background-music-manager.sh", ["set-default", matched_track])
618
+ result = await self._run_script(self.BACKGROUND_MUSIC_MANAGER_SCRIPT, ["set-default", matched_track])
607
619
 
608
620
  if result and "✅" in result:
609
621
  if matched_track.lower() != track_name.lower():
@@ -622,7 +634,7 @@ class AgentVibesServer:
622
634
  Success or error message
623
635
  """
624
636
  command = "on" if enabled else "off"
625
- result = await self._run_script("background-music-manager.sh", [command])
637
+ result = await self._run_script(self.BACKGROUND_MUSIC_MANAGER_SCRIPT, [command])
626
638
  return result if result else f"❌ Failed to {'enable' if enabled else 'disable'} background music"
627
639
 
628
640
  async def set_background_music_volume(self, volume: float) -> str:
@@ -635,7 +647,7 @@ class AgentVibesServer:
635
647
  Returns:
636
648
  Success or error message
637
649
  """
638
- result = await self._run_script("background-music-manager.sh", ["volume", str(volume)])
650
+ result = await self._run_script(self.BACKGROUND_MUSIC_MANAGER_SCRIPT, ["volume", str(volume)])
639
651
  return result if result else "❌ Failed to set background music volume"
640
652
 
641
653
  async def get_background_music_status(self) -> str:
@@ -645,7 +657,7 @@ class AgentVibesServer:
645
657
  Returns:
646
658
  Status information
647
659
  """
648
- result = await self._run_script("background-music-manager.sh", ["status"])
660
+ result = await self._run_script(self.BACKGROUND_MUSIC_MANAGER_SCRIPT, ["status"])
649
661
  return result if result else "❌ Failed to get background music status"
650
662
 
651
663
  async def set_reverb(self, level: str, agent: str = "default", apply_all: bool = False) -> str:
@@ -663,7 +675,7 @@ class AgentVibesServer:
663
675
  args = ["set-reverb", level, agent]
664
676
  if apply_all:
665
677
  args.append("--all")
666
- result = await self._run_script("effects-manager.sh", args)
678
+ result = await self._run_script(self.EFFECTS_MANAGER_SCRIPT, args)
667
679
  return result if result else f"✅ Set reverb to {level}"
668
680
 
669
681
  async def get_reverb(self, agent: str = "default") -> str:
@@ -676,7 +688,7 @@ class AgentVibesServer:
676
688
  Returns:
677
689
  Current reverb level
678
690
  """
679
- result = await self._run_script("effects-manager.sh", ["get-reverb", agent])
691
+ result = await self._run_script(self.EFFECTS_MANAGER_SCRIPT, ["get-reverb", agent])
680
692
  if result:
681
693
  return f"Current reverb level for {agent}: {result.strip()}"
682
694
  return f"❌ Failed to get reverb for {agent}"
@@ -688,7 +700,7 @@ class AgentVibesServer:
688
700
  Returns:
689
701
  Effects configuration
690
702
  """
691
- result = await self._run_script("effects-manager.sh", ["list"])
703
+ result = await self._run_script(self.EFFECTS_MANAGER_SCRIPT, ["list"])
692
704
  return result if result else "❌ Failed to list audio effects"
693
705
 
694
706
  # Helper methods
@@ -749,7 +761,7 @@ class AgentVibesServer:
749
761
 
750
762
  async def _get_current_voice(self) -> str:
751
763
  """Get the currently active voice"""
752
- result = await self._run_script("voice-manager.sh", ["get"])
764
+ result = await self._run_script(self.VOICE_MANAGER_SCRIPT, ["get"])
753
765
  return result.strip() if result else "Unknown"
754
766
 
755
767
  async def _get_personality(self) -> str:
@@ -757,7 +769,7 @@ class AgentVibesServer:
757
769
  personality_file = self.claude_dir / "tts-personality.txt"
758
770
  if not personality_file.exists():
759
771
  # Try global
760
- personality_file = Path.home() / ".claude" / "tts-personality.txt"
772
+ personality_file = Path.home() / self.CLAUDE_DIR_NAME / "tts-personality.txt"
761
773
 
762
774
  try:
763
775
  if personality_file.exists():
@@ -770,14 +782,14 @@ class AgentVibesServer:
770
782
 
771
783
  async def _get_language(self) -> str:
772
784
  """Get the current language setting"""
773
- result = await self._run_script("language-manager.sh", ["code"])
785
+ result = await self._run_script(self.LANGUAGE_MANAGER_SCRIPT, ["code"])
774
786
  return result.strip() if result else "english"
775
787
 
776
788
  async def _get_provider(self) -> str:
777
789
  """Get the active TTS provider"""
778
790
  provider_file = self.claude_dir / "tts-provider.txt"
779
791
  if not provider_file.exists():
780
- provider_file = Path.home() / ".claude" / "tts-provider.txt"
792
+ provider_file = Path.home() / self.CLAUDE_DIR_NAME / "tts-provider.txt"
781
793
 
782
794
  try:
783
795
  if provider_file.exists():
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.17.2",
4
+ "version": "2.17.4",
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": [
@@ -64,9 +64,10 @@
64
64
  "install-local": "node src/installer.js install",
65
65
  "postinstall": "node mcp-server/install-deps.js",
66
66
  "install-mcp-deps": "node mcp-server/install-deps.js",
67
- "test": "AGENTVIBES_TEST_MODE=true bats test/unit/*.bats && node --test test/unit/*.test.js",
67
+ "test": "AGENTVIBES_TEST_MODE=true bats test/unit/*.bats && npm run test:coverage",
68
68
  "test:bats": "AGENTVIBES_TEST_MODE=true bats test/unit/*.bats",
69
69
  "test:node": "node --test test/unit/*.test.js",
70
+ "test:coverage": "c8 --reporter=lcov --reporter=text node --test test/unit/*.test.js",
70
71
  "test:verbose": "AGENTVIBES_TEST_MODE=true bats -t test/unit/*.bats"
71
72
  },
72
73
  "dependencies": {
@@ -83,5 +84,8 @@
83
84
  },
84
85
  "publishConfig": {
85
86
  "access": "public"
87
+ },
88
+ "devDependencies": {
89
+ "c8": "^10.1.3"
86
90
  }
87
91
  }