agentvibes 4.6.8 → 5.1.0

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 (40) hide show
  1. package/.agentvibes/bmad-voice-map.json +104 -0
  2. package/.agentvibes/config.json +13 -12
  3. package/.agentvibes/copilot-sessions.log +4 -0
  4. package/.claude/audio/tracks/Drifting Down the Hall.mp3 +0 -0
  5. package/.claude/audio/tracks/Late Night Hip Hop Groove.mp3 +0 -0
  6. package/.claude/audio/tracks/Midnight Charleston Stomp.mp3 +0 -0
  7. package/.claude/audio/tracks/README.md +51 -52
  8. package/.claude/config/audio-effects-bmad.cfg +50 -0
  9. package/.claude/config/audio-effects.cfg +4 -4
  10. package/.claude/config/background-music-enabled.txt +1 -0
  11. package/.claude/config/personality.txt +1 -0
  12. package/.claude/hooks/play-tts-piper.sh +3 -1
  13. package/.claude/hooks/play-tts.sh +380 -301
  14. package/.claude/hooks/session-start-tts.sh +81 -81
  15. package/.claude/hooks-windows/audio-processor.ps1 +181 -0
  16. package/.claude/hooks-windows/play-tts-piper.ps1 +259 -245
  17. package/.claude/hooks-windows/play-tts.ps1 +28 -6
  18. package/.claude/hooks-windows/session-start-tts.ps1 +114 -114
  19. package/README.md +112 -6
  20. package/RELEASE_NOTES.md +83 -0
  21. package/bin/bmad-speak.js +16 -8
  22. package/mcp-server/server.py +15 -8
  23. package/package.json +1 -1
  24. package/src/console/app.js +899 -897
  25. package/src/console/footer-config.js +50 -50
  26. package/src/console/navigation.js +65 -65
  27. package/src/console/tabs/agents-tab.js +1899 -1886
  28. package/src/console/tabs/music-tab.js +1076 -1039
  29. package/src/console/tabs/placeholder-tab.js +81 -80
  30. package/src/console/tabs/settings-tab.js +941 -3988
  31. package/src/console/tabs/setup-tab.js +2071 -0
  32. package/src/console/tabs/voices-tab.js +1843 -1714
  33. package/src/console/widgets/format-utils.js +92 -89
  34. package/src/console/widgets/track-picker.js +325 -322
  35. package/src/installer.js +6147 -6092
  36. package/src/services/llm-provider-service.js +486 -0
  37. package/src/services/navigation-service.js +123 -123
  38. package/src/services/tts-engine-service.js +69 -0
  39. package/.claude/audio/tracks/dreamy_house_loop.mp3 +0 -0
  40. package/src/console/tabs/install-tab.js +0 -1081
