agentvibes 2.17.2 → 2.17.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.
- package/README.md +2 -2
- package/package.json +1 -1
- package/src/installer.js +101 -15
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.3
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
@@ -111,7 +111,7 @@ All 50+ Piper voices AgentVibes provides are sourced from Hugging Face's open-so
|
|
|
111
111
|
|
|
112
112
|
## 📰 Latest Release
|
|
113
113
|
|
|
114
|
-
**[v2.17.0 - Installer UX Revolution](https://github.com/paulpreibisch/AgentVibes/releases/tag/v2.17.
|
|
114
|
+
**[v2.17.0 - Installer UX Revolution](https://github.com/paulpreibisch/AgentVibes/releases/tag/v2.17.3)** 🎉
|
|
115
115
|
|
|
116
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
|
|
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.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
|
@@ -208,6 +208,7 @@ async function collectConfiguration(options = {}) {
|
|
|
208
208
|
const config = {
|
|
209
209
|
provider: null,
|
|
210
210
|
piperPath: null,
|
|
211
|
+
defaultVoice: null,
|
|
211
212
|
reverb: 'light',
|
|
212
213
|
backgroundMusic: {
|
|
213
214
|
enabled: true,
|
|
@@ -219,13 +220,14 @@ async function collectConfiguration(options = {}) {
|
|
|
219
220
|
if (options.yes) {
|
|
220
221
|
// Non-interactive mode - use defaults
|
|
221
222
|
config.provider = process.platform === 'darwin' ? 'macos' : 'piper';
|
|
223
|
+
config.defaultVoice = process.platform === 'darwin' ? 'Samantha' : 'en_US-ryan-high';
|
|
222
224
|
const homeDir = process.env.HOME || process.env.USERPROFILE;
|
|
223
225
|
config.piperPath = path.join(homeDir, '.claude', 'piper-voices');
|
|
224
226
|
return config;
|
|
225
227
|
}
|
|
226
228
|
|
|
227
229
|
let currentPage = 0;
|
|
228
|
-
const sectionPages =
|
|
230
|
+
const sectionPages = 5; // System Dependencies, Provider, Voice Selection, Audio Settings, Verbosity
|
|
229
231
|
const pageOffset = options.pageOffset || 0;
|
|
230
232
|
const totalPages = options.totalPages || sectionPages;
|
|
231
233
|
|
|
@@ -240,7 +242,8 @@ async function collectConfiguration(options = {}) {
|
|
|
240
242
|
// Show header
|
|
241
243
|
const pageTitle = currentPage === 0 ? 'System Dependencies' :
|
|
242
244
|
currentPage === 1 ? 'TTS Provider Configuration' :
|
|
243
|
-
currentPage === 2 ? '
|
|
245
|
+
currentPage === 2 ? 'Voice Selection' :
|
|
246
|
+
currentPage === 3 ? 'Audio Settings' :
|
|
244
247
|
'Verbosity Settings';
|
|
245
248
|
const { header, footer } = createPageHeaderFooter(pageTitle, currentPage, totalPages, pageOffset);
|
|
246
249
|
console.log(header);
|
|
@@ -453,7 +456,86 @@ async function collectConfiguration(options = {}) {
|
|
|
453
456
|
}
|
|
454
457
|
|
|
455
458
|
} else if (currentPage === 2) {
|
|
456
|
-
// Page 3:
|
|
459
|
+
// Page 3: Voice Selection
|
|
460
|
+
console.log(boxen(
|
|
461
|
+
chalk.white('Choose a default voice for your AgentVibes.\n\n') +
|
|
462
|
+
chalk.gray('This will be used when no specific voice is configured.\n') +
|
|
463
|
+
chalk.gray('You can change this anytime with: ') + chalk.cyan('/agent-vibes:voice switch <name>'),
|
|
464
|
+
{
|
|
465
|
+
padding: 1,
|
|
466
|
+
margin: 1,
|
|
467
|
+
borderStyle: 'round',
|
|
468
|
+
borderColor: 'gray',
|
|
469
|
+
title: chalk.bold('🎤 Default Voice'),
|
|
470
|
+
titleAlignment: 'center'
|
|
471
|
+
}
|
|
472
|
+
));
|
|
473
|
+
|
|
474
|
+
if (config.provider === 'piper') {
|
|
475
|
+
// Piper voices - popular selections
|
|
476
|
+
const piperVoices = [
|
|
477
|
+
{ name: chalk.cyan('en_US-ryan-high') + chalk.gray(' (Male, American, High Quality)'), value: 'en_US-ryan-high' },
|
|
478
|
+
{ name: chalk.magenta('en_US-amy-medium') + chalk.gray(' (Female, American, Clear)'), value: 'en_US-amy-medium' },
|
|
479
|
+
{ name: chalk.cyan('en_US-joe-medium') + chalk.gray(' (Male, American, Warm)'), value: 'en_US-joe-medium' },
|
|
480
|
+
{ name: chalk.magenta('en_US-lessac-medium') + chalk.gray(' (Female, American, Professional)'), value: 'en_US-lessac-medium' },
|
|
481
|
+
{ name: chalk.cyan('en_GB-alan-medium') + chalk.gray(' (Male, British, Refined)'), value: 'en_GB-alan-medium' },
|
|
482
|
+
{ name: chalk.magenta('en_GB-southern_english_female-medium') + chalk.gray(' (Female, British)'), value: 'en_GB-southern_english_female-medium' },
|
|
483
|
+
new inquirer.Separator(),
|
|
484
|
+
{ name: chalk.yellow('Skip - I\'ll set this later'), value: '__skip__' },
|
|
485
|
+
{ name: chalk.magentaBright('← Back to Provider Selection'), value: '__back__' }
|
|
486
|
+
];
|
|
487
|
+
|
|
488
|
+
const { selectedVoice } = await inquirer.prompt([{
|
|
489
|
+
type: 'list',
|
|
490
|
+
name: 'selectedVoice',
|
|
491
|
+
message: chalk.yellow('Select your default Piper voice:'),
|
|
492
|
+
choices: piperVoices,
|
|
493
|
+
default: 'en_US-ryan-high',
|
|
494
|
+
pageSize: 12
|
|
495
|
+
}]);
|
|
496
|
+
|
|
497
|
+
if (selectedVoice === '__back__') {
|
|
498
|
+
return null;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
if (selectedVoice !== '__skip__') {
|
|
502
|
+
config.defaultVoice = selectedVoice;
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
} else if (config.provider === 'macos') {
|
|
506
|
+
// macOS Say voices - popular selections
|
|
507
|
+
const macOSVoices = [
|
|
508
|
+
{ name: chalk.cyan('Samantha') + chalk.gray(' (Female, American)'), value: 'Samantha' },
|
|
509
|
+
{ name: chalk.cyan('Alex') + chalk.gray(' (Male, American)'), value: 'Alex' },
|
|
510
|
+
{ name: chalk.magenta('Flo') + chalk.gray(' (Female, American, Expressive)'), value: 'Flo' },
|
|
511
|
+
{ name: chalk.cyan('Tom') + chalk.gray(' (Male, American)'), value: 'Tom' },
|
|
512
|
+
{ name: chalk.magenta('Karen') + chalk.gray(' (Female, Australian)'), value: 'Karen' },
|
|
513
|
+
{ name: chalk.cyan('Daniel') + chalk.gray(' (Male, British)'), value: 'Daniel' },
|
|
514
|
+
new inquirer.Separator(),
|
|
515
|
+
{ name: chalk.yellow('Skip - I\'ll set this later'), value: '__skip__' },
|
|
516
|
+
{ name: chalk.magentaBright('← Back to Provider Selection'), value: '__back__' }
|
|
517
|
+
];
|
|
518
|
+
|
|
519
|
+
const { selectedVoice } = await inquirer.prompt([{
|
|
520
|
+
type: 'list',
|
|
521
|
+
name: 'selectedVoice',
|
|
522
|
+
message: chalk.yellow('Select your default macOS voice:'),
|
|
523
|
+
choices: macOSVoices,
|
|
524
|
+
default: 'Samantha',
|
|
525
|
+
pageSize: 12
|
|
526
|
+
}]);
|
|
527
|
+
|
|
528
|
+
if (selectedVoice === '__back__') {
|
|
529
|
+
return null;
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
if (selectedVoice !== '__skip__') {
|
|
533
|
+
config.defaultVoice = selectedVoice;
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
} else if (currentPage === 3) {
|
|
538
|
+
// Page 4: Audio Settings (Reverb + Background Music)
|
|
457
539
|
console.log(boxen(
|
|
458
540
|
chalk.white('Configure audio effects and background music for your Agents.\n\n') +
|
|
459
541
|
chalk.yellow('Reverb:\n') +
|
|
@@ -541,8 +623,8 @@ async function collectConfiguration(options = {}) {
|
|
|
541
623
|
config.backgroundMusic.track = selectedTrack;
|
|
542
624
|
}
|
|
543
625
|
|
|
544
|
-
} else if (currentPage ===
|
|
545
|
-
// Page
|
|
626
|
+
} else if (currentPage === 4) {
|
|
627
|
+
// Page 5: Verbosity Settings
|
|
546
628
|
console.log(boxen(
|
|
547
629
|
chalk.white('Choose how much Claude speaks during interactions.\n\n') +
|
|
548
630
|
chalk.yellow('🔊 High:\n') +
|
|
@@ -2644,17 +2726,21 @@ async function install(options = {}) {
|
|
|
2644
2726
|
await fs.writeFile(piperConfigPath, piperVoicesPath);
|
|
2645
2727
|
}
|
|
2646
2728
|
|
|
2647
|
-
// Set default voice based on
|
|
2729
|
+
// Set default voice based on user selection or provider defaults
|
|
2648
2730
|
const voiceConfigPath = path.join(claudeDir, 'tts-voice.txt');
|
|
2649
|
-
let defaultVoice;
|
|
2650
|
-
|
|
2651
|
-
|
|
2652
|
-
|
|
2653
|
-
|
|
2654
|
-
|
|
2655
|
-
|
|
2656
|
-
|
|
2657
|
-
|
|
2731
|
+
let defaultVoice = userConfig.defaultVoice;
|
|
2732
|
+
|
|
2733
|
+
// Fallback to defaults if voice wasn't selected
|
|
2734
|
+
if (!defaultVoice) {
|
|
2735
|
+
switch (selectedProvider) {
|
|
2736
|
+
case 'piper':
|
|
2737
|
+
defaultVoice = 'en_US-ryan-high';
|
|
2738
|
+
break;
|
|
2739
|
+
case 'macos':
|
|
2740
|
+
default:
|
|
2741
|
+
defaultVoice = 'Samantha';
|
|
2742
|
+
break;
|
|
2743
|
+
}
|
|
2658
2744
|
}
|
|
2659
2745
|
await fs.writeFile(voiceConfigPath, defaultVoice);
|
|
2660
2746
|
|