agentvibes 5.6.0 → 5.6.1

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 (101) hide show
  1. package/.agentvibes/config.json +3 -38
  2. package/.claude/config/audio-effects.cfg +1 -1
  3. package/.claude/config/background-music-enabled.txt +1 -1
  4. package/.claude/config/background-music-position.txt +6 -6
  5. package/.claude/github-star-reminder.txt +1 -1
  6. package/.claude/hooks/play-tts-ssh-remote.sh +119 -42
  7. package/.claude/hooks/play-tts-windows-receiver.sh +31 -0
  8. package/.claude/hooks/stop.sh +2 -27
  9. package/.claude/hooks-windows/play-tts-windows-sapi.ps1 +108 -108
  10. package/.claude/hooks-windows/play-tts.ps1 +23 -7
  11. package/.claude/piper-voices-dir.txt +1 -1
  12. package/.clawdbot/skill/README.md +326 -0
  13. package/.mcp.json +17 -27
  14. package/README.md +11 -2
  15. package/RELEASE_NOTES.md +38 -0
  16. package/bin/agent-vibes +39 -39
  17. package/package.json +1 -1
  18. package/src/bmad-detector.js +71 -71
  19. package/src/cli/list-personalities.js +110 -110
  20. package/src/cli/list-voices.js +114 -114
  21. package/src/commands/bmad-voices.js +394 -394
  22. package/src/commands/install-mcp.js +476 -476
  23. package/src/console/brand-colors.js +13 -13
  24. package/src/console/constants/personalities.js +44 -44
  25. package/src/console/modals/modal-overlay.js +247 -247
  26. package/src/console/navigation.js +5 -1
  27. package/src/console/tabs/agents-tab.js +5 -5
  28. package/src/console/tabs/help-tab.js +314 -314
  29. package/src/console/tabs/readme-tab.js +272 -272
  30. package/src/console/tabs/setup-tab.js +32 -17
  31. package/src/console/tabs/voices-tab.js +2 -2
  32. package/src/console/widgets/destroy-list.js +25 -25
  33. package/src/console/widgets/notice.js +55 -55
  34. package/src/console/widgets/personality-picker.js +213 -213
  35. package/src/console/widgets/reverb-picker.js +97 -97
  36. package/src/console/widgets/track-picker.js +1 -1
  37. package/src/i18n/de.js +202 -202
  38. package/src/i18n/es.js +202 -202
  39. package/src/i18n/fr.js +202 -202
  40. package/src/i18n/hi.js +202 -202
  41. package/src/i18n/ja.js +202 -202
  42. package/src/i18n/ko.js +202 -202
  43. package/src/i18n/pt.js +202 -202
  44. package/src/i18n/strings.js +54 -54
  45. package/src/i18n/zh-CN.js +202 -202
  46. package/src/installer/language-screen.js +31 -31
  47. package/src/installer/music-file-input.js +304 -304
  48. package/src/services/agent-voice-store.js +420 -423
  49. package/src/services/config-service.js +264 -264
  50. package/src/services/language-service.js +47 -47
  51. package/src/services/llm-provider-service.js +11 -4
  52. package/src/services/navigation-service.js +34 -10
  53. package/src/services/provider-service.js +143 -143
  54. package/src/utils/audio-duration-validator.js +298 -298
  55. package/src/utils/audio-format-validator.js +277 -277
  56. package/src/utils/dependency-checker.js +469 -469
  57. package/src/utils/file-ownership-verifier.js +358 -358
  58. package/src/utils/list-formatter.js +194 -194
  59. package/src/utils/music-file-validator.js +285 -285
  60. package/src/utils/preview-list-prompt.js +136 -136
  61. package/src/utils/secure-music-storage.js +412 -412
  62. package/.agentvibes/LITE-MODE.md +0 -236
  63. package/.agentvibes/README.md +0 -136
  64. package/.agentvibes/backup/session-start-tts.sh.20251210_212814 +0 -141
  65. package/.agentvibes/backups/agents/analyst_20260204_144958.md +0 -78
  66. package/.agentvibes/backups/agents/architect_20260204_144958.md +0 -72
  67. package/.agentvibes/backups/agents/dev_20260204_144958.md +0 -74
  68. package/.agentvibes/backups/agents/pm_20260204_144958.md +0 -72
  69. package/.agentvibes/backups/agents/quick-flow-solo-dev_20260204_144958.md +0 -64
  70. package/.agentvibes/backups/agents/sm_20260204_144958.md +0 -87
  71. package/.agentvibes/backups/agents/tea_20260204_144958.md +0 -79
  72. package/.agentvibes/backups/agents/tech-writer_20260204_144958.md +0 -82
  73. package/.agentvibes/backups/agents/ux-designer_20260204_144958.md +0 -80
  74. package/.agentvibes/config/README-personality-defaults.md +0 -162
  75. package/.agentvibes/config/agentvibes.json +0 -1
  76. package/.agentvibes/config/mode.txt +0 -1
  77. package/.agentvibes/config/personality-voice-defaults.default.json +0 -21
  78. package/.agentvibes/config/save-audio.txt +0 -1
  79. package/.agentvibes/config/voice-metadata.json +0 -160
  80. package/.agentvibes/hooks/help.sh +0 -191
  81. package/.agentvibes/hooks/post-tool-use-lite.sh +0 -111
  82. package/.agentvibes/hooks/save-audio-manager.sh +0 -162
  83. package/.agentvibes/hooks/session-start-full-optimized.sh +0 -102
  84. package/.agentvibes/hooks/session-start-full.sh +0 -142
  85. package/.agentvibes/hooks/session-start-lite-v2.sh +0 -34
  86. package/.agentvibes/hooks/session-start-lite.sh +0 -29
  87. package/.agentvibes/hooks/stop-lite.sh +0 -115
  88. package/.agentvibes/hooks/switch-mode.sh +0 -215
  89. package/.agentvibes/output-styles/audio-summary.md +0 -30
  90. package/.claude/audio/voice-samples/piper/alan.wav +0 -0
  91. package/.claude/audio/voice-samples/piper/amy.wav +0 -0
  92. package/.claude/audio/voice-samples/piper/charlotte.wav +0 -0
  93. package/.claude/audio/voice-samples/piper/joe.wav +0 -0
  94. package/.claude/audio/voice-samples/piper/john.wav +0 -0
  95. package/.claude/audio/voice-samples/piper/katherine.wav +0 -0
  96. package/.claude/audio/voice-samples/piper/kristin.wav +0 -0
  97. package/.claude/audio/voice-samples/piper/linda.wav +0 -0
  98. package/.claude/audio/voice-samples/piper/marcus.wav +0 -0
  99. package/.claude/audio/voice-samples/piper/ryan.wav +0 -0
  100. package/.claude/hooks/post-response.sh +0 -41
  101. package/bin/ensure-soprano-running.sh +0 -43
