agentvibes 4.6.8 → 5.1.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 (40) 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/Drifting Down the Hall.mp3 +0 -0
  5. package/.claude/audio/tracks/Late Night Hip Hop Groove.mp3 +0 -0
  6. package/.claude/audio/tracks/Midnight Charleston Stomp.mp3 +0 -0
  7. package/.claude/audio/tracks/README.md +51 -52
  8. package/.claude/config/audio-effects-bmad.cfg +50 -0
  9. package/.claude/config/audio-effects.cfg +4 -4
  10. package/.claude/config/background-music-enabled.txt +1 -0
  11. package/.claude/config/personality.txt +1 -0
  12. package/.claude/hooks/play-tts-piper.sh +3 -1
  13. package/.claude/hooks/play-tts.sh +380 -301
  14. package/.claude/hooks/session-start-tts.sh +81 -81
  15. package/.claude/hooks-windows/audio-processor.ps1 +181 -0
  16. package/.claude/hooks-windows/play-tts-piper.ps1 +259 -245
  17. package/.claude/hooks-windows/play-tts.ps1 +28 -6
  18. package/.claude/hooks-windows/session-start-tts.ps1 +114 -114
  19. package/README.md +112 -6
  20. package/RELEASE_NOTES.md +83 -0
  21. package/bin/bmad-speak.js +16 -8
  22. package/mcp-server/server.py +15 -8
  23. package/package.json +1 -1
  24. package/src/console/app.js +899 -897
  25. package/src/console/footer-config.js +50 -50
  26. package/src/console/navigation.js +65 -65
  27. package/src/console/tabs/agents-tab.js +1899 -1886
  28. package/src/console/tabs/music-tab.js +1076 -1039
  29. package/src/console/tabs/placeholder-tab.js +81 -80
  30. package/src/console/tabs/settings-tab.js +941 -3988
  31. package/src/console/tabs/setup-tab.js +2071 -0
  32. package/src/console/tabs/voices-tab.js +1843 -1714
  33. package/src/console/widgets/format-utils.js +92 -89
  34. package/src/console/widgets/track-picker.js +325 -322
  35. package/src/installer.js +6147 -6092
  36. package/src/services/llm-provider-service.js +486 -0
  37. package/src/services/navigation-service.js +123 -123
  38. package/src/services/tts-engine-service.js +69 -0
  39. package/.claude/audio/tracks/dreamy_house_loop.mp3 +0 -0
  40. package/src/console/tabs/install-tab.js +0 -1081
