agentvibes 4.2.0 → 4.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agentvibes/bmad/bmad-voices.md +69 -69
- package/.agentvibes/config.json +12 -0
- package/.claude/activation-instructions +54 -54
- package/.claude/audio/tracks/README.md +52 -52
- package/.claude/commands/agent-vibes/add.md +21 -21
- package/.claude/commands/agent-vibes/agent-vibes.md +101 -101
- package/.claude/commands/agent-vibes/agent.md +79 -79
- package/.claude/commands/agent-vibes/background-music.md +111 -111
- package/.claude/commands/agent-vibes/bmad.md +198 -198
- package/.claude/commands/agent-vibes/clean.md +18 -18
- package/.claude/commands/agent-vibes/cleanup.md +18 -18
- package/.claude/commands/agent-vibes/commands.json +145 -145
- package/.claude/commands/agent-vibes/effects.md +97 -97
- package/.claude/commands/agent-vibes/get.md +9 -9
- package/.claude/commands/agent-vibes/hide.md +91 -91
- package/.claude/commands/agent-vibes/language.md +23 -23
- package/.claude/commands/agent-vibes/learn.md +67 -67
- package/.claude/commands/agent-vibes/list.md +13 -13
- package/.claude/commands/agent-vibes/mute.md +37 -37
- package/.claude/commands/agent-vibes/preview.md +17 -17
- package/.claude/commands/agent-vibes/provider.md +68 -68
- package/.claude/commands/agent-vibes/replay-target.md +14 -14
- package/.claude/commands/agent-vibes/sample.md +12 -12
- package/.claude/commands/agent-vibes/set-favorite-voice.md +84 -84
- package/.claude/commands/agent-vibes/set-pretext.md +65 -65
- package/.claude/commands/agent-vibes/set-speed.md +41 -41
- package/.claude/commands/agent-vibes/show.md +84 -84
- package/.claude/commands/agent-vibes/switch.md +87 -87
- package/.claude/commands/agent-vibes/target-voice.md +26 -26
- package/.claude/commands/agent-vibes/target.md +30 -30
- package/.claude/commands/agent-vibes/translate.md +68 -68
- package/.claude/commands/agent-vibes/unmute.md +45 -45
- package/.claude/commands/agent-vibes/verbosity.md +89 -89
- package/.claude/commands/agent-vibes/whoami.md +7 -7
- package/.claude/commands/agent-vibes-bmad-voices.md +117 -117
- package/.claude/commands/agent-vibes-rdp.md +24 -24
- package/.claude/config/agentvibes.json +1 -0
- package/.claude/config/audio-effects.cfg +2 -2
- package/.claude/config/audio-effects.cfg.sample +52 -52
- package/.claude/config/background-music-volume.txt +1 -0
- package/.claude/config/intro-text.txt +1 -0
- package/.claude/config/piper-speech-rate.txt +4 -0
- package/.claude/config/piper-target-speech-rate.txt +1 -0
- package/.claude/config/reverb-level.txt +1 -0
- package/.claude/config/tts-speech-rate.txt +4 -0
- package/.claude/config/tts-target-speech-rate.txt +1 -0
- package/.claude/docs/TERMUX_SETUP.md +408 -408
- package/.claude/github-star-reminder.txt +1 -1
- package/.claude/hooks/README-TTS-QUEUE.md +135 -135
- package/.claude/hooks/audio-cache-utils.sh +246 -246
- package/.claude/hooks/audio-processor.sh +433 -433
- package/.claude/hooks/background-music-manager.sh +404 -404
- package/.claude/hooks/bmad-speak-enhanced.sh +165 -165
- package/.claude/hooks/bmad-speak.sh +269 -269
- package/.claude/hooks/bmad-tts-injector.sh +568 -568
- package/.claude/hooks/bmad-voice-manager.sh +928 -928
- package/.claude/hooks/clawdbot-receiver-SECURE.sh +129 -129
- package/.claude/hooks/clawdbot-receiver.sh +107 -107
- package/.claude/hooks/clean-audio-cache.sh +22 -22
- package/.claude/hooks/cleanup-cache.sh +106 -106
- package/.claude/hooks/configure-rdp-mode.sh +137 -137
- package/.claude/hooks/download-extra-voices.sh +244 -244
- package/.claude/hooks/effects-manager.sh +268 -268
- package/.claude/hooks/github-star-reminder.sh +154 -154
- package/.claude/hooks/language-manager.sh +362 -362
- package/.claude/hooks/learn-manager.sh +492 -492
- package/.claude/hooks/macos-voice-manager.sh +205 -205
- package/.claude/hooks/migrate-background-music.sh +125 -125
- package/.claude/hooks/migrate-to-agentvibes.sh +161 -161
- package/.claude/hooks/optimize-background-music.sh +87 -87
- package/.claude/hooks/path-resolver.sh +60 -60
- package/.claude/hooks/personality-manager.sh +448 -448
- package/.claude/hooks/piper-download-voices.sh +225 -225
- package/.claude/hooks/piper-installer.sh +292 -292
- package/.claude/hooks/piper-multispeaker-registry.sh +171 -171
- package/.claude/hooks/piper-voice-manager.sh +24 -3
- package/.claude/hooks/play-tts-agentvibes-receiver-for-voiceless-connections.sh +90 -90
- package/.claude/hooks/play-tts-enhanced.sh +105 -105
- package/.claude/hooks/play-tts-macos.sh +368 -368
- package/.claude/hooks/play-tts-piper.sh +679 -679
- package/.claude/hooks/play-tts-soprano.sh +356 -356
- package/.claude/hooks/play-tts-ssh-remote.sh +167 -167
- package/.claude/hooks/play-tts-termux-ssh.sh +169 -169
- package/.claude/hooks/play-tts.sh +301 -301
- package/.claude/hooks/prepare-release.sh +54 -54
- package/.claude/hooks/provider-commands.sh +617 -617
- package/.claude/hooks/provider-manager.sh +399 -399
- package/.claude/hooks/replay-target-audio.sh +95 -95
- package/.claude/hooks/requirements.txt +6 -6
- package/.claude/hooks/sentiment-manager.sh +201 -201
- package/.claude/hooks/session-start-tts.sh +81 -81
- package/.claude/hooks/soprano-gradio-synth.py +139 -139
- package/.claude/hooks/speed-manager.sh +291 -291
- package/.claude/hooks/stop-tts.sh +84 -84
- package/.claude/hooks/termux-installer.sh +261 -261
- package/.claude/hooks/translate-manager.sh +341 -341
- package/.claude/hooks/translator.py +237 -237
- package/.claude/hooks/tts-queue-worker.sh +145 -145
- package/.claude/hooks/tts-queue.sh +165 -165
- package/.claude/hooks/verbosity-manager.sh +178 -178
- package/.claude/hooks/voice-manager.sh +548 -548
- package/.claude/hooks-windows/audio-cache-utils.ps1 +119 -119
- package/.claude/hooks-windows/background-music-manager.ps1 +348 -0
- package/.claude/hooks-windows/clean-audio-cache.ps1 +53 -0
- package/.claude/hooks-windows/download-extra-voices.ps1 +185 -0
- package/.claude/hooks-windows/effects-manager.ps1 +294 -0
- package/.claude/hooks-windows/language-manager.ps1 +193 -0
- package/.claude/hooks-windows/learn-manager.ps1 +241 -0
- package/.claude/hooks-windows/personality-manager.ps1 +266 -0
- package/.claude/hooks-windows/play-tts-piper.ps1 +209 -0
- package/.claude/hooks-windows/play-tts-sapi.ps1 +108 -0
- package/.claude/hooks-windows/play-tts-soprano.ps1 +159 -158
- package/.claude/hooks-windows/play-tts-windows-piper.ps1 +50 -5
- package/.claude/hooks-windows/play-tts-windows-sapi.ps1 +108 -108
- package/.claude/hooks-windows/play-tts.ps1 +344 -266
- package/.claude/hooks-windows/provider-manager.ps1 +29 -10
- package/.claude/hooks-windows/session-start-tts.ps1 +124 -124
- package/.claude/hooks-windows/soprano-gradio-synth.py +153 -153
- package/.claude/hooks-windows/speed-manager.ps1 +166 -0
- package/.claude/hooks-windows/verbosity-manager.ps1 +119 -0
- package/.claude/hooks-windows/voice-manager-windows.ps1 +92 -8
- package/.claude/output-styles/agent-vibes.md +202 -202
- package/.claude/personalities/angry.md +14 -14
- package/.claude/personalities/annoying.md +14 -14
- package/.claude/personalities/crass.md +14 -14
- package/.claude/personalities/dramatic.md +14 -14
- package/.claude/personalities/dry-humor.md +50 -50
- package/.claude/personalities/flirty.md +20 -20
- package/.claude/personalities/funny.md +14 -14
- package/.claude/personalities/grandpa.md +32 -32
- package/.claude/personalities/millennial.md +14 -14
- package/.claude/personalities/moody.md +14 -14
- package/.claude/personalities/normal.md +16 -16
- package/.claude/personalities/pirate.md +14 -14
- package/.claude/personalities/poetic.md +14 -14
- package/.claude/personalities/professional.md +14 -14
- package/.claude/personalities/rapper.md +55 -55
- package/.claude/personalities/robot.md +14 -14
- package/.claude/personalities/sarcastic.md +38 -38
- package/.claude/personalities/sassy.md +14 -14
- package/.claude/personalities/surfer-dude.md +14 -14
- package/.claude/personalities/zen.md +14 -14
- package/.claude/settings.json +15 -15
- package/.claude/verbosity.txt +1 -1
- package/.clawdbot/README.md +105 -105
- package/.clawdbot/skill/SKILL.md +241 -241
- package/.mcp.json +12 -0
- package/CLAUDE.md +170 -170
- package/README.md +2029 -2007
- package/RELEASE_NOTES.md +1310 -1203
- package/WINDOWS-SETUP.md +208 -208
- package/bin/agent-vibes +39 -39
- package/bin/agentvibes-voice-browser.js +1840 -1840
- package/bin/agentvibes.js +48 -2
- package/bin/mcp-server.js +121 -121
- package/bin/mcp-server.sh +206 -206
- package/bin/test-bmad-pr +78 -78
- package/mcp-server/QUICK_START.md +203 -203
- package/mcp-server/README.md +345 -345
- package/mcp-server/WINDOWS_SETUP.md +260 -260
- package/mcp-server/docs/troubleshooting-audio.md +313 -313
- package/mcp-server/examples/claude_desktop_config.json +11 -11
- package/mcp-server/examples/claude_desktop_config_piper.json +9 -9
- package/mcp-server/examples/custom_instructions.md +169 -169
- package/mcp-server/install-deps.js +130 -130
- package/mcp-server/pyproject.toml +52 -52
- package/mcp-server/requirements.txt +2 -2
- package/mcp-server/server.py +1465 -1453
- package/mcp-server/test_server.py +395 -395
- package/mcp-server/test_windows_script_parity.py +336 -0
- package/package.json +110 -110
- package/setup-windows.ps1 +815 -815
- package/src/bmad-detector.js +71 -71
- package/src/cli/list-personalities.js +110 -110
- package/src/cli/list-voices.js +114 -114
- package/src/commands/bmad-voices.js +394 -394
- package/src/commands/install-mcp.js +476 -476
- package/src/console/app.js +824 -824
- package/src/console/audio-env.js +20 -1
- package/src/console/brand-colors.js +13 -13
- package/src/console/constants/personalities.js +44 -44
- package/src/console/footer-config.js +50 -50
- package/src/console/modals/modal-overlay.js +247 -247
- package/src/console/navigation.js +62 -62
- package/src/console/tabs/agents-tab.js +1684 -1516
- package/src/console/tabs/help-tab.js +261 -261
- package/src/console/tabs/install-tab.js +1007 -991
- package/src/console/tabs/music-tab.js +22 -8
- package/src/console/tabs/placeholder-tab.js +53 -53
- package/src/console/tabs/readme-tab.js +267 -267
- package/src/console/tabs/receiver-tab.js +1472 -1212
- package/src/console/tabs/settings-tab.js +208 -84
- package/src/console/tabs/voices-tab.js +100 -21
- package/src/console/widgets/destroy-list.js +25 -25
- package/src/console/widgets/format-utils.js +89 -89
- package/src/console/widgets/notice.js +55 -55
- package/src/console/widgets/personality-picker.js +185 -185
- package/src/console/widgets/reverb-picker.js +94 -94
- package/src/console/widgets/track-picker.js +285 -285
- package/src/installer/music-file-input.js +304 -304
- package/src/installer.js +5895 -5829
- package/src/services/agent-voice-store.js +423 -423
- package/src/services/config-service.js +264 -264
- package/src/services/navigation-service.js +123 -123
- package/src/services/provider-service.js +143 -132
- package/src/services/verbosity-service.js +157 -157
- package/src/utils/audio-duration-validator.js +298 -298
- package/src/utils/audio-format-validator.js +277 -277
- package/src/utils/dependency-checker.js +469 -466
- package/src/utils/file-ownership-verifier.js +358 -358
- package/src/utils/list-formatter.js +194 -194
- package/src/utils/music-file-validator.js +285 -285
- package/src/utils/preview-list-prompt.js +136 -136
- package/src/utils/provider-validator.js +96 -12
- package/src/utils/secure-music-storage.js +412 -412
- package/templates/agentvibes-receiver.sh +482 -482
- package/templates/audio/welcome-music.mp3 +0 -0
- package/voice-assignments.json +8244 -8244
- package/.claude/config/background-music-position.txt +0 -1
|
@@ -1,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,348 @@
|
|
|
1
|
+
#
|
|
2
|
+
# File: .claude/hooks-windows/background-music-manager.ps1
|
|
3
|
+
#
|
|
4
|
+
# AgentVibes - Background Music Manager (Windows)
|
|
5
|
+
# Manages background music settings for TTS
|
|
6
|
+
#
|
|
7
|
+
|
|
8
|
+
param(
|
|
9
|
+
[Parameter(Position = 0)]
|
|
10
|
+
[string]$Command = "status",
|
|
11
|
+
|
|
12
|
+
[Parameter(Position = 1)]
|
|
13
|
+
[string]$Arg1 = "",
|
|
14
|
+
|
|
15
|
+
[Parameter(Position = 2)]
|
|
16
|
+
[string]$Arg2 = ""
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
# Resolve paths relative to this script
|
|
20
|
+
$ScriptPath = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
21
|
+
$ClaudeDir = Split-Path -Parent $ScriptPath
|
|
22
|
+
$ConfigDir = Join-Path $ClaudeDir "config"
|
|
23
|
+
$TracksDir = Join-Path (Join-Path $ClaudeDir "audio") "tracks"
|
|
24
|
+
$EnabledFile = Join-Path $ConfigDir "background-music-enabled.txt"
|
|
25
|
+
$VolumeFile = Join-Path $ConfigDir "background-music-volume.txt"
|
|
26
|
+
$AudioEffectsCfg = Join-Path $ConfigDir "audio-effects.cfg"
|
|
27
|
+
|
|
28
|
+
$DefaultVolume = "0.34"
|
|
29
|
+
|
|
30
|
+
# Ensure config directory exists
|
|
31
|
+
if (-not (Test-Path $ConfigDir)) {
|
|
32
|
+
New-Item -ItemType Directory -Path $ConfigDir -Force | Out-Null
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function Test-Enabled {
|
|
36
|
+
if (Test-Path $EnabledFile) {
|
|
37
|
+
$status = (Get-Content $EnabledFile -Raw).Trim()
|
|
38
|
+
return ($status -eq "true" -or $status -eq "on" -or $status -eq "1")
|
|
39
|
+
}
|
|
40
|
+
return $false
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function Get-MusicVolume {
|
|
44
|
+
if (Test-Path $VolumeFile) {
|
|
45
|
+
return (Get-Content $VolumeFile -Raw).Trim()
|
|
46
|
+
}
|
|
47
|
+
return $DefaultVolume
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function Set-Enabled {
|
|
51
|
+
param([string]$Value)
|
|
52
|
+
Set-Content -Path $EnabledFile -Value $Value -NoNewline
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
function Set-MusicVolume {
|
|
56
|
+
param([string]$Value)
|
|
57
|
+
|
|
58
|
+
if ($Value -notmatch '^\d*\.?\d+$') {
|
|
59
|
+
Write-Output "Error: Volume must be a number between 0.0 and 1.0"
|
|
60
|
+
exit 1
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
$num = [double]$Value
|
|
64
|
+
if ($num -lt 0 -or $num -gt 1) {
|
|
65
|
+
Write-Output "Error: Volume must be between 0.0 and 1.0"
|
|
66
|
+
exit 1
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
Set-Content -Path $VolumeFile -Value $Value -NoNewline
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function Get-DefaultTrack {
|
|
73
|
+
if (-not (Test-Path $AudioEffectsCfg)) { return "" }
|
|
74
|
+
|
|
75
|
+
$lines = Get-Content $AudioEffectsCfg
|
|
76
|
+
foreach ($line in $lines) {
|
|
77
|
+
if ($line -match '^default\|') {
|
|
78
|
+
$parts = $line -split '\|'
|
|
79
|
+
if ($parts.Length -ge 3) { return $parts[2] }
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return ""
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function Show-TrackList {
|
|
86
|
+
if (-not (Test-Path $TracksDir)) {
|
|
87
|
+
Write-Output "No tracks folder found at $TracksDir"
|
|
88
|
+
return
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
Write-Output "Available Background Music Tracks"
|
|
92
|
+
Write-Output "===================================="
|
|
93
|
+
Write-Output ""
|
|
94
|
+
|
|
95
|
+
$files = Get-ChildItem -Path $TracksDir -File -Include "*.mp3", "*.wav", "*.ogg" -Recurse | Sort-Object Name
|
|
96
|
+
$count = 0
|
|
97
|
+
|
|
98
|
+
foreach ($file in $files) {
|
|
99
|
+
$count++
|
|
100
|
+
Write-Output ("{0,2}. {1}" -f $count, $file.Name)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if ($count -eq 0) {
|
|
104
|
+
Write-Output "No audio files found in tracks folder"
|
|
105
|
+
} else {
|
|
106
|
+
Write-Output ""
|
|
107
|
+
Write-Output "Total: $count track(s)"
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function Set-DefaultTrack {
|
|
112
|
+
param([string]$Track)
|
|
113
|
+
|
|
114
|
+
if (-not $Track) {
|
|
115
|
+
Write-Output "Error: No track name provided"
|
|
116
|
+
Write-Output "Usage: background-music-manager.ps1 set-default TRACK_NAME"
|
|
117
|
+
exit 1
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
$trackPath = Join-Path $TracksDir $Track
|
|
121
|
+
if (-not (Test-Path $trackPath)) {
|
|
122
|
+
Write-Output "Error: Track '$Track' not found in tracks folder"
|
|
123
|
+
Write-Output "Run 'background-music-manager.ps1 list' to see available tracks"
|
|
124
|
+
exit 1
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if (-not (Test-Path $AudioEffectsCfg)) {
|
|
128
|
+
Write-Output "Error: audio-effects.cfg not found at $AudioEffectsCfg"
|
|
129
|
+
exit 1
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
$lines = Get-Content $AudioEffectsCfg
|
|
133
|
+
$found = $false
|
|
134
|
+
$newLines = @()
|
|
135
|
+
|
|
136
|
+
foreach ($line in $lines) {
|
|
137
|
+
if ($line -match '^default\|') {
|
|
138
|
+
$parts = $line -split '\|'
|
|
139
|
+
if ($parts.Length -ge 4) {
|
|
140
|
+
$newLines += "$($parts[0])|$($parts[1])|$Track|$($parts[3])"
|
|
141
|
+
} else {
|
|
142
|
+
$newLines += "default||$Track|0.30"
|
|
143
|
+
}
|
|
144
|
+
$found = $true
|
|
145
|
+
} else {
|
|
146
|
+
$newLines += $line
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
if (-not $found) {
|
|
151
|
+
Write-Output "Error: No default entry found in audio-effects.cfg"
|
|
152
|
+
exit 1
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
Set-Content -Path $AudioEffectsCfg -Value ($newLines -join "`n")
|
|
156
|
+
|
|
157
|
+
if (-not (Test-Enabled)) {
|
|
158
|
+
Set-Enabled "true"
|
|
159
|
+
Write-Output "[OK] Default background music set to: $Track"
|
|
160
|
+
Write-Output "[OK] Background music enabled automatically"
|
|
161
|
+
} else {
|
|
162
|
+
Write-Output "[OK] Default background music set to: $Track"
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
function Set-AgentTrack {
|
|
167
|
+
param([string]$Agent, [string]$Track)
|
|
168
|
+
|
|
169
|
+
if (-not $Agent -or -not $Track) {
|
|
170
|
+
Write-Output "Error: Agent name and track required"
|
|
171
|
+
Write-Output "Usage: background-music-manager.ps1 set-agent AGENT_NAME TRACK_NAME"
|
|
172
|
+
exit 1
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
$trackPath = Join-Path $TracksDir $Track
|
|
176
|
+
if (-not (Test-Path $trackPath)) {
|
|
177
|
+
Write-Output "Error: Track not found: $Track"
|
|
178
|
+
Write-Output "Run 'background-music-manager.ps1 list' to see available tracks"
|
|
179
|
+
exit 1
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
if (-not (Test-Path $AudioEffectsCfg)) {
|
|
183
|
+
Write-Output "Error: audio-effects.cfg not found"
|
|
184
|
+
exit 1
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
$lines = Get-Content $AudioEffectsCfg
|
|
188
|
+
$found = $false
|
|
189
|
+
$newLines = @()
|
|
190
|
+
|
|
191
|
+
foreach ($line in $lines) {
|
|
192
|
+
if ($line -match "^${Agent}\|") {
|
|
193
|
+
$parts = $line -split '\|'
|
|
194
|
+
if ($parts.Length -ge 4) {
|
|
195
|
+
$newLines += "$($parts[0])|$($parts[1])|$Track|$($parts[3])"
|
|
196
|
+
} else {
|
|
197
|
+
$newLines += "${Agent}||${Track}|0.30"
|
|
198
|
+
}
|
|
199
|
+
$found = $true
|
|
200
|
+
} else {
|
|
201
|
+
$newLines += $line
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
if (-not $found) {
|
|
206
|
+
$newLines += "${Agent}||${Track}|0.30"
|
|
207
|
+
Write-Output "[OK] Added background music for ${Agent}: $Track"
|
|
208
|
+
} else {
|
|
209
|
+
Write-Output "[OK] Updated background music for ${Agent}: $Track"
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
Set-Content -Path $AudioEffectsCfg -Value ($newLines -join "`n")
|
|
213
|
+
|
|
214
|
+
if (-not (Test-Enabled)) {
|
|
215
|
+
Set-Enabled "true"
|
|
216
|
+
Write-Output "[OK] Background music enabled automatically"
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
function Set-AllAgentsTrack {
|
|
221
|
+
param([string]$Track)
|
|
222
|
+
|
|
223
|
+
if (-not $Track) {
|
|
224
|
+
Write-Output "Error: Track name required"
|
|
225
|
+
Write-Output "Usage: background-music-manager.ps1 set-all TRACK_NAME"
|
|
226
|
+
exit 1
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
$trackPath = Join-Path $TracksDir $Track
|
|
230
|
+
if (-not (Test-Path $trackPath)) {
|
|
231
|
+
Write-Output "Error: Track not found: $Track"
|
|
232
|
+
Write-Output "Run 'background-music-manager.ps1 list' to see available tracks"
|
|
233
|
+
exit 1
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
if (-not (Test-Path $AudioEffectsCfg)) {
|
|
237
|
+
Write-Output "Error: audio-effects.cfg not found"
|
|
238
|
+
exit 1
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
$lines = Get-Content $AudioEffectsCfg
|
|
242
|
+
$newLines = @()
|
|
243
|
+
$count = 0
|
|
244
|
+
|
|
245
|
+
foreach ($line in $lines) {
|
|
246
|
+
if ($line -match '^\s*#' -or $line -match '^\s*$') {
|
|
247
|
+
$newLines += $line
|
|
248
|
+
continue
|
|
249
|
+
}
|
|
250
|
+
if ($line -match '^_party_mode\|') {
|
|
251
|
+
$newLines += $line
|
|
252
|
+
continue
|
|
253
|
+
}
|
|
254
|
+
$parts = $line -split '\|'
|
|
255
|
+
if ($parts.Length -ge 4) {
|
|
256
|
+
$newLines += "$($parts[0])|$($parts[1])|$Track|$($parts[3])"
|
|
257
|
+
$count++
|
|
258
|
+
} else {
|
|
259
|
+
$newLines += $line
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
Set-Content -Path $AudioEffectsCfg -Value ($newLines -join "`n")
|
|
264
|
+
Write-Output "[OK] Updated background music for $count agents: $Track"
|
|
265
|
+
|
|
266
|
+
if (-not (Test-Enabled)) {
|
|
267
|
+
Set-Enabled "true"
|
|
268
|
+
Write-Output "[OK] Background music enabled automatically"
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
function Show-Status {
|
|
273
|
+
Write-Output "Background Music Status"
|
|
274
|
+
Write-Output "=========================="
|
|
275
|
+
|
|
276
|
+
if (Test-Enabled) {
|
|
277
|
+
Write-Output "Status: ENABLED"
|
|
278
|
+
} else {
|
|
279
|
+
Write-Output "Status: DISABLED"
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
$vol = Get-MusicVolume
|
|
283
|
+
$pct = [math]::Round([double]$vol * 100)
|
|
284
|
+
Write-Output ('Volume: {0} ({1}%)' -f $vol, $pct)
|
|
285
|
+
|
|
286
|
+
$defaultTrack = Get-DefaultTrack
|
|
287
|
+
if ($defaultTrack) {
|
|
288
|
+
Write-Output "Default Track: $defaultTrack"
|
|
289
|
+
} else {
|
|
290
|
+
Write-Output "Default Track: none"
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
if (Test-Path $TracksDir) {
|
|
294
|
+
$count = (Get-ChildItem -Path $TracksDir -File -Include "*.mp3", "*.wav", "*.ogg" -Recurse).Count
|
|
295
|
+
Write-Output "Tracks: $count audio file(s) in tracks folder"
|
|
296
|
+
} else {
|
|
297
|
+
Write-Output "Tracks: No tracks folder found"
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
Write-Output ""
|
|
301
|
+
Write-Output "Dependencies:"
|
|
302
|
+
if (Get-Command sox -ErrorAction SilentlyContinue) {
|
|
303
|
+
Write-Output " sox: installed"
|
|
304
|
+
} else {
|
|
305
|
+
Write-Output " sox: not installed (needed for effects)"
|
|
306
|
+
}
|
|
307
|
+
if (Get-Command ffmpeg -ErrorAction SilentlyContinue) {
|
|
308
|
+
Write-Output " ffmpeg: installed"
|
|
309
|
+
} else {
|
|
310
|
+
Write-Output " ffmpeg: not installed (needed for mixing)"
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
# Main command handler
|
|
315
|
+
if ($Command -in "status", "") {
|
|
316
|
+
Show-Status
|
|
317
|
+
} elseif ($Command -in "on", "enable", "true") {
|
|
318
|
+
Set-Enabled "true"
|
|
319
|
+
$vol = Get-MusicVolume
|
|
320
|
+
Write-Output "[OK] Background music ENABLED at $vol volume"
|
|
321
|
+
} elseif ($Command -in "off", "disable", "false") {
|
|
322
|
+
Set-Enabled "false"
|
|
323
|
+
Write-Output "[OK] Background music DISABLED"
|
|
324
|
+
} elseif ($Command -eq "volume") {
|
|
325
|
+
if (-not $Arg1) {
|
|
326
|
+
$vol = Get-MusicVolume
|
|
327
|
+
Write-Output "Current volume: $vol"
|
|
328
|
+
} else {
|
|
329
|
+
Set-MusicVolume $Arg1
|
|
330
|
+
Write-Output "[OK] Background music volume set to $Arg1"
|
|
331
|
+
}
|
|
332
|
+
} elseif ($Command -eq "list") {
|
|
333
|
+
Show-TrackList
|
|
334
|
+
} elseif ($Command -eq "set-default") {
|
|
335
|
+
Set-DefaultTrack $Arg1
|
|
336
|
+
} elseif ($Command -eq "set-agent") {
|
|
337
|
+
Set-AgentTrack $Arg1 $Arg2
|
|
338
|
+
} elseif ($Command -eq "set-all") {
|
|
339
|
+
Set-AllAgentsTrack $Arg1
|
|
340
|
+
} elseif ($Command -eq "get-enabled") {
|
|
341
|
+
if (Test-Enabled) { Write-Output "true" } else { Write-Output "false" }
|
|
342
|
+
} elseif ($Command -eq "get-volume") {
|
|
343
|
+
$vol = Get-MusicVolume
|
|
344
|
+
Write-Output $vol
|
|
345
|
+
} else {
|
|
346
|
+
Write-Output "Usage: background-music-manager.ps1 {status|on|off|volume [X]|list|set-default TRACK|set-agent AGENT TRACK|set-all TRACK|get-enabled|get-volume}"
|
|
347
|
+
exit 1
|
|
348
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#
|
|
2
|
+
# File: .claude/hooks-windows/clean-audio-cache.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
|
+
# Non-Interactive TTS Audio Cache Cleanup
|
|
10
|
+
# Used by /agent-vibes:clean skill and MCP clean_audio_cache tool
|
|
11
|
+
|
|
12
|
+
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
13
|
+
$ClaudeDir = Split-Path -Parent $ScriptDir
|
|
14
|
+
$AudioDir = Join-Path $ClaudeDir "audio"
|
|
15
|
+
|
|
16
|
+
Write-Output "AgentVibes Cache Cleanup (Non-Interactive)"
|
|
17
|
+
Write-Output ""
|
|
18
|
+
|
|
19
|
+
if (-not (Test-Path $AudioDir)) {
|
|
20
|
+
Write-Output "Audio directory not found: $AudioDir"
|
|
21
|
+
Write-Output "Nothing to clean."
|
|
22
|
+
exit 0
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
# Count and measure TTS files (preserve tracks/ subdirectory)
|
|
26
|
+
$ttsFiles = Get-ChildItem -Path $AudioDir -File -Include "*.wav", "*.mp3", "*.aiff" -Recurse -ErrorAction SilentlyContinue |
|
|
27
|
+
Where-Object { $_.DirectoryName -notmatch '\\tracks$' -and $_.DirectoryName -notmatch '\\tracks\\' }
|
|
28
|
+
|
|
29
|
+
if (-not $ttsFiles -or $ttsFiles.Count -eq 0) {
|
|
30
|
+
Write-Output "No TTS cache files found."
|
|
31
|
+
Write-Output "Audio directory is clean."
|
|
32
|
+
exit 0
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
$fileCount = if ($ttsFiles -is [array]) { $ttsFiles.Count } else { 1 }
|
|
36
|
+
$totalSize = ($ttsFiles | Measure-Object -Property Length -Sum).Sum
|
|
37
|
+
$sizeMB = [math]::Round($totalSize / 1MB, 2)
|
|
38
|
+
|
|
39
|
+
# Delete files
|
|
40
|
+
$deleted = 0
|
|
41
|
+
foreach ($file in $ttsFiles) {
|
|
42
|
+
try {
|
|
43
|
+
Remove-Item $file.FullName -Force -ErrorAction Stop
|
|
44
|
+
$deleted++
|
|
45
|
+
} catch {
|
|
46
|
+
Write-Output "Warning: Could not delete $($file.Name): $_"
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
Write-Output "Cleaned $deleted TTS cache files"
|
|
51
|
+
Write-Output "Freed ${sizeMB} MB of disk space"
|
|
52
|
+
Write-Output ""
|
|
53
|
+
Write-Output "Background music tracks preserved."
|