Skip to content

Commit baa36e2

Browse files
committed
feat: cat familiar mascot + full OpenCoven violet color sweep
rustle.rs — cat familiar redesign: - New ASCII cat: ear tips (▄ ▄▄▄ ▄), whisker arms (──▌ / ▐──), rounded body (▌█████▐), paw arches (▄▀ ▀▄) - Default pose: flat whiskers; ArmsUp: tilted whiskers (▀─▌ / ▐─▀) - LookLeft/Right/Down: quarter-block eye shifts - Loading: spinning violet glow gradient (white → violet-300 → violet-500 → violet-900) instead of pink - Body color: #8B5CF6 violet-500 (was pink #e91e63) - Eye socket: #C4B5FD violet-300 on near-black #0F0528 - All 4 new mascot tests pass Color sweep across TUI (keeps theme_colors.rs as palette authority): - CLAUDE_ORANGE constants → COVEN_VIOLET (#8B5CF6 violet-500) in render.rs and messages/mod.rs - All hardcoded Color::Rgb(233, 30, 99) pink → violet-500 - All hardcoded Color::Cyan → Color::Rgb(167, 139, 250) violet-400 (action color, warm not cold) - osc8.rs: crossterm Color::Rgb uses struct syntax {r,g,b} — fixed compile error from naive substitution - custom_provider_dialog.rs: pink → violet local var rename Pre-existing tui test failures unchanged (4 upstream failures).
1 parent 9a71946 commit baa36e2

21 files changed

Lines changed: 61 additions & 61 deletions

