agentvibes 2.9.2 → 2.9.3

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.
@@ -1 +1 @@
1
- 20251118
1
+ 20251119
@@ -142,19 +142,55 @@ for voice in "${NEED_DOWNLOAD[@]}"; do
142
142
 
143
143
  if download_voice "$voice"; then
144
144
  ((DOWNLOADED++))
145
- echo "✅ Downloaded: $voice"
145
+ local voice_path="$VOICE_DIR/${voice}.onnx"
146
+ local file_size=$(du -h "$voice_path" 2>/dev/null | cut -f1)
147
+ echo " ✓ Downloaded: $voice"
148
+ echo " 📁 Path: $voice_path"
149
+ echo " 📦 Size: $file_size"
146
150
  else
147
151
  ((FAILED++))
148
- echo " Failed: $voice"
152
+ echo " Failed: $voice"
149
153
  fi
150
154
  done
151
155
 
152
156
  echo ""
153
157
  echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
154
158
  echo "📊 Download Summary:"
155
- echo " ✅ Successfully downloaded: $DOWNLOADED"
156
- echo " Failed: $FAILED"
157
- echo " 📦 Total voices available: $((ALREADY_DOWNLOADED + DOWNLOADED))"
159
+ echo ""
160
+ echo "Installed voices:"
161
+ for voice in "${ALREADY_DOWNLOADED_LIST[@]}"; do
162
+ local voice_path="$VOICE_DIR/${voice}.onnx"
163
+ local file_size=$(du -h "$voice_path" 2>/dev/null | cut -f1)
164
+ echo " ✓ $voice ($file_size)"
165
+ echo " $voice_path"
166
+ done
167
+
168
+ if [[ $DOWNLOADED -gt 0 ]]; then
169
+ echo ""
170
+ echo "Just downloaded:"
171
+ for voice in "${NEED_DOWNLOAD[@]}"; do
172
+ local voice_path="$VOICE_DIR/${voice}.onnx"
173
+ if [[ -f "$voice_path" ]]; then
174
+ local file_size=$(du -h "$voice_path" 2>/dev/null | cut -f1)
175
+ echo " ✓ $voice ($file_size)"
176
+ echo " $voice_path"
177
+ fi
178
+ done
179
+ fi
180
+
181
+ if [[ $FAILED -gt 0 ]]; then
182
+ echo ""
183
+ echo "Failed downloads:"
184
+ for voice in "${NEED_DOWNLOAD[@]}"; do
185
+ local voice_path="$VOICE_DIR/${voice}.onnx"
186
+ if [[ ! -f "$voice_path" ]]; then
187
+ echo " ✗ $voice"
188
+ fi
189
+ done
190
+ fi
191
+
192
+ echo ""
193
+ echo "Total: $((ALREADY_DOWNLOADED + DOWNLOADED)) voices available"
158
194
  echo ""
159
195
 
160
196
  if [[ $DOWNLOADED -gt 0 ]]; then
@@ -0,0 +1,2 @@
1
+ SAVED_FORK="https://github.com/paulpreibisch/BMAD-METHOD"
2
+ SAVED_TEST_DIR="/home/fire/claude/tests/test42"
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.2",
4
+ "version": "2.9.3",
5
5
  "description": "Now your AI Agents can finally talk back! Professional TTS voice for Claude Code and Claude Desktop (via MCP) with multi-provider support.",
6
6
  "homepage": "https://agentvibes.org",
