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,324 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Personality manager for AgentVibes - adds character to TTS messages
|
|
3
|
-
|
|
4
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
5
|
-
PERSONALITIES_DIR="$SCRIPT_DIR/../personalities"
|
|
6
|
-
|
|
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"
|
|
16
|
-
else
|
|
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
|
|
28
|
-
fi
|
|
29
|
-
|
|
30
|
-
PERSONALITY_FILE="$CLAUDE_DIR/tts-personality.txt"
|
|
31
|
-
|
|
32
|
-
# Function to get personality data from markdown file
|
|
33
|
-
get_personality_data() {
|
|
34
|
-
local personality="$1"
|
|
35
|
-
local field="$2"
|
|
36
|
-
local file="$PERSONALITIES_DIR/${personality}.md"
|
|
37
|
-
|
|
38
|
-
if [[ ! -f "$file" ]]; then
|
|
39
|
-
return 1
|
|
40
|
-
fi
|
|
41
|
-
|
|
42
|
-
case "$field" in
|
|
43
|
-
prefix)
|
|
44
|
-
sed -n '/^## Prefix/,/^##/p' "$file" | sed '1d;$d' | tr -d '\n' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//'
|
|
45
|
-
;;
|
|
46
|
-
suffix)
|
|
47
|
-
sed -n '/^## Suffix/,/^##/p' "$file" | sed '1d;$d' | tr -d '\n' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//'
|
|
48
|
-
;;
|
|
49
|
-
description)
|
|
50
|
-
grep "^description:" "$file" | cut -d: -f2- | sed 's/^[[:space:]]*//;s/[[:space:]]*$//'
|
|
51
|
-
;;
|
|
52
|
-
voice)
|
|
53
|
-
grep "^elevenlabs_voice:" "$file" | cut -d: -f2- | sed 's/^[[:space:]]*//;s/[[:space:]]*$//'
|
|
54
|
-
;;
|
|
55
|
-
piper_voice)
|
|
56
|
-
grep "^piper_voice:" "$file" | cut -d: -f2- | sed 's/^[[:space:]]*//;s/[[:space:]]*$//'
|
|
57
|
-
;;
|
|
58
|
-
instructions)
|
|
59
|
-
sed -n '/^## AI Instructions/,/^##/p' "$file" | sed '1d;$d'
|
|
60
|
-
;;
|
|
61
|
-
esac
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
# Function to list all available personalities
|
|
65
|
-
list_personalities() {
|
|
66
|
-
local personalities=()
|
|
67
|
-
|
|
68
|
-
# Find all .md files in personalities directory
|
|
69
|
-
if [[ -d "$PERSONALITIES_DIR" ]]; then
|
|
70
|
-
for file in "$PERSONALITIES_DIR"/*.md; do
|
|
71
|
-
if [[ -f "$file" ]]; then
|
|
72
|
-
basename "$file" .md
|
|
73
|
-
fi
|
|
74
|
-
done
|
|
75
|
-
fi
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
case "$1" in
|
|
79
|
-
list)
|
|
80
|
-
echo "🎭 Available Personalities:"
|
|
81
|
-
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
82
|
-
|
|
83
|
-
# Get current personality
|
|
84
|
-
CURRENT="normal"
|
|
85
|
-
if [ -f "$PERSONALITY_FILE" ]; then
|
|
86
|
-
CURRENT=$(cat "$PERSONALITY_FILE")
|
|
87
|
-
fi
|
|
88
|
-
|
|
89
|
-
# List personalities from markdown files
|
|
90
|
-
echo "Built-in personalities:"
|
|
91
|
-
for personality in $(list_personalities | sort); do
|
|
92
|
-
desc=$(get_personality_data "$personality" "description")
|
|
93
|
-
if [[ "$personality" == "$CURRENT" ]]; then
|
|
94
|
-
echo " ✓ $personality - $desc (current)"
|
|
95
|
-
else
|
|
96
|
-
echo " - $personality - $desc"
|
|
97
|
-
fi
|
|
98
|
-
done
|
|
99
|
-
|
|
100
|
-
# Add random option
|
|
101
|
-
if [[ "$CURRENT" == "random" ]]; then
|
|
102
|
-
echo " ✓ random - Picks randomly each time (current)"
|
|
103
|
-
else
|
|
104
|
-
echo " - random - Picks randomly each time"
|
|
105
|
-
fi
|
|
106
|
-
|
|
107
|
-
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
108
|
-
echo ""
|
|
109
|
-
echo "Usage: /agent-vibes:personality <name>"
|
|
110
|
-
echo " /agent-vibes:personality add <name>"
|
|
111
|
-
echo " /agent-vibes:personality edit <name>"
|
|
112
|
-
;;
|
|
113
|
-
|
|
114
|
-
set|switch)
|
|
115
|
-
PERSONALITY="$2"
|
|
116
|
-
|
|
117
|
-
if [[ -z "$PERSONALITY" ]]; then
|
|
118
|
-
echo "❌ Please specify a personality name"
|
|
119
|
-
echo "Usage: $0 set <personality>"
|
|
120
|
-
exit 1
|
|
121
|
-
fi
|
|
122
|
-
|
|
123
|
-
# Check if personality file exists (unless it's random)
|
|
124
|
-
if [[ "$PERSONALITY" != "random" ]]; then
|
|
125
|
-
if [[ ! -f "$PERSONALITIES_DIR/${PERSONALITY}.md" ]]; then
|
|
126
|
-
echo "❌ Personality not found: $PERSONALITY"
|
|
127
|
-
echo ""
|
|
128
|
-
echo "Available personalities:"
|
|
129
|
-
for p in $(list_personalities | sort); do
|
|
130
|
-
echo " • $p"
|
|
131
|
-
done
|
|
132
|
-
exit 1
|
|
133
|
-
fi
|
|
134
|
-
fi
|
|
135
|
-
|
|
136
|
-
# Save the personality
|
|
137
|
-
echo "$PERSONALITY" > "$PERSONALITY_FILE"
|
|
138
|
-
echo "🎭 Personality set to: $PERSONALITY"
|
|
139
|
-
|
|
140
|
-
# Check if personality has an assigned voice
|
|
141
|
-
# Detect active TTS provider
|
|
142
|
-
PROVIDER_FILE=""
|
|
143
|
-
if [[ -f "$CLAUDE_DIR/tts-provider.txt" ]]; then
|
|
144
|
-
PROVIDER_FILE="$CLAUDE_DIR/tts-provider.txt"
|
|
145
|
-
elif [[ -f "$HOME/.claude/tts-provider.txt" ]]; then
|
|
146
|
-
PROVIDER_FILE="$HOME/.claude/tts-provider.txt"
|
|
147
|
-
fi
|
|
148
|
-
|
|
149
|
-
ACTIVE_PROVIDER="elevenlabs" # default
|
|
150
|
-
if [[ -n "$PROVIDER_FILE" ]]; then
|
|
151
|
-
ACTIVE_PROVIDER=$(cat "$PROVIDER_FILE")
|
|
152
|
-
fi
|
|
153
|
-
|
|
154
|
-
# Get the appropriate voice based on provider
|
|
155
|
-
ASSIGNED_VOICE=""
|
|
156
|
-
if [[ "$ACTIVE_PROVIDER" == "piper" ]]; then
|
|
157
|
-
# Try to get Piper-specific voice first
|
|
158
|
-
ASSIGNED_VOICE=$(get_personality_data "$PERSONALITY" "piper_voice")
|
|
159
|
-
if [[ -z "$ASSIGNED_VOICE" ]]; then
|
|
160
|
-
# Fallback to default Piper voice
|
|
161
|
-
ASSIGNED_VOICE="en_US-lessac-medium"
|
|
162
|
-
fi
|
|
163
|
-
else
|
|
164
|
-
# Use ElevenLabs voice (reads from elevenlabs_voice: field)
|
|
165
|
-
ASSIGNED_VOICE=$(get_personality_data "$PERSONALITY" "voice")
|
|
166
|
-
fi
|
|
167
|
-
|
|
168
|
-
if [[ -n "$ASSIGNED_VOICE" ]]; then
|
|
169
|
-
# Switch to the assigned voice (silently - personality will do the talking)
|
|
170
|
-
VOICE_MANAGER="$SCRIPT_DIR/voice-manager.sh"
|
|
171
|
-
if [[ -x "$VOICE_MANAGER" ]]; then
|
|
172
|
-
echo "🎤 Switching to assigned voice: $ASSIGNED_VOICE"
|
|
173
|
-
"$VOICE_MANAGER" switch "$ASSIGNED_VOICE" --silent >/dev/null 2>&1
|
|
174
|
-
fi
|
|
175
|
-
fi
|
|
176
|
-
|
|
177
|
-
# Make a personality-appropriate remark with TTS
|
|
178
|
-
if [[ "$PERSONALITY" != "random" ]]; then
|
|
179
|
-
echo ""
|
|
180
|
-
|
|
181
|
-
# Get TTS script path
|
|
182
|
-
TTS_SCRIPT="$SCRIPT_DIR/play-tts.sh"
|
|
183
|
-
|
|
184
|
-
# Try to get acknowledgment from personality file
|
|
185
|
-
PERSONALITY_FILE_PATH="$PERSONALITIES_DIR/${PERSONALITY}.md"
|
|
186
|
-
REMARK=""
|
|
187
|
-
|
|
188
|
-
if [[ -f "$PERSONALITY_FILE_PATH" ]]; then
|
|
189
|
-
# Extract example responses from personality file (lines starting with "- ")
|
|
190
|
-
mapfile -t EXAMPLES < <(grep '^- "' "$PERSONALITY_FILE_PATH" | sed 's/^- "//; s/"$//')
|
|
191
|
-
|
|
192
|
-
if [[ ${#EXAMPLES[@]} -gt 0 ]]; then
|
|
193
|
-
# Pick a random example
|
|
194
|
-
REMARK="${EXAMPLES[$RANDOM % ${#EXAMPLES[@]}]}"
|
|
195
|
-
fi
|
|
196
|
-
fi
|
|
197
|
-
|
|
198
|
-
# Fallback if no examples found
|
|
199
|
-
if [[ -z "$REMARK" ]]; then
|
|
200
|
-
REMARK="Personality set to ${PERSONALITY}!"
|
|
201
|
-
fi
|
|
202
|
-
|
|
203
|
-
echo "💬 $REMARK"
|
|
204
|
-
"$TTS_SCRIPT" "$REMARK"
|
|
205
|
-
|
|
206
|
-
echo ""
|
|
207
|
-
echo "Note: AI will generate unique ${PERSONALITY} responses - no fixed templates!"
|
|
208
|
-
echo ""
|
|
209
|
-
echo "💡 Tip: To hear automatic TTS narration, enable the Agent Vibes output style:"
|
|
210
|
-
echo " /output-style Agent Vibes"
|
|
211
|
-
fi
|
|
212
|
-
;;
|
|
213
|
-
|
|
214
|
-
get)
|
|
215
|
-
if [ -f "$PERSONALITY_FILE" ]; then
|
|
216
|
-
CURRENT=$(cat "$PERSONALITY_FILE")
|
|
217
|
-
echo "Current personality: $CURRENT"
|
|
218
|
-
|
|
219
|
-
if [[ "$CURRENT" != "random" ]]; then
|
|
220
|
-
desc=$(get_personality_data "$CURRENT" "description")
|
|
221
|
-
[[ -n "$desc" ]] && echo "Description: $desc"
|
|
222
|
-
fi
|
|
223
|
-
else
|
|
224
|
-
echo "Current personality: normal (default)"
|
|
225
|
-
fi
|
|
226
|
-
;;
|
|
227
|
-
|
|
228
|
-
add)
|
|
229
|
-
NAME="$2"
|
|
230
|
-
if [[ -z "$NAME" ]]; then
|
|
231
|
-
echo "❌ Please specify a personality name"
|
|
232
|
-
echo "Usage: $0 add <name>"
|
|
233
|
-
exit 1
|
|
234
|
-
fi
|
|
235
|
-
|
|
236
|
-
FILE="$PERSONALITIES_DIR/${NAME}.md"
|
|
237
|
-
if [[ -f "$FILE" ]]; then
|
|
238
|
-
echo "❌ Personality '$NAME' already exists"
|
|
239
|
-
echo "Use 'edit' to modify it"
|
|
240
|
-
exit 1
|
|
241
|
-
fi
|
|
242
|
-
|
|
243
|
-
# Create new personality file
|
|
244
|
-
cat > "$FILE" << 'EOF'
|
|
245
|
-
---
|
|
246
|
-
name: NAME
|
|
247
|
-
description: Custom personality
|
|
248
|
-
---
|
|
249
|
-
|
|
250
|
-
# NAME Personality
|
|
251
|
-
|
|
252
|
-
## Prefix
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
## Suffix
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
## AI Instructions
|
|
259
|
-
Describe how the AI should generate messages for this personality.
|
|
260
|
-
|
|
261
|
-
## Example Responses
|
|
262
|
-
- "Example response 1"
|
|
263
|
-
- "Example response 2"
|
|
264
|
-
EOF
|
|
265
|
-
|
|
266
|
-
# Replace NAME with actual name
|
|
267
|
-
sed -i "s/NAME/$NAME/g" "$FILE"
|
|
268
|
-
|
|
269
|
-
echo "✅ Created new personality: $NAME"
|
|
270
|
-
echo "📝 Edit the file: $FILE"
|
|
271
|
-
echo ""
|
|
272
|
-
echo "You can now customize:"
|
|
273
|
-
echo " • Prefix: Text before messages"
|
|
274
|
-
echo " • Suffix: Text after messages"
|
|
275
|
-
echo " • AI Instructions: How AI should speak"
|
|
276
|
-
echo " • Example Responses: Sample messages"
|
|
277
|
-
;;
|
|
278
|
-
|
|
279
|
-
edit)
|
|
280
|
-
NAME="$2"
|
|
281
|
-
if [[ -z "$NAME" ]]; then
|
|
282
|
-
echo "❌ Please specify a personality name"
|
|
283
|
-
echo "Usage: $0 edit <name>"
|
|
284
|
-
exit 1
|
|
285
|
-
fi
|
|
286
|
-
|
|
287
|
-
FILE="$PERSONALITIES_DIR/${NAME}.md"
|
|
288
|
-
if [[ ! -f "$FILE" ]]; then
|
|
289
|
-
echo "❌ Personality '$NAME' not found"
|
|
290
|
-
echo "Use 'add' to create it first"
|
|
291
|
-
exit 1
|
|
292
|
-
fi
|
|
293
|
-
|
|
294
|
-
echo "📝 Edit this file to customize the personality:"
|
|
295
|
-
echo "$FILE"
|
|
296
|
-
;;
|
|
297
|
-
|
|
298
|
-
reset)
|
|
299
|
-
echo "normal" > "$PERSONALITY_FILE"
|
|
300
|
-
echo "🎭 Personality reset to: normal"
|
|
301
|
-
;;
|
|
302
|
-
|
|
303
|
-
*)
|
|
304
|
-
# If a single argument is provided and it's not a command, treat it as "set <personality>"
|
|
305
|
-
if [[ -n "$1" ]] && [[ -f "$PERSONALITIES_DIR/${1}.md" || "$1" == "random" ]]; then
|
|
306
|
-
# Call set with the personality name
|
|
307
|
-
exec "$0" set "$1"
|
|
308
|
-
else
|
|
309
|
-
echo "AgentVibes Personality Manager"
|
|
310
|
-
echo ""
|
|
311
|
-
echo "Commands:"
|
|
312
|
-
echo " list - List all personalities"
|
|
313
|
-
echo " set/switch <name> - Set personality"
|
|
314
|
-
echo " add <name> - Create new personality"
|
|
315
|
-
echo " edit <name> - Show path to edit personality"
|
|
316
|
-
echo " get - Show current personality"
|
|
317
|
-
echo " reset - Reset to normal"
|
|
318
|
-
echo ""
|
|
319
|
-
echo "Examples:"
|
|
320
|
-
echo " /agent-vibes:personality flirty"
|
|
321
|
-
echo " /agent-vibes:personality add cowboy"
|
|
322
|
-
fi
|
|
323
|
-
;;
|
|
324
|
-
esac
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
#
|
|
3
|
-
# @fileoverview Piper Voice Model Downloader
|
|
4
|
-
# @context Downloads Piper TTS voice models from HuggingFace
|
|
5
|
-
# @purpose Batch download popular voices after installation
|
|
6
|
-
# @dependencies piper-voice-manager.sh, piper binary
|
|
7
|
-
# @usage ./piper-download-voices.sh [--yes|-y]
|
|
8
|
-
# --yes|-y: Skip confirmation prompt (auto-download)
|
|
9
|
-
#
|
|
10
|
-
|
|
11
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
12
|
-
source "$SCRIPT_DIR/piper-voice-manager.sh"
|
|
13
|
-
|
|
14
|
-
# Parse command line arguments
|
|
15
|
-
AUTO_YES=false
|
|
16
|
-
if [[ "$1" == "--yes" ]] || [[ "$1" == "-y" ]]; then
|
|
17
|
-
AUTO_YES=true
|
|
18
|
-
fi
|
|
19
|
-
|
|
20
|
-
# Common voice models to download
|
|
21
|
-
COMMON_VOICES=(
|
|
22
|
-
"en_US-lessac-medium" # Default, clear male
|
|
23
|
-
"en_US-amy-medium" # Warm female
|
|
24
|
-
"en_US-joe-medium" # Professional male
|
|
25
|
-
"en_US-ryan-high" # Expressive male
|
|
26
|
-
"en_US-libritts-high" # Premium quality
|
|
27
|
-
)
|
|
28
|
-
|
|
29
|
-
echo "🎙️ Piper Voice Model Downloader"
|
|
30
|
-
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
31
|
-
echo ""
|
|
32
|
-
echo "This will download the most commonly used Piper voice models."
|
|
33
|
-
echo "Each voice is approximately 25MB."
|
|
34
|
-
echo ""
|
|
35
|
-
|
|
36
|
-
# Check if piper is installed
|
|
37
|
-
if ! command -v piper &> /dev/null; then
|
|
38
|
-
echo "❌ Error: Piper TTS not installed"
|
|
39
|
-
echo "Install with: pipx install piper-tts"
|
|
40
|
-
exit 1
|
|
41
|
-
fi
|
|
42
|
-
|
|
43
|
-
# Get storage directory
|
|
44
|
-
VOICE_DIR=$(get_voice_storage_dir)
|
|
45
|
-
|
|
46
|
-
echo "📂 Storage location: $VOICE_DIR"
|
|
47
|
-
echo ""
|
|
48
|
-
|
|
49
|
-
# Count already downloaded
|
|
50
|
-
ALREADY_DOWNLOADED=0
|
|
51
|
-
ALREADY_DOWNLOADED_LIST=()
|
|
52
|
-
NEED_DOWNLOAD=()
|
|
53
|
-
|
|
54
|
-
for voice in "${COMMON_VOICES[@]}"; do
|
|
55
|
-
if verify_voice "$voice" 2>/dev/null; then
|
|
56
|
-
((ALREADY_DOWNLOADED++))
|
|
57
|
-
ALREADY_DOWNLOADED_LIST+=("$voice")
|
|
58
|
-
else
|
|
59
|
-
NEED_DOWNLOAD+=("$voice")
|
|
60
|
-
fi
|
|
61
|
-
done
|
|
62
|
-
|
|
63
|
-
echo "📊 Status:"
|
|
64
|
-
echo " Already downloaded: $ALREADY_DOWNLOADED voice(s)"
|
|
65
|
-
echo " Need to download: ${#NEED_DOWNLOAD[@]} voice(s)"
|
|
66
|
-
echo ""
|
|
67
|
-
|
|
68
|
-
# Show already downloaded voices
|
|
69
|
-
if [[ $ALREADY_DOWNLOADED -gt 0 ]]; then
|
|
70
|
-
echo "✅ Already downloaded (skipped):"
|
|
71
|
-
for voice in "${ALREADY_DOWNLOADED_LIST[@]}"; do
|
|
72
|
-
echo " ✓ $voice"
|
|
73
|
-
done
|
|
74
|
-
echo ""
|
|
75
|
-
fi
|
|
76
|
-
|
|
77
|
-
if [[ ${#NEED_DOWNLOAD[@]} -eq 0 ]]; then
|
|
78
|
-
echo "🎉 All common voices ready to use!"
|
|
79
|
-
exit 0
|
|
80
|
-
fi
|
|
81
|
-
|
|
82
|
-
echo "Voices to download:"
|
|
83
|
-
for voice in "${NEED_DOWNLOAD[@]}"; do
|
|
84
|
-
echo " • $voice (~25MB)"
|
|
85
|
-
done
|
|
86
|
-
echo ""
|
|
87
|
-
|
|
88
|
-
# Ask for confirmation (skip if --yes flag provided)
|
|
89
|
-
if [[ "$AUTO_YES" == "false" ]]; then
|
|
90
|
-
read -p "Download ${#NEED_DOWNLOAD[@]} voice model(s)? [Y/n]: " -n 1 -r
|
|
91
|
-
echo
|
|
92
|
-
|
|
93
|
-
if [[ ! $REPLY =~ ^[Yy]$ ]] && [[ -n $REPLY ]]; then
|
|
94
|
-
echo "❌ Download cancelled"
|
|
95
|
-
exit 0
|
|
96
|
-
fi
|
|
97
|
-
else
|
|
98
|
-
echo "Auto-downloading ${#NEED_DOWNLOAD[@]} voice model(s)..."
|
|
99
|
-
echo ""
|
|
100
|
-
fi
|
|
101
|
-
|
|
102
|
-
# Download each voice
|
|
103
|
-
DOWNLOADED=0
|
|
104
|
-
FAILED=0
|
|
105
|
-
|
|
106
|
-
for voice in "${NEED_DOWNLOAD[@]}"; do
|
|
107
|
-
echo ""
|
|
108
|
-
echo "📥 Downloading: $voice..."
|
|
109
|
-
|
|
110
|
-
if download_voice "$voice"; then
|
|
111
|
-
((DOWNLOADED++))
|
|
112
|
-
echo "✅ Downloaded: $voice"
|
|
113
|
-
else
|
|
114
|
-
((FAILED++))
|
|
115
|
-
echo "❌ Failed: $voice"
|
|
116
|
-
fi
|
|
117
|
-
done
|
|
118
|
-
|
|
119
|
-
echo ""
|
|
120
|
-
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
121
|
-
echo "📊 Download Summary:"
|
|
122
|
-
echo " ✅ Successfully downloaded: $DOWNLOADED"
|
|
123
|
-
echo " ❌ Failed: $FAILED"
|
|
124
|
-
echo " 📦 Total voices available: $((ALREADY_DOWNLOADED + DOWNLOADED))"
|
|
125
|
-
echo ""
|
|
126
|
-
|
|
127
|
-
if [[ $DOWNLOADED -gt 0 ]]; then
|
|
128
|
-
echo "✨ Ready to use Piper TTS with downloaded voices!"
|
|
129
|
-
echo ""
|
|
130
|
-
echo "Try it:"
|
|
131
|
-
echo " /agent-vibes:provider switch piper"
|
|
132
|
-
echo " /agent-vibes:preview"
|
|
133
|
-
fi
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
#
|
|
3
|
-
# @fileoverview Piper TTS Installer
|
|
4
|
-
# @context Installs Piper TTS and downloads initial voice models
|
|
5
|
-
# @architecture Helper script for AgentVibes installer and manual installation
|
|
6
|
-
# @why Piper TTS requires separate installation from pipx/pip
|
|
7
|
-
#
|
|
8
|
-
|
|
9
|
-
set -e # Exit on error
|
|
10
|
-
|
|
11
|
-
echo "🎤 Piper TTS Installer"
|
|
12
|
-
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
13
|
-
echo ""
|
|
14
|
-
|
|
15
|
-
# Check if running on WSL or Linux
|
|
16
|
-
if ! grep -qi microsoft /proc/version 2>/dev/null && [[ "$(uname -s)" != "Linux" ]]; then
|
|
17
|
-
echo "❌ Piper TTS is only supported on WSL and Linux"
|
|
18
|
-
echo " Your platform: $(uname -s)"
|
|
19
|
-
echo ""
|
|
20
|
-
echo " For macOS/Windows, use ElevenLabs instead:"
|
|
21
|
-
echo " /agent-vibes:provider switch elevenlabs"
|
|
22
|
-
exit 1
|
|
23
|
-
fi
|
|
24
|
-
|
|
25
|
-
# Check if Piper is already installed
|
|
26
|
-
if command -v piper &> /dev/null; then
|
|
27
|
-
PIPER_VERSION=$(piper --version 2>&1 || echo "unknown")
|
|
28
|
-
echo "✅ Piper TTS is already installed!"
|
|
29
|
-
echo " Version: $PIPER_VERSION"
|
|
30
|
-
echo ""
|
|
31
|
-
echo " Download voices with: .claude/hooks/piper-download-voices.sh"
|
|
32
|
-
exit 0
|
|
33
|
-
fi
|
|
34
|
-
|
|
35
|
-
echo "📦 Installing Piper TTS..."
|
|
36
|
-
echo ""
|
|
37
|
-
|
|
38
|
-
# Check if pipx is installed
|
|
39
|
-
if ! command -v pipx &> /dev/null; then
|
|
40
|
-
echo "⚠️ pipx not found. Installing pipx first..."
|
|
41
|
-
echo ""
|
|
42
|
-
|
|
43
|
-
# Try to install pipx
|
|
44
|
-
if command -v apt-get &> /dev/null; then
|
|
45
|
-
# Debian/Ubuntu
|
|
46
|
-
sudo apt-get update
|
|
47
|
-
sudo apt-get install -y pipx
|
|
48
|
-
elif command -v brew &> /dev/null; then
|
|
49
|
-
# macOS (though Piper doesn't run on macOS)
|
|
50
|
-
brew install pipx
|
|
51
|
-
elif command -v dnf &> /dev/null; then
|
|
52
|
-
# Fedora
|
|
53
|
-
sudo dnf install -y pipx
|
|
54
|
-
elif command -v pacman &> /dev/null; then
|
|
55
|
-
# Arch Linux
|
|
56
|
-
sudo pacman -S python-pipx
|
|
57
|
-
else
|
|
58
|
-
echo "❌ Unable to install pipx automatically."
|
|
59
|
-
echo ""
|
|
60
|
-
echo " Please install pipx manually:"
|
|
61
|
-
echo " https://pipx.pypa.io/stable/installation/"
|
|
62
|
-
exit 1
|
|
63
|
-
fi
|
|
64
|
-
|
|
65
|
-
# Ensure pipx is in PATH
|
|
66
|
-
pipx ensurepath
|
|
67
|
-
echo ""
|
|
68
|
-
fi
|
|
69
|
-
|
|
70
|
-
# Install Piper TTS
|
|
71
|
-
echo "📥 Installing Piper TTS via pipx..."
|
|
72
|
-
pipx install piper-tts
|
|
73
|
-
|
|
74
|
-
if ! command -v piper &> /dev/null; then
|
|
75
|
-
echo ""
|
|
76
|
-
echo "❌ Installation completed but piper command not found in PATH"
|
|
77
|
-
echo ""
|
|
78
|
-
echo " Try running: pipx ensurepath"
|
|
79
|
-
echo " Then restart your terminal"
|
|
80
|
-
exit 1
|
|
81
|
-
fi
|
|
82
|
-
|
|
83
|
-
echo ""
|
|
84
|
-
echo "✅ Piper TTS installed successfully!"
|
|
85
|
-
echo ""
|
|
86
|
-
|
|
87
|
-
PIPER_VERSION=$(piper --version 2>&1 || echo "unknown")
|
|
88
|
-
echo " Version: $PIPER_VERSION"
|
|
89
|
-
echo ""
|
|
90
|
-
|
|
91
|
-
# Determine voices directory
|
|
92
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
93
|
-
CLAUDE_DIR="$(dirname "$SCRIPT_DIR")"
|
|
94
|
-
|
|
95
|
-
# Check for configured voices directory
|
|
96
|
-
VOICES_DIR=""
|
|
97
|
-
if [[ -f "$CLAUDE_DIR/piper-voices-dir.txt" ]]; then
|
|
98
|
-
VOICES_DIR=$(cat "$CLAUDE_DIR/piper-voices-dir.txt")
|
|
99
|
-
elif [[ -f "$HOME/.claude/piper-voices-dir.txt" ]]; then
|
|
100
|
-
VOICES_DIR=$(cat "$HOME/.claude/piper-voices-dir.txt")
|
|
101
|
-
else
|
|
102
|
-
VOICES_DIR="$HOME/.claude/piper-voices"
|
|
103
|
-
fi
|
|
104
|
-
|
|
105
|
-
echo "📁 Voice storage location: $VOICES_DIR"
|
|
106
|
-
echo ""
|
|
107
|
-
|
|
108
|
-
# Ask if user wants to download voices now
|
|
109
|
-
read -p "Would you like to download voice models now? [Y/n] " -n 1 -r
|
|
110
|
-
echo ""
|
|
111
|
-
|
|
112
|
-
if [[ $REPLY =~ ^[Yy]$ ]] || [[ -z $REPLY ]]; then
|
|
113
|
-
echo ""
|
|
114
|
-
echo "📥 Downloading recommended voices..."
|
|
115
|
-
echo ""
|
|
116
|
-
|
|
117
|
-
# Use the piper-download-voices.sh script if available
|
|
118
|
-
if [[ -f "$SCRIPT_DIR/piper-download-voices.sh" ]]; then
|
|
119
|
-
"$SCRIPT_DIR/piper-download-voices.sh"
|
|
120
|
-
else
|
|
121
|
-
# Manual download of a basic voice
|
|
122
|
-
mkdir -p "$VOICES_DIR"
|
|
123
|
-
|
|
124
|
-
echo "Downloading en_US-lessac-medium (recommended)..."
|
|
125
|
-
curl -L "https://huggingface.co/rhasspy/piper-voices/resolve/main/en/en_US/lessac/medium/en_US-lessac-medium.onnx" \
|
|
126
|
-
-o "$VOICES_DIR/en_US-lessac-medium.onnx"
|
|
127
|
-
curl -L "https://huggingface.co/rhasspy/piper-voices/resolve/main/en/en_US/lessac/medium/en_US-lessac-medium.onnx.json" \
|
|
128
|
-
-o "$VOICES_DIR/en_US-lessac-medium.onnx.json"
|
|
129
|
-
|
|
130
|
-
echo "✅ Voice downloaded!"
|
|
131
|
-
fi
|
|
132
|
-
fi
|
|
133
|
-
|
|
134
|
-
echo ""
|
|
135
|
-
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
136
|
-
echo "🎉 Piper TTS Setup Complete!"
|
|
137
|
-
echo ""
|
|
138
|
-
echo "Next steps:"
|
|
139
|
-
echo " 1. Download more voices: .claude/hooks/piper-download-voices.sh"
|
|
140
|
-
echo " 2. List available voices: /agent-vibes:list"
|
|
141
|
-
echo " 3. Test it out: /agent-vibes:preview"
|
|
142
|
-
echo ""
|
|
143
|
-
echo "Enjoy your free, offline TTS! 🎤"
|
|
144
|
-
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|