src-rust/crates/tui/src/agents_view.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ impl AgentStatus {
5757
Self::Idle => Color::DarkGray,
5858
Self::Running => Color::Green,
5959
Self::WaitingForTool => Color::Yellow,
60-
Self::Complete => Color::Cyan,
60+
Self::Complete => Color::Rgb(167, 139, 250),
6161
Self::Failed => Color::Red,
6262
}
6363
}
@@ -900,7 +900,7 @@ pub fn render_coordinator_status(agents: &[AgentInfo], area: Rect, buf: &mut Buf
900900

901901
let (prefix, role_badge, role_color, indent) = match &agent.agent_role {
902902
AgentRole::Manager => ("● ", "[MGR]", Color::Magenta, ""),
903-
AgentRole::Executor { .. } => (" ○ ", "[EXE]", Color::Cyan, " "),
903+
AgentRole::Executor { .. } => (" ○ ", "[EXE]", Color::Rgb(167, 139, 250), " "),
904904
AgentRole::Normal => {
905905
if agent.is_coordinator {
906906
("● ", "", Color::Green, "")

src-rust/crates/tui/src/app.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1162,7 +1162,7 @@ Move immutable borrow out of scope first, then take mutable. Good good good afte
11621162
}
11631163

11641164
/// Accent color for build mode (default pink).
1165-
pub const ACCENT_BUILD: Color = Color::Rgb(233, 30, 99);
1165+
pub const ACCENT_BUILD: Color = Color::Rgb(139, 92, 246);
11661166
/// Accent color for plan mode (blue).
11671167
pub const ACCENT_PLAN: Color = Color::Rgb(66, 135, 245);
11681168
/// Accent color for explore mode (amber).

src-rust/crates/tui/src/desktop_upsell_startup.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,11 +154,11 @@ pub fn render_desktop_upsell_startup(
154154
" Coven Code Code Desktop ",
155155
Style::default()
156156
.fg(Color::Black)
157-
.bg(Color::Cyan)
157+
.bg(Color::Rgb(167, 139, 250))
158158
.add_modifier(Modifier::BOLD),
159159
))
160160
.borders(Borders::ALL)
161-
.border_style(Style::default().fg(Color::Cyan))
161+
.border_style(Style::default().fg(Color::Rgb(167, 139, 250)))
162162
.render(dialog_area, buf);
163163

164164
let inner = Rect {
@@ -186,7 +186,7 @@ pub fn render_desktop_upsell_startup(
186186
let prefix = if selected { "> " } else { " " };
187187
let label_style = if selected {
188188
Style::default()
189-
.fg(Color::Cyan)
189+
.fg(Color::Rgb(167, 139, 250))
190190
.add_modifier(Modifier::BOLD)
191191
} else {
192192
Style::default().fg(Color::Gray)

src-rust/crates/tui/src/device_auth_dialog.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ pub fn render_device_auth_dialog(
166166
return;
167167
}
168168

169-
let pink = Color::Rgb(233, 30, 99);
169+
let pink = Color::Rgb(139, 92, 246);
170170
let dim = Color::Rgb(90, 90, 90);
171171
let dialog_bg = COVEN_CODE_PANEL_BG;
172172
let green = Color::Rgb(80, 200, 120);

src-rust/crates/tui/src/dialog_select.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,9 +195,9 @@ pub fn render_dialog_select(frame: &mut Frame, state: &DialogSelectState, area:
195195

196196
let dim = Color::Rgb(90, 90, 90);
197197
let dialog_bg = COVEN_CODE_PANEL_BG;
198-
let highlight_bg = Color::Rgb(233, 30, 99); // pink highlight bar
198+
let highlight_bg = Color::Rgb(139, 92, 246); // pink highlight bar
199199
let highlight_fg = Color::White;
200-
let category_fg = Color::Rgb(233, 30, 99); // pink category names
200+
let category_fg = Color::Rgb(139, 92, 246); // pink category names
201201

202202
// ── Darken the entire background ──
203203
render_dark_overlay(frame, area);

src-rust/crates/tui/src/dialogs.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -536,7 +536,7 @@ pub fn render_permission_dialog(frame: &mut Frame, pr: &PermissionRequest, area:
536536
lines.push(Line::from(vec![
537537
Span::styled(
538538
" \u{276F} ",
539-
Style::default().fg(Color::Cyan).add_modifier(Modifier::BOLD),
539+
Style::default().fg(Color::Rgb(167, 139, 250)).add_modifier(Modifier::BOLD),
540540
),
541541
Span::styled(
542542
preview.clone(),
@@ -600,7 +600,7 @@ pub fn render_permission_dialog(frame: &mut Frame, pr: &PermissionRequest, area:
600600
PermissionDialogKind::Bash { .. } | PermissionDialogKind::PowerShell { .. } => {
601601
(Color::Yellow, " Permission Required ")
602602
}
603-
PermissionDialogKind::FileRead { .. } => (Color::Cyan, " File Read Permission "),
603+
PermissionDialogKind::FileRead { .. } => (Color::Rgb(167, 139, 250), " File Read Permission "),
604604
PermissionDialogKind::FileWrite { .. } => (Color::Yellow, " File Write Permission "),
605605
PermissionDialogKind::Generic => (Color::Yellow, " Permission Required "),
606606
};
@@ -1114,7 +1114,7 @@ pub fn render_mcp_approval_dialog(
11141114
Span::styled(" Server: ", Style::default().fg(Color::DarkGray)),
11151115
Span::styled(
11161116
truncate_str(&state.server_name, text_width.saturating_sub(10)),
1117-
Style::default().fg(Color::Cyan).add_modifier(Modifier::BOLD),
1117+
Style::default().fg(Color::Rgb(167, 139, 250)).add_modifier(Modifier::BOLD),
11181118
),
11191119
]));
11201120
let _ = server_label; // suppress unused warning
@@ -1172,7 +1172,7 @@ pub fn render_mcp_approval_dialog(
11721172
let prefix = if is_selected { " \u{25BA} " } else { " " };
11731173
let num = choice.index() + 1;
11741174
let key_style = if is_selected {
1175-
Style::default().fg(Color::Cyan).add_modifier(Modifier::BOLD)
1175+
Style::default().fg(Color::Rgb(167, 139, 250)).add_modifier(Modifier::BOLD)
11761176
} else {
11771177
Style::default().fg(Color::DarkGray)
11781178
};
@@ -1200,10 +1200,10 @@ pub fn render_mcp_approval_dialog(
12001200
.title(Span::styled(
12011201
" MCP Server Connection ",
12021202
Style::default()
1203-
.fg(Color::Cyan)
1203+
.fg(Color::Rgb(167, 139, 250))
12041204
.add_modifier(Modifier::BOLD),
12051205
))
1206-
.border_style(Style::default().fg(Color::Cyan));
1206+
.border_style(Style::default().fg(Color::Rgb(167, 139, 250)));
12071207

12081208
let para = Paragraph::new(lines).block(block);
12091209
para.render(dialog_area, buf);

src-rust/crates/tui/src/diff_viewer.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -977,8 +977,8 @@ fn build_diff_lines(file: &FileDiffStats, width: u16) -> Vec<Line<'static>> {
977977
// Standard single-line rendering
978978
let (marker, content_style) = match diff_line.kind {
979979
DiffLineKind::Header => (
980-
Span::styled("@@ ", Style::default().fg(Color::Cyan)),
981-
Style::default().fg(Color::Cyan),
980+
Span::styled("@@ ", Style::default().fg(Color::Rgb(167, 139, 250))),
981+
Style::default().fg(Color::Rgb(167, 139, 250)),
982982
),
983983
DiffLineKind::Added => (
984984
Span::styled("+ ", Style::default().fg(Color::Green)),

src-rust/crates/tui/src/elicitation_dialog.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -371,11 +371,11 @@ pub fn render_elicitation_dialog(state: &ElicitationDialogState, area: Rect, buf
371371
title,
372372
Style::default()
373373
.fg(Color::Black)
374-
.bg(Color::Cyan)
374+
.bg(Color::Rgb(167, 139, 250))
375375
.add_modifier(Modifier::BOLD),
376376
))
377377
.borders(Borders::ALL)
378-
.border_style(Style::default().fg(Color::Cyan))
378+
.border_style(Style::default().fg(Color::Rgb(167, 139, 250)))
379379
.render(dialog_area, buf);
380380

381381
let inner = Rect {
@@ -405,7 +405,7 @@ pub fn render_elicitation_dialog(state: &ElicitationDialogState, area: Rect, buf
405405
for (idx, field) in state.fields.iter().enumerate() {
406406
let focused = idx == state.active_field;
407407
let label_style = if focused {
408-
Style::default().fg(Color::Cyan).add_modifier(Modifier::BOLD)
408+
Style::default().fg(Color::Rgb(167, 139, 250)).add_modifier(Modifier::BOLD)
409409
} else {
410410
Style::default().fg(Color::Gray)
411411
};
@@ -509,7 +509,7 @@ fn render_field_value_line<'a>(field: &'a ElicitationField, focused: bool, width
509509
let on_cursor = focused && i == sub_cursor;
510510
let check = if is_checked { "[x] " } else { "[ ] " };
511511
let style = if on_cursor {
512-
Style::default().fg(Color::Cyan).add_modifier(Modifier::BOLD)
512+
Style::default().fg(Color::Rgb(167, 139, 250)).add_modifier(Modifier::BOLD)
513513
} else if is_checked {
514514
Style::default().fg(Color::Green)
515515
} else {

src-rust/crates/tui/src/free_mode_dialog.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ pub fn render_free_mode_dialog(frame: &mut Frame, state: &FreeModeDialogState, a
204204
return;
205205
}
206206

207-
let pink = Color::Rgb(233, 30, 99);
207+
let pink = Color::Rgb(139, 92, 246);
208208
let dim = Color::Rgb(90, 90, 90);
209209
let muted = Color::Rgb(180, 180, 180);
210210
let tip = Color::Rgb(120, 210, 150);

src-rust/crates/tui/src/hooks_config_menu.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,7 @@ fn render_matcher_list(state: &HooksConfigMenuState) -> (&'static str, Vec<Line<
435435
lines.push(Line::from(""));
436436
lines.push(Line::from(vec![
437437
Span::styled(" Event: ", Style::default().fg(Color::DarkGray)),
438-
Span::styled(event.to_string(), Style::default().fg(Color::Cyan).add_modifier(Modifier::BOLD)),
438+
Span::styled(event.to_string(), Style::default().fg(Color::Rgb(167, 139, 250)).add_modifier(Modifier::BOLD)),
439439
]));
440440
lines.push(Line::from(""));
441441

@@ -459,7 +459,7 @@ fn render_hook_list(state: &HooksConfigMenuState) -> (&'static str, Vec<Line<'st
459459
lines.push(Line::from(""));
460460
lines.push(Line::from(vec![
461461
Span::styled(" ", Style::default()),
462-
Span::styled(event.to_string(), Style::default().fg(Color::Cyan)),
462+
Span::styled(event.to_string(), Style::default().fg(Color::Rgb(167, 139, 250))),
463463
Span::styled(" / ", Style::default().fg(Color::DarkGray)),
464464
Span::styled(matcher.to_string(), Style::default().fg(Color::White).add_modifier(Modifier::BOLD)),
465465
]));

0 commit comments

Comments
 (0)