agentvibes 5.1.4 → 5.2.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 (69) hide show
  1. package/.agentvibes/config.json +23 -13
  2. package/.claude/commands/agent-vibes/verbosity.md +98 -89
  3. package/.claude/config/audio-effects.cfg +4 -1
  4. package/.claude/hooks/audio-cache-utils.sh +246 -246
  5. package/.claude/hooks/background-music-manager.sh +404 -404
  6. package/.claude/hooks/bmad-speak-enhanced.sh +165 -165
  7. package/.claude/hooks/bmad-speak.sh +290 -290
  8. package/.claude/hooks/bmad-tts-injector.sh +568 -568
  9. package/.claude/hooks/bmad-voice-manager.sh +928 -928
  10. package/.claude/hooks/clawdbot-receiver-SECURE.sh +129 -129
  11. package/.claude/hooks/clawdbot-receiver.sh +107 -107
  12. package/.claude/hooks/clean-audio-cache.sh +22 -22
  13. package/.claude/hooks/cleanup-cache.sh +106 -106
  14. package/.claude/hooks/configure-rdp-mode.sh +137 -137
  15. package/.claude/hooks/download-extra-voices.sh +244 -244
  16. package/.claude/hooks/effects-manager.sh +268 -268
  17. package/.claude/hooks/github-star-reminder.sh +154 -154
  18. package/.claude/hooks/language-manager.sh +362 -362
  19. package/.claude/hooks/learn-manager.sh +492 -492
  20. package/.claude/hooks/macos-voice-manager.sh +205 -205
  21. package/.claude/hooks/migrate-background-music.sh +125 -125
  22. package/.claude/hooks/migrate-to-agentvibes.sh +161 -161
  23. package/.claude/hooks/optimize-background-music.sh +87 -87
  24. package/.claude/hooks/path-resolver.sh +60 -60
  25. package/.claude/hooks/personality-manager.sh +448 -448
  26. package/.claude/hooks/piper-download-voices.sh +233 -225
  27. package/.claude/hooks/piper-installer.sh +292 -292
  28. package/.claude/hooks/piper-multispeaker-registry.sh +171 -171
  29. package/.claude/hooks/piper-voice-manager.sh +125 -0
  30. package/.claude/hooks/play-tts-agentvibes-receiver-for-voiceless-connections.sh +97 -90
  31. package/.claude/hooks/play-tts-enhanced.sh +105 -105
  32. package/.claude/hooks/play-tts-piper.sh +16 -5
  33. package/.claude/hooks/play-tts-ssh-remote.sh +168 -167
  34. package/.claude/hooks/play-tts-termux-ssh.sh +169 -169
  35. package/.claude/hooks/play-tts.sh +35 -14
  36. package/.claude/hooks/prepare-release.sh +54 -54
  37. package/.claude/hooks/provider-commands.sh +617 -617
  38. package/.claude/hooks/provider-manager.sh +399 -399
  39. package/.claude/hooks/replay-target-audio.sh +95 -95
  40. package/.claude/hooks/sentiment-manager.sh +201 -201
  41. package/.claude/hooks/session-start-tts.sh +4 -1
  42. package/.claude/hooks/speed-manager.sh +291 -291
  43. package/.claude/hooks/stop-tts.sh +84 -84
  44. package/.claude/hooks/termux-installer.sh +261 -261
  45. package/.claude/hooks/translate-manager.sh +341 -341
  46. package/.claude/hooks/tts-queue-worker.sh +145 -145
  47. package/.claude/hooks/tts-queue.sh +165 -165
  48. package/.claude/hooks/verbosity-manager.sh +185 -178
  49. package/.claude/hooks/voice-manager.sh +552 -548
  50. package/.claude/hooks-windows/download-extra-voices.ps1 +243 -185
  51. package/.claude/hooks-windows/play-tts-piper.ps1 +7 -2
  52. package/.claude/hooks-windows/play-tts.ps1 +9 -3
  53. package/.claude/hooks-windows/session-start-tts.ps1 +2 -1
  54. package/.claude/hooks-windows/verbosity-manager.ps1 +126 -119
  55. package/README.md +19 -2
  56. package/RELEASE_NOTES.md +74 -0
  57. package/bin/agentvibes-voice-browser.js +1939 -1840
  58. package/bin/mcp-server.sh +206 -206
  59. package/mcp-server/server.py +87 -15
  60. package/package.json +1 -1
  61. package/src/console/tabs/receiver-tab.js +1527 -1483
  62. package/src/console/tabs/settings-tab.js +2 -2
  63. package/src/console/tabs/setup-tab.js +112 -31
  64. package/src/console/tabs/voices-tab.js +130 -13
  65. package/src/i18n/en.js +202 -202
  66. package/src/installer.js +79 -213
  67. package/src/services/llm-provider-service.js +126 -75
  68. package/src/services/verbosity-service.js +159 -157
  69. package/templates/agentvibes-receiver.sh +3 -2
