agentvibes 4.2.0 → 4.4.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.
- package/.agentvibes/bmad/bmad-voices.md +69 -69
- package/.agentvibes/config.json +12 -0
- package/.claude/activation-instructions +54 -54
- package/.claude/audio/tracks/README.md +52 -52
- package/.claude/commands/agent-vibes/add.md +21 -21
- package/.claude/commands/agent-vibes/agent-vibes.md +101 -101
- package/.claude/commands/agent-vibes/agent.md +79 -79
- package/.claude/commands/agent-vibes/background-music.md +111 -111
- package/.claude/commands/agent-vibes/bmad.md +198 -198
- package/.claude/commands/agent-vibes/clean.md +18 -18
- package/.claude/commands/agent-vibes/cleanup.md +18 -18
- package/.claude/commands/agent-vibes/commands.json +145 -145
- package/.claude/commands/agent-vibes/effects.md +97 -97
- package/.claude/commands/agent-vibes/get.md +9 -9
- package/.claude/commands/agent-vibes/hide.md +91 -91
- package/.claude/commands/agent-vibes/language.md +23 -23
- package/.claude/commands/agent-vibes/learn.md +67 -67
- package/.claude/commands/agent-vibes/list.md +13 -13
- package/.claude/commands/agent-vibes/mute.md +37 -37
- package/.claude/commands/agent-vibes/preview.md +17 -17
- package/.claude/commands/agent-vibes/provider.md +68 -68
- package/.claude/commands/agent-vibes/replay-target.md +14 -14
- package/.claude/commands/agent-vibes/sample.md +12 -12
- package/.claude/commands/agent-vibes/set-favorite-voice.md +84 -84
- package/.claude/commands/agent-vibes/set-pretext.md +65 -65
- package/.claude/commands/agent-vibes/set-speed.md +41 -41
- package/.claude/commands/agent-vibes/show.md +84 -84
- package/.claude/commands/agent-vibes/switch.md +87 -87
- package/.claude/commands/agent-vibes/target-voice.md +26 -26
- package/.claude/commands/agent-vibes/target.md +30 -30
- package/.claude/commands/agent-vibes/translate.md +68 -68
- package/.claude/commands/agent-vibes/unmute.md +45 -45
- package/.claude/commands/agent-vibes/verbosity.md +89 -89
- package/.claude/commands/agent-vibes/whoami.md +7 -7
- package/.claude/commands/agent-vibes-bmad-voices.md +117 -117
- package/.claude/commands/agent-vibes-rdp.md +24 -24
- package/.claude/config/agentvibes.json +1 -0
- package/.claude/config/audio-effects.cfg +2 -2
- package/.claude/config/audio-effects.cfg.sample +52 -52
- package/.claude/config/background-music-volume.txt +1 -0
- package/.claude/config/intro-text.txt +1 -0
- package/.claude/config/piper-speech-rate.txt +4 -0
- package/.claude/config/piper-target-speech-rate.txt +1 -0
- package/.claude/config/reverb-level.txt +1 -0
- package/.claude/config/tts-speech-rate.txt +4 -0
- package/.claude/config/tts-target-speech-rate.txt +1 -0
- package/.claude/docs/TERMUX_SETUP.md +408 -408
- package/.claude/github-star-reminder.txt +1 -1
- package/.claude/hooks/README-TTS-QUEUE.md +135 -135
- package/.claude/hooks/audio-cache-utils.sh +246 -246
- package/.claude/hooks/audio-processor.sh +433 -433
- package/.claude/hooks/background-music-manager.sh +404 -404
- package/.claude/hooks/bmad-speak-enhanced.sh +165 -165
- package/.claude/hooks/bmad-speak.sh +269 -269
- package/.claude/hooks/bmad-tts-injector.sh +568 -568
- package/.claude/hooks/bmad-voice-manager.sh +928 -928
- package/.claude/hooks/clawdbot-receiver-SECURE.sh +129 -129
- package/.claude/hooks/clawdbot-receiver.sh +107 -107
- package/.claude/hooks/clean-audio-cache.sh +22 -22
- package/.claude/hooks/cleanup-cache.sh +106 -106
- package/.claude/hooks/configure-rdp-mode.sh +137 -137
- package/.claude/hooks/download-extra-voices.sh +244 -244
- package/.claude/hooks/effects-manager.sh +268 -268
- package/.claude/hooks/github-star-reminder.sh +154 -154
- package/.claude/hooks/language-manager.sh +362 -362
- package/.claude/hooks/learn-manager.sh +492 -492
- package/.claude/hooks/macos-voice-manager.sh +205 -205
- package/.claude/hooks/migrate-background-music.sh +125 -125
- package/.claude/hooks/migrate-to-agentvibes.sh +161 -161
- package/.claude/hooks/optimize-background-music.sh +87 -87
- package/.claude/hooks/path-resolver.sh +60 -60
- package/.claude/hooks/personality-manager.sh +448 -448
- package/.claude/hooks/piper-download-voices.sh +225 -225
- package/.claude/hooks/piper-installer.sh +292 -292
- package/.claude/hooks/piper-multispeaker-registry.sh +171 -171
- package/.claude/hooks/piper-voice-manager.sh +24 -3
- package/.claude/hooks/play-tts-agentvibes-receiver-for-voiceless-connections.sh +90 -90
- package/.claude/hooks/play-tts-enhanced.sh +105 -105
- package/.claude/hooks/play-tts-macos.sh +368 -368
- package/.claude/hooks/play-tts-piper.sh +679 -679
- package/.claude/hooks/play-tts-soprano.sh +356 -356
- package/.claude/hooks/play-tts-ssh-remote.sh +167 -167
- package/.claude/hooks/play-tts-termux-ssh.sh +169 -169
- package/.claude/hooks/play-tts.sh +301 -301
- package/.claude/hooks/prepare-release.sh +54 -54
- package/.claude/hooks/provider-commands.sh +617 -617
- package/.claude/hooks/provider-manager.sh +399 -399
- package/.claude/hooks/replay-target-audio.sh +95 -95
- package/.claude/hooks/requirements.txt +6 -6
- package/.claude/hooks/sentiment-manager.sh +201 -201
- package/.claude/hooks/session-start-tts.sh +81 -81
- package/.claude/hooks/soprano-gradio-synth.py +139 -139
- package/.claude/hooks/speed-manager.sh +291 -291
- package/.claude/hooks/stop-tts.sh +84 -84
- package/.claude/hooks/termux-installer.sh +261 -261
- package/.claude/hooks/translate-manager.sh +341 -341
- package/.claude/hooks/translator.py +237 -237
- package/.claude/hooks/tts-queue-worker.sh +145 -145
- package/.claude/hooks/tts-queue.sh +165 -165
- package/.claude/hooks/verbosity-manager.sh +178 -178
- package/.claude/hooks/voice-manager.sh +548 -548
- package/.claude/hooks-windows/audio-cache-utils.ps1 +119 -119
- package/.claude/hooks-windows/background-music-manager.ps1 +348 -0
- package/.claude/hooks-windows/clean-audio-cache.ps1 +53 -0
- package/.claude/hooks-windows/download-extra-voices.ps1 +185 -0
- package/.claude/hooks-windows/effects-manager.ps1 +294 -0
- package/.claude/hooks-windows/language-manager.ps1 +193 -0
- package/.claude/hooks-windows/learn-manager.ps1 +241 -0
- package/.claude/hooks-windows/personality-manager.ps1 +266 -0
- package/.claude/hooks-windows/play-tts-piper.ps1 +209 -0
- package/.claude/hooks-windows/play-tts-sapi.ps1 +108 -0
- package/.claude/hooks-windows/play-tts-soprano.ps1 +159 -158
- package/.claude/hooks-windows/play-tts-windows-piper.ps1 +50 -5
- package/.claude/hooks-windows/play-tts-windows-sapi.ps1 +108 -108
- package/.claude/hooks-windows/play-tts.ps1 +344 -266
- package/.claude/hooks-windows/provider-manager.ps1 +29 -10
- package/.claude/hooks-windows/session-start-tts.ps1 +124 -124
- package/.claude/hooks-windows/soprano-gradio-synth.py +153 -153
- package/.claude/hooks-windows/speed-manager.ps1 +166 -0
- package/.claude/hooks-windows/verbosity-manager.ps1 +119 -0
- package/.claude/hooks-windows/voice-manager-windows.ps1 +92 -8
- package/.claude/output-styles/agent-vibes.md +202 -202
- package/.claude/personalities/angry.md +14 -14
- package/.claude/personalities/annoying.md +14 -14
- package/.claude/personalities/crass.md +14 -14
- package/.claude/personalities/dramatic.md +14 -14
- package/.claude/personalities/dry-humor.md +50 -50
- package/.claude/personalities/flirty.md +20 -20
- package/.claude/personalities/funny.md +14 -14
- package/.claude/personalities/grandpa.md +32 -32
- package/.claude/personalities/millennial.md +14 -14
- package/.claude/personalities/moody.md +14 -14
- package/.claude/personalities/normal.md +16 -16
- package/.claude/personalities/pirate.md +14 -14
- package/.claude/personalities/poetic.md +14 -14
- package/.claude/personalities/professional.md +14 -14
- package/.claude/personalities/rapper.md +55 -55
- package/.claude/personalities/robot.md +14 -14
- package/.claude/personalities/sarcastic.md +38 -38
- package/.claude/personalities/sassy.md +14 -14
- package/.claude/personalities/surfer-dude.md +14 -14
- package/.claude/personalities/zen.md +14 -14
- package/.claude/settings.json +15 -15
- package/.claude/verbosity.txt +1 -1
- package/.clawdbot/README.md +105 -105
- package/.clawdbot/skill/SKILL.md +241 -241
- package/.mcp.json +12 -0
- package/CLAUDE.md +170 -170
- package/README.md +2029 -2007
- package/RELEASE_NOTES.md +1310 -1203
- package/WINDOWS-SETUP.md +208 -208
- package/bin/agent-vibes +39 -39
- package/bin/agentvibes-voice-browser.js +1840 -1840
- package/bin/agentvibes.js +48 -2
- package/bin/mcp-server.js +121 -121
- package/bin/mcp-server.sh +206 -206
- package/bin/test-bmad-pr +78 -78
- package/mcp-server/QUICK_START.md +203 -203
- package/mcp-server/README.md +345 -345
- package/mcp-server/WINDOWS_SETUP.md +260 -260
- package/mcp-server/docs/troubleshooting-audio.md +313 -313
- package/mcp-server/examples/claude_desktop_config.json +11 -11
- package/mcp-server/examples/claude_desktop_config_piper.json +9 -9
- package/mcp-server/examples/custom_instructions.md +169 -169
- package/mcp-server/install-deps.js +130 -130
- package/mcp-server/pyproject.toml +52 -52
- package/mcp-server/requirements.txt +2 -2
- package/mcp-server/server.py +1465 -1453
- package/mcp-server/test_server.py +395 -395
- package/mcp-server/test_windows_script_parity.py +336 -0
- package/package.json +110 -110
- package/setup-windows.ps1 +815 -815
- package/src/bmad-detector.js +71 -71
- package/src/cli/list-personalities.js +110 -110
- package/src/cli/list-voices.js +114 -114
- package/src/commands/bmad-voices.js +394 -394
- package/src/commands/install-mcp.js +476 -476
- package/src/console/app.js +824 -824
- package/src/console/audio-env.js +20 -1
- package/src/console/brand-colors.js +13 -13
- package/src/console/constants/personalities.js +44 -44
- package/src/console/footer-config.js +50 -50
- package/src/console/modals/modal-overlay.js +247 -247
- package/src/console/navigation.js +62 -62
- package/src/console/tabs/agents-tab.js +1684 -1516
- package/src/console/tabs/help-tab.js +261 -261
- package/src/console/tabs/install-tab.js +1007 -991
- package/src/console/tabs/music-tab.js +22 -8
- package/src/console/tabs/placeholder-tab.js +53 -53
- package/src/console/tabs/readme-tab.js +267 -267
- package/src/console/tabs/receiver-tab.js +1472 -1212
- package/src/console/tabs/settings-tab.js +152 -79
- package/src/console/tabs/voices-tab.js +100 -21
- package/src/console/widgets/destroy-list.js +25 -25
- package/src/console/widgets/format-utils.js +89 -89
- package/src/console/widgets/notice.js +55 -55
- package/src/console/widgets/personality-picker.js +185 -185
- package/src/console/widgets/reverb-picker.js +94 -94
- package/src/console/widgets/track-picker.js +285 -285
- package/src/installer/music-file-input.js +304 -304
- package/src/installer.js +5882 -5829
- package/src/services/agent-voice-store.js +423 -423
- package/src/services/config-service.js +264 -264
- package/src/services/navigation-service.js +123 -123
- package/src/services/provider-service.js +132 -132
- package/src/services/verbosity-service.js +157 -157
- package/src/utils/audio-duration-validator.js +298 -298
- package/src/utils/audio-format-validator.js +277 -277
- package/src/utils/dependency-checker.js +469 -466
- package/src/utils/file-ownership-verifier.js +358 -358
- package/src/utils/list-formatter.js +194 -194
- package/src/utils/music-file-validator.js +285 -285
- package/src/utils/preview-list-prompt.js +136 -136
- package/src/utils/provider-validator.js +96 -12
- package/src/utils/secure-music-storage.js +412 -412
- package/templates/agentvibes-receiver.sh +482 -482
- package/templates/audio/welcome-music.mp3 +0 -0
- package/voice-assignments.json +8244 -8244
- package/.claude/config/background-music-position.txt +0 -1
|
@@ -1,261 +1,261 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
#
|
|
3
|
-
# AgentVibes Termux/Android Installer
|
|
4
|
-
# Installs Piper TTS and dependencies for Android/Termux
|
|
5
|
-
#
|
|
6
|
-
# Usage: ./termux-installer.sh [--non-interactive]
|
|
7
|
-
#
|
|
8
|
-
# Requirements:
|
|
9
|
-
# - Termux app installed
|
|
10
|
-
# - termux-api package (for audio playback)
|
|
11
|
-
#
|
|
12
|
-
|
|
13
|
-
set -euo pipefail
|
|
14
|
-
|
|
15
|
-
# Colors
|
|
16
|
-
RED='\033[0;31m'
|
|
17
|
-
GREEN='\033[0;32m'
|
|
18
|
-
YELLOW='\033[1;33m'
|
|
19
|
-
BLUE='\033[0;34m'
|
|
20
|
-
NC='\033[0m' # No Color
|
|
21
|
-
|
|
22
|
-
# Parse arguments
|
|
23
|
-
NON_INTERACTIVE=false
|
|
24
|
-
if [[ "$1" == "--non-interactive" ]]; then
|
|
25
|
-
NON_INTERACTIVE=true
|
|
26
|
-
fi
|
|
27
|
-
|
|
28
|
-
echo -e "${BLUE}"
|
|
29
|
-
echo "╔════════════════════════════════════════════════════════════╗"
|
|
30
|
-
echo "║ AgentVibes Termux/Android Installer ║"
|
|
31
|
-
echo "║ TTS with Personality for AI Assistants ║"
|
|
32
|
-
echo "╚════════════════════════════════════════════════════════════╝"
|
|
33
|
-
echo -e "${NC}"
|
|
34
|
-
|
|
35
|
-
# Detect if running on Termux
|
|
36
|
-
if [[ ! -d "/data/data/com.termux" ]]; then
|
|
37
|
-
echo -e "${RED}Error: This installer is for Termux on Android only${NC}"
|
|
38
|
-
echo "For other platforms, use the standard installer."
|
|
39
|
-
exit 1
|
|
40
|
-
fi
|
|
41
|
-
|
|
42
|
-
echo -e "${GREEN}✓ Detected Termux environment${NC}"
|
|
43
|
-
echo ""
|
|
44
|
-
|
|
45
|
-
# Step 1: Update packages and install dependencies
|
|
46
|
-
echo -e "${BLUE}[1/6] Installing system dependencies...${NC}"
|
|
47
|
-
|
|
48
|
-
pkg update -y 2>/dev/null || true
|
|
49
|
-
|
|
50
|
-
DEPS="proot-distro ffmpeg sox bc termux-api curl"
|
|
51
|
-
for dep in $DEPS; do
|
|
52
|
-
if ! command -v "$dep" &> /dev/null && ! pkg list-installed 2>/dev/null | grep -q "^$dep/"; then
|
|
53
|
-
echo " Installing $dep..."
|
|
54
|
-
pkg install -y "$dep" 2>/dev/null || echo " Warning: Failed to install $dep"
|
|
55
|
-
else
|
|
56
|
-
echo -e " ${GREEN}✓${NC} $dep already installed"
|
|
57
|
-
fi
|
|
58
|
-
done
|
|
59
|
-
|
|
60
|
-
echo ""
|
|
61
|
-
|
|
62
|
-
# Step 2: Install proot-distro Debian
|
|
63
|
-
echo -e "${BLUE}[2/6] Setting up proot-distro Debian...${NC}"
|
|
64
|
-
|
|
65
|
-
if proot-distro list 2>/dev/null | grep -q "debian.*installed"; then
|
|
66
|
-
echo -e " ${GREEN}✓${NC} Debian already installed in proot-distro"
|
|
67
|
-
else
|
|
68
|
-
echo " Installing Debian (this may take a few minutes)..."
|
|
69
|
-
proot-distro install debian 2>/dev/null || {
|
|
70
|
-
# Check if it's already installed despite error
|
|
71
|
-
if proot-distro list 2>/dev/null | grep -q "debian"; then
|
|
72
|
-
echo -e " ${GREEN}✓${NC} Debian is available"
|
|
73
|
-
else
|
|
74
|
-
echo -e "${RED} Error: Failed to install Debian${NC}"
|
|
75
|
-
exit 1
|
|
76
|
-
fi
|
|
77
|
-
}
|
|
78
|
-
fi
|
|
79
|
-
|
|
80
|
-
echo ""
|
|
81
|
-
|
|
82
|
-
# Step 3: Download Piper binary inside Debian
|
|
83
|
-
echo -e "${BLUE}[3/6] Installing Piper TTS in Debian proot...${NC}"
|
|
84
|
-
|
|
85
|
-
PIPER_CHECK=$(proot-distro login debian -- ls /root/piper/piper 2>/dev/null || echo "not found")
|
|
86
|
-
if [[ "$PIPER_CHECK" != "not found" ]]; then
|
|
87
|
-
echo -e " ${GREEN}✓${NC} Piper binary already installed"
|
|
88
|
-
else
|
|
89
|
-
echo " Downloading Piper TTS binary..."
|
|
90
|
-
proot-distro login debian -- bash -c "
|
|
91
|
-
mkdir -p /root/piper /root/piper-voices
|
|
92
|
-
cd /root
|
|
93
|
-
curl -L -o piper.tar.gz 'https://github.com/rhasspy/piper/releases/download/2023.11.14-2/piper_linux_aarch64.tar.gz'
|
|
94
|
-
tar -xzf piper.tar.gz
|
|
95
|
-
rm piper.tar.gz
|
|
96
|
-
echo 'Piper installed successfully'
|
|
97
|
-
" 2>/dev/null || echo -e "${YELLOW} Warning: Piper download may have issues${NC}"
|
|
98
|
-
fi
|
|
99
|
-
|
|
100
|
-
# Verify piper works
|
|
101
|
-
PIPER_TEST=$(proot-distro login debian -- /root/piper/piper --help 2>/dev/null | head -1 || echo "failed")
|
|
102
|
-
if [[ "$PIPER_TEST" == *"usage"* ]]; then
|
|
103
|
-
echo -e " ${GREEN}✓${NC} Piper binary verified"
|
|
104
|
-
else
|
|
105
|
-
echo -e "${YELLOW} Warning: Piper verification failed, but may still work${NC}"
|
|
106
|
-
fi
|
|
107
|
-
|
|
108
|
-
echo ""
|
|
109
|
-
|
|
110
|
-
# Step 4: Download voice model
|
|
111
|
-
echo -e "${BLUE}[4/6] Downloading voice model...${NC}"
|
|
112
|
-
|
|
113
|
-
VOICE_MODEL="en_US-lessac-medium"
|
|
114
|
-
VOICES_DIR="$HOME/.claude/piper-voices"
|
|
115
|
-
mkdir -p "$VOICES_DIR"
|
|
116
|
-
|
|
117
|
-
if [[ -f "$VOICES_DIR/${VOICE_MODEL}.onnx" ]]; then
|
|
118
|
-
echo -e " ${GREEN}✓${NC} Voice model already downloaded"
|
|
119
|
-
else
|
|
120
|
-
echo " Downloading ${VOICE_MODEL} (~63MB)..."
|
|
121
|
-
|
|
122
|
-
# Download to Termux location (accessible from both Termux and proot)
|
|
123
|
-
curl -L -o "$VOICES_DIR/${VOICE_MODEL}.onnx" \
|
|
124
|
-
"https://huggingface.co/rhasspy/piper-voices/resolve/main/en/en_US/lessac/medium/en_US-lessac-medium.onnx" \
|
|
125
|
-
2>/dev/null || echo -e "${YELLOW} Warning: Voice download may have failed${NC}"
|
|
126
|
-
|
|
127
|
-
curl -L -o "$VOICES_DIR/${VOICE_MODEL}.onnx.json" \
|
|
128
|
-
"https://huggingface.co/rhasspy/piper-voices/resolve/main/en/en_US/lessac/medium/en_US-lessac-medium.onnx.json" \
|
|
129
|
-
2>/dev/null || true
|
|
130
|
-
|
|
131
|
-
if [[ -f "$VOICES_DIR/${VOICE_MODEL}.onnx" ]]; then
|
|
132
|
-
echo -e " ${GREEN}✓${NC} Voice model downloaded"
|
|
133
|
-
fi
|
|
134
|
-
fi
|
|
135
|
-
|
|
136
|
-
echo ""
|
|
137
|
-
|
|
138
|
-
# Step 5: Create piper wrapper script
|
|
139
|
-
echo -e "${BLUE}[5/6] Creating Piper wrapper for Termux...${NC}"
|
|
140
|
-
|
|
141
|
-
WRAPPER_PATH="/data/data/com.termux/files/usr/bin/piper"
|
|
142
|
-
|
|
143
|
-
cat > "$WRAPPER_PATH" << 'WRAPPER_EOF'
|
|
144
|
-
#!/bin/bash
|
|
145
|
-
#
|
|
146
|
-
# Piper TTS wrapper for Termux
|
|
147
|
-
# Runs piper through proot-distro Debian
|
|
148
|
-
#
|
|
149
|
-
|
|
150
|
-
PIPER_DIR="/root/piper"
|
|
151
|
-
|
|
152
|
-
# Build the piper command with proper quoting
|
|
153
|
-
PIPER_CMD="cd $PIPER_DIR && LD_LIBRARY_PATH=. ./piper"
|
|
154
|
-
|
|
155
|
-
# Add all arguments
|
|
156
|
-
for arg in "$@"; do
|
|
157
|
-
PIPER_CMD="$PIPER_CMD \"$arg\""
|
|
158
|
-
done
|
|
159
|
-
|
|
160
|
-
# Run piper, filtering only the proot warning
|
|
161
|
-
if [ -t 0 ]; then
|
|
162
|
-
# No stdin
|
|
163
|
-
proot-distro login debian -- bash -c "$PIPER_CMD" 2>&1 | grep -v "proot warning"
|
|
164
|
-
else
|
|
165
|
-
# With stdin - need to pass it through
|
|
166
|
-
cat | proot-distro login debian -- bash -c "$PIPER_CMD" 2>&1 | grep -v "proot warning"
|
|
167
|
-
fi
|
|
168
|
-
WRAPPER_EOF
|
|
169
|
-
|
|
170
|
-
chmod +x "$WRAPPER_PATH"
|
|
171
|
-
echo -e " ${GREEN}✓${NC} Piper wrapper created at $WRAPPER_PATH"
|
|
172
|
-
|
|
173
|
-
echo ""
|
|
174
|
-
|
|
175
|
-
# Step 6: Apply Termux-specific fixes
|
|
176
|
-
echo -e "${BLUE}[6/6] Applying Termux-specific fixes...${NC}"
|
|
177
|
-
|
|
178
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
179
|
-
|
|
180
|
-
# Fix audio-processor.sh to use Termux temp directory
|
|
181
|
-
AUDIO_PROCESSOR="$SCRIPT_DIR/audio-processor.sh"
|
|
182
|
-
if [[ -f "$AUDIO_PROCESSOR" ]]; then
|
|
183
|
-
if grep -q 'temp_effects="/tmp/' "$AUDIO_PROCESSOR"; then
|
|
184
|
-
echo " Patching audio-processor.sh for Termux temp directory..."
|
|
185
|
-
sed -i 's|temp_effects="/tmp/|temp_effects="${TMPDIR:-/data/data/com.termux/files/usr/tmp}/|g' "$AUDIO_PROCESSOR"
|
|
186
|
-
sed -i 's|temp_final="/tmp/|temp_final="${TMPDIR:-/data/data/com.termux/files/usr/tmp}/|g' "$AUDIO_PROCESSOR"
|
|
187
|
-
sed -i "s|trap 'rm -f /tmp/|trap 'rm -f \"\${TMPDIR:-/data/data/com.termux/files/usr/tmp}/|g" "$AUDIO_PROCESSOR"
|
|
188
|
-
echo -e " ${GREEN}✓${NC} audio-processor.sh patched"
|
|
189
|
-
else
|
|
190
|
-
echo -e " ${GREEN}✓${NC} audio-processor.sh already patched"
|
|
191
|
-
fi
|
|
192
|
-
fi
|
|
193
|
-
|
|
194
|
-
# Set default voice
|
|
195
|
-
CLAUDE_DIR="$HOME/.claude"
|
|
196
|
-
mkdir -p "$CLAUDE_DIR"
|
|
197
|
-
if [[ ! -f "$CLAUDE_DIR/tts-voice.txt" ]]; then
|
|
198
|
-
echo "$VOICE_MODEL" > "$CLAUDE_DIR/tts-voice.txt"
|
|
199
|
-
echo -e " ${GREEN}✓${NC} Default voice set to $VOICE_MODEL"
|
|
200
|
-
fi
|
|
201
|
-
|
|
202
|
-
# Set provider to piper
|
|
203
|
-
if [[ ! -f "$CLAUDE_DIR/tts-provider.txt" ]]; then
|
|
204
|
-
echo "piper" > "$CLAUDE_DIR/tts-provider.txt"
|
|
205
|
-
echo -e " ${GREEN}✓${NC} TTS provider set to piper"
|
|
206
|
-
fi
|
|
207
|
-
|
|
208
|
-
echo ""
|
|
209
|
-
|
|
210
|
-
# Step 7: Install Clawdbot SSH receiver
|
|
211
|
-
echo -e "${BLUE}[7/7] Installing Clawdbot SSH receiver...${NC}"
|
|
212
|
-
|
|
213
|
-
TERMUX_DIR="$HOME/.termux"
|
|
214
|
-
mkdir -p "$TERMUX_DIR"
|
|
215
|
-
|
|
216
|
-
# Create wrapper script at ~/.termux/agentvibes-play.sh
|
|
217
|
-
# This calls the main receiver in AgentVibes hooks
|
|
218
|
-
cat > "$TERMUX_DIR/agentvibes-play.sh" << 'EOF'
|
|
219
|
-
#!/usr/bin/env bash
|
|
220
|
-
# AgentVibes Clawdbot Receiver Wrapper
|
|
221
|
-
# Installed by AgentVibes Termux installer
|
|
222
|
-
# Forwards to main receiver script in AgentVibes
|
|
223
|
-
|
|
224
|
-
# Find AgentVibes installation
|
|
225
|
-
if [[ -f "$HOME/agentvibes/.claude/hooks/clawdbot-receiver.sh" ]]; then
|
|
226
|
-
exec bash "$HOME/agentvibes/.claude/hooks/clawdbot-receiver.sh" "$@"
|
|
227
|
-
elif [[ -f "$HOME/AgentVibes-dev/.claude/hooks/clawdbot-receiver.sh" ]]; then
|
|
228
|
-
exec bash "$HOME/AgentVibes-dev/.claude/hooks/clawdbot-receiver.sh" "$@"
|
|
229
|
-
else
|
|
230
|
-
echo "❌ AgentVibes clawdbot-receiver.sh not found" >&2
|
|
231
|
-
exit 1
|
|
232
|
-
fi
|
|
233
|
-
EOF
|
|
234
|
-
|
|
235
|
-
chmod +x "$TERMUX_DIR/agentvibes-play.sh"
|
|
236
|
-
echo -e " ${GREEN}✓${NC} Clawdbot receiver installed at ~/.termux/agentvibes-play.sh"
|
|
237
|
-
|
|
238
|
-
# Also create fallback at ~/.agentvibes/play-remote.sh
|
|
239
|
-
AGENTVIBES_DIR="$HOME/.agentvibes"
|
|
240
|
-
mkdir -p "$AGENTVIBES_DIR"
|
|
241
|
-
ln -sf "$TERMUX_DIR/agentvibes-play.sh" "$AGENTVIBES_DIR/play-remote.sh" 2>/dev/null || \
|
|
242
|
-
cp "$TERMUX_DIR/agentvibes-play.sh" "$AGENTVIBES_DIR/play-remote.sh"
|
|
243
|
-
echo -e " ${GREEN}✓${NC} Fallback link created at ~/.agentvibes/play-remote.sh"
|
|
244
|
-
|
|
245
|
-
echo ""
|
|
246
|
-
echo -e "${GREEN}════════════════════════════════════════════════════════════${NC}"
|
|
247
|
-
echo -e "${GREEN} Installation Complete!${NC}"
|
|
248
|
-
echo -e "${GREEN}════════════════════════════════════════════════════════════${NC}"
|
|
249
|
-
echo ""
|
|
250
|
-
echo " To test TTS:"
|
|
251
|
-
echo " echo 'Hello world' | piper -m ~/.claude/piper-voices/en_US-lessac-medium.onnx -f ~/test.wav"
|
|
252
|
-
echo " termux-media-player play ~/test.wav"
|
|
253
|
-
echo ""
|
|
254
|
-
echo " To enable background music:"
|
|
255
|
-
echo " .claude/hooks/background-music-manager.sh on"
|
|
256
|
-
echo ""
|
|
257
|
-
echo " Available background tracks:"
|
|
258
|
-
echo " .claude/hooks/background-music-manager.sh list"
|
|
259
|
-
echo ""
|
|
260
|
-
echo -e "${BLUE}Enjoy AgentVibes on Android! 🎤${NC}"
|
|
261
|
-
echo ""
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
#
|
|
3
|
+
# AgentVibes Termux/Android Installer
|
|
4
|
+
# Installs Piper TTS and dependencies for Android/Termux
|
|
5
|
+
#
|
|
6
|
+
# Usage: ./termux-installer.sh [--non-interactive]
|
|
7
|
+
#
|
|
8
|
+
# Requirements:
|
|
9
|
+
# - Termux app installed
|
|
10
|
+
# - termux-api package (for audio playback)
|
|
11
|
+
#
|
|
12
|
+
|
|
13
|
+
set -euo pipefail
|
|
14
|
+
|
|
15
|
+
# Colors
|
|
16
|
+
RED='\033[0;31m'
|
|
17
|
+
GREEN='\033[0;32m'
|
|
18
|
+
YELLOW='\033[1;33m'
|
|
19
|
+
BLUE='\033[0;34m'
|
|
20
|
+
NC='\033[0m' # No Color
|
|
21
|
+
|
|
22
|
+
# Parse arguments
|
|
23
|
+
NON_INTERACTIVE=false
|
|
24
|
+
if [[ "$1" == "--non-interactive" ]]; then
|
|
25
|
+
NON_INTERACTIVE=true
|
|
26
|
+
fi
|
|
27
|
+
|
|
28
|
+
echo -e "${BLUE}"
|
|
29
|
+
echo "╔════════════════════════════════════════════════════════════╗"
|
|
30
|
+
echo "║ AgentVibes Termux/Android Installer ║"
|
|
31
|
+
echo "║ TTS with Personality for AI Assistants ║"
|
|
32
|
+
echo "╚════════════════════════════════════════════════════════════╝"
|
|
33
|
+
echo -e "${NC}"
|
|
34
|
+
|
|
35
|
+
# Detect if running on Termux
|
|
36
|
+
if [[ ! -d "/data/data/com.termux" ]]; then
|
|
37
|
+
echo -e "${RED}Error: This installer is for Termux on Android only${NC}"
|
|
38
|
+
echo "For other platforms, use the standard installer."
|
|
39
|
+
exit 1
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
echo -e "${GREEN}✓ Detected Termux environment${NC}"
|
|
43
|
+
echo ""
|
|
44
|
+
|
|
45
|
+
# Step 1: Update packages and install dependencies
|
|
46
|
+
echo -e "${BLUE}[1/6] Installing system dependencies...${NC}"
|
|
47
|
+
|
|
48
|
+
pkg update -y 2>/dev/null || true
|
|
49
|
+
|
|
50
|
+
DEPS="proot-distro ffmpeg sox bc termux-api curl"
|
|
51
|
+
for dep in $DEPS; do
|
|
52
|
+
if ! command -v "$dep" &> /dev/null && ! pkg list-installed 2>/dev/null | grep -q "^$dep/"; then
|
|
53
|
+
echo " Installing $dep..."
|
|
54
|
+
pkg install -y "$dep" 2>/dev/null || echo " Warning: Failed to install $dep"
|
|
55
|
+
else
|
|
56
|
+
echo -e " ${GREEN}✓${NC} $dep already installed"
|
|
57
|
+
fi
|
|
58
|
+
done
|
|
59
|
+
|
|
60
|
+
echo ""
|
|
61
|
+
|
|
62
|
+
# Step 2: Install proot-distro Debian
|
|
63
|
+
echo -e "${BLUE}[2/6] Setting up proot-distro Debian...${NC}"
|
|
64
|
+
|
|
65
|
+
if proot-distro list 2>/dev/null | grep -q "debian.*installed"; then
|
|
66
|
+
echo -e " ${GREEN}✓${NC} Debian already installed in proot-distro"
|
|
67
|
+
else
|
|
68
|
+
echo " Installing Debian (this may take a few minutes)..."
|
|
69
|
+
proot-distro install debian 2>/dev/null || {
|
|
70
|
+
# Check if it's already installed despite error
|
|
71
|
+
if proot-distro list 2>/dev/null | grep -q "debian"; then
|
|
72
|
+
echo -e " ${GREEN}✓${NC} Debian is available"
|
|
73
|
+
else
|
|
74
|
+
echo -e "${RED} Error: Failed to install Debian${NC}"
|
|
75
|
+
exit 1
|
|
76
|
+
fi
|
|
77
|
+
}
|
|
78
|
+
fi
|
|
79
|
+
|
|
80
|
+
echo ""
|
|
81
|
+
|
|
82
|
+
# Step 3: Download Piper binary inside Debian
|
|
83
|
+
echo -e "${BLUE}[3/6] Installing Piper TTS in Debian proot...${NC}"
|
|
84
|
+
|
|
85
|
+
PIPER_CHECK=$(proot-distro login debian -- ls /root/piper/piper 2>/dev/null || echo "not found")
|
|
86
|
+
if [[ "$PIPER_CHECK" != "not found" ]]; then
|
|
87
|
+
echo -e " ${GREEN}✓${NC} Piper binary already installed"
|
|
88
|
+
else
|
|
89
|
+
echo " Downloading Piper TTS binary..."
|
|
90
|
+
proot-distro login debian -- bash -c "
|
|
91
|
+
mkdir -p /root/piper /root/piper-voices
|
|
92
|
+
cd /root
|
|
93
|
+
curl -L -o piper.tar.gz 'https://github.com/rhasspy/piper/releases/download/2023.11.14-2/piper_linux_aarch64.tar.gz'
|
|
94
|
+
tar -xzf piper.tar.gz
|
|
95
|
+
rm piper.tar.gz
|
|
96
|
+
echo 'Piper installed successfully'
|
|
97
|
+
" 2>/dev/null || echo -e "${YELLOW} Warning: Piper download may have issues${NC}"
|
|
98
|
+
fi
|
|
99
|
+
|
|
100
|
+
# Verify piper works
|
|
101
|
+
PIPER_TEST=$(proot-distro login debian -- /root/piper/piper --help 2>/dev/null | head -1 || echo "failed")
|
|
102
|
+
if [[ "$PIPER_TEST" == *"usage"* ]]; then
|
|
103
|
+
echo -e " ${GREEN}✓${NC} Piper binary verified"
|
|
104
|
+
else
|
|
105
|
+
echo -e "${YELLOW} Warning: Piper verification failed, but may still work${NC}"
|
|
106
|
+
fi
|
|
107
|
+
|
|
108
|
+
echo ""
|
|
109
|
+
|
|
110
|
+
# Step 4: Download voice model
|
|
111
|
+
echo -e "${BLUE}[4/6] Downloading voice model...${NC}"
|
|
112
|
+
|
|
113
|
+
VOICE_MODEL="en_US-lessac-medium"
|
|
114
|
+
VOICES_DIR="$HOME/.claude/piper-voices"
|
|
115
|
+
mkdir -p "$VOICES_DIR"
|
|
116
|
+
|
|
117
|
+
if [[ -f "$VOICES_DIR/${VOICE_MODEL}.onnx" ]]; then
|
|
118
|
+
echo -e " ${GREEN}✓${NC} Voice model already downloaded"
|
|
119
|
+
else
|
|
120
|
+
echo " Downloading ${VOICE_MODEL} (~63MB)..."
|
|
121
|
+
|
|
122
|
+
# Download to Termux location (accessible from both Termux and proot)
|
|
123
|
+
curl -L -o "$VOICES_DIR/${VOICE_MODEL}.onnx" \
|
|
124
|
+
"https://huggingface.co/rhasspy/piper-voices/resolve/main/en/en_US/lessac/medium/en_US-lessac-medium.onnx" \
|
|
125
|
+
2>/dev/null || echo -e "${YELLOW} Warning: Voice download may have failed${NC}"
|
|
126
|
+
|
|
127
|
+
curl -L -o "$VOICES_DIR/${VOICE_MODEL}.onnx.json" \
|
|
128
|
+
"https://huggingface.co/rhasspy/piper-voices/resolve/main/en/en_US/lessac/medium/en_US-lessac-medium.onnx.json" \
|
|
129
|
+
2>/dev/null || true
|
|
130
|
+
|
|
131
|
+
if [[ -f "$VOICES_DIR/${VOICE_MODEL}.onnx" ]]; then
|
|
132
|
+
echo -e " ${GREEN}✓${NC} Voice model downloaded"
|
|
133
|
+
fi
|
|
134
|
+
fi
|
|
135
|
+
|
|
136
|
+
echo ""
|
|
137
|
+
|
|
138
|
+
# Step 5: Create piper wrapper script
|
|
139
|
+
echo -e "${BLUE}[5/6] Creating Piper wrapper for Termux...${NC}"
|
|
140
|
+
|
|
141
|
+
WRAPPER_PATH="/data/data/com.termux/files/usr/bin/piper"
|
|
142
|
+
|
|
143
|
+
cat > "$WRAPPER_PATH" << 'WRAPPER_EOF'
|
|
144
|
+
#!/bin/bash
|
|
145
|
+
#
|
|
146
|
+
# Piper TTS wrapper for Termux
|
|
147
|
+
# Runs piper through proot-distro Debian
|
|
148
|
+
#
|
|
149
|
+
|
|
150
|
+
PIPER_DIR="/root/piper"
|
|
151
|
+
|
|
152
|
+
# Build the piper command with proper quoting
|
|
153
|
+
PIPER_CMD="cd $PIPER_DIR && LD_LIBRARY_PATH=. ./piper"
|
|
154
|
+
|
|
155
|
+
# Add all arguments
|
|
156
|
+
for arg in "$@"; do
|
|
157
|
+
PIPER_CMD="$PIPER_CMD \"$arg\""
|
|
158
|
+
done
|
|
159
|
+
|
|
160
|
+
# Run piper, filtering only the proot warning
|
|
161
|
+
if [ -t 0 ]; then
|
|
162
|
+
# No stdin
|
|
163
|
+
proot-distro login debian -- bash -c "$PIPER_CMD" 2>&1 | grep -v "proot warning"
|
|
164
|
+
else
|
|
165
|
+
# With stdin - need to pass it through
|
|
166
|
+
cat | proot-distro login debian -- bash -c "$PIPER_CMD" 2>&1 | grep -v "proot warning"
|
|
167
|
+
fi
|
|
168
|
+
WRAPPER_EOF
|
|
169
|
+
|
|
170
|
+
chmod +x "$WRAPPER_PATH"
|
|
171
|
+
echo -e " ${GREEN}✓${NC} Piper wrapper created at $WRAPPER_PATH"
|
|
172
|
+
|
|
173
|
+
echo ""
|
|
174
|
+
|
|
175
|
+
# Step 6: Apply Termux-specific fixes
|
|
176
|
+
echo -e "${BLUE}[6/6] Applying Termux-specific fixes...${NC}"
|
|
177
|
+
|
|
178
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
179
|
+
|
|
180
|
+
# Fix audio-processor.sh to use Termux temp directory
|
|
181
|
+
AUDIO_PROCESSOR="$SCRIPT_DIR/audio-processor.sh"
|
|
182
|
+
if [[ -f "$AUDIO_PROCESSOR" ]]; then
|
|
183
|
+
if grep -q 'temp_effects="/tmp/' "$AUDIO_PROCESSOR"; then
|
|
184
|
+
echo " Patching audio-processor.sh for Termux temp directory..."
|
|
185
|
+
sed -i 's|temp_effects="/tmp/|temp_effects="${TMPDIR:-/data/data/com.termux/files/usr/tmp}/|g' "$AUDIO_PROCESSOR"
|
|
186
|
+
sed -i 's|temp_final="/tmp/|temp_final="${TMPDIR:-/data/data/com.termux/files/usr/tmp}/|g' "$AUDIO_PROCESSOR"
|
|
187
|
+
sed -i "s|trap 'rm -f /tmp/|trap 'rm -f \"\${TMPDIR:-/data/data/com.termux/files/usr/tmp}/|g" "$AUDIO_PROCESSOR"
|
|
188
|
+
echo -e " ${GREEN}✓${NC} audio-processor.sh patched"
|
|
189
|
+
else
|
|
190
|
+
echo -e " ${GREEN}✓${NC} audio-processor.sh already patched"
|
|
191
|
+
fi
|
|
192
|
+
fi
|
|
193
|
+
|
|
194
|
+
# Set default voice
|
|
195
|
+
CLAUDE_DIR="$HOME/.claude"
|
|
196
|
+
mkdir -p "$CLAUDE_DIR"
|
|
197
|
+
if [[ ! -f "$CLAUDE_DIR/tts-voice.txt" ]]; then
|
|
198
|
+
echo "$VOICE_MODEL" > "$CLAUDE_DIR/tts-voice.txt"
|
|
199
|
+
echo -e " ${GREEN}✓${NC} Default voice set to $VOICE_MODEL"
|
|
200
|
+
fi
|
|
201
|
+
|
|
202
|
+
# Set provider to piper
|
|
203
|
+
if [[ ! -f "$CLAUDE_DIR/tts-provider.txt" ]]; then
|
|
204
|
+
echo "piper" > "$CLAUDE_DIR/tts-provider.txt"
|
|
205
|
+
echo -e " ${GREEN}✓${NC} TTS provider set to piper"
|
|
206
|
+
fi
|
|
207
|
+
|
|
208
|
+
echo ""
|
|
209
|
+
|
|
210
|
+
# Step 7: Install Clawdbot SSH receiver
|
|
211
|
+
echo -e "${BLUE}[7/7] Installing Clawdbot SSH receiver...${NC}"
|
|
212
|
+
|
|
213
|
+
TERMUX_DIR="$HOME/.termux"
|
|
214
|
+
mkdir -p "$TERMUX_DIR"
|
|
215
|
+
|
|
216
|
+
# Create wrapper script at ~/.termux/agentvibes-play.sh
|
|
217
|
+
# This calls the main receiver in AgentVibes hooks
|
|
218
|
+
cat > "$TERMUX_DIR/agentvibes-play.sh" << 'EOF'
|
|
219
|
+
#!/usr/bin/env bash
|
|
220
|
+
# AgentVibes Clawdbot Receiver Wrapper
|
|
221
|
+
# Installed by AgentVibes Termux installer
|
|
222
|
+
# Forwards to main receiver script in AgentVibes
|
|
223
|
+
|
|
224
|
+
# Find AgentVibes installation
|
|
225
|
+
if [[ -f "$HOME/agentvibes/.claude/hooks/clawdbot-receiver.sh" ]]; then
|
|
226
|
+
exec bash "$HOME/agentvibes/.claude/hooks/clawdbot-receiver.sh" "$@"
|
|
227
|
+
elif [[ -f "$HOME/AgentVibes-dev/.claude/hooks/clawdbot-receiver.sh" ]]; then
|
|
228
|
+
exec bash "$HOME/AgentVibes-dev/.claude/hooks/clawdbot-receiver.sh" "$@"
|
|
229
|
+
else
|
|
230
|
+
echo "❌ AgentVibes clawdbot-receiver.sh not found" >&2
|
|
231
|
+
exit 1
|
|
232
|
+
fi
|
|
233
|
+
EOF
|
|
234
|
+
|
|
235
|
+
chmod +x "$TERMUX_DIR/agentvibes-play.sh"
|
|
236
|
+
echo -e " ${GREEN}✓${NC} Clawdbot receiver installed at ~/.termux/agentvibes-play.sh"
|
|
237
|
+
|
|
238
|
+
# Also create fallback at ~/.agentvibes/play-remote.sh
|
|
239
|
+
AGENTVIBES_DIR="$HOME/.agentvibes"
|
|
240
|
+
mkdir -p "$AGENTVIBES_DIR"
|
|
241
|
+
ln -sf "$TERMUX_DIR/agentvibes-play.sh" "$AGENTVIBES_DIR/play-remote.sh" 2>/dev/null || \
|
|
242
|
+
cp "$TERMUX_DIR/agentvibes-play.sh" "$AGENTVIBES_DIR/play-remote.sh"
|
|
243
|
+
echo -e " ${GREEN}✓${NC} Fallback link created at ~/.agentvibes/play-remote.sh"
|
|
244
|
+
|
|
245
|
+
echo ""
|
|
246
|
+
echo -e "${GREEN}════════════════════════════════════════════════════════════${NC}"
|
|
247
|
+
echo -e "${GREEN} Installation Complete!${NC}"
|
|
248
|
+
echo -e "${GREEN}════════════════════════════════════════════════════════════${NC}"
|
|
249
|
+
echo ""
|
|
250
|
+
echo " To test TTS:"
|
|
251
|
+
echo " echo 'Hello world' | piper -m ~/.claude/piper-voices/en_US-lessac-medium.onnx -f ~/test.wav"
|
|
252
|
+
echo " termux-media-player play ~/test.wav"
|
|
253
|
+
echo ""
|
|
254
|
+
echo " To enable background music:"
|
|
255
|
+
echo " .claude/hooks/background-music-manager.sh on"
|
|
256
|
+
echo ""
|
|
257
|
+
echo " Available background tracks:"
|
|
258
|
+
echo " .claude/hooks/background-music-manager.sh list"
|
|
259
|
+
echo ""
|
|
260
|
+
echo -e "${BLUE}Enjoy AgentVibes on Android! 🎤${NC}"
|
|
261
|
+
echo ""
|