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.
Files changed (95) hide show
  1. package/.agentvibes/config.json +3 -38
  2. package/.claude/commands/agent-vibes/provider.md +0 -0
  3. package/.claude/config/audio-effects.cfg +1 -1
  4. package/.claude/config/background-music-position.txt +6 -8
  5. package/.claude/config/reverb-level.txt +0 -0
  6. package/.claude/github-star-reminder.txt +1 -1
  7. package/.claude/hooks/bmad-tts-injector.sh +49 -21
  8. package/.claude/hooks/provider-commands.sh +16 -4
  9. package/.claude/hooks/provider-manager.sh +38 -0
  10. package/.claude/hooks/stop.sh +2 -27
  11. package/.claude/hooks/voice-manager.sh +50 -2
  12. package/.claude/hooks-windows/play-tts.ps1 +34 -1
  13. package/.claude/hooks-windows/tts-watcher.ps1 +122 -0
  14. package/.claude/piper-voices-dir.txt +1 -1
  15. package/.mcp.json +13 -33
  16. package/README.md +6 -8
  17. package/RELEASE_NOTES.md +32 -0
  18. package/bin/agent-vibes +39 -39
  19. package/package.json +1 -1
  20. package/src/bmad-detector.js +85 -71
  21. package/src/cli/list-personalities.js +110 -110
  22. package/src/cli/list-voices.js +114 -114
  23. package/src/commands/bmad-voices.js +394 -394
  24. package/src/commands/install-mcp.js +476 -476
  25. package/src/console/brand-colors.js +13 -13
  26. package/src/console/constants/personalities.js +44 -44
  27. package/src/console/tabs/help-tab.js +314 -314
  28. package/src/console/tabs/readme-tab.js +272 -272
  29. package/src/console/widgets/destroy-list.js +25 -25
  30. package/src/console/widgets/notice.js +55 -55
  31. package/src/console/widgets/personality-picker.js +213 -213
  32. package/src/i18n/de.js +202 -202
  33. package/src/i18n/es.js +202 -202
  34. package/src/i18n/fr.js +202 -202
  35. package/src/i18n/hi.js +202 -202
  36. package/src/i18n/ja.js +202 -202
  37. package/src/i18n/ko.js +202 -202
  38. package/src/i18n/pt.js +202 -202
  39. package/src/i18n/strings.js +54 -54
  40. package/src/i18n/zh-CN.js +202 -202
  41. package/src/installer/language-screen.js +31 -31
  42. package/src/installer/music-file-input.js +304 -304
  43. package/src/installer.js +70 -7
  44. package/src/services/agent-voice-store.js +59 -12
  45. package/src/services/config-service.js +264 -264
  46. package/src/services/language-service.js +47 -47
  47. package/src/services/provider-service.js +143 -143
  48. package/src/utils/audio-duration-validator.js +298 -298
  49. package/src/utils/audio-format-validator.js +277 -277
  50. package/src/utils/dependency-checker.js +469 -469
  51. package/src/utils/file-ownership-verifier.js +358 -358
  52. package/src/utils/list-formatter.js +194 -194
  53. package/src/utils/music-file-validator.js +285 -285
  54. package/src/utils/preview-list-prompt.js +136 -136
  55. package/src/utils/secure-music-storage.js +412 -412
  56. package/.agentvibes/LITE-MODE.md +0 -236
  57. package/.agentvibes/README.md +0 -136
  58. package/.agentvibes/backup/session-start-tts.sh.20251210_212814 +0 -141
  59. package/.agentvibes/backups/agents/analyst_20260204_144958.md +0 -78
  60. package/.agentvibes/backups/agents/architect_20260204_144958.md +0 -72
  61. package/.agentvibes/backups/agents/dev_20260204_144958.md +0 -74
  62. package/.agentvibes/backups/agents/pm_20260204_144958.md +0 -72
  63. package/.agentvibes/backups/agents/quick-flow-solo-dev_20260204_144958.md +0 -64
  64. package/.agentvibes/backups/agents/sm_20260204_144958.md +0 -87
  65. package/.agentvibes/backups/agents/tea_20260204_144958.md +0 -79
  66. package/.agentvibes/backups/agents/tech-writer_20260204_144958.md +0 -82
  67. package/.agentvibes/backups/agents/ux-designer_20260204_144958.md +0 -80
  68. package/.agentvibes/config/README-personality-defaults.md +0 -162
  69. package/.agentvibes/config/agentvibes.json +0 -1
  70. package/.agentvibes/config/mode.txt +0 -1
  71. package/.agentvibes/config/personality-voice-defaults.default.json +0 -21
  72. package/.agentvibes/config/save-audio.txt +0 -1
  73. package/.agentvibes/config/voice-metadata.json +0 -160
  74. package/.agentvibes/hooks/help.sh +0 -191
  75. package/.agentvibes/hooks/post-tool-use-lite.sh +0 -111
  76. package/.agentvibes/hooks/save-audio-manager.sh +0 -162
  77. package/.agentvibes/hooks/session-start-full-optimized.sh +0 -102
  78. package/.agentvibes/hooks/session-start-full.sh +0 -142
  79. package/.agentvibes/hooks/session-start-lite-v2.sh +0 -34
  80. package/.agentvibes/hooks/session-start-lite.sh +0 -29
  81. package/.agentvibes/hooks/stop-lite.sh +0 -115
  82. package/.agentvibes/hooks/switch-mode.sh +0 -215
  83. package/.agentvibes/output-styles/audio-summary.md +0 -30
  84. package/.claude/audio/voice-samples/piper/alan.wav +0 -0
  85. package/.claude/audio/voice-samples/piper/amy.wav +0 -0
  86. package/.claude/audio/voice-samples/piper/charlotte.wav +0 -0
  87. package/.claude/audio/voice-samples/piper/joe.wav +0 -0
  88. package/.claude/audio/voice-samples/piper/john.wav +0 -0
  89. package/.claude/audio/voice-samples/piper/katherine.wav +0 -0
  90. package/.claude/audio/voice-samples/piper/kristin.wav +0 -0
  91. package/.claude/audio/voice-samples/piper/linda.wav +0 -0
  92. package/.claude/audio/voice-samples/piper/marcus.wav +0 -0
  93. package/.claude/audio/voice-samples/piper/ryan.wav +0 -0
  94. package/.claude/hooks/post-response.sh +0 -41
  95. package/bin/ensure-soprano-running.sh +0 -43
@@ -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();