@@ -1,114 +1,114 @@
1
- #
2
- # File: .claude/hooks-windows/session-start-tts.ps1
3
- #
4
- # AgentVibes SessionStart Hook for Windows
5
- # Outputs JSON with hookSpecificOutput.additionalContext for reliable context injection.
6
- # Mirrors session-start-tts.sh — keep both in sync.
7
- #
8
-
9
- $ErrorActionPreference = "Stop"
10
-
11
- # Get script directory
12
- $ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
13
-
14
- # Check if AgentVibes is installed
15
- if (-not (Test-Path (Join-Path $ScriptDir "play-tts.ps1"))) {
16
- exit 0
17
- }
18
-
19
- # Resolve project .claude dir from script location (avoids CWD-relative path issues)
20
- $ProjectClaudeDir = Split-Path -Parent (Split-Path -Parent $ScriptDir)
21
- $ProjectClaudeDir = Join-Path $ProjectClaudeDir ".claude"
22
-
23
- # Check for sentiment (priority) or personality (fallback)
24
- $Sentiment = ""
25
- $sentimentPaths = @("$ProjectClaudeDir\tts-sentiment.txt", "$env:USERPROFILE\.claude\tts-sentiment.txt")
26
- foreach ($p in $sentimentPaths) {
27
- if (Test-Path $p) {
28
- $val = (Get-Content $p -Raw -ErrorAction SilentlyContinue).Trim()
29
- if ($val) { $Sentiment = $val; break }
30
- }
31
- }
32
-
33
- $Personality = "normal"
34
- $personalityPaths = @("$ProjectClaudeDir\tts-personality.txt", "$env:USERPROFILE\.claude\tts-personality.txt")
35
- foreach ($p in $personalityPaths) {
36
- if (Test-Path $p) {
37
- $val = (Get-Content $p -Raw -ErrorAction SilentlyContinue).Trim()
38
- if ($val) { $Personality = $val; break }
39
- }
40
- }
41
-
42
- $Style = if ($Sentiment) { $Sentiment } else { $Personality }
43
-
44
- # Get verbosity level
45
- $Verbosity = "low"
46
- $verbosityPaths = @("$ProjectClaudeDir\tts-verbosity.txt", "$env:USERPROFILE\.claude\tts-verbosity.txt")
47
- foreach ($p in $verbosityPaths) {
48
- if (Test-Path $p) {
49
- $val = (Get-Content $p -Raw -ErrorAction SilentlyContinue).Trim()
50
- if ($val) { $Verbosity = $val; break }
51
- }
52
- }
53
-
54
- # Build verbosity section
55
- $VerbositySection = switch ($Verbosity) {
56
- "low" { "## Verbosity: LOW`n- Acknowledgment: Action only`n- Completion: Result + errors only`n- Skip: Reasoning, decisions" }
57
- "medium" { "## Verbosity: MEDIUM`n- Acknowledgment: Action + key approach`n- Completion: Result + important decisions`n- Include: Major choices only" }
58
- "high" { "## Verbosity: HIGH`n- Acknowledgment: Action + approach + why`n- Completion: Result + decisions + trade-offs`n- Include: Full reasoning, alternatives" }
59
- default { "## Verbosity: LOW`n- Acknowledgment: Action only`n- Completion: Result + errors only" }
60
- }
61
-
62
- # Build full context string
63
- $Context = @"
64
- # AgentVibes TTS Protocol
65
-
66
- **CRITICAL: You MUST execute TTS at TWO points for EVERY user interaction:**
67
-
68
- 1. **Acknowledgment** - Start of task: ``Bash: powershell -NoProfile -ExecutionPolicy Bypass -File ".claude\hooks-windows\play-tts.ps1" "[action]"``
69
- 2. **Completion** - End of task: ``Bash: powershell -NoProfile -ExecutionPolicy Bypass -File ".claude\hooks-windows\play-tts.ps1" "[result + key details]"``
70
-
71
- **Example:**
72
- ``````
73
- [Bash: powershell -NoProfile -ExecutionPolicy Bypass -File ".claude\hooks-windows\play-tts.ps1" "Checking git status"]
74
- [work...]
75
- [Bash: powershell -NoProfile -ExecutionPolicy Bypass -File ".claude\hooks-windows\play-tts.ps1" "Repository is clean, no changes"]
76
- ``````
77
-
78
- $VerbositySection
79
-
80
- ## Style: $Style
81
-
82
- ## Rules
83
- 1. Never skip acknowledgment TTS
84
- 2. Never skip completion TTS
85
- 3. Match verbosity level
86
- 4. Keep under 150 chars
87
- 5. Always include errors
88
-
89
- Quick Ref: low=action+result | medium=+key decisions | high=+full reasoning
90
-
91
- ## BMAD Agent Voice Routing
92
- If ``.bmad-agent-context`` exists, check its content:
93
-
94
- **Single agent mode** (content is an agent ID like "analyst"):
95
- Use ``bmad-speak.ps1`` instead of ``play-tts.ps1``:
96
-
97
-
98
- **Party mode** (content is "party-mode"):
99
- Each agent speaks via ``bmad-speak.ps1`` with their display name. The queue system ensures sequential playback — agents speak one at a time, not overlapping:
100
-
101
- IMPORTANT: In party mode, do NOT use ``play-tts.ps1``. Always use ``bmad-speak.ps1`` with the agent's display name. Do NOT call multiple bmad-speak.ps1 in parallel — call them sequentially so the queue processes them in order.
102
-
103
- If ``.bmad-agent-context`` does NOT exist, use ``play-tts.ps1`` as normal.
104
- "@
105
-
106
- # Build JSON via hashtable so ConvertTo-Json handles all escaping (Unicode, backslashes, quotes)
107
- $Output = @{
108
- hookSpecificOutput = @{
109
- hookEventName = "SessionStart"
110
- additionalContext = $Context
111
- }
112
- }
113
- [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
114
- Write-Output ($Output | ConvertTo-Json -Compress -Depth 5)
1
+ #
2
+ # File: .claude/hooks-windows/session-start-tts.ps1
3
+ #
4
+ # AgentVibes SessionStart Hook for Windows
5
+ # Outputs JSON with hookSpecificOutput.additionalContext for reliable context injection.
6
+ # Mirrors session-start-tts.sh — keep both in sync.
7
+ #
8
+
9
+ $ErrorActionPreference = "Stop"
10
+
11
+ # Get script directory
12
+ $ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
13
+
14
+ # Check if AgentVibes is installed
15
+ if (-not (Test-Path (Join-Path $ScriptDir "play-tts.ps1"))) {
16
+ exit 0
17
+ }
18
+
19
+ # Resolve project .claude dir from script location (avoids CWD-relative path issues)
20
+ $ProjectClaudeDir = Split-Path -Parent (Split-Path -Parent $ScriptDir)
21
+ $ProjectClaudeDir = Join-Path $ProjectClaudeDir ".claude"
22
+
23
+ # Check for sentiment (priority) or personality (fallback)
24
+ $Sentiment = ""
25
+ $sentimentPaths = @("$ProjectClaudeDir\tts-sentiment.txt", "$env:USERPROFILE\.claude\tts-sentiment.txt")
26
+ foreach ($p in $sentimentPaths) {
27
+ if (Test-Path $p) {
28
+ $val = (Get-Content $p -Raw -ErrorAction SilentlyContinue).Trim()
29
+ if ($val) { $Sentiment = $val; break }
30
+ }
31
+ }
32
+
33
+ $Personality = "normal"
34
+ $personalityPaths = @("$ProjectClaudeDir\tts-personality.txt", "$env:USERPROFILE\.claude\tts-personality.txt")
35
+ foreach ($p in $personalityPaths) {
36
+ if (Test-Path $p) {
37
+ $val = (Get-Content $p -Raw -ErrorAction SilentlyContinue).Trim()
38
+ if ($val) { $Personality = $val; break }
39
+ }
40
+ }
41
+
42
+ $Style = if ($Sentiment) { $Sentiment } else { $Personality }
43
+
44
+ # Get verbosity level
45
+ $Verbosity = "low"
46
+ $verbosityPaths = @("$ProjectClaudeDir\tts-verbosity.txt", "$env:USERPROFILE\.claude\tts-verbosity.txt")
47
+ foreach ($p in $verbosityPaths) {
48
+ if (Test-Path $p) {
49
+ $val = (Get-Content $p -Raw -ErrorAction SilentlyContinue).Trim()
50
+ if ($val) { $Verbosity = $val; break }
51
+ }
52
+ }
53
+
54
+ # Build verbosity section
55
+ $VerbositySection = switch ($Verbosity) {
56
+ "low" { "## Verbosity: LOW`n- Acknowledgment: Action only`n- Completion: Result + errors only`n- Skip: Reasoning, decisions" }
57
+ "medium" { "## Verbosity: MEDIUM`n- Acknowledgment: Action + key approach`n- Completion: Result + important decisions`n- Include: Major choices only" }
58
+ "high" { "## Verbosity: HIGH`n- Acknowledgment: Action + approach + why`n- Completion: Result + decisions + trade-offs`n- Include: Full reasoning, alternatives" }
59
+ default { "## Verbosity: LOW`n- Acknowledgment: Action only`n- Completion: Result + errors only" }
60
+ }
61
+
62
+ # Build full context string
63
+ $Context = @"
64
+ # AgentVibes TTS Protocol
65
+
66
+ **CRITICAL: You MUST execute TTS at TWO points for EVERY user interaction:**
67
+
68
+ 1. **Acknowledgment** - Start of task: ``Bash: powershell -NoProfile -ExecutionPolicy Bypass -File ".claude\hooks-windows\play-tts.ps1" "[action]" -llm claude-code``
69
+ 2. **Completion** - End of task: ``Bash: powershell -NoProfile -ExecutionPolicy Bypass -File ".claude\hooks-windows\play-tts.ps1" "[result + key details]" -llm claude-code``
70
+
71
+ **Example:**
72
+ ``````
73
+ [Bash: powershell -NoProfile -ExecutionPolicy Bypass -File ".claude\hooks-windows\play-tts.ps1" "Checking git status" -llm claude-code]
74
+ [work...]
75
+ [Bash: powershell -NoProfile -ExecutionPolicy Bypass -File ".claude\hooks-windows\play-tts.ps1" "Repository is clean, no changes" -llm claude-code]
76
+ ``````
77
+
78
+ $VerbositySection
79
+
80
+ ## Style: $Style
81
+
82
+ ## Rules
83
+ 1. Never skip acknowledgment TTS
84
+ 2. Never skip completion TTS
85
+ 3. Match verbosity level
86
+ 4. Keep under 150 chars
87
+ 5. Always include errors
88
+
89
+ Quick Ref: low=action+result | medium=+key decisions | high=+full reasoning
90
+
91
+ ## BMAD Agent Voice Routing
92
+ If ``.bmad-agent-context`` exists, check its content:
93
+
94
+ **Single agent mode** (content is an agent ID like "analyst"):
95
+ Use ``bmad-speak.ps1`` instead of ``play-tts.ps1``:
96
+
97
+
98
+ **Party mode** (content is "party-mode"):
99
+ Each agent speaks via ``bmad-speak.ps1`` with their display name. The queue system ensures sequential playback — agents speak one at a time, not overlapping:
100
+
101
+ IMPORTANT: In party mode, do NOT use ``play-tts.ps1``. Always use ``bmad-speak.ps1`` with the agent's display name. Do NOT call multiple bmad-speak.ps1 in parallel — call them sequentially so the queue processes them in order.
102
+
103
+ If ``.bmad-agent-context`` does NOT exist, use ``play-tts.ps1`` as normal.
104
+ "@
105
+
106
+ # Build JSON via hashtable so ConvertTo-Json handles all escaping (Unicode, backslashes, quotes)
107
+ $Output = @{
108
+ hookSpecificOutput = @{
109
+ hookEventName = "SessionStart"
110
+ additionalContext = $Context
111
+ }
112
+ }
113
+ [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
114
+ Write-Output ($Output | ConvertTo-Json -Compress -Depth 5)
package/README.md CHANGED
@@ -4,14 +4,14 @@
4
4
  >
5
5
  > 🌐 **[agentvibes.org](https://agentvibes.org)**
6
6
  >
7
- > Professional text-to-speech for **Claude Code**, **Claude Desktop**, and **OpenClaw** - **Soprano** (Neural), **Piper TTS** (Free!), **macOS Say** (Built-in!), or **Windows SAPI** (Zero Setup!)
7
+ > Professional text-to-speech for **Claude Code**, **GitHub Copilot**, **OpenAI Codex**, **Claude Desktop**, and **OpenClaw**. Using popular open-source TTS engines: **Soprano** (Neural), **Piper TTS** (Free!), **macOS Say** (Built-in!), or **Windows SAPI** (Zero Setup!)
8
8
 
9
9
  [![npm version](https://img.shields.io/npm/v/agentvibes)](https://www.npmjs.com/package/agentvibes)
10
10
  [![Test Suite](https://github.com/paulpreibisch/AgentVibes/actions/workflows/test.yml/badge.svg)](https://github.com/paulpreibisch/AgentVibes/actions/workflows/test.yml)
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**: v4.6.8
14
+ **Author**: Paul Preibisch ([@997Fire](https://x.com/997Fire)) | **Version**: v5.1.0
15
15
 
16
16
  ---
17
17
 
@@ -20,11 +20,13 @@
20
20
  | I want to... | Go here |
21
21
  |--------------|---------|
22
22
  | **Install AgentVibes** (just `npx`, no git!) | [Quick Start Guide](docs/quick-start.md) |
23
- | **Run Claude Code on Android** | [Android/Termux Setup](#-android--termux) |
23
+ | **Play agent audio using your phone as remote speakers** | [Android/Termux Setup](#-android--termux) |
24
24
  | **Secure OpenClaw on Remote Server** | [Security Hardening Guide](docs/security-hardening-guide.md) āš ļø |
25
25
  | **Understand what I need** | [Prerequisites](#-prerequisites) |
26
26
  | **Set up on Windows (Native)** | [Windows Native Setup](WINDOWS-SETUP.md) |
27
27
  | **Set up on Windows (Claude Desktop/WSL)** | [Windows WSL Guide](mcp-server/WINDOWS_SETUP.md) |
28
+ | **Use with GitHub Copilot** | [Copilot Integration](#-github-copilot-integration) |
29
+ | **Use with OpenAI Codex** | [Codex Integration](#-openai-codex-integration) |
28
30
  | **Use with OpenClaw** | [OpenClaw Integration](#-openclaw-integration) |
29
31
  | **Use natural language** | [MCP Setup](docs/mcp-setup.md) |
30
32
  | **Switch voices** | [Voice Library](docs/voice-library.md) |
@@ -35,13 +37,37 @@
35
37
 
36
38
  ## ✨ What is AgentVibes?
37
39
 
38
- **AgentVibes adds lively voice narration to your Claude AI sessions!**
40
+ **AgentVibes adds lively voice narration to your AI coding sessions!**
39
41
 
40
- Whether you're coding in Claude Code, chatting in Claude Desktop, or running OpenClaw — AgentVibes brings AI to life with professional voices and personalities.
42
+ Whether you're using Claude Code, GitHub Copilot, OpenAI Codex, Claude Desktop, or OpenClaw — AgentVibes brings AI to life with professional voices and personalities.
41
43
 
42
44
  ---
43
45
 
44
- ## šŸ› NEW IN v4.6.8 — Fresh Install Crash Fix
46
+ ## šŸŽ™ļø NEW IN v5.1.0 — Voice Picker Overhaul + Auto-Save Agent Modal
47
+
48
+ - **Auto-save in agent modal** — Voice/personality/music/reverb/pretext changes save automatically as you edit them. Brief "āœ“ Saved!" toast confirms each change.
49
+ - **Unique LibriTTS names** — 904 speakers get deterministic surnames: **Anna Bell**, **Anna Carter**, …, **Anna Quinn**. No more "Anna-2", "Anna-3" duplicates.
50
+ - **Pink ♀ / blue ♂ gender symbols** — Colored gender indicators in the main Voices tab and all voice picker modals.
51
+ - **First-letter quick jump** — Press `a`–`z` in any voice picker to jump to that letter. `q`, `j`, `k`, `g`, `h`, `l` reserved for nav/cancel.
52
+ - **PgUp / PgDn / Home / End** in voice pickers
53
+ - **3 new background music tracks** — Late Night Hip Hop Groove, Drifting Down the Hall, Midnight Charleston Stomp
54
+ - **Search bar removed from voice pickers** — replaced by first-letter jump (faster, no focus issues)
55
+ - **Voices tab corruption fix** — uninstalled rows no longer lose their Provider column when navigated onto
56
+ - **Music + Voices tab blink artifacts gone**
57
+
58
+ ---
59
+
60
+ ## šŸš€ v5.0.0 — Multi-Provider Support: Claude Code + Copilot + Codex
61
+
62
+ - **GitHub Copilot + OpenAI Codex in VS Code** — AgentVibes now supports all three major AI coding assistants. Install and configure each from the TUI.
63
+ - **One Setup tab** — 4-step wizard (Language → Deps → TTS Engine → Providers) replaces old installer + LLM tabs. Returning users skip to Providers.
64
+ - **Per-provider audio config** — Each LLM gets its own Voice, TTS Engine, Reverb, Music, and Pretext via Configure modal.
65
+ - **Settings redesigned** — Clean flat list: Language, TTS Engine, Voice, Verbosity, Audio Destination, Config Storage, Re-run Wizard.
66
+ - **Voice picker upgraded** — 3-column display, Space bar preview, scroll stays in place.
67
+
68
+ ---
69
+
70
+ ## šŸ› v4.6.8 — Fresh Install Crash Fix
45
71
 
46
72
  - **Settings tab crash fixed** — no longer crashes when navigating to Settings on a fresh install with no voice configured
47
73
  - **macOS test fix** — replay path assertion handles `/var` → `/private/var` symlink
@@ -493,6 +519,7 @@ All 50+ Piper voices AgentVibes provides are sourced from Hugging Face's open-so
493
519
  - [šŸŽ™ļø AgentVibes Receiver - NEW!](#%EF%B8%8F-agentvibes-receiver-remote-audio-streaming-from-voiceless-servers) - Remote audio streaming from voiceless servers
494
520
 
495
521
  ### Integrations & Platforms
522
+ - [šŸ¤ GitHub Copilot Integration](#-github-copilot-integration) - Use AgentVibes TTS with GitHub Copilot CLI
496
523
  - [šŸ¤– OpenClaw Integration](#-openclaw-integration) - Use AgentVibes with OpenClaw messaging platform
497
524
  - [šŸŽ™ļø AgentVibes Skill for OpenClaw](#-agentvibes-skill-for-openclaw---what-you-get) - 50+ voices, effects, personalities for OpenClaw
498
525
  - [šŸ“± AgentVibes Receiver](#-agentvibes-receiver-local-phone-) - Remote audio on phones/local machines
@@ -1248,6 +1275,85 @@ This design means **any TTS provider** can integrate with BMAD by replacing thes
1248
1275
 
1249
1276
  ---
1250
1277
 
1278
+ ## šŸ¤ GitHub Copilot Integration
1279
+
1280
+ **Use AgentVibes with GitHub Copilot in VS Code — same voices, same personalities, same MCP tools!**
1281
+
1282
+ Copilot discovers AgentVibes through two mechanisms:
1283
+
1284
+ 1. **`.github/copilot-instructions.md`** — VS Code automatically reads this file and tells Copilot *how* to speak (acknowledge at start, summarize at end, match verbosity, stay under 150 chars)
1285
+ 2. **`.vscode/mcp.json`** — registers the AgentVibes MCP server so Copilot can call `text_to_speech`, `set_voice`, and other tools
1286
+
1287
+ ### Setup
1288
+
1289
+ **Step 1: Install AgentVibes** (if you haven't already)
1290
+
1291
+ ```bash
1292
+ npx agentvibes install
1293
+ ```
1294
+
1295
+ **Step 2: Configure VS Code MCP**
1296
+
1297
+ Open the AgentVibes console and go to the **LLM** tab (press `L`):
1298
+
1299
+ ```bash
1300
+ npx agentvibes
1301
+ ```
1302
+
1303
+ Select **GitHub Copilot** and press Enter to install. This creates `.vscode/mcp.json` with the AgentVibes MCP server config and copies `.github/copilot-instructions.md` with the TTS protocol.
1304
+
1305
+ You can also create `.vscode/mcp.json` manually in your project root:
1306
+
1307
+ ```json
1308
+ {
1309
+ "servers": {
1310
+ "agentvibes": {
1311
+ "type": "stdio",
1312
+ "command": "npx",
1313
+ "args": ["-y", "--package=agentvibes", "agentvibes-mcp-server"]
1314
+ }
1315
+ }
1316
+ }
1317
+ ```
1318
+
1319
+ VS Code starts the MCP server automatically when Copilot needs it — no manual server launch required.
1320
+
1321
+ **Step 3: Verify**
1322
+
1323
+ Open Copilot Chat in VS Code (Ctrl+Shift+I) and ask it to do something. You should hear an acknowledgment when Copilot starts working and a summary when it finishes.
1324
+
1325
+ ### What Copilot Can Do
1326
+
1327
+ Through the MCP tools, Copilot has the same voice capabilities as Claude Code:
1328
+
1329
+ | Tool | What it does |
1330
+ |------|-------------|
1331
+ | `text_to_speech` | Speak text aloud |
1332
+ | `set_voice` | Switch voices (e.g., "ryan", "katherine") |
1333
+ | `set_personality` | Change personality (sarcastic, pirate, zen) |
1334
+ | `set_speed` | Adjust speech rate |
1335
+ | `set_verbosity` | Control detail level (low/medium/high) |
1336
+ | `mute` / `unmute` | Toggle audio |
1337
+ | `get_config` | Read current settings |
1338
+
1339
+ ### BMAD Party Mode
1340
+
1341
+ Copilot respects BMAD party mode. If `.bmad-agent-context` contains `party-mode`, each BMAD agent speaks with its own voice — the same per-agent routing that works in Claude Code.
1342
+
1343
+ ### Differences from Claude Code
1344
+
1345
+ | Feature | Claude Code | Copilot in VS Code |
1346
+ |---------|------------|-------------|
1347
+ | TTS Protocol | Injected via session-start hook | Read from `.github/copilot-instructions.md` |
1348
+ | MCP config | `.mcp.json` (project root) | `.vscode/mcp.json` |
1349
+ | Server lifecycle | Managed by Claude Code | Managed by VS Code (auto-start) |
1350
+ | MCP tools | Same | Same |
1351
+ | BMAD party mode | Supported | Supported |
1352
+
1353
+ [↑ Back to top](#-table-of-contents)
1354
+
1355
+ ---
1356
+
1251
1357
  ## šŸ¤– OpenClaw Integration
1252
1358
 
1253
1359
  **Use AgentVibes TTS with OpenClaw - the revolutionary AI assistant you can access via any instant messenger!**
package/RELEASE_NOTES.md CHANGED
@@ -1,5 +1,88 @@
1
1
  # AgentVibes Release Notes
2
2
 
3
+ ## šŸŽ™ļø v5.1.0 — Voice Picker Overhaul + Auto-Save Agent Modal
4
+
5
+ **Release Date:** April 2026
6
+
7
+ ### New Features
8
+
9
+ - **Auto-save in agent edit modal** — Per-agent voice/personality/music/reverb/pretext changes now save automatically as you edit them. The explicit Save button is gone; a brief "āœ“ Saved!" toast confirms each change. Cancel and Reset to Defaults still behave as before.
10
+
11
+ - **Unique LibriTTS speaker names** — The 904 LibriTTS speakers no longer show as "Anna", "Anna-2", "Anna-3", … "Anna-16". Each gets a deterministic surname from a 16-name pool: **Anna Bell**, **Anna Carter**, **Anna Davis**, …, **Anna Quinn**. Underlying voice IDs are unchanged so existing user configs still resolve.
12
+
13
+ - **Pink/blue gender symbols** — Female voices show **♀** in pink (magenta), male voices show **♂** in light blue (bright-cyan), unknown shows `—`. Header `Gender` column replaced with colored `♀/♂` (10 → 4 chars wide), freeing room for longer names. Applied to the main Voices tab AND all 3 voice picker modals (Setup, Agents, Settings).
14
+
15
+ - **First-letter quick jump in voice pickers** — Press any letter `a`–`z` to jump to the first voice starting with that letter. Reserved keys (`q`, `j`, `k`, `g`, `h`, `l`) are blocked so they keep their cancel / vi-nav meanings.
16
+
17
+ - **Page navigation in voice pickers** — `PgUp`, `PgDn`, `Home`, `End` now work in all voice picker modals.
18
+
19
+ - **3 new background music tracks** — `Late Night Hip Hop Groove`, `Drifting Down the Hall` (90s vibes), and `Midnight Charleston Stomp` (swing). Track count goes from 15 → 18.
20
+
21
+ ### Improvements
22
+
23
+ - **Voice picker search bar removed** — Replaced with first-letter quick jump. The old search textbox had focus issues that swallowed nav keys. The jump is faster for typical "find voice X" use.
24
+
25
+ - **Track list sorting fixed** — Tracks with emoji prefixes (e.g. `šŸŽ¤ Late Night Hip Hop Groove`) now sort by the alphabetic part of the name, not the emoji codepoint. Order is consistent across Node/ICU versions.
26
+
27
+ - **Favorite hotkey is now `*` only** — Removed the duplicate `f` binding for marking favorites in voice pickers and the main Voices tab. `f` is now free for first-letter jump (e.g. jumping to Frank or Felix). The `*` marker remains the canonical way to toggle favorites.
28
+
29
+ ### Bug Fixes
30
+
31
+ - **Voices tab uninstalled rows no longer corrupt** — Selecting an uninstalled voice was visually deleting its Provider column due to a regex strip that over-matched the row's `bright-black-fg` wrapper. Replaced with a precise hint anchor that only strips the exact hint text.
32
+
33
+ - **Music tab + Voices tab blink artifacts gone** — `ā–ˆ` cursors no longer leave stray blocks behind when scrolling rapidly through the list. Both tabs now use a precise blink-strip helper instead of the fragile position-based slicer.
34
+
35
+ - **Setup tab no longer silently fails** — `_renderScreen3` was wrapping the entire `setupCompleted` write block in a single empty `try/catch {}`. Corrupt local config files are now backed up to `config.json.bak` and rewritten fresh, with errors logged to stderr — no more "stuck repeating setup" with no explanation.
36
+
37
+ - **Voice picker `q` cancel now works** — The new first-letter jump was swallowing `q` (and other vi nav keys). Reserved key blocklist added.
38
+
39
+ - **Track picker case-insensitive sort** — New tracks with Title Case names (`Late Night Hip Hop Groove.mp3`) no longer jump to the top of the list above the lowercase `agent_vibes_*` tracks.
40
+
41
+ ### User Impact
42
+
43
+ - Editing an agent's voice or settings is now faster — no need to remember to click Save
44
+ - The voice picker is dramatically less cluttered with 904 LibriTTS speakers all having unique, friendly names
45
+ - Gender at a glance via colored symbols
46
+ - Three new music tracks for variety
47
+ - Blink/scroll artifacts gone in both Voices and Music tabs
48
+
49
+ ---
50
+
51
+ ## šŸš€ v5.0.0 — Multi-Provider Support: Claude Code + Copilot + Codex
52
+
53
+ **Release Date:** April 2026
54
+
55
+ ### New Features
56
+
57
+ - **GitHub Copilot Support in VS Code** — Install and configure AgentVibes for GitHub Copilot directly from the TUI. Creates `.vscode/mcp.json` and `.github/copilot-instructions.md`.
58
+
59
+ - **OpenAI Codex Support in VS Code** — Full Codex integration with `.codex/config.toml`, `AGENTS.md` TTS protocol, and init hooks.
60
+
61
+ - **Unified Setup Tab** — The old 5-screen Install wizard and separate LLM Providers tab are merged into a single Setup tab. First-run shows a 4-step wizard (Language → Dependencies → TTS Engine → Providers); returning users skip straight to the Providers screen.
62
+
63
+ - **Per-Provider Audio Config** — Each LLM provider (Claude Code, Copilot, Codex) gets its own TTS Engine, Voice, Reverb, Background Music, and Pretext via a Configure modal.
64
+
65
+ - **TTS Engine Selection Screen** — New wizard step shows OS-aware engine list (Piper, Soprano, Windows SAPI, macOS Say) with Install buttons for missing engines.
66
+
67
+ - **Settings Tab Redesigned** — Replaced the 5-sub-tab layout with a clean flat list: Interface Language, Default TTS Engine, Default Voice, Verbosity, Audio Destination, Config Storage, and Re-run Setup Wizard.
68
+
69
+ ### Improvements
70
+
71
+ - **Voice picker upgraded everywhere** — 3-column display (Name, Gender, Provider), Space bar preview with synthesis + playback, scroll position preserved during preview.
72
+
73
+ - **Hint text artifacts fixed** — Moving between rows in Agents and Music tabs no longer leaves ghost text on previous rows.
74
+
75
+ - **Codex voice routing corrected** — `AGENTS.md` now instructs Codex to use `play-tts` for normal speech and `bmad-speak` only during BMAD party mode.
76
+
77
+ ### User Impact
78
+
79
+ - AgentVibes now works with Claude Code, GitHub Copilot, AND OpenAI Codex
80
+ - Streamlined setup experience — one tab for all provider management
81
+ - Per-provider voice customization without editing config files
82
+ - Settings page is dramatically simpler and faster to navigate
83
+
84
+ ---
85
+
3
86
  ## šŸ› v4.6.8 — Fresh Install Crash Fix
4
87
 
5
88
  **Release Date:** April 2026
package/bin/bmad-speak.js CHANGED
@@ -33,20 +33,28 @@ function resolveScript(relPath) {
33
33
  return null;
34
34
  }
35
35
 
36
+ function hasProjectBmadManifest() {
37
+ return fs.existsSync(path.join(process.cwd(), '_bmad', '_config', 'agent-manifest.csv'));
38
+ }
39
+
36
40
  let result;
37
41
 
38
42
  if (IS_WINDOWS) {
39
- const script = resolveScript('.claude/hooks-windows/bmad-speak.ps1');
43
+ const script = hasProjectBmadManifest()
44
+ ? resolveScript('.claude/hooks-windows/bmad-speak.ps1')
45
+ : resolveScript('.claude/hooks-windows/play-tts.ps1');
40
46
  if (!script) process.exit(0);
41
- result = spawnSync(
42
- 'powershell',
43
- ['-NoProfile', '-ExecutionPolicy', 'Bypass', '-File', script, agentName, dialogue],
44
- { stdio: 'inherit' }
45
- );
47
+ const args = hasProjectBmadManifest()
48
+ ? ['-NoProfile', '-ExecutionPolicy', 'Bypass', '-File', script, agentName, dialogue]
49
+ : ['-NoProfile', '-ExecutionPolicy', 'Bypass', '-File', script, dialogue];
50
+ result = spawnSync('powershell', args, { stdio: 'inherit' });
46
51
  } else {
47
- const script = resolveScript('.claude/hooks/bmad-speak.sh');
52
+ const script = hasProjectBmadManifest()
53
+ ? resolveScript('.claude/hooks/bmad-speak.sh')
54
+ : resolveScript('.claude/hooks/play-tts.sh');
48
55
  if (!script) process.exit(0);
49
- result = spawnSync('bash', [script, agentName, dialogue], { stdio: 'inherit' });
56
+ const args = hasProjectBmadManifest() ? [script, agentName, dialogue] : [script, dialogue];
57
+ result = spawnSync('bash', args, { stdio: 'inherit' });
50
58
  }
51
59
 
52
60
  process.exit(result.status ?? 0);
@@ -198,15 +198,18 @@ class AgentVibesServer:
198
198
  tts_script = "play-tts.ps1" if self.is_windows else "play-tts.sh"
199
199
  play_tts = self.hooks_dir / tts_script
200
200
  if self.is_windows:
201
- args = ["powershell", "-NoProfile", "-ExecutionPolicy", "Bypass", "-File", str(play_tts), text]
201
+ args = ["powershell", "-NoProfile", "-ExecutionPolicy", "Bypass", "-File", str(play_tts), text, "-llm", "copilot"]
202
202
  if voice:
203
203
  args.extend(["-VoiceOverride", voice])
204
204
  else:
205
205
  args = ["bash", str(play_tts), text]
206
206
  if voice:
207
207
  args.append(voice)
208
+ args.extend(["--llm", "copilot"])
208
209
 
209
210
  env = self._build_script_env()
211
+ # Set agent name for audio effects lookup (audio-effects.cfg, background music config)
212
+ env["AGENTVIBES_AGENT_NAME"] = "default"
210
213
 
211
214
  result = await asyncio.create_subprocess_exec(
212
215
  *args,
@@ -220,13 +223,17 @@ class AgentVibesServer:
220
223
  if result.returncode == 0:
221
224
  output = stdout.decode().strip()
222
225
  # Extract file path from output
226
+ audio_file_path = None
223
227
  for line in output.split("\n"):
224
228
  if "Saved to:" in line:
225
- file_path = line.split("Saved to:")[1].strip()
226
- truncated = (
227
- f"{text[:50]}..." if len(text) > 50 else text
228
- )
229
- return f"āœ… Spoke: {truncated}\nšŸ“ Audio saved: {file_path}"
229
+ audio_file_path = line.split("Saved to:")[1].strip()
230
+ break
231
+
232
+ if audio_file_path:
233
+ truncated = (
234
+ f"{text[:50]}..." if len(text) > 50 else text
235
+ )
236
+ return f"āœ… Spoke: {truncated}\nšŸ“ Audio saved: {audio_file_path}"
230
237
 
231
238
  return f"āœ… Spoke: {text[:50]}..." if len(text) > 50 else f"āœ… Spoke: {text}"
232
239
  else:
@@ -319,10 +326,10 @@ class AgentVibesServer:
319
326
  resolved_name = self._resolve_friendly_name(voice_name)
320
327
 
321
328
  result = await self._run_script(
322
- self.VOICE_MANAGER_SCRIPT, ["switch", resolved_name, "--silent"]
329
+ self.VOICE_MANAGER_SCRIPT, ["switch", resolved_name]
323
330
  )
324
331
 
325
- if result and "āœ…" in result:
332
+ if result and ("[OK]" in result or "āœ…" in result):
326
333
  if original_name.lower() != resolved_name.lower():
327
334
  return f"āœ… Voice switched to: {original_name} ({resolved_name})"
328
335
  return f"āœ… Voice switched to: {voice_name}"
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": "4.6.8",
4
+ "version": "5.1.0",
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": [