agentvibes 5.7.6 → 5.9.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 (137) hide show
  1. package/.agentvibes/config.json +12 -5
  2. package/.agentvibes/install-manifest.json +188 -300
  3. package/.claude/audio/tracks/celestial_velvet.mp3 +0 -0
  4. package/.claude/commands/agent-vibes-bmad-voices.md +117 -117
  5. package/.claude/commands/agent-vibes-rdp.md +24 -24
  6. package/.claude/config/audio-effects.cfg +3 -2
  7. package/.claude/config/audio-effects.cfg.sample +52 -52
  8. package/.claude/config/background-music-enabled.txt +1 -0
  9. package/.claude/config/background-music-position.txt +1 -1
  10. package/.claude/config/language.txt +1 -0
  11. package/.claude/docs/TERMUX_SETUP.md +408 -408
  12. package/.claude/hooks/audio-cache-utils.sh +0 -0
  13. package/.claude/hooks/audio-processor.sh +0 -0
  14. package/.claude/hooks/background-music-manager.sh +0 -0
  15. package/.claude/hooks/bmad-party-speak.sh +27 -6
  16. package/.claude/hooks/bmad-speak-enhanced.sh +0 -0
  17. package/.claude/hooks/bmad-speak.sh +0 -0
  18. package/.claude/hooks/bmad-tts-injector.sh +0 -0
  19. package/.claude/hooks/bmad-voice-manager.sh +0 -0
  20. package/.claude/hooks/clawdbot-receiver-SECURE.sh +0 -0
  21. package/.claude/hooks/clawdbot-receiver.sh +0 -0
  22. package/.claude/hooks/clean-audio-cache.sh +0 -0
  23. package/.claude/hooks/cleanup-cache.sh +0 -0
  24. package/.claude/hooks/configure-rdp-mode.sh +0 -0
  25. package/.claude/hooks/download-extra-voices.sh +0 -0
  26. package/.claude/hooks/effects-manager.sh +0 -0
  27. package/.claude/hooks/github-star-reminder.sh +0 -0
  28. package/.claude/hooks/language-manager.sh +0 -0
  29. package/.claude/hooks/learn-manager.sh +0 -0
  30. package/.claude/hooks/macos-voice-manager.sh +0 -0
  31. package/.claude/hooks/migrate-background-music.sh +0 -0
  32. package/.claude/hooks/migrate-to-agentvibes.sh +0 -0
  33. package/.claude/hooks/optimize-background-music.sh +0 -0
  34. package/.claude/hooks/path-resolver.sh +0 -0
  35. package/.claude/hooks/personality-manager.sh +0 -0
  36. package/.claude/hooks/piper-download-voices.sh +0 -0
  37. package/.claude/hooks/piper-installer.sh +0 -0
  38. package/.claude/hooks/piper-multispeaker-registry.sh +0 -0
  39. package/.claude/hooks/piper-voice-manager.sh +0 -0
  40. package/.claude/hooks/play-tts-agentvibes-receiver-for-voiceless-connections.sh +0 -0
  41. package/.claude/hooks/play-tts-agentvibes-receiver.sh +1 -0
  42. package/.claude/hooks/play-tts-enhanced.sh +0 -0
  43. package/.claude/hooks/play-tts-macos.sh +0 -0
  44. package/.claude/hooks/play-tts-piper.sh +0 -0
  45. package/.claude/hooks/play-tts-soprano.sh +0 -0
  46. package/.claude/hooks/play-tts-ssh-remote.sh +11 -8
  47. package/.claude/hooks/play-tts-termux-ssh.sh +0 -0
  48. package/.claude/hooks/play-tts-windows-receiver.sh +0 -0
  49. package/.claude/hooks/play-tts.sh +0 -0
  50. package/.claude/hooks/prepare-release.sh +0 -0
  51. package/.claude/hooks/provider-commands.sh +0 -0
  52. package/.claude/hooks/provider-manager.sh +0 -0
  53. package/.claude/hooks/replay-target-audio.sh +0 -0
  54. package/.claude/hooks/requirements.txt +6 -6
  55. package/.claude/hooks/sentiment-manager.sh +0 -0
  56. package/.claude/hooks/session-start-tts.sh +0 -0
  57. package/.claude/hooks/soprano-gradio-synth.py +139 -139
  58. package/.claude/hooks/speed-manager.sh +0 -0
  59. package/.claude/hooks/stop-tts.sh +0 -0
  60. package/.claude/hooks/termux-installer.sh +0 -0
  61. package/.claude/hooks/translate-manager.sh +0 -0
  62. package/.claude/hooks/translator.py +237 -237
  63. package/.claude/hooks/tts-queue-worker.sh +0 -0
  64. package/.claude/hooks/tts-queue.sh +0 -0
  65. package/.claude/hooks/verbosity-manager.sh +0 -0
  66. package/.claude/hooks/voice-manager.sh +0 -0
  67. package/.claude/hooks-windows/audio-cache-utils.ps1 +119 -119
  68. package/.claude/hooks-windows/audio-cache-utils.ps1.user.bak +119 -0
  69. package/.claude/hooks-windows/bmad-speak.ps1 +9 -38
  70. package/.claude/hooks-windows/play-tts-soprano.ps1 +13 -2
  71. package/.claude/hooks-windows/soprano-gradio-synth.py +153 -153
  72. package/.claude/hooks-windows/soprano-gradio-synth.py.user.bak +153 -0
  73. package/.claude/piper-voices-dir.txt +1 -1
  74. package/.claude/verbosity.txt +1 -1
  75. package/.clawdbot/README.md +105 -105
  76. package/.mcp.json +5 -14
  77. package/README.md +43 -2
  78. package/RELEASE_NOTES.md +110 -0
  79. package/WINDOWS-SETUP.md +208 -208
  80. package/bin/agent-vibes +39 -39
  81. package/bin/agentvibes-voice-browser.js +0 -0
  82. package/bin/agentvibes.js +0 -0
  83. package/bin/mcp-server.js +121 -121
  84. package/bin/mcp-server.sh +0 -0
  85. package/bin/test-bmad-pr +78 -78
  86. package/mcp-server/QUICK_START.md +203 -203
  87. package/mcp-server/README.md +345 -345
  88. package/mcp-server/WINDOWS_SETUP.md +0 -0
  89. package/mcp-server/examples/claude_desktop_config.json +11 -11
  90. package/mcp-server/examples/claude_desktop_config_piper.json +9 -9
  91. package/mcp-server/examples/custom_instructions.md +169 -169
  92. package/mcp-server/install-deps.js +0 -0
  93. package/mcp-server/server.py +1797 -1797
  94. package/mcp-server/test_server.py +0 -0
  95. package/package.json +1 -1
  96. package/src/cli/list-personalities.js +110 -110
  97. package/src/cli/list-voices.js +114 -114
  98. package/src/commands/bmad-voices.js +394 -394
  99. package/src/commands/install-mcp.js +476 -476
  100. package/src/console/audio-env.js +4 -1
  101. package/src/console/brand-colors.js +13 -13
  102. package/src/console/constants/personalities.js +44 -44
  103. package/src/console/tabs/agents-tab.js +85 -62
  104. package/src/console/tabs/help-tab.js +314 -314
  105. package/src/console/tabs/music-tab.js +3 -0
  106. package/src/console/tabs/readme-tab.js +272 -272
  107. package/src/console/tabs/setup-tab.js +285 -41
  108. package/src/console/tabs/voices-tab.js +14 -2
  109. package/src/console/widgets/destroy-list.js +25 -25
  110. package/src/console/widgets/notice.js +55 -55
  111. package/src/i18n/de.js +202 -202
  112. package/src/i18n/es.js +202 -202
  113. package/src/i18n/fr.js +202 -202
  114. package/src/i18n/hi.js +202 -202
  115. package/src/i18n/ja.js +202 -202
  116. package/src/i18n/ko.js +202 -202
  117. package/src/i18n/pt.js +202 -202
  118. package/src/i18n/strings.js +54 -54
  119. package/src/i18n/zh-CN.js +202 -202
  120. package/src/installer/language-screen.js +31 -31
  121. package/src/installer/music-file-input.js +304 -304
  122. package/src/installer.js +0 -0
  123. package/src/services/config-service.js +264 -264
  124. package/src/services/language-service.js +47 -47
  125. package/src/services/provider-service.js +143 -143
  126. package/src/utils/audio-duration-validator.js +298 -298
  127. package/src/utils/audio-format-validator.js +277 -277
  128. package/src/utils/dependency-checker.js +469 -469
  129. package/src/utils/file-ownership-verifier.js +358 -358
  130. package/src/utils/list-formatter.js +194 -194
  131. package/src/utils/music-file-validator.js +285 -285
  132. package/src/utils/preview-list-prompt.js +136 -136
  133. package/src/utils/secure-music-storage.js +412 -412
  134. package/templates/agentvibes-receiver.sh +231 -231
  135. package/templates/audio/welcome-music.mp3 +0 -0
  136. package/.claude/hooks/bmad-party-manager.sh +0 -225
  137. package/.claude/hooks/stop.sh +0 -38
