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,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