@@ -1,80 +1,81 @@
1
- /**
2
- * AgentVibes TUI Console — Placeholder Tab Component
3
- * Story 6.2: Tab Bar & Global Keyboard Navigation
4
- *
5
- * Creates a stub content box for each tab ID.
6
- * These are replaced by real tab implementations in Epics 7-11.
7
- */
8
-
9
- import blessed from 'blessed';
10
- import { t } from '../../i18n/strings.js';
11
-
12
- /**
13
- * Create a hidden placeholder box for a tab, appended into the content area.
14
- *
15
- * @param {object} contentArea - Blessed box to append into (this.contentArea from app.js)
16
- * @param {string} label - Human-readable tab name for display (e.g. 'Settings')
17
- * @returns {object} The created Blessed box widget
18
- */
19
- export function createPlaceholderTab(contentArea, label) {
20
- const box = blessed.box({
21
- parent: contentArea,
22
- top: 0,
23
- left: 0,
24
- width: '100%',
25
- height: '100%',
26
- content: `{center}{bold}${label}{/bold}{/center}\n\n{center}Coming in a future story...{/center}`,
27
- tags: true,
28
- hidden: true,
29
- style: {
30
- fg: '#90a4ae',
31
- bg: '#0a0e1a',
32
- },
33
- });
34
-
35
- return box;
36
- }
37
-
38
- /** Map of tabId → display label for all tabs */
39
- export const TAB_DISPLAY_LABELS = {
40
- settings: 'Settings',
41
- voices: 'Voices',
42
- music: 'Music',
43
- agents: 'BMad',
44
- receiver: 'Receiver',
45
- readme: 'Readme',
46
- help: 'Help',
47
- install: 'Install',
48
- };
49
-
50
- /** Override shortcut key for tabs where first letter conflicts */
51
- export const TAB_SHORTCUT_KEYS = {
52
- agents: 'B',
53
- receiver: 'X',
54
- };
55
-
56
- /**
57
- * Return the translated display label for a tab.
58
- * Falls back to TAB_DISPLAY_LABELS[id] if no i18n key is found.
59
- *
60
- * @param {string} id - Tab identifier (e.g. 'settings', 'voices')
61
- * @param {string} lang - BCP-47 language code (e.g. 'es', 'zh-CN')
62
- * @returns {string}
63
- */
64
- export function getTabLabel(id, lang = 'en') {
65
- const keyMap = {
66
- install: 'tabInstall',
67
- settings: 'tabSettings',
68
- voices: 'tabVoices',
69
- music: 'tabMusic',
70
- agents: 'tabBmad',
71
- receiver: 'tabReceiver',
72
- readme: 'tabReadme',
73
- help: 'tabHelp',
74
- };
75
- const key = keyMap[id];
76
- if (!key) return TAB_DISPLAY_LABELS[id] ?? id;
77
- const translated = t(lang, key);
78
- // t() returns the key itself when missing — fall back to English display label
79
- return (translated && translated !== key) ? translated : (TAB_DISPLAY_LABELS[id] ?? id);
80
- }
1
+ /**
2
+ * AgentVibes TUI Console — Placeholder Tab Component
3
+ * Story 6.2: Tab Bar & Global Keyboard Navigation
4
+ *
5
+ * Creates a stub content box for each tab ID.
6
+ * These are replaced by real tab implementations in Epics 7-11.
7
+ */
8
+
9
+ import blessed from 'blessed';
10
+ import { t } from '../../i18n/strings.js';
11
+
12
+ /**
13
+ * Create a hidden placeholder box for a tab, appended into the content area.
14
+ *
15
+ * @param {object} contentArea - Blessed box to append into (this.contentArea from app.js)
16
+ * @param {string} label - Human-readable tab name for display (e.g. 'Settings')
17
+ * @returns {object} The created Blessed box widget
18
+ */
19
+ export function createPlaceholderTab(contentArea, label) {
20
+ const box = blessed.box({
21
+ parent: contentArea,
22
+ top: 0,
23
+ left: 0,
24
+ width: '100%',
25
+ height: '100%',
26
+ content: `{center}{bold}${label}{/bold}{/center}\n\n{center}Coming in a future story...{/center}`,
27
+ tags: true,
28
+ hidden: true,
29
+ style: {
30
+ fg: '#90a4ae',
31
+ bg: '#0a0e1a',
32
+ },
33
+ });
34
+
35
+ return box;
36
+ }
37
+
38
+ /** Map of tabId → display label for all tabs */
39
+ export const TAB_DISPLAY_LABELS = {
40
+ settings: 'Settings',
41
+ voices: 'Voices',
42
+ music: 'Music',
43
+ agents: 'BMad',
44
+ receiver: 'Receiver',
45
+ readme: 'Readme',
46
+ help: 'Help',
47
+ setup: 'Setup',
48
+ };
49
+
50
+ /** Override shortcut key for tabs where first letter conflicts */
51
+ export const TAB_SHORTCUT_KEYS = {
52
+ setup: 'I',
53
+ agents: 'B',
54
+ receiver: 'X',
55
+ };
56
+
57
+ /**
58
+ * Return the translated display label for a tab.
59
+ * Falls back to TAB_DISPLAY_LABELS[id] if no i18n key is found.
60
+ *
61
+ * @param {string} id - Tab identifier (e.g. 'settings', 'voices')
62
+ * @param {string} lang - BCP-47 language code (e.g. 'es', 'zh-CN')
63
+ * @returns {string}
64
+ */
65
+ export function getTabLabel(id, lang = 'en') {
66
+ const keyMap = {
67
+ setup: 'tabSetup',
68
+ settings: 'tabSettings',
69
+ voices: 'tabVoices',
70
+ music: 'tabMusic',
71
+ agents: 'tabBmad',
72
+ receiver: 'tabReceiver',
73
+ readme: 'tabReadme',
74
+ help: 'tabHelp',
75
+ };
76
+ const key = keyMap[id];
77
+ if (!key) return TAB_DISPLAY_LABELS[id] ?? id;
78
+ const translated = t(lang, key);
79
+ // t() returns the key itself when missing fall back to English display label
80
+ return (translated && translated !== key) ? translated : (TAB_DISPLAY_LABELS[id] ?? id);
81
+ }