BMAD-METHOD/test-bmad-pr.sh

382 lines
15 KiB
Bash
Raw Normal View History

Add Text-to-Speech Integration via TTS_INJECTION System (#934) * feat: Add provider-agnostic TTS integration via injection point system Implements comprehensive Text-to-Speech integration for BMAD agents using a generic TTS_INJECTION marker system. When AgentVibes (or any compatible TTS provider) is installed, all BMAD agents can speak their responses with unique AI voices. ## Key Features **Provider-Agnostic Architecture** - Uses generic `TTS_INJECTION` markers instead of vendor-specific naming - Future-proof for multiple TTS providers beyond AgentVibes - Clean separation - BMAD stays TTS-agnostic, providers handle injection **Installation Flow** - BMAD → AgentVibes: TTS instructions injected when AgentVibes detects existing BMAD installation - AgentVibes → BMAD: TTS instructions injected during BMAD installation when AgentVibes detected - User must manually create voice assignment file when AgentVibes installs first (documented limitation) **Party Mode Voice Support** - Each agent speaks with unique assigned voice in multi-agent discussions - PM, Architect, Developer, Analyst, UX Designer, etc. - all with distinct voices **Zero Breaking Changes** - Fully backward compatible - works without any TTS provider - `TTS_INJECTION` markers are benign HTML comments if not processed - No changes to existing agent behavior or non-TTS workflows ## Implementation Details **Files Modified:** - `tools/cli/installers/lib/core/installer.js` - TTS injection processing logic - `tools/cli/lib/ui.js` - AgentVibes detection and installation prompts - `tools/cli/commands/install.js` - Post-install guidance for AgentVibes setup - `src/utility/models/fragments/activation-rules.xml` - TTS_INJECTION marker for agents - `src/core/workflows/party-mode/instructions.md` - TTS_INJECTION marker for party mode **Injection Point System:** ```xml <rules> - ALWAYS communicate in {communication_language} <!-- TTS_INJECTION:agent-tts --> - Stay in character until exit selected </rules> ``` When AgentVibes is detected, the installer replaces this marker with: ``` - When responding to user messages, speak your responses using TTS: Call: `.claude/hooks/bmad-speak.sh '{agent-id}' '{response-text}'` after each response IMPORTANT: Use single quotes - do NOT escape special characters like ! or $ ``` **Special Character Handling:** - Explicit guidance to use single quotes without escaping - Prevents "backslash exclamation" artifacts in speech **User Experience:** ``` User: "How should we architect this feature?" Architect: [Text response] + 🔊 [Professional voice explains architecture] ``` Party Mode: ``` PM (John): "I'll focus on user value..." 🔊 [Male professional voice] UX Designer (Sara): "From a user perspective..." 🔊 [Female voice] Architect (Marcus): "The technical approach..." 🔊 [Male technical voice] ``` ## Testing **Unit Tests:** ✅ 62/62 passing - 49/49 schema validation tests - 13/13 installation component tests **Integration Testing:** - ✅ BMAD → AgentVibes (automatic injection) - ✅ AgentVibes → BMAD (automatic injection) - ✅ No TTS provider (markers remain as comments) ## Documentation Comprehensive testing guide created with: - Both installation scenario walkthroughs - Verification commands and expected outputs - Troubleshooting guidance ## Known Limitations **AgentVibes → BMAD Installation Order:** When AgentVibes installs first, voice assignment file must be created manually: ```bash mkdir -p .bmad/_cfg cat > .bmad/_cfg/agent-voice-map.csv << 'EOF' agent_id,voice_name pm,en_US-ryan-high architect,en_US-danny-low dev,en_US-joe-medium EOF ``` This limitation exists to prevent false legacy v4 detection warnings from BMAD installer. **Recommended:** Install BMAD first, then AgentVibes for automatic voice assignment. ## Related Work **Companion Implementation:** - Repository: paulpreibisch/AgentVibes - Commits: 6 commits implementing injection processing and voice routing - Features: Retroactive injection, file path extraction, escape stripping **GitHub Issues:** - paulpreibisch/AgentVibes#36 - BMAD agent ID support ## Breaking Changes None. Feature is opt-in and requires separate TTS provider installation. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: Enforce project hooks over global hooks in party mode before, claude would sometimes favor global agent vibes hooks over project specific * feat: Automate AgentVibes installer invocation after BMAD install Instead of showing manual installation instructions, the installer now: - Prompts "Press Enter to start AgentVibes installer..." - Automatically runs npx agentvibes@latest install - Handles errors gracefully with fallback instructions This provides a seamless installation flow matching the test script's interactive approach. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * docs: Add automated testing script and guide for PR #934 Added comprehensive testing tools for AgentVibes party mode integration: - test-bmad-pr.sh: Fully automated installation and verification script - Interactive mode selection (official PR or custom fork) - Automatic BMAD CLI setup and linking - AgentVibes installation with guided prompts - Built-in verification checks for voice maps and hooks - Saved configuration for quick re-testing - TESTING.md: Complete testing documentation - Quick start with one-line npx command - Manual installation alternative - Troubleshooting guide - Cleanup instructions Testers can now run a single command to test the full AgentVibes integration without needing to understand the complex setup process. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: Add shell: true to npx execSync to prevent permission denied error The execSync call for 'npx agentvibes@latest install' was failing with 'Permission denied' because the shell was trying to execute 'agentvibes@latest' directly instead of passing it as an argument to npx. Adding shell: true ensures the command runs in a proper shell context where npx can correctly interpret the @latest version syntax. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: Remove duplicate AgentVibes installation step from test script The test script was calling AgentVibes installer twice: 1. BMAD installer now automatically runs AgentVibes (new feature) 2. Test script had a separate Step 6 that also ran AgentVibes This caused the installer to run twice, with the second call failing because it was already installed. Changes: - Removed redundant Step 6 (AgentVibes installation) - Updated Step 5 to indicate it includes AgentVibes - Updated step numbers from 7 to 6 throughout - Added guidance that AgentVibes runs automatically Now the flow is cleaner: BMAD installer handles everything! 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: Address bmadcode review - preserve variables and move TTS logic to injection Fixes requested changes from PR review: 1. Preserve {bmad_folder} variable placeholder - Changed: {project_root}/.bmad/core/tasks/workflow.xml - To: {project_root}/{bmad_folder}/core/tasks/workflow.xml - Allows users to choose custom BMAD folder names during installation 2. Move TTS-specific hook guidance to injection system - Removed hardcoded hook enforcement from source files - Added hook guidance to processTTSInjectionPoints() in installer.js - Now only appears when AgentVibes is installed (via TTS_INJECTION) 3. Maintain TTS-agnostic source architecture - Source files remain clean of TTS-specific instructions - TTS details injected at install-time only when needed - Preserves provider-agnostic design principle Changes made: - src/core/workflows/party-mode/instructions.md - Reverted .bmad to {bmad_folder} variable - Replaced hardcoded hook guidance with <!-- TTS_INJECTION:party-mode --> - Removed <note> about play-tts.sh hook location - tools/cli/installers/lib/core/installer.js - Added hook enforcement to party-mode injection replacement - Guidance now injected only when enableAgentVibes is true Addresses review comments from bmadcode: - "needs to remain the variable. it will get set in the file at the install destination." - "items like this we will need to inject if user is using claude and TTS" 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: Change 'claude-code' to 'claude' in test script instructions The correct command to start Claude is 'claude', not 'claude-code'. Updated line 362-363 in test-bmad-pr.sh to show the correct command. * fix: Remove npm link from test script to avoid global namespace pollution - Removed 'npm link' command that was installing BMAD globally - Changed 'bmad install' to direct node execution using local clone - Updated success message to reflect no global installation This keeps testing fully isolated and prevents conflicts with: - Existing BMAD installations - Future official BMAD installs - Orphaned symlinks when test directory is deleted The test script now runs completely self-contained without modifying the user's global npm environment. --------- Co-authored-by: Claude Code <claude@anthropic.com> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Paul Preibisch <paul@paulpreibisch.com> Co-authored-by: Brian <bmadcode@gmail.com>
2025-11-26 08:51:57 -07:00
#!/usr/bin/env bash
#
# BMAD PR Testing Script
# Interactive script to test BMAD PR #934 with AgentVibes integration
#
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
CONFIG_FILE="$SCRIPT_DIR/.test-bmad-config"
# Colors
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color
clear
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "🎙️ BMAD AgentVibes Party Mode Testing Script"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo -e "${BLUE}What this script does:${NC}"
echo ""
echo " This script automates the process of testing BMAD's AgentVibes"
echo " integration (PR #934), which adds multi-agent party mode with"
echo " unique voices for each BMAD agent."
echo ""
echo -e "${BLUE}The script will:${NC}"
echo ""
echo " 1. Clone the BMAD repository"
echo " 2. Checkout the PR branch with party mode features"
echo " 3. Install BMAD CLI tools locally"
echo " 4. Create a test BMAD project"
echo " 5. Run BMAD installer (automatically installs AgentVibes)"
echo " 6. Verify the installation"
echo ""
echo -e "${YELLOW}Prerequisites:${NC}"
echo " • Node.js and npm installed"
echo " • Git installed"
echo " • ~500MB free disk space"
echo " • 10-15 minutes for complete setup"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
read -p "Ready to continue? [Y/n]: " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]] && [[ -n $REPLY ]]; then
echo "❌ Setup cancelled"
exit 0
fi
clear
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "🔧 Testing Mode Selection"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "Choose how you want to test:"
echo ""
echo " 1) Test official BMAD PR #934 (recommended for most users)"
echo " • Uses: github.com/bmad-code-org/BMAD-METHOD"
echo " • Branch: PR #934 (agentvibes-party-mode)"
echo " • Best for: Testing the official PR before it's merged"
echo ""
echo " 2) Test your forked repository"
echo " • Uses: Your GitHub fork"
echo " • Branch: Your custom branch (you choose)"
echo " • Best for: Testing your own changes or modifications"
echo ""
# Load saved config if it exists
SAVED_MODE=""
SAVED_FORK=""
SAVED_BRANCH=""
SAVED_TEST_DIR=""
if [[ -f "$CONFIG_FILE" ]]; then
source "$CONFIG_FILE"
fi
if [[ -n "$SAVED_MODE" ]]; then
echo -e "${BLUE}Last used: Mode $SAVED_MODE${NC}"
[[ -n "$SAVED_FORK" ]] && echo " Fork: $SAVED_FORK"
[[ -n "$SAVED_BRANCH" ]] && echo " Branch: $SAVED_BRANCH"
echo ""
fi
read -p "Select mode [1/2]: " MODE_CHOICE
echo ""
# Validate mode choice
while [[ ! "$MODE_CHOICE" =~ ^[12]$ ]]; do
echo -e "${RED}Invalid choice. Please enter 1 or 2.${NC}"
read -p "Select mode [1/2]: " MODE_CHOICE
echo ""
done
# Configure based on mode
if [[ "$MODE_CHOICE" == "1" ]]; then
# Official PR mode
REPO_URL="https://github.com/bmad-code-org/BMAD-METHOD.git"
BRANCH_NAME="agentvibes-party-mode"
FETCH_PR=true
echo -e "${GREEN}✓ Using official BMAD repository${NC}"
echo " Repository: $REPO_URL"
echo " Will fetch: PR #934 into branch '$BRANCH_NAME'"
echo ""
else
# Fork mode
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "🍴 Fork Configuration"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
if [[ -n "$SAVED_FORK" ]]; then
read -p "GitHub fork URL [$SAVED_FORK]: " FORK_INPUT
REPO_URL="${FORK_INPUT:-$SAVED_FORK}"
else
echo "Enter your forked repository URL:"
echo "(e.g., https://github.com/yourusername/BMAD-METHOD.git)"
read -p "Fork URL: " REPO_URL
fi
echo ""
if [[ -n "$SAVED_BRANCH" ]]; then
read -p "Branch name [$SAVED_BRANCH]: " BRANCH_INPUT
BRANCH_NAME="${BRANCH_INPUT:-$SAVED_BRANCH}"
else
echo "Enter the branch name to test:"
echo "(e.g., agentvibes-party-mode, main, feature-xyz)"
read -p "Branch: " BRANCH_NAME
fi
echo ""
FETCH_PR=false
echo -e "${GREEN}✓ Using your fork${NC}"
echo " Repository: $REPO_URL"
echo " Branch: $BRANCH_NAME"
echo ""
fi
# Ask for test directory
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📁 Test Directory"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
if [[ -n "$SAVED_TEST_DIR" ]]; then
read -p "Test directory [$SAVED_TEST_DIR]: " TEST_DIR
TEST_DIR="${TEST_DIR:-$SAVED_TEST_DIR}"
else
DEFAULT_DIR="$HOME/bmad-pr-test-$(date +%Y%m%d-%H%M%S)"
echo "Where should we create the test environment?"
read -p "Test directory [$DEFAULT_DIR]: " TEST_DIR
TEST_DIR="${TEST_DIR:-$DEFAULT_DIR}"
fi
# Expand ~ to actual home directory
TEST_DIR="${TEST_DIR/#\~/$HOME}"
echo ""
# Save configuration
echo "SAVED_MODE=\"$MODE_CHOICE\"" > "$CONFIG_FILE"
[[ "$MODE_CHOICE" == "2" ]] && echo "SAVED_FORK=\"$REPO_URL\"" >> "$CONFIG_FILE"
[[ "$MODE_CHOICE" == "2" ]] && echo "SAVED_BRANCH=\"$BRANCH_NAME\"" >> "$CONFIG_FILE"
echo "SAVED_TEST_DIR=\"$TEST_DIR\"" >> "$CONFIG_FILE"
echo -e "${GREEN}✓ Configuration saved${NC}"
echo ""
# Confirm before starting
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📋 Summary"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo " Repository: $REPO_URL"
echo " Branch: $BRANCH_NAME"
echo " Test dir: $TEST_DIR"
echo ""
read -p "Proceed with setup? [Y/n]: " -n 1 -r
echo
echo ""
if [[ ! $REPLY =~ ^[Yy]$ ]] && [[ -n $REPLY ]]; then
echo "❌ Setup cancelled"
exit 0
fi
# Clean up old test directory if it exists
if [[ -d "$TEST_DIR" ]]; then
echo "⚠️ Test directory already exists: $TEST_DIR"
read -p "Delete and recreate? [Y/n]: " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]] || [[ -z $REPLY ]]; then
rm -rf "$TEST_DIR"
echo -e "${GREEN}✓ Deleted old test directory${NC}"
else
echo -e "${YELLOW}⚠ Using existing directory (may have stale data)${NC}"
fi
echo ""
fi
clear
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "🚀 Starting Installation"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
# Step 1: Clone repository
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📥 Step 1/6: Cloning repository"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
mkdir -p "$TEST_DIR"
cd "$TEST_DIR"
git clone "$REPO_URL" BMAD-METHOD
cd BMAD-METHOD
echo ""
echo -e "${GREEN}✓ Repository cloned${NC}"
echo ""
# Step 2: Checkout branch (different logic for PR vs fork)
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "🔀 Step 2/6: Checking out branch"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
if [[ "$FETCH_PR" == true ]]; then
# Fetch PR from upstream
echo "Fetching PR #934 from upstream..."
git remote add upstream https://github.com/bmad-code-org/BMAD-METHOD.git
git fetch upstream pull/934/head:$BRANCH_NAME
git checkout $BRANCH_NAME
echo ""
echo -e "${GREEN}✓ Checked out PR branch: $BRANCH_NAME${NC}"
else
# Just checkout the specified branch from fork
git checkout $BRANCH_NAME
echo ""
echo -e "${GREEN}✓ Checked out branch: $BRANCH_NAME${NC}"
fi
echo ""
# Step 3: Install BMAD CLI
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📦 Step 3/6: Installing BMAD CLI"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
cd tools/cli
npm install
echo ""
echo -e "${GREEN}✓ BMAD CLI dependencies installed${NC}"
echo ""
# Step 4: Create test project
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📁 Step 4/6: Creating test project"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
cd "$TEST_DIR"
mkdir -p bmad-project
cd bmad-project
echo -e "${GREEN}✓ Test project directory created${NC}"
echo " Location: $TEST_DIR/bmad-project"
echo ""
# Step 5: Run BMAD installer (includes AgentVibes setup)
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "⚙️ Step 5/6: Running BMAD installer with AgentVibes"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo -e "${YELLOW}Important: When prompted during installation:${NC}"
echo -e " • Enable TTS for agents? → ${GREEN}Yes${NC}"
echo -e " • Assign unique voices for party mode? → ${GREEN}Yes${NC}"
echo ""
echo -e "${YELLOW}AgentVibes will start automatically after BMAD installation.${NC}"
echo -e "${YELLOW}Recommended TTS settings:${NC}"
echo -e " • Provider: ${GREEN}Piper${NC} (free, local TTS)"
echo -e " • Download voices: ${GREEN}Yes${NC}"
echo ""
read -p "Press Enter to start BMAD installer..."
node "$TEST_DIR/BMAD-METHOD/tools/cli/bin/bmad.js" install
echo ""
echo -e "${GREEN}✓ BMAD and AgentVibes installation complete${NC}"
echo ""
# Step 6: Verification
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "✅ Step 6/6: Verifying installation"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
VERIFICATION_PASSED=true
# Check for voice map file
if [[ -f ".bmad/_cfg/agent-voice-map.csv" ]]; then
echo -e "${GREEN}✓ Voice map file created${NC}"
echo " Location: .bmad/_cfg/agent-voice-map.csv"
echo ""
echo " Voice assignments:"
cat .bmad/_cfg/agent-voice-map.csv | sed 's/^/ /'
echo ""
else
echo -e "${RED}✗ Voice map file NOT found${NC}"
echo " Expected: .bmad/_cfg/agent-voice-map.csv"
echo " ${YELLOW}Warning: Agents may not have unique voices!${NC}"
echo ""
VERIFICATION_PASSED=false
fi
# Check for AgentVibes hooks
if [[ -f ".claude/hooks/bmad-speak.sh" ]]; then
echo -e "${GREEN}✓ BMAD TTS hooks installed${NC}"
echo " Location: .claude/hooks/bmad-speak.sh"
else
echo -e "${RED}✗ BMAD TTS hooks NOT found${NC}"
echo " Expected: .claude/hooks/bmad-speak.sh"
VERIFICATION_PASSED=false
fi
echo ""
# Check for Piper installation
if command -v piper &> /dev/null; then
PIPER_VERSION=$(piper --version 2>&1 || echo "unknown")
echo -e "${GREEN}✓ Piper TTS installed${NC}"
echo " Version: $PIPER_VERSION"
elif [[ -f ".agentvibes/providers/piper/piper" ]]; then
echo -e "${GREEN}✓ Piper TTS installed (local)${NC}"
echo " Location: .agentvibes/providers/piper/piper"
else
echo -e "${YELLOW}⚠ Piper not detected${NC}"
echo " (May still work if using ElevenLabs)"
fi
echo ""
# Final status
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
if [[ "$VERIFICATION_PASSED" == true ]]; then
echo -e "${GREEN}🎉 Setup Complete - All Checks Passed!${NC}"
else
echo -e "${YELLOW}⚠️ Setup Complete - With Warnings${NC}"
echo ""
echo "Some verification checks failed. The installation may still work,"
echo "but you might experience issues with party mode voices."
fi
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo -e "${BLUE}Next Steps:${NC}"
echo ""
echo " 1. Navigate to test project:"
echo -e " ${GREEN}cd $TEST_DIR/bmad-project${NC}"
echo ""
echo " 2. Start Claude session:"
echo -e " ${GREEN}claude${NC}"
echo ""
echo " 3. Test party mode:"
echo -e " ${GREEN}/bmad:core:workflows:party-mode${NC}"
echo ""
echo " 4. Verify each agent speaks with a unique voice!"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo -e "${BLUE}Troubleshooting:${NC}"
echo ""
echo " • No audio? Check: .claude/hooks/play-tts.sh exists"
echo " • Same voice for all agents? Check: .bmad/_cfg/agent-voice-map.csv"
echo " • Test current voice: /agent-vibes:whoami"
echo " • List available voices: /agent-vibes:list"
echo ""
echo -e "${BLUE}Report Issues:${NC}"
echo " https://github.com/bmad-code-org/BMAD-METHOD/pull/934"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""