Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
8b3dca1
fix: replace hardcoded color values with theme tokens for accessibility
openasocket Feb 15, 2026
92032af
feat: extend theme system with 17 new semantic color tokens
openasocket Feb 15, 2026
070bc33
fix: complete theme token coverage in CustomThemeBuilder and remainin…
openasocket Feb 15, 2026
b394576
fix: use bgActivity for disabled Send button background in Wizard
openasocket Feb 15, 2026
d05e071
fix: tune Dre Synth status colors for better visual distinction
openasocket Feb 15, 2026
2ceefbf
fix: change Dre Synth border from bright teal to muted dark teal
openasocket Feb 15, 2026
610e2ae
feat: add auto-scroll toggle for AI output with scroll-aware pause/re…
openasocket Feb 16, 2026
9b22060
fix: auto-scroll settings propagation and browser scroll anchoring
openasocket Feb 16, 2026
9e1a9ff
MAESTRO: merge saved custom theme colors with defaults for migration
openasocket Feb 17, 2026
fb4874f
MAESTRO: fix accentForeground used on non-accent backgrounds
openasocket Feb 17, 2026
f590e21
MAESTRO: fix bgMain used as foreground color in search highlights
openasocket Feb 17, 2026
0057c53
MAESTRO: expand REQUIRED_COLORS test array to cover all 30 ThemeColor…
openasocket Feb 17, 2026
c89cb00
MAESTRO: replace ~40 hardcoded colors with semantic theme tokens acro…
openasocket Feb 17, 2026
10748d2
MAESTRO: consume unused theme tokens (overlay, shadow, diff, info, ho…
openasocket Feb 17, 2026
199cad7
MAESTRO: replace remaining hardcoded foreground colors with semantic …
openasocket Feb 17, 2026
719b660
MAESTRO: remove dead programmaticScrollRef from TerminalOutput
openasocket Feb 17, 2026
3dbedf4
MAESTRO: extract IIFE to isAutoScrollActive variable in TerminalOutput
openasocket Feb 17, 2026
a355187
MAESTRO: snap to bottom on auto-scroll resume instead of waiting for …
openasocket Feb 17, 2026
f2efaf0
MAESTRO: remove redundant session.shellLogs.length from auto-scroll e…
openasocket Feb 17, 2026
4406da6
MAESTRO: add auto-scroll feature tests covering settings, shortcuts, …
openasocket Feb 17, 2026
31f2d52
MAESTRO: add toggleAutoScroll entry to QuickActionsModal (Cmd+K) comm…
openasocket Feb 17, 2026
1babf93
Merge branch 'feat/auto-scroll-toggle'
openasocket Feb 17, 2026
8708e73
merge main into fix/theme-integration
openasocket Feb 17, 2026
779f9bf
MAESTRO: resolve TerminalOutput.tsx theme conflict — apply warningFor…
openasocket Feb 28, 2026
4fd5938
MAESTRO: resolve settingsStore.ts theme conflict — add custom theme m…
openasocket Feb 28, 2026
67479d9
fix: address CodeRabbit review feedback — replace hardcoded colors wi…
openasocket Feb 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/__tests__/renderer/components/AgentSessionsModal.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -1455,7 +1455,7 @@ describe('AgentSessionsModal', () => {
await waitFor(() => {
const messageBubble = screen.getByText('Dark mode message').closest('.rounded-lg');
expect(messageBubble).toHaveStyle({ backgroundColor: mockTheme.colors.accent });
expect(messageBubble).toHaveStyle({ color: '#000' }); // Dark mode uses black text
expect(messageBubble).toHaveStyle({ color: mockTheme.colors.accentForeground });
});
});

Expand Down Expand Up @@ -1488,7 +1488,7 @@ describe('AgentSessionsModal', () => {

await waitFor(() => {
const messageBubble = screen.getByText('Light mode message').closest('.rounded-lg');
expect(messageBubble).toHaveStyle({ color: '#fff' }); // Light mode uses white text
expect(messageBubble).toHaveStyle({ color: lightTheme.colors.accentForeground });
});
});
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@ const createMockTheme = (): Theme => ({
success: '#00aa00',
warning: '#ffaa00',
error: '#ff0000',
overlayHeavy: 'rgba(0, 0, 0, 0.8)',
},
});

