agentvibes 4.6.8 → 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.
Files changed (35) hide show
  1. package/.agentvibes/bmad-voice-map.json +104 -0
  2. package/.agentvibes/config.json +13 -12
  3. package/.agentvibes/copilot-sessions.log +4 -0
  4. package/.claude/audio/tracks/README.md +51 -52
  5. package/.claude/config/audio-effects-bmad.cfg +50 -0
  6. package/.claude/config/audio-effects.cfg +4 -4
  7. package/.claude/config/background-music-enabled.txt +1 -0
  8. package/.claude/config/personality.txt +1 -0
  9. package/.claude/hooks/play-tts-piper.sh +3 -1
  10. package/.claude/hooks/play-tts.sh +373 -301
  11. package/.claude/hooks/session-start-tts.sh +81 -81
  12. package/.claude/hooks-windows/audio-processor.ps1 +181 -0
  13. package/.claude/hooks-windows/play-tts-piper.ps1 +259 -245
  14. package/.claude/hooks-windows/play-tts.ps1 +101 -9
  15. package/.claude/hooks-windows/session-start-tts.ps1 +114 -114
  16. package/README.md +98 -6
  17. package/RELEASE_NOTES.md +35 -0
  18. package/bin/bmad-speak.js +16 -8
  19. package/mcp-server/server.py +15 -8
  20. package/package.json +1 -1
  21. package/src/console/app.js +899 -897
  22. package/src/console/footer-config.js +50 -50
  23. package/src/console/navigation.js +65 -65
  24. package/src/console/tabs/agents-tab.js +1896 -1886
  25. package/src/console/tabs/music-tab.js +1046 -1039
  26. package/src/console/tabs/placeholder-tab.js +81 -80
  27. package/src/console/tabs/settings-tab.js +939 -3988
  28. package/src/console/tabs/setup-tab.js +1811 -0
  29. package/src/console/tabs/voices-tab.js +1720 -1714
  30. package/src/installer.js +6147 -6092
  31. package/src/services/llm-provider-service.js +407 -0
  32. package/src/services/navigation-service.js +123 -123
  33. package/src/services/tts-engine-service.js +69 -0
  34. package/.claude/audio/tracks/dreamy_house_loop.mp3 +0 -0
  35. 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
+ }