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
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
# Extra Piper Voices - Implementation Summary
|
|
2
|
+
|
|
3
|
+
## Problem Statement
|
|
4
|
+
|
|
5
|
+
Users encountered difficulties when trying to download and use extra custom Piper voices (jenny, kristin, 16Speakers):
|
|
6
|
+
|
|
7
|
+
1. **Download Issue**: `tracy.onnx` file was incorrectly named (should be `16Speakers.onnx`)
|
|
8
|
+
2. **Voice Registration Issue**: Custom voices couldn't be switched to because they didn't match the Piper voice pattern detection (`*_*-*`)
|
|
9
|
+
3. **Multi-Speaker Support**: The 16Speakers model contains 16 individual voices that couldn't be accessed individually
|
|
10
|
+
|
|
11
|
+
## Solution Implemented
|
|
12
|
+
|
|
13
|
+
### 1. Fixed Download Script ✅
|
|
14
|
+
|
|
15
|
+
**File**: `.claude/hooks/download-extra-voices.sh`
|
|
16
|
+
|
|
17
|
+
**Changes**:
|
|
18
|
+
- Already uses correct filename `16Speakers.onnx` (not `tracy.onnx`)
|
|
19
|
+
- Downloads three custom voices:
|
|
20
|
+
- `kristin.onnx` (64MB) - US English female
|
|
21
|
+
- `jenny.onnx` (64MB) - UK English female with Irish accent
|
|
22
|
+
- `16Speakers.onnx` (77MB) - Multi-speaker with 12 US + 4 UK voices
|
|
23
|
+
|
|
24
|
+
### 2. Enhanced Voice Manager ✅
|
|
25
|
+
|
|
26
|
+
**File**: `.claude/hooks/voice-manager.sh`
|
|
27
|
+
|
|
28
|
+
**Changes**:
|
|
29
|
+
- **Before**: Only detected Piper voices matching pattern `*_*-*` (e.g., `en_US-lessac-medium`)
|
|
30
|
+
- **After**: Scans voice directory for ALL `.onnx` files, including custom voices
|
|
31
|
+
|
|
32
|
+
**New Logic**:
|
|
33
|
+
```bash
|
|
34
|
+
# For Piper provider:
|
|
35
|
+
# 1. Check standard voice directory for .onnx files (jenny, kristin, 16Speakers)
|
|
36
|
+
# 2. If not found, check multi-speaker registry (Cori_Samuel, Rose_Ibex, etc.)
|
|
37
|
+
# 3. If multi-speaker found, store model + speaker ID separately
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Result**: Users can now switch to custom voices:
|
|
41
|
+
- `/agent-vibes:switch jenny` ✅
|
|
42
|
+
- `/agent-vibes:switch kristin` ✅
|
|
43
|
+
- `/agent-vibes:switch 16Speakers` ✅
|
|
44
|
+
|
|
45
|
+
### 3. Multi-Speaker Registry ✅
|
|
46
|
+
|
|
47
|
+
**File**: `.claude/hooks/piper-multispeaker-registry.sh` (NEW)
|
|
48
|
+
|
|
49
|
+
**Purpose**: Maps individual speaker names to model files and speaker IDs
|
|
50
|
+
|
|
51
|
+
**Features**:
|
|
52
|
+
- Registry of all 16 speakers in the 16Speakers model
|
|
53
|
+
- Functions to lookup model and speaker ID by name
|
|
54
|
+
- Function to list all multi-speaker voices with descriptions
|
|
55
|
+
|
|
56
|
+
**Example Registry Entry**:
|
|
57
|
+
```bash
|
|
58
|
+
"Cori_Samuel:16Speakers:0:US English Female"
|
|
59
|
+
"Rose_Ibex:16Speakers:8:US English Female"
|
|
60
|
+
"Paul_Hampton:16Speakers:12:UK English Male"
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**Usage**:
|
|
64
|
+
```bash
|
|
65
|
+
/agent-vibes:switch Cori_Samuel # Uses 16Speakers.onnx with speaker ID 0
|
|
66
|
+
/agent-vibes:switch Rose_Ibex # Uses 16Speakers.onnx with speaker ID 8
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### 4. Multi-Speaker TTS Support ✅
|
|
70
|
+
|
|
71
|
+
**File**: `.claude/hooks/play-tts-piper.sh`
|
|
72
|
+
|
|
73
|
+
**Changes**:
|
|
74
|
+
|
|
75
|
+
**Voice Resolution**:
|
|
76
|
+
```bash
|
|
77
|
+
# Check for multi-speaker voice configuration
|
|
78
|
+
if [[ -f "tts-piper-model.txt" ]] && [[ -f "tts-piper-speaker-id.txt" ]]; then
|
|
79
|
+
VOICE_MODEL=$(cat tts-piper-model.txt) # e.g., "16Speakers"
|
|
80
|
+
SPEAKER_ID=$(cat tts-piper-speaker-id.txt) # e.g., "8"
|
|
81
|
+
fi
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**TTS Synthesis**:
|
|
85
|
+
```bash
|
|
86
|
+
if [[ -n "$SPEAKER_ID" ]]; then
|
|
87
|
+
# Multi-speaker: Pass speaker ID to Piper
|
|
88
|
+
echo "$TEXT" | piper --model "$VOICE_PATH" --speaker "$SPEAKER_ID" --output_file "$OUTPUT"
|
|
89
|
+
else
|
|
90
|
+
# Single-speaker: Standard synthesis
|
|
91
|
+
echo "$TEXT" | piper --model "$VOICE_PATH" --output_file "$OUTPUT"
|
|
92
|
+
fi
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## File Changes Summary
|
|
96
|
+
|
|
97
|
+
| File | Status | Changes |
|
|
98
|
+
|------|--------|---------|
|
|
99
|
+
| `download-extra-voices.sh` | ✅ Already Correct | Uses `16Speakers.onnx` (not tracy) |
|
|
100
|
+
| `voice-manager.sh` | ✅ Updated | Added Piper voice directory scanning, multi-speaker support |
|
|
101
|
+
| `piper-multispeaker-registry.sh` | ✅ Created | New registry for 16 speaker mappings |
|
|
102
|
+
| `play-tts-piper.sh` | ✅ Updated | Added multi-speaker voice resolution and speaker ID support |
|
|
103
|
+
| `docs/voice-registration-fix.md` | ✅ Created | Detailed problem analysis and solution design |
|
|
104
|
+
| `docs/extra-voices-implementation-summary.md` | ✅ Created | This file |
|
|
105
|
+
|
|
106
|
+
## Available Voices After Implementation
|
|
107
|
+
|
|
108
|
+
### Standard Custom Voices
|
|
109
|
+
- `jenny` - UK English female with Irish accent (CC BY)
|
|
110
|
+
- `kristin` - US English female (Public Domain)
|
|
111
|
+
- `16Speakers` - Access all 16 speakers at once (uses first speaker by default)
|
|
112
|
+
|
|
113
|
+
### Individual Multi-Speaker Voices (16Speakers Model)
|
|
114
|
+
|
|
115
|
+
**US English Speakers (12)**:
|
|
116
|
+
- `Cori_Samuel` (Female, ID: 0)
|
|
117
|
+
- `Kara_Shallenberg` (Female, ID: 1)
|
|
118
|
+
- `Kristin_Hughes` (Female, ID: 2)
|
|
119
|
+
- `Maria_Kasper` (Female, ID: 3)
|
|
120
|
+
- `Mike_Pelton` (Male, ID: 4)
|
|
121
|
+
- `Mark_Nelson` (Male, ID: 5)
|
|
122
|
+
- `Michael_Scherer` (Male, ID: 6)
|
|
123
|
+
- `James_K_White` (Male, ID: 7)
|
|
124
|
+
- `Rose_Ibex` (Female, ID: 8)
|
|
125
|
+
- `progressingamerica` (Male, ID: 9)
|
|
126
|
+
- `Steve_C` (Male, ID: 10)
|
|
127
|
+
- `Owlivia` (Female, ID: 11)
|
|
128
|
+
|
|
129
|
+
**UK English Speakers (4)**:
|
|
130
|
+
- `Paul_Hampton` (Male, ID: 12)
|
|
131
|
+
- `Jennifer_Dorr` (Female, ID: 13)
|
|
132
|
+
- `Emily_Cripps` (Female, ID: 14)
|
|
133
|
+
- `Martin_Clifton` (Male, ID: 15)
|
|
134
|
+
|
|
135
|
+
## Usage Examples
|
|
136
|
+
|
|
137
|
+
### Download Extra Voices
|
|
138
|
+
```bash
|
|
139
|
+
# Via MCP
|
|
140
|
+
mcp__agentvibes__download_extra_voices()
|
|
141
|
+
|
|
142
|
+
# Via slash command (when implemented)
|
|
143
|
+
/agent-vibes:provider download
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Switch to Custom Voice
|
|
147
|
+
```bash
|
|
148
|
+
# UK English female with Irish accent
|
|
149
|
+
/agent-vibes:switch jenny
|
|
150
|
+
|
|
151
|
+
# US English female
|
|
152
|
+
/agent-vibes:switch kristin
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### Switch to Multi-Speaker Voice
|
|
156
|
+
```bash
|
|
157
|
+
# Use a specific speaker from 16Speakers model
|
|
158
|
+
/agent-vibes:switch Cori_Samuel # US Female speaker
|
|
159
|
+
/agent-vibes:switch Rose_Ibex # US Female speaker
|
|
160
|
+
/agent-vibes:switch Paul_Hampton # UK Male speaker
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### List Available Voices
|
|
164
|
+
```bash
|
|
165
|
+
/agent-vibes:list
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Output will show:
|
|
169
|
+
- Standard Piper voices (en_US-lessac-medium, etc.)
|
|
170
|
+
- Custom voices (jenny, kristin, 16Speakers)
|
|
171
|
+
- Multi-speaker voices (Cori_Samuel, Rose_Ibex, etc.)
|
|
172
|
+
|
|
173
|
+
## Technical Details
|
|
174
|
+
|
|
175
|
+
### State Files for Multi-Speaker Voices
|
|
176
|
+
|
|
177
|
+
When you switch to a multi-speaker voice, three files are created:
|
|
178
|
+
|
|
179
|
+
1. `.claude/tts-voice.txt` - Stores speaker name (e.g., "Cori_Samuel")
|
|
180
|
+
2. `.claude/tts-piper-model.txt` - Stores model file (e.g., "16Speakers")
|
|
181
|
+
3. `.claude/tts-piper-speaker-id.txt` - Stores speaker ID (e.g., "0")
|
|
182
|
+
|
|
183
|
+
### Voice Lookup Priority (Piper Provider)
|
|
184
|
+
|
|
185
|
+
1. **Standard voice files**: Check voice directory for `<name>.onnx`
|
|
186
|
+
2. **Multi-speaker registry**: Check registry for speaker name
|
|
187
|
+
3. **Error**: Show available voices if not found
|
|
188
|
+
|
|
189
|
+
### Piper TTS Command Format
|
|
190
|
+
|
|
191
|
+
**Single-speaker voice**:
|
|
192
|
+
```bash
|
|
193
|
+
piper --model /path/to/jenny.onnx --output_file output.wav
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
**Multi-speaker voice**:
|
|
197
|
+
```bash
|
|
198
|
+
piper --model /path/to/16Speakers.onnx --speaker 8 --output_file output.wav
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
## Testing Checklist
|
|
202
|
+
|
|
203
|
+
- [x] Download script uses correct filename (16Speakers.onnx)
|
|
204
|
+
- [x] Voice manager scans directory for custom voices
|
|
205
|
+
- [x] Multi-speaker registry created with all 16 speakers
|
|
206
|
+
- [x] Voice manager checks multi-speaker registry
|
|
207
|
+
- [x] play-tts-piper.sh reads speaker ID from config
|
|
208
|
+
- [x] play-tts-piper.sh passes --speaker flag to Piper
|
|
209
|
+
- [ ] Test: Download extra voices via MCP
|
|
210
|
+
- [ ] Test: Switch to jenny voice
|
|
211
|
+
- [ ] Test: Switch to kristin voice
|
|
212
|
+
- [ ] Test: Switch to Cori_Samuel (multi-speaker)
|
|
213
|
+
- [ ] Test: Play TTS with each voice
|
|
214
|
+
- [ ] Test: List voices shows all custom + multi-speaker
|
|
215
|
+
|
|
216
|
+
## Next Steps
|
|
217
|
+
|
|
218
|
+
1. **Test the implementation** with actual voice downloads and switching
|
|
219
|
+
2. **Update voice listing** to show custom and multi-speaker voices in organized sections
|
|
220
|
+
3. **Add MCP methods** for listing multi-speaker voices
|
|
221
|
+
4. **Create user documentation** with voice preview samples
|
|
222
|
+
|
|
223
|
+
## Benefits
|
|
224
|
+
|
|
225
|
+
✅ **Users can now**:
|
|
226
|
+
- Download high-quality custom voices with one command
|
|
227
|
+
- Switch to custom voices (jenny, kristin) just like standard voices
|
|
228
|
+
- Access individual speakers from multi-speaker models
|
|
229
|
+
- Choose from 19 total custom voices (3 models + 16 individual speakers)
|
|
230
|
+
|
|
231
|
+
✅ **System improvements**:
|
|
232
|
+
- Consistent voice switching experience across all voice types
|
|
233
|
+
- Automatic multi-speaker detection and configuration
|
|
234
|
+
- Clear error messages with available voice listings
|
|
235
|
+
- Support for future multi-speaker models
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
# Voice Registration Fix - Extra Piper Voices
|
|
2
|
+
|
|
3
|
+
## Problems Identified
|
|
4
|
+
|
|
5
|
+
### 1. **Download Issues**
|
|
6
|
+
- The `tracy.onnx` download only got 15 bytes (redirect/error page)
|
|
7
|
+
- **Root Cause**: The HuggingFace file is actually named `16Speakers.onnx`, not `tracy.onnx`
|
|
8
|
+
- **Fix**: Updated download script to use correct filename `16Speakers.onnx`
|
|
9
|
+
|
|
10
|
+
### 2. **Voice Registration Issues**
|
|
11
|
+
When users download custom Piper voices (jenny, kristin, 16Speakers), they cannot switch to them because:
|
|
12
|
+
|
|
13
|
+
**Problem**: The voice-manager.sh uses two different lookup methods:
|
|
14
|
+
1. **ElevenLabs voices**: Uses `voices-config.sh` associative array
|
|
15
|
+
2. **Piper voices**: Scans `.onnx` files in the voice storage directory
|
|
16
|
+
|
|
17
|
+
**Current voice-manager.sh logic (line 265-269)**:
|
|
18
|
+
```bash
|
|
19
|
+
# If using Piper and voice name looks like a Piper model (contains underscore and dash)
|
|
20
|
+
# then skip ElevenLabs voice validation
|
|
21
|
+
if [[ "$ACTIVE_PROVIDER" == "piper" ]] && [[ "$VOICE_NAME" == *"_"*"-"* ]]; then
|
|
22
|
+
# This is a Piper model name, use it directly
|
|
23
|
+
FOUND="$VOICE_NAME"
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**Issue**: Custom voice names like `jenny`, `kristin`, and `16Speakers` DON'T contain underscore and dash, so they fail the Piper detection and fall through to ElevenLabs lookup, which fails.
|
|
27
|
+
|
|
28
|
+
**Why it fails**:
|
|
29
|
+
- `jenny` → No underscore/dash → Falls to ElevenLabs lookup → Not found → Error
|
|
30
|
+
- `kristin` → No underscore/dash → Falls to ElevenLabs lookup → Not found → Error
|
|
31
|
+
- `16Speakers` → No underscore/dash → Falls to ElevenLabs lookup → Not found → Error
|
|
32
|
+
|
|
33
|
+
**Why standard Piper voices work**:
|
|
34
|
+
- `en_US-lessac-medium` → Contains `_` and `-` → Passes Piper check → Works!
|
|
35
|
+
- `en_GB-alan-medium` → Contains `_` and `-` → Passes Piper check → Works!
|
|
36
|
+
|
|
37
|
+
### 3. **Multi-Speaker Voice Support (16Speakers)**
|
|
38
|
+
|
|
39
|
+
The `16Speakers.onnx` is a special multi-speaker model containing 16 different voices:
|
|
40
|
+
|
|
41
|
+
```json
|
|
42
|
+
{
|
|
43
|
+
"speaker_id_map": {
|
|
44
|
+
"Cori_Samuel": 0,
|
|
45
|
+
"Kara_Shallenberg": 1,
|
|
46
|
+
"Kristin_Hughes": 2,
|
|
47
|
+
"Maria_Kasper": 3,
|
|
48
|
+
"Mike_Pelton": 4,
|
|
49
|
+
"Mark_Nelson": 5,
|
|
50
|
+
"Michael_Scherer": 6,
|
|
51
|
+
"James_K_White": 7,
|
|
52
|
+
"Rose_Ibex": 8,
|
|
53
|
+
"progressingamerica": 9,
|
|
54
|
+
"Steve_C": 10,
|
|
55
|
+
"Owlivia": 11,
|
|
56
|
+
"Paul_Hampton": 12,
|
|
57
|
+
"Jennifer_Dorr": 13,
|
|
58
|
+
"Emily_Cripps": 14,
|
|
59
|
+
"Martin_Clifton": 15
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**Usage**: Users should be able to say:
|
|
65
|
+
- `/agent-vibes:switch Cori_Samuel` → Uses `16Speakers.onnx` with speaker ID 0
|
|
66
|
+
- `/agent-vibes:switch Rose_Ibex` → Uses `16Speakers.onnx` with speaker ID 8
|
|
67
|
+
|
|
68
|
+
**Problem**: Currently no system to:
|
|
69
|
+
1. Parse multi-speaker voice names
|
|
70
|
+
2. Pass speaker ID to Piper TTS
|
|
71
|
+
3. Register individual speaker names from multi-speaker models
|
|
72
|
+
|
|
73
|
+
## Solution Design
|
|
74
|
+
|
|
75
|
+
### Phase 1: Fix Basic Custom Voice Registration
|
|
76
|
+
|
|
77
|
+
**Approach**: Enhance `voice-manager.sh` to check for custom Piper voices by scanning the voice directory.
|
|
78
|
+
|
|
79
|
+
**Modified logic**:
|
|
80
|
+
```bash
|
|
81
|
+
# 1. Check if it's a number (for ElevenLabs numbered selection)
|
|
82
|
+
if [[ "$VOICE_NAME" =~ ^[0-9]+$ ]]; then
|
|
83
|
+
# ... existing numbered selection code ...
|
|
84
|
+
|
|
85
|
+
# 2. NEW: Check if it's a Piper voice (scan voice directory)
|
|
86
|
+
elif [[ "$ACTIVE_PROVIDER" == "piper" ]]; then
|
|
87
|
+
source "$SCRIPT_DIR/piper-voice-manager.sh"
|
|
88
|
+
VOICE_DIR=$(get_voice_storage_dir)
|
|
89
|
+
|
|
90
|
+
# Check if voice file exists (case-insensitive)
|
|
91
|
+
FOUND=""
|
|
92
|
+
for onnx_file in "$VOICE_DIR"/*.onnx; do
|
|
93
|
+
if [[ -f "$onnx_file" ]]; then
|
|
94
|
+
voice=$(basename "$onnx_file" .onnx)
|
|
95
|
+
if [[ "${voice,,}" == "${VOICE_NAME,,}" ]]; then
|
|
96
|
+
FOUND="$voice"
|
|
97
|
+
break
|
|
98
|
+
fi
|
|
99
|
+
fi
|
|
100
|
+
done
|
|
101
|
+
|
|
102
|
+
if [[ -z "$FOUND" ]]; then
|
|
103
|
+
echo "❌ Piper voice not found: $VOICE_NAME"
|
|
104
|
+
echo ""
|
|
105
|
+
echo "Available Piper voices:"
|
|
106
|
+
for onnx_file in "$VOICE_DIR"/*.onnx; do
|
|
107
|
+
[[ -f "$onnx_file" ]] && echo " - $(basename "$onnx_file" .onnx)"
|
|
108
|
+
done | sort
|
|
109
|
+
exit 1
|
|
110
|
+
fi
|
|
111
|
+
|
|
112
|
+
# 3. Fall back to ElevenLabs lookup
|
|
113
|
+
else
|
|
114
|
+
# ... existing ElevenLabs lookup code ...
|
|
115
|
+
fi
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Phase 2: Multi-Speaker Support
|
|
119
|
+
|
|
120
|
+
**1. Create Multi-Speaker Registry**
|
|
121
|
+
|
|
122
|
+
New file: `.claude/hooks/piper-multispeaker-registry.sh`
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
# Registry of multi-speaker models and their speaker names
|
|
126
|
+
# Format: "SpeakerName:model_file:speaker_id"
|
|
127
|
+
MULTISPEAKER_VOICES=(
|
|
128
|
+
"Cori_Samuel:16Speakers:0"
|
|
129
|
+
"Kara_Shallenberg:16Speakers:1"
|
|
130
|
+
"Kristin_Hughes:16Speakers:2"
|
|
131
|
+
"Maria_Kasper:16Speakers:3"
|
|
132
|
+
"Mike_Pelton:16Speakers:4"
|
|
133
|
+
"Mark_Nelson:16Speakers:5"
|
|
134
|
+
"Michael_Scherer:16Speakers:6"
|
|
135
|
+
"James_K_White:16Speakers:7"
|
|
136
|
+
"Rose_Ibex:16Speakers:8"
|
|
137
|
+
"progressingamerica:16Speakers:9"
|
|
138
|
+
"Steve_C:16Speakers:10"
|
|
139
|
+
"Owlivia:16Speakers:11"
|
|
140
|
+
"Paul_Hampton:16Speakers:12"
|
|
141
|
+
"Jennifer_Dorr:16Speakers:13"
|
|
142
|
+
"Emily_Cripps:16Speakers:14"
|
|
143
|
+
"Martin_Clifton:16Speakers:15"
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
# Get model and speaker ID for a speaker name
|
|
147
|
+
get_multispeaker_info() {
|
|
148
|
+
local speaker_name="$1"
|
|
149
|
+
for entry in "${MULTISPEAKER_VOICES[@]}"; do
|
|
150
|
+
name="${entry%%:*}"
|
|
151
|
+
rest="${entry#*:}"
|
|
152
|
+
model="${rest%%:*}"
|
|
153
|
+
speaker_id="${rest#*:}"
|
|
154
|
+
|
|
155
|
+
if [[ "${name,,}" == "${speaker_name,,}" ]]; then
|
|
156
|
+
echo "$model:$speaker_id"
|
|
157
|
+
return 0
|
|
158
|
+
fi
|
|
159
|
+
done
|
|
160
|
+
return 1
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
**2. Update voice-manager.sh**
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
# After checking standard Piper voices, check multi-speaker registry
|
|
168
|
+
if [[ -z "$FOUND" ]] && [[ "$ACTIVE_PROVIDER" == "piper" ]]; then
|
|
169
|
+
source "$SCRIPT_DIR/piper-multispeaker-registry.sh"
|
|
170
|
+
|
|
171
|
+
MULTISPEAKER_INFO=$(get_multispeaker_info "$VOICE_NAME")
|
|
172
|
+
if [[ -n "$MULTISPEAKER_INFO" ]]; then
|
|
173
|
+
MODEL="${MULTISPEAKER_INFO%%:*}"
|
|
174
|
+
SPEAKER_ID="${MULTISPEAKER_INFO#*:}"
|
|
175
|
+
|
|
176
|
+
# Store as "SpeakerName" in tts-voice.txt
|
|
177
|
+
# Store model and speaker ID separately for play-tts-piper.sh to use
|
|
178
|
+
echo "$VOICE_NAME" > "$VOICE_FILE"
|
|
179
|
+
echo "$MODEL" > "$CLAUDE_DIR/tts-piper-model.txt"
|
|
180
|
+
echo "$SPEAKER_ID" > "$CLAUDE_DIR/tts-piper-speaker-id.txt"
|
|
181
|
+
|
|
182
|
+
echo "✅ Multi-speaker voice switched to: $VOICE_NAME"
|
|
183
|
+
echo "🎤 Model: $MODEL (Speaker ID: $SPEAKER_ID)"
|
|
184
|
+
exit 0
|
|
185
|
+
fi
|
|
186
|
+
fi
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
**3. Update play-tts-piper.sh**
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
# Check if this is a multi-speaker voice
|
|
193
|
+
SPEAKER_ID_FILE="$CLAUDE_DIR/tts-piper-speaker-id.txt"
|
|
194
|
+
MODEL_FILE="$CLAUDE_DIR/tts-piper-model.txt"
|
|
195
|
+
|
|
196
|
+
if [[ -f "$SPEAKER_ID_FILE" ]] && [[ -f "$MODEL_FILE" ]]; then
|
|
197
|
+
# Use multi-speaker model
|
|
198
|
+
PIPER_MODEL=$(cat "$MODEL_FILE")
|
|
199
|
+
SPEAKER_ID=$(cat "$SPEAKER_ID_FILE")
|
|
200
|
+
|
|
201
|
+
# Get model path
|
|
202
|
+
VOICE_PATH=$(get_voice_path "$PIPER_MODEL")
|
|
203
|
+
|
|
204
|
+
# Pass speaker ID to Piper
|
|
205
|
+
echo "$TEXT" | piper \
|
|
206
|
+
--model "$VOICE_PATH" \
|
|
207
|
+
--speaker "$SPEAKER_ID" \
|
|
208
|
+
--output_file "$OUTPUT_FILE" 2>&1
|
|
209
|
+
else
|
|
210
|
+
# Standard single-speaker voice
|
|
211
|
+
# ... existing code ...
|
|
212
|
+
fi
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## Implementation Plan
|
|
216
|
+
|
|
217
|
+
### Step 1: Fix download script filename ✅
|
|
218
|
+
- [x] Change `tracy.onnx` to `16Speakers.onnx` in download-extra-voices.sh
|
|
219
|
+
|
|
220
|
+
### Step 2: Fix basic custom voice switching
|
|
221
|
+
- [ ] Update `voice-manager.sh` switch logic to scan voice directory for Piper voices
|
|
222
|
+
- [ ] Test switching to `jenny`, `kristin`, `16Speakers`
|
|
223
|
+
|
|
224
|
+
### Step 3: Implement multi-speaker support
|
|
225
|
+
- [ ] Create `piper-multispeaker-registry.sh`
|
|
226
|
+
- [ ] Update `voice-manager.sh` to handle multi-speaker lookups
|
|
227
|
+
- [ ] Update `play-tts-piper.sh` to pass speaker ID to Piper
|
|
228
|
+
- [ ] Test switching to individual speakers (e.g., `Cori_Samuel`, `Rose_Ibex`)
|
|
229
|
+
|
|
230
|
+
### Step 4: Update voice listing
|
|
231
|
+
- [ ] Make `/agent-vibes:list` show all custom voices (jenny, kristin, 16 speaker names)
|
|
232
|
+
- [ ] Organize output: "Standard Voices", "Custom Voices", "Multi-Speaker Voices"
|
|
233
|
+
|
|
234
|
+
### Step 5: MCP Integration
|
|
235
|
+
- [ ] Update MCP server to expose multi-speaker voice info
|
|
236
|
+
- [ ] Add `list_multispeaker_voices()` method to show available speakers
|
|
237
|
+
|
|
238
|
+
## Testing Checklist
|
|
239
|
+
|
|
240
|
+
- [ ] Download extra voices: `mcp__agentvibes__download_extra_voices()`
|
|
241
|
+
- [ ] Switch to jenny: `/agent-vibes:switch jenny`
|
|
242
|
+
- [ ] Switch to kristin: `/agent-vibes:switch kristin`
|
|
243
|
+
- [ ] Switch to 16Speakers: `/agent-vibes:switch 16Speakers`
|
|
244
|
+
- [ ] Switch to Cori_Samuel: `/agent-vibes:switch Cori_Samuel`
|
|
245
|
+
- [ ] Switch to Rose_Ibex: `/agent-vibes:switch Rose_Ibex`
|
|
246
|
+
- [ ] List all voices: `/agent-vibes:list` (should show all custom + multi-speaker)
|
|
247
|
+
- [ ] Play TTS with each voice to verify audio works
|
|
248
|
+
|
|
249
|
+
## Future Enhancements
|
|
250
|
+
|
|
251
|
+
1. **Auto-registration**: When downloading 16Speakers, auto-register all 16 speaker names
|
|
252
|
+
2. **Voice preview**: Add preview support for multi-speaker voices
|
|
253
|
+
3. **Voice metadata**: Store speaker descriptions (gender, accent, etc.) in registry
|
|
254
|
+
4. **Dynamic discovery**: Auto-scan .onnx.json files for speaker_id_map and register dynamically
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
#
|
|
3
|
+
# Fix VS Code Workspace Colors
|
|
4
|
+
# Sets the status bar and activity bar to purple for this workspace
|
|
5
|
+
#
|
|
6
|
+
|
|
7
|
+
set -e
|
|
8
|
+
|
|
9
|
+
WORKSPACE_FILE=".vscode/settings.json"
|
|
10
|
+
|
|
11
|
+
echo "🎨 Fixing VS Code workspace colors to purple..."
|
|
12
|
+
|
|
13
|
+
# Create .vscode directory if it doesn't exist
|
|
14
|
+
mkdir -p .vscode
|
|
15
|
+
|
|
16
|
+
# Check if settings.json exists
|
|
17
|
+
if [[ ! -f "$WORKSPACE_FILE" ]]; then
|
|
18
|
+
echo "Creating new workspace settings file..."
|
|
19
|
+
cat > "$WORKSPACE_FILE" <<'EOF'
|
|
20
|
+
{
|
|
21
|
+
"workbench.colorCustomizations": {
|
|
22
|
+
"statusBar.background": "#7b2cbf",
|
|
23
|
+
"statusBar.foreground": "#ffffff",
|
|
24
|
+
"statusBarItem.hoverBackground": "#9d4edd",
|
|
25
|
+
"activityBar.background": "#7b2cbf",
|
|
26
|
+
"activityBar.foreground": "#ffffff",
|
|
27
|
+
"activityBar.inactiveForeground": "#c9c9c9",
|
|
28
|
+
"titleBar.activeBackground": "#7b2cbf",
|
|
29
|
+
"titleBar.activeForeground": "#ffffff",
|
|
30
|
+
"titleBar.inactiveBackground": "#6a24a8",
|
|
31
|
+
"titleBar.inactiveForeground": "#c9c9c9"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
EOF
|
|
35
|
+
else
|
|
36
|
+
echo "Updating existing workspace settings file..."
|
|
37
|
+
|
|
38
|
+
# Use jq if available, otherwise use simple append
|
|
39
|
+
if command -v jq &> /dev/null; then
|
|
40
|
+
# Backup original
|
|
41
|
+
cp "$WORKSPACE_FILE" "${WORKSPACE_FILE}.backup"
|
|
42
|
+
|
|
43
|
+
# Merge with jq
|
|
44
|
+
jq '. + {
|
|
45
|
+
"workbench.colorCustomizations": {
|
|
46
|
+
"statusBar.background": "#7b2cbf",
|
|
47
|
+
"statusBar.foreground": "#ffffff",
|
|
48
|
+
"statusBarItem.hoverBackground": "#9d4edd",
|
|
49
|
+
"activityBar.background": "#7b2cbf",
|
|
50
|
+
"activityBar.foreground": "#ffffff",
|
|
51
|
+
"activityBar.inactiveForeground": "#c9c9c9",
|
|
52
|
+
"titleBar.activeBackground": "#7b2cbf",
|
|
53
|
+
"titleBar.activeForeground": "#ffffff",
|
|
54
|
+
"titleBar.inactiveBackground": "#6a24a8",
|
|
55
|
+
"titleBar.inactiveForeground": "#c9c9c9"
|
|
56
|
+
}
|
|
57
|
+
}' "${WORKSPACE_FILE}.backup" > "$WORKSPACE_FILE"
|
|
58
|
+
|
|
59
|
+
rm "${WORKSPACE_FILE}.backup"
|
|
60
|
+
echo "✅ Updated using jq"
|
|
61
|
+
else
|
|
62
|
+
echo "⚠️ jq not found - manual update required"
|
|
63
|
+
echo "Please add the following to $WORKSPACE_FILE:"
|
|
64
|
+
echo ""
|
|
65
|
+
cat <<'EOF'
|
|
66
|
+
{
|
|
67
|
+
"workbench.colorCustomizations": {
|
|
68
|
+
"statusBar.background": "#7b2cbf",
|
|
69
|
+
"statusBar.foreground": "#ffffff",
|
|
70
|
+
"statusBarItem.hoverBackground": "#9d4edd",
|
|
71
|
+
"activityBar.background": "#7b2cbf",
|
|
72
|
+
"activityBar.foreground": "#ffffff",
|
|
73
|
+
"activityBar.inactiveForeground": "#c9c9c9",
|
|
74
|
+
"titleBar.activeBackground": "#7b2cbf",
|
|
75
|
+
"titleBar.activeForeground": "#ffffff",
|
|
76
|
+
"titleBar.inactiveBackground": "#6a24a8",
|
|
77
|
+
"titleBar.inactiveForeground": "#c9c9c9"
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
EOF
|
|
81
|
+
fi
|
|
82
|
+
fi
|
|
83
|
+
|
|
84
|
+
echo ""
|
|
85
|
+
echo "✅ Workspace colors set to purple!"
|
|
86
|
+
echo "📁 Settings file: $WORKSPACE_FILE"
|
|
87
|
+
echo ""
|
|
88
|
+
echo "Restart VS Code or reload the window for changes to take effect."
|
package/fixcolors
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
#
|
|
3
|
+
# fixcolors - Apply vibrant purple color scheme to AgentVibes VS Code workspace
|
|
4
|
+
# Usage: ./fixcolors
|
|
5
|
+
|
|
6
|
+
set -e
|
|
7
|
+
|
|
8
|
+
PURPLE_ACTIVE="#7b2cbf"
|
|
9
|
+
PURPLE_INACTIVE="#5a189a"
|
|
10
|
+
PURPLE_DEBUG="#9d4edd"
|
|
11
|
+
WHITE="#ffffff"
|
|
12
|
+
LIGHT_GRAY="#e0e0e0"
|
|
13
|
+
|
|
14
|
+
echo "🎨 Applying vibrant purple color scheme to AgentVibes workspace..."
|
|
15
|
+
echo ""
|
|
16
|
+
|
|
17
|
+
# Function to update JSON files with purple colors
|
|
18
|
+
update_colors() {
|
|
19
|
+
local file="$1"
|
|
20
|
+
local temp_file="${file}.tmp"
|
|
21
|
+
|
|
22
|
+
if [[ ! -f "$file" ]]; then
|
|
23
|
+
echo "⚠️ File not found: $file"
|
|
24
|
+
return 1
|
|
25
|
+
fi
|
|
26
|
+
|
|
27
|
+
echo "📝 Updating: $file"
|
|
28
|
+
|
|
29
|
+
# Use Python to safely update JSON
|
|
30
|
+
python3 << EOF
|
|
31
|
+
import json
|
|
32
|
+
import sys
|
|
33
|
+
|
|
34
|
+
try:
|
|
35
|
+
with open('$file', 'r') as f:
|
|
36
|
+
data = json.load(f)
|
|
37
|
+
|
|
38
|
+
# Ensure settings exists
|
|
39
|
+
if 'settings' in data:
|
|
40
|
+
settings = data['settings']
|
|
41
|
+
else:
|
|
42
|
+
settings = data
|
|
43
|
+
|
|
44
|
+
# Ensure workbench.colorCustomizations exists
|
|
45
|
+
if 'workbench.colorCustomizations' not in settings:
|
|
46
|
+
settings['workbench.colorCustomizations'] = {}
|
|
47
|
+
|
|
48
|
+
colors = settings['workbench.colorCustomizations']
|
|
49
|
+
|
|
50
|
+
# Apply purple theme
|
|
51
|
+
colors['titleBar.activeBackground'] = '$PURPLE_ACTIVE'
|
|
52
|
+
colors['titleBar.activeForeground'] = '$WHITE'
|
|
53
|
+
colors['titleBar.inactiveBackground'] = '$PURPLE_INACTIVE'
|
|
54
|
+
colors['titleBar.inactiveForeground'] = '$LIGHT_GRAY'
|
|
55
|
+
colors['statusBar.background'] = '$PURPLE_ACTIVE'
|
|
56
|
+
colors['statusBar.foreground'] = '$WHITE'
|
|
57
|
+
colors['statusBar.noFolderBackground'] = '$PURPLE_INACTIVE'
|
|
58
|
+
colors['statusBar.debuggingBackground'] = '$PURPLE_DEBUG'
|
|
59
|
+
|
|
60
|
+
# Write back
|
|
61
|
+
with open('$temp_file', 'w') as f:
|
|
62
|
+
json.dump(data, f, indent=2)
|
|
63
|
+
|
|
64
|
+
print(" ✓ Colors updated")
|
|
65
|
+
|
|
66
|
+
except Exception as e:
|
|
67
|
+
print(f" ✗ Error: {e}", file=sys.stderr)
|
|
68
|
+
sys.exit(1)
|
|
69
|
+
EOF
|
|
70
|
+
|
|
71
|
+
if [[ $? -eq 0 ]]; then
|
|
72
|
+
mv "$temp_file" "$file"
|
|
73
|
+
echo " ✓ File saved"
|
|
74
|
+
else
|
|
75
|
+
rm -f "$temp_file"
|
|
76
|
+
echo " ✗ Failed to update"
|
|
77
|
+
return 1
|
|
78
|
+
fi
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
# Update AgentVibes workspace
|
|
82
|
+
echo "🔧 AgentVibes workspace:"
|
|
83
|
+
update_colors "/home/fire/claude/AgentVibes/AgentVibes.code-workspace"
|
|
84
|
+
echo ""
|
|
85
|
+
|
|
86
|
+
echo "✅ All done! Reload VS Code window to see the purple theme."
|
|
87
|
+
echo ""
|
|
88
|
+
echo "💡 To reload: Press Ctrl+Shift+P → 'Developer: Reload Window'"
|