agentvibes 5.12.0-alpha.0 → 5.13.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 (129) hide show
  1. package/.agentvibes/config.json +15 -1
  2. package/.agentvibes/install-manifest.json +342 -0
  3. package/.claude/activation-instructions +54 -54
  4. package/.claude/commands/agent-vibes/commands.json +0 -20
  5. package/.claude/commands/agent-vibes/unmute.md +6 -2
  6. package/.claude/commands/agent-vibes-bmad-voices.md +117 -117
  7. package/.claude/commands/agent-vibes-rdp.md +24 -24
  8. package/.claude/config/audio-effects.cfg +6 -6
  9. package/.claude/config/audio-effects.cfg.bak-kokoro +7 -0
  10. package/.claude/config/background-music-enabled.txt +1 -1
  11. package/.claude/config/background-music-position.txt +27 -0
  12. package/.claude/config/background-music-volume.txt +1 -0
  13. package/.claude/config/background-music.cfg +1 -0
  14. package/.claude/config/background-music.txt +1 -0
  15. package/.claude/config/language.txt +1 -0
  16. package/.claude/config/personality.txt +1 -0
  17. package/.claude/config/tts-speech-rate.txt +1 -0
  18. package/.claude/config/tts-verbosity.txt +1 -0
  19. package/.claude/docs/TERMUX_SETUP.md +408 -408
  20. package/.claude/github-star-reminder.txt +1 -1
  21. package/.claude/hooks/agentvibes-session-id.sh +69 -0
  22. package/.claude/hooks/bmad-party-speak.sh +20 -4
  23. package/.claude/hooks/bmad-speak.sh +60 -2
  24. package/.claude/hooks/bmad-tts-injector.sh +20 -1
  25. package/.claude/hooks/bmad-voice-manager.sh +25 -3
  26. package/.claude/hooks/clawdbot-receiver-SECURE.sh +21 -2
  27. package/.claude/hooks/clawdbot-receiver.sh +19 -1
  28. package/.claude/hooks/elevenlabs-voices.sh +62 -0
  29. package/.claude/hooks/kokoro-installer.sh +20 -10
  30. package/.claude/hooks/language-manager.sh +10 -3
  31. package/.claude/hooks/party-set-room.sh +71 -0
  32. package/.claude/hooks/party-stage-roster.py +328 -0
  33. package/.claude/hooks/personality-manager.sh +19 -2
  34. package/.claude/hooks/piper-voice-manager.sh +3 -2
  35. package/.claude/hooks/play-tts-agentvibes-receiver-for-voiceless-connections.sh +24 -5
  36. package/.claude/hooks/play-tts-elevenlabs.sh +38 -118
  37. package/.claude/hooks/play-tts-kokoro.sh +33 -6
  38. package/.claude/hooks/play-tts-soprano.sh +3 -2
  39. package/.claude/hooks/play-tts-ssh-remote.sh +72 -27
  40. package/.claude/hooks/play-tts-termux-ssh.sh +5 -4
  41. package/.claude/hooks/play-tts.sh +86 -69
  42. package/.claude/hooks/provider-catalog.json +352 -0
  43. package/.claude/hooks/provider-catalog.sh +161 -0
  44. package/.claude/hooks/provider-commands.sh +2 -1
  45. package/.claude/hooks/provider-manager.sh +47 -9
  46. package/.claude/hooks/python-resolver.sh +117 -0
  47. package/.claude/hooks/session-id.sh +56 -0
  48. package/.claude/hooks/session-start-tts.sh +39 -0
  49. package/.claude/hooks/speed-manager.sh +1 -1
  50. package/.claude/hooks/translate-manager.sh +3 -2
  51. package/.claude/hooks/translator.py +1 -1
  52. package/.claude/hooks/voice-manager.sh +242 -10
  53. package/.claude/hooks-windows/audio-cache-utils.ps1.user.bak +119 -0
  54. package/.claude/hooks-windows/language-manager.ps1 +7 -1
  55. package/.claude/hooks-windows/personality-manager.ps1 +16 -1
  56. package/.claude/hooks-windows/play-tts-kokoro.ps1 +20 -4
  57. package/.claude/hooks-windows/play-tts.ps1 +32 -3
  58. package/.claude/hooks-windows/provider-catalog.ps1 +140 -0
  59. package/.claude/hooks-windows/provider-manager.ps1 +63 -8
  60. package/.claude/hooks-windows/soprano-gradio-synth.py.user.bak +153 -0
  61. package/.claude/hooks-windows/tts-watcher.ps1 +84 -8
  62. package/.claude/hooks-windows/voice-manager-windows.ps1 +49 -0
  63. package/.claude/piper-voices-dir.txt +1 -0
  64. package/.clawdbot/README.md +105 -105
  65. package/.mcp.json +15 -0
  66. package/LICENSE +190 -190
  67. package/README.md +20 -6
  68. package/RELEASE_NOTES.md +81 -0
  69. package/WINDOWS-SETUP.md +208 -208
  70. package/bin/agent-vibes +39 -39
  71. package/bin/mcp-server.js +121 -121
  72. package/bin/test-bmad-pr +78 -78
  73. package/mcp-server/QUICK_START.md +203 -203
  74. package/mcp-server/README.md +345 -345
  75. package/mcp-server/examples/claude_desktop_config.json +11 -11
  76. package/mcp-server/examples/claude_desktop_config_piper.json +9 -9
  77. package/mcp-server/examples/custom_instructions.md +169 -169
  78. package/mcp-server/pyproject.toml +52 -52
  79. package/mcp-server/requirements.txt +2 -2
  80. package/mcp-server/server.py +146 -49
  81. package/mcp-server/test_mcp_correctness.py +20 -2
  82. package/mcp-server/test_server.py +395 -395
  83. package/mcp-server/test_windows_script_parity.py +0 -2
  84. package/package.json +1 -1
  85. package/src/cli/list-personalities.js +110 -110
  86. package/src/cli/list-voices.js +115 -11
  87. package/src/commands/bmad-voices.js +394 -394
  88. package/src/console/app.js +1 -9
  89. package/src/console/bling.js +71 -0
  90. package/src/console/brand-colors.js +13 -13
  91. package/src/console/constants/personalities.js +44 -44
  92. package/src/console/footer-config.js +0 -4
  93. package/src/console/music-preview.js +79 -0
  94. package/src/console/navigation.js +0 -1
  95. package/src/console/tabs/agents-tab.js +14 -2
  96. package/src/console/tabs/help-tab.js +314 -314
  97. package/src/console/tabs/music-tab.js +81 -5
  98. package/src/console/tabs/placeholder-tab.js +0 -2
  99. package/src/console/tabs/readme-tab.js +272 -272
  100. package/src/console/tabs/settings-tab.js +207 -14
  101. package/src/console/tabs/setup-tab.js +39 -36
  102. package/src/console/tabs/voices-tab.js +102 -23
  103. package/src/console/widgets/destroy-list.js +25 -25
  104. package/src/console/widgets/notice.js +55 -55
  105. package/src/console/widgets/track-picker.js +82 -0
  106. package/src/installer/language-screen.js +31 -31
  107. package/src/installer/music-file-input.js +304 -304
  108. package/src/installer.js +124 -10
  109. package/src/services/language-service.js +47 -47
  110. package/src/services/navigation-service.js +1 -1
  111. package/src/services/provider-catalog.js +412 -0
  112. package/src/services/provider-voice-catalog.js +52 -73
  113. package/src/services/tts-engine-service.js +29 -0
  114. package/src/utils/audio-format-validator.js +277 -277
  115. package/src/utils/dependency-checker.js +469 -469
  116. package/src/utils/file-ownership-verifier.js +358 -358
  117. package/src/utils/music-file-validator.js +285 -285
  118. package/src/utils/preview-list-prompt.js +144 -144
  119. package/src/utils/provider-validator.js +62 -12
  120. package/src/utils/secure-music-storage.js +412 -412
  121. package/voice-assignments.json +8244 -8244
  122. package/.claude/commands/agent-vibes/language.md +0 -23
  123. package/.claude/commands/agent-vibes/learn.md +0 -67
  124. package/.claude/commands/agent-vibes/replay-target.md +0 -14
  125. package/.claude/commands/agent-vibes/target-voice.md +0 -26
  126. package/.claude/commands/agent-vibes/target.md +0 -30
  127. package/.claude/hooks/learn-manager.sh +0 -492
  128. package/.claude/hooks/replay-target-audio.sh +0 -95
  129. package/.claude/hooks-windows/learn-manager.ps1 +0 -241
