agentvibes 4.6.7 → 5.0.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/bmad-voice-map.json +104 -0
- package/.agentvibes/config.json +13 -12
- package/.agentvibes/copilot-sessions.log +4 -0
- package/.claude/audio/tracks/README.md +51 -52
- package/.claude/config/audio-effects-bmad.cfg +50 -0
- package/.claude/config/audio-effects.cfg +4 -4
- package/.claude/config/background-music-enabled.txt +1 -0
- package/.claude/config/personality.txt +1 -0
- package/.claude/hooks/play-tts-piper.sh +3 -1
- package/.claude/hooks/play-tts.sh +373 -301
- package/.claude/hooks/session-start-tts.sh +81 -81
- package/.claude/hooks-windows/audio-processor.ps1 +181 -0
- package/.claude/hooks-windows/play-tts-piper.ps1 +259 -245
- package/.claude/hooks-windows/play-tts.ps1 +101 -9
- package/.claude/hooks-windows/session-start-tts.ps1 +114 -114
- package/README.md +107 -7
- package/RELEASE_NOTES.md +54 -0
- package/bin/bmad-speak.js +16 -8
- package/mcp-server/server.py +15 -8
- package/package.json +1 -1
- package/src/console/app.js +899 -897
- package/src/console/footer-config.js +50 -50
- package/src/console/navigation.js +65 -65
- package/src/console/tabs/agents-tab.js +1896 -1886
- package/src/console/tabs/music-tab.js +1046 -1039
- package/src/console/tabs/placeholder-tab.js +81 -80
- package/src/console/tabs/settings-tab.js +939 -3988
- package/src/console/tabs/setup-tab.js +1811 -0
- package/src/console/tabs/voices-tab.js +1720 -1713
- package/src/installer.js +6147 -6092
- package/src/services/llm-provider-service.js +407 -0
- package/src/services/navigation-service.js +123 -123
- package/src/services/tts-engine-service.js +69 -0
- package/.claude/audio/tracks/dreamy_house_loop.mp3 +0 -0
- package/src/console/tabs/install-tab.js +0 -1081
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentVibes — TTS Engine Service
|
|
3
|
+
*
|
|
4
|
+
* OS-aware TTS engine detection: enumerates available engines,
|
|
5
|
+
* checks binary availability, and reports installation status.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { execFileSync } from 'node:child_process';
|
|
9
|
+
import path from 'node:path';
|
|
10
|
+
import fs from 'node:fs';
|
|
11
|
+
|
|
12
|
+
const TTS_ENGINES = [
|
|
13
|
+
{
|
|
14
|
+
id: 'piper', name: 'Piper TTS', desc: 'Open-source, fast, many voices — recommended', native: false,
|
|
15
|
+
installCmd: process.platform === 'win32'
|
|
16
|
+
? 'winget install --id Rhasspy.Piper --accept-package-agreements --accept-source-agreements'
|
|
17
|
+
: process.platform === 'darwin'
|
|
18
|
+
? 'brew install piper'
|
|
19
|
+
: 'pip install piper-tts',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
id: 'soprano', name: 'Soprano TTS', desc: 'Web-based TTS service with premium voices', native: false,
|
|
23
|
+
installCmd: 'pip install soprano-tts',
|
|
24
|
+
},
|
|
25
|
+
{ id: 'sapi', name: 'Windows SAPI', desc: 'Built-in Windows speech — no install needed', native: true, platform: 'win32' },
|
|
26
|
+
{ id: 'macos-say', name: 'macOS Say', desc: 'Built-in macOS speech synthesis — no install needed', native: true, platform: 'darwin' },
|
|
27
|
+
];
|
|
28
|
+
|
|
29
|
+
export function getAvailableEngines() {
|
|
30
|
+
return TTS_ENGINES.filter(e => !e.platform || e.platform === process.platform);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function checkEngineInstalled(engineId) {
|
|
34
|
+
const engine = TTS_ENGINES.find(e => e.id === engineId);
|
|
35
|
+
if (!engine) return false;
|
|
36
|
+
if (engine.native) return true; // Native engines are always available on their platform
|
|
37
|
+
|
|
38
|
+
// Check binary availability — soprano has two possible binaries
|
|
39
|
+
const binaryMap = { piper: ['piper'], soprano: ['soprano-tts', 'soprano-webui'] };
|
|
40
|
+
const binaries = binaryMap[engineId];
|
|
41
|
+
if (!binaries) return false;
|
|
42
|
+
|
|
43
|
+
for (const binary of binaries) {
|
|
44
|
+
try {
|
|
45
|
+
if (process.platform === 'win32') {
|
|
46
|
+
// Check Windows Piper location
|
|
47
|
+
if (engineId === 'piper') {
|
|
48
|
+
const localAppData = process.env.LOCALAPPDATA ||
|
|
49
|
+
(process.env.USERPROFILE ? path.join(process.env.USERPROFILE, 'AppData', 'Local') : null);
|
|
50
|
+
if (localAppData && fs.existsSync(path.join(localAppData, 'Programs', 'Piper', 'piper.exe'))) return true;
|
|
51
|
+
}
|
|
52
|
+
execFileSync('where', [binary], { stdio: 'ignore', timeout: 2000 });
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
execFileSync('which', [binary], { stdio: 'ignore', timeout: 2000 });
|
|
56
|
+
return true;
|
|
57
|
+
} catch {
|
|
58
|
+
// try next binary
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export function getEngineStatuses() {
|
|
65
|
+
return getAvailableEngines().map(e => ({
|
|
66
|
+
...e,
|
|
67
|
+
installed: checkEngineInstalled(e.id),
|
|
68
|
+
}));
|
|
69
|
+
}
|
|
Binary file
|