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.
Files changed (233) hide show
  1. package/.claude/agents/health-coach.md +154 -0
  2. package/.claude/agents/motivator.md +171 -0
  3. package/.claude/agents/negotiator.md +97 -0
  4. package/.claude/commands/agent-vibes/agent-health-coach.md +15 -0
  5. package/.claude/commands/agent-vibes/agent-motivator.md +15 -0
  6. package/.claude/commands/agent-vibes/agent-negotiator.md +15 -0
  7. package/.claude/commands/agent-vibes/agent.md +79 -0
  8. package/.claude/commands/agent-vibes/commands.json +4 -0
  9. package/.claude/commands/agent-vibes/set-favorite-voice.md +84 -0
  10. package/.claude/github-star-reminder.txt +1 -1
  11. package/.claude/hooks/download-extra-voices.sh +244 -0
  12. package/.claude/hooks/personality-manager.sh +81 -0
  13. package/.claude/hooks/piper-download-voices.sh +3 -93
  14. package/.claude/hooks/piper-multispeaker-registry.sh +165 -0
  15. package/.claude/hooks/play-tts-elevenlabs.sh +5 -3
  16. package/.claude/hooks/play-tts-piper.sh +27 -44
  17. package/.claude/hooks/provider-manager.sh +24 -5
  18. package/.claude/hooks/speed-manager.sh +10 -12
  19. package/.claude/hooks/voice-manager.sh +94 -56
  20. package/README.md +0 -3
  21. package/RELEASE_NOTES.md +40 -247
  22. package/docs/agents.md +485 -0
  23. package/docs/commands.md +1 -21
  24. package/docs/extra-voices-implementation-summary.md +235 -0
  25. package/docs/voice-registration-fix.md +254 -0
  26. package/fix-vscode-colors.sh +88 -0
  27. package/fixcolors +88 -0
  28. package/generate-all-agent-voices.sh +174 -0
  29. package/generate-missing-elevenlabs-complete.sh +236 -0
  30. package/generate-missing-elevenlabs.sh +110 -0
  31. package/generate-new-voices.sh +108 -0
  32. package/generate-piper-agent-intros.sh +85 -0
  33. package/generate-provider-and-agent-intros.sh +136 -0
  34. package/logo/fav_icon_128x128.png +0 -0
  35. package/logo/fav_icon_128x128.png:Zone.Identifier +4 -0
  36. package/logo/logo1.webp +0 -0
  37. package/logo/logo1.webp:Zone.Identifier +4 -0
  38. package/logo/social.png +0 -0
  39. package/logo/social.png:Zone.Identifier +4 -0
  40. package/mcp-server/agentvibes.db +0 -0
  41. package/mcp-server/server.py +47 -14
  42. package/package.json +3 -3
  43. package/regenerate-agent-voices.sh +79 -0
  44. package/test/unit/provider-manager.bats +8 -5
  45. package/test/unit/speed-manager.bats +4 -4
  46. package/agentvibes.org/.claude/audio/tts-padded-1760744118.mp3 +0 -0
  47. package/agentvibes.org/.claude/audio/tts-padded-1760748535.mp3 +0 -0
  48. package/agentvibes.org/.claude/audio/tts-padded-1760748676.mp3 +0 -0
  49. package/agentvibes.org/.claude/audio/tts-padded-1760750748.mp3 +0 -0
  50. package/agentvibes.org/.claude/audio/tts-padded-1760750947.mp3 +0 -0
  51. package/agentvibes.org/.claude/audio/tts-padded-1760752718.mp3 +0 -0
  52. package/agentvibes.org/.claude/audio/tts-padded-1760752907.mp3 +0 -0
  53. package/agentvibes.org/.claude/audio/tts-padded-1760753017.mp3 +0 -0
  54. package/agentvibes.org/.claude/audio/tts-padded-1760753045.mp3 +0 -0
  55. package/agentvibes.org/.claude/audio/tts-padded-1760753241.mp3 +0 -0
  56. package/agentvibes.org/.claude/audio/tts-padded-1760753315.mp3 +0 -0
  57. package/agentvibes.org/.claude/audio/tts-padded-1760753382.mp3 +0 -0
  58. package/agentvibes.org/.claude/audio/tts-padded-1760753408.mp3 +0 -0
  59. package/agentvibes.org/.claude/audio/tts-padded-1760753426.mp3 +0 -0
  60. package/agentvibes.org/.claude/audio/tts-padded-1760753446.mp3 +0 -0
  61. package/agentvibes.org/.claude/audio/tts-padded-1760753541.mp3 +0 -0
  62. package/agentvibes.org/.claude/audio/tts-padded-1760753553.mp3 +0 -0
  63. package/agentvibes.org/.claude/audio/tts-padded-1760753577.mp3 +0 -0
  64. package/agentvibes.org/.claude/commands/agent-vibes/add.md +0 -21
  65. package/agentvibes.org/.claude/commands/agent-vibes/agent-vibes.md +0 -68
  66. package/agentvibes.org/.claude/commands/agent-vibes/bmad.md +0 -196
  67. package/agentvibes.org/.claude/commands/agent-vibes/commands.json +0 -77
  68. package/agentvibes.org/.claude/commands/agent-vibes/get.md +0 -9
  69. package/agentvibes.org/.claude/commands/agent-vibes/language.md +0 -23
  70. package/agentvibes.org/.claude/commands/agent-vibes/learn.md +0 -67
  71. package/agentvibes.org/.claude/commands/agent-vibes/list.md +0 -13
  72. package/agentvibes.org/.claude/commands/agent-vibes/personality.md +0 -79
  73. package/agentvibes.org/.claude/commands/agent-vibes/preview.md +0 -17
  74. package/agentvibes.org/.claude/commands/agent-vibes/provider.md +0 -54
  75. package/agentvibes.org/.claude/commands/agent-vibes/replay-target.md +0 -14
  76. package/agentvibes.org/.claude/commands/agent-vibes/replay.md +0 -19
  77. package/agentvibes.org/.claude/commands/agent-vibes/sample.md +0 -12
  78. package/agentvibes.org/.claude/commands/agent-vibes/sentiment.md +0 -52
  79. package/agentvibes.org/.claude/commands/agent-vibes/set-language.md +0 -47
  80. package/agentvibes.org/.claude/commands/agent-vibes/set-pretext.md +0 -65
  81. package/agentvibes.org/.claude/commands/agent-vibes/set-speed.md +0 -41
  82. package/agentvibes.org/.claude/commands/agent-vibes/switch.md +0 -53
  83. package/agentvibes.org/.claude/commands/agent-vibes/target-voice.md +0 -26
  84. package/agentvibes.org/.claude/commands/agent-vibes/target.md +0 -30
  85. package/agentvibes.org/.claude/commands/agent-vibes/update.md +0 -20
  86. package/agentvibes.org/.claude/commands/agent-vibes/version.md +0 -10
  87. package/agentvibes.org/.claude/commands/agent-vibes/whoami.md +0 -7
  88. package/agentvibes.org/.claude/hooks/bmad-tts-injector.sh +0 -386
  89. package/agentvibes.org/.claude/hooks/bmad-voice-manager.sh +0 -375
  90. package/agentvibes.org/.claude/hooks/check-output-style.sh +0 -60
  91. package/agentvibes.org/.claude/hooks/github-star-reminder.sh +0 -94
  92. package/agentvibes.org/.claude/hooks/language-manager.sh +0 -360
  93. package/agentvibes.org/.claude/hooks/learn-manager.sh +0 -443
  94. package/agentvibes.org/.claude/hooks/personality-manager.sh +0 -324
  95. package/agentvibes.org/.claude/hooks/piper-download-voices.sh +0 -133
  96. package/agentvibes.org/.claude/hooks/piper-installer.sh +0 -144
  97. package/agentvibes.org/.claude/hooks/piper-voice-manager.sh +0 -227
  98. package/agentvibes.org/.claude/hooks/play-tts-elevenlabs.sh +0 -376
  99. package/agentvibes.org/.claude/hooks/play-tts-piper.sh +0 -281
  100. package/agentvibes.org/.claude/hooks/play-tts.sh +0 -69
  101. package/agentvibes.org/.claude/hooks/provider-commands.sh +0 -505
  102. package/agentvibes.org/.claude/hooks/provider-manager.sh +0 -248
  103. package/agentvibes.org/.claude/hooks/replay-target-audio.sh +0 -64
  104. package/agentvibes.org/.claude/hooks/sentiment-manager.sh +0 -163
  105. package/agentvibes.org/.claude/hooks/speed-manager.sh +0 -259
  106. package/agentvibes.org/.claude/hooks/voice-manager.sh +0 -477
  107. package/agentvibes.org/.claude/hooks/voices-config.sh +0 -33
  108. package/agentvibes.org/.claude/journal/2025-10-07.html +0 -373
  109. package/agentvibes.org/.claude/journal/index.html +0 -91
  110. package/agentvibes.org/.claude/output-styles/agent-vibes.md +0 -203
  111. package/agentvibes.org/.claude/personalities/angry.md +0 -17
  112. package/agentvibes.org/.claude/personalities/annoying.md +0 -17
  113. package/agentvibes.org/.claude/personalities/crass.md +0 -17
  114. package/agentvibes.org/.claude/personalities/dramatic.md +0 -17
  115. package/agentvibes.org/.claude/personalities/dry-humor.md +0 -53
  116. package/agentvibes.org/.claude/personalities/flirty.md +0 -23
  117. package/agentvibes.org/.claude/personalities/funny.md +0 -17
  118. package/agentvibes.org/.claude/personalities/grandpa.md +0 -35
  119. package/agentvibes.org/.claude/personalities/millennial.md +0 -17
  120. package/agentvibes.org/.claude/personalities/moody.md +0 -17
  121. package/agentvibes.org/.claude/personalities/normal.md +0 -19
  122. package/agentvibes.org/.claude/personalities/pirate.md +0 -17
  123. package/agentvibes.org/.claude/personalities/poetic.md +0 -17
  124. package/agentvibes.org/.claude/personalities/professional.md +0 -17
  125. package/agentvibes.org/.claude/personalities/robot.md +0 -17
  126. package/agentvibes.org/.claude/personalities/sarcastic.md +0 -41
  127. package/agentvibes.org/.claude/personalities/sassy.md +0 -17
  128. package/agentvibes.org/.claude/personalities/surfer-dude.md +0 -17
  129. package/agentvibes.org/.claude/personalities/zen.md +0 -17
  130. package/agentvibes.org/.claude/piper-voices-dir.txt +0 -1
  131. package/agentvibes.org/.claude/plugins/bmad-voices.md +0 -42
  132. package/agentvibes.org/.claude/tts-provider.txt +0 -1
  133. package/agentvibes.org/.mcp-minimal.json +0 -60
  134. package/agentvibes.org/CHANGELOG.md +0 -56
  135. package/agentvibes.org/README.md +0 -93
  136. package/agentvibes.org/app/(auth)/layout.tsx +0 -15
  137. package/agentvibes.org/app/(auth)/reset-password/page.tsx +0 -45
  138. package/agentvibes.org/app/(auth)/signin/page.tsx +0 -82
  139. package/agentvibes.org/app/(auth)/signup/page.tsx +0 -104
  140. package/agentvibes.org/app/(default)/blog/[slug]/page.tsx +0 -128
  141. package/agentvibes.org/app/(default)/blog/page.tsx +0 -95
  142. package/agentvibes.org/app/(default)/layout.tsx +0 -31
  143. package/agentvibes.org/app/(default)/page.tsx +0 -20
  144. package/agentvibes.org/app/api/hello/route.ts +0 -3
  145. package/agentvibes.org/app/css/additional-styles/theme.css +0 -82
  146. package/agentvibes.org/app/css/additional-styles/utility-patterns.css +0 -55
  147. package/agentvibes.org/app/css/style.css +0 -100
  148. package/agentvibes.org/app/layout.tsx +0 -63
  149. package/agentvibes.org/components/code-block.tsx +0 -27
  150. package/agentvibes.org/components/cta.tsx +0 -58
  151. package/agentvibes.org/components/features.tsx +0 -256
  152. package/agentvibes.org/components/hero-home.tsx +0 -133
  153. package/agentvibes.org/components/mdx-components.tsx +0 -128
  154. package/agentvibes.org/components/modal-video.tsx +0 -137
  155. package/agentvibes.org/components/page-illustration.tsx +0 -55
  156. package/agentvibes.org/components/spotlight.tsx +0 -77
  157. package/agentvibes.org/components/testimonials.tsx +0 -282
  158. package/agentvibes.org/components/ui/footer.tsx +0 -82
  159. package/agentvibes.org/components/ui/header.tsx +0 -68
  160. package/agentvibes.org/components/ui/logo.tsx +0 -10
  161. package/agentvibes.org/components/workflows.tsx +0 -176
  162. package/agentvibes.org/content/blog/discovering-new-piper-voices.mdx +0 -253
  163. package/agentvibes.org/content/blog/getting-started-agentvibes.mdx +0 -228
  164. package/agentvibes.org/content/blog/introducing-agentvibes-v2.mdx +0 -250
  165. package/agentvibes.org/content/blog/language-learning-with-agentvibes.mdx +0 -142
  166. package/agentvibes.org/content/blog/voice-personalities-guide.mdx +0 -119
  167. package/agentvibes.org/lib/blog.ts +0 -73
  168. package/agentvibes.org/next.config.js +0 -6
  169. package/agentvibes.org/package-lock.json +0 -4285
  170. package/agentvibes.org/package.json +0 -40
  171. package/agentvibes.org/pnpm-lock.yaml +0 -1141
  172. package/agentvibes.org/postcss.config.js +0 -5
  173. package/agentvibes.org/public/audio/02-sarcastic.mp3 +0 -0
  174. package/agentvibes.org/public/audio/03-angry.mp3 +0 -0
  175. package/agentvibes.org/public/audio/04-grandpa.mp3 +0 -0
  176. package/agentvibes.org/public/audio/05-sarcastic-example2.mp3 +0 -0
  177. package/agentvibes.org/public/audio/french-rachel.mp3 +0 -0
  178. package/agentvibes.org/public/audio/piper-voices/speaker_0_Cori_Samuel.wav +0 -0
  179. package/agentvibes.org/public/audio/piper-voices/speaker_10_Steve_C.wav +0 -0
  180. package/agentvibes.org/public/audio/piper-voices/speaker_11_Owlivia.wav +0 -0
  181. package/agentvibes.org/public/audio/piper-voices/speaker_12_Paul_Hampton.wav +0 -0
  182. package/agentvibes.org/public/audio/piper-voices/speaker_13_Jennifer_Dorr.wav +0 -0
  183. package/agentvibes.org/public/audio/piper-voices/speaker_14_Emily_Cripps.wav +0 -0
  184. package/agentvibes.org/public/audio/piper-voices/speaker_15_Martin_Clifton.wav +0 -0
  185. package/agentvibes.org/public/audio/piper-voices/speaker_1_Kara_Shallenberg.wav +0 -0
  186. package/agentvibes.org/public/audio/piper-voices/speaker_2_Kristin_Hughes.wav +0 -0
  187. package/agentvibes.org/public/audio/piper-voices/speaker_3_Maria_Kasper.wav +0 -0
  188. package/agentvibes.org/public/audio/piper-voices/speaker_4_Mike_Pelton.wav +0 -0
  189. package/agentvibes.org/public/audio/piper-voices/speaker_5_Mark_Nelson.wav +0 -0
  190. package/agentvibes.org/public/audio/piper-voices/speaker_6_Michael_Scherer.wav +0 -0
  191. package/agentvibes.org/public/audio/piper-voices/speaker_7_James_K_White.wav +0 -0
  192. package/agentvibes.org/public/audio/piper-voices/speaker_8_Rose_Ibex.wav +0 -0
  193. package/agentvibes.org/public/audio/piper-voices/speaker_9_progressingamerica.wav +0 -0
  194. package/agentvibes.org/public/audio/spanish-antoni.mp3 +0 -0
  195. package/agentvibes.org/public/favicon.ico +0 -0
  196. package/agentvibes.org/public/fonts/nacelle-italic.woff2 +0 -0
  197. package/agentvibes.org/public/fonts/nacelle-regular.woff2 +0 -0
  198. package/agentvibes.org/public/fonts/nacelle-semibold.woff2 +0 -0
  199. package/agentvibes.org/public/fonts/nacelle-semibolditalic.woff2 +0 -0
  200. package/agentvibes.org/public/images/blurred-shape-gray.svg +0 -1
  201. package/agentvibes.org/public/images/blurred-shape.svg +0 -1
  202. package/agentvibes.org/public/images/client-logo-01.svg +0 -1
  203. package/agentvibes.org/public/images/client-logo-02.svg +0 -1
  204. package/agentvibes.org/public/images/client-logo-03.svg +0 -1
  205. package/agentvibes.org/public/images/client-logo-04.svg +0 -1
  206. package/agentvibes.org/public/images/client-logo-05.svg +0 -1
  207. package/agentvibes.org/public/images/client-logo-06.svg +0 -1
  208. package/agentvibes.org/public/images/client-logo-07.svg +0 -1
  209. package/agentvibes.org/public/images/client-logo-08.svg +0 -1
  210. package/agentvibes.org/public/images/client-logo-09.svg +0 -1
  211. package/agentvibes.org/public/images/features.png +0 -0
  212. package/agentvibes.org/public/images/footer-illustration.svg +0 -1
  213. package/agentvibes.org/public/images/hero-image-01.jpg +0 -0
  214. package/agentvibes.org/public/images/logo.svg +0 -1
  215. package/agentvibes.org/public/images/page-illustration.svg +0 -1
  216. package/agentvibes.org/public/images/secondary-illustration.svg +0 -1
  217. package/agentvibes.org/public/images/testimonial-01.jpg +0 -0
  218. package/agentvibes.org/public/images/testimonial-02.jpg +0 -0
  219. package/agentvibes.org/public/images/testimonial-03.jpg +0 -0
  220. package/agentvibes.org/public/images/testimonial-04.jpg +0 -0
  221. package/agentvibes.org/public/images/testimonial-05.jpg +0 -0
  222. package/agentvibes.org/public/images/testimonial-06.jpg +0 -0
  223. package/agentvibes.org/public/images/testimonial-07.jpg +0 -0
  224. package/agentvibes.org/public/images/testimonial-08.jpg +0 -0
  225. package/agentvibes.org/public/images/testimonial-09.jpg +0 -0
  226. package/agentvibes.org/public/images/workflow-01.png +0 -0
  227. package/agentvibes.org/public/images/workflow-02.png +0 -0
  228. package/agentvibes.org/public/images/workflow-03.png +0 -0
  229. package/agentvibes.org/public/videos/video.mp4 +0 -0
  230. package/agentvibes.org/tsconfig.json +0 -28
  231. package/agentvibes.org/utils/useMasonry.tsx +0 -67
  232. package/agentvibes.org/utils/useMousePosition.tsx +0 -27
  233. 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 "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"