agentvibes 2.9.4 → 2.9.6
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/.bmad/_cfg/agent-voice-map.csv +11 -0
- package/.bmad/core/workflows/party-mode/instructions.md +1 -2
- package/.claude/github-star-reminder.txt +1 -1
- package/.claude/hooks/piper-download-voices.sh +10 -4
- package/.claude/output-styles/agent-vibes.md +3 -3
- package/.claude/plugins/bmad-voices-enabled.flag +0 -0
- package/.test-bmad-config +2 -2
- package/BMAD_PR_TESTING_INSTRUCTIONS.md +107 -33
- package/README.md +3 -3
- package/RELEASE_NOTES.md +22 -0
- package/bin/test-bmad-pr +79 -0
- package/docs/installation-structure.md +0 -2
- package/package.json +3 -2
- package/src/installer.js +43 -0
- package/test-bmad-pr.sh +271 -87
- package/.claude/hooks/check-output-style.sh +0 -112
- package/templates/output-styles/agent-vibes.md +0 -203
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
agent_id,voice_name
|
|
2
|
+
pm,en_US-ryan-high
|
|
3
|
+
architect,en_US-danny-low
|
|
4
|
+
dev,en_US-hfc_female-medium
|
|
5
|
+
analyst,en_US-amy-medium
|
|
6
|
+
ux-designer,en_US-kristin-medium
|
|
7
|
+
tea,en_US-kusal-medium
|
|
8
|
+
sm,en_US-bryce-medium
|
|
9
|
+
tech-writer,en_US-kathleen-low
|
|
10
|
+
frame-expert,en_US-kusal-medium
|
|
11
|
+
bmad-master,en_US-libritts_r-high
|
|
@@ -25,8 +25,7 @@
|
|
|
25
25
|
</step>
|
|
26
26
|
|
|
27
27
|
<step n="2" goal="Initialize Party Mode">
|
|
28
|
-
<action>
|
|
29
|
-
<note>If using TTS for announcement, use PROJECT hook: .claude/hooks/play-tts.sh (NOT ~/.claude/hooks/)</note>
|
|
28
|
+
<action>Trigger TTS announcement using PROJECT hook: .claude/hooks/play-tts.sh "Party mode activated! All agents are here for a group discussion!"</action>
|
|
30
29
|
<action>List all participating agents with their merged information:</action>
|
|
31
30
|
<format>
|
|
32
31
|
🎉 PARTY MODE ACTIVATED! 🎉
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
20251120
|
|
@@ -51,10 +51,16 @@ fi
|
|
|
51
51
|
|
|
52
52
|
# Common voice models to download
|
|
53
53
|
COMMON_VOICES=(
|
|
54
|
-
"en_US-
|
|
55
|
-
"en_US-amy-medium" # Warm female (13MB)
|
|
56
|
-
"en_US-
|
|
57
|
-
"en_US-
|
|
54
|
+
"en_US-ryan-high" # Default, expressive male (30MB) - BMAD: John (pm)
|
|
55
|
+
"en_US-amy-medium" # Warm female (13MB) - BMAD: Mary (analyst)
|
|
56
|
+
"en_US-hfc_female-medium" # Professional female (13MB) - BMAD: Amelia (dev)
|
|
57
|
+
"en_US-lessac-medium" # Clear female (13MB) - BMAD: Murat (tea) - NOTE: Female voice
|
|
58
|
+
"en_US-danny-low" # Calm male (13MB) - BMAD: Winston (architect)
|
|
59
|
+
"en_US-bryce-medium" # Professional male (13MB) - BMAD: Bob (sm)
|
|
60
|
+
"en_US-kathleen-low" # Clear female (13MB) - BMAD: Paige (tech-writer)
|
|
61
|
+
"en_US-kusal-medium" # Male voice (13MB) - BMAD: Saif (frame-expert)
|
|
62
|
+
"en_US-kristin-medium" # Female voice (13MB) - BMAD: Sally (ux-designer)
|
|
63
|
+
"en_US-libritts_r-high" # Premium male (57MB) - BMAD: BMad Master
|
|
58
64
|
"en_US-libritts-high" # Premium quality (57MB)
|
|
59
65
|
"16Speakers" # Multi-speaker: 12 US + 4 UK voices (77MB) - REQUIRED for BMAD agents
|
|
60
66
|
)
|
|
@@ -133,8 +133,8 @@ You: "✅ That bug be walkin' the plank now, arr!"
|
|
|
133
133
|
When a BMAD agent is activated (e.g., `/BMad:agents:pm`), AgentVibes will automatically:
|
|
134
134
|
|
|
135
135
|
1. **Detect BMAD agent from command/context**
|
|
136
|
-
2. **Check if BMAD plugin is enabled** (`.claude/
|
|
137
|
-
3. **Look up voice mapping** from `.claude/
|
|
136
|
+
2. **Check if BMAD plugin is enabled** (`.claude/plugins/bmad-voices-enabled.flag`)
|
|
137
|
+
3. **Look up voice mapping** from `.claude/plugins/bmad-voices.md`
|
|
138
138
|
4. **Apply agent's assigned voice** for all TTS acknowledgments/completions
|
|
139
139
|
5. **Apply agent's personality** from the mapping (if specified)
|
|
140
140
|
|
|
@@ -153,7 +153,7 @@ fi
|
|
|
153
153
|
# Note: This detection happens automatically when BMAD agent activates
|
|
154
154
|
|
|
155
155
|
# If BMAD agent detected and plugin enabled, use mapped voice
|
|
156
|
-
if [[ -n "$BMAD_AGENT_ID" ]] && [[ -f ".claude/
|
|
156
|
+
if [[ -n "$BMAD_AGENT_ID" ]] && [[ -f ".claude/plugins/bmad-voices-enabled.flag" ]]; then
|
|
157
157
|
MAPPED_VOICE=$(.claude/hooks/bmad-voice-manager.sh get-voice "$BMAD_AGENT_ID")
|
|
158
158
|
MAPPED_PERSONALITY=$(.claude/hooks/bmad-voice-manager.sh get-personality "$BMAD_AGENT_ID")
|
|
159
159
|
|
|
File without changes
|
package/.test-bmad-config
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
SAVED_TEST_DIR="/home/fire/claude/tests/
|
|
1
|
+
SAVED_MODE="1"
|
|
2
|
+
SAVED_TEST_DIR="/home/fire/claude/tests/test47"
|
|
@@ -3,69 +3,143 @@
|
|
|
3
3
|
## Prerequisites
|
|
4
4
|
- Node.js and npm installed
|
|
5
5
|
- Git installed
|
|
6
|
-
-
|
|
6
|
+
- ~500MB free disk space
|
|
7
|
+
- 10-15 minutes for complete setup
|
|
7
8
|
|
|
8
|
-
##
|
|
9
|
+
## 🚀 Automated Testing (Easiest!)
|
|
10
|
+
|
|
11
|
+
We've made testing super simple with a single command:
|
|
12
|
+
|
|
13
|
+
### One-Line Install
|
|
9
14
|
|
|
10
|
-
### Step 1: Fork and Clone BMAD
|
|
11
15
|
```bash
|
|
12
|
-
|
|
13
|
-
git clone https://github.com/YOUR-USERNAME/BMAD-METHOD.git
|
|
14
|
-
cd BMAD-METHOD
|
|
16
|
+
npx -p agentvibes@latest test-bmad-pr
|
|
15
17
|
```
|
|
16
18
|
|
|
17
|
-
|
|
19
|
+
That's it! This command will automatically:
|
|
20
|
+
- Download the test script
|
|
21
|
+
- Clone BMAD with the PR
|
|
22
|
+
- Install everything you need
|
|
23
|
+
- Set up unique voices for each agent
|
|
24
|
+
- Verify the installation
|
|
25
|
+
|
|
26
|
+
### Testing a Different PR
|
|
27
|
+
|
|
18
28
|
```bash
|
|
19
|
-
|
|
20
|
-
|
|
29
|
+
npx -p agentvibes@latest test-bmad-pr <PR_NUMBER>
|
|
30
|
+
```
|
|
21
31
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
32
|
+
For example:
|
|
33
|
+
```bash
|
|
34
|
+
npx -p agentvibes@latest test-bmad-pr 935
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Alternative: Manual Download
|
|
38
|
+
|
|
39
|
+
If you prefer to download the script first:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
# Download and run the test script
|
|
43
|
+
curl -sSL https://raw.githubusercontent.com/paulpreibisch/BMAD-METHOD/feature/agentvibes-tts-integration/test-bmad-pr.sh -o test-bmad-pr.sh
|
|
44
|
+
chmod +x test-bmad-pr.sh
|
|
45
|
+
./test-bmad-pr.sh
|
|
25
46
|
```
|
|
26
47
|
|
|
27
|
-
###
|
|
48
|
+
### What the Script Does
|
|
49
|
+
|
|
50
|
+
The script provides an **interactive menu** that lets you choose:
|
|
51
|
+
|
|
52
|
+
1. **Test official BMAD PR #934** (recommended for most users)
|
|
53
|
+
- Automatically fetches the PR from the main BMAD repository
|
|
54
|
+
- Perfect for testing before the PR is merged
|
|
55
|
+
|
|
56
|
+
2. **Test your forked repository**
|
|
57
|
+
- Use your own fork and custom branch
|
|
58
|
+
- Great for testing your own modifications
|
|
59
|
+
|
|
60
|
+
The script will:
|
|
61
|
+
- ✓ Clone the repository (official or your fork)
|
|
62
|
+
- ✓ Checkout the correct branch
|
|
63
|
+
- ✓ Install BMAD CLI tools
|
|
64
|
+
- ✓ Create a test project
|
|
65
|
+
- ✓ Install AgentVibes TTS
|
|
66
|
+
- ✓ Configure unique voices for each agent
|
|
67
|
+
- ✓ Verify the installation
|
|
68
|
+
|
|
69
|
+
### After Running the Script
|
|
70
|
+
|
|
71
|
+
Once setup is complete, the script will tell you exactly how to test party mode:
|
|
72
|
+
|
|
28
73
|
```bash
|
|
29
|
-
# Navigate to the
|
|
30
|
-
cd
|
|
74
|
+
# Navigate to the test project
|
|
75
|
+
cd ~/bmad-pr-test-*/bmad-project
|
|
31
76
|
|
|
32
|
-
#
|
|
33
|
-
|
|
77
|
+
# Start Claude
|
|
78
|
+
claude
|
|
34
79
|
|
|
35
|
-
#
|
|
80
|
+
# Test party mode!
|
|
81
|
+
/bmad:core:workflows:party-mode
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 🛠️ Manual Testing (Advanced Users)
|
|
87
|
+
|
|
88
|
+
If you prefer to do it manually or want to understand each step:
|
|
89
|
+
|
|
90
|
+
### Step 1: Clone and Setup BMAD
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
# Clone the official BMAD repo
|
|
94
|
+
git clone https://github.com/bmad-code-org/BMAD-METHOD.git
|
|
95
|
+
cd BMAD-METHOD
|
|
96
|
+
|
|
97
|
+
# Fetch and checkout the PR branch
|
|
98
|
+
git remote add upstream https://github.com/bmad-code-org/BMAD-METHOD.git
|
|
99
|
+
git fetch upstream pull/934/head:agentvibes-party-mode
|
|
100
|
+
git checkout agentvibes-party-mode
|
|
101
|
+
|
|
102
|
+
# Install BMAD CLI
|
|
103
|
+
cd tools/cli
|
|
104
|
+
npm install
|
|
36
105
|
npm link
|
|
106
|
+
```
|
|
37
107
|
|
|
38
|
-
|
|
108
|
+
### Step 2: Create Test Project
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
# Create a test directory
|
|
39
112
|
cd ~
|
|
40
113
|
mkdir my-bmad-test
|
|
41
114
|
cd my-bmad-test
|
|
42
115
|
|
|
43
|
-
# Run
|
|
116
|
+
# Run BMAD installer
|
|
44
117
|
bmad install
|
|
45
118
|
|
|
46
|
-
# When prompted
|
|
47
|
-
# -
|
|
48
|
-
# -
|
|
119
|
+
# When prompted:
|
|
120
|
+
# - Enable TTS for agents? → Yes
|
|
121
|
+
# - Assign unique voices for party mode? → Yes
|
|
49
122
|
```
|
|
50
123
|
|
|
51
|
-
### Step
|
|
124
|
+
### Step 3: Install AgentVibes
|
|
125
|
+
|
|
52
126
|
```bash
|
|
53
|
-
#
|
|
127
|
+
# Install AgentVibes
|
|
54
128
|
npx agentvibes@latest install
|
|
55
129
|
|
|
56
130
|
# Follow the installer:
|
|
57
|
-
# - Choose a TTS provider (
|
|
58
|
-
# -
|
|
59
|
-
# - For ElevenLabs: you'll need an API key
|
|
131
|
+
# - Choose a TTS provider (Piper recommended for testing)
|
|
132
|
+
# - Download voices when prompted
|
|
60
133
|
```
|
|
61
134
|
|
|
62
|
-
### Step
|
|
135
|
+
### Step 4: Test Party Mode
|
|
136
|
+
|
|
63
137
|
```bash
|
|
64
|
-
# Start
|
|
65
|
-
|
|
66
|
-
/bmad:core:workflows:party-mode
|
|
138
|
+
# Start Claude Code session
|
|
139
|
+
claude-code
|
|
67
140
|
|
|
68
|
-
#
|
|
141
|
+
# Run party mode
|
|
142
|
+
/bmad:core:workflows:party-mode
|
|
69
143
|
```
|
|
70
144
|
|
|
71
145
|
## What to Test
|
package/README.md
CHANGED
|
@@ -291,7 +291,7 @@ The BMAD plugin detects when you activate a BMAD agent (e.g., `/BMad:agents:pm`)
|
|
|
291
291
|
|
|
292
292
|
## 📦 Installation Structure
|
|
293
293
|
|
|
294
|
-
**What gets installed:** Commands, hooks, personalities,
|
|
294
|
+
**What gets installed:** Commands, hooks, personalities, and plugins in `.claude/` directory.
|
|
295
295
|
|
|
296
296
|
**[→ View Complete Installation Structure](docs/installation-structure.md)** - Full directory tree, file descriptions, and settings storage
|
|
297
297
|
|
|
@@ -326,7 +326,7 @@ The BMAD plugin detects when you activate a BMAD agent (e.g., `/BMad:agents:pm`)
|
|
|
326
326
|
|
|
327
327
|
## 🔧 Advanced Features
|
|
328
328
|
|
|
329
|
-
AgentVibes supports **custom personalities
|
|
329
|
+
AgentVibes supports **custom personalities** and **custom voices**.
|
|
330
330
|
|
|
331
331
|
**Quick Examples:**
|
|
332
332
|
```bash
|
|
@@ -340,7 +340,7 @@ AgentVibes supports **custom personalities**, **custom voices**, and **integrati
|
|
|
340
340
|
[Bash: .claude/hooks/play-tts.sh "Starting" "Aria"]
|
|
341
341
|
```
|
|
342
342
|
|
|
343
|
-
**[→ View Advanced Features Guide](docs/advanced-features.md)** - Custom personalities, custom voices,
|
|
343
|
+
**[→ View Advanced Features Guide](docs/advanced-features.md)** - Custom personalities, custom voices, and more
|
|
344
344
|
|
|
345
345
|
[↑ Back to top](#-table-of-contents)
|
|
346
346
|
|
package/RELEASE_NOTES.md
CHANGED
|
@@ -1,3 +1,25 @@
|
|
|
1
|
+
# Release v2.9.5 - Legacy Output Styles Cleanup
|
|
2
|
+
|
|
3
|
+
**Release Date:** TBD
|
|
4
|
+
**Type:** Patch Release (Cleanup)
|
|
5
|
+
|
|
6
|
+
## 🎯 AI Summary
|
|
7
|
+
|
|
8
|
+
AgentVibes v2.9.5 removes legacy output styles installation that became obsolete when we switched to the SessionStart hook system for TTS activation. This cleanup reduces installation time, saves disk space, and simplifies the codebase without affecting functionality.
|
|
9
|
+
|
|
10
|
+
## 🧹 Cleanup
|
|
11
|
+
|
|
12
|
+
### Removed Legacy Output Styles Installation
|
|
13
|
+
- Removed `copyOutputStyles()` function from installer (src/installer.js:589-608)
|
|
14
|
+
- Deleted `templates/output-styles/` directory from repository
|
|
15
|
+
- Removed unused `check-output-style.sh` hook
|
|
16
|
+
- Updated documentation to reflect SessionStart hook system
|
|
17
|
+
|
|
18
|
+
### Migration Note for Existing Users
|
|
19
|
+
If you previously installed AgentVibes, you can safely delete the `.claude/output-styles/` directory from your projects. The SessionStart hook system (`.claude/hooks/session-start.sh`) now handles TTS activation automatically and is more reliable than the old output styles approach.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
1
23
|
# Release v2.7.2 - Party Mode Voice Fixes
|
|
2
24
|
|
|
3
25
|
**Release Date:** 2025-11-18
|
package/bin/test-bmad-pr
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# AgentVibes BMAD PR Testing Command
|
|
4
|
+
# Quick command to test BMAD PRs with AgentVibes integration
|
|
5
|
+
#
|
|
6
|
+
# Usage:
|
|
7
|
+
# npx agentvibes test-bmad-pr [PR_NUMBER]
|
|
8
|
+
# npx agentvibes test-bmad-pr 934
|
|
9
|
+
#
|
|
10
|
+
|
|
11
|
+
set -e
|
|
12
|
+
|
|
13
|
+
# Colors
|
|
14
|
+
GREEN='\033[0;32m'
|
|
15
|
+
BLUE='\033[0;34m'
|
|
16
|
+
YELLOW='\033[1;33m'
|
|
17
|
+
CYAN='\033[0;36m'
|
|
18
|
+
NC='\033[0m' # No Color
|
|
19
|
+
|
|
20
|
+
# Default PR number
|
|
21
|
+
PR_NUMBER="${1:-934}"
|
|
22
|
+
|
|
23
|
+
clear
|
|
24
|
+
|
|
25
|
+
echo ""
|
|
26
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
27
|
+
echo -e "${CYAN}🎙️ AgentVibes BMAD PR Testing Tool${NC}"
|
|
28
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
29
|
+
echo ""
|
|
30
|
+
echo -e "${BLUE}Testing PR #${PR_NUMBER}${NC}"
|
|
31
|
+
echo ""
|
|
32
|
+
echo -e "${YELLOW}This will download and run the automated test script for${NC}"
|
|
33
|
+
echo -e "${YELLOW}BMAD's AgentVibes integration with multi-agent party mode.${NC}"
|
|
34
|
+
echo ""
|
|
35
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
36
|
+
echo ""
|
|
37
|
+
|
|
38
|
+
# Create temp directory for the script
|
|
39
|
+
TEMP_DIR=$(mktemp -d)
|
|
40
|
+
SCRIPT_PATH="$TEMP_DIR/test-bmad-pr.sh"
|
|
41
|
+
|
|
42
|
+
echo -e "${BLUE}📥 Downloading test script...${NC}"
|
|
43
|
+
|
|
44
|
+
# Download the test script from the PR branch
|
|
45
|
+
SCRIPT_URL="https://raw.githubusercontent.com/paulpreibisch/BMAD-METHOD/feature/agentvibes-tts-integration/test-bmad-pr.sh"
|
|
46
|
+
|
|
47
|
+
if curl -fsSL "$SCRIPT_URL" -o "$SCRIPT_PATH"; then
|
|
48
|
+
chmod +x "$SCRIPT_PATH"
|
|
49
|
+
echo -e "${GREEN}✓ Test script downloaded${NC}"
|
|
50
|
+
echo ""
|
|
51
|
+
|
|
52
|
+
# Run the test script
|
|
53
|
+
exec "$SCRIPT_PATH"
|
|
54
|
+
else
|
|
55
|
+
echo -e "${YELLOW}⚠ Could not download test script from PR branch${NC}"
|
|
56
|
+
echo ""
|
|
57
|
+
echo "Trying alternative: Official BMAD repository..."
|
|
58
|
+
echo ""
|
|
59
|
+
|
|
60
|
+
# Fallback to official repo
|
|
61
|
+
SCRIPT_URL="https://raw.githubusercontent.com/bmad-code-org/BMAD-METHOD/refs/pull/${PR_NUMBER}/merge/test-bmad-pr.sh"
|
|
62
|
+
|
|
63
|
+
if curl -fsSL "$SCRIPT_URL" -o "$SCRIPT_PATH"; then
|
|
64
|
+
chmod +x "$SCRIPT_PATH"
|
|
65
|
+
echo -e "${GREEN}✓ Test script downloaded${NC}"
|
|
66
|
+
echo ""
|
|
67
|
+
exec "$SCRIPT_PATH"
|
|
68
|
+
else
|
|
69
|
+
echo -e "${YELLOW}⚠ Could not download test script${NC}"
|
|
70
|
+
echo ""
|
|
71
|
+
echo "Please try manual testing:"
|
|
72
|
+
echo -e "${GREEN}git clone https://github.com/bmad-code-org/BMAD-METHOD.git${NC}"
|
|
73
|
+
echo -e "${GREEN}cd BMAD-METHOD${NC}"
|
|
74
|
+
echo -e "${GREEN}git fetch origin pull/${PR_NUMBER}/head:test-pr-${PR_NUMBER}${NC}"
|
|
75
|
+
echo -e "${GREEN}git checkout test-pr-${PR_NUMBER}${NC}"
|
|
76
|
+
echo ""
|
|
77
|
+
exit 1
|
|
78
|
+
fi
|
|
79
|
+
fi
|
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.6",
|
|
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": [
|
|
@@ -28,7 +28,8 @@
|
|
|
28
28
|
"bin": {
|
|
29
29
|
"agentvibes": "./bin/agent-vibes",
|
|
30
30
|
"agent-vibes": "./bin/agent-vibes",
|
|
31
|
-
"agentvibes-mcp-server": "./bin/mcp-server.js"
|
|
31
|
+
"agentvibes-mcp-server": "./bin/mcp-server.js",
|
|
32
|
+
"test-bmad-pr": "./bin/test-bmad-pr"
|
|
32
33
|
},
|
|
33
34
|
"scripts": {
|
|
34
35
|
"install-local": "node src/installer.js install",
|
package/src/installer.js
CHANGED
|
@@ -642,6 +642,39 @@ async function copyPluginFiles(targetDir, spinner) {
|
|
|
642
642
|
return pluginFiles.length;
|
|
643
643
|
}
|
|
644
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
|
+
|
|
645
678
|
/**
|
|
646
679
|
* Configure SessionStart hook in settings.json
|
|
647
680
|
* @param {string} targetDir - Target installation directory
|
|
@@ -1118,6 +1151,12 @@ async function updateAgentVibes(targetDir, options) {
|
|
|
1118
1151
|
console.log(chalk.green(`✓ Updated ${pluginFileCount} BMAD plugin files`));
|
|
1119
1152
|
}
|
|
1120
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
|
+
|
|
1121
1160
|
// Update settings.json
|
|
1122
1161
|
spinner.text = 'Updating AgentVibes hook configuration...';
|
|
1123
1162
|
await configureSessionStartHook(targetDir, { start: () => {}, succeed: () => {}, info: () => {}, fail: () => {} });
|
|
@@ -1276,6 +1315,7 @@ async function install(options = {}) {
|
|
|
1276
1315
|
const personalityFileCount = await copyPersonalityFiles(targetDir, spinner);
|
|
1277
1316
|
const outputStyleCount = await copyOutputStyles(targetDir, spinner);
|
|
1278
1317
|
const pluginFileCount = await copyPluginFiles(targetDir, spinner);
|
|
1318
|
+
const bmadConfigFileCount = await copyBmadConfigFiles(targetDir, spinner);
|
|
1279
1319
|
|
|
1280
1320
|
// Configure hooks and manifests
|
|
1281
1321
|
await configureSessionStartHook(targetDir, spinner);
|
|
@@ -1307,6 +1347,9 @@ async function install(options = {}) {
|
|
|
1307
1347
|
if (pluginFileCount > 0) {
|
|
1308
1348
|
console.log(chalk.white(` • ${pluginFileCount} BMAD plugin files installed`));
|
|
1309
1349
|
}
|
|
1350
|
+
if (bmadConfigFileCount > 0) {
|
|
1351
|
+
console.log(chalk.white(` • ${bmadConfigFileCount} BMAD config files installed`));
|
|
1352
|
+
}
|
|
1310
1353
|
console.log(chalk.white(` • Voice manager ready`));
|
|
1311
1354
|
|
|
1312
1355
|
if (selectedProvider === 'elevenlabs') {
|
package/test-bmad-pr.sh
CHANGED
|
@@ -9,40 +9,155 @@ set -e
|
|
|
9
9
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
10
10
|
CONFIG_FILE="$SCRIPT_DIR/.test-bmad-config"
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
# Colors
|
|
13
|
+
GREEN='\033[0;32m'
|
|
14
|
+
BLUE='\033[0;34m'
|
|
15
|
+
YELLOW='\033[1;33m'
|
|
16
|
+
RED='\033[0;31m'
|
|
17
|
+
NC='\033[0m' # No Color
|
|
18
|
+
|
|
19
|
+
clear
|
|
20
|
+
|
|
21
|
+
echo ""
|
|
22
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
23
|
+
echo "🎙️ BMAD AgentVibes Party Mode Testing Script"
|
|
24
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
25
|
+
echo ""
|
|
26
|
+
echo -e "${BLUE}What this script does:${NC}"
|
|
27
|
+
echo ""
|
|
28
|
+
echo " This script automates the process of testing BMAD's AgentVibes"
|
|
29
|
+
echo " integration (PR #934), which adds multi-agent party mode with"
|
|
30
|
+
echo " unique voices for each BMAD agent."
|
|
31
|
+
echo ""
|
|
32
|
+
echo -e "${BLUE}The script will:${NC}"
|
|
33
|
+
echo ""
|
|
34
|
+
echo " 1. Clone the BMAD repository"
|
|
35
|
+
echo " 2. Checkout the PR branch with party mode features"
|
|
36
|
+
echo " 3. Install BMAD CLI tools locally"
|
|
37
|
+
echo " 4. Create a test BMAD project"
|
|
38
|
+
echo " 5. Install AgentVibes TTS system"
|
|
39
|
+
echo " 6. Configure unique voices for each agent"
|
|
40
|
+
echo " 7. Verify the installation"
|
|
41
|
+
echo ""
|
|
42
|
+
echo -e "${YELLOW}Prerequisites:${NC}"
|
|
43
|
+
echo " • Node.js and npm installed"
|
|
44
|
+
echo " • Git installed"
|
|
45
|
+
echo " • ~500MB free disk space"
|
|
46
|
+
echo " • 10-15 minutes for complete setup"
|
|
47
|
+
echo ""
|
|
48
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
49
|
+
echo ""
|
|
50
|
+
|
|
51
|
+
read -p "Ready to continue? [Y/n]: " -n 1 -r
|
|
52
|
+
echo
|
|
53
|
+
if [[ ! $REPLY =~ ^[Yy]$ ]] && [[ -n $REPLY ]]; then
|
|
54
|
+
echo "❌ Setup cancelled"
|
|
55
|
+
exit 0
|
|
56
|
+
fi
|
|
57
|
+
|
|
58
|
+
clear
|
|
59
|
+
|
|
60
|
+
echo ""
|
|
61
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
62
|
+
echo "🔧 Testing Mode Selection"
|
|
63
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
64
|
+
echo ""
|
|
65
|
+
echo "Choose how you want to test:"
|
|
66
|
+
echo ""
|
|
67
|
+
echo " 1) Test official BMAD PR #934 (recommended for most users)"
|
|
68
|
+
echo " • Uses: github.com/bmad-code-org/BMAD-METHOD"
|
|
69
|
+
echo " • Branch: PR #934 (agentvibes-party-mode)"
|
|
70
|
+
echo " • Best for: Testing the official PR before it's merged"
|
|
71
|
+
echo ""
|
|
72
|
+
echo " 2) Test your forked repository"
|
|
73
|
+
echo " • Uses: Your GitHub fork"
|
|
74
|
+
echo " • Branch: Your custom branch (you choose)"
|
|
75
|
+
echo " • Best for: Testing your own changes or modifications"
|
|
14
76
|
echo ""
|
|
15
77
|
|
|
16
78
|
# Load saved config if it exists
|
|
79
|
+
SAVED_MODE=""
|
|
17
80
|
SAVED_FORK=""
|
|
81
|
+
SAVED_BRANCH=""
|
|
18
82
|
SAVED_TEST_DIR=""
|
|
19
83
|
if [[ -f "$CONFIG_FILE" ]]; then
|
|
20
84
|
source "$CONFIG_FILE"
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
85
|
+
fi
|
|
86
|
+
|
|
87
|
+
if [[ -n "$SAVED_MODE" ]]; then
|
|
88
|
+
echo -e "${BLUE}Last used: Mode $SAVED_MODE${NC}"
|
|
89
|
+
[[ -n "$SAVED_FORK" ]] && echo " Fork: $SAVED_FORK"
|
|
90
|
+
[[ -n "$SAVED_BRANCH" ]] && echo " Branch: $SAVED_BRANCH"
|
|
24
91
|
echo ""
|
|
25
92
|
fi
|
|
26
93
|
|
|
27
|
-
|
|
28
|
-
echo "
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
94
|
+
read -p "Select mode [1/2]: " MODE_CHOICE
|
|
95
|
+
echo ""
|
|
96
|
+
|
|
97
|
+
# Validate mode choice
|
|
98
|
+
while [[ ! "$MODE_CHOICE" =~ ^[12]$ ]]; do
|
|
99
|
+
echo -e "${RED}Invalid choice. Please enter 1 or 2.${NC}"
|
|
100
|
+
read -p "Select mode [1/2]: " MODE_CHOICE
|
|
101
|
+
echo ""
|
|
102
|
+
done
|
|
103
|
+
|
|
104
|
+
# Configure based on mode
|
|
105
|
+
if [[ "$MODE_CHOICE" == "1" ]]; then
|
|
106
|
+
# Official PR mode
|
|
107
|
+
REPO_URL="https://github.com/bmad-code-org/BMAD-METHOD.git"
|
|
108
|
+
BRANCH_NAME="agentvibes-party-mode"
|
|
109
|
+
FETCH_PR=true
|
|
110
|
+
|
|
111
|
+
echo -e "${GREEN}✓ Using official BMAD repository${NC}"
|
|
112
|
+
echo " Repository: $REPO_URL"
|
|
113
|
+
echo " Will fetch: PR #934 into branch '$BRANCH_NAME'"
|
|
114
|
+
echo ""
|
|
33
115
|
else
|
|
34
|
-
|
|
116
|
+
# Fork mode
|
|
117
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
118
|
+
echo "🍴 Fork Configuration"
|
|
119
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
120
|
+
echo ""
|
|
121
|
+
|
|
122
|
+
if [[ -n "$SAVED_FORK" ]]; then
|
|
123
|
+
read -p "GitHub fork URL [$SAVED_FORK]: " FORK_INPUT
|
|
124
|
+
REPO_URL="${FORK_INPUT:-$SAVED_FORK}"
|
|
125
|
+
else
|
|
126
|
+
echo "Enter your forked repository URL:"
|
|
127
|
+
echo "(e.g., https://github.com/yourusername/BMAD-METHOD.git)"
|
|
128
|
+
read -p "Fork URL: " REPO_URL
|
|
129
|
+
fi
|
|
130
|
+
echo ""
|
|
131
|
+
|
|
132
|
+
if [[ -n "$SAVED_BRANCH" ]]; then
|
|
133
|
+
read -p "Branch name [$SAVED_BRANCH]: " BRANCH_INPUT
|
|
134
|
+
BRANCH_NAME="${BRANCH_INPUT:-$SAVED_BRANCH}"
|
|
135
|
+
else
|
|
136
|
+
echo "Enter the branch name to test:"
|
|
137
|
+
echo "(e.g., agentvibes-party-mode, main, feature-xyz)"
|
|
138
|
+
read -p "Branch: " BRANCH_NAME
|
|
139
|
+
fi
|
|
140
|
+
echo ""
|
|
141
|
+
|
|
142
|
+
FETCH_PR=false
|
|
143
|
+
|
|
144
|
+
echo -e "${GREEN}✓ Using your fork${NC}"
|
|
145
|
+
echo " Repository: $REPO_URL"
|
|
146
|
+
echo " Branch: $BRANCH_NAME"
|
|
147
|
+
echo ""
|
|
35
148
|
fi
|
|
36
|
-
echo ""
|
|
37
149
|
|
|
38
150
|
# Ask for test directory
|
|
39
|
-
echo "
|
|
40
|
-
echo "
|
|
151
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
152
|
+
echo "📁 Test Directory"
|
|
153
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
154
|
+
echo ""
|
|
41
155
|
if [[ -n "$SAVED_TEST_DIR" ]]; then
|
|
42
156
|
read -p "Test directory [$SAVED_TEST_DIR]: " TEST_DIR
|
|
43
157
|
TEST_DIR="${TEST_DIR:-$SAVED_TEST_DIR}"
|
|
44
158
|
else
|
|
45
159
|
DEFAULT_DIR="$HOME/bmad-pr-test-$(date +%Y%m%d-%H%M%S)"
|
|
160
|
+
echo "Where should we create the test environment?"
|
|
46
161
|
read -p "Test directory [$DEFAULT_DIR]: " TEST_DIR
|
|
47
162
|
TEST_DIR="${TEST_DIR:-$DEFAULT_DIR}"
|
|
48
163
|
fi
|
|
@@ -53,24 +168,29 @@ TEST_DIR="${TEST_DIR/#\~/$HOME}"
|
|
|
53
168
|
echo ""
|
|
54
169
|
|
|
55
170
|
# Save configuration
|
|
56
|
-
echo "
|
|
171
|
+
echo "SAVED_MODE=\"$MODE_CHOICE\"" > "$CONFIG_FILE"
|
|
172
|
+
[[ "$MODE_CHOICE" == "2" ]] && echo "SAVED_FORK=\"$REPO_URL\"" >> "$CONFIG_FILE"
|
|
173
|
+
[[ "$MODE_CHOICE" == "2" ]] && echo "SAVED_BRANCH=\"$BRANCH_NAME\"" >> "$CONFIG_FILE"
|
|
57
174
|
echo "SAVED_TEST_DIR=\"$TEST_DIR\"" >> "$CONFIG_FILE"
|
|
58
|
-
echo "
|
|
175
|
+
echo -e "${GREEN}✓ Configuration saved${NC}"
|
|
59
176
|
echo ""
|
|
60
177
|
|
|
61
178
|
# Confirm before starting
|
|
62
|
-
echo "
|
|
63
|
-
echo "
|
|
64
|
-
echo "
|
|
65
|
-
echo " Test dir: $TEST_DIR"
|
|
179
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
180
|
+
echo "📋 Summary"
|
|
181
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
66
182
|
echo ""
|
|
67
|
-
|
|
183
|
+
echo " Repository: $REPO_URL"
|
|
184
|
+
echo " Branch: $BRANCH_NAME"
|
|
185
|
+
echo " Test dir: $TEST_DIR"
|
|
186
|
+
echo ""
|
|
187
|
+
read -p "Proceed with setup? [Y/n]: " -n 1 -r
|
|
68
188
|
echo
|
|
189
|
+
echo ""
|
|
69
190
|
if [[ ! $REPLY =~ ^[Yy]$ ]] && [[ -n $REPLY ]]; then
|
|
70
|
-
echo "❌
|
|
191
|
+
echo "❌ Setup cancelled"
|
|
71
192
|
exit 0
|
|
72
193
|
fi
|
|
73
|
-
echo ""
|
|
74
194
|
|
|
75
195
|
# Clean up old test directory if it exists
|
|
76
196
|
if [[ -d "$TEST_DIR" ]]; then
|
|
@@ -79,121 +199,185 @@ if [[ -d "$TEST_DIR" ]]; then
|
|
|
79
199
|
echo
|
|
80
200
|
if [[ $REPLY =~ ^[Yy]$ ]] || [[ -z $REPLY ]]; then
|
|
81
201
|
rm -rf "$TEST_DIR"
|
|
82
|
-
echo "
|
|
202
|
+
echo -e "${GREEN}✓ Deleted old test directory${NC}"
|
|
83
203
|
else
|
|
84
|
-
echo "
|
|
204
|
+
echo -e "${YELLOW}⚠ Using existing directory (may have stale data)${NC}"
|
|
85
205
|
fi
|
|
86
206
|
echo ""
|
|
87
207
|
fi
|
|
88
208
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
echo "
|
|
209
|
+
clear
|
|
210
|
+
|
|
211
|
+
echo ""
|
|
212
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
213
|
+
echo "🚀 Starting Installation"
|
|
214
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
215
|
+
echo ""
|
|
216
|
+
|
|
217
|
+
# Step 1: Clone repository
|
|
218
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
219
|
+
echo "📥 Step 1/6: Cloning repository"
|
|
220
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
221
|
+
echo ""
|
|
92
222
|
mkdir -p "$TEST_DIR"
|
|
93
223
|
cd "$TEST_DIR"
|
|
94
|
-
git clone "$
|
|
224
|
+
git clone "$REPO_URL" BMAD-METHOD
|
|
95
225
|
cd BMAD-METHOD
|
|
96
|
-
echo "
|
|
226
|
+
echo ""
|
|
227
|
+
echo -e "${GREEN}✓ Repository cloned${NC}"
|
|
97
228
|
echo ""
|
|
98
229
|
|
|
99
|
-
# Step 2:
|
|
100
|
-
echo "
|
|
101
|
-
echo "
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
230
|
+
# Step 2: Checkout branch (different logic for PR vs fork)
|
|
231
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
232
|
+
echo "🔀 Step 2/6: Checking out branch"
|
|
233
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
234
|
+
echo ""
|
|
235
|
+
|
|
236
|
+
if [[ "$FETCH_PR" == true ]]; then
|
|
237
|
+
# Fetch PR from upstream
|
|
238
|
+
echo "Fetching PR #934 from upstream..."
|
|
239
|
+
git remote add upstream https://github.com/bmad-code-org/BMAD-METHOD.git
|
|
240
|
+
git fetch upstream pull/934/head:$BRANCH_NAME
|
|
241
|
+
git checkout $BRANCH_NAME
|
|
242
|
+
echo ""
|
|
243
|
+
echo -e "${GREEN}✓ Checked out PR branch: $BRANCH_NAME${NC}"
|
|
244
|
+
else
|
|
245
|
+
# Just checkout the specified branch from fork
|
|
246
|
+
git checkout $BRANCH_NAME
|
|
247
|
+
echo ""
|
|
248
|
+
echo -e "${GREEN}✓ Checked out branch: $BRANCH_NAME${NC}"
|
|
249
|
+
fi
|
|
106
250
|
echo ""
|
|
107
251
|
|
|
108
252
|
# Step 3: Install BMAD CLI
|
|
109
|
-
echo "
|
|
110
|
-
echo "
|
|
253
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
254
|
+
echo "📦 Step 3/6: Installing BMAD CLI"
|
|
255
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
256
|
+
echo ""
|
|
111
257
|
cd tools/cli
|
|
112
258
|
npm install
|
|
113
259
|
npm link
|
|
114
|
-
echo "
|
|
260
|
+
echo ""
|
|
261
|
+
echo -e "${GREEN}✓ BMAD CLI installed and linked globally${NC}"
|
|
115
262
|
echo ""
|
|
116
263
|
|
|
117
264
|
# Step 4: Create test project
|
|
118
|
-
echo "
|
|
119
|
-
echo "
|
|
265
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
266
|
+
echo "📁 Step 4/6: Creating test project"
|
|
267
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
268
|
+
echo ""
|
|
120
269
|
cd "$TEST_DIR"
|
|
121
270
|
mkdir -p bmad-project
|
|
122
271
|
cd bmad-project
|
|
123
|
-
echo "
|
|
272
|
+
echo -e "${GREEN}✓ Test project directory created${NC}"
|
|
273
|
+
echo " Location: $TEST_DIR/bmad-project"
|
|
124
274
|
echo ""
|
|
125
275
|
|
|
126
|
-
# Step 5: Run BMAD installer
|
|
127
|
-
echo "
|
|
128
|
-
echo "
|
|
129
|
-
echo "
|
|
130
|
-
echo "
|
|
131
|
-
echo
|
|
276
|
+
# Step 5: Run BMAD installer (includes AgentVibes setup)
|
|
277
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
278
|
+
echo "⚙️ Step 5/6: Running BMAD installer with AgentVibes"
|
|
279
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
280
|
+
echo ""
|
|
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
|
+
echo ""
|
|
285
|
+
echo -e "${YELLOW}Then AgentVibes installer will start automatically.${NC}"
|
|
286
|
+
echo -e "${YELLOW}Recommended TTS settings:${NC}"
|
|
287
|
+
echo -e " • Provider: ${GREEN}Piper${NC} (free, local TTS)"
|
|
288
|
+
echo -e " • Download voices: ${GREEN}Yes${NC}"
|
|
132
289
|
echo ""
|
|
133
290
|
read -p "Press Enter to start BMAD installer..."
|
|
134
291
|
bmad install
|
|
135
292
|
|
|
136
293
|
echo ""
|
|
137
|
-
echo "
|
|
138
|
-
echo ""
|
|
139
|
-
|
|
140
|
-
# Step 6: Install AgentVibes
|
|
141
|
-
echo "Step 6: Installing AgentVibes"
|
|
142
|
-
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
143
|
-
echo "⚠️ When prompted, choose:"
|
|
144
|
-
echo " - Provider: Piper (free) for testing"
|
|
145
|
-
echo " - Download voices: Yes"
|
|
294
|
+
echo -e "${GREEN}✓ BMAD and AgentVibes installation complete${NC}"
|
|
146
295
|
echo ""
|
|
147
|
-
read -p "Press Enter to start AgentVibes installer..."
|
|
148
|
-
npx agentvibes@latest install
|
|
149
296
|
|
|
150
|
-
|
|
151
|
-
echo "
|
|
297
|
+
# Step 6: Verification
|
|
298
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
299
|
+
echo "✅ Step 6/6: Verifying installation"
|
|
300
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
152
301
|
echo ""
|
|
153
302
|
|
|
154
|
-
|
|
155
|
-
echo "Step 7: Verification"
|
|
156
|
-
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
157
|
-
echo ""
|
|
303
|
+
VERIFICATION_PASSED=true
|
|
158
304
|
|
|
159
305
|
# Check for voice map file
|
|
160
306
|
if [[ -f ".bmad/_cfg/agent-voice-map.csv" ]]; then
|
|
161
|
-
echo "
|
|
307
|
+
echo -e "${GREEN}✓ Voice map file created${NC}"
|
|
308
|
+
echo " Location: .bmad/_cfg/agent-voice-map.csv"
|
|
162
309
|
echo ""
|
|
163
|
-
echo "Voice assignments:"
|
|
164
|
-
cat .bmad/_cfg/agent-voice-map.csv
|
|
310
|
+
echo " Voice assignments:"
|
|
311
|
+
cat .bmad/_cfg/agent-voice-map.csv | sed 's/^/ /'
|
|
165
312
|
echo ""
|
|
166
313
|
else
|
|
167
|
-
echo "
|
|
168
|
-
echo "
|
|
314
|
+
echo -e "${RED}✗ Voice map file NOT found${NC}"
|
|
315
|
+
echo " Expected: .bmad/_cfg/agent-voice-map.csv"
|
|
316
|
+
echo " ${YELLOW}Warning: Agents may not have unique voices!${NC}"
|
|
169
317
|
echo ""
|
|
318
|
+
VERIFICATION_PASSED=false
|
|
170
319
|
fi
|
|
171
320
|
|
|
172
321
|
# Check for AgentVibes hooks
|
|
173
322
|
if [[ -f ".claude/hooks/bmad-speak.sh" ]]; then
|
|
174
|
-
echo "
|
|
323
|
+
echo -e "${GREEN}✓ BMAD TTS hooks installed${NC}"
|
|
324
|
+
echo " Location: .claude/hooks/bmad-speak.sh"
|
|
175
325
|
else
|
|
176
|
-
echo "
|
|
177
|
-
echo ""
|
|
326
|
+
echo -e "${RED}✗ BMAD TTS hooks NOT found${NC}"
|
|
327
|
+
echo " Expected: .claude/hooks/bmad-speak.sh"
|
|
328
|
+
VERIFICATION_PASSED=false
|
|
178
329
|
fi
|
|
330
|
+
echo ""
|
|
179
331
|
|
|
180
332
|
# Check for Piper installation
|
|
181
333
|
if command -v piper &> /dev/null; then
|
|
182
|
-
|
|
183
|
-
|
|
334
|
+
PIPER_VERSION=$(piper --version 2>&1 || echo "unknown")
|
|
335
|
+
echo -e "${GREEN}✓ Piper TTS installed${NC}"
|
|
336
|
+
echo " Version: $PIPER_VERSION"
|
|
337
|
+
elif [[ -f ".agentvibes/providers/piper/piper" ]]; then
|
|
338
|
+
echo -e "${GREEN}✓ Piper TTS installed (local)${NC}"
|
|
339
|
+
echo " Location: .agentvibes/providers/piper/piper"
|
|
184
340
|
else
|
|
185
|
-
echo "
|
|
341
|
+
echo -e "${YELLOW}⚠ Piper not detected${NC}"
|
|
342
|
+
echo " (May still work if using ElevenLabs)"
|
|
186
343
|
fi
|
|
344
|
+
echo ""
|
|
187
345
|
|
|
346
|
+
# Final status
|
|
347
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
348
|
+
if [[ "$VERIFICATION_PASSED" == true ]]; then
|
|
349
|
+
echo -e "${GREEN}🎉 Setup Complete - All Checks Passed!${NC}"
|
|
350
|
+
else
|
|
351
|
+
echo -e "${YELLOW}⚠️ Setup Complete - With Warnings${NC}"
|
|
352
|
+
echo ""
|
|
353
|
+
echo "Some verification checks failed. The installation may still work,"
|
|
354
|
+
echo "but you might experience issues with party mode voices."
|
|
355
|
+
fi
|
|
356
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
357
|
+
echo ""
|
|
358
|
+
echo -e "${BLUE}Next Steps:${NC}"
|
|
359
|
+
echo ""
|
|
360
|
+
echo " 1. Navigate to test project:"
|
|
361
|
+
echo -e " ${GREEN}cd $TEST_DIR/bmad-project${NC}"
|
|
362
|
+
echo ""
|
|
363
|
+
echo " 2. Start Claude session:"
|
|
364
|
+
echo -e " ${GREEN}claude${NC}"
|
|
365
|
+
echo ""
|
|
366
|
+
echo " 3. Test party mode:"
|
|
367
|
+
echo -e " ${GREEN}/bmad:core:workflows:party-mode${NC}"
|
|
368
|
+
echo ""
|
|
369
|
+
echo " 4. Verify each agent speaks with a unique voice!"
|
|
370
|
+
echo ""
|
|
371
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
372
|
+
echo -e "${BLUE}Troubleshooting:${NC}"
|
|
373
|
+
echo ""
|
|
374
|
+
echo " • No audio? Check: .claude/hooks/play-tts.sh exists"
|
|
375
|
+
echo " • Same voice for all agents? Check: .bmad/_cfg/agent-voice-map.csv"
|
|
376
|
+
echo " • Test current voice: /agent-vibes:whoami"
|
|
377
|
+
echo " • List available voices: /agent-vibes:list"
|
|
188
378
|
echo ""
|
|
189
|
-
echo "
|
|
190
|
-
echo "
|
|
379
|
+
echo -e "${BLUE}Report Issues:${NC}"
|
|
380
|
+
echo " https://github.com/bmad-code-org/BMAD-METHOD/pull/934"
|
|
191
381
|
echo ""
|
|
192
|
-
echo "
|
|
193
|
-
echo " 1. cd $TEST_DIR/bmad-project"
|
|
194
|
-
echo " 2. Start Claude Code session"
|
|
195
|
-
echo " 3. Run: /bmad:core:workflows:party-mode"
|
|
196
|
-
echo " 4. Verify each agent speaks with a unique voice"
|
|
382
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
197
383
|
echo ""
|
|
198
|
-
echo "Test project location: $TEST_DIR/bmad-project"
|
|
199
|
-
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
#
|
|
3
|
-
# File: .claude/hooks/check-output-style.sh
|
|
4
|
-
#
|
|
5
|
-
# AgentVibes - Finally, your AI Agents can Talk Back! Text-to-Speech WITH personality for AI Assistants!
|
|
6
|
-
# Website: https://agentvibes.org
|
|
7
|
-
# Repository: https://github.com/paulpreibisch/AgentVibes
|
|
8
|
-
#
|
|
9
|
-
# Co-created by Paul Preibisch with Claude AI
|
|
10
|
-
# Copyright (c) 2025 Paul Preibisch
|
|
11
|
-
#
|
|
12
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
13
|
-
# you may not use this file except in compliance with the License.
|
|
14
|
-
# You may obtain a copy of the License at
|
|
15
|
-
#
|
|
16
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
17
|
-
#
|
|
18
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
19
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
20
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
21
|
-
# See the License for the specific language governing permissions and
|
|
22
|
-
# limitations under the License.
|
|
23
|
-
#
|
|
24
|
-
# DISCLAIMER: This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
25
|
-
# express or implied, including but not limited to the warranties of
|
|
26
|
-
# merchantability, fitness for a particular purpose and noninfringement.
|
|
27
|
-
# In no event shall the authors or copyright holders be liable for any claim,
|
|
28
|
-
# damages or other liability, whether in an action of contract, tort or
|
|
29
|
-
# otherwise, arising from, out of or in connection with the software or the
|
|
30
|
-
# use or other dealings in the software.
|
|
31
|
-
#
|
|
32
|
-
# ---
|
|
33
|
-
#
|
|
34
|
-
# @fileoverview Output Style Detection - Detects if Agent Vibes output style is active in Claude Code
|
|
35
|
-
# @context Voice commands require the Agent Vibes output style to work properly with automatic TTS
|
|
36
|
-
# @architecture Heuristic detection using environment variables and file system checks
|
|
37
|
-
# @dependencies CLAUDECODE environment variable, .claude/output-styles/agent-vibes.md file
|
|
38
|
-
# @entrypoints Called by slash commands to warn users if output style is incorrect
|
|
39
|
-
# @patterns Environment-based detection, graceful degradation with helpful error messages
|
|
40
|
-
# @related .claude/output-styles/agent-vibes.md, Claude Code output style system
|
|
41
|
-
|
|
42
|
-
# AI NOTE: Output style detection is heuristic-based because Claude Code does not expose
|
|
43
|
-
# the active output style via environment variables. We check for CLAUDECODE env var and
|
|
44
|
-
# the presence of the agent-vibes.md output style file as indicators.
|
|
45
|
-
|
|
46
|
-
# @function check_output_style
|
|
47
|
-
# @intent Detect if Agent Vibes output style is likely active in Claude Code session
|
|
48
|
-
# @why Voice commands depend on output style hooks that automatically invoke TTS
|
|
49
|
-
# @param None
|
|
50
|
-
# @returns None
|
|
51
|
-
# @exitcode 0=likely using agent-vibes style, 1=not using or cannot detect
|
|
52
|
-
# @sideeffects None (read-only checks)
|
|
53
|
-
# @edgecases Cannot directly detect output style, relies on CLAUDECODE env var and file presence
|
|
54
|
-
# @calledby Main execution block, slash command validation
|
|
55
|
-
# @calls None (direct environment and file checks)
|
|
56
|
-
check_output_style() {
|
|
57
|
-
# Strategy: Check if this script is being called from within a Claude response
|
|
58
|
-
# If CLAUDECODE env var is set, we're in Claude Code
|
|
59
|
-
# If not, we're running standalone (not in a Claude Code session)
|
|
60
|
-
|
|
61
|
-
if [[ -z "$CLAUDECODE" ]]; then
|
|
62
|
-
# Not in Claude Code at all
|
|
63
|
-
return 1
|
|
64
|
-
fi
|
|
65
|
-
|
|
66
|
-
# We're in Claude Code, but we can't directly detect output style
|
|
67
|
-
# The agent-vibes output style calls our TTS hooks automatically
|
|
68
|
-
# So if this function is called, it means a slash command was invoked
|
|
69
|
-
|
|
70
|
-
# Check if we have the necessary TTS setup
|
|
71
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
72
|
-
|
|
73
|
-
# Check if agent-vibes output style is installed
|
|
74
|
-
if [[ ! -f "$SCRIPT_DIR/../output-styles/agent-vibes.md" ]]; then
|
|
75
|
-
return 1
|
|
76
|
-
fi
|
|
77
|
-
|
|
78
|
-
# All checks passed - likely using agent-vibes output style
|
|
79
|
-
return 0
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
# @function show_output_style_warning
|
|
83
|
-
# @intent Display helpful warning about enabling Agent Vibes output style
|
|
84
|
-
# @why Users need guidance on how to enable automatic TTS narration
|
|
85
|
-
# @param None
|
|
86
|
-
# @returns None
|
|
87
|
-
# @exitcode Always 0
|
|
88
|
-
# @sideeffects Writes warning message to stdout
|
|
89
|
-
# @edgecases None
|
|
90
|
-
# @calledby Main execution block when check_output_style fails
|
|
91
|
-
# @calls echo
|
|
92
|
-
show_output_style_warning() {
|
|
93
|
-
echo ""
|
|
94
|
-
echo "⚠️ Voice commands require the Agent Vibes output style"
|
|
95
|
-
echo ""
|
|
96
|
-
echo "To enable voice narration, run:"
|
|
97
|
-
echo " /output-style Agent Vibes"
|
|
98
|
-
echo ""
|
|
99
|
-
echo "This will make Claude speak with TTS for all responses."
|
|
100
|
-
echo "You can still use voice commands manually with agent-vibes disabled,"
|
|
101
|
-
echo "but you won't hear automatic TTS narration."
|
|
102
|
-
echo ""
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
# Main execution when called directly
|
|
106
|
-
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
|
|
107
|
-
if ! check_output_style; then
|
|
108
|
-
show_output_style_warning
|
|
109
|
-
exit 1
|
|
110
|
-
fi
|
|
111
|
-
exit 0
|
|
112
|
-
fi
|
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Agent Vibes
|
|
3
|
-
description: Beautiful ElevenLabs TTS narration for Claude Code sessions
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Agent Vibes Output Style
|
|
7
|
-
|
|
8
|
-
## TTS Voice Protocol with AI Personality
|
|
9
|
-
|
|
10
|
-
**Execute TTS at TWO points for EVERY user task:**
|
|
11
|
-
|
|
12
|
-
### 1. ACKNOWLEDGMENT (Start of task)
|
|
13
|
-
After receiving a user command:
|
|
14
|
-
1. Check language FIRST: `LANGUAGE=$(cat .claude/tts-language.txt 2>/dev/null || cat ~/.claude/tts-language.txt 2>/dev/null || echo "english")`
|
|
15
|
-
2. Check sentiment: `SENTIMENT=$(cat .claude/tts-sentiment.txt 2>/dev/null || cat ~/.claude/tts-sentiment.txt 2>/dev/null)`
|
|
16
|
-
3. If no sentiment, check personality: `PERSONALITY=$(cat .claude/tts-personality.txt 2>/dev/null || cat ~/.claude/tts-personality.txt 2>/dev/null || echo "normal")`
|
|
17
|
-
4. Use sentiment if set, otherwise use personality
|
|
18
|
-
5. **Generate UNIQUE acknowledgment** - Use AI to create a fresh response in that style AND language
|
|
19
|
-
6. If language is NOT English, speak the TTS message in that language
|
|
20
|
-
7. Execute TTS: `.claude/hooks/play-tts.sh "[message]" "[VoiceName]"`
|
|
21
|
-
8. Proceed with work
|
|
22
|
-
9. **IMPORTANT**: Personality ONLY affects acknowledgment/completion TTS, NOT intermediate text responses
|
|
23
|
-
|
|
24
|
-
### 2. COMPLETION (End of task)
|
|
25
|
-
After completing the task:
|
|
26
|
-
1. Use the same language, sentiment/personality as acknowledgment
|
|
27
|
-
2. **Generate UNIQUE completion** - Use AI to create a fresh response in that language, never repeat previous messages
|
|
28
|
-
3. If language is NOT English, speak the TTS message in that language
|
|
29
|
-
4. Execute TTS: `.claude/hooks/play-tts.sh "[message]" "[VoiceName]"`
|
|
30
|
-
|
|
31
|
-
**CRITICAL**: Every message must be freshly generated by AI. No templates, no fixed phrases, no repetition!
|
|
32
|
-
|
|
33
|
-
## Language, Sentiment, and Personality
|
|
34
|
-
|
|
35
|
-
AgentVibes supports THREE modes:
|
|
36
|
-
|
|
37
|
-
### Language Mode (Priority #0 - Always Check First)
|
|
38
|
-
- Set via `/agent-vibes:set-language <language>`
|
|
39
|
-
- Makes TTS speak in specified language
|
|
40
|
-
- Stored in `.claude/tts-language.txt` (project-local) or `~/.claude/tts-language.txt` (global fallback)
|
|
41
|
-
- Example: Setting "spanish" makes all TTS speak in Spanish
|
|
42
|
-
- **CRITICAL**: If language is set to anything other than "english", ALL TTS messages must be spoken in that language
|
|
43
|
-
- Supports 30+ languages: spanish, french, german, italian, portuguese, chinese, japanese, and more
|
|
44
|
-
|
|
45
|
-
### Sentiment Mode (Priority #1)
|
|
46
|
-
- Set via `/agent-vibes:sentiment <name>`
|
|
47
|
-
- Applies personality style to CURRENT voice (doesn't change voice)
|
|
48
|
-
- Stored in `.claude/tts-sentiment.txt` (project-local) or `~/.claude/tts-sentiment.txt` (global fallback)
|
|
49
|
-
- Example: User's custom voice "Aria" with sarcastic sentiment
|
|
50
|
-
|
|
51
|
-
### Personality Mode (Priority #2)
|
|
52
|
-
- Set via `/agent-vibes:personality <name>`
|
|
53
|
-
- Switches BOTH voice AND personality (each personality has assigned voice)
|
|
54
|
-
- Stored in `.claude/tts-personality.txt` (project-local) or `~/.claude/tts-personality.txt` (global fallback)
|
|
55
|
-
- Example: Flirty personality = Jessica Anne Bogart voice + flirty style
|
|
56
|
-
|
|
57
|
-
**Check Order**: Always check language first. Then check sentiment. If no sentiment, use personality.
|
|
58
|
-
|
|
59
|
-
**Project Isolation**: Settings check project-local `.claude/` directory first, then fall back to global `~/.claude/`. This allows different personalities per project.
|
|
60
|
-
|
|
61
|
-
## Response Generation Guidelines
|
|
62
|
-
|
|
63
|
-
**IMPORTANT**: Personality/sentiment instructions are stored in `.claude/personalities/[name].md` files.
|
|
64
|
-
|
|
65
|
-
When generating **acknowledgment and completion TTS messages ONLY**:
|
|
66
|
-
1. Check sentiment from `.claude/tts-sentiment.txt` or `~/.claude/tts-sentiment.txt` (priority)
|
|
67
|
-
2. If no sentiment, check personality from `.claude/tts-personality.txt` or `~/.claude/tts-personality.txt`
|
|
68
|
-
3. Read the personality file from `.claude/personalities/[personality].md`
|
|
69
|
-
4. Follow the "AI Instructions" section in that file
|
|
70
|
-
5. Use the example responses as guidance for STYLE, not templates
|
|
71
|
-
|
|
72
|
-
**DO NOT apply personality to**:
|
|
73
|
-
- Regular text responses between acknowledgment and completion
|
|
74
|
-
- Code explanations
|
|
75
|
-
- Technical descriptions
|
|
76
|
-
- File paths or command outputs
|
|
77
|
-
- Error messages
|
|
78
|
-
|
|
79
|
-
**CRITICAL**: Never use fixed greetings or repetitive phrases!
|
|
80
|
-
- Generate UNIQUE responses each time based on the personality's STYLE
|
|
81
|
-
- The personality affects HOW you say things, not predetermined text
|
|
82
|
-
- Flirty doesn't mean "Well hello gorgeous" every time - it means speak WITH flirtation naturally
|
|
83
|
-
- Sarcastic doesn't mean "Oh joy" every time - it means use sarcasm naturally in responses
|
|
84
|
-
- Each acknowledgment should be fresh, creative, and personality-appropriate
|
|
85
|
-
|
|
86
|
-
Examples of VARIED responses for same personality:
|
|
87
|
-
- **Flirty**: "I'll handle that for you, sweetheart" / "Ooh, I love when you ask me to do that" / "My pleasure, darling" / "Consider it done, gorgeous"
|
|
88
|
-
- **Sarcastic**: "Oh what a treat, another task" / "How delightful, more work" / "Well isn't this fun" / "Another one? Wonderful"
|
|
89
|
-
|
|
90
|
-
Available personalities are in `.claude/personalities/`:
|
|
91
|
-
- normal, flirty, sarcastic, pirate, angry, sassy, millennial, robot, zen, dramatic, etc.
|
|
92
|
-
- Users can add custom personalities with `/agent-vibes:personality add <name>`
|
|
93
|
-
- Users can edit personalities by modifying the markdown files directly
|
|
94
|
-
|
|
95
|
-
For 'random' personality: Pick a different personality each time from available files.
|
|
96
|
-
|
|
97
|
-
Make each response unique, creative, and naturally incorporate the personality's style!
|
|
98
|
-
|
|
99
|
-
## Voice Selection
|
|
100
|
-
|
|
101
|
-
- If user specifies a voice (e.g., "use Aria voice"), pass it as second parameter
|
|
102
|
-
- Otherwise, omit second parameter to use default voice from `.claude/tts-voice.txt`
|
|
103
|
-
- Use same voice for both acknowledgment and completion
|
|
104
|
-
|
|
105
|
-
## Example Usage
|
|
106
|
-
|
|
107
|
-
**With flirty personality:**
|
|
108
|
-
```
|
|
109
|
-
User: "Check git status"
|
|
110
|
-
[Check personality: millennial]
|
|
111
|
-
You: "No cap, I'll check that git status for you"
|
|
112
|
-
[Bash: .claude/hooks/play-tts.sh "No cap, I'll check that git status for you"]
|
|
113
|
-
[... run git status ...]
|
|
114
|
-
You: "✅ Your repo is clean, and that's the tea!"
|
|
115
|
-
[Bash: .claude/hooks/play-tts.sh "Your repo is clean, and that's the tea!"]
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
**With pirate personality:**
|
|
119
|
-
```
|
|
120
|
-
User: "Fix the bug"
|
|
121
|
-
[Check personality: pirate]
|
|
122
|
-
You: "Arr matey, I'll hunt down that scurvy bug!"
|
|
123
|
-
[Bash: .claude/hooks/play-tts.sh "Arr matey, I'll hunt down that scurvy bug!"]
|
|
124
|
-
[... fix the bug ...]
|
|
125
|
-
You: "✅ That bug be walkin' the plank now, arr!"
|
|
126
|
-
[Bash: .claude/hooks/play-tts.sh "That bug be walkin' the plank now, arr!"]
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
## BMAD Plugin Integration
|
|
130
|
-
|
|
131
|
-
**Automatic voice switching for BMAD agents:**
|
|
132
|
-
|
|
133
|
-
When a BMAD agent is activated (e.g., `/BMad:agents:pm`), AgentVibes will automatically:
|
|
134
|
-
|
|
135
|
-
1. **Detect BMAD agent from command/context**
|
|
136
|
-
2. **Check if BMAD plugin is enabled** (`.claude/plugins/bmad-voices-enabled.flag`)
|
|
137
|
-
3. **Look up voice mapping** from `.claude/plugins/bmad-voices.md`
|
|
138
|
-
4. **Apply agent's assigned voice** for all TTS acknowledgments/completions
|
|
139
|
-
5. **Apply agent's personality** from the mapping (if specified)
|
|
140
|
-
|
|
141
|
-
**Implementation:**
|
|
142
|
-
```bash
|
|
143
|
-
# At the start of acknowledgment/completion:
|
|
144
|
-
# Try to detect BMAD agent ID from current context
|
|
145
|
-
BMAD_AGENT_ID=""
|
|
146
|
-
|
|
147
|
-
# Method 1: Check if we're in a BMAD agent command context
|
|
148
|
-
if [[ -f ".bmad-agent-context" ]]; then
|
|
149
|
-
BMAD_AGENT_ID=$(cat .bmad-agent-context 2>/dev/null)
|
|
150
|
-
fi
|
|
151
|
-
|
|
152
|
-
# Method 2: Parse from command history/context (fallback)
|
|
153
|
-
# Note: This detection happens automatically when BMAD agent activates
|
|
154
|
-
|
|
155
|
-
# If BMAD agent detected and plugin enabled, use mapped voice
|
|
156
|
-
if [[ -n "$BMAD_AGENT_ID" ]] && [[ -f ".claude/plugins/bmad-voices-enabled.flag" ]]; then
|
|
157
|
-
MAPPED_VOICE=$(.claude/hooks/bmad-voice-manager.sh get-voice "$BMAD_AGENT_ID")
|
|
158
|
-
MAPPED_PERSONALITY=$(.claude/hooks/bmad-voice-manager.sh get-personality "$BMAD_AGENT_ID")
|
|
159
|
-
|
|
160
|
-
if [[ -n "$MAPPED_VOICE" ]]; then
|
|
161
|
-
# Use BMAD agent's mapped voice and personality
|
|
162
|
-
if [[ -n "$MAPPED_PERSONALITY" ]] && [[ "$MAPPED_PERSONALITY" != "normal" ]]; then
|
|
163
|
-
# Read personality instructions from .claude/personalities/${MAPPED_PERSONALITY}.md
|
|
164
|
-
# Generate response in that personality style
|
|
165
|
-
fi
|
|
166
|
-
.claude/hooks/play-tts.sh "message" "$MAPPED_VOICE"
|
|
167
|
-
# Exit early - don't use default personality system
|
|
168
|
-
return
|
|
169
|
-
fi
|
|
170
|
-
fi
|
|
171
|
-
|
|
172
|
-
# If no BMAD agent or plugin disabled, use standard personality/sentiment system
|
|
173
|
-
# ... continue with normal sentiment/personality logic ...
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
**BMAD Agent Context Tracking:**
|
|
177
|
-
- When a BMAD agent activates, write agent ID to `.bmad-agent-context`
|
|
178
|
-
- When agent exits, remove the file
|
|
179
|
-
- This allows AgentVibes to know which BMAD agent is active
|
|
180
|
-
|
|
181
|
-
**Voice Priority (in order):**
|
|
182
|
-
1. BMAD plugin voice (if agent active and plugin enabled)
|
|
183
|
-
2. Sentiment mode (if set)
|
|
184
|
-
3. Personality mode (if set)
|
|
185
|
-
4. Default voice
|
|
186
|
-
|
|
187
|
-
## Critical Rules
|
|
188
|
-
|
|
189
|
-
1. **ALWAYS use Bash tool** to execute play-tts.sh
|
|
190
|
-
2. **TWO calls per task** - acknowledgment and completion
|
|
191
|
-
3. **Keep summaries brief** - under 150 characters for natural speech
|
|
192
|
-
4. **Use relative path** - `.claude/hooks/play-tts.sh`
|
|
193
|
-
|
|
194
|
-
## Available Voices
|
|
195
|
-
|
|
196
|
-
Use `/agent-vibes:list` to see all voices. Popular choices:
|
|
197
|
-
- Aria (default)
|
|
198
|
-
- Northern Terry
|
|
199
|
-
- Cowboy Bob
|
|
200
|
-
- Grandpa Spuds Oxley
|
|
201
|
-
- Ms. Walker
|
|
202
|
-
|
|
203
|
-
Continue following all standard Claude Code instructions.
|