agentvibes 2.0.17 → 2.0.20
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.
- package/.bmad-core/agent-teams/team-all.yaml +15 -0
- package/.bmad-core/agent-teams/team-fullstack.yaml +19 -0
- package/.bmad-core/agent-teams/team-ide-minimal.yaml +11 -0
- package/.bmad-core/agent-teams/team-no-ui.yaml +14 -0
- package/.bmad-core/agents/analyst.md +84 -0
- package/.bmad-core/agents/architect.md +85 -0
- package/.bmad-core/agents/bmad-master.md +110 -0
- package/.bmad-core/agents/bmad-orchestrator.md +147 -0
- package/.bmad-core/agents/dev.md +81 -0
- package/.bmad-core/agents/pm.md +84 -0
- package/.bmad-core/agents/po.md +79 -0
- package/.bmad-core/agents/qa.md +87 -0
- package/.bmad-core/agents/sm.md +65 -0
- package/.bmad-core/agents/ux-expert.md +69 -0
- package/.bmad-core/checklists/architect-checklist.md +440 -0
- package/.bmad-core/checklists/change-checklist.md +184 -0
- package/.bmad-core/checklists/pm-checklist.md +372 -0
- package/.bmad-core/checklists/po-master-checklist.md +434 -0
- package/.bmad-core/checklists/story-dod-checklist.md +96 -0
- package/.bmad-core/checklists/story-draft-checklist.md +155 -0
- package/.bmad-core/core-config.yaml +22 -0
- package/.bmad-core/data/bmad-kb.md +809 -0
- package/.bmad-core/data/brainstorming-techniques.md +38 -0
- package/.bmad-core/data/elicitation-methods.md +156 -0
- package/.bmad-core/data/technical-preferences.md +5 -0
- package/.bmad-core/data/test-levels-framework.md +148 -0
- package/.bmad-core/data/test-priorities-matrix.md +174 -0
- package/.bmad-core/enhanced-ide-development-workflow.md +248 -0
- package/.bmad-core/install-manifest.yaml +230 -0
- package/.bmad-core/tasks/advanced-elicitation.md +119 -0
- package/.bmad-core/tasks/apply-qa-fixes.md +150 -0
- package/.bmad-core/tasks/brownfield-create-epic.md +162 -0
- package/.bmad-core/tasks/brownfield-create-story.md +149 -0
- package/.bmad-core/tasks/correct-course.md +72 -0
- package/.bmad-core/tasks/create-brownfield-story.md +314 -0
- package/.bmad-core/tasks/create-deep-research-prompt.md +280 -0
- package/.bmad-core/tasks/create-doc.md +103 -0
- package/.bmad-core/tasks/create-next-story.md +114 -0
- package/.bmad-core/tasks/document-project.md +345 -0
- package/.bmad-core/tasks/execute-checklist.md +88 -0
- package/.bmad-core/tasks/facilitate-brainstorming-session.md +138 -0
- package/.bmad-core/tasks/generate-ai-frontend-prompt.md +53 -0
- package/.bmad-core/tasks/index-docs.md +175 -0
- package/.bmad-core/tasks/kb-mode-interaction.md +77 -0
- package/.bmad-core/tasks/nfr-assess.md +345 -0
- package/.bmad-core/tasks/qa-gate.md +163 -0
- package/.bmad-core/tasks/review-story.md +316 -0
- package/.bmad-core/tasks/risk-profile.md +355 -0
- package/.bmad-core/tasks/shard-doc.md +187 -0
- package/.bmad-core/tasks/test-design.md +176 -0
- package/.bmad-core/tasks/trace-requirements.md +266 -0
- package/.bmad-core/tasks/validate-next-story.md +136 -0
- package/.bmad-core/templates/architecture-tmpl.yaml +651 -0
- package/.bmad-core/templates/brainstorming-output-tmpl.yaml +156 -0
- package/.bmad-core/templates/brownfield-architecture-tmpl.yaml +477 -0
- package/.bmad-core/templates/brownfield-prd-tmpl.yaml +281 -0
- package/.bmad-core/templates/competitor-analysis-tmpl.yaml +307 -0
- package/.bmad-core/templates/front-end-architecture-tmpl.yaml +219 -0
- package/.bmad-core/templates/front-end-spec-tmpl.yaml +350 -0
- package/.bmad-core/templates/fullstack-architecture-tmpl.yaml +824 -0
- package/.bmad-core/templates/market-research-tmpl.yaml +253 -0
- package/.bmad-core/templates/prd-tmpl.yaml +203 -0
- package/.bmad-core/templates/project-brief-tmpl.yaml +222 -0
- package/.bmad-core/templates/qa-gate-tmpl.yaml +103 -0
- package/.bmad-core/templates/story-tmpl.yaml +138 -0
- package/.bmad-core/user-guide.md +577 -0
- package/.bmad-core/utils/bmad-doc-template.md +327 -0
- package/.bmad-core/utils/workflow-management.md +71 -0
- package/.bmad-core/workflows/brownfield-fullstack.yaml +298 -0
- package/.bmad-core/workflows/brownfield-service.yaml +188 -0
- package/.bmad-core/workflows/brownfield-ui.yaml +198 -0
- package/.bmad-core/workflows/greenfield-fullstack.yaml +241 -0
- package/.bmad-core/workflows/greenfield-service.yaml +207 -0
- package/.bmad-core/workflows/greenfield-ui.yaml +236 -0
- package/.bmad-core/working-in-the-brownfield.md +606 -0
- package/.claude/activation-instructions +54 -0
- package/.claude/commands/BMad/agents/analyst.md +88 -0
- package/.claude/commands/BMad/agents/architect.md +89 -0
- package/.claude/commands/BMad/agents/bmad-master.md +114 -0
- package/.claude/commands/BMad/agents/bmad-orchestrator.md +151 -0
- package/.claude/commands/BMad/agents/dev.md +85 -0
- package/.claude/commands/BMad/agents/pm.md +88 -0
- package/.claude/commands/BMad/agents/po.md +83 -0
- package/.claude/commands/BMad/agents/qa.md +91 -0
- package/.claude/commands/BMad/agents/sm.md +69 -0
- package/.claude/commands/BMad/agents/ux-expert.md +73 -0
- package/.claude/commands/BMad/tasks/advanced-elicitation.md +123 -0
- package/.claude/commands/BMad/tasks/apply-qa-fixes.md +154 -0
- package/.claude/commands/BMad/tasks/brownfield-create-epic.md +166 -0
- package/.claude/commands/BMad/tasks/brownfield-create-story.md +153 -0
- package/.claude/commands/BMad/tasks/correct-course.md +76 -0
- package/.claude/commands/BMad/tasks/create-brownfield-story.md +318 -0
- package/.claude/commands/BMad/tasks/create-deep-research-prompt.md +284 -0
- package/.claude/commands/BMad/tasks/create-doc.md +107 -0
- package/.claude/commands/BMad/tasks/create-next-story.md +118 -0
- package/.claude/commands/BMad/tasks/document-project.md +349 -0
- package/.claude/commands/BMad/tasks/execute-checklist.md +92 -0
- package/.claude/commands/BMad/tasks/facilitate-brainstorming-session.md +142 -0
- package/.claude/commands/BMad/tasks/generate-ai-frontend-prompt.md +57 -0
- package/.claude/commands/BMad/tasks/index-docs.md +179 -0
- package/.claude/commands/BMad/tasks/kb-mode-interaction.md +81 -0
- package/.claude/commands/BMad/tasks/nfr-assess.md +349 -0
- package/.claude/commands/BMad/tasks/qa-gate.md +167 -0
- package/.claude/commands/BMad/tasks/review-story.md +320 -0
- package/.claude/commands/BMad/tasks/risk-profile.md +359 -0
- package/.claude/commands/BMad/tasks/shard-doc.md +191 -0
- package/.claude/commands/BMad/tasks/test-design.md +180 -0
- package/.claude/commands/BMad/tasks/trace-requirements.md +270 -0
- package/.claude/commands/BMad/tasks/validate-next-story.md +140 -0
- package/.claude/github-star-reminder.txt +1 -1
- package/.claude/hooks/bmad-tts-injector.sh +33 -4
- package/.claude/hooks/bmad-voice-manager.sh +146 -10
- package/.claude/hooks/check-output-style.sh +60 -8
- package/.claude/hooks/github-star-reminder.sh +67 -7
- package/.claude/hooks/language-manager.sh +34 -2
- package/.claude/hooks/learn-manager.sh +34 -2
- package/.claude/hooks/personality-manager.sh +34 -1
- package/.claude/hooks/piper-download-voices.sh +131 -9
- package/.claude/hooks/piper-installer.sh +38 -4
- package/.claude/hooks/piper-voice-manager.sh +102 -36
- package/.claude/hooks/play-tts-elevenlabs.sh +32 -6
- package/.claude/hooks/play-tts-piper.sh +79 -18
- package/.claude/hooks/play-tts.sh +34 -3
- package/.claude/hooks/provider-commands.sh +36 -1
- package/.claude/hooks/provider-manager.sh +32 -1
- package/.claude/hooks/replay-target-audio.sh +34 -3
- package/.claude/hooks/sentiment-manager.sh +39 -1
- package/.claude/hooks/speed-manager.sh +36 -2
- package/.claude/hooks/voice-manager.sh +85 -6
- package/.claude/hooks/voices-config.sh +39 -2
- package/README.md +77 -137
- package/RELEASE_NOTES.md +269 -0
- package/RELEASE_NOTES_v2.0.17_DRAFT.md +650 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760744118.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760748535.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760748676.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760750748.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760750947.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760752718.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760752907.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753017.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753045.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753241.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753315.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753382.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753408.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753426.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753446.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753541.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753553.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753577.mp3 +0 -0
- package/agentvibes.org/.claude/commands/agent-vibes/add.md +21 -0
- package/agentvibes.org/.claude/commands/agent-vibes/agent-vibes.md +68 -0
- package/agentvibes.org/.claude/commands/agent-vibes/bmad.md +196 -0
- package/agentvibes.org/.claude/commands/agent-vibes/commands.json +77 -0
- package/agentvibes.org/.claude/commands/agent-vibes/get.md +9 -0
- package/agentvibes.org/.claude/commands/agent-vibes/language.md +23 -0
- package/agentvibes.org/.claude/commands/agent-vibes/learn.md +67 -0
- package/agentvibes.org/.claude/commands/agent-vibes/list.md +13 -0
- package/agentvibes.org/.claude/commands/agent-vibes/personality.md +79 -0
- package/agentvibes.org/.claude/commands/agent-vibes/preview.md +17 -0
- package/agentvibes.org/.claude/commands/agent-vibes/provider.md +54 -0
- package/agentvibes.org/.claude/commands/agent-vibes/replay-target.md +14 -0
- package/agentvibes.org/.claude/commands/agent-vibes/replay.md +19 -0
- package/agentvibes.org/.claude/commands/agent-vibes/sample.md +12 -0
- package/agentvibes.org/.claude/commands/agent-vibes/sentiment.md +52 -0
- package/agentvibes.org/.claude/commands/agent-vibes/set-language.md +47 -0
- package/agentvibes.org/.claude/commands/agent-vibes/set-pretext.md +65 -0
- package/agentvibes.org/.claude/commands/agent-vibes/set-speed.md +41 -0
- package/agentvibes.org/.claude/commands/agent-vibes/switch.md +53 -0
- package/agentvibes.org/.claude/commands/agent-vibes/target-voice.md +26 -0
- package/agentvibes.org/.claude/commands/agent-vibes/target.md +30 -0
- package/agentvibes.org/.claude/commands/agent-vibes/update.md +20 -0
- package/agentvibes.org/.claude/commands/agent-vibes/version.md +10 -0
- package/agentvibes.org/.claude/commands/agent-vibes/whoami.md +7 -0
- package/agentvibes.org/.claude/hooks/bmad-tts-injector.sh +386 -0
- package/agentvibes.org/.claude/hooks/bmad-voice-manager.sh +375 -0
- package/agentvibes.org/.claude/hooks/check-output-style.sh +60 -0
- package/agentvibes.org/.claude/hooks/github-star-reminder.sh +94 -0
- package/agentvibes.org/.claude/hooks/language-manager.sh +360 -0
- package/agentvibes.org/.claude/hooks/learn-manager.sh +443 -0
- package/agentvibes.org/.claude/hooks/personality-manager.sh +324 -0
- package/agentvibes.org/.claude/hooks/piper-download-voices.sh +133 -0
- package/agentvibes.org/.claude/hooks/piper-installer.sh +144 -0
- package/agentvibes.org/.claude/hooks/piper-voice-manager.sh +227 -0
- package/agentvibes.org/.claude/hooks/play-tts-elevenlabs.sh +376 -0
- package/agentvibes.org/.claude/hooks/play-tts-piper.sh +281 -0
- package/agentvibes.org/.claude/hooks/play-tts.sh +69 -0
- package/agentvibes.org/.claude/hooks/provider-commands.sh +505 -0
- package/agentvibes.org/.claude/hooks/provider-manager.sh +248 -0
- package/agentvibes.org/.claude/hooks/replay-target-audio.sh +64 -0
- package/agentvibes.org/.claude/hooks/sentiment-manager.sh +163 -0
- package/agentvibes.org/.claude/hooks/speed-manager.sh +259 -0
- package/agentvibes.org/.claude/hooks/voice-manager.sh +477 -0
- package/agentvibes.org/.claude/hooks/voices-config.sh +33 -0
- package/agentvibes.org/.claude/journal/2025-10-07.html +373 -0
- package/agentvibes.org/.claude/journal/index.html +91 -0
- package/agentvibes.org/.claude/output-styles/agent-vibes.md +203 -0
- package/agentvibes.org/.claude/personalities/angry.md +17 -0
- package/agentvibes.org/.claude/personalities/annoying.md +17 -0
- package/agentvibes.org/.claude/personalities/crass.md +17 -0
- package/agentvibes.org/.claude/personalities/dramatic.md +17 -0
- package/agentvibes.org/.claude/personalities/dry-humor.md +53 -0
- package/agentvibes.org/.claude/personalities/flirty.md +23 -0
- package/agentvibes.org/.claude/personalities/funny.md +17 -0
- package/agentvibes.org/.claude/personalities/grandpa.md +35 -0
- package/agentvibes.org/.claude/personalities/millennial.md +17 -0
- package/agentvibes.org/.claude/personalities/moody.md +17 -0
- package/agentvibes.org/.claude/personalities/normal.md +19 -0
- package/agentvibes.org/.claude/personalities/pirate.md +17 -0
- package/agentvibes.org/.claude/personalities/poetic.md +17 -0
- package/agentvibes.org/.claude/personalities/professional.md +17 -0
- package/agentvibes.org/.claude/personalities/robot.md +17 -0
- package/agentvibes.org/.claude/personalities/sarcastic.md +41 -0
- package/agentvibes.org/.claude/personalities/sassy.md +17 -0
- package/agentvibes.org/.claude/personalities/surfer-dude.md +17 -0
- package/agentvibes.org/.claude/personalities/zen.md +17 -0
- package/agentvibes.org/.claude/piper-voices-dir.txt +1 -0
- package/agentvibes.org/.claude/plugins/bmad-voices.md +42 -0
- package/agentvibes.org/.claude/tts-provider.txt +1 -0
- package/agentvibes.org/.mcp-minimal.json +60 -0
- package/agentvibes.org/CHANGELOG.md +56 -0
- package/agentvibes.org/README.md +93 -0
- package/agentvibes.org/app/(auth)/layout.tsx +15 -0
- package/agentvibes.org/app/(auth)/reset-password/page.tsx +45 -0
- package/agentvibes.org/app/(auth)/signin/page.tsx +82 -0
- package/agentvibes.org/app/(auth)/signup/page.tsx +104 -0
- package/agentvibes.org/app/(default)/blog/[slug]/page.tsx +128 -0
- package/agentvibes.org/app/(default)/blog/page.tsx +95 -0
- package/agentvibes.org/app/(default)/layout.tsx +31 -0
- package/agentvibes.org/app/(default)/page.tsx +20 -0
- package/agentvibes.org/app/api/hello/route.ts +3 -0
- package/agentvibes.org/app/css/additional-styles/theme.css +82 -0
- package/agentvibes.org/app/css/additional-styles/utility-patterns.css +55 -0
- package/agentvibes.org/app/css/style.css +100 -0
- package/agentvibes.org/app/layout.tsx +63 -0
- package/agentvibes.org/components/code-block.tsx +27 -0
- package/agentvibes.org/components/cta.tsx +58 -0
- package/agentvibes.org/components/features.tsx +256 -0
- package/agentvibes.org/components/hero-home.tsx +133 -0
- package/agentvibes.org/components/mdx-components.tsx +128 -0
- package/agentvibes.org/components/modal-video.tsx +137 -0
- package/agentvibes.org/components/page-illustration.tsx +55 -0
- package/agentvibes.org/components/spotlight.tsx +77 -0
- package/agentvibes.org/components/testimonials.tsx +282 -0
- package/agentvibes.org/components/ui/footer.tsx +82 -0
- package/agentvibes.org/components/ui/header.tsx +68 -0
- package/agentvibes.org/components/ui/logo.tsx +10 -0
- package/agentvibes.org/components/workflows.tsx +176 -0
- package/agentvibes.org/content/blog/discovering-new-piper-voices.mdx +253 -0
- package/agentvibes.org/content/blog/getting-started-agentvibes.mdx +228 -0
- package/agentvibes.org/content/blog/introducing-agentvibes-v2.mdx +250 -0
- package/agentvibes.org/content/blog/language-learning-with-agentvibes.mdx +142 -0
- package/agentvibes.org/content/blog/voice-personalities-guide.mdx +119 -0
- package/agentvibes.org/lib/blog.ts +73 -0
- package/agentvibes.org/next.config.js +6 -0
- package/agentvibes.org/package-lock.json +4285 -0
- package/agentvibes.org/package.json +40 -0
- package/agentvibes.org/pnpm-lock.yaml +1141 -0
- package/agentvibes.org/postcss.config.js +5 -0
- package/agentvibes.org/public/audio/02-sarcastic.mp3 +0 -0
- package/agentvibes.org/public/audio/03-angry.mp3 +0 -0
- package/agentvibes.org/public/audio/04-grandpa.mp3 +0 -0
- package/agentvibes.org/public/audio/05-sarcastic-example2.mp3 +0 -0
- package/agentvibes.org/public/audio/french-rachel.mp3 +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_0_Cori_Samuel.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_10_Steve_C.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_11_Owlivia.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_12_Paul_Hampton.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_13_Jennifer_Dorr.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_14_Emily_Cripps.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_15_Martin_Clifton.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_1_Kara_Shallenberg.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_2_Kristin_Hughes.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_3_Maria_Kasper.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_4_Mike_Pelton.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_5_Mark_Nelson.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_6_Michael_Scherer.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_7_James_K_White.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_8_Rose_Ibex.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_9_progressingamerica.wav +0 -0
- package/agentvibes.org/public/audio/spanish-antoni.mp3 +0 -0
- package/agentvibes.org/public/favicon.ico +0 -0
- package/agentvibes.org/public/fonts/nacelle-italic.woff2 +0 -0
- package/agentvibes.org/public/fonts/nacelle-regular.woff2 +0 -0
- package/agentvibes.org/public/fonts/nacelle-semibold.woff2 +0 -0
- package/agentvibes.org/public/fonts/nacelle-semibolditalic.woff2 +0 -0
- package/agentvibes.org/public/images/blurred-shape-gray.svg +1 -0
- package/agentvibes.org/public/images/blurred-shape.svg +1 -0
- package/agentvibes.org/public/images/client-logo-01.svg +1 -0
- package/agentvibes.org/public/images/client-logo-02.svg +1 -0
- package/agentvibes.org/public/images/client-logo-03.svg +1 -0
- package/agentvibes.org/public/images/client-logo-04.svg +1 -0
- package/agentvibes.org/public/images/client-logo-05.svg +1 -0
- package/agentvibes.org/public/images/client-logo-06.svg +1 -0
- package/agentvibes.org/public/images/client-logo-07.svg +1 -0
- package/agentvibes.org/public/images/client-logo-08.svg +1 -0
- package/agentvibes.org/public/images/client-logo-09.svg +1 -0
- package/agentvibes.org/public/images/features.png +0 -0
- package/agentvibes.org/public/images/footer-illustration.svg +1 -0
- package/agentvibes.org/public/images/hero-image-01.jpg +0 -0
- package/agentvibes.org/public/images/logo.svg +1 -0
- package/agentvibes.org/public/images/page-illustration.svg +1 -0
- package/agentvibes.org/public/images/secondary-illustration.svg +1 -0
- package/agentvibes.org/public/images/testimonial-01.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-02.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-03.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-04.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-05.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-06.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-07.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-08.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-09.jpg +0 -0
- package/agentvibes.org/public/images/workflow-01.png +0 -0
- package/agentvibes.org/public/images/workflow-02.png +0 -0
- package/agentvibes.org/public/images/workflow-03.png +0 -0
- package/agentvibes.org/public/videos/video.mp4 +0 -0
- package/agentvibes.org/tsconfig.json +28 -0
- package/agentvibes.org/utils/useMasonry.tsx +67 -0
- package/agentvibes.org/utils/useMousePosition.tsx +27 -0
- package/docs/ai-optimized-documentation-standards.md +78 -4
- package/docs/bryce-beattie-voice-licensing.md +131 -0
- package/docs/commands.md +21 -1
- package/docs/mcp-setup.md +1 -6
- package/github-star-reminder.txt +1 -0
- package/linkedin/vibe-coding-and-pulseaudio.md +121 -0
- package/mcp-server/WINDOWS_SETUP.md +182 -199
- package/mcp-server/docs/elevenlabs-setup.md +213 -0
- package/mcp-server/docs/troubleshooting-audio.md +316 -0
- package/mcp-server/server.py +38 -4
- package/mcp-server/test_server.py +38 -3
- package/package.json +1 -1
- package/scripts/audio-tunnel.config +17 -0
- package/test/helpers/test-helper.bash +31 -4
- package/test/unit/personality-manager.bats +22 -6
- package/test/unit/play-tts.bats +21 -3
- package/test/unit/provider-manager.bats +508 -0
- package/test/unit/speed-manager.bats +436 -0
- package/test/unit/voice-manager.bats +4 -1
- package/.claude/piper-voices/en_US-lessac-medium.onnx +0 -0
- package/.claude/piper-voices/en_US-lessac-medium.onnx.json +0 -493
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
# 🔊 Audio Troubleshooting Guide
|
|
2
|
+
|
|
3
|
+
**No sound?** Let's fix it! This guide covers the most common audio issues.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Quick Checks (Try These First!)
|
|
8
|
+
|
|
9
|
+
1. **Is your volume turned up?**
|
|
10
|
+
- Check Windows volume (bottom right corner)
|
|
11
|
+
- Make sure it's not muted (look for red X icon)
|
|
12
|
+
|
|
13
|
+
2. **Are speakers/headphones plugged in?**
|
|
14
|
+
- Check physical connection
|
|
15
|
+
- Try playing music from another app (YouTube, Spotify)
|
|
16
|
+
|
|
17
|
+
3. **Restart Claude Desktop**
|
|
18
|
+
- Close it completely (check system tray)
|
|
19
|
+
- Wait 5 seconds
|
|
20
|
+
- Open it again
|
|
21
|
+
|
|
22
|
+
If still no audio, continue below...
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## For Piper (Free Voices)
|
|
27
|
+
|
|
28
|
+
### Issue: "No audio output"
|
|
29
|
+
|
|
30
|
+
**Step 1: Check if WSL is installed**
|
|
31
|
+
|
|
32
|
+
Open PowerShell and type:
|
|
33
|
+
```powershell
|
|
34
|
+
wsl --status
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
- ✅ If you see status info → WSL is installed
|
|
38
|
+
- ❌ If you see an error → [Install WSL](#installing-wsl)
|
|
39
|
+
|
|
40
|
+
**Step 2: Check if Piper is installed in WSL**
|
|
41
|
+
|
|
42
|
+
In PowerShell, type:
|
|
43
|
+
```powershell
|
|
44
|
+
wsl -e bash -c "which piper"
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
- ✅ If you see a path like `/usr/local/bin/piper` → Piper is installed
|
|
48
|
+
- ❌ If you see nothing or error → [Install Piper](#installing-piper)
|
|
49
|
+
|
|
50
|
+
**Step 3: Test Piper directly**
|
|
51
|
+
|
|
52
|
+
In PowerShell, type:
|
|
53
|
+
```powershell
|
|
54
|
+
wsl -e bash -c "echo 'Hello' | piper --model en_US-lessac-medium --output_file /tmp/test.wav"
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
- ✅ If this completes without error → Piper works
|
|
58
|
+
- ❌ If you see an error → See [Common Piper Errors](#common-piper-errors)
|
|
59
|
+
|
|
60
|
+
**Step 4: Check audio routing from WSL**
|
|
61
|
+
|
|
62
|
+
Windows needs PulseAudio or WSLg to play WSL audio.
|
|
63
|
+
|
|
64
|
+
1. Make sure you're on Windows 11 or Windows 10 version 2004+ (build 19041+)
|
|
65
|
+
2. Check Windows Update for latest updates
|
|
66
|
+
3. Install WSLg update: https://github.com/microsoft/wslg/releases
|
|
67
|
+
|
|
68
|
+
### Installing WSL
|
|
69
|
+
|
|
70
|
+
If WSL isn't installed:
|
|
71
|
+
|
|
72
|
+
1. Open PowerShell **as Administrator**:
|
|
73
|
+
- Press `Windows Key`
|
|
74
|
+
- Type `PowerShell`
|
|
75
|
+
- Right-click "Windows PowerShell"
|
|
76
|
+
- Click "Run as administrator"
|
|
77
|
+
|
|
78
|
+
2. Run:
|
|
79
|
+
```powershell
|
|
80
|
+
wsl --install
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
3. Restart your computer
|
|
84
|
+
|
|
85
|
+
4. Verify:
|
|
86
|
+
```powershell
|
|
87
|
+
wsl --status
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Installing Piper
|
|
91
|
+
|
|
92
|
+
If Piper isn't installed in WSL:
|
|
93
|
+
|
|
94
|
+
1. Open PowerShell and run:
|
|
95
|
+
```powershell
|
|
96
|
+
wsl -e bash -c "curl -sSL https://raw.githubusercontent.com/paulpreibisch/AgentVibes/master/.claude/hooks/piper-installer.sh | bash"
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
2. Wait for installation to complete (2-3 minutes)
|
|
100
|
+
|
|
101
|
+
3. Verify:
|
|
102
|
+
```powershell
|
|
103
|
+
wsl -e bash -c "piper --version"
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Common Piper Errors
|
|
107
|
+
|
|
108
|
+
**Error: "piper: command not found"**
|
|
109
|
+
|
|
110
|
+
Piper isn't installed. See [Installing Piper](#installing-piper)
|
|
111
|
+
|
|
112
|
+
**Error: "Could not find model file"**
|
|
113
|
+
|
|
114
|
+
The voice model isn't downloaded:
|
|
115
|
+
|
|
116
|
+
```powershell
|
|
117
|
+
wsl -e bash -c "piper --model en_US-lessac-medium --download-dir /tmp/piper-models"
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**Error: "Permission denied"**
|
|
121
|
+
|
|
122
|
+
Fix file permissions:
|
|
123
|
+
|
|
124
|
+
```powershell
|
|
125
|
+
wsl -e bash -c "chmod +x ~/.local/bin/piper"
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## For ElevenLabs (Premium Voices)
|
|
131
|
+
|
|
132
|
+
### Issue: "No audio output"
|
|
133
|
+
|
|
134
|
+
**Step 1: Check API key is set**
|
|
135
|
+
|
|
136
|
+
Open PowerShell and type:
|
|
137
|
+
```powershell
|
|
138
|
+
echo $env:ELEVENLABS_API_KEY
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
- ✅ If you see a long string (your API key) → Key is set
|
|
142
|
+
- ❌ If you see nothing or blank → [Set API Key](#setting-api-key)
|
|
143
|
+
|
|
144
|
+
**Step 2: Check internet connection**
|
|
145
|
+
|
|
146
|
+
ElevenLabs requires internet:
|
|
147
|
+
|
|
148
|
+
1. Open your browser
|
|
149
|
+
2. Go to https://elevenlabs.io
|
|
150
|
+
3. Make sure the site loads
|
|
151
|
+
|
|
152
|
+
**Step 3: Check your quota**
|
|
153
|
+
|
|
154
|
+
You might be out of free credits:
|
|
155
|
+
|
|
156
|
+
1. Go to https://elevenlabs.io/app/usage
|
|
157
|
+
2. Check if you've exceeded your character limit
|
|
158
|
+
3. If exceeded → [Upgrade plan](https://elevenlabs.io/pricing) or switch to Piper
|
|
159
|
+
|
|
160
|
+
**Step 4: Test API key is valid**
|
|
161
|
+
|
|
162
|
+
In Claude Desktop, type:
|
|
163
|
+
```
|
|
164
|
+
List all available voices
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
- ✅ If you see a list of voices → API key works
|
|
168
|
+
- ❌ If you see an error → [Check API Key](#checking-api-key)
|
|
169
|
+
|
|
170
|
+
### Setting API Key
|
|
171
|
+
|
|
172
|
+
If your API key isn't set:
|
|
173
|
+
|
|
174
|
+
1. Get your key from https://elevenlabs.io/app/settings/api-keys
|
|
175
|
+
|
|
176
|
+
2. Open PowerShell and run:
|
|
177
|
+
```powershell
|
|
178
|
+
setx ELEVENLABS_API_KEY "your-api-key-here"
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
3. Close PowerShell
|
|
182
|
+
|
|
183
|
+
4. Close Claude Desktop completely
|
|
184
|
+
|
|
185
|
+
5. Open Claude Desktop again
|
|
186
|
+
|
|
187
|
+
### Checking API Key
|
|
188
|
+
|
|
189
|
+
If your API key isn't working:
|
|
190
|
+
|
|
191
|
+
1. Go to https://elevenlabs.io/app/settings/api-keys
|
|
192
|
+
|
|
193
|
+
2. Create a **new** API key
|
|
194
|
+
|
|
195
|
+
3. Copy the new key
|
|
196
|
+
|
|
197
|
+
4. Set it in PowerShell:
|
|
198
|
+
```powershell
|
|
199
|
+
setx ELEVENLABS_API_KEY "your-new-key-here"
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
5. Restart Claude Desktop
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## For Both Providers
|
|
207
|
+
|
|
208
|
+
### Issue: "Tools not showing in Claude Desktop"
|
|
209
|
+
|
|
210
|
+
**Check MCP server status:**
|
|
211
|
+
|
|
212
|
+
1. Close Claude Desktop completely (check system tray)
|
|
213
|
+
|
|
214
|
+
2. Open this folder:
|
|
215
|
+
- Press `Windows Key + R`
|
|
216
|
+
- Paste: `%APPDATA%\Claude\logs`
|
|
217
|
+
- Press Enter
|
|
218
|
+
|
|
219
|
+
3. Open `mcp-server-agentvibes.log`
|
|
220
|
+
|
|
221
|
+
4. Look at the last few lines:
|
|
222
|
+
- ✅ If you see "Server started" → MCP is running
|
|
223
|
+
- ❌ If you see errors → See [Common MCP Errors](#common-mcp-errors)
|
|
224
|
+
|
|
225
|
+
### Common MCP Errors
|
|
226
|
+
|
|
227
|
+
**Error: "Python not found"**
|
|
228
|
+
|
|
229
|
+
Python isn't installed or not in PATH:
|
|
230
|
+
|
|
231
|
+
1. Download Python from https://python.org/downloads
|
|
232
|
+
|
|
233
|
+
2. During installation, **check "Add Python to PATH"**
|
|
234
|
+
|
|
235
|
+
3. Restart Claude Desktop
|
|
236
|
+
|
|
237
|
+
**Error: "Node.js not found"** or **"npx not found"**
|
|
238
|
+
|
|
239
|
+
Node.js isn't installed:
|
|
240
|
+
|
|
241
|
+
1. Download Node.js from https://nodejs.org
|
|
242
|
+
|
|
243
|
+
2. Install it (click Next through all steps)
|
|
244
|
+
|
|
245
|
+
3. Restart Claude Desktop
|
|
246
|
+
|
|
247
|
+
**Error: "Module 'mcp' not found"**
|
|
248
|
+
|
|
249
|
+
MCP package isn't installed:
|
|
250
|
+
|
|
251
|
+
1. Open PowerShell
|
|
252
|
+
|
|
253
|
+
2. Run:
|
|
254
|
+
```powershell
|
|
255
|
+
pip install mcp
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
3. Restart Claude Desktop
|
|
259
|
+
|
|
260
|
+
**Error: "Config file invalid JSON"**
|
|
261
|
+
|
|
262
|
+
Your config file has syntax errors:
|
|
263
|
+
|
|
264
|
+
1. Press `Windows Key + R`
|
|
265
|
+
|
|
266
|
+
2. Paste: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
267
|
+
|
|
268
|
+
3. Open with Notepad
|
|
269
|
+
|
|
270
|
+
4. Make sure it looks exactly like this:
|
|
271
|
+
```json
|
|
272
|
+
{
|
|
273
|
+
"mcpServers": {
|
|
274
|
+
"agentvibes": {
|
|
275
|
+
"command": "npx",
|
|
276
|
+
"args": ["-y", "agentvibes@beta", "agentvibes-mcp-server"]
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
5. Save and restart Claude Desktop
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
## Still Not Working?
|
|
287
|
+
|
|
288
|
+
### Check Claude Desktop Logs
|
|
289
|
+
|
|
290
|
+
Full diagnostic info:
|
|
291
|
+
|
|
292
|
+
1. Press `Windows Key + R`
|
|
293
|
+
|
|
294
|
+
2. Paste: `%APPDATA%\Claude\logs\mcp-server-agentvibes.log`
|
|
295
|
+
|
|
296
|
+
3. Press Enter
|
|
297
|
+
|
|
298
|
+
4. Read the error messages
|
|
299
|
+
|
|
300
|
+
5. Search for the error online or [open an issue](https://github.com/paulpreibisch/AgentVibes/issues)
|
|
301
|
+
|
|
302
|
+
### Get Help
|
|
303
|
+
|
|
304
|
+
- **GitHub Issues**: https://github.com/paulpreibisch/AgentVibes/issues
|
|
305
|
+
- **Discussions**: https://github.com/paulpreibisch/AgentVibes/discussions
|
|
306
|
+
|
|
307
|
+
When asking for help, include:
|
|
308
|
+
- Your Windows version
|
|
309
|
+
- Python version (`python --version`)
|
|
310
|
+
- Node.js version (`node --version`)
|
|
311
|
+
- Provider (Piper or ElevenLabs)
|
|
312
|
+
- Error messages from logs
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
**[← Back to Windows Setup Guide](../mcp-server/WINDOWS_SETUP.md)**
|
package/mcp-server/server.py
CHANGED
|
@@ -1,9 +1,43 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
"""
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
File: mcp-server/server.py
|
|
4
|
+
|
|
5
|
+
AgentVibes - Finally, your AI Agents can Talk Back! Text-to-Speech WITH personality for AI Assistants!
|
|
6
|
+
Website: https://agentvibes.org
|
|
7
|
+
Repository: https://github.com/paulpreibisch/AgentVibes
|
|
8
|
+
|
|
9
|
+
Co-created by Paul Preibisch with Claude AI
|
|
10
|
+
Copyright (c) 2025 Paul Preibisch
|
|
11
|
+
|
|
12
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
13
|
+
you may not use this file except in compliance with the License.
|
|
14
|
+
You may obtain a copy of the License at
|
|
15
|
+
|
|
16
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
17
|
+
|
|
18
|
+
Unless required by applicable law or agreed to in writing, software
|
|
19
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
+
See the License for the specific language governing permissions and
|
|
22
|
+
limitations under the License.
|
|
23
|
+
|
|
24
|
+
DISCLAIMER: This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
25
|
+
express or implied, including but not limited to the warranties of
|
|
26
|
+
merchantability, fitness for a particular purpose and noninfringement.
|
|
27
|
+
In no event shall the authors or copyright holders be liable for any claim,
|
|
28
|
+
damages or other liability, whether in an action of contract, tort or
|
|
29
|
+
otherwise, arising from, out of or in connection with the software or the
|
|
30
|
+
use or other dealings in the software.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
@fileoverview MCP Server exposing AgentVibes TTS capabilities via Model Context Protocol
|
|
35
|
+
@context Provides natural language control of TTS features for Claude Desktop, Warp, and other MCP clients
|
|
36
|
+
@architecture MCP Server implementation wrapping bash scripts, async subprocess execution for non-blocking I/O
|
|
37
|
+
@dependencies .claude/hooks/*.sh scripts, MCP SDK, Python asyncio, subprocess
|
|
38
|
+
@entrypoints Called by Claude Desktop/Warp via MCP protocol (stdio transport)
|
|
39
|
+
@patterns Tool registry pattern, async subprocess wrapping, provider abstraction, state file management
|
|
40
|
+
@related GitHub repo, mcp-server/test_server.py, .claude/hooks/play-tts.sh, docs/ai-optimized-documentation-standards.md
|
|
7
41
|
"""
|
|
8
42
|
|
|
9
43
|
import asyncio
|
|
@@ -1,8 +1,43 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
"""
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
File: mcp-server/test_server.py
|
|
4
|
+
|
|
5
|
+
AgentVibes - Finally, your AI Agents can Talk Back! Text-to-Speech WITH personality for AI Assistants!
|
|
6
|
+
Website: https://agentvibes.org
|
|
7
|
+
Repository: https://github.com/paulpreibisch/AgentVibes
|
|
8
|
+
|
|
9
|
+
Co-created by Paul Preibisch with Claude AI
|
|
10
|
+
Copyright (c) 2025 Paul Preibisch
|
|
11
|
+
|
|
12
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
13
|
+
you may not use this file except in compliance with the License.
|
|
14
|
+
You may obtain a copy of the License at
|
|
15
|
+
|
|
16
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
17
|
+
|
|
18
|
+
Unless required by applicable law or agreed to in writing, software
|
|
19
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
+
See the License for the specific language governing permissions and
|
|
22
|
+
limitations under the License.
|
|
23
|
+
|
|
24
|
+
DISCLAIMER: This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
25
|
+
express or implied, including but not limited to the warranties of
|
|
26
|
+
merchantability, fitness for a particular purpose and noninfringement.
|
|
27
|
+
In no event shall the authors or copyright holders be liable for any claim,
|
|
28
|
+
damages or other liability, whether in an action of contract, tort or
|
|
29
|
+
otherwise, arising from, out of or in connection with the software or the
|
|
30
|
+
use or other dealings in the software.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
@fileoverview Test suite for AgentVibes MCP Server
|
|
35
|
+
@context Validates that MCP server can be imported and initialized correctly
|
|
36
|
+
@architecture Unit tests for server initialization, imports, and helper methods
|
|
37
|
+
@dependencies mcp-server/server.py, Python unittest framework
|
|
38
|
+
@entrypoints Run directly via `python test_server.py` or from test runners
|
|
39
|
+
@patterns Test-driven validation, import testing, path resolution testing
|
|
40
|
+
@related mcp-server/server.py, docs/ai-optimized-documentation-standards.md
|
|
6
41
|
"""
|
|
7
42
|
|
|
8
43
|
import sys
|
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.0.
|
|
4
|
+
"version": "2.0.20",
|
|
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": [
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# AgentVibes Audio Tunnel Configuration
|
|
2
|
+
# Personal configuration - DO NOT COMMIT
|
|
3
|
+
|
|
4
|
+
# Remote server hostname (from your ~/.ssh/config)
|
|
5
|
+
REMOTE_HOST="ubuntu-rdp"
|
|
6
|
+
|
|
7
|
+
# Tunnel port (default: 14713)
|
|
8
|
+
TUNNEL_PORT="14713"
|
|
9
|
+
|
|
10
|
+
# PulseAudio socket path (WSL default)
|
|
11
|
+
PULSE_SOCKET="/mnt/wslg/PulseServer"
|
|
12
|
+
|
|
13
|
+
# Log file for automatic fixes
|
|
14
|
+
AUTO_FIX_LOG="/tmp/audio-tunnel-autofix.log"
|
|
15
|
+
|
|
16
|
+
# Healthcheck interval in minutes (for cron setup)
|
|
17
|
+
CHECK_INTERVAL="5"
|
|
@@ -21,7 +21,16 @@ setup_test_env() {
|
|
|
21
21
|
export ELEVENLABS_API_KEY="test_api_key_mock"
|
|
22
22
|
export CLAUDE_PROJECT_DIR="${BATS_TEST_TMPDIR}/project"
|
|
23
23
|
|
|
24
|
+
# Enable test mode for scripts to skip audio generation
|
|
25
|
+
export AGENTVIBES_TEST_MODE="true"
|
|
26
|
+
|
|
27
|
+
# Detect CI environment
|
|
28
|
+
if [[ "${CI:-false}" == "true" ]] || [[ -n "${GITHUB_ACTIONS:-}" ]]; then
|
|
29
|
+
export AGENTVIBES_CI_MODE="true"
|
|
30
|
+
fi
|
|
31
|
+
|
|
24
32
|
mkdir -p "$CLAUDE_PROJECT_DIR/.claude/audio"
|
|
33
|
+
mkdir -p "$CLAUDE_PROJECT_DIR/.claude"
|
|
25
34
|
}
|
|
26
35
|
|
|
27
36
|
# Clean up test environment
|
|
@@ -45,17 +54,30 @@ mock_curl() {
|
|
|
45
54
|
|
|
46
55
|
# Extract output file from arguments
|
|
47
56
|
OUTPUT_FILE=""
|
|
57
|
+
prev_arg=""
|
|
48
58
|
for arg in "$@"; do
|
|
49
|
-
if [[ "$prev_arg" == "-o" ]]; then
|
|
59
|
+
if [[ "$prev_arg" == "-o" ]] || [[ "$prev_arg" == "--output" ]]; then
|
|
50
60
|
OUTPUT_FILE="$arg"
|
|
51
61
|
break
|
|
52
62
|
fi
|
|
53
63
|
prev_arg="$arg"
|
|
54
64
|
done
|
|
55
65
|
|
|
56
|
-
#
|
|
57
|
-
|
|
58
|
-
echo "
|
|
66
|
+
# If no output file specified, just succeed
|
|
67
|
+
if [[ -z "$OUTPUT_FILE" ]]; then
|
|
68
|
+
echo '{"success":true}'
|
|
69
|
+
exit 0
|
|
70
|
+
fi
|
|
71
|
+
|
|
72
|
+
# Create parent directory if needed
|
|
73
|
+
mkdir -p "$(dirname "$OUTPUT_FILE")"
|
|
74
|
+
|
|
75
|
+
# Generate a minimal valid MP3 file (base64 encoded)
|
|
76
|
+
# This is a real but tiny MP3 file that's essentially silent
|
|
77
|
+
echo "SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4Ljc2LjEwMAAAAAAAAAAAAAAA//tQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASW5mbwAAAA8AAAACAAABhADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA//////////////////////////////////////////////////////////////////8AAAAATGF2YzU4LjEzAAAAAAAAAAAAAAAAJAAAAAAAAAAAhAD5AAAAAAAAAAAAAAAAAAAAAP/7kGQAAANUMEoFPeACNQV40KEYABEY41g5vAAA9RjpZxRTAImU+W8eshaFpAQgALAAYALATx/nYDYCMJ0HITQYYA7AH4c7MoGsnCMU5pnW+OQnBcDrQ9Xx7w37/D+PimYavV8elKUpT9H5fjvhn+mP+n/9P+7vSJ/nf//5m5IEgwJJVljCJJJJIlzfUlJJJL/+ZJJIliTJZJJJJIid//+ZJJJZJJJJJJJf/nf//0P//7U=" | base64 -d > "$OUTPUT_FILE" 2>/dev/null || {
|
|
78
|
+
# Fallback: create a minimal placeholder file if base64 fails
|
|
79
|
+
echo "MOCK_AUDIO_FILE" > "$OUTPUT_FILE"
|
|
80
|
+
}
|
|
59
81
|
|
|
60
82
|
# Simulate successful response
|
|
61
83
|
exit 0
|
|
@@ -113,6 +135,11 @@ setup_agentvibes_scripts() {
|
|
|
113
135
|
|
|
114
136
|
# Make scripts executable
|
|
115
137
|
chmod +x "$TEST_CLAUDE_DIR/hooks/"*.sh
|
|
138
|
+
|
|
139
|
+
# Ensure all config subdirectories exist
|
|
140
|
+
mkdir -p "$TEST_CLAUDE_DIR/config"
|
|
141
|
+
mkdir -p "$CLAUDE_PROJECT_DIR/.claude/config"
|
|
142
|
+
mkdir -p "$HOME/.claude/config"
|
|
116
143
|
}
|
|
117
144
|
|
|
118
145
|
# Create a test personality file
|
|
@@ -35,13 +35,21 @@ teardown() {
|
|
|
35
35
|
[ "$status" -eq 0 ]
|
|
36
36
|
assert_output_contains "Personality set to: sarcastic"
|
|
37
37
|
|
|
38
|
-
# Verify personality was saved
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
# Verify personality was saved (personality-manager writes to project dir OR HOME fallback)
|
|
39
|
+
# Check both locations since the script may use HOME if CLAUDE_PROJECT_DIR isn't set
|
|
40
|
+
if [[ -f "$CLAUDE_PROJECT_DIR/.claude/tts-personality.txt" ]]; then
|
|
41
|
+
assert_file_contains "$CLAUDE_PROJECT_DIR/.claude/tts-personality.txt" "sarcastic"
|
|
42
|
+
elif [[ -f "$HOME/.claude/tts-personality.txt" ]]; then
|
|
43
|
+
assert_file_contains "$HOME/.claude/tts-personality.txt" "sarcastic"
|
|
44
|
+
else
|
|
45
|
+
# File must exist in one of these locations
|
|
46
|
+
return 1
|
|
47
|
+
fi
|
|
41
48
|
}
|
|
42
49
|
|
|
43
50
|
@test "personality-manager get returns current personality" {
|
|
44
|
-
|
|
51
|
+
# Set personality in project-local directory (where the script saves it)
|
|
52
|
+
echo "sarcastic" > "$CLAUDE_PROJECT_DIR/.claude/tts-personality.txt"
|
|
45
53
|
|
|
46
54
|
run "$PERSONALITY_MANAGER" get
|
|
47
55
|
|
|
@@ -73,14 +81,22 @@ teardown() {
|
|
|
73
81
|
}
|
|
74
82
|
|
|
75
83
|
@test "personality-manager reset changes to normal" {
|
|
76
|
-
|
|
84
|
+
# Set personality first - script will write to either project dir or HOME
|
|
85
|
+
"$PERSONALITY_MANAGER" set "sarcastic" > /dev/null 2>&1
|
|
77
86
|
|
|
78
87
|
run "$PERSONALITY_MANAGER" reset
|
|
79
88
|
|
|
80
89
|
[ "$status" -eq 0 ]
|
|
81
90
|
assert_output_contains "Personality reset to: normal"
|
|
82
91
|
|
|
83
|
-
|
|
92
|
+
# Verify reset was saved (check both possible locations)
|
|
93
|
+
if [[ -f "$CLAUDE_PROJECT_DIR/.claude/tts-personality.txt" ]]; then
|
|
94
|
+
assert_file_contains "$CLAUDE_PROJECT_DIR/.claude/tts-personality.txt" "normal"
|
|
95
|
+
elif [[ -f "$HOME/.claude/tts-personality.txt" ]]; then
|
|
96
|
+
assert_file_contains "$HOME/.claude/tts-personality.txt" "normal"
|
|
97
|
+
else
|
|
98
|
+
return 1
|
|
99
|
+
fi
|
|
84
100
|
}
|
|
85
101
|
|
|
86
102
|
@test "personality-manager add creates new personality file" {
|
package/test/unit/play-tts.bats
CHANGED
|
@@ -13,6 +13,9 @@ setup() {
|
|
|
13
13
|
|
|
14
14
|
# Set up voices config
|
|
15
15
|
export PATH="$TEST_CLAUDE_DIR/hooks:$PATH"
|
|
16
|
+
|
|
17
|
+
# Set ElevenLabs as the provider to avoid Piper voice download issues in tests
|
|
18
|
+
echo "elevenlabs" > "$CLAUDE_PROJECT_DIR/.claude/tts-provider.txt"
|
|
16
19
|
}
|
|
17
20
|
|
|
18
21
|
teardown() {
|
|
@@ -22,11 +25,23 @@ teardown() {
|
|
|
22
25
|
@test "play-tts generates audio file" {
|
|
23
26
|
run "$PLAY_TTS" "Test message"
|
|
24
27
|
|
|
28
|
+
# Show output for debugging if test fails
|
|
29
|
+
if [ "$status" -ne 0 ]; then
|
|
30
|
+
echo "Exit status: $status"
|
|
31
|
+
echo "Output: $output"
|
|
32
|
+
fi
|
|
33
|
+
|
|
25
34
|
[ "$status" -eq 0 ]
|
|
26
|
-
assert_output_contains "Saved to:"
|
|
27
35
|
|
|
28
|
-
# Verify audio file was created
|
|
29
|
-
local audio_count
|
|
36
|
+
# Verify audio file was created (in project dir or HOME)
|
|
37
|
+
local audio_count=0
|
|
38
|
+
if [[ -d "$CLAUDE_PROJECT_DIR/.claude/audio" ]]; then
|
|
39
|
+
audio_count=$(find "$CLAUDE_PROJECT_DIR/.claude/audio" -name "tts-*.mp3" -o -name "tts-*.wav" | wc -l)
|
|
40
|
+
fi
|
|
41
|
+
if [[ "$audio_count" -eq 0 ]] && [[ -d "$HOME/.claude/audio" ]]; then
|
|
42
|
+
audio_count=$(find "$HOME/.claude/audio" -name "tts-*.mp3" -o -name "tts-*.wav" | wc -l)
|
|
43
|
+
fi
|
|
44
|
+
|
|
30
45
|
[ "$audio_count" -ge 1 ]
|
|
31
46
|
}
|
|
32
47
|
|
|
@@ -44,6 +59,9 @@ teardown() {
|
|
|
44
59
|
unset CLAUDE_PROJECT_DIR
|
|
45
60
|
cd "$TEST_HOME"
|
|
46
61
|
|
|
62
|
+
# Set provider in HOME directory since project dir is not available
|
|
63
|
+
echo "elevenlabs" > "$TEST_HOME/.claude/tts-provider.txt"
|
|
64
|
+
|
|
47
65
|
run "$PLAY_TTS" "Test message"
|
|
48
66
|
|
|
49
67
|
[ "$status" -eq 0 ]
|