agentvibes 5.3.0 → 5.5.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 (222) hide show
  1. package/.agentvibes/LITE-MODE.md +236 -0
  2. package/.agentvibes/README.md +136 -0
  3. package/.agentvibes/backup/session-start-tts.sh.20251210_212814 +141 -0
  4. package/.agentvibes/backups/agents/analyst_20260204_144958.md +78 -0
  5. package/.agentvibes/backups/agents/architect_20260204_144958.md +72 -0
  6. package/.agentvibes/backups/agents/dev_20260204_144958.md +74 -0
  7. package/.agentvibes/backups/agents/pm_20260204_144958.md +72 -0
  8. package/.agentvibes/backups/agents/quick-flow-solo-dev_20260204_144958.md +64 -0
  9. package/.agentvibes/backups/agents/sm_20260204_144958.md +87 -0
  10. package/.agentvibes/backups/agents/tea_20260204_144958.md +79 -0
  11. package/.agentvibes/backups/agents/tech-writer_20260204_144958.md +82 -0
  12. package/.agentvibes/backups/agents/ux-designer_20260204_144958.md +80 -0
  13. package/.agentvibes/bmad/bmad-voices.md +69 -69
  14. package/.agentvibes/config/README-personality-defaults.md +162 -0
  15. package/.agentvibes/config/mode.txt +1 -0
  16. package/.agentvibes/config/personality-voice-defaults.default.json +21 -0
  17. package/.agentvibes/config/save-audio.txt +1 -0
  18. package/.agentvibes/config/voice-metadata.json +160 -0
  19. package/.agentvibes/config.json +24 -15
  20. package/.agentvibes/hooks/help.sh +191 -0
  21. package/.agentvibes/hooks/post-tool-use-lite.sh +111 -0
  22. package/.agentvibes/hooks/save-audio-manager.sh +162 -0
  23. package/.agentvibes/hooks/session-start-full-optimized.sh +102 -0
  24. package/.agentvibes/hooks/session-start-full.sh +142 -0
  25. package/.agentvibes/hooks/session-start-lite-v2.sh +34 -0
  26. package/.agentvibes/hooks/session-start-lite.sh +29 -0
  27. package/.agentvibes/hooks/stop-lite.sh +115 -0
  28. package/.agentvibes/hooks/switch-mode.sh +215 -0
  29. package/.agentvibes/output-styles/audio-summary.md +30 -0
  30. package/.claude/activation-instructions +54 -54
  31. package/.claude/audio/voice-samples/piper/alan.wav +0 -0
  32. package/.claude/audio/voice-samples/piper/amy.wav +0 -0
  33. package/.claude/audio/voice-samples/piper/charlotte.wav +0 -0
  34. package/.claude/audio/voice-samples/piper/joe.wav +0 -0
  35. package/.claude/audio/voice-samples/piper/john.wav +0 -0
  36. package/.claude/audio/voice-samples/piper/katherine.wav +0 -0
  37. package/.claude/audio/voice-samples/piper/kristin.wav +0 -0
  38. package/.claude/audio/voice-samples/piper/linda.wav +0 -0
  39. package/.claude/audio/voice-samples/piper/marcus.wav +0 -0
  40. package/.claude/audio/voice-samples/piper/ryan.wav +0 -0
  41. package/.claude/commands/agent-vibes/add.md +21 -21
  42. package/.claude/commands/agent-vibes/agent-vibes.md +101 -101
  43. package/.claude/commands/agent-vibes/agent.md +79 -79
  44. package/.claude/commands/agent-vibes/background-music.md +111 -111
  45. package/.claude/commands/agent-vibes/bmad.md +198 -198
  46. package/.claude/commands/agent-vibes/clean.md +18 -18
  47. package/.claude/commands/agent-vibes/cleanup.md +18 -18
  48. package/.claude/commands/agent-vibes/commands.json +145 -145
  49. package/.claude/commands/agent-vibes/effects.md +97 -97
  50. package/.claude/commands/agent-vibes/get.md +9 -9
  51. package/.claude/commands/agent-vibes/hide.md +91 -91
  52. package/.claude/commands/agent-vibes/language.md +23 -23
  53. package/.claude/commands/agent-vibes/learn.md +67 -67
  54. package/.claude/commands/agent-vibes/list.md +13 -13
  55. package/.claude/commands/agent-vibes/mute.md +37 -37
  56. package/.claude/commands/agent-vibes/preview.md +17 -17
  57. package/.claude/commands/agent-vibes/provider.md +68 -68
  58. package/.claude/commands/agent-vibes/replay-target.md +14 -14
  59. package/.claude/commands/agent-vibes/sample.md +12 -12
  60. package/.claude/commands/agent-vibes/set-favorite-voice.md +84 -84
  61. package/.claude/commands/agent-vibes/set-pretext.md +65 -65
  62. package/.claude/commands/agent-vibes/set-speed.md +41 -41
  63. package/.claude/commands/agent-vibes/show.md +84 -84
  64. package/.claude/commands/agent-vibes/switch.md +87 -87
  65. package/.claude/commands/agent-vibes/target-voice.md +26 -26
  66. package/.claude/commands/agent-vibes/target.md +30 -30
  67. package/.claude/commands/agent-vibes/translate.md +68 -68
  68. package/.claude/commands/agent-vibes/unmute.md +45 -45
  69. package/.claude/commands/agent-vibes/whoami.md +7 -7
  70. package/.claude/commands/agent-vibes-bmad-voices.md +117 -117
  71. package/.claude/commands/agent-vibes-rdp.md +24 -24
  72. package/.claude/config/audio-effects.cfg +16 -11
  73. package/.claude/config/audio-effects.cfg.sample +52 -52
  74. package/.claude/config/background-music-position.txt +27 -0
  75. package/.claude/config/background-music-volume.txt +1 -1
  76. package/.claude/config/background-music.cfg +1 -0
  77. package/.claude/config/background-music.txt +1 -0
  78. package/.claude/config/tts-speech-rate.txt +1 -4
  79. package/.claude/config/tts-verbosity.txt +1 -0
  80. package/.claude/docs/TERMUX_SETUP.md +408 -408
  81. package/.claude/github-star-reminder.txt +1 -1
  82. package/.claude/hooks/README-TTS-QUEUE.md +135 -135
  83. package/.claude/hooks/audio-cache-utils.sh +0 -0
  84. package/.claude/hooks/audio-processor.sh +60 -14
  85. package/.claude/hooks/background-music-manager.sh +0 -0
  86. package/.claude/hooks/bmad-party-manager.sh +225 -0
  87. package/.claude/hooks/bmad-party-speak.sh +0 -0
  88. package/.claude/hooks/bmad-speak-enhanced.sh +0 -0
  89. package/.claude/hooks/bmad-speak.sh +12 -15
  90. package/.claude/hooks/bmad-tts-injector.sh +0 -0
  91. package/.claude/hooks/bmad-voice-manager.sh +0 -0
  92. package/.claude/hooks/clawdbot-receiver-SECURE.sh +25 -23
  93. package/.claude/hooks/clawdbot-receiver.sh +4 -28
  94. package/.claude/hooks/clean-audio-cache.sh +0 -0
  95. package/.claude/hooks/cleanup-cache.sh +0 -0
  96. package/.claude/hooks/configure-rdp-mode.sh +0 -0
  97. package/.claude/hooks/download-extra-voices.sh +0 -0
  98. package/.claude/hooks/effects-manager.sh +0 -0
  99. package/.claude/hooks/github-star-reminder.sh +0 -0
  100. package/.claude/hooks/language-manager.sh +0 -0
  101. package/.claude/hooks/learn-manager.sh +0 -0
  102. package/.claude/hooks/macos-voice-manager.sh +0 -0
  103. package/.claude/hooks/migrate-background-music.sh +0 -0
  104. package/.claude/hooks/migrate-to-agentvibes.sh +0 -0
  105. package/.claude/hooks/optimize-background-music.sh +0 -0
  106. package/.claude/hooks/personality-manager.sh +0 -0
  107. package/.claude/hooks/piper-download-voices.sh +0 -0
  108. package/.claude/hooks/piper-installer.sh +1 -1
  109. package/.claude/hooks/piper-multispeaker-registry.sh +0 -0
  110. package/.claude/hooks/piper-voice-manager.sh +0 -0
  111. package/.claude/hooks/play-tts-enhanced.sh +0 -0
  112. package/.claude/hooks/play-tts-macos.sh +6 -12
  113. package/.claude/hooks/play-tts-piper.sh +52 -81
  114. package/.claude/hooks/play-tts-soprano.sh +9 -43
  115. package/.claude/hooks/play-tts-ssh-remote.sh +43 -215
  116. package/.claude/hooks/play-tts-termux-ssh.sh +0 -0
  117. package/.claude/hooks/play-tts.sh +41 -20
  118. package/.claude/hooks/post-response.sh +41 -0
  119. package/.claude/hooks/prepare-release.sh +0 -0
  120. package/.claude/hooks/provider-commands.sh +0 -0
  121. package/.claude/hooks/provider-manager.sh +0 -0
  122. package/.claude/hooks/replay-target-audio.sh +0 -0
  123. package/.claude/hooks/requirements.txt +6 -6
  124. package/.claude/hooks/sentiment-manager.sh +0 -0
  125. package/.claude/hooks/session-start-tts.sh +56 -39
  126. package/.claude/hooks/soprano-gradio-synth.py +139 -139
  127. package/.claude/hooks/speed-manager.sh +0 -0
  128. package/.claude/hooks/stop.sh +63 -0
  129. package/.claude/hooks/termux-installer.sh +0 -0
  130. package/.claude/hooks/translate-manager.sh +0 -0
  131. package/.claude/hooks/translator.py +237 -237
  132. package/.claude/hooks/tts-queue-worker.sh +0 -0
  133. package/.claude/hooks/tts-queue.sh +0 -0
  134. package/.claude/hooks/verbosity-manager.sh +0 -0
  135. package/.claude/hooks/voice-manager.sh +26 -4
  136. package/.claude/hooks-windows/audio-cache-utils.ps1 +119 -119
  137. package/.claude/hooks-windows/bmad-party-speak.ps1 +278 -278
  138. package/.claude/hooks-windows/bmad-speak.ps1 +264 -264
  139. package/.claude/hooks-windows/clean-audio-cache.ps1 +53 -53
  140. package/.claude/hooks-windows/effects-manager.ps1 +294 -294
  141. package/.claude/hooks-windows/language-manager.ps1 +193 -193
  142. package/.claude/hooks-windows/learn-manager.ps1 +241 -241
  143. package/.claude/hooks-windows/personality-manager.ps1 +266 -266
  144. package/.claude/hooks-windows/play-tts-soprano.ps1 +5 -5
  145. package/.claude/hooks-windows/play-tts-termux-ssh.ps1 +138 -138
  146. package/.claude/hooks-windows/play-tts-windows-piper.ps1 +178 -0
  147. package/.claude/hooks-windows/play-tts-windows-sapi.ps1 +108 -0
  148. package/.claude/hooks-windows/play-tts.ps1 +265 -507
  149. package/.claude/hooks-windows/provider-manager.ps1 +158 -192
  150. package/.claude/hooks-windows/session-start-tts.ps1 +55 -46
  151. package/.claude/hooks-windows/soprano-gradio-synth.py +153 -153
  152. package/.claude/hooks-windows/speed-manager.ps1 +166 -166
  153. package/.claude/hooks-windows/voice-manager-windows.ps1 +176 -260
  154. package/.claude/output-styles/agent-vibes.md +202 -202
  155. package/.claude/personalities/angry.md +14 -14
  156. package/.claude/personalities/annoying.md +14 -14
  157. package/.claude/personalities/crass.md +14 -14
  158. package/.claude/personalities/dramatic.md +14 -14
  159. package/.claude/personalities/dry-humor.md +50 -50
  160. package/.claude/personalities/flirty.md +20 -20
  161. package/.claude/personalities/funny.md +14 -14
  162. package/.claude/personalities/grandpa.md +32 -32
  163. package/.claude/personalities/millennial.md +14 -14
  164. package/.claude/personalities/moody.md +14 -14
  165. package/.claude/personalities/normal.md +16 -16
  166. package/.claude/personalities/pirate.md +14 -14
  167. package/.claude/personalities/poetic.md +14 -14
  168. package/.claude/personalities/professional.md +14 -14
  169. package/.claude/personalities/rapper.md +55 -55
  170. package/.claude/personalities/robot.md +14 -14
  171. package/.claude/personalities/sarcastic.md +38 -38
  172. package/.claude/personalities/sassy.md +14 -14
  173. package/.claude/personalities/surfer-dude.md +14 -14
  174. package/.claude/personalities/zen.md +14 -14
  175. package/.claude/piper-voices-dir.txt +1 -0
  176. package/.claude/settings.json +25 -15
  177. package/.claude/verbosity.txt +1 -1
  178. package/.clawdbot/README.md +105 -105
  179. package/.clawdbot/skill/SKILL.md +149 -145
  180. package/.mcp.json +30 -11
  181. package/CLAUDE.md +170 -215
  182. package/README.md +207 -521
  183. package/RELEASE_NOTES.md +1172 -1976
  184. package/WINDOWS-SETUP.md +208 -208
  185. package/bin/agent-vibes +0 -0
  186. package/bin/agentvibes-voice-browser.js +64 -1289
  187. package/bin/agentvibes.js +28 -0
  188. package/bin/ensure-soprano-running.sh +43 -0
  189. package/bin/mcp-server.js +121 -121
  190. package/bin/mcp-server.sh +0 -0
  191. package/bin/test-bmad-pr +78 -78
  192. package/mcp-server/QUICK_START.md +203 -203
  193. package/mcp-server/README.md +345 -345
  194. package/mcp-server/WINDOWS_SETUP.md +260 -260
  195. package/mcp-server/docs/troubleshooting-audio.md +313 -313
  196. package/mcp-server/examples/claude_desktop_config.json +11 -11
  197. package/mcp-server/examples/claude_desktop_config_piper.json +9 -9
  198. package/mcp-server/examples/custom_instructions.md +169 -169
  199. package/mcp-server/install-deps.js +130 -130
  200. package/mcp-server/pyproject.toml +52 -52
  201. package/mcp-server/requirements.txt +2 -2
  202. package/mcp-server/server.py +1467 -1578
  203. package/mcp-server/test_server.py +395 -395
  204. package/package.json +1 -3
  205. package/setup-windows.ps1 +815 -815
  206. package/src/console/tabs/music-tab.js +5 -2
  207. package/src/console/tabs/voices-tab.js +71 -37
  208. package/src/installer.js +52 -5
  209. package/src/services/llm-provider-service.js +1 -1
  210. package/templates/agentvibes-receiver.sh +158 -483
  211. package/templates/audio/welcome-music.mp3 +0 -0
  212. package/.agentvibes/bmad-voice-map.json +0 -104
  213. package/.agentvibes/copilot-sessions.log +0 -4
  214. package/.claude/config/audio-effects-bmad.cfg +0 -50
  215. package/.claude/config/intro-text.txt +0 -1
  216. package/.claude/config/personality.txt +0 -1
  217. package/.claude/config/piper-speech-rate.txt +0 -4
  218. package/.claude/config/piper-target-speech-rate.txt +0 -1
  219. package/.claude/config/reverb-level.txt +0 -1
  220. package/.claude/config/tts-target-speech-rate.txt +0 -1
  221. package/voice-assignments.json +0 -8245
  222. /package/{.claude → .agentvibes}/config/agentvibes.json +0 -0
