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.
Files changed (142) 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/config/README-personality-defaults.md +162 -0
  14. package/.agentvibes/config/agentvibes.json +1 -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 +38 -1
  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/audio/voice-samples/piper/alan.wav +0 -0
  31. package/.claude/audio/voice-samples/piper/amy.wav +0 -0
  32. package/.claude/audio/voice-samples/piper/charlotte.wav +0 -0
  33. package/.claude/audio/voice-samples/piper/joe.wav +0 -0
  34. package/.claude/audio/voice-samples/piper/john.wav +0 -0
  35. package/.claude/audio/voice-samples/piper/katherine.wav +0 -0
  36. package/.claude/audio/voice-samples/piper/kristin.wav +0 -0
  37. package/.claude/audio/voice-samples/piper/linda.wav +0 -0
  38. package/.claude/audio/voice-samples/piper/marcus.wav +0 -0
  39. package/.claude/audio/voice-samples/piper/ryan.wav +0 -0
  40. package/.claude/commands/agent-vibes/provider.md +0 -0
  41. package/.claude/commands/agent-vibes-bmad-voices.md +117 -117
  42. package/.claude/commands/agent-vibes-rdp.md +24 -24
  43. package/.claude/config/audio-effects.cfg +6 -1
  44. package/.claude/config/background-music-position.txt +8 -6
  45. package/.claude/config/reverb-level.txt +0 -0
  46. package/.claude/docs/TERMUX_SETUP.md +408 -408
  47. package/.claude/github-star-reminder.txt +1 -1
  48. package/.claude/hooks/audio-cache-utils.sh +0 -0
  49. package/.claude/hooks/audio-processor.sh +0 -0
  50. package/.claude/hooks/background-music-manager.sh +0 -0
  51. package/.claude/hooks/bmad-party-manager.sh +225 -0
  52. package/.claude/hooks/bmad-party-speak.sh +0 -0
  53. package/.claude/hooks/bmad-speak-enhanced.sh +0 -0
  54. package/.claude/hooks/bmad-speak.sh +0 -0
  55. package/.claude/hooks/bmad-tts-injector.sh +0 -0
  56. package/.claude/hooks/bmad-voice-manager.sh +0 -0
  57. package/.claude/hooks/clawdbot-receiver-SECURE.sh +0 -0
  58. package/.claude/hooks/clawdbot-receiver.sh +0 -0
  59. package/.claude/hooks/clean-audio-cache.sh +0 -0
  60. package/.claude/hooks/cleanup-cache.sh +0 -0
  61. package/.claude/hooks/configure-rdp-mode.sh +0 -0
  62. package/.claude/hooks/download-extra-voices.sh +0 -0
  63. package/.claude/hooks/effects-manager.sh +0 -0
  64. package/.claude/hooks/github-star-reminder.sh +0 -0
  65. package/.claude/hooks/language-manager.sh +0 -0
  66. package/.claude/hooks/learn-manager.sh +0 -0
  67. package/.claude/hooks/macos-voice-manager.sh +0 -0
  68. package/.claude/hooks/migrate-background-music.sh +0 -0
  69. package/.claude/hooks/migrate-to-agentvibes.sh +0 -0
  70. package/.claude/hooks/optimize-background-music.sh +0 -0
  71. package/.claude/hooks/path-resolver.sh +0 -0
  72. package/.claude/hooks/personality-manager.sh +0 -0
  73. package/.claude/hooks/piper-download-voices.sh +0 -0
  74. package/.claude/hooks/piper-installer.sh +0 -0
  75. package/.claude/hooks/piper-multispeaker-registry.sh +0 -0
  76. package/.claude/hooks/piper-voice-manager.sh +0 -0
  77. package/.claude/hooks/play-tts-agentvibes-receiver-for-voiceless-connections.sh +0 -0
  78. package/.claude/hooks/play-tts-enhanced.sh +0 -0
  79. package/.claude/hooks/play-tts-macos.sh +0 -0
  80. package/.claude/hooks/play-tts-piper.sh +40 -2
  81. package/.claude/hooks/play-tts-soprano.sh +0 -0
  82. package/.claude/hooks/play-tts-ssh-remote.sh +0 -0
  83. package/.claude/hooks/play-tts-termux-ssh.sh +0 -0
  84. package/.claude/hooks/play-tts-windows-receiver.sh +0 -0
  85. package/.claude/hooks/play-tts.sh +13 -0
  86. package/.claude/hooks/post-response.sh +41 -0
  87. package/.claude/hooks/prepare-release.sh +0 -0
  88. package/.claude/hooks/provider-commands.sh +0 -0
  89. package/.claude/hooks/provider-manager.sh +0 -0
  90. package/.claude/hooks/replay-target-audio.sh +0 -0
  91. package/.claude/hooks/sentiment-manager.sh +0 -0
  92. package/.claude/hooks/session-start-tts.sh +48 -13
  93. package/.claude/hooks/soprano-gradio-synth.py +0 -0
  94. package/.claude/hooks/speed-manager.sh +0 -0
  95. package/.claude/hooks/stop-tts.sh +0 -0
  96. package/.claude/hooks/stop.sh +63 -0
  97. package/.claude/hooks/termux-installer.sh +0 -0
  98. package/.claude/hooks/translate-manager.sh +0 -0
  99. package/.claude/hooks/translator.py +0 -0
  100. package/.claude/hooks/tts-queue-worker.sh +0 -0
  101. package/.claude/hooks/tts-queue.sh +0 -0
  102. package/.claude/hooks/verbosity-manager.sh +0 -0
  103. package/.claude/hooks/voice-manager.sh +0 -0
  104. package/.claude/hooks-windows/audio-cache-utils.ps1 +119 -119
  105. package/.claude/hooks-windows/play-tts-piper.ps1 +26 -1
  106. package/.claude/hooks-windows/play-tts.ps1 +25 -1
  107. package/.claude/hooks-windows/session-start-tts.ps1 +28 -9
  108. package/.claude/piper-voices-dir.txt +1 -0
  109. package/.claude/settings.json +2 -2
  110. package/.clawdbot/README.md +105 -105
  111. package/.mcp.json +32 -3
  112. package/CLAUDE.md +9 -0
  113. package/README.md +21 -3
  114. package/RELEASE_NOTES.md +61 -0
  115. package/WINDOWS-SETUP.md +208 -208
  116. package/bin/agent-vibes +0 -0
  117. package/bin/agentvibes-voice-browser.js +59 -4
  118. package/bin/agentvibes.js +0 -0
  119. package/bin/ensure-soprano-running.sh +43 -0
  120. package/bin/mcp-server.js +121 -121
  121. package/bin/mcp-server.sh +0 -0
  122. package/bin/test-bmad-pr +78 -78
  123. package/mcp-server/QUICK_START.md +203 -203
  124. package/mcp-server/README.md +345 -345
  125. package/mcp-server/WINDOWS_SETUP.md +260 -260
  126. package/mcp-server/docs/troubleshooting-audio.md +313 -313
  127. package/mcp-server/examples/claude_desktop_config.json +11 -11
  128. package/mcp-server/examples/claude_desktop_config_piper.json +9 -9
  129. package/mcp-server/examples/custom_instructions.md +169 -169
  130. package/mcp-server/install-deps.js +177 -130
  131. package/mcp-server/server.py +1797 -1787
  132. package/mcp-server/test_server.py +0 -0
  133. package/package.json +1 -1
  134. package/src/console/app.js +6 -0
  135. package/src/console/tabs/music-tab.js +18 -2
  136. package/src/console/widgets/format-utils.js +11 -2
  137. package/src/installer.js +38 -37
  138. package/src/services/llm-provider-service.js +28 -9
  139. package/src/utils/voice-names.js +2 -0
  140. package/templates/agentvibes-receiver.sh +0 -0
  141. package/templates/audio/welcome-music.mp3 +0 -0
  142. 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
