agentvibes 2.0.20 → 2.0.22
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/agents/health-coach.md +154 -0
- package/.claude/agents/motivator.md +171 -0
- package/.claude/agents/negotiator.md +97 -0
- package/.claude/commands/agent-vibes/agent-health-coach.md +15 -0
- package/.claude/commands/agent-vibes/agent-motivator.md +15 -0
- package/.claude/commands/agent-vibes/agent-negotiator.md +15 -0
- package/.claude/commands/agent-vibes/agent.md +79 -0
- package/.claude/commands/agent-vibes/commands.json +4 -0
- package/.claude/commands/agent-vibes/set-favorite-voice.md +84 -0
- package/.claude/github-star-reminder.txt +1 -1
- package/.claude/hooks/download-extra-voices.sh +244 -0
- package/.claude/hooks/personality-manager.sh +81 -0
- package/.claude/hooks/piper-download-voices.sh +3 -93
- package/.claude/hooks/piper-multispeaker-registry.sh +165 -0
- package/.claude/hooks/play-tts-elevenlabs.sh +5 -3
- package/.claude/hooks/play-tts-piper.sh +27 -44
- package/.claude/hooks/provider-manager.sh +24 -5
- package/.claude/hooks/speed-manager.sh +10 -12
- package/.claude/hooks/voice-manager.sh +94 -56
- package/README.md +0 -3
- package/RELEASE_NOTES.md +40 -247
- package/docs/agents.md +485 -0
- package/docs/commands.md +1 -21
- package/docs/extra-voices-implementation-summary.md +235 -0
- package/docs/voice-registration-fix.md +254 -0
- package/fix-vscode-colors.sh +88 -0
- package/fixcolors +88 -0
- package/generate-all-agent-voices.sh +174 -0
- package/generate-missing-elevenlabs-complete.sh +236 -0
- package/generate-missing-elevenlabs.sh +110 -0
- package/generate-new-voices.sh +108 -0
- package/generate-piper-agent-intros.sh +85 -0
- package/generate-provider-and-agent-intros.sh +136 -0
- package/logo/fav_icon_128x128.png +0 -0
- package/logo/fav_icon_128x128.png:Zone.Identifier +4 -0
- package/logo/logo1.webp +0 -0
- package/logo/logo1.webp:Zone.Identifier +4 -0
- package/logo/social.png +0 -0
- package/logo/social.png:Zone.Identifier +4 -0
- package/mcp-server/agentvibes.db +0 -0
- package/mcp-server/server.py +47 -14
- package/package.json +3 -3
- package/regenerate-agent-voices.sh +79 -0
- package/test/unit/provider-manager.bats +8 -5
- package/test/unit/speed-manager.bats +4 -4
- package/agentvibes.org/.claude/audio/tts-padded-1760744118.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760748535.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760748676.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760750748.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760750947.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760752718.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760752907.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753017.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753045.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753241.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753315.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753382.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753408.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753426.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753446.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753541.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753553.mp3 +0 -0
- package/agentvibes.org/.claude/audio/tts-padded-1760753577.mp3 +0 -0
- package/agentvibes.org/.claude/commands/agent-vibes/add.md +0 -21
- package/agentvibes.org/.claude/commands/agent-vibes/agent-vibes.md +0 -68
- package/agentvibes.org/.claude/commands/agent-vibes/bmad.md +0 -196
- package/agentvibes.org/.claude/commands/agent-vibes/commands.json +0 -77
- package/agentvibes.org/.claude/commands/agent-vibes/get.md +0 -9
- package/agentvibes.org/.claude/commands/agent-vibes/language.md +0 -23
- package/agentvibes.org/.claude/commands/agent-vibes/learn.md +0 -67
- package/agentvibes.org/.claude/commands/agent-vibes/list.md +0 -13
- package/agentvibes.org/.claude/commands/agent-vibes/personality.md +0 -79
- package/agentvibes.org/.claude/commands/agent-vibes/preview.md +0 -17
- package/agentvibes.org/.claude/commands/agent-vibes/provider.md +0 -54
- package/agentvibes.org/.claude/commands/agent-vibes/replay-target.md +0 -14
- package/agentvibes.org/.claude/commands/agent-vibes/replay.md +0 -19
- package/agentvibes.org/.claude/commands/agent-vibes/sample.md +0 -12
- package/agentvibes.org/.claude/commands/agent-vibes/sentiment.md +0 -52
- package/agentvibes.org/.claude/commands/agent-vibes/set-language.md +0 -47
- package/agentvibes.org/.claude/commands/agent-vibes/set-pretext.md +0 -65
- package/agentvibes.org/.claude/commands/agent-vibes/set-speed.md +0 -41
- package/agentvibes.org/.claude/commands/agent-vibes/switch.md +0 -53
- package/agentvibes.org/.claude/commands/agent-vibes/target-voice.md +0 -26
- package/agentvibes.org/.claude/commands/agent-vibes/target.md +0 -30
- package/agentvibes.org/.claude/commands/agent-vibes/update.md +0 -20
- package/agentvibes.org/.claude/commands/agent-vibes/version.md +0 -10
- package/agentvibes.org/.claude/commands/agent-vibes/whoami.md +0 -7
- package/agentvibes.org/.claude/hooks/bmad-tts-injector.sh +0 -386
- package/agentvibes.org/.claude/hooks/bmad-voice-manager.sh +0 -375
- package/agentvibes.org/.claude/hooks/check-output-style.sh +0 -60
- package/agentvibes.org/.claude/hooks/github-star-reminder.sh +0 -94
- package/agentvibes.org/.claude/hooks/language-manager.sh +0 -360
- package/agentvibes.org/.claude/hooks/learn-manager.sh +0 -443
- package/agentvibes.org/.claude/hooks/personality-manager.sh +0 -324
- package/agentvibes.org/.claude/hooks/piper-download-voices.sh +0 -133
- package/agentvibes.org/.claude/hooks/piper-installer.sh +0 -144
- package/agentvibes.org/.claude/hooks/piper-voice-manager.sh +0 -227
- package/agentvibes.org/.claude/hooks/play-tts-elevenlabs.sh +0 -376
- package/agentvibes.org/.claude/hooks/play-tts-piper.sh +0 -281
- package/agentvibes.org/.claude/hooks/play-tts.sh +0 -69
- package/agentvibes.org/.claude/hooks/provider-commands.sh +0 -505
- package/agentvibes.org/.claude/hooks/provider-manager.sh +0 -248
- package/agentvibes.org/.claude/hooks/replay-target-audio.sh +0 -64
- package/agentvibes.org/.claude/hooks/sentiment-manager.sh +0 -163
- package/agentvibes.org/.claude/hooks/speed-manager.sh +0 -259
- package/agentvibes.org/.claude/hooks/voice-manager.sh +0 -477
- package/agentvibes.org/.claude/hooks/voices-config.sh +0 -33
- package/agentvibes.org/.claude/journal/2025-10-07.html +0 -373
- package/agentvibes.org/.claude/journal/index.html +0 -91
- package/agentvibes.org/.claude/output-styles/agent-vibes.md +0 -203
- package/agentvibes.org/.claude/personalities/angry.md +0 -17
- package/agentvibes.org/.claude/personalities/annoying.md +0 -17
- package/agentvibes.org/.claude/personalities/crass.md +0 -17
- package/agentvibes.org/.claude/personalities/dramatic.md +0 -17
- package/agentvibes.org/.claude/personalities/dry-humor.md +0 -53
- package/agentvibes.org/.claude/personalities/flirty.md +0 -23
- package/agentvibes.org/.claude/personalities/funny.md +0 -17
- package/agentvibes.org/.claude/personalities/grandpa.md +0 -35
- package/agentvibes.org/.claude/personalities/millennial.md +0 -17
- package/agentvibes.org/.claude/personalities/moody.md +0 -17
- package/agentvibes.org/.claude/personalities/normal.md +0 -19
- package/agentvibes.org/.claude/personalities/pirate.md +0 -17
- package/agentvibes.org/.claude/personalities/poetic.md +0 -17
- package/agentvibes.org/.claude/personalities/professional.md +0 -17
- package/agentvibes.org/.claude/personalities/robot.md +0 -17
- package/agentvibes.org/.claude/personalities/sarcastic.md +0 -41
- package/agentvibes.org/.claude/personalities/sassy.md +0 -17
- package/agentvibes.org/.claude/personalities/surfer-dude.md +0 -17
- package/agentvibes.org/.claude/personalities/zen.md +0 -17
- package/agentvibes.org/.claude/piper-voices-dir.txt +0 -1
- package/agentvibes.org/.claude/plugins/bmad-voices.md +0 -42
- package/agentvibes.org/.claude/tts-provider.txt +0 -1
- package/agentvibes.org/.mcp-minimal.json +0 -60
- package/agentvibes.org/CHANGELOG.md +0 -56
- package/agentvibes.org/README.md +0 -93
- package/agentvibes.org/app/(auth)/layout.tsx +0 -15
- package/agentvibes.org/app/(auth)/reset-password/page.tsx +0 -45
- package/agentvibes.org/app/(auth)/signin/page.tsx +0 -82
- package/agentvibes.org/app/(auth)/signup/page.tsx +0 -104
- package/agentvibes.org/app/(default)/blog/[slug]/page.tsx +0 -128
- package/agentvibes.org/app/(default)/blog/page.tsx +0 -95
- package/agentvibes.org/app/(default)/layout.tsx +0 -31
- package/agentvibes.org/app/(default)/page.tsx +0 -20
- package/agentvibes.org/app/api/hello/route.ts +0 -3
- package/agentvibes.org/app/css/additional-styles/theme.css +0 -82
- package/agentvibes.org/app/css/additional-styles/utility-patterns.css +0 -55
- package/agentvibes.org/app/css/style.css +0 -100
- package/agentvibes.org/app/layout.tsx +0 -63
- package/agentvibes.org/components/code-block.tsx +0 -27
- package/agentvibes.org/components/cta.tsx +0 -58
- package/agentvibes.org/components/features.tsx +0 -256
- package/agentvibes.org/components/hero-home.tsx +0 -133
- package/agentvibes.org/components/mdx-components.tsx +0 -128
- package/agentvibes.org/components/modal-video.tsx +0 -137
- package/agentvibes.org/components/page-illustration.tsx +0 -55
- package/agentvibes.org/components/spotlight.tsx +0 -77
- package/agentvibes.org/components/testimonials.tsx +0 -282
- package/agentvibes.org/components/ui/footer.tsx +0 -82
- package/agentvibes.org/components/ui/header.tsx +0 -68
- package/agentvibes.org/components/ui/logo.tsx +0 -10
- package/agentvibes.org/components/workflows.tsx +0 -176
- package/agentvibes.org/content/blog/discovering-new-piper-voices.mdx +0 -253
- package/agentvibes.org/content/blog/getting-started-agentvibes.mdx +0 -228
- package/agentvibes.org/content/blog/introducing-agentvibes-v2.mdx +0 -250
- package/agentvibes.org/content/blog/language-learning-with-agentvibes.mdx +0 -142
- package/agentvibes.org/content/blog/voice-personalities-guide.mdx +0 -119
- package/agentvibes.org/lib/blog.ts +0 -73
- package/agentvibes.org/next.config.js +0 -6
- package/agentvibes.org/package-lock.json +0 -4285
- package/agentvibes.org/package.json +0 -40
- package/agentvibes.org/pnpm-lock.yaml +0 -1141
- package/agentvibes.org/postcss.config.js +0 -5
- 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/piper-voices/speaker_0_Cori_Samuel.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_10_Steve_C.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_11_Owlivia.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_12_Paul_Hampton.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_13_Jennifer_Dorr.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_14_Emily_Cripps.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_15_Martin_Clifton.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_1_Kara_Shallenberg.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_2_Kristin_Hughes.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_3_Maria_Kasper.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_4_Mike_Pelton.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_5_Mark_Nelson.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_6_Michael_Scherer.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_7_James_K_White.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_8_Rose_Ibex.wav +0 -0
- package/agentvibes.org/public/audio/piper-voices/speaker_9_progressingamerica.wav +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 +0 -1
- package/agentvibes.org/public/images/blurred-shape.svg +0 -1
- package/agentvibes.org/public/images/client-logo-01.svg +0 -1
- package/agentvibes.org/public/images/client-logo-02.svg +0 -1
- package/agentvibes.org/public/images/client-logo-03.svg +0 -1
- package/agentvibes.org/public/images/client-logo-04.svg +0 -1
- package/agentvibes.org/public/images/client-logo-05.svg +0 -1
- package/agentvibes.org/public/images/client-logo-06.svg +0 -1
- package/agentvibes.org/public/images/client-logo-07.svg +0 -1
- package/agentvibes.org/public/images/client-logo-08.svg +0 -1
- package/agentvibes.org/public/images/client-logo-09.svg +0 -1
- package/agentvibes.org/public/images/features.png +0 -0
- package/agentvibes.org/public/images/footer-illustration.svg +0 -1
- package/agentvibes.org/public/images/hero-image-01.jpg +0 -0
- package/agentvibes.org/public/images/logo.svg +0 -1
- package/agentvibes.org/public/images/page-illustration.svg +0 -1
- package/agentvibes.org/public/images/secondary-illustration.svg +0 -1
- 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 +0 -28
- package/agentvibes.org/utils/useMasonry.tsx +0 -67
- package/agentvibes.org/utils/useMousePosition.tsx +0 -27
- package/docs/bryce-beattie-voice-licensing.md +0 -131
|
@@ -1,505 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
#
|
|
3
|
-
# @fileoverview Provider management slash commands
|
|
4
|
-
# @context User-facing commands for switching and managing TTS providers
|
|
5
|
-
# @architecture Part of /agent-vibes:* command system
|
|
6
|
-
#
|
|
7
|
-
|
|
8
|
-
# Get script directory
|
|
9
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
10
|
-
source "$SCRIPT_DIR/provider-manager.sh"
|
|
11
|
-
source "$SCRIPT_DIR/language-manager.sh"
|
|
12
|
-
|
|
13
|
-
COMMAND="${1:-help}"
|
|
14
|
-
|
|
15
|
-
# @function is_language_supported
|
|
16
|
-
# @intent Check if a language is supported by a provider
|
|
17
|
-
# @param $1 {string} language - Language code (e.g., "spanish", "french")
|
|
18
|
-
# @param $2 {string} provider - Provider name (e.g., "elevenlabs", "piper")
|
|
19
|
-
# @returns 0 if supported, 1 if not
|
|
20
|
-
is_language_supported() {
|
|
21
|
-
local language="$1"
|
|
22
|
-
local provider="$2"
|
|
23
|
-
|
|
24
|
-
# English is always supported
|
|
25
|
-
if [[ "$language" == "english" ]] || [[ "$language" == "en" ]]; then
|
|
26
|
-
return 0
|
|
27
|
-
fi
|
|
28
|
-
|
|
29
|
-
case "$provider" in
|
|
30
|
-
elevenlabs)
|
|
31
|
-
# ElevenLabs supports all languages via multilingual voices
|
|
32
|
-
return 0
|
|
33
|
-
;;
|
|
34
|
-
piper)
|
|
35
|
-
# Piper only supports English natively
|
|
36
|
-
return 1
|
|
37
|
-
;;
|
|
38
|
-
*)
|
|
39
|
-
return 1
|
|
40
|
-
;;
|
|
41
|
-
esac
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
# @function provider_list
|
|
45
|
-
# @intent Display all available providers with status
|
|
46
|
-
provider_list() {
|
|
47
|
-
local current_provider
|
|
48
|
-
current_provider=$(get_active_provider)
|
|
49
|
-
|
|
50
|
-
echo "┌────────────────────────────────────────────────────────────┐"
|
|
51
|
-
echo "│ Available TTS Providers │"
|
|
52
|
-
echo "├────────────────────────────────────────────────────────────┤"
|
|
53
|
-
|
|
54
|
-
# ElevenLabs
|
|
55
|
-
if [[ "$current_provider" == "elevenlabs" ]]; then
|
|
56
|
-
echo "│ ✓ ElevenLabs Premium quality ⭐⭐⭐⭐⭐ [ACTIVE] │"
|
|
57
|
-
else
|
|
58
|
-
echo "│ ElevenLabs Premium quality ⭐⭐⭐⭐⭐ │"
|
|
59
|
-
fi
|
|
60
|
-
echo "│ Cost: Free tier + \$5-22/mo │"
|
|
61
|
-
echo "│ Platform: All (Windows, macOS, Linux, WSL) │"
|
|
62
|
-
echo "│ Offline: No │"
|
|
63
|
-
echo "│ │"
|
|
64
|
-
|
|
65
|
-
# Piper
|
|
66
|
-
if [[ "$current_provider" == "piper" ]]; then
|
|
67
|
-
echo "│ ✓ Piper TTS Free, offline ⭐⭐⭐⭐ [ACTIVE] │"
|
|
68
|
-
else
|
|
69
|
-
echo "│ Piper TTS Free, offline ⭐⭐⭐⭐ │"
|
|
70
|
-
fi
|
|
71
|
-
echo "│ Cost: Free forever │"
|
|
72
|
-
echo "│ Platform: WSL, Linux only │"
|
|
73
|
-
echo "│ Offline: Yes │"
|
|
74
|
-
echo "└────────────────────────────────────────────────────────────┘"
|
|
75
|
-
echo ""
|
|
76
|
-
echo "Learn more: agentvibes.org/providers"
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
# @function provider_switch
|
|
80
|
-
# @intent Switch to a different TTS provider
|
|
81
|
-
provider_switch() {
|
|
82
|
-
local new_provider="$1"
|
|
83
|
-
local force_mode=false
|
|
84
|
-
|
|
85
|
-
# Check for --force or --yes flag
|
|
86
|
-
if [[ "$2" == "--force" ]] || [[ "$2" == "--yes" ]] || [[ "$2" == "-y" ]]; then
|
|
87
|
-
force_mode=true
|
|
88
|
-
fi
|
|
89
|
-
|
|
90
|
-
# Auto-enable force mode if running non-interactively (e.g., from MCP)
|
|
91
|
-
# Check multiple conditions for MCP/non-interactive context
|
|
92
|
-
if [[ ! -t 0 ]] || [[ -n "$CLAUDE_PROJECT_DIR" ]] || [[ -n "$MCP_SERVER" ]]; then
|
|
93
|
-
force_mode=true
|
|
94
|
-
fi
|
|
95
|
-
|
|
96
|
-
if [[ -z "$new_provider" ]]; then
|
|
97
|
-
echo "❌ Error: Provider name required"
|
|
98
|
-
echo "Usage: /agent-vibes:provider switch <provider> [--force]"
|
|
99
|
-
echo "Available: elevenlabs, piper"
|
|
100
|
-
return 1
|
|
101
|
-
fi
|
|
102
|
-
|
|
103
|
-
# Validate provider
|
|
104
|
-
if ! validate_provider "$new_provider"; then
|
|
105
|
-
echo "❌ Invalid provider: $new_provider"
|
|
106
|
-
echo ""
|
|
107
|
-
echo "Available providers:"
|
|
108
|
-
list_providers
|
|
109
|
-
return 1
|
|
110
|
-
fi
|
|
111
|
-
|
|
112
|
-
local current_provider
|
|
113
|
-
current_provider=$(get_active_provider)
|
|
114
|
-
|
|
115
|
-
if [[ "$current_provider" == "$new_provider" ]]; then
|
|
116
|
-
echo "✓ Already using $new_provider"
|
|
117
|
-
return 0
|
|
118
|
-
fi
|
|
119
|
-
|
|
120
|
-
# Platform check for Piper
|
|
121
|
-
if [[ "$new_provider" == "piper" ]]; then
|
|
122
|
-
if ! grep -qi microsoft /proc/version 2>/dev/null && [[ "$(uname -s)" != "Linux" ]]; then
|
|
123
|
-
echo "❌ Piper is only supported on WSL and Linux"
|
|
124
|
-
echo "Your platform: $(uname -s)"
|
|
125
|
-
echo "See: agentvibes.org/platform-support"
|
|
126
|
-
return 1
|
|
127
|
-
fi
|
|
128
|
-
|
|
129
|
-
# Check if Piper is installed
|
|
130
|
-
if ! command -v piper &> /dev/null; then
|
|
131
|
-
echo "❌ Piper TTS is not installed"
|
|
132
|
-
echo ""
|
|
133
|
-
echo "Install with: pipx install piper-tts"
|
|
134
|
-
echo "Or run: .claude/hooks/piper-installer.sh"
|
|
135
|
-
echo ""
|
|
136
|
-
echo "Visit: agentvibes.org/install-piper"
|
|
137
|
-
return 1
|
|
138
|
-
fi
|
|
139
|
-
fi
|
|
140
|
-
|
|
141
|
-
# Check language compatibility
|
|
142
|
-
local current_language
|
|
143
|
-
current_language=$(get_language_code)
|
|
144
|
-
|
|
145
|
-
if [[ "$current_language" != "english" ]]; then
|
|
146
|
-
if ! is_language_supported "$current_language" "$new_provider" 2>/dev/null; then
|
|
147
|
-
echo "⚠️ Language Compatibility Warning"
|
|
148
|
-
echo ""
|
|
149
|
-
echo "Current language: $current_language"
|
|
150
|
-
echo "Target provider: $new_provider"
|
|
151
|
-
echo ""
|
|
152
|
-
echo "❌ Language '$current_language' is not natively supported by $new_provider"
|
|
153
|
-
echo " Will fall back to English when using $new_provider"
|
|
154
|
-
echo ""
|
|
155
|
-
echo "Options:"
|
|
156
|
-
echo " 1. Continue anyway (will use English)"
|
|
157
|
-
echo " 2. Switch language to English"
|
|
158
|
-
echo " 3. Cancel provider switch"
|
|
159
|
-
echo ""
|
|
160
|
-
|
|
161
|
-
# Skip prompt in force mode
|
|
162
|
-
if [[ "$force_mode" == true ]]; then
|
|
163
|
-
echo "⏩ Force mode: Continuing with fallback to English..."
|
|
164
|
-
else
|
|
165
|
-
read -p "Choose option [1-3]: " -n 1 -r
|
|
166
|
-
echo
|
|
167
|
-
|
|
168
|
-
case $REPLY in
|
|
169
|
-
1)
|
|
170
|
-
echo "⏩ Continuing with fallback to English..."
|
|
171
|
-
;;
|
|
172
|
-
2)
|
|
173
|
-
echo "🔄 Switching language to English..."
|
|
174
|
-
"$SCRIPT_DIR/language-manager.sh" set english
|
|
175
|
-
;;
|
|
176
|
-
3)
|
|
177
|
-
echo "❌ Provider switch cancelled"
|
|
178
|
-
return 1
|
|
179
|
-
;;
|
|
180
|
-
*)
|
|
181
|
-
echo "❌ Invalid option, cancelling"
|
|
182
|
-
return 1
|
|
183
|
-
;;
|
|
184
|
-
esac
|
|
185
|
-
fi
|
|
186
|
-
fi
|
|
187
|
-
fi
|
|
188
|
-
|
|
189
|
-
# Confirm switch (skip in force mode)
|
|
190
|
-
if [[ "$force_mode" != true ]]; then
|
|
191
|
-
echo ""
|
|
192
|
-
echo "⚠️ Switch to $(echo $new_provider | tr '[:lower:]' '[:upper:]')?"
|
|
193
|
-
echo ""
|
|
194
|
-
echo "Current: $current_provider"
|
|
195
|
-
echo "New: $new_provider"
|
|
196
|
-
if [[ "$current_language" != "english" ]]; then
|
|
197
|
-
echo "Language: $current_language"
|
|
198
|
-
fi
|
|
199
|
-
echo ""
|
|
200
|
-
read -p "Continue? [y/N]: " -n 1 -r
|
|
201
|
-
echo
|
|
202
|
-
|
|
203
|
-
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
204
|
-
echo "❌ Switch cancelled"
|
|
205
|
-
return 1
|
|
206
|
-
fi
|
|
207
|
-
else
|
|
208
|
-
echo "⏩ Force mode: Switching to $new_provider..."
|
|
209
|
-
fi
|
|
210
|
-
|
|
211
|
-
# Perform switch
|
|
212
|
-
set_active_provider "$new_provider"
|
|
213
|
-
|
|
214
|
-
# Update target voice if language learning mode is active
|
|
215
|
-
local target_lang_file=""
|
|
216
|
-
local target_voice_file=""
|
|
217
|
-
|
|
218
|
-
# Check project-local first, then global
|
|
219
|
-
if [[ -d "$SCRIPT_DIR/../.." ]]; then
|
|
220
|
-
local project_dir="$SCRIPT_DIR/../.."
|
|
221
|
-
if [[ -f "$project_dir/.claude/tts-target-language.txt" ]]; then
|
|
222
|
-
target_lang_file="$project_dir/.claude/tts-target-language.txt"
|
|
223
|
-
target_voice_file="$project_dir/.claude/tts-target-voice.txt"
|
|
224
|
-
fi
|
|
225
|
-
fi
|
|
226
|
-
|
|
227
|
-
# Fallback to global
|
|
228
|
-
if [[ -z "$target_lang_file" ]]; then
|
|
229
|
-
if [[ -f "$HOME/.claude/tts-target-language.txt" ]]; then
|
|
230
|
-
target_lang_file="$HOME/.claude/tts-target-language.txt"
|
|
231
|
-
target_voice_file="$HOME/.claude/tts-target-voice.txt"
|
|
232
|
-
fi
|
|
233
|
-
fi
|
|
234
|
-
|
|
235
|
-
# If target language is set, update voice for new provider
|
|
236
|
-
if [[ -n "$target_lang_file" ]] && [[ -f "$target_lang_file" ]]; then
|
|
237
|
-
local target_lang
|
|
238
|
-
target_lang=$(cat "$target_lang_file")
|
|
239
|
-
|
|
240
|
-
if [[ -n "$target_lang" ]]; then
|
|
241
|
-
# Get the recommended voice for this language with new provider
|
|
242
|
-
local new_target_voice
|
|
243
|
-
new_target_voice=$(get_voice_for_language "$target_lang" "$new_provider")
|
|
244
|
-
|
|
245
|
-
if [[ -n "$new_target_voice" ]]; then
|
|
246
|
-
echo "$new_target_voice" > "$target_voice_file"
|
|
247
|
-
echo ""
|
|
248
|
-
echo "🔄 Updated target language voice:"
|
|
249
|
-
echo " Language: $target_lang"
|
|
250
|
-
echo " Voice: $new_target_voice (for $new_provider)"
|
|
251
|
-
fi
|
|
252
|
-
fi
|
|
253
|
-
fi
|
|
254
|
-
|
|
255
|
-
# Test new provider
|
|
256
|
-
echo ""
|
|
257
|
-
echo "🔊 Testing provider..."
|
|
258
|
-
"$SCRIPT_DIR/play-tts.sh" "Provider switched to $new_provider successfully" 2>/dev/null
|
|
259
|
-
|
|
260
|
-
echo ""
|
|
261
|
-
echo "✓ Provider switch complete!"
|
|
262
|
-
echo "Visit agentvibes.org for tips and tricks"
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
# @function provider_info
|
|
266
|
-
# @intent Show detailed information about a provider
|
|
267
|
-
provider_info() {
|
|
268
|
-
local provider_name="$1"
|
|
269
|
-
|
|
270
|
-
if [[ -z "$provider_name" ]]; then
|
|
271
|
-
echo "❌ Error: Provider name required"
|
|
272
|
-
echo "Usage: /agent-vibes:provider info <provider>"
|
|
273
|
-
return 1
|
|
274
|
-
fi
|
|
275
|
-
|
|
276
|
-
case "$provider_name" in
|
|
277
|
-
elevenlabs)
|
|
278
|
-
echo "┌────────────────────────────────────────────────────────────┐"
|
|
279
|
-
echo "│ ElevenLabs - Premium TTS Provider │"
|
|
280
|
-
echo "├────────────────────────────────────────────────────────────┤"
|
|
281
|
-
echo "│ Quality: ⭐⭐⭐⭐⭐ (Highest available) │"
|
|
282
|
-
echo "│ Cost: Free tier + \$5-22/mo │"
|
|
283
|
-
echo "│ Platform: All (Windows, macOS, Linux, WSL) │"
|
|
284
|
-
echo "│ Offline: No (requires internet) │"
|
|
285
|
-
echo "│ │"
|
|
286
|
-
echo "│ Trade-offs: │"
|
|
287
|
-
echo "│ + Highest voice quality and naturalness │"
|
|
288
|
-
echo "│ + 50+ premium voices available │"
|
|
289
|
-
echo "│ + Multilingual support (30+ languages) │"
|
|
290
|
-
echo "│ - Requires API key and internet │"
|
|
291
|
-
echo "│ - Costs money after free tier │"
|
|
292
|
-
echo "│ │"
|
|
293
|
-
echo "│ Best for: Premium quality, multilingual needs │"
|
|
294
|
-
echo "└────────────────────────────────────────────────────────────┘"
|
|
295
|
-
echo ""
|
|
296
|
-
echo "Full comparison: agentvibes.org/providers"
|
|
297
|
-
;;
|
|
298
|
-
|
|
299
|
-
piper)
|
|
300
|
-
echo "┌────────────────────────────────────────────────────────────┐"
|
|
301
|
-
echo "│ Piper TTS - Free Offline Provider │"
|
|
302
|
-
echo "├────────────────────────────────────────────────────────────┤"
|
|
303
|
-
echo "│ Quality: ⭐⭐⭐⭐ (Very good) │"
|
|
304
|
-
echo "│ Cost: Free forever │"
|
|
305
|
-
echo "│ Platform: WSL, Linux only │"
|
|
306
|
-
echo "│ Offline: Yes (fully local) │"
|
|
307
|
-
echo "│ │"
|
|
308
|
-
echo "│ Trade-offs: │"
|
|
309
|
-
echo "│ + Completely free, no API costs │"
|
|
310
|
-
echo "│ + Works offline, no internet needed │"
|
|
311
|
-
echo "│ + Fast synthesis (local processing) │"
|
|
312
|
-
echo "│ - WSL/Linux only (no macOS/Windows) │"
|
|
313
|
-
echo "│ - Slightly lower quality than ElevenLabs │"
|
|
314
|
-
echo "│ │"
|
|
315
|
-
echo "│ Best for: Budget-conscious, offline use, privacy │"
|
|
316
|
-
echo "└────────────────────────────────────────────────────────────┘"
|
|
317
|
-
echo ""
|
|
318
|
-
echo "Full comparison: agentvibes.org/providers"
|
|
319
|
-
;;
|
|
320
|
-
|
|
321
|
-
*)
|
|
322
|
-
echo "❌ Unknown provider: $provider_name"
|
|
323
|
-
echo "Available: elevenlabs, piper"
|
|
324
|
-
;;
|
|
325
|
-
esac
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
# @function provider_test
|
|
329
|
-
# @intent Test current provider with sample audio
|
|
330
|
-
provider_test() {
|
|
331
|
-
local current_provider
|
|
332
|
-
current_provider=$(get_active_provider)
|
|
333
|
-
|
|
334
|
-
echo "🔊 Testing provider: $current_provider"
|
|
335
|
-
echo ""
|
|
336
|
-
|
|
337
|
-
"$SCRIPT_DIR/play-tts.sh" "Provider test successful. Audio is working correctly with $current_provider."
|
|
338
|
-
|
|
339
|
-
echo ""
|
|
340
|
-
echo "✓ Test complete"
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
# @function provider_get
|
|
344
|
-
# @intent Show currently active provider
|
|
345
|
-
provider_get() {
|
|
346
|
-
local current_provider
|
|
347
|
-
current_provider=$(get_active_provider)
|
|
348
|
-
|
|
349
|
-
echo "🎤 Current Provider: $current_provider"
|
|
350
|
-
echo ""
|
|
351
|
-
|
|
352
|
-
# Show brief info
|
|
353
|
-
case "$current_provider" in
|
|
354
|
-
elevenlabs)
|
|
355
|
-
echo "Quality: ⭐⭐⭐⭐⭐"
|
|
356
|
-
echo "Cost: Free tier + \$5-22/mo"
|
|
357
|
-
echo "Offline: No"
|
|
358
|
-
;;
|
|
359
|
-
piper)
|
|
360
|
-
echo "Quality: ⭐⭐⭐⭐"
|
|
361
|
-
echo "Cost: Free forever"
|
|
362
|
-
echo "Offline: Yes"
|
|
363
|
-
;;
|
|
364
|
-
esac
|
|
365
|
-
|
|
366
|
-
echo ""
|
|
367
|
-
echo "Use /agent-vibes:provider info $current_provider for details"
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
# @function provider_preview
|
|
371
|
-
# @intent Preview voices for the currently active provider
|
|
372
|
-
# @architecture Delegates to provider-specific voice managers
|
|
373
|
-
provider_preview() {
|
|
374
|
-
local current_provider
|
|
375
|
-
current_provider=$(get_active_provider)
|
|
376
|
-
|
|
377
|
-
echo "🎤 Voice Preview ($current_provider)"
|
|
378
|
-
echo ""
|
|
379
|
-
|
|
380
|
-
case "$current_provider" in
|
|
381
|
-
elevenlabs)
|
|
382
|
-
# Use the ElevenLabs voice manager
|
|
383
|
-
"$SCRIPT_DIR/voice-manager.sh" preview "$@"
|
|
384
|
-
;;
|
|
385
|
-
piper)
|
|
386
|
-
# Use the Piper voice manager's list functionality
|
|
387
|
-
source "$SCRIPT_DIR/piper-voice-manager.sh"
|
|
388
|
-
|
|
389
|
-
# Check if a specific voice was requested
|
|
390
|
-
local voice_arg="$1"
|
|
391
|
-
|
|
392
|
-
if [[ -n "$voice_arg" ]]; then
|
|
393
|
-
# User requested a specific voice - check if it's a valid Piper voice
|
|
394
|
-
# Piper voice names are like: en_US-lessac-medium
|
|
395
|
-
# Try to find a matching voice model
|
|
396
|
-
|
|
397
|
-
# Check if the voice arg looks like a Piper model name (contains underscores/hyphens)
|
|
398
|
-
if [[ "$voice_arg" =~ ^[a-z]{2}_[A-Z]{2}- ]]; then
|
|
399
|
-
# Looks like a Piper voice model name
|
|
400
|
-
if verify_voice "$voice_arg"; then
|
|
401
|
-
echo "🎤 Previewing Piper voice: $voice_arg"
|
|
402
|
-
echo ""
|
|
403
|
-
"$SCRIPT_DIR/play-tts.sh" "Hello, this is the $voice_arg voice. How do you like it?" "$voice_arg"
|
|
404
|
-
else
|
|
405
|
-
echo "❌ Voice model not found: $voice_arg"
|
|
406
|
-
echo ""
|
|
407
|
-
echo "💡 Piper voice names look like: en_US-lessac-medium"
|
|
408
|
-
echo " Run /agent-vibes:list to see available Piper voices"
|
|
409
|
-
fi
|
|
410
|
-
else
|
|
411
|
-
# Looks like an ElevenLabs voice name (like "Antoni", "Jessica")
|
|
412
|
-
echo "❌ '$voice_arg' appears to be an ElevenLabs voice"
|
|
413
|
-
echo ""
|
|
414
|
-
echo "You're currently using Piper TTS (free provider)."
|
|
415
|
-
echo "Piper has different voices than ElevenLabs."
|
|
416
|
-
echo ""
|
|
417
|
-
echo "Options:"
|
|
418
|
-
echo " 1. Run /agent-vibes:list to see available Piper voices"
|
|
419
|
-
echo " 2. Switch to ElevenLabs: /agent-vibes:provider switch elevenlabs"
|
|
420
|
-
echo ""
|
|
421
|
-
echo "Popular Piper voices to try:"
|
|
422
|
-
echo " • en_US-lessac-medium (clear, professional)"
|
|
423
|
-
echo " • en_US-amy-medium (warm, friendly)"
|
|
424
|
-
echo " • en_US-joe-medium (casual, natural)"
|
|
425
|
-
fi
|
|
426
|
-
return
|
|
427
|
-
fi
|
|
428
|
-
|
|
429
|
-
# No specific voice - preview first 3 voices
|
|
430
|
-
echo "🎤 Piper Preview of 3 people"
|
|
431
|
-
echo ""
|
|
432
|
-
|
|
433
|
-
# Play first 3 Piper voices as samples
|
|
434
|
-
local sample_voices=(
|
|
435
|
-
"en_US-lessac-medium:Lessac"
|
|
436
|
-
"en_US-amy-medium:Amy"
|
|
437
|
-
"en_US-joe-medium:Joe"
|
|
438
|
-
)
|
|
439
|
-
|
|
440
|
-
for voice_entry in "${sample_voices[@]}"; do
|
|
441
|
-
local voice_name="${voice_entry%%:*}"
|
|
442
|
-
local display_name="${voice_entry##*:}"
|
|
443
|
-
|
|
444
|
-
echo "🔊 ${display_name}..."
|
|
445
|
-
"$SCRIPT_DIR/play-tts.sh" "Hi, my name is ${display_name}" "$voice_name"
|
|
446
|
-
|
|
447
|
-
# Wait for the voice to finish playing before starting next one
|
|
448
|
-
sleep 3
|
|
449
|
-
done
|
|
450
|
-
|
|
451
|
-
echo ""
|
|
452
|
-
echo "✓ Preview complete"
|
|
453
|
-
echo "💡 Use /agent-vibes:list to see all available Piper voices"
|
|
454
|
-
;;
|
|
455
|
-
*)
|
|
456
|
-
echo "❌ Unknown provider: $current_provider"
|
|
457
|
-
;;
|
|
458
|
-
esac
|
|
459
|
-
}
|
|
460
|
-
|
|
461
|
-
# @function provider_help
|
|
462
|
-
# @intent Show help for provider commands
|
|
463
|
-
provider_help() {
|
|
464
|
-
echo "Provider Management Commands"
|
|
465
|
-
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
466
|
-
echo ""
|
|
467
|
-
echo "Usage:"
|
|
468
|
-
echo " /agent-vibes:provider list # Show all providers"
|
|
469
|
-
echo " /agent-vibes:provider switch <name> # Switch provider"
|
|
470
|
-
echo " /agent-vibes:provider info <name> # Provider details"
|
|
471
|
-
echo " /agent-vibes:provider test # Test current provider"
|
|
472
|
-
echo " /agent-vibes:provider get # Show active provider"
|
|
473
|
-
echo ""
|
|
474
|
-
echo "Examples:"
|
|
475
|
-
echo " /agent-vibes:provider switch piper"
|
|
476
|
-
echo " /agent-vibes:provider info elevenlabs"
|
|
477
|
-
echo ""
|
|
478
|
-
echo "Learn more: agentvibes.org/docs/providers"
|
|
479
|
-
}
|
|
480
|
-
|
|
481
|
-
# Route to appropriate function
|
|
482
|
-
case "$COMMAND" in
|
|
483
|
-
list)
|
|
484
|
-
provider_list
|
|
485
|
-
;;
|
|
486
|
-
switch)
|
|
487
|
-
provider_switch "$2" "$3"
|
|
488
|
-
;;
|
|
489
|
-
info)
|
|
490
|
-
provider_info "$2"
|
|
491
|
-
;;
|
|
492
|
-
test)
|
|
493
|
-
provider_test
|
|
494
|
-
;;
|
|
495
|
-
get)
|
|
496
|
-
provider_get
|
|
497
|
-
;;
|
|
498
|
-
preview)
|
|
499
|
-
shift # Remove 'preview' from args
|
|
500
|
-
provider_preview "$@"
|
|
501
|
-
;;
|
|
502
|
-
help|*)
|
|
503
|
-
provider_help
|
|
504
|
-
;;
|
|
505
|
-
esac
|