Expand Down Expand Up @@ -701,7 +702,7 @@ describe('AutoRunExpandedModal', () => {
const { container } = renderWithProvider(<AutoRunExpandedModal {...props} />);

const overlay = container.querySelector('.fixed.inset-0');
expect(overlay).toHaveStyle({ backgroundColor: 'rgba(0,0,0,0.7)' });
expect(overlay).toHaveStyle({ backgroundColor: props.theme.colors.overlayHeavy });
});

it('should have 90vw width and 80vh height', () => {
Expand Down
17 changes: 17 additions & 0 deletions src/__tests__/renderer/components/CustomThemeBuilder.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,23 @@ const mockThemeColors: ThemeColors = {
success: '#10b981',
warning: '#f59e0b',
error: '#ef4444',
info: '#3b82f6',
successForeground: '#1a1a2e',
warningForeground: '#1a1a2e',
errorForeground: '#1a1a2e',
successDim: 'rgba(16, 185, 129, 0.15)',
warningDim: 'rgba(245, 158, 11, 0.15)',
errorDim: 'rgba(239, 68, 68, 0.15)',
infoDim: 'rgba(59, 130, 246, 0.15)',
diffAddition: '#10b981',
diffAdditionBg: 'rgba(16, 185, 129, 0.15)',
diffDeletion: '#ef4444',
diffDeletionBg: 'rgba(239, 68, 68, 0.15)',
overlay: 'rgba(0, 0, 0, 0.6)',
overlayHeavy: 'rgba(0, 0, 0, 0.8)',
hoverBg: 'rgba(255, 255, 255, 0.06)',
activeBg: 'rgba(255, 255, 255, 0.15)',
shadow: 'rgba(0, 0, 0, 0.3)',
};

const mockTheme: Theme = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ const mockTheme: Theme = {
success: '#50fa7b',
warning: '#ffb86c',
error: '#ff5555',
info: '#8be9fd',
},
};

Expand Down Expand Up @@ -835,7 +836,7 @@ describe('DocumentNode', () => {

const indicator = screen.getByTestId('large-file-indicator');
expect(indicator).toHaveStyle({
color: '#3b82f6',
color: mockTheme.colors.info,
});
});

Expand Down
32 changes: 24 additions & 8 deletions src/__tests__/renderer/components/GitDiffViewer.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,10 @@ const mockTheme = {
vibe: '#8855ff',
statusBar: '#0d0d1a',
scrollbarThumb: '#444466',
diffAddition: '#50fa7b',
diffAdditionBg: 'rgba(80, 250, 123, 0.15)',
diffDeletion: '#ff5555',
diffDeletionBg: 'rgba(255, 85, 85, 0.15)',
},
};

