style(coder-lite): dim notice and reasoning messages to half intensity

3d29337200b1 · AtlantisPleb · · parent 23f70a58216d

style(coder-lite): dim notice and reasoning messages to half intensity

Add DIM_TEXT_COLOR as the midpoint between TEXT_COLOR and the
background, and render Role::Notice and Role::Reasoning entries in that
half-amber. Token counts, export messages, opening status, and other
system notices now sit visually behind the user and assistant turns.

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-Authored-By
Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>

Deploy story

What this commit did to the running system — joined from the forge receipt chain, the part a commit page elsewhere cannot show.

Not deployed through the forge lane

No push, promotion, build, or deploy receipt references this commit (receipts are scanned over a bounded recent window). Changes shipped by full node replacement carry their proof in the release gate receipt instead.

Changed files

  • modified crates/coder-lite/src/markdown/theme.rs
  • modified crates/coder-lite/src/tui.rs

Diff

2 files changed, +19 -7

crates/coder-lite/src/markdown/theme.rs modified +6

@@ -18,6 +18,12 @@ use super::syntax::Syntect;

18 18
/// coder-lite's single foreground amber.
19 19
pub const TEXT_COLOR: Color = Color::Rgb(255, 176, 0);
20 20
21
/// A dimmer amber for notices, tokens, and other secondary text.
22
///
23
/// It is the halfway point between `TEXT_COLOR` and the background, so it
24
/// reads at half the intensity of the main text.
25
pub const DIM_TEXT_COLOR: Color = Color::Rgb(131, 91, 0);
26
21 27
/// coder-lite's single background.
22 28
pub const BACKGROUND_COLOR: Color = Color::Rgb(8, 6, 0);
23 29
crates/coder-lite/src/tui.rs modified +13 -7

@@ -12,7 +12,7 @@ use std::time::{SystemTime, UNIX_EPOCH};

12 12
13 13
use openagents_cli::composer::Composer;
14 14
15
use crate::markdown::theme::{BACKGROUND_COLOR, TEXT_COLOR};
15
use crate::markdown::theme::{BACKGROUND_COLOR, DIM_TEXT_COLOR, TEXT_COLOR};
16 16
use crate::osc8::PlacedLink;
17 17
use crate::transcript::MarkdownContent;
18 18

@@ -450,21 +450,27 @@ fn render_entry(

450 450
                _ => ("", "⏺", " ", "  ", width.saturating_sub(2)),
451 451
            };
452 452
453
            let role_style = if matches!(entry.role, Role::Notice | Role::Reasoning) {
454
                Style::default().fg(DIM_TEXT_COLOR).bg(BACKGROUND_COLOR)
455
            } else {
456
                text_style
457
            };
458
453 459
            let chunks = wrap_text(&entry.text, first_body);
454 460
455 461
            let mut lines = Vec::new();
456 462
            for (i, chunk) in chunks.iter().enumerate() {
457 463
                if i == 0 {
458 464
                    lines.push(Line::from(vec![
459
                        Span::styled(first_prefix, text_style),
460
                        Span::styled(marker, text_style),
461
                        Span::styled(marker_space, text_style),
462
                        Span::styled(chunk.clone(), text_style),
465
                        Span::styled(first_prefix, role_style),
466
                        Span::styled(marker, role_style),
467
                        Span::styled(marker_space, role_style),
468
                        Span::styled(chunk.clone(), role_style),
463 469
                    ]));
464 470
                } else {
465 471
                    lines.push(Line::from(vec![
466
                        Span::styled(rest_indent, text_style),
467
                        Span::styled(chunk.clone(), text_style),
472
                        Span::styled(rest_indent, role_style),
473
                        Span::styled(chunk.clone(), role_style),
468 474
                    ]));
469 475
                }
470 476
            }

This page updates live while a promote is in flight · changelog