agentvibes 2.9.4 → 2.9.5
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/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 +0 -29
- package/test-bmad-pr.sh +274 -79
- 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! 🎉
|
|
@@ -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/test44"
|
|
@@ -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 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 agentvibes@latest test-bmad-pr <PR_NUMBER>
|
|
30
|
+
```
|
|
21
31
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
32
|
+
For example:
|
|
33
|
+
```bash
|
|
34
|
+
npx 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 Code
|
|
78
|
+
claude-code
|
|
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.5",
|
|
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
|
@@ -580,33 +580,6 @@ 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
|
-
|
|
610
583
|
/**
|
|
611
584
|
* Copy plugin files to target directory
|
|
612
585
|
* @param {string} targetDir - Target installation directory
|
|
@@ -1274,7 +1247,6 @@ async function install(options = {}) {
|
|
|
1274
1247
|
const commandFileCount = await copyCommandFiles(targetDir, spinner);
|
|
1275
1248
|
const hookFileCount = await copyHookFiles(targetDir, spinner);
|
|
1276
1249
|
const personalityFileCount = await copyPersonalityFiles(targetDir, spinner);
|
|
1277
|
-
const outputStyleCount = await copyOutputStyles(targetDir, spinner);
|
|
1278
1250
|
const pluginFileCount = await copyPluginFiles(targetDir, spinner);
|
|
1279
1251
|
|
|
1280
1252
|
// Configure hooks and manifests
|
|
@@ -1303,7 +1275,6 @@ async function install(options = {}) {
|
|
|
1303
1275
|
console.log(chalk.white(` • ${commandFileCount} slash commands installed`));
|
|
1304
1276
|
console.log(chalk.white(` • ${hookFileCount} TTS scripts installed`));
|
|
1305
1277
|
console.log(chalk.white(` • ${personalityFileCount} personality templates installed`));
|
|
1306
|
-
console.log(chalk.white(` • ${outputStyleCount} output styles installed`));
|
|
1307
1278
|
if (pluginFileCount > 0) {
|
|
1308
1279
|
console.log(chalk.white(` • ${pluginFileCount} BMAD plugin files installed`));
|
|
1309
1280
|
}
|
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 "
|
|
179
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
180
|
+
echo "📋 Summary"
|
|
181
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
182
|
+
echo ""
|
|
183
|
+
echo " Repository: $REPO_URL"
|
|
184
|
+
echo " Branch: $BRANCH_NAME"
|
|
185
|
+
echo " Test dir: $TEST_DIR"
|
|
66
186
|
echo ""
|
|
67
|
-
read -p "Proceed with
|
|
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,196 @@ 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/7: 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}"
|
|
228
|
+
echo ""
|
|
229
|
+
|
|
230
|
+
# Step 2: Checkout branch (different logic for PR vs fork)
|
|
231
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
232
|
+
echo "🔀 Step 2/7: Checking out branch"
|
|
233
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
97
234
|
echo ""
|
|
98
235
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
echo "
|
|
102
|
-
git remote add upstream https://github.com/bmad-code-org/BMAD-METHOD.git
|
|
103
|
-
git fetch upstream pull/934/head
|
|
104
|
-
git checkout
|
|
105
|
-
echo "
|
|
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/7: 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/7: 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
276
|
# Step 5: Run BMAD installer
|
|
127
|
-
echo "
|
|
128
|
-
echo "
|
|
129
|
-
echo "
|
|
130
|
-
echo "
|
|
131
|
-
echo
|
|
277
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
278
|
+
echo "⚙️ Step 5/7: Running BMAD installer"
|
|
279
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
280
|
+
echo ""
|
|
281
|
+
echo -e "${YELLOW}Important: When prompted during installation:${NC}"
|
|
282
|
+
echo -e " • Enable TTS for agents? → ${GREEN}Yes${NC}"
|
|
283
|
+
echo -e " • Assign unique voices for party mode? → ${GREEN}Yes${NC}"
|
|
132
284
|
echo ""
|
|
133
285
|
read -p "Press Enter to start BMAD installer..."
|
|
134
286
|
bmad install
|
|
135
287
|
|
|
136
288
|
echo ""
|
|
137
|
-
echo "
|
|
289
|
+
echo -e "${GREEN}✓ BMAD installation complete${NC}"
|
|
138
290
|
echo ""
|
|
139
291
|
|
|
140
292
|
# Step 6: Install AgentVibes
|
|
141
|
-
echo "
|
|
142
|
-
echo "
|
|
143
|
-
echo "
|
|
144
|
-
echo "
|
|
145
|
-
echo
|
|
293
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
294
|
+
echo "🎙️ Step 6/7: Installing AgentVibes"
|
|
295
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
296
|
+
echo ""
|
|
297
|
+
echo -e "${YELLOW}Recommended: Choose Piper (free) for testing${NC}"
|
|
298
|
+
echo -e " • Provider: ${GREEN}Piper${NC} (free, local TTS)"
|
|
299
|
+
echo -e " • Download voices: ${GREEN}Yes${NC}"
|
|
146
300
|
echo ""
|
|
147
301
|
read -p "Press Enter to start AgentVibes installer..."
|
|
148
302
|
npx agentvibes@latest install
|
|
149
303
|
|
|
150
304
|
echo ""
|
|
151
|
-
echo "
|
|
305
|
+
echo -e "${GREEN}✓ AgentVibes installation complete${NC}"
|
|
152
306
|
echo ""
|
|
153
307
|
|
|
154
|
-
# Verification
|
|
155
|
-
echo "
|
|
156
|
-
echo "
|
|
308
|
+
# Step 7: Verification
|
|
309
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
310
|
+
echo "✅ Step 7/7: Verifying installation"
|
|
311
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
157
312
|
echo ""
|
|
158
313
|
|
|
314
|
+
VERIFICATION_PASSED=true
|
|
315
|
+
|
|
159
316
|
# Check for voice map file
|
|
160
317
|
if [[ -f ".bmad/_cfg/agent-voice-map.csv" ]]; then
|
|
161
|
-
echo "
|
|
318
|
+
echo -e "${GREEN}✓ Voice map file created${NC}"
|
|
319
|
+
echo " Location: .bmad/_cfg/agent-voice-map.csv"
|
|
162
320
|
echo ""
|
|
163
|
-
echo "Voice assignments:"
|
|
164
|
-
cat .bmad/_cfg/agent-voice-map.csv
|
|
321
|
+
echo " Voice assignments:"
|
|
322
|
+
cat .bmad/_cfg/agent-voice-map.csv | sed 's/^/ /'
|
|
165
323
|
echo ""
|
|
166
324
|
else
|
|
167
|
-
echo "
|
|
168
|
-
echo "
|
|
325
|
+
echo -e "${RED}✗ Voice map file NOT found${NC}"
|
|
326
|
+
echo " Expected: .bmad/_cfg/agent-voice-map.csv"
|
|
327
|
+
echo " ${YELLOW}Warning: Agents may not have unique voices!${NC}"
|
|
169
328
|
echo ""
|
|
329
|
+
VERIFICATION_PASSED=false
|
|
170
330
|
fi
|
|
171
331
|
|
|
172
332
|
# Check for AgentVibes hooks
|
|
173
333
|
if [[ -f ".claude/hooks/bmad-speak.sh" ]]; then
|
|
174
|
-
echo "
|
|
334
|
+
echo -e "${GREEN}✓ BMAD TTS hooks installed${NC}"
|
|
335
|
+
echo " Location: .claude/hooks/bmad-speak.sh"
|
|
175
336
|
else
|
|
176
|
-
echo "
|
|
177
|
-
echo ""
|
|
337
|
+
echo -e "${RED}✗ BMAD TTS hooks NOT found${NC}"
|
|
338
|
+
echo " Expected: .claude/hooks/bmad-speak.sh"
|
|
339
|
+
VERIFICATION_PASSED=false
|
|
178
340
|
fi
|
|
341
|
+
echo ""
|
|
179
342
|
|
|
180
343
|
# Check for Piper installation
|
|
181
344
|
if command -v piper &> /dev/null; then
|
|
182
|
-
|
|
183
|
-
|
|
345
|
+
PIPER_VERSION=$(piper --version 2>&1 || echo "unknown")
|
|
346
|
+
echo -e "${GREEN}✓ Piper TTS installed${NC}"
|
|
347
|
+
echo " Version: $PIPER_VERSION"
|
|
348
|
+
elif [[ -f ".agentvibes/providers/piper/piper" ]]; then
|
|
349
|
+
echo -e "${GREEN}✓ Piper TTS installed (local)${NC}"
|
|
350
|
+
echo " Location: .agentvibes/providers/piper/piper"
|
|
184
351
|
else
|
|
185
|
-
echo "
|
|
352
|
+
echo -e "${YELLOW}⚠ Piper not detected${NC}"
|
|
353
|
+
echo " (May still work if using ElevenLabs)"
|
|
186
354
|
fi
|
|
355
|
+
echo ""
|
|
187
356
|
|
|
357
|
+
# Final status
|
|
358
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
359
|
+
if [[ "$VERIFICATION_PASSED" == true ]]; then
|
|
360
|
+
echo -e "${GREEN}🎉 Setup Complete - All Checks Passed!${NC}"
|
|
361
|
+
else
|
|
362
|
+
echo -e "${YELLOW}⚠️ Setup Complete - With Warnings${NC}"
|
|
363
|
+
echo ""
|
|
364
|
+
echo "Some verification checks failed. The installation may still work,"
|
|
365
|
+
echo "but you might experience issues with party mode voices."
|
|
366
|
+
fi
|
|
367
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
368
|
+
echo ""
|
|
369
|
+
echo -e "${BLUE}Next Steps:${NC}"
|
|
370
|
+
echo ""
|
|
371
|
+
echo " 1. Navigate to test project:"
|
|
372
|
+
echo -e " ${GREEN}cd $TEST_DIR/bmad-project${NC}"
|
|
373
|
+
echo ""
|
|
374
|
+
echo " 2. Start Claude Code session:"
|
|
375
|
+
echo -e " ${GREEN}claude-code${NC}"
|
|
376
|
+
echo ""
|
|
377
|
+
echo " 3. Test party mode:"
|
|
378
|
+
echo -e " ${GREEN}/bmad:core:workflows:party-mode${NC}"
|
|
379
|
+
echo ""
|
|
380
|
+
echo " 4. Verify each agent speaks with a unique voice!"
|
|
381
|
+
echo ""
|
|
382
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
383
|
+
echo -e "${BLUE}Troubleshooting:${NC}"
|
|
384
|
+
echo ""
|
|
385
|
+
echo " • No audio? Check: .claude/hooks/play-tts.sh exists"
|
|
386
|
+
echo " • Same voice for all agents? Check: .bmad/_cfg/agent-voice-map.csv"
|
|
387
|
+
echo " • Test current voice: /agent-vibes:whoami"
|
|
388
|
+
echo " • List available voices: /agent-vibes:list"
|
|
188
389
|
echo ""
|
|
189
|
-
echo "
|
|
190
|
-
echo "
|
|
390
|
+
echo -e "${BLUE}Report Issues:${NC}"
|
|
391
|
+
echo " https://github.com/bmad-code-org/BMAD-METHOD/pull/934"
|
|
191
392
|
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"
|
|
393
|
+
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
197
394
|
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.
|