@@ -1,95 +0,0 @@
1
- #!/usr/bin/env bash
2
- #
3
- # File: .claude/hooks/replay-target-audio.sh
4
- #
5
- # AgentVibes - Finally, your AI Agents can Talk Back! Text-to-Speech WITH personality for AI Assistants!
6
- # Website: https://agentvibes.org
7
- # Repository: https://github.com/paulpreibisch/AgentVibes
8
- #
9
- # Co-created by Paul Preibisch with Claude AI
10
- # Copyright (c) 2025 Paul Preibisch
11
- #
12
- # Licensed under the Apache License, Version 2.0 (the "License");
13
- # you may not use this file except in compliance with the License.
14
- # You may obtain a copy of the License at
15
- #
16
- # http://www.apache.org/licenses/LICENSE-2.0
17
- #
18
- # Unless required by applicable law or agreed to in writing, software
19
- # distributed under the License is distributed on an "AS IS" BASIS,
20
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21
- # See the License for the specific language governing permissions and
22
- # limitations under the License.
23
- #
24
- # DISCLAIMER: This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
25
- # express or implied, including but not limited to the warranties of
26
- # merchantability, fitness for a particular purpose and noninfringement.
27
- # In no event shall the authors or copyright holders be liable for any claim,
28
- # damages or other liability, whether in an action of contract, tort or
29
- # otherwise, arising from, out of or in connection with the software or the
30
- # use or other dealings in the software.
31
- #
32
- # ---
33
- #
34
- # @fileoverview Replay Last Target Language Audio
35
- # @context Replays the most recent target language TTS for language learning
36
- # @architecture Simple audio replay with lock mechanism for sequential playback
37
- # @dependencies ffprobe, paplay/aplay/mpg123/mpv, .claude/last-target-audio.txt
38
- # @entrypoints Called by /agent-vibes:replay-target slash command
39
- # @patterns Sequential audio playback with lock file, duration-based lock release
40
- # @related play-tts-piper.sh, play-tts-macos.sh, learn-manager.sh
41
- #
42
-
43
- # Fix locale warnings
44
- export LC_ALL=C
45
-
46
- TARGET_AUDIO_FILE="${CLAUDE_PROJECT_DIR:-.}/.claude/last-target-audio.txt"
47
-
48
- # Check if target audio tracking file exists
49
- if [ ! -f "$TARGET_AUDIO_FILE" ]; then
50
- echo "❌ No target language audio found."
51
- echo " Language learning mode may not be active."
52
- echo " Activate with: /agent-vibes:learn"
53
- exit 1
54
- fi
55
-
56
- # Read last target audio file path
57
- LAST_AUDIO=$(cat "$TARGET_AUDIO_FILE")
58
-
59
- # Verify audio file exists
60
- if [ ! -f "$LAST_AUDIO" ]; then
61
- echo "❌ Audio file not found: $LAST_AUDIO"
62
- echo " The file may have been deleted or moved."
63
- exit 1
64
- fi
65
-
66
- echo "🔁 Replaying target language audio..."
67
-
68
- # Use lock file for sequential playback
69
- LOCK_FILE="/tmp/agentvibes-audio.lock"
70
-
71
- # Wait for any current audio to finish (max 30 seconds)
72
- for i in {1..60}; do
73
- if [ ! -f "$LOCK_FILE" ]; then
74
- break
75
- fi
76
- sleep 0.5
77
- done
78
-
79
- # Create lock
80
- touch "$LOCK_FILE"
81
-
82
- # Get audio duration for proper lock timing
83
- DURATION=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$LAST_AUDIO" 2>/dev/null)
84
- DURATION=${DURATION%.*} # Round to integer
85
- DURATION=${DURATION:-1} # Default to 1 second if detection fails
86
-
87
- # Play audio
88
- (paplay "$LAST_AUDIO" || aplay "$LAST_AUDIO" || mpg123 "$LAST_AUDIO" || mpv "$LAST_AUDIO") >/dev/null 2>&1 &
89
- PLAYER_PID=$!
90
-
91
- # Wait for audio to finish, then release lock
92
- (sleep $DURATION; rm -f "$LOCK_FILE") &
93
- disown
94
-
95
- echo "✅ Replay complete: $(basename "$LAST_AUDIO")"
@@ -1,241 +0,0 @@
1
- #
2
- # File: .claude/hooks-windows/learn-manager.ps1
3
- #
4
- # AgentVibes - Finally, your AI Agents can Talk Back!
5
- # Website: https://agentvibes.org
6
- # Copyright (c) 2025 Paul Preibisch
7
- # Licensed under the Apache License, Version 2.0
8
-
9
- param(
10
- [Parameter(Position=0)]
11
- [string]$Command = "help",
12
- [Parameter(Position=1)]
13
- [string]$Arg1 = ""
14
- )
15
-
16
- $ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
17
- $ClaudeDir = Split-Path -Parent $ScriptDir
18
-
19
- # Determine project directory
20
- if (Test-Path (Join-Path $PWD ".claude")) {
21
- $ProjectDir = $PWD.Path
22
- } else {
23
- $ProjectDir = Split-Path -Parent $ClaudeDir
24
- }
25
-
26
- $ProjectClaude = Join-Path $ProjectDir ".claude"
27
- $GlobalClaude = Join-Path $env:USERPROFILE ".claude"
28
-
29
- # Config files (project-local first)
30
- $MainLangFile = Join-Path $ProjectClaude "tts-main-language.txt"
31
- $TargetLangFile = Join-Path $ProjectClaude "tts-target-language.txt"
32
- $TargetVoiceFile = Join-Path $ProjectClaude "tts-target-voice.txt"
33
- $LearnModeFile = Join-Path $ProjectClaude "tts-learn-mode.txt"
34
-
35
- # Global fallbacks
36
- $GlobalMainLangFile = Join-Path $GlobalClaude "tts-main-language.txt"
37
- $GlobalTargetLangFile = Join-Path $GlobalClaude "tts-target-language.txt"
38
- $GlobalTargetVoiceFile = Join-Path $GlobalClaude "tts-target-voice.txt"
39
- $GlobalLearnModeFile = Join-Path $GlobalClaude "tts-learn-mode.txt"
40
-
41
- function Get-MainLanguage {
42
- if (Test-Path $MainLangFile) { return (Get-Content $MainLangFile -Raw).Trim() }
43
- if (Test-Path $GlobalMainLangFile) { return (Get-Content $GlobalMainLangFile -Raw).Trim() }
44
- return "english"
45
- }
46
-
47
- function Get-TargetLanguage {
48
- if (Test-Path $TargetLangFile) { return (Get-Content $TargetLangFile -Raw).Trim() }
49
- if (Test-Path $GlobalTargetLangFile) { return (Get-Content $GlobalTargetLangFile -Raw).Trim() }
50
- return ""
51
- }
52
-
53
- function Get-TargetVoice {
54
- if (Test-Path $TargetVoiceFile) { return (Get-Content $TargetVoiceFile -Raw).Trim() }
55
- if (Test-Path $GlobalTargetVoiceFile) { return (Get-Content $GlobalTargetVoiceFile -Raw).Trim() }
56
- return ""
57
- }
58
-
59
- function Test-LearnModeEnabled {
60
- if (Test-Path $LearnModeFile) { return (Get-Content $LearnModeFile -Raw).Trim() -eq "ON" }
61
- if (Test-Path $GlobalLearnModeFile) { return (Get-Content $GlobalLearnModeFile -Raw).Trim() -eq "ON" }
62
- return $false
63
- }
64
-
65
- function Get-GreetingForLanguage {
66
- param([string]$Language)
67
- switch ($Language.ToLower()) {
68
- "spanish" { return "Hola! Soy tu profesor de espanol. Vamos a aprender juntos!" }
69
- "french" { return "Bonjour! Je suis votre professeur de francais. Apprenons ensemble!" }
70
- "german" { return "Hallo! Ich bin dein Deutschlehrer. Lass uns zusammen lernen!" }
71
- "italian" { return "Ciao! Sono il tuo insegnante di italiano. Impariamo insieme!" }
72
- "portuguese" { return "Ola! Sou seu professor de portugues. Vamos aprender juntos!" }
73
- "chinese" { return "Hello! I am your Chinese language teacher. Let us learn together!" }
74
- "japanese" { return "Hello! I am your Japanese language teacher. Let us learn together!" }
75
- "korean" { return "Hello! I am your Korean language teacher. Let us learn together!" }
76
- "russian" { return "Hello! I am your Russian language teacher. Let us learn together!" }
77
- "dutch" { return "Hallo! Ik ben je Nederlandse leraar. Laten we samen leren!" }
78
- "polish" { return "Czesc! Jestem twoim nauczycielem polskiego. Uczmy sie razem!" }
79
- "turkish" { return "Merhaba! Ben Turkce ogretmeninizim. Birlikte ogrenelim!" }
80
- "swedish" { return "Hej! Jag ar din svenskalarare. Lat oss lara tillsammans!" }
81
- default { return "Hello! I am your language teacher. Let us learn together!" }
82
- }
83
- }
84
-
85
- function Get-RecommendedVoice {
86
- param([string]$Language)
87
- # Try language-manager
88
- $langManager = Join-Path $ScriptDir "language-manager.ps1"
89
- if (Test-Path $langManager) {
90
- $voice = & powershell -NoProfile -ExecutionPolicy Bypass -File $langManager voice-for-language $Language 2>$null
91
- if ($voice) { return $voice.Trim() }
92
- }
93
- return ""
94
- }
95
-
96
- function Show-Status {
97
- $mainLang = Get-MainLanguage
98
- $targetLang = Get-TargetLanguage
99
- $targetVoice = Get-TargetVoice
100
- $learnMode = if (Test-LearnModeEnabled) { "ON" } else { "OFF" }
101
-
102
- Write-Output "-----------------------------------------------"
103
- Write-Output " Language Learning Mode Status"
104
- Write-Output "-----------------------------------------------"
105
- Write-Output ""
106
- Write-Output " Learning Mode: $learnMode"
107
- Write-Output " Main Language: $mainLang"
108
- Write-Output " Target Language: $(if ($targetLang) { $targetLang } else { '(not set)' })"
109
- Write-Output " Target Voice: $(if ($targetVoice) { $targetVoice } else { '(not set)' })"
110
- Write-Output ""
111
-
112
- if ($learnMode -eq "ON") {
113
- if (-not $targetLang) {
114
- Write-Output " Please set a target language: /agent-vibes:target <language>"
115
- }
116
- if (-not $targetVoice) {
117
- Write-Output " Please set a target voice: /agent-vibes:target-voice <voice>"
118
- }
119
- if ($targetLang -and $targetVoice) {
120
- Write-Output " All set! TTS will speak in both languages."
121
- Write-Output ""
122
- Write-Output " How it works:"
123
- Write-Output " 1. First: Speak in $mainLang (your current voice)"
124
- Write-Output " 2. Then: Speak in $targetLang ($targetVoice voice)"
125
- }
126
- } else {
127
- Write-Output " Enable learning mode with: /agent-vibes:learn"
128
- }
129
-
130
- Write-Output ""
131
- Write-Output "-----------------------------------------------"
132
- }
133
-
134
- # Ensure project .claude exists
135
- if (-not (Test-Path $ProjectClaude)) { New-Item -ItemType Directory -Path $ProjectClaude -Force | Out-Null }
136
-
137
- switch ($Command) {
138
- "enable" {
139
- Set-Content -Path $LearnModeFile -Value "ON" -NoNewline
140
- Write-Output "Language learning mode: ENABLED"
141
- Write-Output ""
142
-
143
- # Auto-set target voice if target language exists but voice doesn't
144
- $targetLang = Get-TargetLanguage
145
- $targetVoice = Get-TargetVoice
146
-
147
- if ($targetLang -and -not $targetVoice) {
148
- Write-Output "Auto-configuring voice for $targetLang..."
149
- $recommended = Get-RecommendedVoice $targetLang
150
- if ($recommended) {
151
- Set-Content -Path $TargetVoiceFile -Value $recommended -NoNewline
152
- $targetVoice = $recommended
153
- Write-Output "Target voice automatically set to: $recommended"
154
- Write-Output ""
155
- }
156
- }
157
-
158
- Show-Status
159
-
160
- # Greet in target language
161
- if ($targetLang -and $targetVoice) {
162
- $greeting = Get-GreetingForLanguage $targetLang
163
- Write-Output ""
164
- Write-Output "Your language teacher says: $greeting"
165
- }
166
- }
167
-
168
- "disable" {
169
- Set-Content -Path $LearnModeFile -Value "OFF" -NoNewline
170
- Write-Output "Language learning mode: DISABLED"
171
- }
172
-
173
- "status" {
174
- Show-Status
175
- }
176
-
177
- "is-enabled" {
178
- if (Test-LearnModeEnabled) {
179
- Write-Output "ON"
180
- exit 0
181
- } else {
182
- Write-Output "OFF"
183
- exit 1
184
- }
185
- }
186
-
187
- "get-main-language" {
188
- Write-Output (Get-MainLanguage)
189
- }
190
-
191
- "set-main-language" {
192
- if (-not $Arg1) {
193
- Write-Output "Usage: learn-manager.ps1 set-main-language <language>"
194
- exit 1
195
- }
196
- Set-Content -Path $MainLangFile -Value $Arg1 -NoNewline
197
- Write-Output "Main language set to: $Arg1"
198
- }
199
-
200
- "get-target-language" {
201
- Write-Output (Get-TargetLanguage)
202
- }
203
-
204
- "set-target-language" {
205
- if (-not $Arg1) {
206
- Write-Output "Usage: learn-manager.ps1 set-target-language <language>"
207
- exit 1
208
- }
209
- Set-Content -Path $TargetLangFile -Value $Arg1 -NoNewline
210
- Write-Output "Target language set to: $Arg1"
211
-
212
- # Auto-set recommended voice
213
- $recommended = Get-RecommendedVoice $Arg1
214
- if ($recommended) {
215
- Set-Content -Path $TargetVoiceFile -Value $recommended -NoNewline
216
- Write-Output "Target voice automatically set to: $recommended"
217
-
218
- $greeting = Get-GreetingForLanguage $Arg1
219
- Write-Output ""
220
- Write-Output "Your language teacher says: $greeting"
221
- }
222
- }
223
-
224
- "get-target-voice" {
225
- Write-Output (Get-TargetVoice)
226
- }
227
-
228
- "set-target-voice" {
229
- if (-not $Arg1) {
230
- Write-Output "Usage: learn-manager.ps1 set-target-voice <voice>"
231
- exit 1
232
- }
233
- Set-Content -Path $TargetVoiceFile -Value $Arg1 -NoNewline
234
- Write-Output "Target voice set to: $Arg1"
235
- }
236
-
237
- default {
238
- Write-Output "Usage: learn-manager.ps1 {enable|disable|status|is-enabled|get-main-language|set-main-language|get-target-language|set-target-language|get-target-voice|set-target-voice}"
239
- exit 1
240
- }
241
- }