agentvibes 5.2.0 → 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 (49) hide show
  1. package/.claude/config/audio-effects.cfg +1 -1
  2. package/.claude/hooks/audio-cache-utils.sh +246 -246
  3. package/.claude/hooks/background-music-manager.sh +404 -404
  4. package/.claude/hooks/bmad-speak-enhanced.sh +165 -165
  5. package/.claude/hooks/bmad-speak.sh +290 -290
  6. package/.claude/hooks/bmad-tts-injector.sh +568 -568
  7. package/.claude/hooks/bmad-voice-manager.sh +928 -928
  8. package/.claude/hooks/clawdbot-receiver-SECURE.sh +129 -129
  9. package/.claude/hooks/clawdbot-receiver.sh +107 -107
  10. package/.claude/hooks/clean-audio-cache.sh +22 -22
  11. package/.claude/hooks/cleanup-cache.sh +106 -106
  12. package/.claude/hooks/configure-rdp-mode.sh +137 -137
  13. package/.claude/hooks/download-extra-voices.sh +244 -244
  14. package/.claude/hooks/effects-manager.sh +268 -268
  15. package/.claude/hooks/github-star-reminder.sh +154 -154
  16. package/.claude/hooks/language-manager.sh +362 -362
  17. package/.claude/hooks/learn-manager.sh +492 -492
  18. package/.claude/hooks/macos-voice-manager.sh +205 -205
  19. package/.claude/hooks/migrate-background-music.sh +125 -125
  20. package/.claude/hooks/migrate-to-agentvibes.sh +161 -161
  21. package/.claude/hooks/optimize-background-music.sh +87 -87
  22. package/.claude/hooks/path-resolver.sh +60 -60
  23. package/.claude/hooks/personality-manager.sh +448 -448
  24. package/.claude/hooks/piper-installer.sh +292 -292
  25. package/.claude/hooks/piper-multispeaker-registry.sh +171 -171
  26. package/.claude/hooks/play-tts-enhanced.sh +105 -105
  27. package/.claude/hooks/play-tts-termux-ssh.sh +169 -169
  28. package/.claude/hooks/play-tts.sh +14 -5
  29. package/.claude/hooks/prepare-release.sh +54 -54
  30. package/.claude/hooks/provider-commands.sh +617 -617
  31. package/.claude/hooks/provider-manager.sh +399 -399
  32. package/.claude/hooks/replay-target-audio.sh +95 -95
  33. package/.claude/hooks/sentiment-manager.sh +201 -201
  34. package/.claude/hooks/speed-manager.sh +291 -291
  35. package/.claude/hooks/stop-tts.sh +84 -84
  36. package/.claude/hooks/termux-installer.sh +261 -261
  37. package/.claude/hooks/translate-manager.sh +341 -341
  38. package/.claude/hooks/tts-queue-worker.sh +145 -145
  39. package/.claude/hooks/tts-queue.sh +165 -165
  40. package/.claude/hooks/voice-manager.sh +552 -548
  41. package/.claude/hooks-windows/play-tts.ps1 +2 -2
  42. package/README.md +11 -2
  43. package/RELEASE_NOTES.md +38 -0
  44. package/bin/mcp-server.sh +206 -206
  45. package/mcp-server/server.py +35 -6
  46. package/package.json +1 -1
  47. package/src/console/tabs/setup-tab.js +59 -23
  48. package/src/installer.js +79 -213
  49. package/src/services/llm-provider-service.js +126 -75
@@ -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 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 "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
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 "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"