@@ -1,119 +1,119 @@
1
- #
2
- # File: .claude/hooks-windows/audio-cache-utils.ps1
3
- #
4
- # AgentVibes Audio Cache Utilities for Windows
5
- #
6
-
7
- param(
8
- [Parameter(Position = 0)]
9
- [ValidateSet('cleanup', 'stats', 'clear')]
10
- [string]$Command
11
- )
12
-
13
- # Detect project-local audio dir (same logic as TTS scripts)
14
- $ScriptPath = Split-Path -Parent $MyInvocation.MyCommand.Path
15
- $ProjectClaudeDir = Join-Path (Split-Path -Parent (Split-Path -Parent $ScriptPath)) ".claude"
16
- if (Test-Path $ProjectClaudeDir) {
17
- $AudioDir = "$ProjectClaudeDir\audio"
18
- } else {
19
- $AudioDir = "$env:USERPROFILE\.claude\audio"
20
- }
21
-
22
- function Ensure-AudioDir {
23
- if (-not (Test-Path $AudioDir)) {
24
- New-Item -ItemType Directory -Path $AudioDir -Force | Out-Null
25
- }
26
- }
27
-
28
- function Get-AudioCacheSize {
29
- Ensure-AudioDir
30
-
31
- if (-not (Test-Path $AudioDir)) {
32
- return 0
33
- }
34
-
35
- $files = Get-ChildItem -Path $AudioDir -Filter "*.wav" -ErrorAction SilentlyContinue
36
- $totalSize = 0
37
-
38
- foreach ($file in $files) {
39
- $totalSize += $file.Length
40
- }
41
-
42
- return $totalSize
43
- }
44
-
45
- function Format-FileSize {
46
- param([long]$Size)
47
-
48
- if ($Size -lt 1KB) { return "$Size B" }
49
- if ($Size -lt 1MB) { return "{0:N2} KB" -f ($Size / 1KB) }
50
- if ($Size -lt 1GB) { return "{0:N2} MB" -f ($Size / 1MB) }
51
- return "{0:N2} GB" -f ($Size / 1GB)
52
- }
53
-
54
- function Get-CacheStats {
55
- Ensure-AudioDir
56
-
57
- $files = Get-ChildItem -Path $AudioDir -Filter "*.wav" -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum
58
-
59
- $count = if ($files.Count -eq $null) { 0 } else { $files.Count }
60
- $totalSize = if ($files.Sum -eq $null) { 0 } else { $files.Sum }
61
-
62
- return @{
63
- FileCount = $count
64
- TotalSize = $totalSize
65
- FormattedSize = Format-FileSize $totalSize
66
- }
67
- }
68
-
69
- function Clear-Cache {
70
- Ensure-AudioDir
71
-
72
- $files = Get-ChildItem -Path $AudioDir -Filter "*.wav" -ErrorAction SilentlyContinue
73
-
74
- if ($files.Count -eq 0) {
75
- Write-Host "[OK] Cache already empty" -ForegroundColor Green
76
- return
77
- }
78
-
79
- $stats = Get-CacheStats
80
- Write-Host "[CLEANUP] Clearing $($stats.FileCount) audio files ($($stats.FormattedSize))" -ForegroundColor Yellow
81
-
82
- foreach ($file in $files) {
83
- Remove-Item $file.FullName -Force -ErrorAction SilentlyContinue
84
- }
85
-
86
- Write-Host "[OK] Cache cleared" -ForegroundColor Green
87
- }
88
-
89
- function Show-CacheStats {
90
- Ensure-AudioDir
91
-
92
- $stats = Get-CacheStats
93
-
94
- Write-Host ""
95
- Write-Host "[STATS] Audio Cache Statistics" -ForegroundColor Cyan
96
- Write-Host " Location: $AudioDir"
97
- Write-Host " Files: $($stats.FileCount)"
98
- Write-Host " Total Size: $($stats.FormattedSize)"
99
- Write-Host ""
100
- }
101
-
102
- # Main command routing
103
- switch ($Command) {
104
- 'stats' {
105
- Show-CacheStats
106
- }
107
-
108
- 'cleanup' {
109
- Clear-Cache
110
- }
111
-
112
- 'clear' {
113
- Clear-Cache
114
- }
115
-
116
- default {
117
- Show-CacheStats
118
- }
119
- }
1
+ #
2
+ # File: .claude/hooks-windows/audio-cache-utils.ps1
3
+ #
4
+ # AgentVibes Audio Cache Utilities for Windows
5
+ #
6
+
7
+ param(
8
+ [Parameter(Position = 0)]
9
+ [ValidateSet('cleanup', 'stats', 'clear')]
10
+ [string]$Command
11
+ )
12
+
13
+ # Detect project-local audio dir (same logic as TTS scripts)
14
+ $ScriptPath = Split-Path -Parent $MyInvocation.MyCommand.Path
15
+ $ProjectClaudeDir = Join-Path (Split-Path -Parent (Split-Path -Parent $ScriptPath)) ".claude"
16
+ if (Test-Path $ProjectClaudeDir) {
17
+ $AudioDir = "$ProjectClaudeDir\audio"
18
+ } else {
19
+ $AudioDir = "$env:USERPROFILE\.claude\audio"
20
+ }
21
+
22
+ function Ensure-AudioDir {
23
+ if (-not (Test-Path $AudioDir)) {
24
+ New-Item -ItemType Directory -Path $AudioDir -Force | Out-Null
25
+ }
26
+ }
27
+
28
+ function Get-AudioCacheSize {
29
+ Ensure-AudioDir
30
+
31
+ if (-not (Test-Path $AudioDir)) {
32
+ return 0
33
+ }
34
+
35
+ $files = Get-ChildItem -Path $AudioDir -Filter "*.wav" -ErrorAction SilentlyContinue
36
+ $totalSize = 0
37
+
38
+ foreach ($file in $files) {
39
+ $totalSize += $file.Length
40
+ }
41
+
42
+ return $totalSize
43
+ }
44
+
45
+ function Format-FileSize {
46
+ param([long]$Size)
47
+
48
+ if ($Size -lt 1KB) { return "$Size B" }
49
+ if ($Size -lt 1MB) { return "{0:N2} KB" -f ($Size / 1KB) }
50
+ if ($Size -lt 1GB) { return "{0:N2} MB" -f ($Size / 1MB) }
51
+ return "{0:N2} GB" -f ($Size / 1GB)
52
+ }
53
+
54
+ function Get-CacheStats {
55
+ Ensure-AudioDir
56
+
57
+ $files = Get-ChildItem -Path $AudioDir -Filter "*.wav" -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum
58
+
59
+ $count = if ($files.Count -eq $null) { 0 } else { $files.Count }
60
+ $totalSize = if ($files.Sum -eq $null) { 0 } else { $files.Sum }
61
+
62
+ return @{
63
+ FileCount = $count
64
+ TotalSize = $totalSize
65
+ FormattedSize = Format-FileSize $totalSize
66
+ }
67
+ }
68
+
69
+ function Clear-Cache {
70
+ Ensure-AudioDir
71
+
72
+ $files = Get-ChildItem -Path $AudioDir -Filter "*.wav" -ErrorAction SilentlyContinue
73
+
74
+ if ($files.Count -eq 0) {
75
+ Write-Host "[OK] Cache already empty" -ForegroundColor Green
76
+ return
77
+ }
78
+
79
+ $stats = Get-CacheStats
80
+ Write-Host "[CLEANUP] Clearing $($stats.FileCount) audio files ($($stats.FormattedSize))" -ForegroundColor Yellow
81
+
82
+ foreach ($file in $files) {
83
+ Remove-Item $file.FullName -Force -ErrorAction SilentlyContinue
84
+ }
85
+
86
+ Write-Host "[OK] Cache cleared" -ForegroundColor Green
87
+ }
88
+
89
+ function Show-CacheStats {
90
+ Ensure-AudioDir
91
+
92
+ $stats = Get-CacheStats
93
+
94
+ Write-Host ""
95
+ Write-Host "[STATS] Audio Cache Statistics" -ForegroundColor Cyan
96
+ Write-Host " Location: $AudioDir"
97
+ Write-Host " Files: $($stats.FileCount)"
98
+ Write-Host " Total Size: $($stats.FormattedSize)"
99
+ Write-Host ""
100
+ }
101
+
102
+ # Main command routing
103
+ switch ($Command) {
104
+ 'stats' {
105
+ Show-CacheStats
106
+ }
107
+
108
+ 'cleanup' {
109
+ Clear-Cache
110
+ }
111
+
112
+ 'clear' {
113
+ Clear-Cache
114
+ }
115
+
116
+ default {
117
+ Show-CacheStats
118
+ }
119
+ }
@@ -0,0 +1,119 @@
1
+ #
2
+ # File: .claude/hooks-windows/audio-cache-utils.ps1
3
+ #
4
+ # AgentVibes Audio Cache Utilities for Windows
5
+ #
6
+
7
+ param(
8
+ [Parameter(Position = 0)]
9
+ [ValidateSet('cleanup', 'stats', 'clear')]
10
+ [string]$Command
11
+ )
12
+
13
+ # Detect project-local audio dir (same logic as TTS scripts)
14
+ $ScriptPath = Split-Path -Parent $MyInvocation.MyCommand.Path
15
+ $ProjectClaudeDir = Join-Path (Split-Path -Parent (Split-Path -Parent $ScriptPath)) ".claude"
16
+ if (Test-Path $ProjectClaudeDir) {
17
+ $AudioDir = "$ProjectClaudeDir\audio"
18
+ } else {
19
+ $AudioDir = "$env:USERPROFILE\.claude\audio"
20
+ }
21
+
22
+ function Ensure-AudioDir {
23
+ if (-not (Test-Path $AudioDir)) {
24
+ New-Item -ItemType Directory -Path $AudioDir -Force | Out-Null
25
+ }
26
+ }
27
+
28
+ function Get-AudioCacheSize {
29
+ Ensure-AudioDir
30
+
31
+ if (-not (Test-Path $AudioDir)) {
32
+ return 0
33
+ }
34
+
35
+ $files = Get-ChildItem -Path $AudioDir -Filter "*.wav" -ErrorAction SilentlyContinue
36
+ $totalSize = 0
37
+
38
+ foreach ($file in $files) {
39
+ $totalSize += $file.Length
40
+ }
41
+
42
+ return $totalSize
43
+ }
44
+
45
+ function Format-FileSize {
46
+ param([long]$Size)
47
+
48
+ if ($Size -lt 1KB) { return "$Size B" }
49
+ if ($Size -lt 1MB) { return "{0:N2} KB" -f ($Size / 1KB) }
50
+ if ($Size -lt 1GB) { return "{0:N2} MB" -f ($Size / 1MB) }
51
+ return "{0:N2} GB" -f ($Size / 1GB)
52
+ }
53
+
54
+ function Get-CacheStats {
55
+ Ensure-AudioDir
56
+
57
+ $files = Get-ChildItem -Path $AudioDir -Filter "*.wav" -ErrorAction SilentlyContinue | Measure-Object -Property Length -Sum
58
+
59
+ $count = if ($files.Count -eq $null) { 0 } else { $files.Count }
60
+ $totalSize = if ($files.Sum -eq $null) { 0 } else { $files.Sum }
61
+
62
+ return @{
63
+ FileCount = $count
64
+ TotalSize = $totalSize
65
+ FormattedSize = Format-FileSize $totalSize
66
+ }
67
+ }
68
+
69
+ function Clear-Cache {
70
+ Ensure-AudioDir
71
+
72
+ $files = Get-ChildItem -Path $AudioDir -Filter "*.wav" -ErrorAction SilentlyContinue
73
+
74
+ if ($files.Count -eq 0) {
75
+ Write-Host "[OK] Cache already empty" -ForegroundColor Green
76
+ return
77
+ }
78
+
79
+ $stats = Get-CacheStats
80
+ Write-Host "[CLEANUP] Clearing $($stats.FileCount) audio files ($($stats.FormattedSize))" -ForegroundColor Yellow
81
+
82
+ foreach ($file in $files) {
83
+ Remove-Item $file.FullName -Force -ErrorAction SilentlyContinue
84
+ }
85
+
86
+ Write-Host "[OK] Cache cleared" -ForegroundColor Green
87
+ }
88
+
89
+ function Show-CacheStats {
90
+ Ensure-AudioDir
91
+
92
+ $stats = Get-CacheStats
93
+
94
+ Write-Host ""
95
+ Write-Host "[STATS] Audio Cache Statistics" -ForegroundColor Cyan
96
+ Write-Host " Location: $AudioDir"
97
+ Write-Host " Files: $($stats.FileCount)"
98
+ Write-Host " Total Size: $($stats.FormattedSize)"
99
+ Write-Host ""
100
+ }
101
+
102
+ # Main command routing
103
+ switch ($Command) {
104
+ 'stats' {
105
+ Show-CacheStats
106
+ }
107
+
108
+ 'cleanup' {
109
+ Clear-Cache
110
+ }
111
+
112
+ 'clear' {
113
+ Clear-Cache
114
+ }
115
+
116
+ default {
117
+ Show-CacheStats
118
+ }
119
+ }
@@ -198,29 +198,13 @@ if ($AgentPersonality -and (Test-Path (Split-Path $PersonalityFile -Parent))) {
198
198
  }