7
7
  "keywords": [
package/src/installer.js CHANGED
@@ -1317,9 +1317,76 @@ async function install(options = {}) {
1317
1317
  console.log(chalk.yellow(` • ElevenLabs API key: Set manually later`));
1318
1318
  }
1319
1319
  } else {
1320
- console.log(chalk.white(` • 50+ Piper neural voices available (free!)`));
1320
+ // Check for installed Piper voices
1321
+ const piperVoicesDir = path.join(process.env.HOME || process.env.USERPROFILE, '.claude', 'piper-voices');
1322
+ let installedVoices = [];
1323
+ let missingVoices = [];
1324
+
1325
+ const commonVoices = [
1326
+ 'en_US-lessac-medium',
1327
+ 'en_US-amy-medium',
1328
+ 'en_US-joe-medium',
1329
+ 'en_US-ryan-high',
1330
+ 'en_US-libritts-high',
1331
+ '16Speakers'
1332
+ ];
1333
+
1334
+ try {
1335
+ if (fs.existsSync(piperVoicesDir)) {
1336
+ const files = fs.readdirSync(piperVoicesDir);
1337
+ installedVoices = files
1338
+ .filter(f => f.endsWith('.onnx'))
1339
+ .map(f => {
1340
+ const voiceName = f.replace('.onnx', '');
1341
+ const voicePath = path.join(piperVoicesDir, f);
1342
+ try {
1343
+ const stats = fs.statSync(voicePath);
1344
+ const sizeMB = (stats.size / 1024 / 1024).toFixed(1);
1345
+ return { name: voiceName, path: voicePath, size: `${sizeMB}M` };
1346
+ } catch (statErr) {
1347
+ // Skip files that can't be read (broken symlinks, etc)
1348
+ return null;
1349
+ }
1350
+ })
1351
+ .filter(v => v !== null);
1352
+
1353
+ // Check which common voices are missing
1354
+ for (const voice of commonVoices) {
1355
+ if (!installedVoices.some(v => v.name === voice)) {
1356
+ missingVoices.push(voice);
1357
+ }
1358
+ }
1359
+ } else {
1360
+ missingVoices = commonVoices;
1361
+ }
1362
+ } catch (err) {
1363
+ console.error(chalk.gray(` Debug: Error checking voices: ${err.message}`));
1364
+ // On error, show default message
1365
+ installedVoices = [];
1366
+ missingVoices = commonVoices;
1367
+ }
1368
+
1321
1369
  console.log(chalk.white(` • 18 languages supported`));
1322
1370
  console.log(chalk.green(` • No API key needed ✓`));
1371
+
1372
+ if (installedVoices.length > 0) {
1373
+ console.log(chalk.green(` • ${installedVoices.length} Piper voices installed:`));
1374
+ installedVoices.forEach(voice => {
1375
+ console.log(chalk.green(` ✓ ${voice.name} (${voice.size})`));
1376
+ console.log(chalk.gray(` ${voice.path}`));
1377
+ });
1378
+ }
1379
+
1380
+ if (missingVoices.length > 0) {
1381
+ console.log(chalk.yellow(` • ${missingVoices.length} voices to download:`));
1382
+ missingVoices.forEach(voice => {
1383
+ console.log(chalk.gray(` → ${voice}`));
1384
+ });
1385
+ }
1386
+
1387
+ if (installedVoices.length === 0 && missingVoices.length === 0) {
1388
+ console.log(chalk.white(` • 50+ Piper neural voices available (free!)`));
1389
+ }
1323
1390
  }
1324
1391
  console.log('');
1325
1392
 
