agentvibes 4.0.1 → 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.
Files changed (219) hide show
  1. package/.agentvibes/bmad/bmad-voices.md +69 -69
  2. package/.agentvibes/config.json +12 -0
  3. package/.claude/activation-instructions +54 -54
  4. package/.claude/audio/tracks/README.md +52 -52
  5. package/.claude/commands/agent-vibes/add.md +21 -21
  6. package/.claude/commands/agent-vibes/agent-vibes.md +101 -101
  7. package/.claude/commands/agent-vibes/agent.md +79 -79
  8. package/.claude/commands/agent-vibes/background-music.md +111 -111
  9. package/.claude/commands/agent-vibes/bmad.md +198 -198
  10. package/.claude/commands/agent-vibes/clean.md +18 -18
  11. package/.claude/commands/agent-vibes/cleanup.md +18 -18
  12. package/.claude/commands/agent-vibes/commands.json +145 -145
  13. package/.claude/commands/agent-vibes/effects.md +97 -97
  14. package/.claude/commands/agent-vibes/get.md +9 -9
  15. package/.claude/commands/agent-vibes/hide.md +91 -91
  16. package/.claude/commands/agent-vibes/language.md +23 -23
  17. package/.claude/commands/agent-vibes/learn.md +67 -67
  18. package/.claude/commands/agent-vibes/list.md +13 -13
  19. package/.claude/commands/agent-vibes/mute.md +37 -37
  20. package/.claude/commands/agent-vibes/preview.md +17 -17
  21. package/.claude/commands/agent-vibes/provider.md +68 -68
  22. package/.claude/commands/agent-vibes/replay-target.md +14 -14
  23. package/.claude/commands/agent-vibes/sample.md +12 -12
  24. package/.claude/commands/agent-vibes/set-favorite-voice.md +84 -84
  25. package/.claude/commands/agent-vibes/set-pretext.md +65 -65
  26. package/.claude/commands/agent-vibes/set-speed.md +41 -41
  27. package/.claude/commands/agent-vibes/show.md +84 -84
  28. package/.claude/commands/agent-vibes/switch.md +87 -87
  29. package/.claude/commands/agent-vibes/target-voice.md +26 -26
  30. package/.claude/commands/agent-vibes/target.md +30 -30
  31. package/.claude/commands/agent-vibes/translate.md +68 -68
  32. package/.claude/commands/agent-vibes/unmute.md +45 -45
  33. package/.claude/commands/agent-vibes/verbosity.md +89 -89
  34. package/.claude/commands/agent-vibes/whoami.md +7 -7
  35. package/.claude/commands/agent-vibes-bmad-voices.md +117 -117
  36. package/.claude/commands/agent-vibes-rdp.md +24 -24
  37. package/.claude/config/agentvibes.json +1 -0
  38. package/.claude/config/audio-effects.cfg +3 -2
  39. package/.claude/config/audio-effects.cfg.sample +52 -52
  40. package/.claude/config/background-music-volume.txt +1 -0
  41. package/.claude/config/intro-text.txt +1 -0
  42. package/.claude/config/piper-speech-rate.txt +4 -0
  43. package/.claude/config/piper-target-speech-rate.txt +1 -0
  44. package/.claude/config/reverb-level.txt +1 -0
  45. package/.claude/config/tts-speech-rate.txt +4 -0
  46. package/.claude/config/tts-target-speech-rate.txt +1 -0
  47. package/.claude/docs/TERMUX_SETUP.md +408 -408
  48. package/.claude/github-star-reminder.txt +1 -1
  49. package/.claude/hooks/README-TTS-QUEUE.md +135 -135
  50. package/.claude/hooks/audio-cache-utils.sh +246 -246
  51. package/.claude/hooks/audio-processor.sh +433 -389
  52. package/.claude/hooks/background-music-manager.sh +404 -404
  53. package/.claude/hooks/bmad-speak-enhanced.sh +165 -165
  54. package/.claude/hooks/bmad-speak.sh +269 -112
  55. package/.claude/hooks/bmad-tts-injector.sh +568 -568
  56. package/.claude/hooks/bmad-voice-manager.sh +928 -928
  57. package/.claude/hooks/clawdbot-receiver-SECURE.sh +129 -129
  58. package/.claude/hooks/clawdbot-receiver.sh +107 -107
  59. package/.claude/hooks/clean-audio-cache.sh +22 -22
  60. package/.claude/hooks/cleanup-cache.sh +106 -106
  61. package/.claude/hooks/configure-rdp-mode.sh +137 -137
  62. package/.claude/hooks/download-extra-voices.sh +244 -244
  63. package/.claude/hooks/effects-manager.sh +268 -268
  64. package/.claude/hooks/github-star-reminder.sh +154 -154
  65. package/.claude/hooks/language-manager.sh +362 -362
  66. package/.claude/hooks/learn-manager.sh +492 -492
  67. package/.claude/hooks/macos-voice-manager.sh +205 -205
  68. package/.claude/hooks/migrate-background-music.sh +125 -125
  69. package/.claude/hooks/migrate-to-agentvibes.sh +161 -161
  70. package/.claude/hooks/optimize-background-music.sh +87 -87
  71. package/.claude/hooks/path-resolver.sh +60 -60
  72. package/.claude/hooks/personality-manager.sh +448 -448
  73. package/.claude/hooks/piper-download-voices.sh +225 -225
  74. package/.claude/hooks/piper-installer.sh +292 -292
  75. package/.claude/hooks/piper-multispeaker-registry.sh +171 -171
  76. package/.claude/hooks/piper-voice-manager.sh +24 -3
  77. package/.claude/hooks/play-tts-agentvibes-receiver-for-voiceless-connections.sh +90 -90
  78. package/.claude/hooks/play-tts-enhanced.sh +105 -70
  79. package/.claude/hooks/play-tts-macos.sh +368 -345
  80. package/.claude/hooks/play-tts-piper.sh +679 -578
  81. package/.claude/hooks/play-tts-soprano.sh +356 -320
  82. package/.claude/hooks/play-tts-ssh-remote.sh +167 -88
  83. package/.claude/hooks/play-tts-termux-ssh.sh +169 -169
  84. package/.claude/hooks/play-tts.sh +301 -298
  85. package/.claude/hooks/prepare-release.sh +54 -54
  86. package/.claude/hooks/provider-commands.sh +617 -617
  87. package/.claude/hooks/provider-manager.sh +399 -399
  88. package/.claude/hooks/replay-target-audio.sh +95 -95
  89. package/.claude/hooks/requirements.txt +6 -6
  90. package/.claude/hooks/sentiment-manager.sh +201 -201
  91. package/.claude/hooks/session-start-tts.sh +81 -71
  92. package/.claude/hooks/soprano-gradio-synth.py +139 -139
  93. package/.claude/hooks/speed-manager.sh +291 -291
  94. package/.claude/hooks/stop-tts.sh +84 -0
  95. package/.claude/hooks/termux-installer.sh +261 -261
  96. package/.claude/hooks/translate-manager.sh +341 -341
  97. package/.claude/hooks/translator.py +237 -237
  98. package/.claude/hooks/tts-queue-worker.sh +145 -114
  99. package/.claude/hooks/tts-queue.sh +165 -136
  100. package/.claude/hooks/verbosity-manager.sh +178 -178
  101. package/.claude/hooks/voice-manager.sh +548 -544
  102. package/.claude/hooks-windows/audio-cache-utils.ps1 +119 -119
  103. package/.claude/hooks-windows/background-music-manager.ps1 +348 -0
  104. package/.claude/hooks-windows/clean-audio-cache.ps1 +53 -0
  105. package/.claude/hooks-windows/download-extra-voices.ps1 +185 -0
  106. package/.claude/hooks-windows/effects-manager.ps1 +294 -0
  107. package/.claude/hooks-windows/language-manager.ps1 +193 -0
  108. package/.claude/hooks-windows/learn-manager.ps1 +241 -0
  109. package/.claude/hooks-windows/personality-manager.ps1 +266 -0
  110. package/.claude/hooks-windows/play-tts-piper.ps1 +209 -0
  111. package/.claude/hooks-windows/play-tts-sapi.ps1 +108 -0
  112. package/.claude/hooks-windows/play-tts-soprano.ps1 +159 -158
  113. package/.claude/hooks-windows/play-tts-windows-piper.ps1 +50 -5
  114. package/.claude/hooks-windows/play-tts-windows-sapi.ps1 +108 -108
  115. package/.claude/hooks-windows/play-tts.ps1 +344 -266
  116. package/.claude/hooks-windows/provider-manager.ps1 +29 -10
  117. package/.claude/hooks-windows/session-start-tts.ps1 +124 -124
  118. package/.claude/hooks-windows/soprano-gradio-synth.py +153 -153
  119. package/.claude/hooks-windows/speed-manager.ps1 +166 -0
  120. package/.claude/hooks-windows/verbosity-manager.ps1 +119 -0
  121. package/.claude/hooks-windows/voice-manager-windows.ps1 +92 -8
  122. package/.claude/output-styles/agent-vibes.md +202 -202
  123. package/.claude/personalities/angry.md +14 -14
  124. package/.claude/personalities/annoying.md +14 -14
  125. package/.claude/personalities/crass.md +14 -14
  126. package/.claude/personalities/dramatic.md +14 -14
  127. package/.claude/personalities/dry-humor.md +50 -50
  128. package/.claude/personalities/flirty.md +20 -20
  129. package/.claude/personalities/funny.md +14 -14
  130. package/.claude/personalities/grandpa.md +32 -32
  131. package/.claude/personalities/millennial.md +14 -14
  132. package/.claude/personalities/moody.md +14 -14
  133. package/.claude/personalities/normal.md +16 -16
  134. package/.claude/personalities/pirate.md +14 -14
  135. package/.claude/personalities/poetic.md +14 -14
  136. package/.claude/personalities/professional.md +14 -14
  137. package/.claude/personalities/rapper.md +55 -55
  138. package/.claude/personalities/robot.md +14 -14
  139. package/.claude/personalities/sarcastic.md +38 -38
  140. package/.claude/personalities/sassy.md +14 -14
  141. package/.claude/personalities/surfer-dude.md +14 -14
  142. package/.claude/personalities/zen.md +14 -14
  143. package/.claude/settings.json +15 -15
  144. package/.claude/verbosity.txt +1 -1
  145. package/.clawdbot/README.md +105 -105
  146. package/.clawdbot/skill/SKILL.md +241 -241
  147. package/.mcp.json +12 -0
  148. package/CLAUDE.md +170 -181
  149. package/README.md +2029 -1909
  150. package/RELEASE_NOTES.md +1310 -66
  151. package/WINDOWS-SETUP.md +208 -208
  152. package/bin/agent-vibes +39 -39
  153. package/bin/agentvibes-voice-browser.js +1840 -1826
  154. package/bin/agentvibes.js +48 -2
  155. package/bin/mcp-server.js +121 -121
  156. package/bin/mcp-server.sh +206 -206
  157. package/bin/test-bmad-pr +78 -78
  158. package/mcp-server/QUICK_START.md +203 -203
  159. package/mcp-server/README.md +345 -345
  160. package/mcp-server/WINDOWS_SETUP.md +260 -260
  161. package/mcp-server/docs/troubleshooting-audio.md +313 -313
  162. package/mcp-server/examples/claude_desktop_config.json +11 -11
  163. package/mcp-server/examples/claude_desktop_config_piper.json +9 -9
  164. package/mcp-server/examples/custom_instructions.md +169 -169
  165. package/mcp-server/install-deps.js +130 -130
  166. package/mcp-server/pyproject.toml +52 -52
  167. package/mcp-server/requirements.txt +2 -2
  168. package/mcp-server/server.py +1465 -1417
  169. package/mcp-server/test_server.py +395 -395
  170. package/mcp-server/test_windows_script_parity.py +336 -0
  171. package/package.json +110 -112
  172. package/setup-windows.ps1 +815 -815
  173. package/src/bmad-detector.js +71 -71
  174. package/src/cli/list-personalities.js +110 -110
  175. package/src/cli/list-voices.js +114 -114
  176. package/src/commands/bmad-voices.js +394 -394
  177. package/src/commands/install-mcp.js +476 -476
  178. package/src/console/app.js +824 -806
  179. package/src/console/audio-env.js +20 -1
  180. package/src/console/brand-colors.js +13 -13
  181. package/src/console/constants/personalities.js +44 -0
  182. package/src/console/footer-config.js +50 -46
  183. package/src/console/modals/modal-overlay.js +247 -247
  184. package/src/console/navigation.js +62 -61
  185. package/src/console/tabs/agents-tab.js +1684 -369
  186. package/src/console/tabs/help-tab.js +261 -261
  187. package/src/console/tabs/install-tab.js +1007 -991
  188. package/src/console/tabs/music-tab.js +22 -8
  189. package/src/console/tabs/placeholder-tab.js +53 -46
  190. package/src/console/tabs/readme-tab.js +267 -267
  191. package/src/console/tabs/receiver-tab.js +1472 -0
  192. package/src/console/tabs/settings-tab.js +185 -402
  193. package/src/console/tabs/voices-tab.js +100 -21
  194. package/src/console/widgets/destroy-list.js +25 -0
  195. package/src/console/widgets/format-utils.js +89 -0
  196. package/src/console/widgets/notice.js +55 -0
  197. package/src/console/widgets/personality-picker.js +185 -0
  198. package/src/console/widgets/reverb-picker.js +94 -0
  199. package/src/console/widgets/track-picker.js +285 -0
  200. package/src/installer/music-file-input.js +304 -304
  201. package/src/installer.js +5882 -5777
  202. package/src/services/agent-voice-store.js +423 -163
  203. package/src/services/config-service.js +264 -264
  204. package/src/services/navigation-service.js +123 -123
  205. package/src/services/provider-service.js +132 -132
  206. package/src/services/verbosity-service.js +157 -157
  207. package/src/utils/audio-duration-validator.js +298 -298
  208. package/src/utils/audio-format-validator.js +277 -277
  209. package/src/utils/dependency-checker.js +469 -466
  210. package/src/utils/file-ownership-verifier.js +358 -358
  211. package/src/utils/list-formatter.js +194 -194
  212. package/src/utils/music-file-validator.js +285 -275
  213. package/src/utils/preview-list-prompt.js +136 -136
  214. package/src/utils/provider-validator.js +96 -12
  215. package/src/utils/secure-music-storage.js +412 -412
  216. package/templates/agentvibes-receiver.sh +482 -162
  217. package/templates/audio/welcome-music.mp3 +0 -0
  218. package/voice-assignments.json +8244 -8244
  219. 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 ""