Expand Down Expand Up @@ -830,7 +834,7 @@ describe('GitDiffViewer', () => {
const onClose = vi.fn();
mockParseGitDiff.mockReturnValue([createMockParsedFile()]);

render(
const { container } = render(
<GitDiffViewer
diffText="mock diff"
cwd="/test/project"
Expand All @@ -839,9 +843,15 @@ describe('GitDiffViewer', () => {
/>
);

// The Plus icon from lucide-react should be present with green color
const greenSpans = document.querySelectorAll('.text-green-500');
expect(greenSpans.length).toBeGreaterThan(0);
// The additions span uses inline style with diffAddition theme color
const allSpans = Array.from(container.querySelectorAll('span'));
const additionSpan = allSpans.find(
(span) =>
span.style.color &&
(span.style.color === mockTheme.colors.diffAddition ||
span.style.color.includes('80, 250, 123'))
);
expect(additionSpan).toBeTruthy();
});

it('shows deletions in tab for text files with deletions', () => {
Expand Down Expand Up @@ -882,7 +892,7 @@ describe('GitDiffViewer', () => {
}),
]);

render(
const { container } = render(
<GitDiffViewer
diffText="mock diff"
cwd="/test/project"
Expand All @@ -891,9 +901,15 @@ describe('GitDiffViewer', () => {
/>
);

// There should be red minus sign for deletions
const redSpans = document.querySelectorAll('.text-red-500');
expect(redSpans.length).toBeGreaterThan(0);
// The deletions span uses inline style with diffDeletion theme color
const allSpans = Array.from(container.querySelectorAll('span'));
const deletionSpan = allSpans.find(
(span) =>
span.style.color &&
(span.style.color === mockTheme.colors.diffDeletion ||
span.style.color.includes('255, 85, 85'))
);
expect(deletionSpan).toBeTruthy();
});

it('shows additions and deletions in footer', () => {
Expand Down
4 changes: 2 additions & 2 deletions src/__tests__/renderer/components/HistoryHelpModal.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -474,10 +474,10 @@ describe('HistoryHelpModal', () => {
'font-medium',
'transition-colors'
);
// Check for accent background - the exact RGB value
// Check for accent background and theme-based foreground color
const style = gotItButton.getAttribute('style');
expect(style).toContain('background-color');
expect(style).toContain('color: white');
expect(style).toContain('color');
});

it('calls onClose when "Got it" button is clicked', () => {
Expand Down
7 changes: 4 additions & 3 deletions src/__tests__/renderer/components/LogViewer.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ const mockTheme: Theme = {
error: '#ff5555',
warning: '#ffb86c',
success: '#50fa7b',
info: '#8be9fd',
syntaxComment: '#6272a4',
syntaxKeyword: '#ff79c6',
},
Expand Down Expand Up @@ -936,7 +937,7 @@ describe('LogViewer', () => {

await waitFor(() => {
const levelPill = screen.getByText('info');
expect(levelPill).toHaveStyle({ color: '#3b82f6' });
expect(levelPill).toHaveStyle({ color: mockTheme.colors.info });
});
});

Expand All @@ -947,7 +948,7 @@ describe('LogViewer', () => {

await waitFor(() => {
const levelPill = screen.getByText('warn');
expect(levelPill).toHaveStyle({ color: '#f59e0b' });
expect(levelPill).toHaveStyle({ color: mockTheme.colors.warning });
});
});

Expand All @@ -958,7 +959,7 @@ describe('LogViewer', () => {

await waitFor(() => {
const levelPill = screen.getByText('error');
expect(levelPill).toHaveStyle({ color: '#ef4444' });
expect(levelPill).toHaveStyle({ color: mockTheme.colors.error });
});
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ const mockTheme: Theme = {
headerBg: '#202020',
scrollbarTrack: '#1a1a1a',
scrollbarThumb: '#444444',
overlayHeavy: 'rgba(0, 0, 0, 0.8)',
},
};

Expand Down Expand Up @@ -1003,7 +1004,7 @@ describe('PromptComposerModal', () => {
);

const overlay = container.querySelector('.fixed.inset-0');
expect(overlay).toHaveStyle({ backgroundColor: 'rgba(0,0,0,0.7)' });
expect(overlay).toHaveStyle({ backgroundColor: mockTheme.colors.overlayHeavy });
});

it('should have modal content with rounded corners and border', () => {
Expand Down
7 changes: 4 additions & 3 deletions src/__tests__/renderer/components/TabBar.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@ const mockTheme: Theme = {
warning: '#ffaa00',
vibe: '#ff00ff',
agentStatus: '#00ff00',
hoverBg: 'rgba(255, 255, 255, 0.06)',
},
};

Expand Down Expand Up @@ -1688,11 +1689,11 @@ describe('TabBar', () => {

// Before hover - check inline style is not hover state
const initialBgColor = inactiveTab.style.backgroundColor;
expect(initialBgColor).not.toBe('rgba(255, 255, 255, 0.08)');
expect(initialBgColor).not.toBe(mockTheme.colors.hoverBg);

// Hover
fireEvent.mouseEnter(inactiveTab);
expect(inactiveTab.style.backgroundColor).toBe('rgba(255, 255, 255, 0.08)');
expect(inactiveTab.style.backgroundColor).toBe(mockTheme.colors.hoverBg);

// Leave
fireEvent.mouseLeave(inactiveTab);
Expand All @@ -1703,7 +1704,7 @@ describe('TabBar', () => {
});

// Background color should no longer be hover state
expect(inactiveTab.style.backgroundColor).not.toBe('rgba(255, 255, 255, 0.08)');
expect(inactiveTab.style.backgroundColor).not.toBe(mockTheme.colors.hoverBg);
});

it('does not set title attribute on tabs (removed for cleaner UX)', () => {
Expand Down
Loading