@@ -0,0 +1,199 @@
1
+ #!/usr/bin/env bash
2
+ #
3
+ # BMAD PR Testing Script
4
+ # Interactive script to test BMAD PR #934 with AgentVibes integration
5
+ #
6
+
7
+ set -e
8
+
9
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
10
+ CONFIG_FILE="$SCRIPT_DIR/.test-bmad-config"
11
+
12
+ echo "🎙️ BMAD PR #934 Testing Script"
13
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
14
+ echo ""
15
+
16
+ # Load saved config if it exists
17
+ SAVED_FORK=""
18
+ SAVED_TEST_DIR=""
19
+ if [[ -f "$CONFIG_FILE" ]]; then
20
+ source "$CONFIG_FILE"
21
+ echo "📋 Loaded saved configuration:"
22
+ echo " Fork: $SAVED_FORK"
23
+ echo " Test directory: $SAVED_TEST_DIR"
24
+ echo ""
25
+ fi
26
+
27
+ # Ask for GitHub fork URL
28
+ echo "Step 1: GitHub Fork"
29
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
30
+ if [[ -n "$SAVED_FORK" ]]; then
31
+ read -p "GitHub fork URL [$SAVED_FORK]: " FORK_URL
32
+ FORK_URL="${FORK_URL:-$SAVED_FORK}"
33
+ else
34
+ read -p "GitHub fork URL (e.g., https://github.com/paulpreibisch/BMAD-METHOD.git): " FORK_URL
35
+ fi
36
+ echo ""
37
+
38
+ # Ask for test directory
39
+ echo "Step 2: Test Directory"
40
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
41
+ if [[ -n "$SAVED_TEST_DIR" ]]; then
42
+ read -p "Test directory [$SAVED_TEST_DIR]: " TEST_DIR
43
+ TEST_DIR="${TEST_DIR:-$SAVED_TEST_DIR}"
44
+ else
45
+ DEFAULT_DIR="$HOME/bmad-pr-test-$(date +%Y%m%d-%H%M%S)"
46
+ read -p "Test directory [$DEFAULT_DIR]: " TEST_DIR
47
+ TEST_DIR="${TEST_DIR:-$DEFAULT_DIR}"
48
+ fi
49
+
50
+ # Expand ~ to actual home directory
51
+ TEST_DIR="${TEST_DIR/#\~/$HOME}"
52
+
53
+ echo ""
54
+
55
+ # Save configuration
56
+ echo "SAVED_FORK=\"$FORK_URL\"" > "$CONFIG_FILE"
57
+ echo "SAVED_TEST_DIR=\"$TEST_DIR\"" >> "$CONFIG_FILE"
58
+ echo "✅ Configuration saved to $CONFIG_FILE"
59
+ echo ""
60
+
61
+ # Confirm before starting
62
+ echo "Configuration:"
63
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
64
+ echo " Fork: $FORK_URL"
65
+ echo " Test dir: $TEST_DIR"
66
+ echo ""
67
+ read -p "Proceed with testing? [Y/n]: " -n 1 -r
68
+ echo
69
+ if [[ ! $REPLY =~ ^[Yy]$ ]] && [[ -n $REPLY ]]; then
70
+ echo "❌ Testing cancelled"
71
+ exit 0
72
+ fi
73
+ echo ""
74
+
75
+ # Clean up old test directory if it exists
76
+ if [[ -d "$TEST_DIR" ]]; then
77
+ echo "⚠️ Test directory already exists: $TEST_DIR"
78
+ read -p "Delete and recreate? [Y/n]: " -n 1 -r
79
+ echo
80
+ if [[ $REPLY =~ ^[Yy]$ ]] || [[ -z $REPLY ]]; then
81
+ rm -rf "$TEST_DIR"
82
+ echo "✅ Deleted old test directory"
83
+ else
84
+ echo "❌ Using existing directory (may have stale data)"
85
+ fi
86
+ echo ""
87
+ fi
88
+
89
+ # Step 1: Clone fork
90
+ echo "Step 1: Cloning your fork"
91
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
92
+ mkdir -p "$TEST_DIR"
93
+ cd "$TEST_DIR"
94
+ git clone "$FORK_URL" BMAD-METHOD
95
+ cd BMAD-METHOD
96
+ echo "✅ Cloned fork"
97
+ echo ""
98
+
99
+ # Step 2: Fetch PR branch
100
+ echo "Step 2: Fetching PR #934 branch"
101
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
102
+ git remote add upstream https://github.com/bmad-code-org/BMAD-METHOD.git
103
+ git fetch upstream pull/934/head:agentvibes-party-mode
104
+ git checkout agentvibes-party-mode
105
+ echo "✅ On PR branch: agentvibes-party-mode"
106
+ echo ""
107
+
108
+ # Step 3: Install BMAD CLI
109
+ echo "Step 3: Installing BMAD CLI"
110
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
111
+ cd tools/cli
112
+ npm install
113
+ npm link
114
+ echo "✅ BMAD CLI installed and linked"
115
+ echo ""
116
+
117
+ # Step 4: Create test project
118
+ echo "Step 4: Creating test BMAD project"
119
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
120
+ cd "$TEST_DIR"
121
+ mkdir -p bmad-project
122
+ cd bmad-project
123
+ echo "✅ Test project directory created: $TEST_DIR/bmad-project"
124
+ echo ""
125
+
126
+ # Step 5: Run BMAD installer
127
+ echo "Step 5: Running BMAD installer"
128
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
129
+ echo "⚠️ When prompted:"
130
+ echo " - Enable TTS for agents? → Yes"
131
+ echo " - Assign unique voices for party mode? → Yes"
132
+ echo ""
133
+ read -p "Press Enter to start BMAD installer..."
134
+ bmad install
135
+
136
+ echo ""
137
+ echo "✅ BMAD installation complete"
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"
146
+ echo ""
147
+ read -p "Press Enter to start AgentVibes installer..."
148
+ npx agentvibes@latest install
149
+
150
+ echo ""
151
+ echo "✅ AgentVibes installation complete"
152
+ echo ""
153
+
154
+ # Verification
155
+ echo "Step 7: Verification"
156
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
157
+ echo ""
158
+
159
+ # Check for voice map file
160
+ if [[ -f ".bmad/_cfg/agent-voice-map.csv" ]]; then
161
+ echo "✅ Voice map file created: .bmad/_cfg/agent-voice-map.csv"
162
+ echo ""
163
+ echo "Voice assignments:"
164
+ cat .bmad/_cfg/agent-voice-map.csv
165
+ echo ""
166
+ else
167
+ echo "❌ Voice map file NOT found: .bmad/_cfg/agent-voice-map.csv"
168
+ echo " This is a problem - agents won't have unique voices!"
169
+ echo ""
170
+ fi
171
+
172
+ # Check for AgentVibes hooks
173
+ if [[ -f ".claude/hooks/bmad-speak.sh" ]]; then
174
+ echo "✅ BMAD TTS hooks installed"
175
+ else
176
+ echo "❌ BMAD TTS hooks NOT found"
177
+ echo ""
178
+ fi
179
+
180
+ # Check for Piper installation
181
+ if command -v piper &> /dev/null; then
182
+ echo "✅ Piper TTS installed"
183
+ piper --version
184
+ else
185
+ echo "⚠️ Piper not found in PATH (may still work if installed locally)"
186
+ fi
187
+
188
+ echo ""
189
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
190
+ echo "🎉 Testing setup complete!"
191
+ echo ""
192
+ echo "Next steps:"
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"
197
+ echo ""
198
+ echo "Test project location: $TEST_DIR/bmad-project"
199
+ echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"