- Write-Host "[VOICE] Voice used: $VoiceName (Piper)" -ForegroundColor Green
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 (Join-Path $ScriptDir "play-tts.ps1"))) {
19
+ if (-not (Test-Path $PlayTtsPath)) {
17
20
  # AgentVibes not installed, don't inject anything
18
21
  exit 0
19
22
  }
20
23
 
21
- # Resolve project .claude dir from script location (avoids CWD-relative path issues)
22
- $ProjectClaudeDir = Split-Path -Parent (Split-Path -Parent $ScriptDir)
23
- $ProjectClaudeDir = Join-Path $ProjectClaudeDir ".claude"
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 ".claude\hooks-windows\play-tts.ps1" "[action]"``
69
- 2. **Completion** - End of task: ``Bash: powershell -NoProfile -ExecutionPolicy Bypass -File ".claude\hooks-windows\play-tts.ps1" "[result + key details]"``
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 ".claude\hooks-windows\play-tts.ps1" "Checking git status"]
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 ".claude\hooks-windows\play-tts.ps1" "Repository is clean, no changes"]
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
@@ -6,7 +6,7 @@
6
6
  "hooks": [
7
7
  {
8
8
  "type": "command",
9
- "command": "powershell -NoProfile -ExecutionPolicy Bypass -File \"$CLAUDE_PROJECT_DIR\\.claude\\hooks-windows\\session-start-tts.ps1\""
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 \"$CLAUDE_PROJECT_DIR/.claude/hooks/session-start-tts.sh\""
19
+ "command": "bash \"$HOME/.claude/hooks/session-start-tts.sh\""
20
20
  }
21
21
  ]
22
22
  }
@@ -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
- "firecrawl-mcp": {
3
+ "context7": {
4
4
  "command": "npx",
5
5
  "args": [
6
- "-y",
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": [