agentvibes 2.17.0 → 2.17.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/commands/release.md +7 -4
- package/.claude/config/audio-effects.cfg +1 -1
- package/.claude/config/audio-effects.cfg.sample +1 -1
- package/.claude/hooks/play-tts-piper.sh +11 -6
- package/.claude/hooks/voice-manager.sh +8 -5
- package/README.md +9 -9
- package/package.json +9 -2
- package/src/cli/list-voices.js +1 -1
- package/src/installer.js +13 -9
- package/src/utils/dependency-checker.js +1 -1
- package/mcp-server/bmad-bundles/team-all-original.txt +0 -12880
- package/mcp-server/bmad-bundles/team-no-ui-original.txt +0 -9007
- package/mcp-server/bmad-bundles/team-planning-original.txt +0 -10454
- package/mcp-server/voices/16Speakers.onnx +0 -0
- package/mcp-server/voices/16Speakers.onnx.json +0 -514
- package/mcp-server/voices/jenny.onnx +0 -0
- package/mcp-server/voices/jenny.onnx.json +0 -497
- package/mcp-server/voices/kristin.onnx +0 -0
- package/mcp-server/voices/kristin.onnx.json +0 -497
- package/mcp-server/voices/preview-16speakers.sh +0 -62
- package/mcp-server/voices/previews/speaker_0_Cori_Samuel.wav +0 -0
- package/mcp-server/voices/previews/speaker_10_Steve_C.wav +0 -0
- package/mcp-server/voices/previews/speaker_11_Owlivia.wav +0 -0
- package/mcp-server/voices/previews/speaker_12_Paul_Hampton.wav +0 -0
- package/mcp-server/voices/previews/speaker_13_Jennifer_Dorr.wav +0 -0
- package/mcp-server/voices/previews/speaker_14_Emily_Cripps.wav +0 -0
- package/mcp-server/voices/previews/speaker_15_Martin_Clifton.wav +0 -0
- package/mcp-server/voices/previews/speaker_1_Kara_Shallenberg.wav +0 -0
- package/mcp-server/voices/previews/speaker_2_Kristin_Hughes.wav +0 -0
- package/mcp-server/voices/previews/speaker_3_Maria_Kasper.wav +0 -0
- package/mcp-server/voices/previews/speaker_4_Mike_Pelton.wav +0 -0
- package/mcp-server/voices/previews/speaker_5_Mark_Nelson.wav +0 -0
- package/mcp-server/voices/previews/speaker_6_Michael_Scherer.wav +0 -0
- package/mcp-server/voices/previews/speaker_7_James_K_White.wav +0 -0
- package/mcp-server/voices/previews/speaker_8_Rose_Ibex.wav +0 -0
- package/mcp-server/voices/previews/speaker_9_progressingamerica.wav +0 -0
|
@@ -264,10 +264,13 @@ When executing this command, Claude MUST follow these steps in order:
|
|
|
264
264
|
- Replace the "WHAT'S NEW" summary (2-4 sentences from RELEASE_NOTES.md AI Summary)
|
|
265
265
|
- Replace all "KEY HIGHLIGHTS" bullets (extract from RELEASE_NOTES.md)
|
|
266
266
|
- Keep the same format/structure, just update content
|
|
267
|
-
6. **Update README.md**:
|
|
268
|
-
- Update version badge in header (line ~14)
|
|
269
|
-
- Update "Latest Release" section (line ~
|
|
270
|
-
|
|
267
|
+
6. **Update README.md** ⚠️ **CRITICAL - Must complete BEFORE npm publish**:
|
|
268
|
+
- Update version badge in header (line ~14): `**Version**: v2.X.X`
|
|
269
|
+
- Update "Latest Release" section (line ~112+):
|
|
270
|
+
- Replace the title and URL: `**[vX.X.X - Release Title](github.com/...)**`
|
|
271
|
+
- Replace the AI summary paragraph (first paragraph after title)
|
|
272
|
+
- Replace all "Key Highlights" bullet points (extract from RELEASE_NOTES.md)
|
|
273
|
+
- This ensures GitHub README and npm package page show correct version
|
|
271
274
|
7. **Human Review Checkpoint 2**: Show what will be updated, wait for approval
|
|
272
275
|
8. **Bump package.json**: Use npm version (patch/minor/major)
|
|
273
276
|
9. **Commit all changes**: Single commit with RELEASE_NOTES.md, installer.js, README.md, package.json
|
|
@@ -49,4 +49,4 @@ BMad Master|reverb 50 60 100 pitch -100|agentvibes_soft_flamenco_loop.mp3|0.30
|
|
|
49
49
|
_party_mode|compand 0.3,1 6:-70,-60,-20|agent_vibes_dark_chill_step_loop.mp3|0.40
|
|
50
50
|
|
|
51
51
|
# Default (no agent specified) - clean with subtle enhancement and chillwave background
|
|
52
|
-
default
|
|
52
|
+
default||agentvibes_soft_flamenco_loop.mp3|0.30
|
|
@@ -49,4 +49,4 @@ BMad Master|reverb 50 60 100 pitch -100|agentvibes_soft_flamenco_loop.mp3|0.30
|
|
|
49
49
|
_party_mode|compand 0.3,1 6:-70,-60,-20|agent_vibes_dark_chill_step_loop.mp3|0.40
|
|
50
50
|
|
|
51
51
|
# Default (no agent specified) - clean with subtle enhancement and chillwave background
|
|
52
|
-
default
|
|
52
|
+
default||agentvibes_soft_flamenco_loop.mp3|0.30
|
|
@@ -140,8 +140,8 @@ fi
|
|
|
140
140
|
# @why Provide seamless experience with automatic downloads
|
|
141
141
|
# @param Uses global: $VOICE_MODEL
|
|
142
142
|
# @sideeffects Downloads voice model files
|
|
143
|
-
# @edgecases Prompts user for consent before downloading
|
|
144
|
-
if ! verify_voice "$VOICE_MODEL"; then
|
|
143
|
+
# @edgecases Prompts user for consent before downloading, skipped in test mode
|
|
144
|
+
if [[ "${AGENTVIBES_TEST_MODE:-false}" != "true" ]] && ! verify_voice "$VOICE_MODEL"; then
|
|
145
145
|
echo "📥 Voice model not found: $VOICE_MODEL"
|
|
146
146
|
echo " File size: ~25MB"
|
|
147
147
|
echo " Preview: https://huggingface.co/rhasspy/piper-voices"
|
|
@@ -162,10 +162,15 @@ if ! verify_voice "$VOICE_MODEL"; then
|
|
|
162
162
|
fi
|
|
163
163
|
|
|
164
164
|
# Get voice model path
|
|
165
|
-
|
|
166
|
-
if [[
|
|
167
|
-
|
|
168
|
-
|
|
165
|
+
# In test mode, use a fake path since we have mock piper that doesn't need real files
|
|
166
|
+
if [[ "${AGENTVIBES_TEST_MODE:-false}" == "true" ]]; then
|
|
167
|
+
VOICE_PATH="/tmp/mock-voice-${VOICE_MODEL}.onnx"
|
|
168
|
+
else
|
|
169
|
+
VOICE_PATH=$(get_voice_path "$VOICE_MODEL")
|
|
170
|
+
if [[ $? -ne 0 ]]; then
|
|
171
|
+
echo "❌ Voice model path not found: $VOICE_MODEL"
|
|
172
|
+
exit 3
|
|
173
|
+
fi
|
|
169
174
|
fi
|
|
170
175
|
|
|
171
176
|
# @function determine_audio_directory
|
|
@@ -312,7 +312,8 @@ case "$1" in
|
|
|
312
312
|
fi
|
|
313
313
|
fi
|
|
314
314
|
|
|
315
|
-
|
|
315
|
+
# In test mode, allow switching to any voice name without file validation
|
|
316
|
+
if [[ -z "$FOUND" ]] && [[ "${AGENTVIBES_TEST_MODE:-false}" != "true" ]]; then
|
|
316
317
|
echo "❌ Piper voice not found: $VOICE_NAME"
|
|
317
318
|
echo ""
|
|
318
319
|
echo "Available Piper voices:"
|
|
@@ -347,15 +348,17 @@ case "$1" in
|
|
|
347
348
|
exit 1
|
|
348
349
|
fi
|
|
349
350
|
|
|
350
|
-
|
|
351
|
-
|
|
351
|
+
# In test mode, use the requested voice name even if not found
|
|
352
|
+
VOICE_TO_SAVE="${FOUND:-$VOICE_NAME}"
|
|
353
|
+
echo "$VOICE_TO_SAVE" > "$VOICE_FILE"
|
|
354
|
+
echo "✅ Voice switched to: $VOICE_TO_SAVE"
|
|
352
355
|
|
|
353
356
|
# Have the new voice introduce itself (unless silent mode)
|
|
354
|
-
if [[ "$SILENT_MODE" != "true" ]]; then
|
|
357
|
+
if [[ "$SILENT_MODE" != "true" ]] && [[ "${AGENTVIBES_TEST_MODE:-false}" != "true" ]]; then
|
|
355
358
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
356
359
|
PLAY_TTS="$SCRIPT_DIR/play-tts.sh"
|
|
357
360
|
if [ -x "$PLAY_TTS" ]; then
|
|
358
|
-
"$PLAY_TTS" "Hi, I'm $
|
|
361
|
+
"$PLAY_TTS" "Hi, I'm $VOICE_TO_SAVE. I'll be your voice assistant moving forward." "$VOICE_TO_SAVE" > /dev/null 2>&1 &
|
|
359
362
|
fi
|
|
360
363
|
|
|
361
364
|
echo ""
|
package/README.md
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
[](https://github.com/paulpreibisch/AgentVibes/actions/workflows/publish.yml)
|
|
12
12
|
[](https://opensource.org/licenses/Apache-2.0)
|
|
13
13
|
|
|
14
|
-
**Author**: Paul Preibisch ([@997Fire](https://x.com/997Fire)) | **Version**: v2.17.
|
|
14
|
+
**Author**: Paul Preibisch ([@997Fire](https://x.com/997Fire)) | **Version**: v2.17.2
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
@@ -111,17 +111,17 @@ All 50+ Piper voices AgentVibes provides are sourced from Hugging Face's open-so
|
|
|
111
111
|
|
|
112
112
|
## 📰 Latest Release
|
|
113
113
|
|
|
114
|
-
**[v2.
|
|
114
|
+
**[v2.17.0 - Installer UX Revolution](https://github.com/paulpreibisch/AgentVibes/releases/tag/v2.17.2)** 🎉
|
|
115
115
|
|
|
116
|
-
AgentVibes v2.
|
|
116
|
+
AgentVibes v2.17.0 delivers a complete installer user experience transformation with intelligent system dependency checking, paginated configuration flow, and comprehensive inline help.
|
|
117
117
|
|
|
118
118
|
**Key Highlights:**
|
|
119
|
-
-
|
|
120
|
-
-
|
|
121
|
-
-
|
|
122
|
-
-
|
|
123
|
-
-
|
|
124
|
-
-
|
|
119
|
+
- 🔧 **System Dependency Checker** - Validates Node, Python, bash, sox, ffmpeg, curl, etc.
|
|
120
|
+
- 📄 **Paginated Configuration** - Beautiful headers with Agent Vibes branding on every page
|
|
121
|
+
- 💡 **Inline Help & Commands** - TTS explanations and examples throughout installer
|
|
122
|
+
- 🎵 **New Music Track** - Salsa v2 background music now available
|
|
123
|
+
- 🎨 **Professional UI** - Consistent sunshine yellow styling and dynamic page numbering
|
|
124
|
+
- ✅ **Quality Assurance** - 140 tests passing, SonarCloud integration
|
|
125
125
|
|
|
126
126
|
💡 **Tip:** If `npx agentvibes` shows an older version or missing commands, clear your npm cache: `npm cache clean --force && npx agentvibes@latest --help`
|
|
127
127
|
|
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.17.
|
|
4
|
+
"version": "2.17.2",
|
|
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": [
|
|
@@ -34,7 +34,14 @@
|
|
|
34
34
|
"files": [
|
|
35
35
|
"bin/",
|
|
36
36
|
"src/",
|
|
37
|
-
"mcp-server
|
|
37
|
+
"mcp-server/*.py",
|
|
38
|
+
"mcp-server/*.js",
|
|
39
|
+
"mcp-server/*.md",
|
|
40
|
+
"mcp-server/*.txt",
|
|
41
|
+
"mcp-server/*.toml",
|
|
42
|
+
"mcp-server/*.json",
|
|
43
|
+
"mcp-server/docs/",
|
|
44
|
+
"mcp-server/examples/",
|
|
38
45
|
".claude/commands/",
|
|
39
46
|
".claude/hooks/",
|
|
40
47
|
".claude/personalities/",
|
package/src/cli/list-voices.js
CHANGED
|
@@ -46,7 +46,7 @@ function getMacOSVoices(currentVoice) {
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
try {
|
|
49
|
-
const output = execFileSync('say', ['-v', '?'], { encoding: 'utf8' });
|
|
49
|
+
const output = execFileSync('say', ['-v', '?'], { encoding: 'utf8' }); // NOSONAR - Safe: checking macOS say voices from system PATH
|
|
50
50
|
const lines = output.split('\n');
|
|
51
51
|
|
|
52
52
|
for (const line of lines) {
|
package/src/installer.js
CHANGED
|
@@ -721,15 +721,15 @@ async function playWelcomeDemo(targetDir, spinner, options = {}) {
|
|
|
721
721
|
let audioPlayer = null;
|
|
722
722
|
|
|
723
723
|
try {
|
|
724
|
-
execSync('which paplay 2>/dev/null', { stdio: 'pipe' });
|
|
724
|
+
execSync('which paplay 2>/dev/null', { stdio: 'pipe' }); // NOSONAR - Safe: checking system PATH for audio player
|
|
725
725
|
audioPlayer = 'paplay';
|
|
726
726
|
} catch {
|
|
727
727
|
try {
|
|
728
|
-
execSync('which afplay 2>/dev/null', { stdio: 'pipe' });
|
|
728
|
+
execSync('which afplay 2>/dev/null', { stdio: 'pipe' }); // NOSONAR - Safe: checking system PATH for audio player
|
|
729
729
|
audioPlayer = 'afplay';
|
|
730
730
|
} catch {
|
|
731
731
|
try {
|
|
732
|
-
execSync('which mpv 2>/dev/null', { stdio: 'pipe' });
|
|
732
|
+
execSync('which mpv 2>/dev/null', { stdio: 'pipe' }); // NOSONAR - Safe: checking system PATH for audio player
|
|
733
733
|
audioPlayer = 'mpv';
|
|
734
734
|
} catch {}
|
|
735
735
|
}
|
|
@@ -2893,12 +2893,16 @@ async function install(options = {}) {
|
|
|
2893
2893
|
// Apply reverb setting if not "off" (using dynamic import for ES modules)
|
|
2894
2894
|
if (selectedReverb && selectedReverb !== 'off') {
|
|
2895
2895
|
const effectsManagerPath = path.join(targetDir, '.claude', 'hooks', 'effects-manager.sh');
|
|
2896
|
-
|
|
2897
|
-
|
|
2898
|
-
|
|
2899
|
-
|
|
2900
|
-
|
|
2901
|
-
|
|
2896
|
+
// Validate reverb value to prevent command injection
|
|
2897
|
+
const validReverb = ['light', 'medium', 'heavy', 'cathedral'];
|
|
2898
|
+
if (validReverb.includes(selectedReverb)) {
|
|
2899
|
+
try {
|
|
2900
|
+
execFileSync('bash', [effectsManagerPath, 'set-reverb', selectedReverb, 'default'], {
|
|
2901
|
+
stdio: 'pipe',
|
|
2902
|
+
});
|
|
2903
|
+
} catch (error) {
|
|
2904
|
+
// Silent fail - will be shown in success message if needed
|
|
2905
|
+
}
|
|
2902
2906
|
}
|
|
2903
2907
|
}
|
|
2904
2908
|
|
|
@@ -35,7 +35,7 @@ function commandExists(command) {
|
|
|
35
35
|
*/
|
|
36
36
|
function checkBashVersion() {
|
|
37
37
|
try {
|
|
38
|
-
const version = execFileSync('bash', ['--version'], { encoding: 'utf8' });
|
|
38
|
+
const version = execFileSync('bash', ['--version'], { encoding: 'utf8' }); // NOSONAR - Safe: checking bash version from system PATH
|
|
39
39
|
const match = version.match(/version (\d+)\.(\d+)/);
|
|
40
40
|
if (match) {
|
|
41
41
|
const major = parseInt(match[1]);
|