agentvibes 2.0.16 → 2.0.17-beta.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/.claude/github-star-reminder.txt +1 -1
- package/.claude/hooks/language-manager.sh +22 -8
- package/.claude/hooks/personality-manager.sh +22 -9
- package/.claude/hooks/voice-manager.sh +102 -23
- package/.claude/output-styles/agent-vibes.md +36 -52
- package/.mcp-minimal.json +26 -1
- package/AUDIO_TUNNEL_FIX_SUMMARY.md +223 -0
- package/INSTALL_MCP_WINDOWS.md +75 -0
- package/README.md +439 -307
- package/agentvibes.org/.claude/commands/agent-vibes/add.md +21 -0
- package/agentvibes.org/.claude/commands/agent-vibes/agent-vibes.md +68 -0
- package/agentvibes.org/.claude/commands/agent-vibes/commands.json +53 -0
- package/agentvibes.org/.claude/commands/agent-vibes/get.md +9 -0
- package/agentvibes.org/.claude/commands/agent-vibes/list.md +13 -0
- package/agentvibes.org/.claude/commands/agent-vibes/personality.md +79 -0
- package/agentvibes.org/.claude/commands/agent-vibes/preview.md +16 -0
- package/agentvibes.org/.claude/commands/agent-vibes/provider.md +54 -0
- package/agentvibes.org/.claude/commands/agent-vibes/replay.md +19 -0
- package/agentvibes.org/.claude/commands/agent-vibes/sample.md +12 -0
- package/agentvibes.org/.claude/commands/agent-vibes/sentiment.md +52 -0
- package/agentvibes.org/.claude/commands/agent-vibes/set-language.md +47 -0
- package/agentvibes.org/.claude/commands/agent-vibes/set-pretext.md +65 -0
- package/agentvibes.org/.claude/commands/agent-vibes/switch.md +53 -0
- package/agentvibes.org/.claude/commands/agent-vibes/update.md +20 -0
- package/agentvibes.org/.claude/commands/agent-vibes/version.md +10 -0
- package/agentvibes.org/.claude/commands/agent-vibes/whoami.md +7 -0
- package/agentvibes.org/.claude/hooks/bmad-voice-manager.sh +278 -0
- package/agentvibes.org/.claude/hooks/language-manager.sh +190 -0
- package/agentvibes.org/.claude/hooks/personality-manager.sh +279 -0
- package/agentvibes.org/.claude/hooks/piper-download-voices.sh +133 -0
- package/agentvibes.org/.claude/hooks/piper-voice-manager.sh +227 -0
- package/agentvibes.org/.claude/hooks/play-tts-elevenlabs.sh +201 -0
- package/agentvibes.org/.claude/hooks/play-tts-piper.sh +175 -0
- package/agentvibes.org/.claude/hooks/play-tts.sh +138 -0
- package/agentvibes.org/.claude/hooks/provider-commands.sh +374 -0
- package/agentvibes.org/.claude/hooks/provider-manager.sh +196 -0
- package/agentvibes.org/.claude/hooks/sentiment-manager.sh +163 -0
- package/agentvibes.org/.claude/hooks/voice-manager.sh +349 -0
- package/agentvibes.org/.claude/hooks/voices-config.sh +33 -0
- package/agentvibes.org/.claude/journal/2025-10-07.html +373 -0
- package/agentvibes.org/.claude/journal/index.html +91 -0
- package/agentvibes.org/.claude/output-styles/agent-vibes.md +203 -0
- package/agentvibes.org/.claude/personalities/angry.md +16 -0
- package/agentvibes.org/.claude/personalities/annoying.md +16 -0
- package/agentvibes.org/.claude/personalities/crass.md +16 -0
- package/agentvibes.org/.claude/personalities/dramatic.md +16 -0
- package/agentvibes.org/.claude/personalities/dry-humor.md +52 -0
- package/agentvibes.org/.claude/personalities/flirty.md +22 -0
- package/agentvibes.org/.claude/personalities/funny.md +16 -0
- package/agentvibes.org/.claude/personalities/grandpa.md +34 -0
- package/agentvibes.org/.claude/personalities/millennial.md +16 -0
- package/agentvibes.org/.claude/personalities/moody.md +16 -0
- package/agentvibes.org/.claude/personalities/normal.md +18 -0
- package/agentvibes.org/.claude/personalities/pirate.md +16 -0
- package/agentvibes.org/.claude/personalities/poetic.md +16 -0
- package/agentvibes.org/.claude/personalities/professional.md +16 -0
- package/agentvibes.org/.claude/personalities/robot.md +16 -0
- package/agentvibes.org/.claude/personalities/sarcastic.md +40 -0
- package/agentvibes.org/.claude/personalities/sassy.md +16 -0
- package/agentvibes.org/.claude/personalities/surfer-dude.md +16 -0
- package/agentvibes.org/.claude/personalities/zen.md +16 -0
- package/agentvibes.org/.mcp-minimal.json +60 -0
- package/agentvibes.org/CHANGELOG.md +56 -0
- package/agentvibes.org/README.md +93 -0
- package/agentvibes.org/app/(auth)/layout.tsx +15 -0
- package/agentvibes.org/app/(auth)/reset-password/page.tsx +45 -0
- package/agentvibes.org/app/(auth)/signin/page.tsx +82 -0
- package/agentvibes.org/app/(auth)/signup/page.tsx +104 -0
- package/agentvibes.org/app/(default)/layout.tsx +31 -0
- package/agentvibes.org/app/(default)/page.tsx +20 -0
- package/agentvibes.org/app/api/hello/route.ts +3 -0
- package/agentvibes.org/app/css/additional-styles/theme.css +82 -0
- package/agentvibes.org/app/css/additional-styles/utility-patterns.css +55 -0
- package/agentvibes.org/app/css/style.css +100 -0
- package/agentvibes.org/app/layout.tsx +63 -0
- package/agentvibes.org/components/cta.tsx +58 -0
- package/agentvibes.org/components/features.tsx +256 -0
- package/agentvibes.org/components/hero-home.tsx +133 -0
- package/agentvibes.org/components/modal-video.tsx +137 -0
- package/agentvibes.org/components/page-illustration.tsx +55 -0
- package/agentvibes.org/components/spotlight.tsx +77 -0
- package/agentvibes.org/components/testimonials.tsx +282 -0
- package/agentvibes.org/components/ui/footer.tsx +82 -0
- package/agentvibes.org/components/ui/header.tsx +53 -0
- package/agentvibes.org/components/ui/logo.tsx +10 -0
- package/agentvibes.org/components/workflows.tsx +176 -0
- package/agentvibes.org/next.config.js +4 -0
- package/agentvibes.org/package-lock.json +1974 -0
- package/agentvibes.org/package.json +30 -0
- package/agentvibes.org/pnpm-lock.yaml +1141 -0
- package/agentvibes.org/postcss.config.js +5 -0
- package/agentvibes.org/public/audio/02-sarcastic.mp3 +0 -0
- package/agentvibes.org/public/audio/03-angry.mp3 +0 -0
- package/agentvibes.org/public/audio/04-grandpa.mp3 +0 -0
- package/agentvibes.org/public/audio/05-sarcastic-example2.mp3 +0 -0
- package/agentvibes.org/public/audio/french-rachel.mp3 +0 -0
- package/agentvibes.org/public/audio/spanish-antoni.mp3 +0 -0
- package/agentvibes.org/public/favicon.ico +0 -0
- package/agentvibes.org/public/fonts/nacelle-italic.woff2 +0 -0
- package/agentvibes.org/public/fonts/nacelle-regular.woff2 +0 -0
- package/agentvibes.org/public/fonts/nacelle-semibold.woff2 +0 -0
- package/agentvibes.org/public/fonts/nacelle-semibolditalic.woff2 +0 -0
- package/agentvibes.org/public/images/blurred-shape-gray.svg +1 -0
- package/agentvibes.org/public/images/blurred-shape.svg +1 -0
- package/agentvibes.org/public/images/client-logo-01.svg +1 -0
- package/agentvibes.org/public/images/client-logo-02.svg +1 -0
- package/agentvibes.org/public/images/client-logo-03.svg +1 -0
- package/agentvibes.org/public/images/client-logo-04.svg +1 -0
- package/agentvibes.org/public/images/client-logo-05.svg +1 -0
- package/agentvibes.org/public/images/client-logo-06.svg +1 -0
- package/agentvibes.org/public/images/client-logo-07.svg +1 -0
- package/agentvibes.org/public/images/client-logo-08.svg +1 -0
- package/agentvibes.org/public/images/client-logo-09.svg +1 -0
- package/agentvibes.org/public/images/features.png +0 -0
- package/agentvibes.org/public/images/footer-illustration.svg +1 -0
- package/agentvibes.org/public/images/hero-image-01.jpg +0 -0
- package/agentvibes.org/public/images/logo.svg +1 -0
- package/agentvibes.org/public/images/page-illustration.svg +1 -0
- package/agentvibes.org/public/images/secondary-illustration.svg +1 -0
- package/agentvibes.org/public/images/testimonial-01.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-02.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-03.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-04.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-05.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-06.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-07.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-08.jpg +0 -0
- package/agentvibes.org/public/images/testimonial-09.jpg +0 -0
- package/agentvibes.org/public/images/workflow-01.png +0 -0
- package/agentvibes.org/public/images/workflow-02.png +0 -0
- package/agentvibes.org/public/images/workflow-03.png +0 -0
- package/agentvibes.org/public/videos/video.mp4 +0 -0
- package/agentvibes.org/tsconfig.json +28 -0
- package/agentvibes.org/utils/useMasonry.tsx +67 -0
- package/agentvibes.org/utils/useMousePosition.tsx +27 -0
- package/bin/mcp-server +206 -0
- package/docs/remote-audio-setup.md +83 -2
- package/linkedin/vibe-coding-and-pulseaudio.md +121 -0
- package/mcp-server/QUICK_START.md +205 -0
- package/mcp-server/README.md +347 -0
- package/mcp-server/WINDOWS_SETUP.md +277 -0
- package/mcp-server/examples/claude_desktop_config.json +11 -0
- package/mcp-server/examples/claude_desktop_config_piper.json +9 -0
- package/mcp-server/examples/custom_instructions.md +169 -0
- package/mcp-server/install-deps.js +95 -0
- package/mcp-server/pyproject.toml +52 -0
- package/mcp-server/requirements.txt +2 -0
- package/mcp-server/server.py +551 -0
- package/mcp-server/test_server.py +116 -0
- package/package.json +9 -3
- package/scripts/check_audio_tunnel.sh +21 -0
- package/setup-ubuntu-rdp-audio.sh +139 -0
- package/src/commands/install-mcp.js +384 -0
- package/src/installer.js +52 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
20251015
|
|
@@ -2,19 +2,33 @@
|
|
|
2
2
|
# Language Manager for AgentVibes
|
|
3
3
|
# Manages language settings and multilingual voice selection
|
|
4
4
|
|
|
5
|
-
# Determine
|
|
6
|
-
#
|
|
5
|
+
# Determine target .claude directory based on context
|
|
6
|
+
# Priority:
|
|
7
|
+
# 1. CLAUDE_PROJECT_DIR env var (set by MCP for project-specific settings)
|
|
8
|
+
# 2. Script location (for direct slash command usage)
|
|
9
|
+
# 3. Global ~/.claude (fallback)
|
|
10
|
+
|
|
7
11
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
8
|
-
CLAUDE_DIR="$(cd "$SCRIPT_DIR/.." 2>/dev/null && pwd)"
|
|
9
12
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
+
if [[ -n "$CLAUDE_PROJECT_DIR" ]] && [[ -d "$CLAUDE_PROJECT_DIR/.claude" ]]; then
|
|
14
|
+
# MCP context: Use the project directory where MCP was invoked
|
|
15
|
+
CLAUDE_DIR="$CLAUDE_PROJECT_DIR/.claude"
|
|
13
16
|
else
|
|
14
|
-
|
|
15
|
-
|
|
17
|
+
# Direct usage context: Use script location
|
|
18
|
+
CLAUDE_DIR="$(cd "$SCRIPT_DIR/.." 2>/dev/null && pwd)"
|
|
19
|
+
|
|
20
|
+
# If script is in global ~/.claude, use that
|
|
21
|
+
if [[ "$CLAUDE_DIR" == "$HOME/.claude" ]]; then
|
|
22
|
+
CLAUDE_DIR="$HOME/.claude"
|
|
23
|
+
elif [[ ! -d "$CLAUDE_DIR" ]]; then
|
|
24
|
+
# Fallback to global if directory doesn't exist
|
|
25
|
+
CLAUDE_DIR="$HOME/.claude"
|
|
26
|
+
fi
|
|
16
27
|
fi
|
|
17
28
|
|
|
29
|
+
LANGUAGE_FILE="$CLAUDE_DIR/tts-language.txt"
|
|
30
|
+
mkdir -p "$CLAUDE_DIR"
|
|
31
|
+
|
|
18
32
|
# Language to multilingual voice mapping
|
|
19
33
|
declare -A LANGUAGE_VOICES=(
|
|
20
34
|
["spanish"]="Antoni"
|
|
@@ -4,18 +4,31 @@
|
|
|
4
4
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
5
5
|
PERSONALITIES_DIR="$SCRIPT_DIR/../personalities"
|
|
6
6
|
|
|
7
|
-
#
|
|
8
|
-
#
|
|
9
|
-
#
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
if [[ -
|
|
14
|
-
|
|
7
|
+
# Determine target .claude directory based on context
|
|
8
|
+
# Priority:
|
|
9
|
+
# 1. CLAUDE_PROJECT_DIR env var (set by MCP for project-specific settings)
|
|
10
|
+
# 2. Script location (for direct slash command usage)
|
|
11
|
+
# 3. Global ~/.claude (fallback)
|
|
12
|
+
|
|
13
|
+
if [[ -n "$CLAUDE_PROJECT_DIR" ]] && [[ -d "$CLAUDE_PROJECT_DIR/.claude" ]]; then
|
|
14
|
+
# MCP context: Use the project directory where MCP was invoked
|
|
15
|
+
CLAUDE_DIR="$CLAUDE_PROJECT_DIR/.claude"
|
|
15
16
|
else
|
|
16
|
-
|
|
17
|
+
# Direct usage context: Use script location
|
|
18
|
+
# Script is at .claude/hooks/personality-manager.sh, so .claude is ..
|
|
19
|
+
CLAUDE_DIR="$(cd "$SCRIPT_DIR/.." 2>/dev/null && pwd)"
|
|
20
|
+
|
|
21
|
+
# If script is in global ~/.claude, use that
|
|
22
|
+
if [[ "$CLAUDE_DIR" == "$HOME/.claude" ]]; then
|
|
23
|
+
CLAUDE_DIR="$HOME/.claude"
|
|
24
|
+
elif [[ ! -d "$CLAUDE_DIR" ]]; then
|
|
25
|
+
# Fallback to global if directory doesn't exist
|
|
26
|
+
CLAUDE_DIR="$HOME/.claude"
|
|
27
|
+
fi
|
|
17
28
|
fi
|
|
18
29
|
|
|
30
|
+
PERSONALITY_FILE="$CLAUDE_DIR/tts-personality.txt"
|
|
31
|
+
|
|
19
32
|
# Function to get personality data from markdown file
|
|
20
33
|
get_personality_data() {
|
|
21
34
|
local personality="$1"
|
|
@@ -6,32 +6,86 @@
|
|
|
6
6
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
|
|
7
7
|
source "$SCRIPT_DIR/voices-config.sh"
|
|
8
8
|
|
|
9
|
-
#
|
|
10
|
-
#
|
|
11
|
-
#
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
9
|
+
# Determine target .claude directory based on context
|
|
10
|
+
# Priority:
|
|
11
|
+
# 1. CLAUDE_PROJECT_DIR env var (set by MCP for project-specific settings)
|
|
12
|
+
# 2. Script location (for direct slash command usage)
|
|
13
|
+
# 3. Global ~/.claude (fallback)
|
|
14
|
+
|
|
15
|
+
if [[ -n "$CLAUDE_PROJECT_DIR" ]] && [[ -d "$CLAUDE_PROJECT_DIR/.claude" ]]; then
|
|
16
|
+
# MCP context: Use the project directory where MCP was invoked
|
|
17
|
+
CLAUDE_DIR="$CLAUDE_PROJECT_DIR/.claude"
|
|
18
18
|
else
|
|
19
|
-
#
|
|
20
|
-
|
|
19
|
+
# Direct usage context: Use script location
|
|
20
|
+
SCRIPT_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
21
|
+
CLAUDE_DIR="$(dirname "$SCRIPT_PATH")"
|
|
22
|
+
|
|
23
|
+
# If script is in global ~/.claude, use that
|
|
24
|
+
if [[ "$CLAUDE_DIR" == "$HOME/.claude" ]]; then
|
|
25
|
+
CLAUDE_DIR="$HOME/.claude"
|
|
26
|
+
elif [[ ! -d "$CLAUDE_DIR" ]]; then
|
|
27
|
+
# Fallback to global if directory doesn't exist
|
|
28
|
+
CLAUDE_DIR="$HOME/.claude"
|
|
29
|
+
fi
|
|
21
30
|
fi
|
|
22
31
|
|
|
32
|
+
VOICE_FILE="$CLAUDE_DIR/tts-voice.txt"
|
|
33
|
+
|
|
23
34
|
case "$1" in
|
|
24
35
|
list)
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
36
|
+
# Get active provider
|
|
37
|
+
PROVIDER_FILE="$CLAUDE_DIR/tts-provider.txt"
|
|
38
|
+
if [[ ! -f "$PROVIDER_FILE" ]]; then
|
|
39
|
+
PROVIDER_FILE="$HOME/.claude/tts-provider.txt"
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
ACTIVE_PROVIDER="elevenlabs" # default
|
|
43
|
+
if [ -f "$PROVIDER_FILE" ]; then
|
|
44
|
+
ACTIVE_PROVIDER=$(cat "$PROVIDER_FILE")
|
|
45
|
+
fi
|
|
46
|
+
|
|
47
|
+
CURRENT_VOICE=$(cat "$VOICE_FILE" 2>/dev/null || echo "Cowboy Bob")
|
|
48
|
+
|
|
49
|
+
if [[ "$ACTIVE_PROVIDER" == "piper" ]]; then
|
|
50
|
+
echo "🎤 Available Piper TTS Voices:"
|
|
51
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
52
|
+
|
|
53
|
+
# List downloaded Piper voices
|
|
54
|
+
if [[ -f "$SCRIPT_DIR/piper-voice-manager.sh" ]]; then
|
|
55
|
+
source "$SCRIPT_DIR/piper-voice-manager.sh"
|
|
56
|
+
VOICE_DIR=$(get_voice_storage_dir)
|
|
57
|
+
VOICE_COUNT=0
|
|
58
|
+
for onnx_file in "$VOICE_DIR"/*.onnx; do
|
|
59
|
+
if [[ -f "$onnx_file" ]]; then
|
|
60
|
+
voice=$(basename "$onnx_file" .onnx)
|
|
61
|
+
if [ "$voice" = "$CURRENT_VOICE" ]; then
|
|
62
|
+
echo " ▶ $voice (current)"
|
|
63
|
+
else
|
|
64
|
+
echo " $voice"
|
|
65
|
+
fi
|
|
66
|
+
((VOICE_COUNT++))
|
|
67
|
+
fi
|
|
68
|
+
done | sort
|
|
69
|
+
|
|
70
|
+
if [[ $VOICE_COUNT -eq 0 ]]; then
|
|
71
|
+
echo " (No Piper voices downloaded yet)"
|
|
72
|
+
echo ""
|
|
73
|
+
echo "Download voices with: /agent-vibes:provider download <voice-name>"
|
|
74
|
+
echo "Examples: en_US-lessac-medium, en_GB-alba-medium"
|
|
75
|
+
fi
|
|
33
76
|
fi
|
|
34
|
-
|
|
77
|
+
else
|
|
78
|
+
echo "🎤 Available ElevenLabs TTS Voices:"
|
|
79
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
80
|
+
for voice in "${!VOICES[@]}"; do
|
|
81
|
+
if [ "$voice" = "$CURRENT_VOICE" ]; then
|
|
82
|
+
echo " ▶ $voice (current)"
|
|
83
|
+
else
|
|
84
|
+
echo " $voice"
|
|
85
|
+
fi
|
|
86
|
+
done | sort
|
|
87
|
+
fi
|
|
88
|
+
|
|
35
89
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
36
90
|
echo ""
|
|
37
91
|
echo "Usage: voice-manager.sh switch <name>"
|
|
@@ -314,9 +368,34 @@ case "$1" in
|
|
|
314
368
|
|
|
315
369
|
list-simple)
|
|
316
370
|
# Simple list for AI to parse and display
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
371
|
+
# Get active provider
|
|
372
|
+
PROVIDER_FILE="$CLAUDE_DIR/tts-provider.txt"
|
|
373
|
+
if [[ ! -f "$PROVIDER_FILE" ]]; then
|
|
374
|
+
PROVIDER_FILE="$HOME/.claude/tts-provider.txt"
|
|
375
|
+
fi
|
|
376
|
+
|
|
377
|
+
ACTIVE_PROVIDER="elevenlabs" # default
|
|
378
|
+
if [ -f "$PROVIDER_FILE" ]; then
|
|
379
|
+
ACTIVE_PROVIDER=$(cat "$PROVIDER_FILE")
|
|
380
|
+
fi
|
|
381
|
+
|
|
382
|
+
if [[ "$ACTIVE_PROVIDER" == "piper" ]]; then
|
|
383
|
+
# List downloaded Piper voices
|
|
384
|
+
if [[ -f "$SCRIPT_DIR/piper-voice-manager.sh" ]]; then
|
|
385
|
+
source "$SCRIPT_DIR/piper-voice-manager.sh"
|
|
386
|
+
VOICE_DIR=$(get_voice_storage_dir)
|
|
387
|
+
for onnx_file in "$VOICE_DIR"/*.onnx; do
|
|
388
|
+
if [[ -f "$onnx_file" ]]; then
|
|
389
|
+
basename "$onnx_file" .onnx
|
|
390
|
+
fi
|
|
391
|
+
done | sort
|
|
392
|
+
fi
|
|
393
|
+
else
|
|
394
|
+
# List ElevenLabs voices
|
|
395
|
+
for voice in "${!VOICES[@]}"; do
|
|
396
|
+
echo "$voice"
|
|
397
|
+
done | sort
|
|
398
|
+
fi
|
|
320
399
|
;;
|
|
321
400
|
|
|
322
401
|
replay)
|
|
@@ -128,71 +128,55 @@ You: "✅ That bug be walkin' the plank now, arr!"
|
|
|
128
128
|
|
|
129
129
|
## BMAD Plugin Integration
|
|
130
130
|
|
|
131
|
-
**Automatic voice switching
|
|
131
|
+
**Automatic voice switching for BMAD agents:**
|
|
132
132
|
|
|
133
|
-
When a BMAD agent is
|
|
133
|
+
When a BMAD agent is activated (e.g., `/BMad:agents:pm`), AgentVibes will automatically:
|
|
134
134
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
2. **Check if BMAD plugin is enabled** - `.claude/plugins/bmad-voices-enabled.flag` exists
|
|
135
|
+
1. **Detect BMAD agent from command/context**
|
|
136
|
+
2. **Check if BMAD plugin is enabled** (`.claude/plugins/bmad-voices-enabled.flag`)
|
|
138
137
|
3. **Look up voice mapping** from `.claude/plugins/bmad-voices.md`
|
|
138
|
+
4. **Apply agent's assigned voice** for all TTS acknowledgments/completions
|
|
139
|
+
5. **Apply agent's personality** from the mapping (if specified)
|
|
139
140
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
**THIS IS A CRITICAL EXECUTION REQUIREMENT - NOT OPTIONAL**
|
|
143
|
-
|
|
144
|
-
When a BMAD agent is active, you MUST follow this EXACT protocol for EVERY response:
|
|
145
|
-
|
|
146
|
-
**STEP 1: Check BMAD Context (BEFORE drafting ANY response)**
|
|
141
|
+
**Implementation:**
|
|
147
142
|
```bash
|
|
148
|
-
|
|
143
|
+
# At the start of acknowledgment/completion:
|
|
144
|
+
# Try to detect BMAD agent ID from current context
|
|
145
|
+
BMAD_AGENT_ID=""
|
|
146
|
+
|
|
147
|
+
# Method 1: Check if we're in a BMAD agent command context
|
|
148
|
+
if [[ -f ".bmad-agent-context" ]]; then
|
|
149
149
|
BMAD_AGENT_ID=$(cat .bmad-agent-context 2>/dev/null)
|
|
150
|
-
MAPPED_VOICE=$(.claude/hooks/bmad-voice-manager.sh get-voice "$BMAD_AGENT_ID")
|
|
151
150
|
fi
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
**STEP 2: Draft Your Response**
|
|
155
|
-
- Write your complete response text (don't show to user yet)
|
|
156
|
-
|
|
157
|
-
**STEP 3: Scan for Questions (MANDATORY - DO NOT SKIP)**
|
|
158
|
-
If your response contains ANY of these:
|
|
159
|
-
- Question mark (?)
|
|
160
|
-
- Numbered list (1., 2., 3., etc.)
|
|
161
|
-
- Question phrases: "What would you like", "Should I", "Would you prefer", "Which option", "How should", "Do you want"
|
|
162
151
|
|
|
163
|
-
|
|
152
|
+
# Method 2: Parse from command history/context (fallback)
|
|
153
|
+
# Note: This detection happens automatically when BMAD agent activates
|
|
164
154
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
.claude/hooks/
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
155
|
+
# If BMAD agent detected and plugin enabled, use mapped voice
|
|
156
|
+
if [[ -n "$BMAD_AGENT_ID" ]] && [[ -f ".claude/plugins/bmad-voices-enabled.flag" ]]; then
|
|
157
|
+
MAPPED_VOICE=$(.claude/hooks/bmad-voice-manager.sh get-voice "$BMAD_AGENT_ID")
|
|
158
|
+
MAPPED_PERSONALITY=$(.claude/hooks/bmad-voice-manager.sh get-personality "$BMAD_AGENT_ID")
|
|
159
|
+
|
|
160
|
+
if [[ -n "$MAPPED_VOICE" ]]; then
|
|
161
|
+
# Use BMAD agent's mapped voice and personality
|
|
162
|
+
if [[ -n "$MAPPED_PERSONALITY" ]] && [[ "$MAPPED_PERSONALITY" != "normal" ]]; then
|
|
163
|
+
# Read personality instructions from .claude/personalities/${MAPPED_PERSONALITY}.md
|
|
164
|
+
# Generate response in that personality style
|
|
165
|
+
fi
|
|
166
|
+
.claude/hooks/play-tts.sh "message" "$MAPPED_VOICE"
|
|
167
|
+
# Exit early - don't use default personality system
|
|
168
|
+
return
|
|
169
|
+
fi
|
|
170
|
+
fi
|
|
180
171
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
User: "What should we do?"
|
|
184
|
-
[STEP 1: Check context - analyst agent active]
|
|
185
|
-
[STEP 2: Draft response: "What would you like to do next?\n\n1. Option A\n2. Option B"]
|
|
186
|
-
[STEP 3: Scan - FOUND question "What would you like to do next?" and numbered list]
|
|
187
|
-
[STEP 4: Execute Bash: .claude/hooks/play-tts.sh "What would you like to do next" "Ralf Eisend"]
|
|
188
|
-
[STEP 5: Show response to user]
|
|
172
|
+
# If no BMAD agent or plugin disabled, use standard personality/sentiment system
|
|
173
|
+
# ... continue with normal sentiment/personality logic ...
|
|
189
174
|
```
|
|
190
175
|
|
|
191
176
|
**BMAD Agent Context Tracking:**
|
|
192
|
-
-
|
|
193
|
-
-
|
|
194
|
-
-
|
|
195
|
-
- This allows AgentVibes to detect which BMAD agent is active
|
|
177
|
+
- When a BMAD agent activates, write agent ID to `.bmad-agent-context`
|
|
178
|
+
- When agent exits, remove the file
|
|
179
|
+
- This allows AgentVibes to know which BMAD agent is active
|
|
196
180
|
|
|
197
181
|
**Voice Priority (in order):**
|
|
198
182
|
1. BMAD plugin voice (if agent active and plugin enabled)
|
package/.mcp-minimal.json
CHANGED
|
@@ -31,6 +31,22 @@
|
|
|
31
31
|
"NODE_PATH": "/home/fire/.nvm/versions/node/v22.20.0/lib/node_modules"
|
|
32
32
|
}
|
|
33
33
|
},
|
|
34
|
+
"obsidian": {
|
|
35
|
+
"command": "/home/fire/.local/bin/uv",
|
|
36
|
+
"args": [
|
|
37
|
+
"--directory",
|
|
38
|
+
"/home/fire/claude/mcp_obsidian",
|
|
39
|
+
"run",
|
|
40
|
+
"mcp-obsidian"
|
|
41
|
+
],
|
|
42
|
+
"env": {
|
|
43
|
+
"OBSIDIAN_API_KEY": "${MAIN_VAULT_OBSIDIAN_KEY}",
|
|
44
|
+
"OBSIDIAN_HOST": "${OBSIDIAN_HOST:-127.0.0.1}",
|
|
45
|
+
"OBSIDIAN_PORT": "27124",
|
|
46
|
+
"OBSIDIAN_HTTPS": "true",
|
|
47
|
+
"OBSIDIAN_VERIFY_SSL": "false"
|
|
48
|
+
}
|
|
49
|
+
},
|
|
34
50
|
"elevenlabs": {
|
|
35
51
|
"command": "npx",
|
|
36
52
|
"args": ["@microagents/mcp-server-elevenlabs"],
|
|
@@ -48,6 +64,15 @@
|
|
|
48
64
|
"SPACESHIP_API_KEY": "${SPACESHIP_API_KEY}",
|
|
49
65
|
"SPACESHIP_API_SECRET": "${SPACESHIP_API_SECRET}"
|
|
50
66
|
}
|
|
67
|
+
},
|
|
68
|
+
"agentvibes": {
|
|
69
|
+
"command": "python3",
|
|
70
|
+
"args": [
|
|
71
|
+
"/home/fire/claude/AgentVibes/mcp-server/server.py"
|
|
72
|
+
],
|
|
73
|
+
"env": {
|
|
74
|
+
"ELEVENLABS_API_KEY": "${ELEVENLABS_API_KEY}"
|
|
75
|
+
}
|
|
51
76
|
}
|
|
52
77
|
}
|
|
53
|
-
}
|
|
78
|
+
}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
# Audio Tunnel Configuration Fix Summary
|
|
2
|
+
|
|
3
|
+
## Problem Identified
|
|
4
|
+
|
|
5
|
+
Your SSH tunnel was configured incorrectly:
|
|
6
|
+
- **Old config**: `RemoteForward 14713 localhost:4713`
|
|
7
|
+
- **Issue**: Forwarding to port 4713 (wrong port)
|
|
8
|
+
- **Result**: PulseAudio couldn't establish connection
|
|
9
|
+
|
|
10
|
+
## Changes Made
|
|
11
|
+
|
|
12
|
+
### 1. WSL2 (Local Windows Machine) ✅
|
|
13
|
+
|
|
14
|
+
#### SSH Config Updated
|
|
15
|
+
- **File**: `~/.ssh/config` (WSL) and `C:\Users\Paul\.ssh\config` (Windows)
|
|
16
|
+
- **Change**: `RemoteForward 14713 localhost:4713` → `RemoteForward 14713 localhost:14713`
|
|
17
|
+
|
|
18
|
+
#### PulseAudio Config Updated
|
|
19
|
+
- **File**: `~/.config/pulse/client.conf`
|
|
20
|
+
- **Change**: `tcp:localhost:4713` → `tcp:localhost:14713`
|
|
21
|
+
|
|
22
|
+
#### Shell Environment Updated
|
|
23
|
+
- **Files**: `~/.bashrc` and `~/.zshrc`
|
|
24
|
+
- **Change**: `export PULSE_SERVER=tcp:fire-den-laptop-3000:14713` → `export PULSE_SERVER=tcp:localhost:14713`
|
|
25
|
+
|
|
26
|
+
#### Socat Bridge
|
|
27
|
+
- **Status**: Already configured ✅
|
|
28
|
+
- **Command**: `socat TCP-LISTEN:14713,fork,reuseaddr UNIX-CONNECT:/mnt/wslg/PulseServer`
|
|
29
|
+
- **Autostart**: Configured in both .bashrc and .zshrc
|
|
30
|
+
|
|
31
|
+
### 2. Remote Server (ubuntu-rdp)
|
|
32
|
+
|
|
33
|
+
#### Setup Script Created
|
|
34
|
+
- **Location**: `/home/fire/claude/AgentVibes/setup-ubuntu-rdp-audio.sh`
|
|
35
|
+
- **Purpose**: Configures PulseAudio on remote server to accept TCP connections on localhost
|
|
36
|
+
|
|
37
|
+
## How It Works Now
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
41
|
+
│ Architecture │
|
|
42
|
+
├─────────────────────────────────────────────────────────────────┤
|
|
43
|
+
│ │
|
|
44
|
+
│ Remote Server (ubuntu-rdp) │
|
|
45
|
+
│ ┌──────────────────────────────────────────┐ │
|
|
46
|
+
│ │ PulseAudio Server │ │
|
|
47
|
+
│ │ Listening on: tcp:localhost:4713 │ │
|
|
48
|
+
│ │ (native-protocol-tcp module) │ │
|
|
49
|
+
│ └────────────────┬─────────────────────────┘ │
|
|
50
|
+
│ │ │
|
|
51
|
+
│ │ Connection to │
|
|
52
|
+
│ │ tcp:localhost:14713 │
|
|
53
|
+
│ │ (via PULSE_SERVER env) │
|
|
54
|
+
│ │ │
|
|
55
|
+
│ ▼ │
|
|
56
|
+
│ ┌──────────────────────────────────────────┐ │
|
|
57
|
+
│ │ SSH Reverse Tunnel │ │
|
|
58
|
+
│ │ RemoteForward 14713 localhost:14713 │ │
|
|
59
|
+
│ └────────────────┬─────────────────────────┘ │
|
|
60
|
+
│ │ │
|
|
61
|
+
│ │ Encrypted SSH Tunnel │
|
|
62
|
+
│ │ │
|
|
63
|
+
└───────────────────┼────────────────────────────────────────────┘
|
|
64
|
+
│
|
|
65
|
+
▼
|
|
66
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
67
|
+
│ Windows Machine (WSL2) │
|
|
68
|
+
│ ┌──────────────────────────────────────────┐ │
|
|
69
|
+
│ │ Socat Bridge │ │
|
|
70
|
+
│ │ TCP:localhost:14713 → Unix Socket │ │
|
|
71
|
+
│ └────────────────┬─────────────────────────┘ │
|
|
72
|
+
│ │ │
|
|
73
|
+
│ ▼ │
|
|
74
|
+
│ ┌──────────────────────────────────────────┐ │
|
|
75
|
+
│ │ WSLg PulseAudio │ │
|
|
76
|
+
│ │ /mnt/wslg/PulseServer │ │
|
|
77
|
+
│ └────────────────┬─────────────────────────┘ │
|
|
78
|
+
│ │ │
|
|
79
|
+
│ ▼ │
|
|
80
|
+
│ Windows Audio │
|
|
81
|
+
│ (Your Speakers) │
|
|
82
|
+
│ │
|
|
83
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Testing Instructions
|
|
87
|
+
|
|
88
|
+
### Step 1: Update Your Local Environment
|
|
89
|
+
|
|
90
|
+
Reload your shell configuration:
|
|
91
|
+
```bash
|
|
92
|
+
source ~/.bashrc # or source ~/.zshrc if using zsh
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Verify socat is running:
|
|
96
|
+
```bash
|
|
97
|
+
ps aux | grep socat
|
|
98
|
+
# Should show: socat TCP-LISTEN:14713,fork,reuseaddr UNIX-CONNECT:/mnt/wslg/PulseServer
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
If socat isn't running, start it:
|
|
102
|
+
```bash
|
|
103
|
+
socat TCP-LISTEN:14713,fork,reuseaddr UNIX-CONNECT:/mnt/wslg/PulseServer > /dev/null 2>&1 &
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
### Step 2: Copy Setup Script to Remote Server
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
scp /home/fire/claude/AgentVibes/setup-ubuntu-rdp-audio.sh ubuntu-rdp:~/
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Step 3: SSH to Remote Server and Run Setup
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
ssh ubuntu-rdp
|
|
116
|
+
bash ~/setup-ubuntu-rdp-audio.sh
|
|
117
|
+
source ~/.bashrc # or source ~/.zshrc
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Step 4: Test the Connection
|
|
121
|
+
|
|
122
|
+
While connected via SSH to ubuntu-rdp:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
# 1. Verify PulseAudio is running
|
|
126
|
+
pactl info
|
|
127
|
+
|
|
128
|
+
# Expected output should show:
|
|
129
|
+
# Server String: tcp:localhost:14713
|
|
130
|
+
# Default Sink: <something>
|
|
131
|
+
# Default Source: <something>
|
|
132
|
+
|
|
133
|
+
# 2. Test with speaker-test
|
|
134
|
+
speaker-test -t sine -f 1000 -l 1
|
|
135
|
+
|
|
136
|
+
# 3. If you have a sound file
|
|
137
|
+
paplay /usr/share/sounds/alsa/Front_Center.wav
|
|
138
|
+
|
|
139
|
+
# 4. If AgentVibes is installed
|
|
140
|
+
.claude/hooks/play-tts.sh "Testing remote audio from ubuntu-rdp"
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Step 5: Troubleshooting
|
|
144
|
+
|
|
145
|
+
If audio doesn't work:
|
|
146
|
+
|
|
147
|
+
1. **Check SSH tunnel:**
|
|
148
|
+
```bash
|
|
149
|
+
# On remote server
|
|
150
|
+
ss -tlnp | grep :14713
|
|
151
|
+
# Should show listening socket
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
2. **Check local socat:**
|
|
155
|
+
```bash
|
|
156
|
+
# On WSL2
|
|
157
|
+
ps aux | grep socat
|
|
158
|
+
# Should be running
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
3. **Check PulseAudio on remote:**
|
|
162
|
+
```bash
|
|
163
|
+
# On remote server
|
|
164
|
+
pulseaudio --check && echo "Running" || echo "Not running"
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
4. **Restart everything:**
|
|
168
|
+
```bash
|
|
169
|
+
# On remote server
|
|
170
|
+
pulseaudio --kill
|
|
171
|
+
pulseaudio --start --exit-idle-time=-1
|
|
172
|
+
|
|
173
|
+
# Disconnect and reconnect SSH
|
|
174
|
+
exit
|
|
175
|
+
ssh ubuntu-rdp
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
## Important Notes
|
|
179
|
+
|
|
180
|
+
- **Firewall**: Ports 14713 and 4713 are only accessed via localhost/SSH tunnel, no external access needed
|
|
181
|
+
- **Security**: All audio data travels through encrypted SSH tunnel
|
|
182
|
+
- **Persistence**: All configuration is saved and will persist across reboots
|
|
183
|
+
- **Kaspersky**: You can actually close the firewall exceptions for 14713 and 4713 since they're only localhost connections now
|
|
184
|
+
|
|
185
|
+
## Quick Reference
|
|
186
|
+
|
|
187
|
+
**Key Files Modified:**
|
|
188
|
+
- `/home/fire/.ssh/config` (WSL)
|
|
189
|
+
- `/mnt/c/Users/Paul/.ssh/config` (Windows)
|
|
190
|
+
- `/home/fire/.config/pulse/client.conf`
|
|
191
|
+
- `/home/fire/.bashrc`
|
|
192
|
+
- `/home/fire/.zshrc`
|
|
193
|
+
|
|
194
|
+
**Key Commands:**
|
|
195
|
+
```bash
|
|
196
|
+
# Check PulseAudio status
|
|
197
|
+
pactl info
|
|
198
|
+
|
|
199
|
+
# Check SSH tunnel
|
|
200
|
+
ss -tlnp | grep :14713
|
|
201
|
+
|
|
202
|
+
# Test audio
|
|
203
|
+
speaker-test -t sine -f 1000 -l 1
|
|
204
|
+
|
|
205
|
+
# Restart PulseAudio
|
|
206
|
+
pulseaudio --kill && pulseaudio --start --exit-idle-time=-1
|
|
207
|
+
|
|
208
|
+
# Restart socat (if needed)
|
|
209
|
+
pkill socat
|
|
210
|
+
socat TCP-LISTEN:14713,fork,reuseaddr UNIX-CONNECT:/mnt/wslg/PulseServer > /dev/null 2>&1 &
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
## Success Indicators
|
|
214
|
+
|
|
215
|
+
You'll know it's working when:
|
|
216
|
+
1. ✅ `pactl info` on remote shows `Server String: tcp:localhost:14713`
|
|
217
|
+
2. ✅ `speaker-test` plays sound on your Windows speakers
|
|
218
|
+
3. ✅ AgentVibes TTS plays through your Windows speakers
|
|
219
|
+
4. ✅ No "Connection refused" or "Connection terminated" errors
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
*Generated by Claude Code on 2025-10-15*
|