@@ -0,0 +1,326 @@
1
+ # 🎤 AgentVibes OpenClaw Skill
2
+
3
+ > **Give your voiceless server a voice!** Professional text-to-speech for OpenClaw AI agents running on remote servers, VPS, Mac Minis, or isolated hardware.
4
+
5
+ [![npm version](https://img.shields.io/npm/v/agentvibes)](https://www.npmjs.com/package/agentvibes)
6
+ [![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
7
+
8
+ **Published by**: Paul Preibisch ([@997Fire](https://x.com/997Fire))
9
+ **ClawHub**: https://clawhub.ai/paulpreibisch/agentvibes-openclaw-skill
10
+ **Full Documentation**: https://github.com/paulpreibisch/AgentVibes#-openclaw-integration
11
+
12
+ ---
13
+
14
+ ## 🎯 What This Skill Does
15
+
16
+ AgentVibes adds **professional voice output** to your OpenClaw AI agent using intelligent text streaming—no matter where your agent is running (Mac Mini, VPS, old PC, cloud server).
17
+
18
+ ### The Problem
19
+
20
+ You've wisely deployed OpenClaw on isolated hardware for security. But now:
21
+ - Your server has no speakers
22
+ - Your AI agent is mute
23
+ - You're stuck reading text responses
24
+ - Mobile development is clunky
25
+
26
+ ### The Solution
27
+
28
+ **Text streaming architecture**: Server sends text → Your device generates voice locally
29
+
30
+ **Benefits:**
31
+ - ✅ 99.9% less bandwidth than audio streaming (200KB vs 800MB per 100 responses)
32
+ - ✅ Works on Linux, macOS, Android
33
+ - ✅ 50+ voices in 30+ languages (free, offline)
34
+ - ✅ Maintains security isolation
35
+ - ✅ Walk, commute, or multitask while your agent talks
36
+
37
+ ---
38
+
39
+ ## 🚀 Quick Start
40
+
41
+ ### 1. Install AgentVibes on Your OpenClaw Server
42
+
43
+ ```bash
44
+ # On your remote server where OpenClaw runs
45
+ npx agentvibes install
46
+ ```
47
+
48
+ This installs:
49
+ - Piper TTS engine (free, offline)
50
+ - 50+ professional AI voices
51
+ - Voice management slash commands
52
+ - Text streaming receiver support
53
+
54
+ ### 2. Test Voice Output
55
+
56
+ ```bash
57
+ # Test that TTS works
58
+ /agent-vibes:sample
59
+ ```
60
+
61
+ You should hear audio through your device speakers!
62
+
63
+ ### 3. Customize Your Voice (Optional)
64
+
65
+ ```bash
66
+ # List available voices
67
+ /agent-vibes:list
68
+
69
+ # Preview voices before choosing
70
+ /agent-vibes:preview 5
71
+
72
+ # Switch to your preferred voice
73
+ /agent-vibes:switch en_US-amy-medium
74
+ ```
75
+
76
+ ---
77
+
78
+ ## 📱 Mobile Setup (Walk & Talk)
79
+
80
+ Want your OpenClaw agent to speak to you while walking? Set up the **AgentVibes Receiver**:
81
+
82
+ ### For Android (Termux)
83
+
84
+ ```bash
85
+ # On your Android phone
86
+ pkg install termux-api openssh python
87
+ pip install agentvibes
88
+
89
+ # On your server, configure SSH host
90
+ echo "android" > ~/.claude/ssh-remote-host.txt
91
+ ```
92
+
93
+ Now text streams to your phone, generates voice locally, and plays through headphones—no button presses needed!
94
+
95
+ **Full mobile setup**: https://github.com/paulpreibisch/AgentVibes#-openclaw-integration
96
+
97
+ ---
98
+
99
+ ## 🎭 Available Voices
100
+
101
+ ### English Voices
102
+ - `en_US-lessac-medium` - Default male (clear, professional)
103
+ - `en_US-amy-medium` - Friendly female
104
+ - `en_US-ryan-high` - High quality male
105
+ - `en_GB-alan-medium` - British male
106
+
107
+ ### Romance Languages
108
+ - `es_ES-davefx-medium` - Spanish (Spain)
109
+ - `fr_FR-siwis-medium` - French female
110
+ - `it_IT-riccardo-x_low` - Italian male
111
+ - `pt_BR-faber-medium` - Portuguese (Brazilian)
112
+
113
+ ### Asian Languages
114
+ - `ja_JP-ayanami-medium` - Japanese female
115
+ - `zh_CN-huayan-x_low` - Chinese female
116
+ - `ko_KR-kss-medium` - Korean female
117
+
118
+ **And 40+ more voices in 30+ languages!**
119
+
120
+ ---
121
+
122
+ ## 🎮 Voice Control Commands
123
+
124
+ All commands available in OpenClaw chat:
125
+
126
+ ### Voice Selection
127
+ ```bash
128
+ /agent-vibes:list # Show all voices
129
+ /agent-vibes:preview 5 # Preview first 5 voices
130
+ /agent-vibes:switch <voice> # Change voice
131
+ /agent-vibes:get # Show current voice
132
+ ```
133
+
134
+ ### Playback Control
135
+ ```bash
136
+ /agent-vibes:mute # Silence TTS
137
+ /agent-vibes:unmute # Restore voice
138
+ /agent-vibes:replay # Replay last audio
139
+ /agent-vibes:replay 2 # Replay 2nd-to-last
140
+ ```
141
+
142
+ ### Advanced
143
+ ```bash
144
+ /agent-vibes:provider list # Show TTS providers
145
+ /agent-vibes:set-speed 1.2 # Adjust speech rate
146
+ /agent-vibes:personality # Set voice personality
147
+ /agent-vibes:verbosity high # Control how much AI speaks
148
+ ```
149
+
150
+ ---
151
+
152
+ ## 🔧 Common Use Cases
153
+
154
+ ### 1. Code Reviews on the Go
155
+ Walk to a meeting while your AI agent reviews PRs and explains issues verbally.
156
+
157
+ ### 2. Hands-Free Development
158
+ Cook dinner while monitoring deployment status or test results via voice.
159
+
160
+ ### 3. Commute Learning
161
+ Study new frameworks during your commute—have your agent explain concepts aloud.
162
+
163
+ ### 4. Multi-Language Development
164
+ Switch to Spanish, French, or Japanese voices to hear code comments in native languages.
165
+
166
+ ### 5. Accessibility
167
+ Fully accessible voice interface for developers who benefit from audio feedback.
168
+
169
+ ---
170
+
171
+ ## 🔒 Security Considerations
172
+
173
+ **⚠️ CRITICAL**: If running OpenClaw on a remote server, read the security guide:
174
+
175
+ https://github.com/paulpreibisch/AgentVibes/blob/master/docs/security-hardening-guide.md
176
+
177
+ **Required security measures:**
178
+ - SSH key-only authentication
179
+ - Non-standard SSH port (e.g., 2222)
180
+ - Firewall configuration (UFW/iptables)
181
+ - Fail2ban for intrusion prevention
182
+ - VPN tunneling (Tailscale recommended)
183
+
184
+ **Never expose OpenClaw directly to the internet without hardening.**
185
+
186
+ ---
187
+
188
+ ## 🌍 Deployment Options
189
+
190
+ AgentVibes works on all isolated OpenClaw deployments:
191
+
192
+ ### Mac Mini
193
+ ```bash
194
+ # On your Mac Mini
195
+ npx agentvibes install
196
+ ```
197
+
198
+ ### VPS (AWS, DigitalOcean, Database Mart, etc.)
199
+ ```bash
200
+ # On your cloud server
201
+ npx agentvibes install
202
+ ```
203
+
204
+ ### Old PC/Laptop (Repurposed Hardware)
205
+ ```bash
206
+ # On your dedicated machine
207
+ npx agentvibes install
208
+ ```
209
+
210
+ ### Docker Container
211
+ ```bash
212
+ # Inside your OpenClaw container
213
+ npx agentvibes install
214
+ ```
215
+
216
+ ---
217
+
218
+ ## 📊 Bandwidth Comparison
219
+
220
+ **Traditional audio streaming:**
221
+ - 8MB per response
222
+ - 800MB per 100 responses
223
+ - Expensive over cellular
224
+
225
+ **AgentVibes text streaming:**
226
+ - 2KB per response
227
+ - 200KB per 100 responses
228
+ - Negligible cellular cost
229
+
230
+ **Savings: 99.975% bandwidth reduction**
231
+
232
+ ---
233
+
234
+ ## 🆘 Troubleshooting
235
+
236
+ ### No Audio Output
237
+
238
+ ```bash
239
+ # Check if Piper is installed
240
+ which piper
241
+
242
+ # Test audio directly
243
+ echo "Hello world" | piper --model en_US-lessac-medium --output_file test.wav
244
+ aplay test.wav # Linux
245
+ afplay test.wav # macOS
246
+ ```
247
+
248
+ ### Voice Not Found
249
+
250
+ ```bash
251
+ # List installed voices
252
+ /agent-vibes:list
253
+
254
+ # Download voice if missing
255
+ npx agentvibes install
256
+ ```
257
+
258
+ ### SSH Audio Issues
259
+
260
+ ```bash
261
+ # Verify SSH connection
262
+ ssh your-server "echo Connected"
263
+
264
+ # Check receiver script
265
+ ls ~/.termux/agentvibes-play.sh # Android
266
+ ls ~/.agentvibes/play-remote.sh # Linux/macOS
267
+ ```
268
+
269
+ **Full troubleshooting guide**: https://github.com/paulpreibisch/AgentVibes/blob/master/docs/troubleshooting.md
270
+
271
+ ---
272
+
273
+ ## 📚 Additional Documentation
274
+
275
+ ### Full Guides
276
+ - **Main README**: https://github.com/paulpreibisch/AgentVibes
277
+ - **OpenClaw Integration**: https://github.com/paulpreibisch/AgentVibes#-openclaw-integration
278
+ - **Security Hardening**: https://github.com/paulpreibisch/AgentVibes/blob/master/docs/security-hardening-guide.md
279
+ - **Voice Library**: https://github.com/paulpreibisch/AgentVibes/blob/master/docs/voice-library.md
280
+ - **Troubleshooting**: https://github.com/paulpreibisch/AgentVibes/blob/master/docs/troubleshooting.md
281
+
282
+ ### Community
283
+ - **GitHub Issues**: https://github.com/paulpreibisch/AgentVibes/issues
284
+ - **GitHub Discussions**: https://github.com/paulpreibisch/AgentVibes/discussions
285
+ - **Website**: https://agentvibes.org
286
+
287
+ ---
288
+
289
+ ## 🤝 Contributing
290
+
291
+ AgentVibes is open source (Apache 2.0)! Contributions welcome:
292
+
293
+ - 🐛 Report bugs
294
+ - 💡 Suggest features
295
+ - 🌍 Add voice translations
296
+ - 📝 Improve documentation
297
+ - 🔧 Submit pull requests
298
+
299
+ **Repository**: https://github.com/paulpreibisch/AgentVibes
300
+
301
+ ---
302
+
303
+ ## 📄 License
304
+
305
+ Apache License 2.0 - see [LICENSE](https://github.com/paulpreibisch/AgentVibes/blob/master/LICENSE)
306
+
307
+ ---
308
+
309
+ ## 🙏 Credits
310
+
311
+ **Created by**: Paul Preibisch
312
+ **Twitter/X**: [@997Fire](https://x.com/997Fire)
313
+ **Website**: https://agentvibes.org
314
+
315
+ **Powered by**:
316
+ - [Piper TTS](https://github.com/rhasspy/piper) - Fast, offline neural TTS
317
+ - [Hugging Face Voice Models](https://huggingface.co/rhasspy/piper-voices) - 50+ AI voices
318
+ - [OpenClaw](https://openclaw.ai) - AI assistant framework
319
+
320
+ ---
321
+
322
+ **⭐ If you find AgentVibes useful, please star the repo on GitHub!**
323
+
324
+ https://github.com/paulpreibisch/AgentVibes
325
+
326
+ Thank you for using AgentVibes! 🎤✨
package/.mcp.json CHANGED
@@ -1,38 +1,28 @@
1
1
  {
2
2
  "mcpServers": {
3
- "context7": {
3
+ "agentvibes": {
4
+ "command": "npx",
5
+ "args": [
6
+ "-y",
7
+ "--package=agentvibes",
8
+ "agentvibes-mcp-server"
9
+ ]
10
+ },
11
+ "firecrawl": {
4
12
  "command": "npx",
5
- "args": ["@upstash/context7-mcp"]
13
+ "args": [
14
+ "firecrawl-mcp"
15
+ ]
6
16
  },
7
- "sonarqube": {
8
- "command": "docker",
17
+ "context7": {
18
+ "command": "npx",
9
19
  "args": [
10
- "run",
11
- "-i",
12
- "--name",
13
- "sonarqube-mcp-server-agentvibes",
14
- "--rm",
15
- "--dns",
16
- "8.8.8.8",
17
- "--dns",
18
- "8.8.4.4",
19
- "-e",
20
- "SONARQUBE_TOKEN",
21
- "-e",
22
- "SONARQUBE_ORG",
23
- "-e",
24
- "STORAGE_PATH",
25
- "mcp/sonarqube"
20
+ "-y",
21
+ "@upstash/context7-mcp"
26
22
  ],
27
23
  "env": {
28
- "SONARQUBE_TOKEN": "${SONARQUBE_TOKEN}",
29
- "SONARQUBE_ORG": "${SONARQUBE_ORG}",
30
- "STORAGE_PATH": "${STORAGE_PATH}"
24
+ "CONTEXT7_API_KEY": "${CONTEXT7_API_KEY}"
31
25
  }
32
- },
33
- "vercel": {
34
- "type": "sse",
35
- "url": "https://mcp.vercel.com"
36
26
  }
37
27
  }
38
28
  }
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**: v5.6
14
+ **Author**: Paul Preibisch ([@997Fire](https://x.com/997Fire)) | **Version**: v5.6.1
15
15
 
16
16
  ---
17
17
 
@@ -40,7 +40,16 @@ Whether you're coding in Claude Code, chatting in Claude Desktop, using Warp Ter
40
40
 
41
41
  ---
42
42
 
43
- ## 🌟 NEW IN v5.5Per-LLM Audio Routing
43
+ ## 🌟 NEW IN v5.6.1Hermes Agent Integration
44
+
45
+ AgentVibes now speaks for **[Hermes Agent](https://github.com/NousResearch/hermes-agent)** — the self-hosted, self-improving AI assistant. Two production-ready skills ship in `docs/hermes/skills/`:
46
+
47
+ - **`hermes-agentvibes-hook`** — Auto-speaks every Hermes response via AgentVibes TTS. Fires on `agent:end`, strips markdown, rate-limits, and ships with full SSH MITM protection
48
+ - **`agentvibes-target`** — Teaches Hermes to send any text to your speakers on demand, supporting laptop and Android targets
49
+
50
+ Also in this release: Windows PS5.1 compatibility fixes for `play-tts.ps1`, modal/hotkey repairs, and BMAD tab now shows all agents.
51
+
52
+ ## v5.5 — Per-LLM Audio Routing
44
53
 
45
54
  Give **each LLM its own voice, pretext, and music** — Claude Code, Copilot, and Codex can all sound different without touching global settings.
46
55
 
package/RELEASE_NOTES.md CHANGED
@@ -1,5 +1,43 @@
1
1
  # AgentVibes Release Notes
2
2
 
3
+ ## 🤖 v5.6.1 — Hermes Agent Integration & Windows PS5.1 Fixes
4
+
5
+ **Released:** 2026-05-01
6
+
7
+ ### 🎉 Hermes Agent Integration (New!)
8
+
9
+ AgentVibes now officially supports **[Hermes Agent](https://github.com/NousResearch/hermes-agent)** — the self-hosted, self-improving AI assistant. Two production-ready Hermes skills ship in `docs/hermes/skills/`:
10
+
11
+ **`hermes-agentvibes-hook`** — Auto-speaks every Hermes response via AgentVibes
12
+ - Fires on every `agent:end` event (Telegram, Discord, CLI, etc.)
13
+ - Strips markdown, code blocks, emoji before speaking
14
+ - Truncates at word boundaries, rate-limits to prevent queue flooding
15
+ - MITM-safe SSH with `StrictHostKeyChecking=accept-new` + persistent `known_hosts`
16
+ - Full logging to `tts-hook.log` for debugging
17
+
18
+ **`agentvibes-target`** — Teaches Hermes to send any text to your speakers on demand
19
+ - Base64 JSON payload over SSH (same ForceCommand architecture as the Windows receiver)
20
+ - Supports Windows and Android targets
21
+ - Detailed troubleshooting guide included
22
+
23
+ **Install:** Copy the skill to your Hermes home and restart the gateway:
24
+ ```bash
25
+ cp -r docs/hermes/skills/tts/hermes-agentvibes-hook ~/.hermes/skills/tts/
26
+ hermes gateway restart
27
+ ```
28
+
29
+ ### 🐛 Windows PS5.1 Bug Fixes
30
+
31
+ - **play-tts.ps1 PS5.1 compatibility** — Fixed three regressions from v5.6.0 rebase:
32
+ replaced PS7 null-conditional (`?.`) with PS5.1-compatible if/else, added UTF-8 BOM so
33
+ em-dash literals aren't mangled by CP1252, restored piper provider alias and
34
+ `AGENTVIBES_TEXT_FILE` sentinel lost in merge
35
+ - **Modal & hotkey fixes** — Modal escape key, navigation hotkeys, Q+Caps Lock, and voice
36
+ preview error handling all repaired
37
+ - **BMAD tab** — Now shows all agents regardless of module
38
+
39
+ ---
40
+
3
41
  ## 📸 v5.6.0 — TUI Screenshots & Documentation Cleanup
4
42
 
5
43
  **Released:** 2026-04-28
package/bin/agent-vibes CHANGED
@@ -1,40 +1,40 @@
1
1
  #!/usr/bin/env node
2
-
3
- /**
4
- * AgentVibes - Beautiful ElevenLabs TTS voice commands for Claude Code
5
- * This file ensures proper execution when run via npx
6
- */
7
-
8
- import { execFileSync } from 'node:child_process';
9
- import path from 'node:path';
10
- import fs from 'node:fs';
11
- import { fileURLToPath } from 'node:url';
12
-
13
- const __filename = fileURLToPath(import.meta.url);
14
- const __dirname = path.dirname(__filename);
15
-
16
- // Check if we're running in an npx temporary directory
17
- const isNpxExecution = __dirname.includes('_npx') || __dirname.includes('.npm');
18
-
19
- // Get CLI arguments
20
- const arguments_ = process.argv.slice(2);
21
-
22
- // Route through the TUI console (agentvibes.js) which handles install/config/etc
23
- const installerPath = path.join(__dirname, 'agentvibes.js');
24
-
25
- if (!fs.existsSync(installerPath)) {
26
- console.error('Error: Could not find installer.js at', installerPath);
27
- console.error('Current directory:', __dirname);
28
- process.exit(1);
29
- }
30
-
31
- try {
32
- // Security: Use execFileSync with array args to prevent command injection
33
- // Arguments are passed as array elements, not string interpolation
34
- execFileSync('node', [installerPath, ...arguments_], {
35
- stdio: 'inherit',
36
- cwd: path.dirname(__dirname),
37
- });
38
- } catch (error) {
39
- process.exit(error.status || 1);
40
- }
2
+
3
+ /**
4
+ * AgentVibes - Beautiful ElevenLabs TTS voice commands for Claude Code
5
+ * This file ensures proper execution when run via npx
6
+ */
7
+
8
+ import { execFileSync } from 'node:child_process';
9
+ import path from 'node:path';
10
+ import fs from 'node:fs';
11
+ import { fileURLToPath } from 'node:url';
12
+
13
+ const __filename = fileURLToPath(import.meta.url);
14
+ const __dirname = path.dirname(__filename);
15
+
16
+ // Check if we're running in an npx temporary directory
17
+ const isNpxExecution = __dirname.includes('_npx') || __dirname.includes('.npm');
18
+
19
+ // Get CLI arguments
20
+ const arguments_ = process.argv.slice(2);
21
+
22
+ // Route through the TUI console (agentvibes.js) which handles install/config/etc
23
+ const installerPath = path.join(__dirname, 'agentvibes.js');
24
+
25
+ if (!fs.existsSync(installerPath)) {
26
+ console.error('Error: Could not find installer.js at', installerPath);
27
+ console.error('Current directory:', __dirname);
28
+ process.exit(1);
29
+ }
30
+
31
+ try {
32
+ // Security: Use execFileSync with array args to prevent command injection
33
+ // Arguments are passed as array elements, not string interpolation
34
+ execFileSync('node', [installerPath, ...arguments_], {
35
+ stdio: 'inherit',
36
+ cwd: path.dirname(__dirname),
37
+ });
38
+ } catch (error) {
39
+ process.exit(error.status || 1);
40
+ }
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": "5.6.0",
4
+ "version": "5.6.1",
5
5
  "description": "Now your AI Agents can finally talk back! Professional TTS voice for Claude Code, Claude Desktop (via MCP), and Clawdbot with multi-provider support.",
6
6
  "homepage": "https://agentvibes.org",
7
7
  "keywords": [
@@ -1,71 +1,71 @@
1
- import path from 'node:path';
2
- import fs from 'node:fs/promises';
3
- import yaml from 'js-yaml';
4
-
5
- /**
6
- * Detect BMAD installation and version
7
- * @param {string} targetDir - Directory to check
8
- * @returns {Promise<Object>} Detection result with version info
9
- */
10
- export async function detectBMAD(targetDir) {
11
- // Check v6 first (newer version) - support both .bmad and bmad paths
12
- // Try .bmad (standard path with dot prefix) first
13
- let v6Manifest = path.join(targetDir, '.bmad/_cfg/manifest.yaml');
14
- let bmadPath = '.bmad';
15
-
16
- try {
17
- await fs.access(v6Manifest);
18
- } catch {
19
- // Try bmad (alternative path without dot prefix)
20
- v6Manifest = path.join(targetDir, 'bmad/_cfg/manifest.yaml');
21
- bmadPath = 'bmad';
22
- try {
23
- await fs.access(v6Manifest);
24
- } catch {
25
- // Neither path found, continue to v4 check
26
- bmadPath = null;
27
- }
28
- }
29
-
30
- if (bmadPath) {
31
- try {
32
- const manifestContent = await fs.readFile(v6Manifest, 'utf8');
33
- const manifest = yaml.load(manifestContent);
34
-
35
- return {
36
- version: 6,
37
- detailedVersion: manifest.installation?.version || '6.0.0-alpha.x',
38
- manifestPath: v6Manifest,
39
- configPath: path.join(targetDir, bmadPath, 'core/config.yaml'),
40
- bmadPath: path.join(targetDir, bmadPath),
41
- installed: true
42
- };
43
- } catch {}
44
- }
45
-
46
- // Check v4 (legacy)
47
- const v4Manifest = path.join(targetDir, '.bmad-core/install-manifest.yaml');
48
- try {
49
- await fs.access(v4Manifest);
50
- return {
51
- version: 4,
52
- detailedVersion: '4.x',
53
- manifestPath: v4Manifest,
54
- configPath: path.join(targetDir, '.bmad-core/config.yaml'),
55
- bmadPath: path.join(targetDir, '.bmad-core'),
56
- installed: true
57
- };
58
- } catch {}
59
-
60
- // Not installed
61
- return { version: null, installed: false };
62
- }
63
-
64
- /**
65
- * Get BMAD configuration file path for detected version
66
- * @param {Object} detection - Result from detectBMAD()
67
- * @returns {string|null} Path to config.yaml or null
68
- */
69
- export function getBMADConfigPath(detection) {
70
- return detection.installed ? detection.configPath : null;
71
- }
1
+ import path from 'node:path';
2
+ import fs from 'node:fs/promises';
3
+ import yaml from 'js-yaml';
4
+
5
+ /**
6
+ * Detect BMAD installation and version
7
+ * @param {string} targetDir - Directory to check
8
+ * @returns {Promise<Object>} Detection result with version info
9
+ */
10
+ export async function detectBMAD(targetDir) {
11
+ // Check v6 first (newer version) - support both .bmad and bmad paths
12
+ // Try .bmad (standard path with dot prefix) first
13
+ let v6Manifest = path.join(targetDir, '.bmad/_cfg/manifest.yaml');
14
+ let bmadPath = '.bmad';
15
+
16
+ try {
17
+ await fs.access(v6Manifest);
18
+ } catch {
19
+ // Try bmad (alternative path without dot prefix)
20
+ v6Manifest = path.join(targetDir, 'bmad/_cfg/manifest.yaml');
21
+ bmadPath = 'bmad';
22
+ try {
23
+ await fs.access(v6Manifest);
24
+ } catch {
25
+ // Neither path found, continue to v4 check
26
+ bmadPath = null;
27
+ }
28
+ }
29
+
30
+ if (bmadPath) {
31
+ try {
32
+ const manifestContent = await fs.readFile(v6Manifest, 'utf8');
33
+ const manifest = yaml.load(manifestContent);
34
+
35
+ return {
36
+ version: 6,
37
+ detailedVersion: manifest.installation?.version || '6.0.0-alpha.x',
38
+ manifestPath: v6Manifest,
39
+ configPath: path.join(targetDir, bmadPath, 'core/config.yaml'),
40
+ bmadPath: path.join(targetDir, bmadPath),
41
+ installed: true
42
+ };
43
+ } catch {}
44
+ }
45
+
46
+ // Check v4 (legacy)
47
+ const v4Manifest = path.join(targetDir, '.bmad-core/install-manifest.yaml');
48
+ try {
49
+ await fs.access(v4Manifest);
50
+ return {
51
+ version: 4,
52
+ detailedVersion: '4.x',
53
+ manifestPath: v4Manifest,
54
+ configPath: path.join(targetDir, '.bmad-core/config.yaml'),
55
+ bmadPath: path.join(targetDir, '.bmad-core'),
56
+ installed: true
57
+ };
58
+ } catch {}
59
+
60
+ // Not installed
61
+ return { version: null, installed: false };
62
+ }
63
+
64
+ /**
65
+ * Get BMAD configuration file path for detected version
66
+ * @param {Object} detection - Result from detectBMAD()
67
+ * @returns {string|null} Path to config.yaml or null
68
+ */
69
+ export function getBMADConfigPath(detection) {
70
+ return detection.installed ? detection.configPath : null;
71
+ }