@@ -1,294 +1,294 @@
1
- #
2
- # File: .claude/hooks-windows/effects-manager.ps1
3
- #
4
- # AgentVibes - Finally, your AI Agents can Talk Back! Text-to-Speech WITH personality for AI Assistants!
5
- # Website: https://agentvibes.org
6
- # Repository: https://github.com/paulpreibisch/AgentVibes
7
- #
8
- # Co-created by Paul Preibisch with Claude AI
9
- # Copyright (c) 2025 Paul Preibisch
10
- #
11
- # Licensed under the Apache License, Version 2.0
12
-
13
- param(
14
- [Parameter(Position=0)]
15
- [string]$Command = "help",
16
- [Parameter(Position=1)]
17
- [string]$Arg1 = "",
18
- [Parameter(Position=2)]
19
- [string]$Arg2 = "default",
20
- [Parameter(Position=3)]
21
- [string]$Arg3 = ""
22
- )
23
-
24
- $ErrorActionPreference = "Continue"
25
-
26
- # Get script directory and config file path
27
- $ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
28
- $ConfigDir = Join-Path (Split-Path -Parent $ScriptDir) "config"
29
- $ConfigFile = Join-Path $ConfigDir "audio-effects.cfg"
30
- $ReverbLevelFile = Join-Path $ConfigDir "reverb-level.txt"
31
-
32
- # Reverb level mappings (sox format: reverberance HF-damping room-scale)
33
- $ReverbLevels = @{
34
- "off" = ""
35
- "light" = "reverb 20 50 50"
36
- "medium" = "reverb 40 50 70"
37
- "heavy" = "reverb 70 50 100"
38
- "cathedral" = "reverb 90 30 100"
39
- }
40
-
41
- function Get-AgentEffects {
42
- param([string]$AgentName)
43
-
44
- if (-not (Test-Path $ConfigFile)) {
45
- Write-Output ""
46
- return
47
- }
48
-
49
- $lines = Get-Content $ConfigFile
50
- $configLine = $null
51
-
52
- foreach ($line in $lines) {
53
- if ($line -match "^$([regex]::Escape($AgentName))\|") {
54
- $configLine = $line
55
- break
56
- }
57
- }
58
-
59
- if (-not $configLine) {
60
- foreach ($line in $lines) {
61
- if ($line -match "^default\|") {
62
- $configLine = $line
63
- break
64
- }
65
- }
66
- }
67
-
68
- if ($configLine) {
69
- $parts = $configLine -split '\|'
70
- if ($parts.Count -ge 2) {
71
- Write-Output $parts[1]
72
- } else {
73
- Write-Output ""
74
- }
75
- } else {
76
- Write-Output ""
77
- }
78
- }
79
-
80
- function Set-Reverb {
81
- param(
82
- [string]$Level,
83
- [string]$AgentName = "default",
84
- [string]$ApplyAll = ""
85
- )
86
-
87
- if (-not $ReverbLevels.ContainsKey($Level)) {
88
- Write-Output "Invalid reverb level: $Level"
89
- Write-Output "Valid levels: off, light, medium, heavy, cathedral"
90
- exit 1
91
- }
92
-
93
- $reverbEffect = $ReverbLevels[$Level]
94
-
95
- # Always update reverb-level.txt for play-tts.ps1 compatibility
96
- if ($ApplyAll -eq "--all" -or $AgentName -eq "default") {
97
- Set-Content -Path $ReverbLevelFile -Value $Level -NoNewline
98
- }
99
-
100
- if (-not (Test-Path $ConfigFile)) {
101
- Write-Output "Config file not found: $ConfigFile"
102
- exit 1
103
- }
104
-
105
- $lines = Get-Content $ConfigFile
106
- $newLines = @()
107
-
108
- if ($ApplyAll -eq "--all") {
109
- Write-Host "Setting reverb to '$Level' for all agents..."
110
-
111
- foreach ($line in $lines) {
112
- if ($line -match "^#" -or $line.Trim() -eq "" -or $line -match "^\|") {
113
- $newLines += $line
114
- continue
115
- }
116
-
117
- $parts = $line -split '\|', 4
118
- if ($parts.Count -ge 4) {
119
- $agent = $parts[0]
120
- $soxEffects = $parts[1]
121
- $bgFile = $parts[2]
122
- $bgVol = $parts[3]
123
-
124
- # Remove existing reverb from sox effects
125
- $newEffects = $soxEffects -replace 'reverb\s+\d+\s+\d+\s+\d+', ''
126
- $newEffects = ($newEffects -replace '\s+', ' ').Trim()
127
-
128
- # Add new reverb if not off
129
- if ($reverbEffect) {
130
- if ($newEffects) {
131
- $newEffects = "$reverbEffect $newEffects"
132
- } else {
133
- $newEffects = $reverbEffect
134
- }
135
- }
136
-
137
- $newLines += "$agent|$newEffects|$bgFile|$bgVol"
138
- } else {
139
- $newLines += $line
140
- }
141
- }
142
-
143
- Set-Content -Path $ConfigFile -Value ($newLines -join "`n") -NoNewline
144
- Write-Output "Reverb set to '$Level' for all agents"
145
- } else {
146
- Write-Host "Setting reverb to '$Level' for '$AgentName'..."
147
-
148
- # Check if agent exists in config
149
- $agentExists = $false
150
- foreach ($line in $lines) {
151
- if ($line -match "^$([regex]::Escape($AgentName))\|") {
152
- $agentExists = $true
153
- break
154
- }
155
- }
156
-
157
- if (-not $agentExists) {
158
- Add-Content -Path $ConfigFile -Value "${AgentName}|${reverbEffect}|agentvibes_soft_flamenco_loop.mp3|0.30"
159
- Write-Output "Created new config for '$AgentName' with reverb '$Level'"
160
- return
161
- }
162
-
163
- foreach ($line in $lines) {
164
- if ($line -match "^#" -or $line.Trim() -eq "" -or $line -match "^\|") {
165
- $newLines += $line
166
- continue
167
- }
168
-
169
- $parts = $line -split '\|', 4
170
- if ($parts.Count -ge 4 -and $parts[0] -eq $AgentName) {
171
- $soxEffects = $parts[1]
172
- $bgFile = $parts[2]
173
- $bgVol = $parts[3]
174
-
175
- # Remove existing reverb
176
- $newEffects = $soxEffects -replace 'reverb\s+\d+\s+\d+\s+\d+', ''
177
- $newEffects = ($newEffects -replace '\s+', ' ').Trim()
178
-
179
- if ($reverbEffect) {
180
- if ($newEffects) {
181
- $newEffects = "$reverbEffect $newEffects"
182
- } else {
183
- $newEffects = $reverbEffect
184
- }
185
- }
186
-
187
- $newLines += "$($parts[0])|$newEffects|$bgFile|$bgVol"
188
- } else {
189
- $newLines += $line
190
- }
191
- }
192
-
193
- Set-Content -Path $ConfigFile -Value ($newLines -join "`n") -NoNewline
194
- Write-Output "Reverb set to '$Level' for '$AgentName'"
195
- }
196
- }
197
-
198
- function Get-ReverbLevel {
199
- param([string]$AgentName = "default")
200
-
201
- $effects = Get-AgentEffects -AgentName $AgentName
202
-
203
- if (-not $effects -or $effects -notmatch 'reverb') {
204
- Write-Output "off"
205
- return
206
- }
207
-
208
- if ($effects -match 'reverb\s+(\d+)\s+(\d+)\s+(\d+)') {
209
- $reverbVal = [int]$Matches[1]
210
- if ($reverbVal -le 20) {
211
- Write-Output "light"
212
- } elseif ($reverbVal -le 40) {
213
- Write-Output "medium"
214
- } elseif ($reverbVal -le 70) {
215
- Write-Output "heavy"
216
- } else {
217
- Write-Output "cathedral"
218
- }
219
- } else {
220
- Write-Output "off"
221
- }
222
- }
223
-
224
- function Show-Effects {
225
- if (-not (Test-Path $ConfigFile)) {
226
- Write-Output "Config file not found: $ConfigFile"
227
- exit 1
228
- }
229
-
230
- Write-Output "Current Audio Effects Configuration:"
231
- Write-Output ""
232
-
233
- $lines = Get-Content $ConfigFile
234
- foreach ($line in $lines) {
235
- if ($line -match "^#" -or $line.Trim() -eq "" -or $line -match "^\|") {
236
- continue
237
- }
238
-
239
- $parts = $line -split '\|', 4
240
- if ($parts.Count -ge 2) {
241
- $agent = $parts[0]
242
- $soxEffects = $parts[1]
243
-
244
- $reverbLevel = "off"
245
- if ($soxEffects -match 'reverb\s+(\d+)\s+(\d+)\s+(\d+)') {
246
- $reverbVal = [int]$Matches[1]
247
- if ($reverbVal -le 20) { $reverbLevel = "light" }
248
- elseif ($reverbVal -le 40) { $reverbLevel = "medium" }
249
- elseif ($reverbVal -le 70) { $reverbLevel = "heavy" }
250
- else { $reverbLevel = "cathedral" }
251
- }
252
-
253
- Write-Output " ${agent}: reverb=$reverbLevel"
254
- if ($soxEffects) {
255
- Write-Output " Effects: $soxEffects"
256
- }
257
- }
258
- }
259
- }
260
-
261
- # Main command dispatcher
262
- switch ($Command) {
263
- "set-reverb" {
264
- if (-not $Arg1) {
265
- Write-Output "Usage: effects-manager.ps1 set-reverb <level> [agent-name] [--all]"
266
- Write-Output "Levels: off, light, medium, heavy, cathedral"
267
- exit 1
268
- }
269
- Set-Reverb -Level $Arg1 -AgentName $Arg2 -ApplyAll $Arg3
270
- }
271
- "get-reverb" {
272
- $agent = if ($Arg1) { $Arg1 } else { "default" }
273
- Get-ReverbLevel -AgentName $agent
274
- }
275
- "get-effects" {
276
- $agent = if ($Arg1) { $Arg1 } else { "default" }
277
- Get-AgentEffects -AgentName $agent
278
- }
279
- "list" {
280
- Show-Effects
281
- }
282
- default {
283
- Write-Output "Usage: effects-manager.ps1 {set-reverb|get-reverb|get-effects|list}"
284
- Write-Output ""
285
- Write-Output "Commands:"
286
- Write-Output " set-reverb <level> [agent] [--all] Set reverb level"
287
- Write-Output " get-reverb [agent] Get current reverb level"
288
- Write-Output " get-effects [agent] Get all effects for agent"
289
- Write-Output " list List all agent effects"
290
- Write-Output ""
291
- Write-Output "Reverb Levels: off, light, medium, heavy, cathedral"
292
- exit 1
293
- }
294
- }
1
+ #
2
+ # File: .claude/hooks-windows/effects-manager.ps1
3
+ #
4
+ # AgentVibes - Finally, your AI Agents can Talk Back! Text-to-Speech WITH personality for AI Assistants!
5
+ # Website: https://agentvibes.org
6
+ # Repository: https://github.com/paulpreibisch/AgentVibes
7
+ #
8
+ # Co-created by Paul Preibisch with Claude AI
9
+ # Copyright (c) 2025 Paul Preibisch
10
+ #
11
+ # Licensed under the Apache License, Version 2.0
12
+
13
+ param(
14
+ [Parameter(Position=0)]
15
+ [string]$Command = "help",
16
+ [Parameter(Position=1)]
17
+ [string]$Arg1 = "",
18
+ [Parameter(Position=2)]
19
+ [string]$Arg2 = "default",
20
+ [Parameter(Position=3)]
21
+ [string]$Arg3 = ""
22
+ )
23
+
24
+ $ErrorActionPreference = "Continue"
25
+
26
+ # Get script directory and config file path
27
+ $ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
28
+ $ConfigDir = Join-Path (Split-Path -Parent $ScriptDir) "config"
29
+ $ConfigFile = Join-Path $ConfigDir "audio-effects.cfg"
30
+ $ReverbLevelFile = Join-Path $ConfigDir "reverb-level.txt"
31
+
32
+ # Reverb level mappings (sox format: reverberance HF-damping room-scale)
33
+ $ReverbLevels = @{
34
+ "off" = ""
35
+ "light" = "reverb 20 50 50"
36
+ "medium" = "reverb 40 50 70"
37
+ "heavy" = "reverb 70 50 100"
38
+ "cathedral" = "reverb 90 30 100"
39
+ }
40
+
41
+ function Get-AgentEffects {
42
+ param([string]$AgentName)
43
+
44
+ if (-not (Test-Path $ConfigFile)) {
45
+ Write-Output ""
46
+ return
47
+ }
48
+
49
+ $lines = Get-Content $ConfigFile
50
+ $configLine = $null
51
+
52
+ foreach ($line in $lines) {
53
+ if ($line -match "^$([regex]::Escape($AgentName))\|") {
54
+ $configLine = $line
55
+ break
56
+ }
57
+ }
58
+
59
+ if (-not $configLine) {
60
+ foreach ($line in $lines) {
61
+ if ($line -match "^default\|") {
62
+ $configLine = $line
63
+ break
64
+ }
65
+ }
66
+ }
67
+
68
+ if ($configLine) {
69
+ $parts = $configLine -split '\|'
70
+ if ($parts.Count -ge 2) {
71
+ Write-Output $parts[1]
72
+ } else {
73
+ Write-Output ""
74
+ }
75
+ } else {
76
+ Write-Output ""
77
+ }
78
+ }
79
+
80
+ function Set-Reverb {
81
+ param(
82
+ [string]$Level,
83
+ [string]$AgentName = "default",
84
+ [string]$ApplyAll = ""
85
+ )
86
+
87
+ if (-not $ReverbLevels.ContainsKey($Level)) {
88
+ Write-Output "Invalid reverb level: $Level"
89
+ Write-Output "Valid levels: off, light, medium, heavy, cathedral"
90
+ exit 1
91
+ }
92
+
93
+ $reverbEffect = $ReverbLevels[$Level]
94
+
95
+ # Always update reverb-level.txt for play-tts.ps1 compatibility
96
+ if ($ApplyAll -eq "--all" -or $AgentName -eq "default") {
97
+ Set-Content -Path $ReverbLevelFile -Value $Level -NoNewline
98
+ }
99
+
100
+ if (-not (Test-Path $ConfigFile)) {
101
+ Write-Output "Config file not found: $ConfigFile"
102
+ exit 1
103
+ }
104
+
105
+ $lines = Get-Content $ConfigFile
106
+ $newLines = @()
107
+
108
+ if ($ApplyAll -eq "--all") {
109
+ Write-Host "Setting reverb to '$Level' for all agents..."
110
+
111
+ foreach ($line in $lines) {
112
+ if ($line -match "^#" -or $line.Trim() -eq "" -or $line -match "^\|") {
113
+ $newLines += $line
114
+ continue
115
+ }
116
+
117
+ $parts = $line -split '\|', 4
118
+ if ($parts.Count -ge 4) {
119
+ $agent = $parts[0]
120
+ $soxEffects = $parts[1]
121
+ $bgFile = $parts[2]
122
+ $bgVol = $parts[3]
123
+
124
+ # Remove existing reverb from sox effects
125
+ $newEffects = $soxEffects -replace 'reverb\s+\d+\s+\d+\s+\d+', ''
126
+ $newEffects = ($newEffects -replace '\s+', ' ').Trim()
127
+
128
+ # Add new reverb if not off
129
+ if ($reverbEffect) {
130
+ if ($newEffects) {
131
+ $newEffects = "$reverbEffect $newEffects"
132
+ } else {
133
+ $newEffects = $reverbEffect
134
+ }
135
+ }
136
+
137
+ $newLines += "$agent|$newEffects|$bgFile|$bgVol"
138
+ } else {
139
+ $newLines += $line
140
+ }
141
+ }
142
+
143
+ Set-Content -Path $ConfigFile -Value ($newLines -join "`n") -NoNewline
144
+ Write-Output "Reverb set to '$Level' for all agents"
145
+ } else {
146
+ Write-Host "Setting reverb to '$Level' for '$AgentName'..."
147
+
148
+ # Check if agent exists in config
149
+ $agentExists = $false
150
+ foreach ($line in $lines) {
151
+ if ($line -match "^$([regex]::Escape($AgentName))\|") {
152
+ $agentExists = $true
153
+ break
154
+ }
155
+ }
156
+
157
+ if (-not $agentExists) {
158
+ Add-Content -Path $ConfigFile -Value "${AgentName}|${reverbEffect}|agentvibes_soft_flamenco_loop.mp3|0.30"
159
+ Write-Output "Created new config for '$AgentName' with reverb '$Level'"
160
+ return
161
+ }
162
+
163
+ foreach ($line in $lines) {
164
+ if ($line -match "^#" -or $line.Trim() -eq "" -or $line -match "^\|") {
165
+ $newLines += $line
166
+ continue
167
+ }
168
+
169
+ $parts = $line -split '\|', 4
170
+ if ($parts.Count -ge 4 -and $parts[0] -eq $AgentName) {
171
+ $soxEffects = $parts[1]
172
+ $bgFile = $parts[2]
173
+ $bgVol = $parts[3]
174
+
175
+ # Remove existing reverb
176
+ $newEffects = $soxEffects -replace 'reverb\s+\d+\s+\d+\s+\d+', ''
177
+ $newEffects = ($newEffects -replace '\s+', ' ').Trim()
178
+
179
+ if ($reverbEffect) {
180
+ if ($newEffects) {
181
+ $newEffects = "$reverbEffect $newEffects"
182
+ } else {
183
+ $newEffects = $reverbEffect
184
+ }
185
+ }
186
+
187
+ $newLines += "$($parts[0])|$newEffects|$bgFile|$bgVol"
188
+ } else {
189
+ $newLines += $line
190
+ }
191
+ }
192
+
193
+ Set-Content -Path $ConfigFile -Value ($newLines -join "`n") -NoNewline
194
+ Write-Output "Reverb set to '$Level' for '$AgentName'"
195
+ }
196
+ }
197
+
198
+ function Get-ReverbLevel {
199
+ param([string]$AgentName = "default")
200
+
201
+ $effects = Get-AgentEffects -AgentName $AgentName
202
+
203
+ if (-not $effects -or $effects -notmatch 'reverb') {
204
+ Write-Output "off"
205
+ return
206
+ }
207
+
208
+ if ($effects -match 'reverb\s+(\d+)\s+(\d+)\s+(\d+)') {
209
+ $reverbVal = [int]$Matches[1]
210
+ if ($reverbVal -le 20) {
211
+ Write-Output "light"
212
+ } elseif ($reverbVal -le 40) {
213
+ Write-Output "medium"
214
+ } elseif ($reverbVal -le 70) {
215
+ Write-Output "heavy"
216
+ } else {
217
+ Write-Output "cathedral"
218
+ }
219
+ } else {
220
+ Write-Output "off"
221
+ }
222
+ }
223
+
224
+ function Show-Effects {
225
+ if (-not (Test-Path $ConfigFile)) {
226
+ Write-Output "Config file not found: $ConfigFile"
227
+ exit 1
228
+ }
229
+
230
+ Write-Output "Current Audio Effects Configuration:"
231
+ Write-Output ""
232
+
233
+ $lines = Get-Content $ConfigFile
234
+ foreach ($line in $lines) {
235
+ if ($line -match "^#" -or $line.Trim() -eq "" -or $line -match "^\|") {
236
+ continue
237
+ }
238
+
239
+ $parts = $line -split '\|', 4
240
+ if ($parts.Count -ge 2) {
241
+ $agent = $parts[0]
242
+ $soxEffects = $parts[1]
243
+
244
+ $reverbLevel = "off"
245
+ if ($soxEffects -match 'reverb\s+(\d+)\s+(\d+)\s+(\d+)') {
246
+ $reverbVal = [int]$Matches[1]
247
+ if ($reverbVal -le 20) { $reverbLevel = "light" }
248
+ elseif ($reverbVal -le 40) { $reverbLevel = "medium" }
249
+ elseif ($reverbVal -le 70) { $reverbLevel = "heavy" }
250
+ else { $reverbLevel = "cathedral" }
251
+ }
252
+
253
+ Write-Output " ${agent}: reverb=$reverbLevel"
254
+ if ($soxEffects) {
255
+ Write-Output " Effects: $soxEffects"
256
+ }
257
+ }
258
+ }
259
+ }
260
+
261
+ # Main command dispatcher
262
+ switch ($Command) {
263
+ "set-reverb" {
264
+ if (-not $Arg1) {
265
+ Write-Output "Usage: effects-manager.ps1 set-reverb <level> [agent-name] [--all]"
266
+ Write-Output "Levels: off, light, medium, heavy, cathedral"
267
+ exit 1
268
+ }
269
+ Set-Reverb -Level $Arg1 -AgentName $Arg2 -ApplyAll $Arg3
270
+ }
271
+ "get-reverb" {
272
+ $agent = if ($Arg1) { $Arg1 } else { "default" }
273
+ Get-ReverbLevel -AgentName $agent
274
+ }
275
+ "get-effects" {
276
+ $agent = if ($Arg1) { $Arg1 } else { "default" }
277
+ Get-AgentEffects -AgentName $agent
278
+ }
279
+ "list" {
280
+ Show-Effects
281
+ }
282
+ default {
283
+ Write-Output "Usage: effects-manager.ps1 {set-reverb|get-reverb|get-effects|list}"
284
+ Write-Output ""
285
+ Write-Output "Commands:"
286
+ Write-Output " set-reverb <level> [agent] [--all] Set reverb level"
287
+ Write-Output " get-reverb [agent] Get current reverb level"
288
+ Write-Output " get-effects [agent] Get all effects for agent"
289
+ Write-Output " list List all agent effects"
290
+ Write-Output ""
291
+ Write-Output "Reverb Levels: off, light, medium, heavy, cathedral"
292
+ exit 1
293
+ }
294
+ }