agentvibes 5.12.0-alpha.0 → 5.13.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/config.json +15 -1
- package/.agentvibes/install-manifest.json +342 -0
- package/.claude/activation-instructions +54 -54
- package/.claude/commands/agent-vibes/commands.json +0 -20
- package/.claude/commands/agent-vibes/unmute.md +6 -2
- 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 -6
- package/.claude/config/audio-effects.cfg.bak-kokoro +7 -0
- package/.claude/config/background-music-enabled.txt +1 -1
- package/.claude/config/background-music-position.txt +27 -0
- package/.claude/config/background-music-volume.txt +1 -0
- package/.claude/config/background-music.cfg +1 -0
- package/.claude/config/background-music.txt +1 -0
- package/.claude/config/language.txt +1 -0
- package/.claude/config/personality.txt +1 -0
- package/.claude/config/tts-speech-rate.txt +1 -0
- 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/agentvibes-session-id.sh +69 -0
- package/.claude/hooks/bmad-party-speak.sh +20 -4
- package/.claude/hooks/bmad-speak.sh +60 -2
- package/.claude/hooks/bmad-tts-injector.sh +20 -1
- package/.claude/hooks/bmad-voice-manager.sh +25 -3
- package/.claude/hooks/clawdbot-receiver-SECURE.sh +21 -2
- package/.claude/hooks/clawdbot-receiver.sh +19 -1
- package/.claude/hooks/elevenlabs-voices.sh +62 -0
- package/.claude/hooks/kokoro-installer.sh +20 -10
- package/.claude/hooks/language-manager.sh +10 -3
- package/.claude/hooks/party-set-room.sh +71 -0
- package/.claude/hooks/party-stage-roster.py +328 -0
- package/.claude/hooks/personality-manager.sh +19 -2
- package/.claude/hooks/piper-voice-manager.sh +3 -2
- package/.claude/hooks/play-tts-agentvibes-receiver-for-voiceless-connections.sh +24 -5
- package/.claude/hooks/play-tts-elevenlabs.sh +38 -118
- package/.claude/hooks/play-tts-kokoro.sh +33 -6
- package/.claude/hooks/play-tts-soprano.sh +3 -2
- package/.claude/hooks/play-tts-ssh-remote.sh +72 -27
- package/.claude/hooks/play-tts-termux-ssh.sh +5 -4
- package/.claude/hooks/play-tts.sh +86 -69
- package/.claude/hooks/provider-catalog.json +352 -0
- package/.claude/hooks/provider-catalog.sh +161 -0
- package/.claude/hooks/provider-commands.sh +2 -1
- package/.claude/hooks/provider-manager.sh +47 -9
- package/.claude/hooks/python-resolver.sh +117 -0
- package/.claude/hooks/session-id.sh +56 -0
- package/.claude/hooks/session-start-tts.sh +39 -0
- package/.claude/hooks/speed-manager.sh +1 -1
- package/.claude/hooks/translate-manager.sh +3 -2
- package/.claude/hooks/translator.py +1 -1
- package/.claude/hooks/voice-manager.sh +242 -10
- package/.claude/hooks-windows/audio-cache-utils.ps1.user.bak +119 -0
- package/.claude/hooks-windows/language-manager.ps1 +7 -1
- package/.claude/hooks-windows/personality-manager.ps1 +16 -1
- package/.claude/hooks-windows/play-tts-kokoro.ps1 +20 -4
- package/.claude/hooks-windows/play-tts.ps1 +32 -3
- package/.claude/hooks-windows/provider-catalog.ps1 +140 -0
- package/.claude/hooks-windows/provider-manager.ps1 +63 -8
- package/.claude/hooks-windows/soprano-gradio-synth.py.user.bak +153 -0
- package/.claude/hooks-windows/tts-watcher.ps1 +84 -8
- package/.claude/hooks-windows/voice-manager-windows.ps1 +49 -0
- package/.claude/piper-voices-dir.txt +1 -0
- package/.clawdbot/README.md +105 -105
- package/.mcp.json +15 -0
- package/LICENSE +190 -190
- package/README.md +20 -6
- package/RELEASE_NOTES.md +81 -0
- package/WINDOWS-SETUP.md +208 -208
- package/bin/agent-vibes +39 -39
- package/bin/mcp-server.js +121 -121
- 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/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/pyproject.toml +52 -52
- package/mcp-server/requirements.txt +2 -2
- package/mcp-server/server.py +146 -49
- package/mcp-server/test_mcp_correctness.py +20 -2
- package/mcp-server/test_server.py +395 -395
- package/mcp-server/test_windows_script_parity.py +0 -2
- package/package.json +1 -1
- package/src/cli/list-personalities.js +110 -110
- package/src/cli/list-voices.js +115 -11
- package/src/commands/bmad-voices.js +394 -394
- package/src/console/app.js +1 -9
- package/src/console/bling.js +71 -0
- package/src/console/brand-colors.js +13 -13
- package/src/console/constants/personalities.js +44 -44
- package/src/console/footer-config.js +0 -4
- package/src/console/music-preview.js +79 -0
- package/src/console/navigation.js +0 -1
- package/src/console/tabs/agents-tab.js +14 -2
- package/src/console/tabs/help-tab.js +314 -314
- package/src/console/tabs/music-tab.js +81 -5
- package/src/console/tabs/placeholder-tab.js +0 -2
- package/src/console/tabs/readme-tab.js +272 -272
- package/src/console/tabs/settings-tab.js +207 -14
- package/src/console/tabs/setup-tab.js +39 -36
- package/src/console/tabs/voices-tab.js +102 -23
- package/src/console/widgets/destroy-list.js +25 -25
- package/src/console/widgets/notice.js +55 -55
- package/src/console/widgets/track-picker.js +82 -0
- package/src/installer/language-screen.js +31 -31
- package/src/installer/music-file-input.js +304 -304
- package/src/installer.js +124 -10
- package/src/services/language-service.js +47 -47
- package/src/services/navigation-service.js +1 -1
- package/src/services/provider-catalog.js +412 -0
- package/src/services/provider-voice-catalog.js +52 -73
- package/src/services/tts-engine-service.js +29 -0
- package/src/utils/audio-format-validator.js +277 -277
- package/src/utils/dependency-checker.js +469 -469
- package/src/utils/file-ownership-verifier.js +358 -358
- package/src/utils/music-file-validator.js +285 -285
- package/src/utils/preview-list-prompt.js +144 -144
- package/src/utils/provider-validator.js +62 -12
- package/src/utils/secure-music-storage.js +412 -412
- package/voice-assignments.json +8244 -8244
- package/.claude/commands/agent-vibes/language.md +0 -23
- package/.claude/commands/agent-vibes/learn.md +0 -67
- package/.claude/commands/agent-vibes/replay-target.md +0 -14
- package/.claude/commands/agent-vibes/target-voice.md +0 -26
- package/.claude/commands/agent-vibes/target.md +0 -30
- package/.claude/hooks/learn-manager.sh +0 -492
- package/.claude/hooks/replay-target-audio.sh +0 -95
- package/.claude/hooks-windows/learn-manager.ps1 +0 -241
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
#
|
|
3
|
-
# File: .claude/hooks/replay-target-audio.sh
|
|
4
|
-
#
|
|
5
|
-
# AgentVibes - Finally, your AI Agents can Talk Back! Text-to-Speech WITH personality for AI Assistants!
|
|
6
|
-
# Website: https://agentvibes.org
|
|
7
|
-
# Repository: https://github.com/paulpreibisch/AgentVibes
|
|
8
|
-
#
|
|
9
|
-
# Co-created by Paul Preibisch with Claude AI
|
|
10
|
-
# Copyright (c) 2025 Paul Preibisch
|
|
11
|
-
#
|
|
12
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
13
|
-
# you may not use this file except in compliance with the License.
|
|
14
|
-
# You may obtain a copy of the License at
|
|
15
|
-
#
|
|
16
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
17
|
-
#
|
|
18
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
19
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
-
# See the License for the specific language governing permissions and
|
|
22
|
-
# limitations under the License.
|
|
23
|
-
#
|
|
24
|
-
# DISCLAIMER: This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
25
|
-
# express or implied, including but not limited to the warranties of
|
|
26
|
-
# merchantability, fitness for a particular purpose and noninfringement.
|
|
27
|
-
# In no event shall the authors or copyright holders be liable for any claim,
|
|
28
|
-
# damages or other liability, whether in an action of contract, tort or
|
|
29
|
-
# otherwise, arising from, out of or in connection with the software or the
|
|
30
|
-
# use or other dealings in the software.
|
|
31
|
-
#
|
|
32
|
-
# ---
|
|
33
|
-
#
|
|
34
|
-
# @fileoverview Replay Last Target Language Audio
|
|
35
|
-
# @context Replays the most recent target language TTS for language learning
|
|
36
|
-
# @architecture Simple audio replay with lock mechanism for sequential playback
|
|
37
|
-
# @dependencies ffprobe, paplay/aplay/mpg123/mpv, .claude/last-target-audio.txt
|
|
38
|
-
# @entrypoints Called by /agent-vibes:replay-target slash command
|
|
39
|
-
# @patterns Sequential audio playback with lock file, duration-based lock release
|
|
40
|
-
# @related play-tts-piper.sh, play-tts-macos.sh, learn-manager.sh
|
|
41
|
-
#
|
|
42
|
-
|
|
43
|
-
# Fix locale warnings
|
|
44
|
-
export LC_ALL=C
|
|
45
|
-
|
|
46
|
-
TARGET_AUDIO_FILE="${CLAUDE_PROJECT_DIR:-.}/.claude/last-target-audio.txt"
|
|
47
|
-
|
|
48
|
-
# Check if target audio tracking file exists
|
|
49
|
-
if [ ! -f "$TARGET_AUDIO_FILE" ]; then
|
|
50
|
-
echo "❌ No target language audio found."
|
|
51
|
-
echo " Language learning mode may not be active."
|
|
52
|
-
echo " Activate with: /agent-vibes:learn"
|
|
53
|
-
exit 1
|
|
54
|
-
fi
|
|
55
|
-
|
|
56
|
-
# Read last target audio file path
|
|
57
|
-
LAST_AUDIO=$(cat "$TARGET_AUDIO_FILE")
|
|
58
|
-
|
|
59
|
-
# Verify audio file exists
|
|
60
|
-
if [ ! -f "$LAST_AUDIO" ]; then
|
|
61
|
-
echo "❌ Audio file not found: $LAST_AUDIO"
|
|
62
|
-
echo " The file may have been deleted or moved."
|
|
63
|
-
exit 1
|
|
64
|
-
fi
|
|
65
|
-
|
|
66
|
-
echo "🔁 Replaying target language audio..."
|
|
67
|
-
|
|
68
|
-
# Use lock file for sequential playback
|
|
69
|
-
LOCK_FILE="/tmp/agentvibes-audio.lock"
|
|
70
|
-
|
|
71
|
-
# Wait for any current audio to finish (max 30 seconds)
|
|
72
|
-
for i in {1..60}; do
|
|
73
|
-
if [ ! -f "$LOCK_FILE" ]; then
|
|
74
|
-
break
|
|
75
|
-
fi
|
|
76
|
-
sleep 0.5
|
|
77
|
-
done
|
|
78
|
-
|
|
79
|
-
# Create lock
|
|
80
|
-
touch "$LOCK_FILE"
|
|
81
|
-
|
|
82
|
-
# Get audio duration for proper lock timing
|
|
83
|
-
DURATION=$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$LAST_AUDIO" 2>/dev/null)
|
|
84
|
-
DURATION=${DURATION%.*} # Round to integer
|
|
85
|
-
DURATION=${DURATION:-1} # Default to 1 second if detection fails
|
|
86
|
-
|
|
87
|
-
# Play audio
|
|
88
|
-
(paplay "$LAST_AUDIO" || aplay "$LAST_AUDIO" || mpg123 "$LAST_AUDIO" || mpv "$LAST_AUDIO") >/dev/null 2>&1 &
|
|
89
|
-
PLAYER_PID=$!
|
|
90
|
-
|
|
91
|
-
# Wait for audio to finish, then release lock
|
|
92
|
-
(sleep $DURATION; rm -f "$LOCK_FILE") &
|
|
93
|
-
disown
|
|
94
|
-
|
|
95
|
-
echo "✅ Replay complete: $(basename "$LAST_AUDIO")"
|
|
@@ -1,241 +0,0 @@
|
|
|
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
|
-
}
|