agentvibes 5.6.9 → 5.7.0
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/.agentvibes/config.json +3 -38
- package/.claude/commands/agent-vibes/provider.md +0 -0
- package/.claude/config/audio-effects.cfg +1 -1
- package/.claude/config/background-music-position.txt +6 -8
- package/.claude/config/reverb-level.txt +0 -0
- package/.claude/github-star-reminder.txt +1 -1
- package/.claude/hooks/bmad-tts-injector.sh +49 -21
- package/.claude/hooks/provider-commands.sh +16 -4
- package/.claude/hooks/provider-manager.sh +38 -0
- package/.claude/hooks/stop.sh +2 -27
- package/.claude/hooks/voice-manager.sh +50 -2
- package/.claude/hooks-windows/play-tts.ps1 +34 -1
- package/.claude/hooks-windows/tts-watcher.ps1 +122 -0
- package/.claude/piper-voices-dir.txt +1 -1
- package/.mcp.json +13 -33
- package/README.md +6 -8
- package/RELEASE_NOTES.md +32 -0
- package/bin/agent-vibes +39 -39
- package/package.json +1 -1
- package/src/bmad-detector.js +85 -71
- package/src/cli/list-personalities.js +110 -110
- package/src/cli/list-voices.js +114 -114
- package/src/commands/bmad-voices.js +394 -394
- package/src/commands/install-mcp.js +476 -476
- package/src/console/brand-colors.js +13 -13
- package/src/console/constants/personalities.js +44 -44
- package/src/console/tabs/help-tab.js +314 -314
- package/src/console/tabs/readme-tab.js +272 -272
- package/src/console/widgets/destroy-list.js +25 -25
- package/src/console/widgets/notice.js +55 -55
- package/src/console/widgets/personality-picker.js +213 -213
- package/src/i18n/de.js +202 -202
- package/src/i18n/es.js +202 -202
- package/src/i18n/fr.js +202 -202
- package/src/i18n/hi.js +202 -202
- package/src/i18n/ja.js +202 -202
- package/src/i18n/ko.js +202 -202
- package/src/i18n/pt.js +202 -202
- package/src/i18n/strings.js +54 -54
- package/src/i18n/zh-CN.js +202 -202
- package/src/installer/language-screen.js +31 -31
- package/src/installer/music-file-input.js +304 -304
- package/src/installer.js +70 -7
- package/src/services/agent-voice-store.js +59 -12
- package/src/services/config-service.js +264 -264
- package/src/services/language-service.js +47 -47
- package/src/services/provider-service.js +143 -143
- package/src/utils/audio-duration-validator.js +298 -298
- package/src/utils/audio-format-validator.js +277 -277
- package/src/utils/dependency-checker.js +469 -469
- package/src/utils/file-ownership-verifier.js +358 -358
- package/src/utils/list-formatter.js +194 -194
- package/src/utils/music-file-validator.js +285 -285
- package/src/utils/preview-list-prompt.js +136 -136
- package/src/utils/secure-music-storage.js +412 -412
- package/.agentvibes/LITE-MODE.md +0 -236
- package/.agentvibes/README.md +0 -136
- package/.agentvibes/backup/session-start-tts.sh.20251210_212814 +0 -141
- package/.agentvibes/backups/agents/analyst_20260204_144958.md +0 -78
- package/.agentvibes/backups/agents/architect_20260204_144958.md +0 -72
- package/.agentvibes/backups/agents/dev_20260204_144958.md +0 -74
- package/.agentvibes/backups/agents/pm_20260204_144958.md +0 -72
- package/.agentvibes/backups/agents/quick-flow-solo-dev_20260204_144958.md +0 -64
- package/.agentvibes/backups/agents/sm_20260204_144958.md +0 -87
- package/.agentvibes/backups/agents/tea_20260204_144958.md +0 -79
- package/.agentvibes/backups/agents/tech-writer_20260204_144958.md +0 -82
- package/.agentvibes/backups/agents/ux-designer_20260204_144958.md +0 -80
- package/.agentvibes/config/README-personality-defaults.md +0 -162
- package/.agentvibes/config/agentvibes.json +0 -1
- package/.agentvibes/config/mode.txt +0 -1
- package/.agentvibes/config/personality-voice-defaults.default.json +0 -21
- package/.agentvibes/config/save-audio.txt +0 -1
- package/.agentvibes/config/voice-metadata.json +0 -160
- package/.agentvibes/hooks/help.sh +0 -191
- package/.agentvibes/hooks/post-tool-use-lite.sh +0 -111
- package/.agentvibes/hooks/save-audio-manager.sh +0 -162
- package/.agentvibes/hooks/session-start-full-optimized.sh +0 -102
- package/.agentvibes/hooks/session-start-full.sh +0 -142
- package/.agentvibes/hooks/session-start-lite-v2.sh +0 -34
- package/.agentvibes/hooks/session-start-lite.sh +0 -29
- package/.agentvibes/hooks/stop-lite.sh +0 -115
- package/.agentvibes/hooks/switch-mode.sh +0 -215
- package/.agentvibes/output-styles/audio-summary.md +0 -30
- package/.claude/audio/voice-samples/piper/alan.wav +0 -0
- package/.claude/audio/voice-samples/piper/amy.wav +0 -0
- package/.claude/audio/voice-samples/piper/charlotte.wav +0 -0
- package/.claude/audio/voice-samples/piper/joe.wav +0 -0
- package/.claude/audio/voice-samples/piper/john.wav +0 -0
- package/.claude/audio/voice-samples/piper/katherine.wav +0 -0
- package/.claude/audio/voice-samples/piper/kristin.wav +0 -0
- package/.claude/audio/voice-samples/piper/linda.wav +0 -0
- package/.claude/audio/voice-samples/piper/marcus.wav +0 -0
- package/.claude/audio/voice-samples/piper/ryan.wav +0 -0
- package/.claude/hooks/post-response.sh +0 -41
- package/bin/ensure-soprano-running.sh +0 -43
package/src/cli/list-voices.js
CHANGED
|
@@ -1,114 +1,114 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Voice List Display - Beautiful multi-column voice listing
|
|
4
|
-
* Called by voice-manager.sh to display voices with boxen formatting
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { formatVoicesList } from '../utils/list-formatter.js';
|
|
8
|
-
import fs from 'fs';
|
|
9
|
-
import path from 'path';
|
|
10
|
-
import { execFileSync } from 'child_process';
|
|
11
|
-
import os from 'os';
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Get Piper voices from voice directory
|
|
15
|
-
*/
|
|
16
|
-
function getPiperVoices(voiceDir, currentVoice) {
|
|
17
|
-
const voices = [];
|
|
18
|
-
|
|
19
|
-
if (!fs.existsSync(voiceDir)) {
|
|
20
|
-
return voices;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
const files = fs.readdirSync(voiceDir);
|
|
24
|
-
for (const file of files) {
|
|
25
|
-
if (file.endsWith('.onnx')) {
|
|
26
|
-
const voiceName = path.basename(file, '.onnx');
|
|
27
|
-
voices.push({
|
|
28
|
-
name: voiceName,
|
|
29
|
-
lang: extractLanguage(voiceName),
|
|
30
|
-
current: voiceName === currentVoice
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
return voices.sort((a, b) => a.name.localeCompare(b.name));
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Get macOS voices using say -v ?
|
|
40
|
-
*/
|
|
41
|
-
function getMacOSVoices(currentVoice) {
|
|
42
|
-
const voices = [];
|
|
43
|
-
|
|
44
|
-
if (os.platform() !== 'darwin') {
|
|
45
|
-
return voices;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
try {
|
|
49
|
-
const output = execFileSync('say', ['-v', '?'], { encoding: 'utf8' }); // NOSONAR - Safe: checking macOS say voices from system PATH
|
|
50
|
-
const lines = output.split('\n');
|
|
51
|
-
|
|
52
|
-
for (const line of lines) {
|
|
53
|
-
if (!line.trim()) continue;
|
|
54
|
-
|
|
55
|
-
const parts = line.trim().split(/\s+/);
|
|
56
|
-
if (parts.length >= 2) {
|
|
57
|
-
const voiceName = parts[0];
|
|
58
|
-
const lang = parts[1];
|
|
59
|
-
|
|
60
|
-
voices.push({
|
|
61
|
-
name: voiceName,
|
|
62
|
-
lang,
|
|
63
|
-
current: voiceName === currentVoice
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
} catch (error) {
|
|
68
|
-
// say command failed
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
return voices;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Extract language code from voice name
|
|
76
|
-
*/
|
|
77
|
-
function extractLanguage(voiceName) {
|
|
78
|
-
const match = voiceName.match(/^([a-z]{2}_[A-Z]{2})/);
|
|
79
|
-
return match ? match[1] : '';
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* Main function
|
|
84
|
-
*/
|
|
85
|
-
function main() {
|
|
86
|
-
const args = process.argv.slice(2);
|
|
87
|
-
|
|
88
|
-
// Parse arguments
|
|
89
|
-
const provider = args[0] || 'piper';
|
|
90
|
-
const currentVoice = args[1] || '';
|
|
91
|
-
const voiceDir = args[2] || '';
|
|
92
|
-
|
|
93
|
-
let voices = [];
|
|
94
|
-
let providerName = 'Piper TTS';
|
|
95
|
-
|
|
96
|
-
if (provider === 'piper') {
|
|
97
|
-
voices = getPiperVoices(voiceDir, currentVoice);
|
|
98
|
-
providerName = 'Piper TTS';
|
|
99
|
-
} else if (provider === 'macos') {
|
|
100
|
-
voices = getMacOSVoices(currentVoice);
|
|
101
|
-
providerName = 'macOS TTS';
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// Display with boxen
|
|
105
|
-
const output = formatVoicesList(voices, {
|
|
106
|
-
provider: providerName,
|
|
107
|
-
columns: 2,
|
|
108
|
-
showUsage: true
|
|
109
|
-
});
|
|
110
|
-
|
|
111
|
-
console.log(output);
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
main();
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Voice List Display - Beautiful multi-column voice listing
|
|
4
|
+
* Called by voice-manager.sh to display voices with boxen formatting
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { formatVoicesList } from '../utils/list-formatter.js';
|
|
8
|
+
import fs from 'fs';
|
|
9
|
+
import path from 'path';
|
|
10
|
+
import { execFileSync } from 'child_process';
|
|
11
|
+
import os from 'os';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Get Piper voices from voice directory
|
|
15
|
+
*/
|
|
16
|
+
function getPiperVoices(voiceDir, currentVoice) {
|
|
17
|
+
const voices = [];
|
|
18
|
+
|
|
19
|
+
if (!fs.existsSync(voiceDir)) {
|
|
20
|
+
return voices;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const files = fs.readdirSync(voiceDir);
|
|
24
|
+
for (const file of files) {
|
|
25
|
+
if (file.endsWith('.onnx')) {
|
|
26
|
+
const voiceName = path.basename(file, '.onnx');
|
|
27
|
+
voices.push({
|
|
28
|
+
name: voiceName,
|
|
29
|
+
lang: extractLanguage(voiceName),
|
|
30
|
+
current: voiceName === currentVoice
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return voices.sort((a, b) => a.name.localeCompare(b.name));
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Get macOS voices using say -v ?
|
|
40
|
+
*/
|
|
41
|
+
function getMacOSVoices(currentVoice) {
|
|
42
|
+
const voices = [];
|
|
43
|
+
|
|
44
|
+
if (os.platform() !== 'darwin') {
|
|
45
|
+
return voices;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
try {
|
|
49
|
+
const output = execFileSync('say', ['-v', '?'], { encoding: 'utf8' }); // NOSONAR - Safe: checking macOS say voices from system PATH
|
|
50
|
+
const lines = output.split('\n');
|
|
51
|
+
|
|
52
|
+
for (const line of lines) {
|
|
53
|
+
if (!line.trim()) continue;
|
|
54
|
+
|
|
55
|
+
const parts = line.trim().split(/\s+/);
|
|
56
|
+
if (parts.length >= 2) {
|
|
57
|
+
const voiceName = parts[0];
|
|
58
|
+
const lang = parts[1];
|
|
59
|
+
|
|
60
|
+
voices.push({
|
|
61
|
+
name: voiceName,
|
|
62
|
+
lang,
|
|
63
|
+
current: voiceName === currentVoice
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
} catch (error) {
|
|
68
|
+
// say command failed
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return voices;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Extract language code from voice name
|
|
76
|
+
*/
|
|
77
|
+
function extractLanguage(voiceName) {
|
|
78
|
+
const match = voiceName.match(/^([a-z]{2}_[A-Z]{2})/);
|
|
79
|
+
return match ? match[1] : '';
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Main function
|
|
84
|
+
*/
|
|
85
|
+
function main() {
|
|
86
|
+
const args = process.argv.slice(2);
|
|
87
|
+
|
|
88
|
+
// Parse arguments
|
|
89
|
+
const provider = args[0] || 'piper';
|
|
90
|
+
const currentVoice = args[1] || '';
|
|
91
|
+
const voiceDir = args[2] || '';
|
|
92
|
+
|
|
93
|
+
let voices = [];
|
|
94
|
+
let providerName = 'Piper TTS';
|
|
95
|
+
|
|
96
|
+
if (provider === 'piper') {
|
|
97
|
+
voices = getPiperVoices(voiceDir, currentVoice);
|
|
98
|
+
providerName = 'Piper TTS';
|
|
99
|
+
} else if (provider === 'macos') {
|
|
100
|
+
voices = getMacOSVoices(currentVoice);
|
|
101
|
+
providerName = 'macOS TTS';
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// Display with boxen
|
|
105
|
+
const output = formatVoicesList(voices, {
|
|
106
|
+
provider: providerName,
|
|
107
|
+
columns: 2,
|
|
108
|
+
showUsage: true
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
console.log(output);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
main();
|