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
|
@@ -1,50 +1,50 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AgentVibes TUI Console — Context Footer Configuration
|
|
3
|
-
* Story 6.3: Color-Coded Context Footer System
|
|
4
|
-
*
|
|
5
|
-
* Per-tab footer colors and keyboard shortcut hint text.
|
|
6
|
-
* Keys are styled in magenta ({#ff00ff-fg}{bold}); actions follow in plain text.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
/** Fallback footer background color */
|
|
10
|
-
export const DEFAULT_FOOTER_COLOR = '#1a237e';
|
|
11
|
-
|
|
12
|
-
/** Helper: wrap a key label in magenta bold tags */
|
|
13
|
-
function key(label) {
|
|
14
|
-
return `{#ff00ff-fg}{bold}[${label}]{/bold}{/#ff00ff-fg}`;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export const FOOTER_CONFIG = {
|
|
18
|
-
settings: {
|
|
19
|
-
color: '#2196f3',
|
|
20
|
-
text: ` ${key('↑↓')} Navigate ${key('←→')} Same Row ${key('Enter')} Activate ${key('Space')} Preview ${key('Esc')} Cancel`,
|
|
21
|
-
},
|
|
22
|
-
voices: {
|
|
23
|
-
color: '#00bcd4',
|
|
24
|
-
text: ` ${key('1-6')} Sort ${key('/')} Search ${key('P')} Provider ${key('F')} Favorites ${key('Space')} Preview ${key('*')} Fav ${key('I')} Install`,
|
|
25
|
-
},
|
|
26
|
-
music: {
|
|
27
|
-
color: '#ff9800',
|
|
28
|
-
text: ` ${key('Space')} Preview ${key('Enter')} Select ${key('M')} Toggle ${key('*')} Fav ${key('F')} Filter ${key('↑↓')} Navigate`,
|
|
29
|
-
},
|
|
30
|
-
readme: {
|
|
31
|
-
color: '#455a64',
|
|
32
|
-
text: ` ${key('↑↓')} Scroll ${key('PgUp/PgDn')} Page ${key('Home/End')} Jump`,
|
|
33
|
-
},
|
|
34
|
-
help: {
|
|
35
|
-
color: '#607d8b',
|
|
36
|
-
text: ` ${key('↑↓')} Scroll ${key('Q')} Quit`,
|
|
37
|
-
},
|
|
38
|
-
agents: {
|
|
39
|
-
color: '#9c27b0',
|
|
40
|
-
text: ` ${key('↑↓')} Navigate ${key('Enter')} Edit Agent ${key('Space')} Sample ${key('R')} Reset`,
|
|
41
|
-
},
|
|
42
|
-
receiver: {
|
|
43
|
-
color: '#00897b',
|
|
44
|
-
text: ` ${key('E')} Enable ${key('P')} Test ${key('D')} Details ${key('C')} Clear Log`,
|
|
45
|
-
},
|
|
46
|
-
|
|
47
|
-
color: '#1a237e',
|
|
48
|
-
text: ` ${key('↑↓')} Navigate ${key('Enter')} Select ${key('Esc')} Back`,
|
|
49
|
-
},
|
|
50
|
-
};
|
|
1
|
+
/**
|
|
2
|
+
* AgentVibes TUI Console — Context Footer Configuration
|
|
3
|
+
* Story 6.3: Color-Coded Context Footer System
|
|
4
|
+
*
|
|
5
|
+
* Per-tab footer colors and keyboard shortcut hint text.
|
|
6
|
+
* Keys are styled in magenta ({#ff00ff-fg}{bold}); actions follow in plain text.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/** Fallback footer background color */
|
|
10
|
+
export const DEFAULT_FOOTER_COLOR = '#1a237e';
|
|
11
|
+
|
|
12
|
+
/** Helper: wrap a key label in magenta bold tags */
|
|
13
|
+
function key(label) {
|
|
14
|
+
return `{#ff00ff-fg}{bold}[${label}]{/bold}{/#ff00ff-fg}`;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const FOOTER_CONFIG = {
|
|
18
|
+
settings: {
|
|
19
|
+
color: '#2196f3',
|
|
20
|
+
text: ` ${key('↑↓')} Navigate ${key('←→')} Same Row ${key('Enter')} Activate ${key('Space')} Preview ${key('Esc')} Cancel`,
|
|
21
|
+
},
|
|
22
|
+
voices: {
|
|
23
|
+
color: '#00bcd4',
|
|
24
|
+
text: ` ${key('1-6')} Sort ${key('/')} Search ${key('P')} Provider ${key('F')} Favorites ${key('Space')} Preview ${key('*')} Fav ${key('I')} Install`,
|
|
25
|
+
},
|
|
26
|
+
music: {
|
|
27
|
+
color: '#ff9800',
|
|
28
|
+
text: ` ${key('Space')} Preview ${key('Enter')} Select ${key('M')} Toggle ${key('*')} Fav ${key('F')} Filter ${key('↑↓')} Navigate`,
|
|
29
|
+
},
|
|
30
|
+
readme: {
|
|
31
|
+
color: '#455a64',
|
|
32
|
+
text: ` ${key('↑↓')} Scroll ${key('PgUp/PgDn')} Page ${key('Home/End')} Jump`,
|
|
33
|
+
},
|
|
34
|
+
help: {
|
|
35
|
+
color: '#607d8b',
|
|
36
|
+
text: ` ${key('↑↓')} Scroll ${key('Q')} Quit`,
|
|
37
|
+
},
|
|
38
|
+
agents: {
|
|
39
|
+
color: '#9c27b0',
|
|
40
|
+
text: ` ${key('↑↓')} Navigate ${key('Enter')} Edit Agent ${key('Space')} Sample ${key('R')} Reset`,
|
|
41
|
+
},
|
|
42
|
+
receiver: {
|
|
43
|
+
color: '#00897b',
|
|
44
|
+
text: ` ${key('E')} Enable ${key('P')} Test ${key('D')} Details ${key('C')} Clear Log`,
|
|
45
|
+
},
|
|
46
|
+
setup: {
|
|
47
|
+
color: '#1a237e',
|
|
48
|
+
text: ` ${key('↑↓')} Navigate ${key('Enter')} Select ${key('Esc')} Back`,
|
|
49
|
+
},
|
|
50
|
+
};
|
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AgentVibes TUI Console — Global Keyboard Navigation
|
|
3
|
-
* Story 6.2: Tab Bar & Global Keyboard Navigation
|
|
4
|
-
*
|
|
5
|
-
* Registers all global key bindings on the Blessed screen.
|
|
6
|
-
* Tab shortcuts (S/V/M/X/R/H/I) are blocked when a modal is open.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
/** Map of key → tab ID for global tab shortcut keys */
|
|
10
|
-
const KEY_TO_TAB = {
|
|
11
|
-
's': 'settings', 'S': 'settings',
|
|
12
|
-
'v': 'voices', 'V': 'voices',
|
|
13
|
-
'm': 'music', 'M': 'music',
|
|
14
|
-
'b': 'agents', 'B': 'agents',
|
|
15
|
-
'x': 'receiver', 'X': 'receiver',
|
|
16
|
-
'r': 'readme', 'R': 'readme',
|
|
17
|
-
'h': 'help', 'H': 'help',
|
|
18
|
-
'i': '
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Register all global keyboard navigation handlers on the Blessed screen.
|
|
23
|
-
*
|
|
24
|
-
* Handlers registered:
|
|
25
|
-
* S/V/M/A/R/H/I → switchTab (blocked when modal is open)
|
|
26
|
-
* Tab / T/t → cycleTab forward (blocked when modal is open)
|
|
27
|
-
* Shift+Tab → cycleTab backward (blocked when modal is open)
|
|
28
|
-
* Escape → closeModal (only when modal is open)
|
|
29
|
-
*
|
|
30
|
-
* Arrow keys (left/right) are intentionally NOT used for tab cycling —
|
|
31
|
-
* individual tabs use left/right for in-element navigation (e.g. row siblings).
|
|
32
|
-
*
|
|
33
|
-
* NOTE: Q / Ctrl+C are already registered in app.js (_registerHandlers).
|
|
34
|
-
* Do NOT re-register them here — that would stack duplicate quit handlers.
|
|
35
|
-
*
|
|
36
|
-
* @param {object} screen - Blessed screen instance (or stub in tests)
|
|
37
|
-
* @param {import('../services/navigation-service.js').NavigationService} navigationService
|
|
38
|
-
* @param {function} [focusMainTabBar] - Optional callback to return focus to the tab bar
|
|
39
|
-
*/
|
|
40
|
-
export function setupNavigation(screen, navigationService, focusMainTabBar) {
|
|
41
|
-
// Tab switching shortcuts — one handler per key (both cases)
|
|
42
|
-
for (const [key, tabId] of Object.entries(KEY_TO_TAB)) {
|
|
43
|
-
screen.key([key], () => {
|
|
44
|
-
if (!navigationService.isModalOpen()) {
|
|
45
|
-
navigationService.switchTab(tabId);
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// T → cycle to next tab (Tab itself is handled by the tab bar and footer only)
|
|
51
|
-
screen.key(['t', 'T'], () => {
|
|
52
|
-
if (!navigationService.isModalOpen()) {
|
|
53
|
-
navigationService.cycleTab();
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
// Escape — close modal if open, otherwise return focus to tab bar
|
|
58
|
-
screen.key(['escape'], () => {
|
|
59
|
-
if (navigationService.isModalOpen()) {
|
|
60
|
-
navigationService.closeModal();
|
|
61
|
-
} else if (typeof focusMainTabBar === 'function') {
|
|
62
|
-
focusMainTabBar();
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* AgentVibes TUI Console — Global Keyboard Navigation
|
|
3
|
+
* Story 6.2: Tab Bar & Global Keyboard Navigation
|
|
4
|
+
*
|
|
5
|
+
* Registers all global key bindings on the Blessed screen.
|
|
6
|
+
* Tab shortcuts (S/V/M/X/R/H/I) are blocked when a modal is open.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/** Map of key → tab ID for global tab shortcut keys */
|
|
10
|
+
const KEY_TO_TAB = {
|
|
11
|
+
's': 'settings', 'S': 'settings',
|
|
12
|
+
'v': 'voices', 'V': 'voices',
|
|
13
|
+
'm': 'music', 'M': 'music',
|
|
14
|
+
'b': 'agents', 'B': 'agents',
|
|
15
|
+
'x': 'receiver', 'X': 'receiver',
|
|
16
|
+
'r': 'readme', 'R': 'readme',
|
|
17
|
+
'h': 'help', 'H': 'help',
|
|
18
|
+
'i': 'setup', 'I': 'setup',
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Register all global keyboard navigation handlers on the Blessed screen.
|
|
23
|
+
*
|
|
24
|
+
* Handlers registered:
|
|
25
|
+
* S/V/M/A/R/H/I → switchTab (blocked when modal is open)
|
|
26
|
+
* Tab / T/t → cycleTab forward (blocked when modal is open)
|
|
27
|
+
* Shift+Tab → cycleTab backward (blocked when modal is open)
|
|
28
|
+
* Escape → closeModal (only when modal is open)
|
|
29
|
+
*
|
|
30
|
+
* Arrow keys (left/right) are intentionally NOT used for tab cycling —
|
|
31
|
+
* individual tabs use left/right for in-element navigation (e.g. row siblings).
|
|
32
|
+
*
|
|
33
|
+
* NOTE: Q / Ctrl+C are already registered in app.js (_registerHandlers).
|
|
34
|
+
* Do NOT re-register them here — that would stack duplicate quit handlers.
|
|
35
|
+
*
|
|
36
|
+
* @param {object} screen - Blessed screen instance (or stub in tests)
|
|
37
|
+
* @param {import('../services/navigation-service.js').NavigationService} navigationService
|
|
38
|
+
* @param {function} [focusMainTabBar] - Optional callback to return focus to the tab bar
|
|
39
|
+
*/
|
|
40
|
+
export function setupNavigation(screen, navigationService, focusMainTabBar) {
|
|
41
|
+
// Tab switching shortcuts — one handler per key (both cases)
|
|
42
|
+
for (const [key, tabId] of Object.entries(KEY_TO_TAB)) {
|
|
43
|
+
screen.key([key], () => {
|
|
44
|
+
if (!navigationService.isModalOpen()) {
|
|
45
|
+
navigationService.switchTab(tabId);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// T → cycle to next tab (Tab itself is handled by the tab bar and footer only)
|
|
51
|
+
screen.key(['t', 'T'], () => {
|
|
52
|
+
if (!navigationService.isModalOpen()) {
|
|
53
|
+
navigationService.cycleTab();
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
// Escape — close modal if open, otherwise return focus to tab bar
|
|
58
|
+
screen.key(['escape'], () => {
|
|
59
|
+
if (navigationService.isModalOpen()) {
|
|
60
|
+
navigationService.closeModal();
|
|
61
|
+
} else if (typeof focusMainTabBar === 'function') {
|
|
62
|
+
focusMainTabBar();
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|