@@ -1,292 +1,292 @@
1
- #!/usr/bin/env bash
2
- #
3
- # File: .claude/hooks/piper-installer.sh
4
- #
5
- # AgentVibes - Finally, your AI Agents can Talk Back! Text-to-Speech WITH personality for AI Assistants!
6
- #
7
- # Usage: piper-installer.sh [--non-interactive]
8
- # Website: https://agentvibes.org
9
- # Repository: https://github.com/paulpreibisch/AgentVibes
10
- #
11
- # Co-created by Paul Preibisch with Claude AI
12
- # Copyright (c) 2025 Paul Preibisch
13
- #
14
- # Licensed under the Apache License, Version 2.0 (the "License");
15
- # you may not use this file except in compliance with the License.
16
- # You may obtain a copy of the License at
17
- #
18
- # http://www.apache.org/licenses/LICENSE-2.0
19
- #
20
- # Unless required by applicable law or agreed to in writing, software
21
- # distributed under the License is distributed on an "AS IS" BASIS,
22
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23
- # See the License for the specific language governing permissions and
24
- # limitations under the License.
25
- #
26
- # DISCLAIMER: This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
27
- # express or implied, including but not limited to the warranties of
28
- # merchantability, fitness for a particular purpose and noninfringement.
29
- # In no event shall the authors or copyright holders be liable for any claim,
30
- # damages or other liability, whether in an action of contract, tort or
31
- # otherwise, arising from, out of or in connection with the software or the
32
- # use or other dealings in the software.
33
- #
34
- # ---
35
- #
36
- # @fileoverview Piper TTS Installer - Installs Piper TTS via pipx and downloads initial voice models
37
- # @context Automated installation script for free offline Piper TTS on WSL/Linux systems
38
- # @architecture Helper script for AgentVibes installer, invoked manually or from provider switcher
39
- # @dependencies pipx (Python package installer), apt-get/brew/dnf/pacman (for pipx installation)
40
- # @entrypoints Called by src/installer.js or manually by users during setup
41
- # @patterns Platform detection (WSL/Linux only), package manager abstraction, guided voice download
42
- # @related piper-download-voices.sh, provider-manager.sh, src/installer.js
43
- #
44
-
45
- set -e # Exit on error
46
-
47
- # Parse command line arguments
48
- NON_INTERACTIVE=false
49
- if [[ "$1" == "--non-interactive" ]]; then
50
- NON_INTERACTIVE=true
51
- fi
52
-
53
- echo "🎤 Piper TTS Installer"
54
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
55
- echo ""
56
-
57
- # Detect platform
58
- PLATFORM="$(uname -s)"
59
- ARCH="$(uname -m)"
60
-
61
- # Check if running on Termux/Android first
62
- if [[ -d "/data/data/com.termux" ]]; then
63
- echo "📱 Detected Termux/Android"
64
- echo ""
65
- echo " Termux requires a special installation process using proot-distro."
66
- echo " Running Termux-specific installer..."
67
- echo ""
68
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
69
- if [[ -f "$SCRIPT_DIR/termux-installer.sh" ]]; then
70
- exec "$SCRIPT_DIR/termux-installer.sh" "$@"
71
- else
72
- echo "❌ Error: termux-installer.sh not found"
73
- echo " Please download it from the AgentVibes repository"
74
- exit 1
75
- fi
76
- fi
77
-
78
- # Check if running on macOS, WSL, or Linux
79
- if [[ "$PLATFORM" == "Darwin" ]]; then
80
- IS_MACOS=true
81
- echo "🍎 Detected macOS"
82
- elif grep -qi microsoft /proc/version 2>/dev/null || [[ "$PLATFORM" == "Linux" ]]; then
83
- IS_MACOS=false
84
- echo "🐧 Detected Linux/WSL"
85
- else
86
- echo "❌ Unsupported platform: $PLATFORM"
87
- echo ""
88
- echo " For Windows, use macOS provider instead:"
89
- echo " /agent-vibes:provider switch macos"
90
- exit 1
91
- fi
92
-
93
- # Check if Piper is already installed
94
- if command -v piper &> /dev/null; then
95
- # Piper doesn't have a --version flag, just check if it exists
96
- echo "✅ Piper TTS is already installed!"
97
- echo " Location: $(which piper)"
98
- echo ""
99
- echo " Download voices with: .claude/hooks/piper-download-voices.sh"
100
- exit 0
101
- fi
102
-
103
- echo "📦 Installing Piper TTS..."
104
- echo ""
105
-
106
- # macOS: Use precompiled binaries
107
- if [[ "$IS_MACOS" == true ]]; then
108
- echo "🍎 Installing Piper TTS from precompiled binaries for macOS..."
109
- echo ""
110
-
111
- # Determine architecture
112
- if [[ "$ARCH" == "arm64" ]]; then
113
- echo "Detected Apple Silicon (M1/M2/M3)"
114
- PIPER_URL="https://github.com/rhasspy/piper/releases/download/2023.11.14-2/piper_macos_aarch64.tar.gz"
115
- elif [[ "$ARCH" == "x86_64" ]]; then
116
- echo "Detected Intel Mac"
117
- PIPER_URL="https://github.com/rhasspy/piper/releases/download/2023.11.14-2/piper_macos_x64.tar.gz"
118
- else
119
- echo "❌ Unsupported macOS architecture: $ARCH"
120
- exit 1
121
- fi
122
-
123
- # Create installation directory
124
- INSTALL_DIR="$HOME/.local/bin"
125
- mkdir -p "$INSTALL_DIR"
126
-
127
- # Download and extract
128
- echo "📥 Downloading Piper from: $PIPER_URL"
129
- TEMP_DIR=$(mktemp -d)
130
- cd "$TEMP_DIR"
131
-
132
- if curl -L "$PIPER_URL" | tar -xz; then
133
- echo "✅ Downloaded and extracted successfully"
134
-
135
- # Copy binaries to ~/.local/bin
136
- if [[ -d "piper" ]]; then
137
- cp -r piper/* "$INSTALL_DIR/"
138
- chmod +x "$INSTALL_DIR/piper"
139
- chmod +x "$INSTALL_DIR/piper_phonemize"
140
-
141
- echo "✅ Installed Piper to: $INSTALL_DIR/piper"
142
-
143
- # Add to PATH if not already there
144
- if [[ ":$PATH:" != *":$INSTALL_DIR:"* ]]; then
145
- echo ""
146
- echo "⚠️ Add $INSTALL_DIR to your PATH:"
147
- echo ""
148
- if [[ "$SHELL" == *"zsh"* ]]; then
149
- echo " echo 'export PATH=\"\$HOME/.local/bin:\$PATH\"' >> ~/.zshrc"
150
- echo " source ~/.zshrc"
151
- else
152
- echo " echo 'export PATH=\"\$HOME/.local/bin:\$PATH\"' >> ~/.bash_profile"
153
- echo " source ~/.bash_profile"
154
- fi
155
- fi
156
- else
157
- echo "❌ Failed to extract Piper binaries"
158
- cd -
159
- rm -rf "$TEMP_DIR"
160
- exit 1
161
- fi
162
- else
163
- echo "❌ Failed to download Piper"
164
- cd -
165
- rm -rf "$TEMP_DIR"
166
- exit 1
167
- fi
168
-
169
- cd -
170
- rm -rf "$TEMP_DIR"
171
-
172
- # Linux/WSL: Use pipx
173
- else
174
- # Check if pipx is installed
175
- if ! command -v pipx &> /dev/null; then
176
- echo "⚠️ pipx not found. Installing pipx first..."
177
- echo ""
178
-
179
- # Try to install pipx
180
- if command -v apt-get &> /dev/null; then
181
- # Debian/Ubuntu
182
- sudo apt-get update
183
- sudo apt-get install -y pipx
184
- elif command -v brew &> /dev/null; then
185
- # Linux with Homebrew
186
- brew install pipx
187
- elif command -v dnf &> /dev/null; then
188
- # Fedora
189
- sudo dnf install -y pipx
190
- elif command -v pacman &> /dev/null; then
191
- # Arch Linux
192
- sudo pacman -S python-pipx
193
- else
194
- echo "❌ Unable to install pipx automatically."
195
- echo ""
196
- echo " Please install pipx manually:"
197
- echo " https://pipx.pypa.io/stable/installation/"
198
- exit 1
199
- fi
200
-
201
- # Ensure pipx is in PATH
202
- pipx ensurepath
203
- echo ""
204
- fi
205
-
206
- # Install Piper TTS
207
- echo "📥 Installing Piper TTS via pipx..."
208
- pipx install piper-tts
209
-
210
- if ! command -v piper &> /dev/null; then
211
- echo ""
212
- echo "❌ Installation completed but piper command not found in PATH"
213
- echo ""
214
- echo " Try running: pipx ensurepath"
215
- echo " Then restart your terminal"
216
- exit 1
217
- fi
218
- fi
219
-
220
- echo ""
221
- echo "✅ Piper TTS installed successfully!"
222
- echo ""
223
-
224
- # Use full path since PATH hasn't been updated in current session
225
- PIPER_VERSION=$($INSTALL_DIR/piper --version 2>&1 || echo "unknown")
226
- echo " Version: $PIPER_VERSION"
227
- echo ""
228
-
229
- # Determine voices directory
230
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
231
- CLAUDE_DIR="$(dirname "$SCRIPT_DIR")"
232
-
233
- # Check for configured voices directory
234
- VOICES_DIR=""
235
- if [[ -f "$CLAUDE_DIR/piper-voices-dir.txt" ]]; then
236
- VOICES_DIR=$(cat "$CLAUDE_DIR/piper-voices-dir.txt")
237
- elif [[ -f "$HOME/.claude/piper-voices-dir.txt" ]]; then
238
- VOICES_DIR=$(cat "$HOME/.claude/piper-voices-dir.txt")
239
- else
240
- VOICES_DIR="$HOME/.claude/piper-voices"
241
- fi
242
-
243
- echo "📁 Voice storage location: $VOICES_DIR"
244
- echo ""
245
-
246
- # Ask if user wants to download voices now (skip in non-interactive mode)
247
- DOWNLOAD_VOICES=true
248
- if [[ "$NON_INTERACTIVE" == "false" ]]; then
249
- read -p "Would you like to download voice models now? [Y/n] " -n 1 -r
250
- echo ""
251
-
252
- if [[ ! $REPLY =~ ^[Yy]$ ]] && [[ -n $REPLY ]]; then
253
- DOWNLOAD_VOICES=false
254
- fi
255
- else
256
- echo "📥 Auto-downloading recommended voices (non-interactive mode)..."
257
- echo ""
258
- fi
259
-
260
- if [[ "$DOWNLOAD_VOICES" == "true" ]]; then
261
- echo ""
262
- echo "📥 Downloading recommended voices..."
263
- echo ""
264
-
265
- # Use the piper-download-voices.sh script if available
266
- if [[ -f "$SCRIPT_DIR/piper-download-voices.sh" ]]; then
267
- "$SCRIPT_DIR/piper-download-voices.sh" --yes
268
- else
269
- # Manual download of a basic voice
270
- mkdir -p "$VOICES_DIR"
271
-
272
- echo "Downloading en_US-lessac-medium (recommended)..."
273
- curl -L "https://huggingface.co/rhasspy/piper-voices/resolve/main/en/en_US/lessac/medium/en_US-lessac-medium.onnx" \
274
- -o "$VOICES_DIR/en_US-lessac-medium.onnx"
275
- curl -L "https://huggingface.co/rhasspy/piper-voices/resolve/main/en/en_US/lessac/medium/en_US-lessac-medium.onnx.json" \
276
- -o "$VOICES_DIR/en_US-lessac-medium.onnx.json"
277
-
278
- echo "✅ Voice downloaded!"
279
- fi
280
- fi
281
-
282
- echo ""
283
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
284
- echo "🎉 Piper TTS Setup Complete!"
285
- echo ""
286
- echo "Next steps:"
287
- echo " 1. Download more voices: .claude/hooks/piper-download-voices.sh"
288
- echo " 2. List available voices: /agent-vibes:list"
289
- echo " 3. Test it out: /agent-vibes:preview"
290
- echo ""
291
- echo "Enjoy your free, offline TTS! 🎤"
292
- echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
1
+ #!/usr/bin/env bash
2
+ #
3
+ # File: .claude/hooks/piper-installer.sh
4
+ #
5
+ # AgentVibes - Finally, your AI Agents can Talk Back! Text-to-Speech WITH personality for AI Assistants!
6
+ #
7
+ # Usage: piper-installer.sh [--non-interactive]
8
+ # Website: https://agentvibes.org
9
+ # Repository: https://github.com/paulpreibisch/AgentVibes
10
+ #
11
+ # Co-created by Paul Preibisch with Claude AI
12
+ # Copyright (c) 2025 Paul Preibisch
13
+ #
14
+ # Licensed under the Apache License, Version 2.0 (the "License");
15
+ # you may not use this file except in compliance with the License.
16
+ # You may obtain a copy of the License at
17
+ #
18
+ # http://www.apache.org/licenses/LICENSE-2.0
19
+ #
20
+ # Unless required by applicable law or agreed to in writing, software
21
+ # distributed under the License is distributed on an "AS IS" BASIS,
22
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23
+ # See the License for the specific language governing permissions and
24
+ # limitations under the License.
25
+ #
26
+ # DISCLAIMER: This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
27
+ # express or implied, including but not limited to the warranties of
28
+ # merchantability, fitness for a particular purpose and noninfringement.
29
+ # In no event shall the authors or copyright holders be liable for any claim,
30
+ # damages or other liability, whether in an action of contract, tort or
31
+ # otherwise, arising from, out of or in connection with the software or the
32
+ # use or other dealings in the software.
33
+ #
34
+ # ---
35
+ #
36
+ # @fileoverview Piper TTS Installer - Installs Piper TTS via pipx and downloads initial voice models
37
+ # @context Automated installation script for free offline Piper TTS on WSL/Linux systems
38
+ # @architecture Helper script for AgentVibes installer, invoked manually or from provider switcher
39
+ # @dependencies pipx (Python package installer), apt-get/brew/dnf/pacman (for pipx installation)
40
+ # @entrypoints Called by src/installer.js or manually by users during setup
41
+ # @patterns Platform detection (WSL/Linux only), package manager abstraction, guided voice download
42
+ # @related piper-download-voices.sh, provider-manager.sh, src/installer.js
43
+ #
44
+
45
+ set -e # Exit on error
46
+
47
+ # Parse command line arguments
48
+ NON_INTERACTIVE=false
49
+ if [[ "$1" == "--non-interactive" ]]; then
50
+ NON_INTERACTIVE=true
51
+ fi
52
+
53
+ echo "🎤 Piper TTS Installer"
54
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
55
+ echo ""
56
+
57
+ # Detect platform
58
+ PLATFORM="$(uname -s)"
59
+ ARCH="$(uname -m)"
60
+
61
+ # Check if running on Termux/Android first
62
+ if [[ -d "/data/data/com.termux" ]]; then
63
+ echo "📱 Detected Termux/Android"
64
+ echo ""
65
+ echo " Termux requires a special installation process using proot-distro."
66
+ echo " Running Termux-specific installer..."
67
+ echo ""
68
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
69
+ if [[ -f "$SCRIPT_DIR/termux-installer.sh" ]]; then
70
+ exec bash "$SCRIPT_DIR/termux-installer.sh" "$@"
71
+ else
72
+ echo "❌ Error: termux-installer.sh not found"
73
+ echo " Please download it from the AgentVibes repository"
74
+ exit 1
75
+ fi
76
+ fi
77
+
78
+ # Check if running on macOS, WSL, or Linux
79
+ if [[ "$PLATFORM" == "Darwin" ]]; then
80
+ IS_MACOS=true
81
+ echo "🍎 Detected macOS"
82
+ elif grep -qi microsoft /proc/version 2>/dev/null || [[ "$PLATFORM" == "Linux" ]]; then
83
+ IS_MACOS=false
84
+ echo "🐧 Detected Linux/WSL"
85
+ else
86
+ echo "❌ Unsupported platform: $PLATFORM"
87
+ echo ""
88
+ echo " For Windows, use macOS provider instead:"
89
+ echo " /agent-vibes:provider switch macos"
90
+ exit 1
91
+ fi
92
+
93
+ # Check if Piper is already installed
94
+ if command -v piper &> /dev/null; then
95
+ # Piper doesn't have a --version flag, just check if it exists
96
+ echo "✅ Piper TTS is already installed!"
97
+ echo " Location: $(which piper)"
98
+ echo ""
99
+ echo " Download voices with: .claude/hooks/piper-download-voices.sh"
100
+ exit 0
101
+ fi
102
+
103
+ echo "📦 Installing Piper TTS..."
104
+ echo ""
105
+
106
+ # macOS: Use precompiled binaries
107
+ if [[ "$IS_MACOS" == true ]]; then
108
+ echo "🍎 Installing Piper TTS from precompiled binaries for macOS..."
109
+ echo ""
110
+
111
+ # Determine architecture
112
+ if [[ "$ARCH" == "arm64" ]]; then
113
+ echo "Detected Apple Silicon (M1/M2/M3)"
114
+ PIPER_URL="https://github.com/rhasspy/piper/releases/download/2023.11.14-2/piper_macos_aarch64.tar.gz"
115
+ elif [[ "$ARCH" == "x86_64" ]]; then
116
+ echo "Detected Intel Mac"
117
+ PIPER_URL="https://github.com/rhasspy/piper/releases/download/2023.11.14-2/piper_macos_x64.tar.gz"
118
+ else
119
+ echo "❌ Unsupported macOS architecture: $ARCH"
120
+ exit 1
121
+ fi
122
+
123
+ # Create installation directory
124
+ INSTALL_DIR="$HOME/.local/bin"
125
+ mkdir -p "$INSTALL_DIR"
126
+
127
+ # Download and extract
128
+ echo "📥 Downloading Piper from: $PIPER_URL"
129
+ TEMP_DIR=$(mktemp -d)
130
+ cd "$TEMP_DIR"
131
+
132
+ if curl -L "$PIPER_URL" | tar -xz; then
133
+ echo "✅ Downloaded and extracted successfully"
134
+
135
+ # Copy binaries to ~/.local/bin
136
+ if [[ -d "piper" ]]; then
137
+ cp -r piper/* "$INSTALL_DIR/"
138
+ chmod +x "$INSTALL_DIR/piper"
139
+ chmod +x "$INSTALL_DIR/piper_phonemize"
140
+
141
+ echo "✅ Installed Piper to: $INSTALL_DIR/piper"
142
+
143
+ # Add to PATH if not already there
144
+ if [[ ":$PATH:" != *":$INSTALL_DIR:"* ]]; then
145
+ echo ""
146
+ echo "⚠️ Add $INSTALL_DIR to your PATH:"
147
+ echo ""
148
+ if [[ "$SHELL" == *"zsh"* ]]; then
149
+ echo " echo 'export PATH=\"\$HOME/.local/bin:\$PATH\"' >> ~/.zshrc"
150
+ echo " source ~/.zshrc"
151
+ else
152
+ echo " echo 'export PATH=\"\$HOME/.local/bin:\$PATH\"' >> ~/.bash_profile"
153
+ echo " source ~/.bash_profile"
154
+ fi
155
+ fi
156
+ else
157
+ echo "❌ Failed to extract Piper binaries"
158
+ cd -
159
+ rm -rf "$TEMP_DIR"
160
+ exit 1
161
+ fi
162
+ else
163
+ echo "❌ Failed to download Piper"
164
+ cd -
165
+ rm -rf "$TEMP_DIR"
166
+ exit 1
167
+ fi
168
+
169
+ cd -
170
+ rm -rf "$TEMP_DIR"
171
+
172
+ # Linux/WSL: Use pipx
173
+ else
174
+ # Check if pipx is installed
175
+ if ! command -v pipx &> /dev/null; then
176
+ echo "⚠️ pipx not found. Installing pipx first..."
177
+ echo ""
178
+
179
+ # Try to install pipx
180
+ if command -v apt-get &> /dev/null; then
181
+ # Debian/Ubuntu
182
+ sudo apt-get update
183
+ sudo apt-get install -y pipx
184
+ elif command -v brew &> /dev/null; then
185
+ # Linux with Homebrew
186
+ brew install pipx
187
+ elif command -v dnf &> /dev/null; then
188
+ # Fedora
189
+ sudo dnf install -y pipx
190
+ elif command -v pacman &> /dev/null; then
191
+ # Arch Linux
192
+ sudo pacman -S python-pipx
193
+ else
194
+ echo "❌ Unable to install pipx automatically."
195
+ echo ""
196
+ echo " Please install pipx manually:"
197
+ echo " https://pipx.pypa.io/stable/installation/"
198
+ exit 1
199
+ fi
200
+
201
+ # Ensure pipx is in PATH
202
+ pipx ensurepath
203
+ echo ""
204
+ fi
205
+
206
+ # Install Piper TTS
207
+ echo "📥 Installing Piper TTS via pipx..."
208
+ pipx install piper-tts
209
+
210
+ if ! command -v piper &> /dev/null; then
211
+ echo ""
212
+ echo "❌ Installation completed but piper command not found in PATH"
213
+ echo ""
214
+ echo " Try running: pipx ensurepath"
215
+ echo " Then restart your terminal"
216
+ exit 1
217
+ fi
218
+ fi
219
+
220
+ echo ""
221
+ echo "✅ Piper TTS installed successfully!"
222
+ echo ""
223
+
224
+ # Use full path since PATH hasn't been updated in current session
225
+ PIPER_VERSION=$($INSTALL_DIR/piper --version 2>&1 || echo "unknown")
226
+ echo " Version: $PIPER_VERSION"
227
+ echo ""
228
+
229
+ # Determine voices directory
230
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
231
+ CLAUDE_DIR="$(dirname "$SCRIPT_DIR")"
232
+
233
+ # Check for configured voices directory
234
+ VOICES_DIR=""
235
+ if [[ -f "$CLAUDE_DIR/piper-voices-dir.txt" ]]; then
236
+ VOICES_DIR=$(cat "$CLAUDE_DIR/piper-voices-dir.txt")
237
+ elif [[ -f "$HOME/.claude/piper-voices-dir.txt" ]]; then
238
+ VOICES_DIR=$(cat "$HOME/.claude/piper-voices-dir.txt")
239
+ else
240
+ VOICES_DIR="$HOME/.claude/piper-voices"
241
+ fi
242
+
243
+ echo "📁 Voice storage location: $VOICES_DIR"
244
+ echo ""
245
+
246
+ # Ask if user wants to download voices now (skip in non-interactive mode)
247
+ DOWNLOAD_VOICES=true
248
+ if [[ "$NON_INTERACTIVE" == "false" ]]; then
249
+ read -p "Would you like to download voice models now? [Y/n] " -n 1 -r
250
+ echo ""
251
+
252
+ if [[ ! $REPLY =~ ^[Yy]$ ]] && [[ -n $REPLY ]]; then
253
+ DOWNLOAD_VOICES=false
254
+ fi
255
+ else
256
+ echo "📥 Auto-downloading recommended voices (non-interactive mode)..."
257
+ echo ""
258
+ fi
259
+
260
+ if [[ "$DOWNLOAD_VOICES" == "true" ]]; then
261
+ echo ""
262
+ echo "📥 Downloading recommended voices..."
263
+ echo ""
264
+
265
+ # Use the piper-download-voices.sh script if available
266
+ if [[ -f "$SCRIPT_DIR/piper-download-voices.sh" ]]; then
267
+ "$SCRIPT_DIR/piper-download-voices.sh" --yes
268
+ else
269
+ # Manual download of a basic voice
270
+ mkdir -p "$VOICES_DIR"
271
+
272
+ echo "Downloading en_US-lessac-medium (recommended)..."
273
+ curl -L "https://huggingface.co/rhasspy/piper-voices/resolve/main/en/en_US/lessac/medium/en_US-lessac-medium.onnx" \
274
+ -o "$VOICES_DIR/en_US-lessac-medium.onnx"
275
+ curl -L "https://huggingface.co/rhasspy/piper-voices/resolve/main/en/en_US/lessac/medium/en_US-lessac-medium.onnx.json" \
276
+ -o "$VOICES_DIR/en_US-lessac-medium.onnx.json"
277
+
278
+ echo "✅ Voice downloaded!"
279
+ fi
280
+ fi
281
+
282
+ echo ""
283
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
284
+ echo "🎉 Piper TTS Setup Complete!"
285
+ echo ""
286
+ echo "Next steps:"
287
+ echo " 1. Download more voices: .claude/hooks/piper-download-voices.sh"
288
+ echo " 2. List available voices: /agent-vibes:list"
289
+ echo " 3. Test it out: /agent-vibes:preview"
290
+ echo ""
291
+ echo "Enjoy your free, offline TTS! 🎤"
292
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"