agentvibes 5.6.7 → 5.6.9
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/LITE-MODE.md +236 -0
- package/.agentvibes/README.md +136 -0
- package/.agentvibes/backup/session-start-tts.sh.20251210_212814 +141 -0
- package/.agentvibes/backups/agents/analyst_20260204_144958.md +78 -0
- package/.agentvibes/backups/agents/architect_20260204_144958.md +72 -0
- package/.agentvibes/backups/agents/dev_20260204_144958.md +74 -0
- package/.agentvibes/backups/agents/pm_20260204_144958.md +72 -0
- package/.agentvibes/backups/agents/quick-flow-solo-dev_20260204_144958.md +64 -0
- package/.agentvibes/backups/agents/sm_20260204_144958.md +87 -0
- package/.agentvibes/backups/agents/tea_20260204_144958.md +79 -0
- package/.agentvibes/backups/agents/tech-writer_20260204_144958.md +82 -0
- package/.agentvibes/backups/agents/ux-designer_20260204_144958.md +80 -0
- package/.agentvibes/config/README-personality-defaults.md +162 -0
- package/.agentvibes/config/agentvibes.json +1 -0
- package/.agentvibes/config/mode.txt +1 -0
- package/.agentvibes/config/personality-voice-defaults.default.json +21 -0
- package/.agentvibes/config/save-audio.txt +1 -0
- package/.agentvibes/config/voice-metadata.json +160 -0
- package/.agentvibes/config.json +38 -1
- package/.agentvibes/hooks/help.sh +191 -0
- package/.agentvibes/hooks/post-tool-use-lite.sh +111 -0
- package/.agentvibes/hooks/save-audio-manager.sh +162 -0
- package/.agentvibes/hooks/session-start-full-optimized.sh +102 -0
- package/.agentvibes/hooks/session-start-full.sh +142 -0
- package/.agentvibes/hooks/session-start-lite-v2.sh +34 -0
- package/.agentvibes/hooks/session-start-lite.sh +29 -0
- package/.agentvibes/hooks/stop-lite.sh +115 -0
- package/.agentvibes/hooks/switch-mode.sh +215 -0
- package/.agentvibes/output-styles/audio-summary.md +30 -0
- package/.claude/audio/voice-samples/piper/alan.wav +0 -0
- package/.claude/audio/voice-samples/piper/amy.wav +0 -0
- package/.claude/audio/voice-samples/piper/charlotte.wav +0 -0
- package/.claude/audio/voice-samples/piper/joe.wav +0 -0
- package/.claude/audio/voice-samples/piper/john.wav +0 -0
- package/.claude/audio/voice-samples/piper/katherine.wav +0 -0
- package/.claude/audio/voice-samples/piper/kristin.wav +0 -0
- package/.claude/audio/voice-samples/piper/linda.wav +0 -0
- package/.claude/audio/voice-samples/piper/marcus.wav +0 -0
- package/.claude/audio/voice-samples/piper/ryan.wav +0 -0
- package/.claude/commands/agent-vibes/provider.md +0 -0
- package/.claude/commands/agent-vibes-bmad-voices.md +117 -117
- package/.claude/commands/agent-vibes-rdp.md +24 -24
- package/.claude/config/audio-effects.cfg +6 -1
- package/.claude/config/background-music-position.txt +8 -6
- package/.claude/config/reverb-level.txt +0 -0
- package/.claude/docs/TERMUX_SETUP.md +408 -408
- package/.claude/github-star-reminder.txt +1 -1
- package/.claude/hooks/audio-cache-utils.sh +0 -0
- package/.claude/hooks/audio-processor.sh +0 -0
- package/.claude/hooks/background-music-manager.sh +0 -0
- package/.claude/hooks/bmad-party-manager.sh +225 -0
- package/.claude/hooks/bmad-party-speak.sh +0 -0
- package/.claude/hooks/bmad-speak-enhanced.sh +0 -0
- package/.claude/hooks/bmad-speak.sh +0 -0
- package/.claude/hooks/bmad-tts-injector.sh +0 -0
- package/.claude/hooks/bmad-voice-manager.sh +0 -0
- package/.claude/hooks/clawdbot-receiver-SECURE.sh +0 -0
- package/.claude/hooks/clawdbot-receiver.sh +0 -0
- package/.claude/hooks/clean-audio-cache.sh +0 -0
- package/.claude/hooks/cleanup-cache.sh +0 -0
- package/.claude/hooks/configure-rdp-mode.sh +0 -0
- package/.claude/hooks/download-extra-voices.sh +0 -0
- package/.claude/hooks/effects-manager.sh +0 -0
- package/.claude/hooks/github-star-reminder.sh +0 -0
- package/.claude/hooks/language-manager.sh +0 -0
- package/.claude/hooks/learn-manager.sh +0 -0
- package/.claude/hooks/macos-voice-manager.sh +0 -0
- package/.claude/hooks/migrate-background-music.sh +0 -0
- package/.claude/hooks/migrate-to-agentvibes.sh +0 -0
- package/.claude/hooks/optimize-background-music.sh +0 -0
- package/.claude/hooks/path-resolver.sh +0 -0
- package/.claude/hooks/personality-manager.sh +0 -0
- package/.claude/hooks/piper-download-voices.sh +0 -0
- package/.claude/hooks/piper-installer.sh +0 -0
- package/.claude/hooks/piper-multispeaker-registry.sh +0 -0
- package/.claude/hooks/piper-voice-manager.sh +0 -0
- package/.claude/hooks/play-tts-agentvibes-receiver-for-voiceless-connections.sh +0 -0
- package/.claude/hooks/play-tts-enhanced.sh +0 -0
- package/.claude/hooks/play-tts-macos.sh +0 -0
- package/.claude/hooks/play-tts-piper.sh +40 -2
- package/.claude/hooks/play-tts-soprano.sh +0 -0
- package/.claude/hooks/play-tts-ssh-remote.sh +0 -0
- package/.claude/hooks/play-tts-termux-ssh.sh +0 -0
- package/.claude/hooks/play-tts-windows-receiver.sh +0 -0
- package/.claude/hooks/play-tts.sh +13 -0
- package/.claude/hooks/post-response.sh +41 -0
- package/.claude/hooks/prepare-release.sh +0 -0
- package/.claude/hooks/provider-commands.sh +0 -0
- package/.claude/hooks/provider-manager.sh +0 -0
- package/.claude/hooks/replay-target-audio.sh +0 -0
- package/.claude/hooks/sentiment-manager.sh +0 -0
- package/.claude/hooks/session-start-tts.sh +48 -13
- package/.claude/hooks/soprano-gradio-synth.py +0 -0
- package/.claude/hooks/speed-manager.sh +0 -0
- package/.claude/hooks/stop-tts.sh +0 -0
- package/.claude/hooks/stop.sh +63 -0
- package/.claude/hooks/termux-installer.sh +0 -0
- package/.claude/hooks/translate-manager.sh +0 -0
- package/.claude/hooks/translator.py +0 -0
- package/.claude/hooks/tts-queue-worker.sh +0 -0
- package/.claude/hooks/tts-queue.sh +0 -0
- package/.claude/hooks/verbosity-manager.sh +0 -0
- package/.claude/hooks/voice-manager.sh +0 -0
- package/.claude/hooks-windows/audio-cache-utils.ps1 +119 -119
- package/.claude/hooks-windows/play-tts-piper.ps1 +26 -1
- package/.claude/hooks-windows/play-tts.ps1 +25 -1
- package/.claude/hooks-windows/session-start-tts.ps1 +28 -9
- package/.claude/piper-voices-dir.txt +1 -0
- package/.claude/settings.json +2 -2
- package/.clawdbot/README.md +105 -105
- package/.mcp.json +32 -3
- package/CLAUDE.md +9 -0
- package/README.md +21 -3
- package/RELEASE_NOTES.md +61 -0
- package/WINDOWS-SETUP.md +208 -208
- package/bin/agent-vibes +0 -0
- package/bin/agentvibes-voice-browser.js +59 -4
- package/bin/agentvibes.js +0 -0
- package/bin/ensure-soprano-running.sh +43 -0
- package/bin/mcp-server.js +121 -121
- package/bin/mcp-server.sh +0 -0
- 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 +177 -130
- package/mcp-server/server.py +1797 -1787
- package/mcp-server/test_server.py +0 -0
- package/package.json +1 -1
- package/src/console/app.js +6 -0
- package/src/console/tabs/music-tab.js +18 -2
- package/src/console/widgets/format-utils.js +11 -2
- package/src/installer.js +38 -37
- package/src/services/llm-provider-service.js +28 -9
- package/src/utils/voice-names.js +2 -0
- package/templates/agentvibes-receiver.sh +0 -0
- package/templates/audio/welcome-music.mp3 +0 -0
- package/.claude/hooks/play-tts-agentvibes-receiver.sh +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
|
+
}
|
|
@@ -75,6 +75,7 @@ elseif (Test-Path $VoiceFile) {
|
|
|
75
75
|
# IMPORTANT: The trailing number in a speaker name (e.g. "Holly-7") is a disambiguation
|
|
76
76
|
# suffix, NOT the speaker index. Real index must be looked up from voice-assignments.json.
|
|
77
77
|
$SpeakerId = $null
|
|
78
|
+
$DisplayVoiceName = $VoiceName # preserve full name (e.g. "model::SpeakerName") for logging
|
|
78
79
|
|
|
79
80
|
if ($VoiceName -match '::') {
|
|
80
81
|
$parts = $VoiceName -split '::'
|
|
@@ -227,7 +228,31 @@ try {
|
|
|
227
228
|
|
|
228
229
|
# Display results
|
|
229
230
|
Write-Host "[OK] Saved to: $AudioFile" -ForegroundColor Green
|
|
230
|
-
|
|
231
|
+
|
|
232
|
+
# Build friendly label: "model::Mike-13 [Mike Nash]"
|
|
233
|
+
$SURNAME_POOL = @('Bell','Carter','Davis','Ellis','Foster','Gray','Hayes','Irving','Jones','Knox','Lane','Mason','Nash','Owens','Pierce','Quinn')
|
|
234
|
+
$VoiceDisplayLabel = $DisplayVoiceName
|
|
235
|
+
if ($DisplayVoiceName -match '::(.+)$') {
|
|
236
|
+
$sp = $Matches[1]
|
|
237
|
+
# Skip 16Speakers names (contain underscore — already first_last format)
|
|
238
|
+
if ($sp -notmatch '_') {
|
|
239
|
+
$friendly = $null
|
|
240
|
+
if ($sp -match '^(.+)-(\d+)$') {
|
|
241
|
+
if ([int]$Matches[2] -ge 2) {
|
|
242
|
+
$friendly = "$($Matches[1]) $($SURNAME_POOL[([int]$Matches[2] - 1) % $SURNAME_POOL.Length])"
|
|
243
|
+
} else {
|
|
244
|
+
# n=1: strip suffix, use Bell — matches uniquifyVoiceName JS behaviour
|
|
245
|
+
$friendly = "$($Matches[1]) $($SURNAME_POOL[0])"
|
|
246
|
+
}
|
|
247
|
+
} elseif ($sp -match '\s') {
|
|
248
|
+
$friendly = $sp
|
|
249
|
+
} else {
|
|
250
|
+
$friendly = "$sp $($SURNAME_POOL[0])"
|
|
251
|
+
}
|
|
252
|
+
if ($null -ne $friendly -and $friendly -ne $sp) { $VoiceDisplayLabel = "$DisplayVoiceName [$friendly]" }
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
Write-Host "[VOICE] Voice used: $VoiceDisplayLabel (Piper)" -ForegroundColor Green
|
|
231
256
|
|
|
232
257
|
# Apply audio effects (reverb, background music) if processor script exists.
|
|
233
258
|
# SKIP when AGENTVIBES_NO_PLAY is set — that means the parent play-tts.ps1
|
|
@@ -16,7 +16,13 @@ param(
|
|
|
16
16
|
# When provided, the router looks up an `llm:<name>` row in audio-effects.cfg
|
|
17
17
|
# to apply LLM-specific voice, pretext, reverb, and engine settings.
|
|
18
18
|
[Parameter(Mandatory = $false)]
|
|
19
|
-
[string]$llm = ""
|
|
19
|
+
[string]$llm = "",
|
|
20
|
+
|
|
21
|
+
# Project directory override. session-start-tts.ps1 bakes the session's
|
|
22
|
+
# CLAUDE_PROJECT_DIR value here so per-project config is found even when
|
|
23
|
+
# Bash tool calls do not propagate CLAUDE_PROJECT_DIR to child processes.
|
|
24
|
+
[Parameter(Mandatory = $false)]
|
|
25
|
+
[string]$ProjectDir = ""
|
|
20
26
|
)
|
|
21
27
|
|
|
22
28
|
# Text-file handoff: the SSH receiver watcher writes long/special-char text to
|
|
@@ -31,6 +37,16 @@ if ($Text -eq "__from_file__" -and $env:AGENTVIBES_TEXT_FILE) {
|
|
|
31
37
|
}
|
|
32
38
|
}
|
|
33
39
|
|
|
40
|
+
# If -ProjectDir was passed (by session-start-tts.ps1), promote it to the
|
|
41
|
+
# CLAUDE_PROJECT_DIR env var so the per-LLM config lookup below finds it.
|
|
42
|
+
# This ensures per-project audio settings work even when Bash tool calls
|
|
43
|
+
# don't automatically inherit CLAUDE_PROJECT_DIR from Claude Code.
|
|
44
|
+
if ($ProjectDir -and (Test-Path $ProjectDir)) {
|
|
45
|
+
# Always prefer the explicitly-injected project dir; validates path exists
|
|
46
|
+
# before trusting it (fixes both the stale-env-var override bug and path injection).
|
|
47
|
+
$env:CLAUDE_PROJECT_DIR = $ProjectDir
|
|
48
|
+
}
|
|
49
|
+
|
|
34
50
|
# Configuration paths
|
|
35
51
|
# First check if we're running from a project directory with .claude
|
|
36
52
|
$ScriptPath = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
@@ -187,6 +203,14 @@ if ($llm -and $llm -notmatch '^[a-zA-Z0-9][a-zA-Z0-9_-]*$') {
|
|
|
187
203
|
}
|
|
188
204
|
|
|
189
205
|
# --- Default fallback --------------------------------------------------------
|
|
206
|
+
# When no -llm flag is passed (e.g. hooks invoked by Claude Code without the
|
|
207
|
+
# flag), check AGENTVIBES_LLM_KEY first — it is set by the hook infrastructure
|
|
208
|
+
# as "llm:<name>" and carries the active LLM identity. Strip the "llm:" prefix
|
|
209
|
+
# to get the bare key used for config lookup.
|
|
210
|
+
if (-not $llm -and $env:AGENTVIBES_LLM_KEY -match '^llm:([a-zA-Z0-9][a-zA-Z0-9_-]*)$') {
|
|
211
|
+
$llm = $Matches[1]
|
|
212
|
+
}
|
|
213
|
+
|
|
190
214
|
# An empty $llm routes through the "default" pseudo-LLM. Users who configure
|
|
191
215
|
# an `llm:default` row in audio-effects.cfg get consistent audio settings for
|
|
192
216
|
# every LLM that doesn't pass its own -llm flag — a convenient global override
|
|
@@ -9,18 +9,37 @@
|
|
|
9
9
|
|
|
10
10
|
$ErrorActionPreference = "Stop"
|
|
11
11
|
|
|
12
|
-
# Get script directory
|
|
12
|
+
# Get script directory and resolve absolute path to play-tts.ps1.
|
|
13
|
+
# Using an absolute path in the injected protocol ensures the correct play-tts.ps1
|
|
14
|
+
# is called regardless of the working directory when Claude runs the command.
|
|
13
15
|
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
16
|
+
$PlayTtsPath = Join-Path $ScriptDir "play-tts.ps1"
|
|
14
17
|
|
|
15
18
|
# Check if AgentVibes is installed
|
|
16
|
-
if (-not (Test-Path
|
|
19
|
+
if (-not (Test-Path $PlayTtsPath)) {
|
|
17
20
|
# AgentVibes not installed, don't inject anything
|
|
18
21
|
exit 0
|
|
19
22
|
}
|
|
20
23
|
|
|
21
|
-
#
|
|
22
|
-
|
|
23
|
-
|
|
24
|
+
# Capture project dir NOW while Claude Code has set it correctly.
|
|
25
|
+
# Bash tool calls (how Claude actually runs play-tts.ps1) do not
|
|
26
|
+
# automatically receive CLAUDE_PROJECT_DIR, so we bake the value
|
|
27
|
+
# into the injected protocol command via the -ProjectDir parameter.
|
|
28
|
+
$CapturedProjectDir = ""
|
|
29
|
+
if ($env:CLAUDE_PROJECT_DIR -and (Test-Path "$env:CLAUDE_PROJECT_DIR\.claude")) {
|
|
30
|
+
$CapturedProjectDir = $env:CLAUDE_PROJECT_DIR
|
|
31
|
+
$ProjectClaudeDir = "$env:CLAUDE_PROJECT_DIR\.claude"
|
|
32
|
+
} else {
|
|
33
|
+
$ProjectClaudeDir = Join-Path (Split-Path -Parent (Split-Path -Parent $ScriptDir)) ".claude"
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
# Build the -ProjectDir flag to inject into TTS commands (empty string = omit flag).
|
|
37
|
+
# Sanitize: strip any embedded quotes that would break PowerShell argument quoting.
|
|
38
|
+
$ProjectDirFlag = ""
|
|
39
|
+
if ($CapturedProjectDir) {
|
|
40
|
+
$SafeProjectDir = $CapturedProjectDir -replace '"', ''
|
|
41
|
+
$ProjectDirFlag = " -ProjectDir `"$SafeProjectDir`""
|
|
42
|
+
}
|
|
24
43
|
|
|
25
44
|
# Check for sentiment (priority) or personality (fallback)
|
|
26
45
|
$Sentiment = ""
|
|
@@ -65,14 +84,14 @@ Write-Output @"
|
|
|
65
84
|
|
|
66
85
|
**CRITICAL: You MUST execute TTS at TWO points for EVERY user interaction:**
|
|
67
86
|
|
|
68
|
-
1. **Acknowledgment** - Start of task: ``Bash: powershell -NoProfile -ExecutionPolicy Bypass -File "
|
|
69
|
-
2. **Completion** - End of task: ``Bash: powershell -NoProfile -ExecutionPolicy Bypass -File "
|
|
87
|
+
1. **Acknowledgment** - Start of task: ``Bash: powershell -NoProfile -ExecutionPolicy Bypass -File "$PlayTtsPath" "[action]" -llm claude-code$ProjectDirFlag``
|
|
88
|
+
2. **Completion** - End of task: ``Bash: powershell -NoProfile -ExecutionPolicy Bypass -File "$PlayTtsPath" "[result + key details]" -llm claude-code$ProjectDirFlag``
|
|
70
89
|
|
|
71
90
|
**Example:**
|
|
72
91
|
``````
|
|
73
|
-
[Bash: powershell -NoProfile -ExecutionPolicy Bypass -File "
|
|
92
|
+
[Bash: powershell -NoProfile -ExecutionPolicy Bypass -File "$PlayTtsPath" "Checking git status" -llm claude-code$ProjectDirFlag]
|
|
74
93
|
[work...]
|
|
75
|
-
[Bash: powershell -NoProfile -ExecutionPolicy Bypass -File "
|
|
94
|
+
[Bash: powershell -NoProfile -ExecutionPolicy Bypass -File "$PlayTtsPath" "Repository is clean, no changes" -llm claude-code$ProjectDirFlag]
|
|
76
95
|
``````
|
|
77
96
|
|
|
78
97
|
"@
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/home/fire/.claude/piper-voices
|
package/.claude/settings.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"hooks": [
|
|
7
7
|
{
|
|
8
8
|
"type": "command",
|
|
9
|
-
"command": "powershell -NoProfile -ExecutionPolicy Bypass -File \"$
|
|
9
|
+
"command": "powershell -NoProfile -ExecutionPolicy Bypass -File \"$HOME\\.claude\\hooks-windows\\session-start-tts.ps1\""
|
|
10
10
|
}
|
|
11
11
|
]
|
|
12
12
|
}
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"hooks": [
|
|
17
17
|
{
|
|
18
18
|
"type": "command",
|
|
19
|
-
"command": "bash \"$
|
|
19
|
+
"command": "bash \"$HOME/.claude/hooks/session-start-tts.sh\""
|
|
20
20
|
}
|
|
21
21
|
]
|
|
22
22
|
}
|
package/.clawdbot/README.md
CHANGED
|
@@ -1,105 +1,105 @@
|
|
|
1
|
-
# Clawdbot Integration
|
|
2
|
-
|
|
3
|
-
AgentVibes TTS integration for Clawdbot - the AI assistant framework.
|
|
4
|
-
|
|
5
|
-
## What is Clawdbot?
|
|
6
|
-
|
|
7
|
-
Clawdbot is a powerful AI assistant framework that connects Claude AI to messaging platforms (WhatsApp, Telegram, Discord, etc.) and provides extensible skills.
|
|
8
|
-
|
|
9
|
-
**Website**: https://clawd.bot
|
|
10
|
-
**GitHub**: https://github.com/clawdbot/clawdbot
|
|
11
|
-
|
|
12
|
-
## AgentVibes + Clawdbot
|
|
13
|
-
|
|
14
|
-
This integration provides Clawdbot with professional TTS capabilities using AgentVibes:
|
|
15
|
-
|
|
16
|
-
- **Free & Offline**: No API costs, works without internet
|
|
17
|
-
- **50+ Voices**: Professional AI voices in 30+ languages
|
|
18
|
-
- **Remote SSH Support**: Audio tunnels from server to local machine
|
|
19
|
-
- **Zero Setup**: Automatic when AgentVibes is installed
|
|
20
|
-
|
|
21
|
-
## Installation
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
npx agentvibes install
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
That's it! AgentVibes is ready to use.
|
|
28
|
-
|
|
29
|
-
## Usage from Clawdbot
|
|
30
|
-
|
|
31
|
-
Once installed, use AgentVibes for TTS:
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
npx agentvibes speak "Hello from Clawdbot"
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
## Features
|
|
38
|
-
|
|
39
|
-
- **Automatic Detection**: Clawdbot automatically uses AgentVibes when available
|
|
40
|
-
- **Voice Selection**: 50+ voices across 30+ languages
|
|
41
|
-
- **SSH Tunneling**: Audio plays on local machine from remote servers
|
|
42
|
-
- **Zero Config**: Works out of the box once AgentVibes is installed
|
|
43
|
-
|
|
44
|
-
## Remote SSH Audio
|
|
45
|
-
|
|
46
|
-
When running Clawdbot on a remote server, set up PulseAudio tunneling so audio plays on your local machine:
|
|
47
|
-
|
|
48
|
-
**Quick Setup:**
|
|
49
|
-
|
|
50
|
-
1. **Remote server** (`~/.bashrc`):
|
|
51
|
-
```bash
|
|
52
|
-
export PULSE_SERVER=tcp:localhost:14713
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
2. **Local machine** (`~/.ssh/config`):
|
|
56
|
-
```
|
|
57
|
-
Host your-server
|
|
58
|
-
RemoteForward 14713 localhost:14713
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
3. **Connect and test**:
|
|
62
|
-
```bash
|
|
63
|
-
ssh your-server
|
|
64
|
-
agentvibes speak "Testing remote audio"
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
**Full guide**: https://github.com/paulpreibisch/AgentVibes/blob/master/docs/remote-audio-setup.md
|
|
68
|
-
|
|
69
|
-
## Documentation
|
|
70
|
-
|
|
71
|
-
- **Skill Documentation**: [skill/SKILL.md](skill/SKILL.md)
|
|
72
|
-
- **AgentVibes Docs**: https://agentvibes.org
|
|
73
|
-
- **Clawdbot Docs**: https://docs.clawd.bot
|
|
74
|
-
|
|
75
|
-
## Architecture
|
|
76
|
-
|
|
77
|
-
```
|
|
78
|
-
Clawdbot Request
|
|
79
|
-
↓
|
|
80
|
-
AgentVibes Skill (this)
|
|
81
|
-
↓
|
|
82
|
-
AgentVibes CLI (agentvibes speak)
|
|
83
|
-
↓
|
|
84
|
-
Piper TTS Engine
|
|
85
|
-
↓
|
|
86
|
-
PulseAudio → SSH Tunnel → Local Speakers
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
## Development
|
|
90
|
-
|
|
91
|
-
The skill is automatically packaged with AgentVibes npm releases. To update:
|
|
92
|
-
|
|
93
|
-
1. Edit `skill/SKILL.md`
|
|
94
|
-
2. Test with Clawdbot
|
|
95
|
-
3. Commit to AgentVibes repo
|
|
96
|
-
4. Publish new AgentVibes version
|
|
97
|
-
|
|
98
|
-
## Support
|
|
99
|
-
|
|
100
|
-
- **AgentVibes Issues**: https://github.com/paulpreibisch/AgentVibes/issues
|
|
101
|
-
- **Clawdbot Issues**: https://github.com/clawdbot/clawdbot/issues
|
|
102
|
-
|
|
103
|
-
## License
|
|
104
|
-
|
|
105
|
-
Apache 2.0 - Same as AgentVibes
|
|
1
|
+
# Clawdbot Integration
|
|
2
|
+
|
|
3
|
+
AgentVibes TTS integration for Clawdbot - the AI assistant framework.
|
|
4
|
+
|
|
5
|
+
## What is Clawdbot?
|
|
6
|
+
|
|
7
|
+
Clawdbot is a powerful AI assistant framework that connects Claude AI to messaging platforms (WhatsApp, Telegram, Discord, etc.) and provides extensible skills.
|
|
8
|
+
|
|
9
|
+
**Website**: https://clawd.bot
|
|
10
|
+
**GitHub**: https://github.com/clawdbot/clawdbot
|
|
11
|
+
|
|
12
|
+
## AgentVibes + Clawdbot
|
|
13
|
+
|
|
14
|
+
This integration provides Clawdbot with professional TTS capabilities using AgentVibes:
|
|
15
|
+
|
|
16
|
+
- **Free & Offline**: No API costs, works without internet
|
|
17
|
+
- **50+ Voices**: Professional AI voices in 30+ languages
|
|
18
|
+
- **Remote SSH Support**: Audio tunnels from server to local machine
|
|
19
|
+
- **Zero Setup**: Automatic when AgentVibes is installed
|
|
20
|
+
|
|
21
|
+
## Installation
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npx agentvibes install
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
That's it! AgentVibes is ready to use.
|
|
28
|
+
|
|
29
|
+
## Usage from Clawdbot
|
|
30
|
+
|
|
31
|
+
Once installed, use AgentVibes for TTS:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npx agentvibes speak "Hello from Clawdbot"
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Features
|
|
38
|
+
|
|
39
|
+
- **Automatic Detection**: Clawdbot automatically uses AgentVibes when available
|
|
40
|
+
- **Voice Selection**: 50+ voices across 30+ languages
|
|
41
|
+
- **SSH Tunneling**: Audio plays on local machine from remote servers
|
|
42
|
+
- **Zero Config**: Works out of the box once AgentVibes is installed
|
|
43
|
+
|
|
44
|
+
## Remote SSH Audio
|
|
45
|
+
|
|
46
|
+
When running Clawdbot on a remote server, set up PulseAudio tunneling so audio plays on your local machine:
|
|
47
|
+
|
|
48
|
+
**Quick Setup:**
|
|
49
|
+
|
|
50
|
+
1. **Remote server** (`~/.bashrc`):
|
|
51
|
+
```bash
|
|
52
|
+
export PULSE_SERVER=tcp:localhost:14713
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
2. **Local machine** (`~/.ssh/config`):
|
|
56
|
+
```
|
|
57
|
+
Host your-server
|
|
58
|
+
RemoteForward 14713 localhost:14713
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
3. **Connect and test**:
|
|
62
|
+
```bash
|
|
63
|
+
ssh your-server
|
|
64
|
+
agentvibes speak "Testing remote audio"
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Full guide**: https://github.com/paulpreibisch/AgentVibes/blob/master/docs/remote-audio-setup.md
|
|
68
|
+
|
|
69
|
+
## Documentation
|
|
70
|
+
|
|
71
|
+
- **Skill Documentation**: [skill/SKILL.md](skill/SKILL.md)
|
|
72
|
+
- **AgentVibes Docs**: https://agentvibes.org
|
|
73
|
+
- **Clawdbot Docs**: https://docs.clawd.bot
|
|
74
|
+
|
|
75
|
+
## Architecture
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
Clawdbot Request
|
|
79
|
+
↓
|
|
80
|
+
AgentVibes Skill (this)
|
|
81
|
+
↓
|
|
82
|
+
AgentVibes CLI (agentvibes speak)
|
|
83
|
+
↓
|
|
84
|
+
Piper TTS Engine
|
|
85
|
+
↓
|
|
86
|
+
PulseAudio → SSH Tunnel → Local Speakers
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Development
|
|
90
|
+
|
|
91
|
+
The skill is automatically packaged with AgentVibes npm releases. To update:
|
|
92
|
+
|
|
93
|
+
1. Edit `skill/SKILL.md`
|
|
94
|
+
2. Test with Clawdbot
|
|
95
|
+
3. Commit to AgentVibes repo
|
|
96
|
+
4. Publish new AgentVibes version
|
|
97
|
+
|
|
98
|
+
## Support
|
|
99
|
+
|
|
100
|
+
- **AgentVibes Issues**: https://github.com/paulpreibisch/AgentVibes/issues
|
|
101
|
+
- **Clawdbot Issues**: https://github.com/clawdbot/clawdbot/issues
|
|
102
|
+
|
|
103
|
+
## License
|
|
104
|
+
|
|
105
|
+
Apache 2.0 - Same as AgentVibes
|
package/.mcp.json
CHANGED
|
@@ -1,12 +1,41 @@
|
|
|
1
1
|
{
|
|
2
2
|
"mcpServers": {
|
|
3
|
-
"
|
|
3
|
+
"context7": {
|
|
4
4
|
"command": "npx",
|
|
5
5
|
"args": [
|
|
6
|
-
"-
|
|
7
|
-
"firecrawl-mcp"
|
|
6
|
+
"@upstash/context7-mcp"
|
|
8
7
|
]
|
|
9
8
|
},
|
|
9
|
+
"sonarqube": {
|
|
10
|
+
"command": "docker",
|
|
11
|
+
"args": [
|
|
12
|
+
"run",
|
|
13
|
+
"-i",
|
|
14
|
+
"--name",
|
|
15
|
+
"sonarqube-mcp-server-agentvibes",
|
|
16
|
+
"--rm",
|
|
17
|
+
"--dns",
|
|
18
|
+
"8.8.8.8",
|
|
19
|
+
"--dns",
|
|
20
|
+
"8.8.4.4",
|
|
21
|
+
"-e",
|
|
22
|
+
"SONARQUBE_TOKEN",
|
|
23
|
+
"-e",
|
|
24
|
+
"SONARQUBE_ORG",
|
|
25
|
+
"-e",
|
|
26
|
+
"STORAGE_PATH",
|
|
27
|
+
"mcp/sonarqube"
|
|
28
|
+
],
|
|
29
|
+
"env": {
|
|
30
|
+
"SONARQUBE_TOKEN": "${SONARQUBE_TOKEN}",
|
|
31
|
+
"SONARQUBE_ORG": "${SONARQUBE_ORG}",
|
|
32
|
+
"STORAGE_PATH": "${STORAGE_PATH}"
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"vercel": {
|
|
36
|
+
"type": "sse",
|
|
37
|
+
"url": "https://mcp.vercel.com"
|
|
38
|
+
},
|
|
10
39
|
"agentvibes": {
|
|
11
40
|
"command": "npx",
|
|
12
41
|
"args": [
|