199
199
 
200
200
  # ---------------------------------------------------------------------------
201
- # Temporarily patch background music config for this agent.
202
- # The caller (bmad-party-speak.ps1) holds a named mutex so only one speak
203
- # call runs at a time these file patches are safe from concurrent clobber.
204
- $BgEnabledFile = Join-Path $TtsConfigDir "background-music-enabled.txt"
205
- $AudioEffectsCfg = Join-Path $TtsConfigDir "audio-effects.cfg"
206
- $OldBgEnabled = $null
207
- $TempCfgLine = ""
208
-
201
+ # Apply per-agent background music via AGENTVIBES_OVERRIDE_* env vars.
202
+ # play-tts.ps1 reads these directly and forces BgEnabled=true when OVERRIDE_MUSIC
203
+ # is set no config file patching needed, and cleanup is automatic (env vars
204
+ # are scoped to the child process spawned by & powershell below).
209
205
  if ($AgentBgEnabled -and $AgentBgTrack) {
210
- # Save + enable background music
211
- if (Test-Path $BgEnabledFile) {
212
- $OldBgEnabled = (Get-Content $BgEnabledFile -Raw -ErrorAction SilentlyContinue).Trim()
213
- }
214
- Set-Content $BgEnabledFile "true" -NoNewline
215
-
216
- # Prepend agent line to audio-effects.cfg so play-tts.ps1 finds it first
217
- # Format: AGENT_NAME|SOX_EFFECTS|BACKGROUND_FILE|BACKGROUND_VOLUME
218
- $TempCfgLine = "${AgentId}||${AgentBgTrack}|${AgentBgVolume}"
219
- $env:AGENTVIBES_AGENT_NAME = $AgentId
220
- $existingCfg = if (Test-Path $AudioEffectsCfg) {
221
- Get-Content $AudioEffectsCfg -Raw -ErrorAction SilentlyContinue
222
- } else { "" }
223
- Set-Content $AudioEffectsCfg "${TempCfgLine}`n${existingCfg}" -NoNewline
206
+ $env:AGENTVIBES_OVERRIDE_MUSIC = $AgentBgTrack
207
+ $env:AGENTVIBES_OVERRIDE_VOLUME = $AgentBgVolume
224
208
  }
