agentvibes 5.2.1 → 5.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/bmad/bmad-voices.md +69 -69
- package/.agentvibes/config/README-personality-defaults.md +162 -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 +24 -15
- 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/activation-instructions +54 -54
- 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/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/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/audio-effects.cfg +4 -11
- package/.claude/config/audio-effects.cfg.sample +52 -52
- package/.claude/config/background-music-position.txt +27 -0
- package/.claude/config/background-music-volume.txt +1 -1
- package/.claude/config/background-music.cfg +1 -0
- package/.claude/config/background-music.txt +1 -0
- package/.claude/config/tts-speech-rate.txt +1 -4
- package/.claude/config/tts-verbosity.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 +0 -0
- package/.claude/hooks/audio-processor.sh +60 -14
- package/.claude/hooks/background-music-manager.sh +0 -0
- package/.claude/hooks/bmad-party-manager.sh +225 -0
- package/.claude/hooks/bmad-speak-enhanced.sh +0 -0
- package/.claude/hooks/bmad-speak.sh +6 -13
- 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 +25 -23
- package/.claude/hooks/clawdbot-receiver.sh +4 -28
- 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/personality-manager.sh +0 -0
- package/.claude/hooks/piper-download-voices.sh +0 -0
- package/.claude/hooks/piper-installer.sh +1 -1
- package/.claude/hooks/piper-multispeaker-registry.sh +0 -0
- package/.claude/hooks/piper-voice-manager.sh +0 -0
- package/.claude/hooks/play-tts-enhanced.sh +0 -0
- package/.claude/hooks/play-tts-macos.sh +6 -12
- package/.claude/hooks/play-tts-piper.sh +50 -79
- package/.claude/hooks/play-tts-soprano.sh +9 -43
- package/.claude/hooks/play-tts-ssh-remote.sh +42 -120
- package/.claude/hooks/play-tts-termux-ssh.sh +0 -0
- package/.claude/hooks/play-tts.sh +48 -37
- 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/requirements.txt +6 -6
- package/.claude/hooks/sentiment-manager.sh +0 -0
- package/.claude/hooks/session-start-tts.sh +56 -39
- package/.claude/hooks/soprano-gradio-synth.py +139 -139
- package/.claude/hooks/speed-manager.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 +237 -237
- 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 +26 -4
- package/.claude/hooks-windows/audio-cache-utils.ps1 +119 -119
- package/.claude/hooks-windows/bmad-party-speak.ps1 +278 -274
- package/.claude/hooks-windows/bmad-speak.ps1 +264 -264
- package/.claude/hooks-windows/clean-audio-cache.ps1 +53 -53
- package/.claude/hooks-windows/effects-manager.ps1 +294 -294
- package/.claude/hooks-windows/language-manager.ps1 +193 -193
- package/.claude/hooks-windows/learn-manager.ps1 +241 -241
- package/.claude/hooks-windows/personality-manager.ps1 +266 -266
- package/.claude/hooks-windows/play-tts-soprano.ps1 +5 -5
- package/.claude/hooks-windows/play-tts-termux-ssh.ps1 +138 -138
- package/.claude/hooks-windows/play-tts-windows-piper.ps1 +164 -0
- package/.claude/hooks-windows/play-tts-windows-sapi.ps1 +108 -0
- package/.claude/hooks-windows/play-tts.ps1 +104 -481
- package/.claude/hooks-windows/provider-manager.ps1 +158 -192
- package/.claude/hooks-windows/session-start-tts.ps1 +55 -46
- package/.claude/hooks-windows/soprano-gradio-synth.py +153 -153
- package/.claude/hooks-windows/speed-manager.ps1 +166 -166
- package/.claude/hooks-windows/voice-manager-windows.ps1 +176 -260
- 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/piper-voices-dir.txt +1 -0
- package/.claude/settings.json +25 -15
- package/.claude/verbosity.txt +1 -1
- package/.clawdbot/README.md +105 -105
- package/.clawdbot/skill/SKILL.md +149 -145
- package/.mcp.json +30 -11
- package/CLAUDE.md +170 -215
- package/README.md +206 -515
- package/RELEASE_NOTES.md +1132 -1884
- package/WINDOWS-SETUP.md +208 -208
- package/bin/agent-vibes +0 -0
- package/bin/agentvibes-voice-browser.js +64 -1289
- 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 +130 -130
- package/mcp-server/pyproject.toml +52 -52
- package/mcp-server/requirements.txt +2 -2
- package/mcp-server/server.py +1451 -1578
- package/mcp-server/test_server.py +395 -395
- package/package.json +1 -3
- package/setup-windows.ps1 +815 -815
- package/src/console/tabs/setup-tab.js +9 -6
- package/src/console/tabs/voices-tab.js +9 -3
- package/src/installer.js +42 -5
- package/src/services/llm-provider-service.js +13 -0
- package/templates/agentvibes-receiver.sh +158 -483
- package/templates/audio/welcome-music.mp3 +0 -0
- package/.agentvibes/bmad-voice-map.json +0 -104
- package/.agentvibes/copilot-sessions.log +0 -4
- package/.claude/config/audio-effects-bmad.cfg +0 -50
- package/.claude/config/background-music-enabled.txt +0 -1
- package/.claude/config/intro-text.txt +0 -1
- package/.claude/config/personality.txt +0 -1
- package/.claude/config/piper-speech-rate.txt +0 -4
- package/.claude/config/piper-target-speech-rate.txt +0 -1
- package/.claude/config/reverb-level.txt +0 -1
- package/.claude/config/tts-target-speech-rate.txt +0 -1
- package/voice-assignments.json +0 -8245
- /package/{.claude → .agentvibes}/config/agentvibes.json +0 -0
|
@@ -1,241 +1,241 @@
|
|
|
1
|
-
#
|
|
2
|
-
# File: .claude/hooks-windows/learn-manager.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
|
-
param(
|
|
10
|
-
[Parameter(Position=0)]
|
|
11
|
-
[string]$Command = "help",
|
|
12
|
-
[Parameter(Position=1)]
|
|
13
|
-
[string]$Arg1 = ""
|
|
14
|
-
)
|
|
15
|
-
|
|
16
|
-
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
17
|
-
$ClaudeDir = Split-Path -Parent $ScriptDir
|
|
18
|
-
|
|
19
|
-
# Determine project directory
|
|
20
|
-
if (Test-Path (Join-Path $PWD ".claude")) {
|
|
21
|
-
$ProjectDir = $PWD.Path
|
|
22
|
-
} else {
|
|
23
|
-
$ProjectDir = Split-Path -Parent $ClaudeDir
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
$ProjectClaude = Join-Path $ProjectDir ".claude"
|
|
27
|
-
$GlobalClaude = Join-Path $env:USERPROFILE ".claude"
|
|
28
|
-
|
|
29
|
-
# Config files (project-local first)
|
|
30
|
-
$MainLangFile = Join-Path $ProjectClaude "tts-main-language.txt"
|
|
31
|
-
$TargetLangFile = Join-Path $ProjectClaude "tts-target-language.txt"
|
|
32
|
-
$TargetVoiceFile = Join-Path $ProjectClaude "tts-target-voice.txt"
|
|
33
|
-
$LearnModeFile = Join-Path $ProjectClaude "tts-learn-mode.txt"
|
|
34
|
-
|
|
35
|
-
# Global fallbacks
|
|
36
|
-
$GlobalMainLangFile = Join-Path $GlobalClaude "tts-main-language.txt"
|
|
37
|
-
$GlobalTargetLangFile = Join-Path $GlobalClaude "tts-target-language.txt"
|
|
38
|
-
$GlobalTargetVoiceFile = Join-Path $GlobalClaude "tts-target-voice.txt"
|
|
39
|
-
$GlobalLearnModeFile = Join-Path $GlobalClaude "tts-learn-mode.txt"
|
|
40
|
-
|
|
41
|
-
function Get-MainLanguage {
|
|
42
|
-
if (Test-Path $MainLangFile) { return (Get-Content $MainLangFile -Raw).Trim() }
|
|
43
|
-
if (Test-Path $GlobalMainLangFile) { return (Get-Content $GlobalMainLangFile -Raw).Trim() }
|
|
44
|
-
return "english"
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function Get-TargetLanguage {
|
|
48
|
-
if (Test-Path $TargetLangFile) { return (Get-Content $TargetLangFile -Raw).Trim() }
|
|
49
|
-
if (Test-Path $GlobalTargetLangFile) { return (Get-Content $GlobalTargetLangFile -Raw).Trim() }
|
|
50
|
-
return ""
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
function Get-TargetVoice {
|
|
54
|
-
if (Test-Path $TargetVoiceFile) { return (Get-Content $TargetVoiceFile -Raw).Trim() }
|
|
55
|
-
if (Test-Path $GlobalTargetVoiceFile) { return (Get-Content $GlobalTargetVoiceFile -Raw).Trim() }
|
|
56
|
-
return ""
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
function Test-LearnModeEnabled {
|
|
60
|
-
if (Test-Path $LearnModeFile) { return (Get-Content $LearnModeFile -Raw).Trim() -eq "ON" }
|
|
61
|
-
if (Test-Path $GlobalLearnModeFile) { return (Get-Content $GlobalLearnModeFile -Raw).Trim() -eq "ON" }
|
|
62
|
-
return $false
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
function Get-GreetingForLanguage {
|
|
66
|
-
param([string]$Language)
|
|
67
|
-
switch ($Language.ToLower()) {
|
|
68
|
-
"spanish" { return "Hola! Soy tu profesor de espanol. Vamos a aprender juntos!" }
|
|
69
|
-
"french" { return "Bonjour! Je suis votre professeur de francais. Apprenons ensemble!" }
|
|
70
|
-
"german" { return "Hallo! Ich bin dein Deutschlehrer. Lass uns zusammen lernen!" }
|
|
71
|
-
"italian" { return "Ciao! Sono il tuo insegnante di italiano. Impariamo insieme!" }
|
|
72
|
-
"portuguese" { return "Ola! Sou seu professor de portugues. Vamos aprender juntos!" }
|
|
73
|
-
"chinese" { return "Hello! I am your Chinese language teacher. Let us learn together!" }
|
|
74
|
-
"japanese" { return "Hello! I am your Japanese language teacher. Let us learn together!" }
|
|
75
|
-
"korean" { return "Hello! I am your Korean language teacher. Let us learn together!" }
|
|
76
|
-
"russian" { return "Hello! I am your Russian language teacher. Let us learn together!" }
|
|
77
|
-
"dutch" { return "Hallo! Ik ben je Nederlandse leraar. Laten we samen leren!" }
|
|
78
|
-
"polish" { return "Czesc! Jestem twoim nauczycielem polskiego. Uczmy sie razem!" }
|
|
79
|
-
"turkish" { return "Merhaba! Ben Turkce ogretmeninizim. Birlikte ogrenelim!" }
|
|
80
|
-
"swedish" { return "Hej! Jag ar din svenskalarare. Lat oss lara tillsammans!" }
|
|
81
|
-
default { return "Hello! I am your language teacher. Let us learn together!" }
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
function Get-RecommendedVoice {
|
|
86
|
-
param([string]$Language)
|
|
87
|
-
# Try language-manager
|
|
88
|
-
$langManager = Join-Path $ScriptDir "language-manager.ps1"
|
|
89
|
-
if (Test-Path $langManager) {
|
|
90
|
-
$voice = & powershell -NoProfile -ExecutionPolicy Bypass -File $langManager voice-for-language $Language 2>$null
|
|
91
|
-
if ($voice) { return $voice.Trim() }
|
|
92
|
-
}
|
|
93
|
-
return ""
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
function Show-Status {
|
|
97
|
-
$mainLang = Get-MainLanguage
|
|
98
|
-
$targetLang = Get-TargetLanguage
|
|
99
|
-
$targetVoice = Get-TargetVoice
|
|
100
|
-
$learnMode = if (Test-LearnModeEnabled) { "ON" } else { "OFF" }
|
|
101
|
-
|
|
102
|
-
Write-Output "-----------------------------------------------"
|
|
103
|
-
Write-Output " Language Learning Mode Status"
|
|
104
|
-
Write-Output "-----------------------------------------------"
|
|
105
|
-
Write-Output ""
|
|
106
|
-
Write-Output " Learning Mode: $learnMode"
|
|
107
|
-
Write-Output " Main Language: $mainLang"
|
|
108
|
-
Write-Output " Target Language: $(if ($targetLang) { $targetLang } else { '(not set)' })"
|
|
109
|
-
Write-Output " Target Voice: $(if ($targetVoice) { $targetVoice } else { '(not set)' })"
|
|
110
|
-
Write-Output ""
|
|
111
|
-
|
|
112
|
-
if ($learnMode -eq "ON") {
|
|
113
|
-
if (-not $targetLang) {
|
|
114
|
-
Write-Output " Please set a target language: /agent-vibes:target <language>"
|
|
115
|
-
}
|
|
116
|
-
if (-not $targetVoice) {
|
|
117
|
-
Write-Output " Please set a target voice: /agent-vibes:target-voice <voice>"
|
|
118
|
-
}
|
|
119
|
-
if ($targetLang -and $targetVoice) {
|
|
120
|
-
Write-Output " All set! TTS will speak in both languages."
|
|
121
|
-
Write-Output ""
|
|
122
|
-
Write-Output " How it works:"
|
|
123
|
-
Write-Output " 1. First: Speak in $mainLang (your current voice)"
|
|
124
|
-
Write-Output " 2. Then: Speak in $targetLang ($targetVoice voice)"
|
|
125
|
-
}
|
|
126
|
-
} else {
|
|
127
|
-
Write-Output " Enable learning mode with: /agent-vibes:learn"
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
Write-Output ""
|
|
131
|
-
Write-Output "-----------------------------------------------"
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
# Ensure project .claude exists
|
|
135
|
-
if (-not (Test-Path $ProjectClaude)) { New-Item -ItemType Directory -Path $ProjectClaude -Force | Out-Null }
|
|
136
|
-
|
|
137
|
-
switch ($Command) {
|
|
138
|
-
"enable" {
|
|
139
|
-
Set-Content -Path $LearnModeFile -Value "ON" -NoNewline
|
|
140
|
-
Write-Output "Language learning mode: ENABLED"
|
|
141
|
-
Write-Output ""
|
|
142
|
-
|
|
143
|
-
# Auto-set target voice if target language exists but voice doesn't
|
|
144
|
-
$targetLang = Get-TargetLanguage
|
|
145
|
-
$targetVoice = Get-TargetVoice
|
|
146
|
-
|
|
147
|
-
if ($targetLang -and -not $targetVoice) {
|
|
148
|
-
Write-Output "Auto-configuring voice for $targetLang..."
|
|
149
|
-
$recommended = Get-RecommendedVoice $targetLang
|
|
150
|
-
if ($recommended) {
|
|
151
|
-
Set-Content -Path $TargetVoiceFile -Value $recommended -NoNewline
|
|
152
|
-
$targetVoice = $recommended
|
|
153
|
-
Write-Output "Target voice automatically set to: $recommended"
|
|
154
|
-
Write-Output ""
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
Show-Status
|
|
159
|
-
|
|
160
|
-
# Greet in target language
|
|
161
|
-
if ($targetLang -and $targetVoice) {
|
|
162
|
-
$greeting = Get-GreetingForLanguage $targetLang
|
|
163
|
-
Write-Output ""
|
|
164
|
-
Write-Output "Your language teacher says: $greeting"
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
"disable" {
|
|
169
|
-
Set-Content -Path $LearnModeFile -Value "OFF" -NoNewline
|
|
170
|
-
Write-Output "Language learning mode: DISABLED"
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
"status" {
|
|
174
|
-
Show-Status
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
"is-enabled" {
|
|
178
|
-
if (Test-LearnModeEnabled) {
|
|
179
|
-
Write-Output "ON"
|
|
180
|
-
exit 0
|
|
181
|
-
} else {
|
|
182
|
-
Write-Output "OFF"
|
|
183
|
-
exit 1
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
"get-main-language" {
|
|
188
|
-
Write-Output (Get-MainLanguage)
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
"set-main-language" {
|
|
192
|
-
if (-not $Arg1) {
|
|
193
|
-
Write-Output "Usage: learn-manager.ps1 set-main-language <language>"
|
|
194
|
-
exit 1
|
|
195
|
-
}
|
|
196
|
-
Set-Content -Path $MainLangFile -Value $Arg1 -NoNewline
|
|
197
|
-
Write-Output "Main language set to: $Arg1"
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
"get-target-language" {
|
|
201
|
-
Write-Output (Get-TargetLanguage)
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
"set-target-language" {
|
|
205
|
-
if (-not $Arg1) {
|
|
206
|
-
Write-Output "Usage: learn-manager.ps1 set-target-language <language>"
|
|
207
|
-
exit 1
|
|
208
|
-
}
|
|
209
|
-
Set-Content -Path $TargetLangFile -Value $Arg1 -NoNewline
|
|
210
|
-
Write-Output "Target language set to: $Arg1"
|
|
211
|
-
|
|
212
|
-
# Auto-set recommended voice
|
|
213
|
-
$recommended = Get-RecommendedVoice $Arg1
|
|
214
|
-
if ($recommended) {
|
|
215
|
-
Set-Content -Path $TargetVoiceFile -Value $recommended -NoNewline
|
|
216
|
-
Write-Output "Target voice automatically set to: $recommended"
|
|
217
|
-
|
|
218
|
-
$greeting = Get-GreetingForLanguage $Arg1
|
|
219
|
-
Write-Output ""
|
|
220
|
-
Write-Output "Your language teacher says: $greeting"
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
"get-target-voice" {
|
|
225
|
-
Write-Output (Get-TargetVoice)
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
"set-target-voice" {
|
|
229
|
-
if (-not $Arg1) {
|
|
230
|
-
Write-Output "Usage: learn-manager.ps1 set-target-voice <voice>"
|
|
231
|
-
exit 1
|
|
232
|
-
}
|
|
233
|
-
Set-Content -Path $TargetVoiceFile -Value $Arg1 -NoNewline
|
|
234
|
-
Write-Output "Target voice set to: $Arg1"
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
default {
|
|
238
|
-
Write-Output "Usage: learn-manager.ps1 {enable|disable|status|is-enabled|get-main-language|set-main-language|get-target-language|set-target-language|get-target-voice|set-target-voice}"
|
|
239
|
-
exit 1
|
|
240
|
-
}
|
|
241
|
-
}
|
|
1
|
+
#
|
|
2
|
+
# File: .claude/hooks-windows/learn-manager.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
|
+
param(
|
|
10
|
+
[Parameter(Position=0)]
|
|
11
|
+
[string]$Command = "help",
|
|
12
|
+
[Parameter(Position=1)]
|
|
13
|
+
[string]$Arg1 = ""
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
17
|
+
$ClaudeDir = Split-Path -Parent $ScriptDir
|
|
18
|
+
|
|
19
|
+
# Determine project directory
|
|
20
|
+
if (Test-Path (Join-Path $PWD ".claude")) {
|
|
21
|
+
$ProjectDir = $PWD.Path
|
|
22
|
+
} else {
|
|
23
|
+
$ProjectDir = Split-Path -Parent $ClaudeDir
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
$ProjectClaude = Join-Path $ProjectDir ".claude"
|
|
27
|
+
$GlobalClaude = Join-Path $env:USERPROFILE ".claude"
|
|
28
|
+
|
|
29
|
+
# Config files (project-local first)
|
|
30
|
+
$MainLangFile = Join-Path $ProjectClaude "tts-main-language.txt"
|
|
31
|
+
$TargetLangFile = Join-Path $ProjectClaude "tts-target-language.txt"
|
|
32
|
+
$TargetVoiceFile = Join-Path $ProjectClaude "tts-target-voice.txt"
|
|
33
|
+
$LearnModeFile = Join-Path $ProjectClaude "tts-learn-mode.txt"
|
|
34
|
+
|
|
35
|
+
# Global fallbacks
|
|
36
|
+
$GlobalMainLangFile = Join-Path $GlobalClaude "tts-main-language.txt"
|
|
37
|
+
$GlobalTargetLangFile = Join-Path $GlobalClaude "tts-target-language.txt"
|
|
38
|
+
$GlobalTargetVoiceFile = Join-Path $GlobalClaude "tts-target-voice.txt"
|
|
39
|
+
$GlobalLearnModeFile = Join-Path $GlobalClaude "tts-learn-mode.txt"
|
|
40
|
+
|
|
41
|
+
function Get-MainLanguage {
|
|
42
|
+
if (Test-Path $MainLangFile) { return (Get-Content $MainLangFile -Raw).Trim() }
|
|
43
|
+
if (Test-Path $GlobalMainLangFile) { return (Get-Content $GlobalMainLangFile -Raw).Trim() }
|
|
44
|
+
return "english"
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function Get-TargetLanguage {
|
|
48
|
+
if (Test-Path $TargetLangFile) { return (Get-Content $TargetLangFile -Raw).Trim() }
|
|
49
|
+
if (Test-Path $GlobalTargetLangFile) { return (Get-Content $GlobalTargetLangFile -Raw).Trim() }
|
|
50
|
+
return ""
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function Get-TargetVoice {
|
|
54
|
+
if (Test-Path $TargetVoiceFile) { return (Get-Content $TargetVoiceFile -Raw).Trim() }
|
|
55
|
+
if (Test-Path $GlobalTargetVoiceFile) { return (Get-Content $GlobalTargetVoiceFile -Raw).Trim() }
|
|
56
|
+
return ""
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function Test-LearnModeEnabled {
|
|
60
|
+
if (Test-Path $LearnModeFile) { return (Get-Content $LearnModeFile -Raw).Trim() -eq "ON" }
|
|
61
|
+
if (Test-Path $GlobalLearnModeFile) { return (Get-Content $GlobalLearnModeFile -Raw).Trim() -eq "ON" }
|
|
62
|
+
return $false
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function Get-GreetingForLanguage {
|
|
66
|
+
param([string]$Language)
|
|
67
|
+
switch ($Language.ToLower()) {
|
|
68
|
+
"spanish" { return "Hola! Soy tu profesor de espanol. Vamos a aprender juntos!" }
|
|
69
|
+
"french" { return "Bonjour! Je suis votre professeur de francais. Apprenons ensemble!" }
|
|
70
|
+
"german" { return "Hallo! Ich bin dein Deutschlehrer. Lass uns zusammen lernen!" }
|
|
71
|
+
"italian" { return "Ciao! Sono il tuo insegnante di italiano. Impariamo insieme!" }
|
|
72
|
+
"portuguese" { return "Ola! Sou seu professor de portugues. Vamos aprender juntos!" }
|
|
73
|
+
"chinese" { return "Hello! I am your Chinese language teacher. Let us learn together!" }
|
|
74
|
+
"japanese" { return "Hello! I am your Japanese language teacher. Let us learn together!" }
|
|
75
|
+
"korean" { return "Hello! I am your Korean language teacher. Let us learn together!" }
|
|
76
|
+
"russian" { return "Hello! I am your Russian language teacher. Let us learn together!" }
|
|
77
|
+
"dutch" { return "Hallo! Ik ben je Nederlandse leraar. Laten we samen leren!" }
|
|
78
|
+
"polish" { return "Czesc! Jestem twoim nauczycielem polskiego. Uczmy sie razem!" }
|
|
79
|
+
"turkish" { return "Merhaba! Ben Turkce ogretmeninizim. Birlikte ogrenelim!" }
|
|
80
|
+
"swedish" { return "Hej! Jag ar din svenskalarare. Lat oss lara tillsammans!" }
|
|
81
|
+
default { return "Hello! I am your language teacher. Let us learn together!" }
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function Get-RecommendedVoice {
|
|
86
|
+
param([string]$Language)
|
|
87
|
+
# Try language-manager
|
|
88
|
+
$langManager = Join-Path $ScriptDir "language-manager.ps1"
|
|
89
|
+
if (Test-Path $langManager) {
|
|
90
|
+
$voice = & powershell -NoProfile -ExecutionPolicy Bypass -File $langManager voice-for-language $Language 2>$null
|
|
91
|
+
if ($voice) { return $voice.Trim() }
|
|
92
|
+
}
|
|
93
|
+
return ""
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function Show-Status {
|
|
97
|
+
$mainLang = Get-MainLanguage
|
|
98
|
+
$targetLang = Get-TargetLanguage
|
|
99
|
+
$targetVoice = Get-TargetVoice
|
|
100
|
+
$learnMode = if (Test-LearnModeEnabled) { "ON" } else { "OFF" }
|
|
101
|
+
|
|
102
|
+
Write-Output "-----------------------------------------------"
|
|
103
|
+
Write-Output " Language Learning Mode Status"
|
|
104
|
+
Write-Output "-----------------------------------------------"
|
|
105
|
+
Write-Output ""
|
|
106
|
+
Write-Output " Learning Mode: $learnMode"
|
|
107
|
+
Write-Output " Main Language: $mainLang"
|
|
108
|
+
Write-Output " Target Language: $(if ($targetLang) { $targetLang } else { '(not set)' })"
|
|
109
|
+
Write-Output " Target Voice: $(if ($targetVoice) { $targetVoice } else { '(not set)' })"
|
|
110
|
+
Write-Output ""
|
|
111
|
+
|
|
112
|
+
if ($learnMode -eq "ON") {
|
|
113
|
+
if (-not $targetLang) {
|
|
114
|
+
Write-Output " Please set a target language: /agent-vibes:target <language>"
|
|
115
|
+
}
|
|
116
|
+
if (-not $targetVoice) {
|
|
117
|
+
Write-Output " Please set a target voice: /agent-vibes:target-voice <voice>"
|
|
118
|
+
}
|
|
119
|
+
if ($targetLang -and $targetVoice) {
|
|
120
|
+
Write-Output " All set! TTS will speak in both languages."
|
|
121
|
+
Write-Output ""
|
|
122
|
+
Write-Output " How it works:"
|
|
123
|
+
Write-Output " 1. First: Speak in $mainLang (your current voice)"
|
|
124
|
+
Write-Output " 2. Then: Speak in $targetLang ($targetVoice voice)"
|
|
125
|
+
}
|
|
126
|
+
} else {
|
|
127
|
+
Write-Output " Enable learning mode with: /agent-vibes:learn"
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
Write-Output ""
|
|
131
|
+
Write-Output "-----------------------------------------------"
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
# Ensure project .claude exists
|
|
135
|
+
if (-not (Test-Path $ProjectClaude)) { New-Item -ItemType Directory -Path $ProjectClaude -Force | Out-Null }
|
|
136
|
+
|
|
137
|
+
switch ($Command) {
|
|
138
|
+
"enable" {
|
|
139
|
+
Set-Content -Path $LearnModeFile -Value "ON" -NoNewline
|
|
140
|
+
Write-Output "Language learning mode: ENABLED"
|
|
141
|
+
Write-Output ""
|
|
142
|
+
|
|
143
|
+
# Auto-set target voice if target language exists but voice doesn't
|
|
144
|
+
$targetLang = Get-TargetLanguage
|
|
145
|
+
$targetVoice = Get-TargetVoice
|
|
146
|
+
|
|
147
|
+
if ($targetLang -and -not $targetVoice) {
|
|
148
|
+
Write-Output "Auto-configuring voice for $targetLang..."
|
|
149
|
+
$recommended = Get-RecommendedVoice $targetLang
|
|
150
|
+
if ($recommended) {
|
|
151
|
+
Set-Content -Path $TargetVoiceFile -Value $recommended -NoNewline
|
|
152
|
+
$targetVoice = $recommended
|
|
153
|
+
Write-Output "Target voice automatically set to: $recommended"
|
|
154
|
+
Write-Output ""
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
Show-Status
|
|
159
|
+
|
|
160
|
+
# Greet in target language
|
|
161
|
+
if ($targetLang -and $targetVoice) {
|
|
162
|
+
$greeting = Get-GreetingForLanguage $targetLang
|
|
163
|
+
Write-Output ""
|
|
164
|
+
Write-Output "Your language teacher says: $greeting"
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
"disable" {
|
|
169
|
+
Set-Content -Path $LearnModeFile -Value "OFF" -NoNewline
|
|
170
|
+
Write-Output "Language learning mode: DISABLED"
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
"status" {
|
|
174
|
+
Show-Status
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
"is-enabled" {
|
|
178
|
+
if (Test-LearnModeEnabled) {
|
|
179
|
+
Write-Output "ON"
|
|
180
|
+
exit 0
|
|
181
|
+
} else {
|
|
182
|
+
Write-Output "OFF"
|
|
183
|
+
exit 1
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
"get-main-language" {
|
|
188
|
+
Write-Output (Get-MainLanguage)
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
"set-main-language" {
|
|
192
|
+
if (-not $Arg1) {
|
|
193
|
+
Write-Output "Usage: learn-manager.ps1 set-main-language <language>"
|
|
194
|
+
exit 1
|
|
195
|
+
}
|
|
196
|
+
Set-Content -Path $MainLangFile -Value $Arg1 -NoNewline
|
|
197
|
+
Write-Output "Main language set to: $Arg1"
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
"get-target-language" {
|
|
201
|
+
Write-Output (Get-TargetLanguage)
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
"set-target-language" {
|
|
205
|
+
if (-not $Arg1) {
|
|
206
|
+
Write-Output "Usage: learn-manager.ps1 set-target-language <language>"
|
|
207
|
+
exit 1
|
|
208
|
+
}
|
|
209
|
+
Set-Content -Path $TargetLangFile -Value $Arg1 -NoNewline
|
|
210
|
+
Write-Output "Target language set to: $Arg1"
|
|
211
|
+
|
|
212
|
+
# Auto-set recommended voice
|
|
213
|
+
$recommended = Get-RecommendedVoice $Arg1
|
|
214
|
+
if ($recommended) {
|
|
215
|
+
Set-Content -Path $TargetVoiceFile -Value $recommended -NoNewline
|
|
216
|
+
Write-Output "Target voice automatically set to: $recommended"
|
|
217
|
+
|
|
218
|
+
$greeting = Get-GreetingForLanguage $Arg1
|
|
219
|
+
Write-Output ""
|
|
220
|
+
Write-Output "Your language teacher says: $greeting"
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
"get-target-voice" {
|
|
225
|
+
Write-Output (Get-TargetVoice)
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
"set-target-voice" {
|
|
229
|
+
if (-not $Arg1) {
|
|
230
|
+
Write-Output "Usage: learn-manager.ps1 set-target-voice <voice>"
|
|
231
|
+
exit 1
|
|
232
|
+
}
|
|
233
|
+
Set-Content -Path $TargetVoiceFile -Value $Arg1 -NoNewline
|
|
234
|
+
Write-Output "Target voice set to: $Arg1"
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
default {
|
|
238
|
+
Write-Output "Usage: learn-manager.ps1 {enable|disable|status|is-enabled|get-main-language|set-main-language|get-target-language|set-target-language|get-target-voice|set-target-voice}"
|
|
239
|
+
exit 1
|
|
240
|
+
}
|
|
241
|
+
}
|