agentvibes 2.9.5 → 2.9.7
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/config/README-personality-defaults.md +162 -0
- package/.claude/config/agentvibes.json +1 -0
- package/.claude/config/bmad-voices-enabled.flag +0 -0
- package/.claude/config/bmad-voices.md +68 -0
- package/.claude/config/personality-voice-defaults.default.json +21 -0
- package/.claude/github-star-reminder.txt +1 -1
- package/.test-bmad-config +1 -1
- package/BMAD_PR_TESTING_INSTRUCTIONS.md +5 -5
- package/package.json +1 -1
- package/src/installer.js +72 -0
- package/test-bmad-pr.sh +21 -32
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# Personality Voice Defaults
|
|
2
|
+
|
|
3
|
+
## What is this?
|
|
4
|
+
|
|
5
|
+
This configuration file (`personality-voice-defaults.json`) maps each AgentVibes personality to a specific Piper TTS voice that sounds best for that character.
|
|
6
|
+
|
|
7
|
+
## How it works for new users
|
|
8
|
+
|
|
9
|
+
When someone installs AgentVibes with Piper TTS:
|
|
10
|
+
|
|
11
|
+
### 1. Installation Process
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# User installs Piper
|
|
15
|
+
.claude/hooks/piper-installer.sh
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
**What happens:**
|
|
19
|
+
- Piper TTS binary gets installed via `pipx`
|
|
20
|
+
- User is asked: "Download voice models now?"
|
|
21
|
+
- If yes, runs `piper-download-voices.sh` which downloads:
|
|
22
|
+
- **16Speakers** (~25MB) - Multi-voice model with 16 speakers
|
|
23
|
+
- **en_GB-alan-medium** (~25MB) - British male voice
|
|
24
|
+
- **en_GB-semaine-medium** (~25MB) - British female voice
|
|
25
|
+
- Plus a few other standard voices
|
|
26
|
+
- Default personality mappings are installed automatically
|
|
27
|
+
|
|
28
|
+
### 2. What gets downloaded
|
|
29
|
+
|
|
30
|
+
**Required voices for personality defaults:**
|
|
31
|
+
- ✅ **16Speakers** (1 file) - Provides 16 different speakers:
|
|
32
|
+
- #0: Cori Samuel (female) - Used for: flirty, dramatic, dry_humor, sassy
|
|
33
|
+
- #2: Kristin Hughes (female) - Used for: poetic, sarcastic
|
|
34
|
+
- #4: Mike Pelton (male) - Used for: grandpa
|
|
35
|
+
- #8: Rose Ibex (female) - Used for: moody
|
|
36
|
+
- #13: Jennifer Dorr (female) - Used for: millennial
|
|
37
|
+
- #14: Emily Cripps (female) - Used for: zen
|
|
38
|
+
- #15: Martin Clifton (male) - Used for: pirate
|
|
39
|
+
|
|
40
|
+
- ✅ **en_GB-alan-medium** - British male voice
|
|
41
|
+
- Used for: angry, professional, surfer_dude
|
|
42
|
+
|
|
43
|
+
- ✅ **en_GB-semaine-medium** - British female voice
|
|
44
|
+
- Used for: funny
|
|
45
|
+
|
|
46
|
+
**Total download size: ~75MB** (3 voice models)
|
|
47
|
+
|
|
48
|
+
### 3. First time using a personality
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
# User switches personality
|
|
52
|
+
/agent-vibes:personality flirty
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**What happens:**
|
|
56
|
+
1. AgentVibes reads `personality-voice-defaults.json`
|
|
57
|
+
2. Finds that "flirty" → "16Speakers#0" (Cori Samuel)
|
|
58
|
+
3. Checks if 16Speakers is downloaded
|
|
59
|
+
4. **If not downloaded:**
|
|
60
|
+
- Prompts: "Voice model not found: 16Speakers. Download? [y/N]"
|
|
61
|
+
- User says yes → Downloads automatically from HuggingFace
|
|
62
|
+
- Only happens once per voice model
|
|
63
|
+
5. **If already downloaded:**
|
|
64
|
+
- Switches to the voice immediately
|
|
65
|
+
- Plays personality-appropriate TTS
|
|
66
|
+
|
|
67
|
+
### 4. Graceful fallbacks
|
|
68
|
+
|
|
69
|
+
If a user:
|
|
70
|
+
- Skips voice downloads during install → On-demand download when needed
|
|
71
|
+
- Deletes the defaults file → Falls back to basic `en_US-lessac-medium`
|
|
72
|
+
- Uses a personality without a mapping → Uses default voice
|
|
73
|
+
|
|
74
|
+
## For power users
|
|
75
|
+
|
|
76
|
+
### Customizing defaults
|
|
77
|
+
|
|
78
|
+
Edit `.claude/personality-voice-defaults.json`:
|
|
79
|
+
|
|
80
|
+
```json
|
|
81
|
+
{
|
|
82
|
+
"mappings": {
|
|
83
|
+
"flirty": {
|
|
84
|
+
"voice": "16Speakers#0",
|
|
85
|
+
"rating": 10,
|
|
86
|
+
"display_name": "Cori Samuel"
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Change the `voice` field to any Piper voice name.
|
|
93
|
+
|
|
94
|
+
### Using the voice tester
|
|
95
|
+
|
|
96
|
+
1. Run the voice tester (in `voice-tester/` folder)
|
|
97
|
+
2. Rate voices for each personality
|
|
98
|
+
3. Export ratings as JSON
|
|
99
|
+
4. Import with: `./import-voice-ratings.sh my-ratings.json`
|
|
100
|
+
|
|
101
|
+
### Available voices
|
|
102
|
+
|
|
103
|
+
List all Piper voices: https://huggingface.co/rhasspy/piper-voices
|
|
104
|
+
|
|
105
|
+
Any voice can be used - AgentVibes will download it on first use.
|
|
106
|
+
|
|
107
|
+
## FAQ
|
|
108
|
+
|
|
109
|
+
**Q: Do new users need to download all voices upfront?**
|
|
110
|
+
A: No! Only 3 files (~75MB total) are recommended. Others download on-demand.
|
|
111
|
+
|
|
112
|
+
**Q: What if a user doesn't download any voices?**
|
|
113
|
+
A: First personality switch will prompt to download the needed voice.
|
|
114
|
+
|
|
115
|
+
**Q: Can users change the defaults?**
|
|
116
|
+
A: Yes! Edit the JSON file or use the voice tester to rate and export new preferences.
|
|
117
|
+
|
|
118
|
+
**Q: What if 16Speakers isn't available?**
|
|
119
|
+
A: It's hosted on AgentVibes HuggingFace and included in the download script.
|
|
120
|
+
|
|
121
|
+
**Q: What happens on slow connections?**
|
|
122
|
+
A: Each voice is ~25MB. Downloads are one-time only and optional.
|
|
123
|
+
|
|
124
|
+
## Architecture
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
Installation Flow:
|
|
128
|
+
1. User runs piper-installer.sh
|
|
129
|
+
↓
|
|
130
|
+
2. Piper binary installed via pipx
|
|
131
|
+
↓
|
|
132
|
+
3. Ask: "Download voices?" → Yes
|
|
133
|
+
↓
|
|
134
|
+
4. piper-download-voices.sh runs
|
|
135
|
+
- Downloads 16Speakers (custom, HuggingFace)
|
|
136
|
+
- Downloads en_GB-alan-medium (official Piper)
|
|
137
|
+
- Downloads en_GB-semaine-medium (official Piper)
|
|
138
|
+
- Downloads other optional voices
|
|
139
|
+
↓
|
|
140
|
+
5. install-personality-defaults.sh runs
|
|
141
|
+
- Copies personality-voice-defaults.json to user config
|
|
142
|
+
↓
|
|
143
|
+
6. Ready! Personalities now auto-select best voices
|
|
144
|
+
|
|
145
|
+
Runtime Flow:
|
|
146
|
+
User: /agent-vibes:personality flirty
|
|
147
|
+
↓
|
|
148
|
+
personality-manager.sh checks:
|
|
149
|
+
1. User defaults (.claude/personality-voice-defaults.json)
|
|
150
|
+
2. Personality file (piper_voice: field)
|
|
151
|
+
3. Global default (en_US-lessac-medium)
|
|
152
|
+
↓
|
|
153
|
+
Found: 16Speakers#0
|
|
154
|
+
↓
|
|
155
|
+
Check if downloaded → Yes
|
|
156
|
+
↓
|
|
157
|
+
Switch to voice & play TTS!
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Credits
|
|
161
|
+
|
|
162
|
+
Voice selections curated by Paul Preibisch based on extensive testing with the AgentVibes voice tester (16 personalities × 19 voices).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"pretext": "AgentVibes"}
|
|
File without changes
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
plugin: bmad-voices
|
|
3
|
+
version: 2.0.0
|
|
4
|
+
enabled: true
|
|
5
|
+
description: Provider-aware voice mappings for BMAD agents
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# BMAD Voice Plugin
|
|
9
|
+
|
|
10
|
+
This plugin automatically assigns voices to BMAD agents based on their role and active TTS provider.
|
|
11
|
+
|
|
12
|
+
## Agent Voice Mappings (Provider-Aware)
|
|
13
|
+
|
|
14
|
+
| Agent ID | Agent Name | Intro | ElevenLabs Voice | Piper Voice | Personality |
|
|
15
|
+
|----------|------------|-------|------------------|-------------|-------------|
|
|
16
|
+
| pm | John (Product Manager) | John, Product Manager here | Matthew Schmitz | en_US-ryan-high | professional |
|
|
17
|
+
| dev | Amelia (Developer) | Amelia, Developer here | Aria | en_US-amy-medium | normal |
|
|
18
|
+
| analyst | Mary (Business Analyst) | Mary, Business Analyst here | Jessica Anne Bogart | kristin | normal |
|
|
19
|
+
| architect | Winston (Architect) | Winston, Architect here | Michael | en_GB-alan-medium | normal |
|
|
20
|
+
| sm | Bob (Scrum Master) | Bob, Scrum Master here | Matthew Schmitz | en_US-joe-medium | professional |
|
|
21
|
+
| tea | Murat (Test Architect) | Murat, Test Architect here | Michael | en_US-arctic-medium | normal |
|
|
22
|
+
| tech-writer | Paige (Technical Writer) | Paige, Technical Writer here | Aria | jenny | normal |
|
|
23
|
+
| ux-designer | Sally (UX Designer) | Sally, UX Designer here | Jessica Anne Bogart | en_US-lessac-medium | normal |
|
|
24
|
+
| frame-expert | Saif (Visual Designer) | Saif, Visual Designer here | Matthew Schmitz | en_GB-alan-medium | normal |
|
|
25
|
+
| bmad-master | BMad Master | BMad Master here | Michael | en_US-danny-low | zen |
|
|
26
|
+
|
|
27
|
+
## How It Works
|
|
28
|
+
|
|
29
|
+
The voice manager automatically selects the appropriate voice based on your active TTS provider:
|
|
30
|
+
- **ElevenLabs active**: Uses voices from the "ElevenLabs Voice" column
|
|
31
|
+
- **Piper active**: Uses voices from the "Piper Voice" column
|
|
32
|
+
|
|
33
|
+
This ensures BMAD agents work seamlessly regardless of which provider you're using.
|
|
34
|
+
|
|
35
|
+
### Supports Both Display Names and Agent IDs
|
|
36
|
+
|
|
37
|
+
The `bmad-speak.sh` script accepts both formats:
|
|
38
|
+
|
|
39
|
+
**Party Mode** (multiple agents, uses display names):
|
|
40
|
+
```bash
|
|
41
|
+
.claude/hooks/bmad-speak.sh "Winston" "I recommend microservices for scalability"
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**Individual Agents** (single agent sessions, uses agent IDs):
|
|
45
|
+
```bash
|
|
46
|
+
.claude/hooks/bmad-speak.sh "architect" "I recommend microservices for scalability"
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Both formats map to the same voice configuration based on the agent ID in the table above. This allows BMAD to use customizable display names while maintaining stable voice mappings.
|
|
50
|
+
|
|
51
|
+
## How to Edit
|
|
52
|
+
|
|
53
|
+
Simply edit the table above to change voice mappings. The format is:
|
|
54
|
+
- **Agent ID**: Must match BMAD's `agent.id` field (pm, dev, qa, etc.)
|
|
55
|
+
- **Agent Name**: Display name (for reference only)
|
|
56
|
+
- **Intro**: Text spoken before agent's message (e.g., "John, Product Manager here"). Leave empty to disable.
|
|
57
|
+
- **ElevenLabs Voice**: Voice name for ElevenLabs provider
|
|
58
|
+
- **Piper Voice**: Voice model name for Piper provider
|
|
59
|
+
- **Personality**: Optional personality to apply (or "normal" for none)
|
|
60
|
+
|
|
61
|
+
## Commands
|
|
62
|
+
|
|
63
|
+
- `/agent-vibes:bmad enable` - Enable BMAD voice plugin
|
|
64
|
+
- `/agent-vibes:bmad disable` - Disable BMAD voice plugin
|
|
65
|
+
- `/agent-vibes:bmad status` - Show plugin status
|
|
66
|
+
- `/agent-vibes:bmad edit` - Open this file for editing
|
|
67
|
+
- `/agent-vibes:bmad list` - List all agent voice mappings
|
|
68
|
+
- `/agent-vibes:bmad set <agent-id> <elevenlabs-voice> <piper-voice> [personality]` - Set voices for specific agent
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1.0",
|
|
3
|
+
"description": "Default Piper voice assignments for each personality",
|
|
4
|
+
"mappings": {
|
|
5
|
+
"angry": {"voice": "en_GB-alan-medium", "rating": 10, "display_name": "English GB - Alan"},
|
|
6
|
+
"dramatic": {"voice": "16Speakers#0", "rating": 10, "display_name": "Cori Samuel"},
|
|
7
|
+
"dry_humor": {"voice": "16Speakers#0", "rating": 10, "display_name": "Cori Samuel"},
|
|
8
|
+
"flirty": {"voice": "16Speakers#0", "rating": 10, "display_name": "Cori Samuel"},
|
|
9
|
+
"funny": {"voice": "en_GB-semaine-medium", "rating": 10, "display_name": "English GB - Semaine"},
|
|
10
|
+
"grandpa": {"voice": "16Speakers#4", "rating": 10, "display_name": "Mike Pelton"},
|
|
11
|
+
"millennial": {"voice": "16Speakers#13", "rating": 10, "display_name": "Jennifer Dorr"},
|
|
12
|
+
"moody": {"voice": "16Speakers#8", "rating": 10, "display_name": "Rose Ibex"},
|
|
13
|
+
"pirate": {"voice": "16Speakers#15", "rating": 10, "display_name": "Martin Clifton"},
|
|
14
|
+
"poetic": {"voice": "16Speakers#2", "rating": 10, "display_name": "Kristin Hughes"},
|
|
15
|
+
"professional": {"voice": "en_GB-alan-medium", "rating": 10, "display_name": "English GB - Alan"},
|
|
16
|
+
"sarcastic": {"voice": "16Speakers#2", "rating": 10, "display_name": "Kristin Hughes"},
|
|
17
|
+
"sassy": {"voice": "16Speakers#0", "rating": 10, "display_name": "Cori Samuel"},
|
|
18
|
+
"surfer_dude": {"voice": "en_GB-alan-medium", "rating": 10, "display_name": "English GB - Alan"},
|
|
19
|
+
"zen": {"voice": "16Speakers#14", "rating": 10, "display_name": "Emily Cripps"}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
20251120
|
package/.test-bmad-config
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
SAVED_MODE="1"
|
|
2
|
-
SAVED_TEST_DIR="/home/fire/claude/tests/
|
|
2
|
+
SAVED_TEST_DIR="/home/fire/claude/tests/test48"
|
|
@@ -13,7 +13,7 @@ We've made testing super simple with a single command:
|
|
|
13
13
|
### One-Line Install
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
|
-
npx agentvibes@latest test-bmad-pr
|
|
16
|
+
npx -p agentvibes@latest test-bmad-pr
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
That's it! This command will automatically:
|
|
@@ -26,12 +26,12 @@ That's it! This command will automatically:
|
|
|
26
26
|
### Testing a Different PR
|
|
27
27
|
|
|
28
28
|
```bash
|
|
29
|
-
npx agentvibes@latest test-bmad-pr <PR_NUMBER>
|
|
29
|
+
npx -p agentvibes@latest test-bmad-pr <PR_NUMBER>
|
|
30
30
|
```
|
|
31
31
|
|
|
32
32
|
For example:
|
|
33
33
|
```bash
|
|
34
|
-
npx agentvibes@latest test-bmad-pr 935
|
|
34
|
+
npx -p agentvibes@latest test-bmad-pr 935
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
### Alternative: Manual Download
|
|
@@ -74,8 +74,8 @@ Once setup is complete, the script will tell you exactly how to test party mode:
|
|
|
74
74
|
# Navigate to the test project
|
|
75
75
|
cd ~/bmad-pr-test-*/bmad-project
|
|
76
76
|
|
|
77
|
-
# Start Claude
|
|
78
|
-
claude
|
|
77
|
+
# Start Claude
|
|
78
|
+
claude
|
|
79
79
|
|
|
80
80
|
# Test party mode!
|
|
81
81
|
/bmad:core:workflows:party-mode
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "agentvibes",
|
|
4
|
-
"version": "2.9.
|
|
4
|
+
"version": "2.9.7",
|
|
5
5
|
"description": "Now your AI Agents can finally talk back! Professional TTS voice for Claude Code and Claude Desktop (via MCP) with multi-provider support.",
|
|
6
6
|
"homepage": "https://agentvibes.org",
|
|
7
7
|
"keywords": [
|
package/src/installer.js
CHANGED
|
@@ -580,6 +580,33 @@ async function copyPersonalityFiles(targetDir, spinner) {
|
|
|
580
580
|
return personalityMdFiles.length;
|
|
581
581
|
}
|
|
582
582
|
|
|
583
|
+
/**
|
|
584
|
+
* Copy output style files to target directory
|
|
585
|
+
* @param {string} targetDir - Target installation directory
|
|
586
|
+
* @param {Object} spinner - Ora spinner instance
|
|
587
|
+
* @returns {Promise<number>} Number of files copied
|
|
588
|
+
*/
|
|
589
|
+
async function copyOutputStyles(targetDir, spinner) {
|
|
590
|
+
spinner.start('Installing output styles...');
|
|
591
|
+
const srcOutputStylesDir = path.join(__dirname, '..', 'templates', 'output-styles');
|
|
592
|
+
const outputStylesDir = path.join(targetDir, '.claude', 'output-styles');
|
|
593
|
+
|
|
594
|
+
await fs.mkdir(outputStylesDir, { recursive: true });
|
|
595
|
+
|
|
596
|
+
const outputStyleFiles = await fs.readdir(srcOutputStylesDir);
|
|
597
|
+
console.log(chalk.cyan(`📝 Installing ${outputStyleFiles.length} output styles:`));
|
|
598
|
+
|
|
599
|
+
for (const file of outputStyleFiles) {
|
|
600
|
+
const srcPath = path.join(srcOutputStylesDir, file);
|
|
601
|
+
const destPath = path.join(outputStylesDir, file);
|
|
602
|
+
await fs.copyFile(srcPath, destPath);
|
|
603
|
+
console.log(chalk.gray(` ✓ ${file}`));
|
|
604
|
+
}
|
|
605
|
+
|
|
606
|
+
spinner.succeed(chalk.green('Installed output styles!\n'));
|
|
607
|
+
return outputStyleFiles.length;
|
|
608
|
+
}
|
|
609
|
+
|
|
583
610
|
/**
|
|
584
611
|
* Copy plugin files to target directory
|
|
585
612
|
* @param {string} targetDir - Target installation directory
|
|
@@ -615,6 +642,39 @@ async function copyPluginFiles(targetDir, spinner) {
|
|
|
615
642
|
return pluginFiles.length;
|
|
616
643
|
}
|
|
617
644
|
|
|
645
|
+
/**
|
|
646
|
+
* Copy BMAD config files to target directory
|
|
647
|
+
* @param {string} targetDir - Target installation directory
|
|
648
|
+
* @param {Object} spinner - Ora spinner instance
|
|
649
|
+
* @returns {Promise<number>} Number of files copied
|
|
650
|
+
*/
|
|
651
|
+
async function copyBmadConfigFiles(targetDir, spinner) {
|
|
652
|
+
spinner.start('Installing BMAD config files...');
|
|
653
|
+
const srcConfigDir = path.join(__dirname, '..', '.claude', 'config');
|
|
654
|
+
const destConfigDir = path.join(targetDir, '.claude', 'config');
|
|
655
|
+
|
|
656
|
+
await fs.mkdir(destConfigDir, { recursive: true });
|
|
657
|
+
|
|
658
|
+
let fileCount = 0;
|
|
659
|
+
|
|
660
|
+
// Copy bmad-voices.md if it exists
|
|
661
|
+
const bmadVoicesFile = 'bmad-voices.md';
|
|
662
|
+
const srcPath = path.join(srcConfigDir, bmadVoicesFile);
|
|
663
|
+
|
|
664
|
+
try {
|
|
665
|
+
await fs.access(srcPath);
|
|
666
|
+
const destPath = path.join(destConfigDir, bmadVoicesFile);
|
|
667
|
+
await fs.copyFile(srcPath, destPath);
|
|
668
|
+
console.log(chalk.gray(` ✓ ${bmadVoicesFile}`));
|
|
669
|
+
fileCount++;
|
|
670
|
+
spinner.succeed(chalk.green('Installed BMAD config files!\n'));
|
|
671
|
+
} catch (error) {
|
|
672
|
+
spinner.info(chalk.yellow('No BMAD config files found (optional)\n'));
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
return fileCount;
|
|
676
|
+
}
|
|
677
|
+
|
|
618
678
|
/**
|
|
619
679
|
* Configure SessionStart hook in settings.json
|
|
620
680
|
* @param {string} targetDir - Target installation directory
|
|
@@ -1091,6 +1151,12 @@ async function updateAgentVibes(targetDir, options) {
|
|
|
1091
1151
|
console.log(chalk.green(`✓ Updated ${pluginFileCount} BMAD plugin files`));
|
|
1092
1152
|
}
|
|
1093
1153
|
|
|
1154
|
+
// Update BMAD config files
|
|
1155
|
+
const bmadConfigFileCount = await copyBmadConfigFiles(targetDir, { start: () => {}, succeed: () => {}, info: () => {}, fail: () => {} });
|
|
1156
|
+
if (bmadConfigFileCount > 0) {
|
|
1157
|
+
console.log(chalk.green(`✓ Updated ${bmadConfigFileCount} BMAD config files`));
|
|
1158
|
+
}
|
|
1159
|
+
|
|
1094
1160
|
// Update settings.json
|
|
1095
1161
|
spinner.text = 'Updating AgentVibes hook configuration...';
|
|
1096
1162
|
await configureSessionStartHook(targetDir, { start: () => {}, succeed: () => {}, info: () => {}, fail: () => {} });
|
|
@@ -1247,7 +1313,9 @@ async function install(options = {}) {
|
|
|
1247
1313
|
const commandFileCount = await copyCommandFiles(targetDir, spinner);
|
|
1248
1314
|
const hookFileCount = await copyHookFiles(targetDir, spinner);
|
|
1249
1315
|
const personalityFileCount = await copyPersonalityFiles(targetDir, spinner);
|
|
1316
|
+
const outputStyleCount = await copyOutputStyles(targetDir, spinner);
|
|
1250
1317
|
const pluginFileCount = await copyPluginFiles(targetDir, spinner);
|
|
1318
|
+
const bmadConfigFileCount = await copyBmadConfigFiles(targetDir, spinner);
|
|
1251
1319
|
|
|
1252
1320
|
// Configure hooks and manifests
|
|
1253
1321
|
await configureSessionStartHook(targetDir, spinner);
|
|
@@ -1275,9 +1343,13 @@ async function install(options = {}) {
|
|
|
1275
1343
|
console.log(chalk.white(` • ${commandFileCount} slash commands installed`));
|
|
1276
1344
|
console.log(chalk.white(` • ${hookFileCount} TTS scripts installed`));
|
|
1277
1345
|
console.log(chalk.white(` • ${personalityFileCount} personality templates installed`));
|
|
1346
|
+
console.log(chalk.white(` • ${outputStyleCount} output styles installed`));
|
|
1278
1347
|
if (pluginFileCount > 0) {
|
|
1279
1348
|
console.log(chalk.white(` • ${pluginFileCount} BMAD plugin files installed`));
|
|
1280
1349
|
}
|
|
1350
|
+
if (bmadConfigFileCount > 0) {
|
|
1351
|
+
console.log(chalk.white(` • ${bmadConfigFileCount} BMAD config files installed`));
|
|
1352
|
+
}
|
|
1281
1353
|
console.log(chalk.white(` • Voice manager ready`));
|
|
1282
1354
|
|
|
1283
1355
|
if (selectedProvider === 'elevenlabs') {
|
package/test-bmad-pr.sh
CHANGED
|
@@ -50,7 +50,7 @@ echo ""
|
|
|
50
50
|
|
|
51
51
|
read -p "Ready to continue? [Y/n]: " -n 1 -r
|
|
52
52
|
echo
|
|
53
|
-
if [[ ! $REPLY =~ ^[
|
|
53
|
+
if [[ ! $REPLY =~ ^[Yy1]$ ]] && [[ -n $REPLY ]]; then
|
|
54
54
|
echo "❌ Setup cancelled"
|
|
55
55
|
exit 0
|
|
56
56
|
fi
|
|
@@ -187,7 +187,7 @@ echo ""
|
|
|
187
187
|
read -p "Proceed with setup? [Y/n]: " -n 1 -r
|
|
188
188
|
echo
|
|
189
189
|
echo ""
|
|
190
|
-
if [[ ! $REPLY =~ ^[
|
|
190
|
+
if [[ ! $REPLY =~ ^[Yy1]$ ]] && [[ -n $REPLY ]]; then
|
|
191
191
|
echo "❌ Setup cancelled"
|
|
192
192
|
exit 0
|
|
193
193
|
fi
|
|
@@ -197,7 +197,7 @@ if [[ -d "$TEST_DIR" ]]; then
|
|
|
197
197
|
echo "⚠️ Test directory already exists: $TEST_DIR"
|
|
198
198
|
read -p "Delete and recreate? [Y/n]: " -n 1 -r
|
|
199
199
|
echo
|
|
200
|
-
if [[ $REPLY =~ ^[
|
|
200
|
+
if [[ $REPLY =~ ^[Yy1]$ ]] || [[ -z $REPLY ]]; then
|
|
201
201
|
rm -rf "$TEST_DIR"
|
|
202
202
|
echo -e "${GREEN}✓ Deleted old test directory${NC}"
|
|
203
203
|
else
|
|
@@ -216,7 +216,7 @@ echo ""
|
|
|
216
216
|
|
|
217
217
|
# Step 1: Clone repository
|
|
218
218
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
219
|
-
echo "📥 Step 1/
|
|
219
|
+
echo "📥 Step 1/6: Cloning repository"
|
|
220
220
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
221
221
|
echo ""
|
|
222
222
|
mkdir -p "$TEST_DIR"
|
|
@@ -229,7 +229,7 @@ echo ""
|
|
|
229
229
|
|
|
230
230
|
# Step 2: Checkout branch (different logic for PR vs fork)
|
|
231
231
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
232
|
-
echo "🔀 Step 2/
|
|
232
|
+
echo "🔀 Step 2/6: Checking out branch"
|
|
233
233
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
234
234
|
echo ""
|
|
235
235
|
|
|
@@ -251,7 +251,7 @@ echo ""
|
|
|
251
251
|
|
|
252
252
|
# Step 3: Install BMAD CLI
|
|
253
253
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
254
|
-
echo "📦 Step 3/
|
|
254
|
+
echo "📦 Step 3/6: Installing BMAD CLI"
|
|
255
255
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
256
256
|
echo ""
|
|
257
257
|
cd tools/cli
|
|
@@ -263,7 +263,7 @@ echo ""
|
|
|
263
263
|
|
|
264
264
|
# Step 4: Create test project
|
|
265
265
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
266
|
-
echo "📁 Step 4/
|
|
266
|
+
echo "📁 Step 4/6: Creating test project"
|
|
267
267
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
268
268
|
echo ""
|
|
269
269
|
cd "$TEST_DIR"
|
|
@@ -273,41 +273,30 @@ echo -e "${GREEN}✓ Test project directory created${NC}"
|
|
|
273
273
|
echo " Location: $TEST_DIR/bmad-project"
|
|
274
274
|
echo ""
|
|
275
275
|
|
|
276
|
-
# Step 5: Run BMAD installer
|
|
276
|
+
# Step 5: Run BMAD installer (includes AgentVibes setup)
|
|
277
277
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
278
|
-
echo "⚙️ Step 5/
|
|
278
|
+
echo "⚙️ Step 5/6: Running BMAD installer with AgentVibes"
|
|
279
279
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
280
280
|
echo ""
|
|
281
|
-
echo -e "${YELLOW}Important:
|
|
282
|
-
echo -e "
|
|
283
|
-
echo -e "
|
|
281
|
+
echo -e "${YELLOW}Important: The BMAD installer will prompt for:${NC}"
|
|
282
|
+
echo -e " 1. ${CYAN}Enable TTS for agents?${NC} → ${GREEN}Yes${NC}"
|
|
283
|
+
echo -e " 2. ${CYAN}Assign unique voices for party mode?${NC} → ${GREEN}Yes${NC}"
|
|
284
284
|
echo ""
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
echo ""
|
|
289
|
-
echo -e "${GREEN}✓ BMAD installation complete${NC}"
|
|
290
|
-
echo ""
|
|
291
|
-
|
|
292
|
-
# Step 6: Install AgentVibes
|
|
293
|
-
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
294
|
-
echo "🎙️ Step 6/7: Installing AgentVibes"
|
|
295
|
-
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
296
|
-
echo ""
|
|
297
|
-
echo -e "${YELLOW}Recommended: Choose Piper (free) for testing${NC}"
|
|
285
|
+
echo -e "${YELLOW}Then AgentVibes installer will start automatically.${NC}"
|
|
286
|
+
echo -e "${YELLOW}Recommended TTS settings:${NC}"
|
|
298
287
|
echo -e " • Provider: ${GREEN}Piper${NC} (free, local TTS)"
|
|
299
288
|
echo -e " • Download voices: ${GREEN}Yes${NC}"
|
|
300
289
|
echo ""
|
|
301
|
-
read -p "Press Enter to start
|
|
302
|
-
|
|
290
|
+
read -p "Press Enter to start BMAD installer..."
|
|
291
|
+
bmad install
|
|
303
292
|
|
|
304
293
|
echo ""
|
|
305
|
-
echo -e "${GREEN}✓ AgentVibes installation complete${NC}"
|
|
294
|
+
echo -e "${GREEN}✓ BMAD and AgentVibes installation complete${NC}"
|
|
306
295
|
echo ""
|
|
307
296
|
|
|
308
|
-
# Step
|
|
297
|
+
# Step 6: Verification
|
|
309
298
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
310
|
-
echo "✅ Step
|
|
299
|
+
echo "✅ Step 6/6: Verifying installation"
|
|
311
300
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
312
301
|
echo ""
|
|
313
302
|
|
|
@@ -371,8 +360,8 @@ echo ""
|
|
|
371
360
|
echo " 1. Navigate to test project:"
|
|
372
361
|
echo -e " ${GREEN}cd $TEST_DIR/bmad-project${NC}"
|
|
373
362
|
echo ""
|
|
374
|
-
echo " 2. Start Claude
|
|
375
|
-
echo -e " ${GREEN}claude
|
|
363
|
+
echo " 2. Start Claude session:"
|
|
364
|
+
echo -e " ${GREEN}claude${NC}"
|
|
376
365
|
echo ""
|
|
377
366
|
echo " 3. Test party mode:"
|
|
378
367
|
echo -e " ${GREEN}/bmad:core:workflows:party-mode${NC}"
|