225
209
 
226
210
  try {
@@ -243,22 +227,9 @@ try {
243
227
  }
244
228
  }
245
229
 
246
- # Restore background music config
230
+ # Clear music override env vars (use SetEnvironmentVariable to fully remove, not just empty)
247
231
  if ($AgentBgEnabled -and $AgentBgTrack) {
248
- if ($null -ne $OldBgEnabled) {
249
- Set-Content $BgEnabledFile $OldBgEnabled -NoNewline
250
- } elseif (Test-Path $BgEnabledFile) {
251
- Remove-Item $BgEnabledFile -Force -ErrorAction SilentlyContinue
252
- }
253
-
254
- # Remove the prepended agent line from audio-effects.cfg
255
- if (Test-Path $AudioEffectsCfg) {
256
- $cfgRaw = Get-Content $AudioEffectsCfg -Raw -ErrorAction SilentlyContinue
257
- $escaped = [regex]::Escape($TempCfgLine)
258
- $cfgRaw = $cfgRaw -replace "^${escaped}\r?\n?", ""
259
- Set-Content $AudioEffectsCfg $cfgRaw -NoNewline
260
- }
261
-
262
- $env:AGENTVIBES_AGENT_NAME = ""
232
+ [System.Environment]::SetEnvironmentVariable("AGENTVIBES_OVERRIDE_MUSIC", $null, "Process")
233
+ [System.Environment]::SetEnvironmentVariable("AGENTVIBES_OVERRIDE_VOLUME", $null, "Process")
263
234
  }
264
235
  }
@@ -20,6 +20,13 @@ param(
20
20
 
21
21
  $ErrorActionPreference = "Stop"
22
22
 
23
+ # Append registry PATH entries so Python-installed scripts (soprano, soprano-webui) are
24
+ # found when spawned from Node.js. Prepend existing PATH to preserve runtime shims
25
+ # (nvm, conda, pyenv) that were added after the process started.
26
+ $env:Path = $env:Path + ";" +
27
+ [System.Environment]::GetEnvironmentVariable("Path", "Machine") + ";" +
28
+ [System.Environment]::GetEnvironmentVariable("Path", "User")
29
+
23
30
  $ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
24
31
  # Validate port is numeric to prevent injection
25
32
  $SopranoPort = "7860"
@@ -101,7 +108,8 @@ if (Test-WebUI) {
101
108
  $SynthMode = "webui"
102
109
  $pythonHelper = Join-Path $ScriptDir "soprano-gradio-synth.py"
103
110
  if (Test-Path $pythonHelper) {
104
- & python $pythonHelper $Text $TempFile $SopranoPort 2>$null
111
+ # Wrap in try/catch: PS7.3+ throws on native non-zero exit with ErrorActionPreference=Stop
112
+ try { & python $pythonHelper $Text $TempFile $SopranoPort 2>$null } catch { }
105
113
  } else {
106
114
  Write-Host "[ERROR] soprano-gradio-synth.py not found" -ForegroundColor Red
107
115
  exit 1
@@ -123,7 +131,8 @@ if (Test-WebUI) {
123
131
  } elseif (Test-SopranoCLI) {
124
132
  # CLI fallback - reloads model each call (slowest)
125
133
  $SynthMode = "cli"
126
- & soprano $Text -o $TempFile -d $SopranoDevice 2>$null
134
+ # Wrap in try/catch: PS7.3+ throws on native non-zero exit with ErrorActionPreference=Stop
135
+ try { & soprano $Text -o $TempFile -d $SopranoDevice 2>$null } catch { }
127
136
  } else {
128
137
  Write-Host "[ERROR] Soprano TTS not installed and no server running on port $SopranoPort" -ForegroundColor Red
129
138
  Write-Host ""
@@ -156,3 +165,5 @@ if (-not $env:AGENTVIBES_NO_PLAY) {
156
165
 
157
166
  Write-Host "Saved to: $TempFile"
158
167
  Write-Host "Voice: Soprano-1.1-80M (Soprano TTS, $SynthMode mode)"
168
+ # Output bare path so play-tts.ps1 can capture it for reverb/bg-music processing
169
+ Write-Output $TempFile